diff --git a/.eslintrc-code-compatibility.js b/.eslintrc-code-compatibility.js index 92080c6c42f..c2a8c26acab 100644 --- a/.eslintrc-code-compatibility.js +++ b/.eslintrc-code-compatibility.js @@ -14,6 +14,7 @@ module.exports = { ], ignorePatterns: [ '/libs/deps/*', + '/libs/navigation/dist/*', '/tools/loc/*', ], }; diff --git a/.eslintrc.js b/.eslintrc.js index f24adfa3872..e7c17dc5fb5 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -62,6 +62,7 @@ module.exports = { '/libs/features/mas/*', '/tools/loc/*', '/libs/features/spectrum-web-components/*', + '/libs/navigation/dist/*', ], plugins: [ 'chai-friendly', diff --git a/.github/codeql/codeql-config.yml b/.github/codeql/codeql-config.yml index 60574a6b608..af3256cd869 100644 --- a/.github/codeql/codeql-config.yml +++ b/.github/codeql/codeql-config.yml @@ -6,3 +6,4 @@ paths-ignore: - 'tools/translation/**' - node_modules - libs/deps/mas + - libs/features/mas/dist diff --git a/.github/workflows/README.md b/.github/workflows/README.md new file mode 100644 index 00000000000..bed05aa17e9 --- /dev/null +++ b/.github/workflows/README.md @@ -0,0 +1,5 @@ +### Description +Based on the [Github security guidance](https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions#using-third-party-actions) we pinned actions to a full length commit SHA's rather than tags, which are more common. +In order to upgrade an action, simply go to the Github repo such as: https://github.com/actions/checkout/releases - find the latest release and the commit-SHA that is connected to it and replace it for all actions that use the 3rd party package you want to upgrade. + +To QA the change, when you run the action on your own fork, you can simply validate it's still running as expected and manages to download the 3rd party package within the scope of the action. \ No newline at end of file diff --git a/.github/workflows/check-feds-files.js b/.github/workflows/check-feds-files.js deleted file mode 100644 index 4b84020a4b8..00000000000 --- a/.github/workflows/check-feds-files.js +++ /dev/null @@ -1,64 +0,0 @@ -const { slackNotification, getLocalConfigs } = require('./helpers.js'); - -const fedsFolders = [ - 'libs/blocks/global-navigation', - 'libs/blocks/global-footer', - 'libs/blocks/modal', - 'libs/navigation', - 'libs/scripts/delayed', - 'libs/utils/utils', - 'libs/utils/locales', - 'libs/utils/federated', - 'libs/martech/attributes', -]; - -const safely = (fn) => { - return (...args) => { - try { - fn(...args); - } catch (e) { - console.error(e); - } - }; -} - -const main = safely(async ({ github, context }) => { - const number = context.issue?.number || process.env.ISSUE; - const owner = context.repo.owner; - const repo = context.repo.repo; - const { data: files } = await github.rest.pulls.listFiles({ - owner, - repo, - pull_number: number, - }); - - const affectedFedsFiles = files - .map(({ filename }) => filename) - .filter(filename => fedsFolders.some(x => filename.startsWith(x))); - - const message = `> PR affects:\n> \`\`\`${affectedFedsFiles.join('\n')}\`\`\``; - const webhook = process.env.FEDS_WATCH_HOOK; - - if (!affectedFedsFiles.length) { - console.log("No affected Feds Files. Exiting"); - return; - } - slackNotification(message, webhook) - .then((resp) => { - if (resp.ok) console.log('message posted on slack'); - else throw new Error(resp); - }) - .catch(console.error); -}); - -if (process.env.LOCAL_RUN) { - const { github, context } = getLocalConfigs(); - main({ - github, - context, - }); -} - - - -module.exports = main diff --git a/.github/workflows/check-feds-files.yaml b/.github/workflows/check-feds-files.yaml deleted file mode 100644 index 7c4d3db8214..00000000000 --- a/.github/workflows/check-feds-files.yaml +++ /dev/null @@ -1,25 +0,0 @@ -name: Feds File Watch - -on: - pull_request_target: - types: [opened, labeled] - -env: - FEDS_WATCH_HOOK: ${{ secrets.FEDS_WATCH_HOOK }} - -jobs: - send_alert: - if: github.repository_owner == 'adobecom' - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.base.ref }} - - - name: Send Slack messages if a PR contains feds related files. - uses: actions/github-script@v7 - with: - script: | - const main = require('./.github/workflows/check-feds-files.js') - main({ github, context }) diff --git a/.github/workflows/code-compatibility.yaml b/.github/workflows/code-compatibility.yaml index 9271d7bfd74..b74e963b562 100644 --- a/.github/workflows/code-compatibility.yaml +++ b/.github/workflows/code-compatibility.yaml @@ -12,7 +12,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Check for unsupported functions run: | diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 2ab0be9b4fe..41781708d67 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -34,11 +34,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v3 + uses: github/codeql-action/init@6bb031afdd8eb862ea3fc1848194185e076637e5 with: languages: ${{ matrix.language }} config-file: ./.github/codeql/codeql-config.yml @@ -46,7 +46,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v3 + uses: github/codeql-action/autobuild@6bb031afdd8eb862ea3fc1848194185e076637e5 # â„šī¸ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -59,6 +59,6 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 + uses: github/codeql-action/analyze@6bb031afdd8eb862ea3fc1848194185e076637e5 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/dispatch.yml b/.github/workflows/dispatch.yml index eb13db1da31..ff4d8da6b52 100644 --- a/.github/workflows/dispatch.yml +++ b/.github/workflows/dispatch.yml @@ -13,8 +13,8 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@v4 - - uses: dorny/paths-filter@v3 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 id: changes with: base: ${{ github.ref }} @@ -23,7 +23,7 @@ jobs: - 'libs/**' - if: steps.changes.outputs.src == 'true' name: Trigger DC Workflow - uses: actions/github-script@v7 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea with: github-token: ${{ secrets.DC_PAT }} script: | diff --git a/.github/workflows/fg-sync-repos.yml b/.github/workflows/fg-sync-repos.yml index 454fad62bc8..4326e9e27a6 100644 --- a/.github/workflows/fg-sync-repos.yml +++ b/.github/workflows/fg-sync-repos.yml @@ -22,7 +22,7 @@ jobs: steps: - name: Generate a token id: generate_token - uses: actions/create-github-app-token@v1 + uses: actions/create-github-app-token@21cfef2b496dd8ef5b904c159339626a10ad380e with: app-id: ${{ secrets.FG_SYNC_APP_ID }} private-key: ${{ secrets.FG_SYNC_APP_PRIVATE_KEY }} @@ -30,7 +30,7 @@ jobs: repositories: "milo-pink" - name: Checkout Repo - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: persist-credentials: false ref: ${{ inputs.syncBranch || github.ref_name }} diff --git a/.github/workflows/helpers.js b/.github/workflows/helpers.js index dcc7b0025d2..6fa63b0b9be 100644 --- a/.github/workflows/helpers.js +++ b/.github/workflows/helpers.js @@ -3,57 +3,83 @@ const owner = process.env.REPO_OWNER || ''; // example owner: adobecom const repo = process.env.REPO_NAME || ''; // example repo name: milo const auth = process.env.GH_TOKEN || ''; // https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens -const CURRENT_YEAR = 2024; const RCPDates = [ { - start: new Date('2024-05-26T00:00:00-07:00'), - end: new Date('2024-06-01T00:00:00-07:00'), + start: new Date('2024-12-12T11:00:00-08:00'), + end: new Date('2024-12-12T14:00:00-08:00'), }, { - start: new Date('2024-06-13T11:00:00-07:00'), - end: new Date('2024-06-13T14:00:00-07:00'), + start: new Date('2024-12-15T00:00:00-08:00'), + end: new Date('2025-01-02T00:00:00-08:00'), }, { - start: new Date('2024-06-30T00:00:00-07:00'), - end: new Date('2024-07-06T00:00:00-07:00'), + start: new Date('2025-02-23T00:00:00-08:00'), + end: new Date('2025-03-01T00:00:00-08:00'), }, { - start: new Date('2024-08-25T00:00:00-07:00'), - end: new Date('2024-08-31T00:00:00-07:00'), + start: new Date('2025-03-12T11:00:00-07:00'), + end: new Date('2025-03-12T14:00:00-07:00'), }, { - start: new Date('2024-09-12T11:00:00-07:00'), - end: new Date('2024-09-12T14:00:00-07:00'), + start: new Date('2025-03-17T00:00:00-07:00'), + end: new Date('2025-03-20T17:00:00-07:00'), }, { - start: new Date('2024-10-07T00:00:00-07:00'), - end: new Date('2024-10-18T17:00:00-07:00'), + start: new Date('2025-05-25T00:00:00-07:00'), + end: new Date('2025-05-31T00:00:00-07:00'), }, { - start: new Date('2024-11-17T00:00:00-08:00'), - end: new Date('2024-11-30T00:00:00-08:00'), + start: new Date('2025-06-12T11:00:00-07:00'), + end: new Date('2025-06-12T14:00:00-07:00'), }, { - start: new Date('2024-12-12T11:00:00-08:00'), - end: new Date('2024-12-12T14:00:00-08:00'), + start: new Date('2025-06-29T00:00:00-07:00'), + end: new Date('2025-07-05T00:00:00-07:00'), }, { - start: new Date('2024-12-15T00:00:00-08:00'), - end: new Date('2025-01-02T00:00:00-08:00'), + start: new Date('2025-08-24T00:00:00-07:00'), + end: new Date('2025-08-30T00:00:00-07:00'), + }, + { + start: new Date('2025-09-11T11:00:00-07:00'), + end: new Date('2025-09-11T14:00:00-07:00'), + }, + { + start: new Date('2025-10-06T00:00:00-07:00'), + end: new Date('2025-10-16T17:00:00-07:00'), + }, + { + start: new Date('2025-11-16T00:00:00-08:00'), + end: new Date('2025-11-29T00:00:00-08:00'), + }, + { + start: new Date('2025-12-10T11:00:00-08:00'), + end: new Date('2025-12-10T14:00:00-08:00'), + }, + { + start: new Date('2025-12-14T00:00:00-08:00'), + end: new Date('2026-01-04T00:00:00-08:00'), }, ]; -const isWithinRCP = (offset = 0) => { +const isShortRCP = (start, end) => { + return ((end - start) / (1000 * 60 * 60)) < 24; +}; + +const isWithinRCP = ({ offset = 0, excludeShortRCP = false } = {}) => { const now = new Date(); - if (now.getFullYear() !== CURRENT_YEAR) { - console.log(`ADD NEW RCPs for ${CURRENT_YEAR + 1}`); + const lastRcpDate = RCPDates.reverse()[0]; + if (now > lastRcpDate.end) { + console.log('ADD NEW RCPs for the current year'); return true; } if (RCPDates.some(({ start, end }) => { const adjustedStart = new Date(start); adjustedStart.setDate(adjustedStart.getDate() - offset); - return start <= now && now <= end + const match = adjustedStart <= now && now <= end; + if (!match || (excludeShortRCP && isShortRCP(start, end))) return false; + return true; })) { console.log( 'Current date is within a RCP (2 days earlier for stage, to keep stage clean & make CSO contributions during an RCP easier). Stopping execution.' @@ -138,6 +164,7 @@ const getReviews = ({ pr, github, owner, repo }) => owner, repo, pull_number: pr.number, + per_page: 100, }) .then(({ data }) => { pr.reviews = data; @@ -148,6 +175,7 @@ module.exports = { getLocalConfigs, slackNotification, pulls: { addLabels, addFiles, getChecks, getReviews }, + isShortRCP, isWithinRCP, RCPDates, }; diff --git a/.github/workflows/high-impact-alert.yml b/.github/workflows/high-impact-alert.yml index 3c3ea56f2d6..3b7a94c01ff 100644 --- a/.github/workflows/high-impact-alert.yml +++ b/.github/workflows/high-impact-alert.yml @@ -15,12 +15,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: ref: ${{ github.event.pull_request.base.ref }} - name: Send Slack message for high impact PRs - uses: actions/github-script@v7 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea with: script: | const main = require('./.github/workflows/high-impact-alert.js') diff --git a/.github/workflows/label-zero-impact.yaml b/.github/workflows/label-zero-impact.yaml index ee7a4322a80..971202778ed 100644 --- a/.github/workflows/label-zero-impact.yaml +++ b/.github/workflows/label-zero-impact.yaml @@ -10,10 +10,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Add the zero impact label - uses: actions/github-script@v7 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea with: script: | const main = require('./.github/workflows/label-zero-impact.js') diff --git a/.github/workflows/mark-stale-prs.yaml b/.github/workflows/mark-stale-prs.yaml index 788f30eaf7c..6cf2e3599f9 100644 --- a/.github/workflows/mark-stale-prs.yaml +++ b/.github/workflows/mark-stale-prs.yaml @@ -9,7 +9,7 @@ jobs: if: github.repository_owner == 'adobecom' runs-on: ubuntu-latest steps: - - uses: actions/stale@v9 + - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-pr-message: 'This PR has not been updated recently and will be closed in 7 days if no action is taken. Please ensure all checks are passing, https://github.com/orgs/adobecom/discussions/997 provides instructions. If the PR is ready to be merged, please mark it with the "Ready for Stage" label.' diff --git a/.github/workflows/merge-to-main.js b/.github/workflows/merge-to-main.js index efbc9e55bc1..286ddaff196 100644 --- a/.github/workflows/merge-to-main.js +++ b/.github/workflows/merge-to-main.js @@ -9,6 +9,7 @@ const { const PR_TITLE = '[Release] Stage to Main'; const STAGE = 'stage'; const PROD = 'main'; +const MIN_SOT_APPROVALS = process.env.MIN_SOT_APPROVALS ? Number(process.env.MIN_SOT_APPROVALS) : 4; let github, owner, repo; @@ -40,7 +41,7 @@ const main = async (params) => { const stageToMainPR = await getStageToMainPR(); const signOffs = stageToMainPR?.labels.filter((l) => l.includes('SOT')); console.log(`${signOffs.length} SOT labels on PR ${stageToMainPR.number}`); - if (signOffs.length >= 4) { + if (signOffs.length >= MIN_SOT_APPROVALS) { console.log('Stage to Main PR has all required labels. Merging...'); await github.rest.pulls.merge({ owner, diff --git a/.github/workflows/merge-to-main.yaml b/.github/workflows/merge-to-main.yaml index ada833d19fa..cd2e71cbf30 100644 --- a/.github/workflows/merge-to-main.yaml +++ b/.github/workflows/merge-to-main.yaml @@ -9,6 +9,7 @@ on: env: MILO_RELEASE_SLACK_WH: ${{ secrets.MILO_RELEASE_SLACK_WH }} + MIN_SOT_APPROVALS: ${{ secrets.MIN_SOT_APPROVALS }} jobs: merge-to-main: @@ -19,17 +20,17 @@ jobs: if: github.repository_owner == 'adobecom' && (github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' || (github.event_name == 'pull_request' && github.event.pull_request.base.ref == 'main' && github.event.pull_request.head.ref == 'stage')) steps: - - uses: actions/create-github-app-token@v1 + - uses: actions/create-github-app-token@21cfef2b496dd8ef5b904c159339626a10ad380e id: milo-pr-merge-token with: app-id: ${{ secrets.MILO_PR_MERGE_APP_ID }} private-key: ${{ secrets.MILO_PR_MERGE_PRIVATE_KEY }} - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Merge to main - uses: actions/github-script@v7 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea with: github-token: ${{ steps.milo-pr-merge-token.outputs.token }} script: | diff --git a/.github/workflows/merge-to-stage.js b/.github/workflows/merge-to-stage.js index 7c85415da1d..f8b7b60b020 100644 --- a/.github/workflows/merge-to-stage.js +++ b/.github/workflows/merge-to-stage.js @@ -7,7 +7,6 @@ const { // Run from the root of the project for local testing: node --env-file=.env .github/workflows/merge-to-stage.js const PR_TITLE = '[Release] Stage to Main'; -const SEEN = {}; const REQUIRED_APPROVALS = process.env.REQUIRED_APPROVALS ? Number(process.env.REQUIRED_APPROVALS) : 2; const MAX_MERGES = process.env.MAX_PRS_PER_BATCH ? Number(process.env.MAX_PRS_PER_BATCH) : 8; let existingPRCount = 0; @@ -52,7 +51,12 @@ let body = ` const isHighPrio = (labels) => labels.includes(LABELS.highPriority); const isZeroImpact = (labels) => labels.includes(LABELS.zeroImpact); -const hasFailingChecks = (checks) => checks.some(({ conclusion, name }) => name !== 'merge-to-stage' && conclusion === 'failure'); +const hasFailingChecks = (checks) => + checks.some( + ({ conclusion, name }) => + name !== 'merge-to-stage' && + (conclusion === 'in_progress' || conclusion === 'failure') + ); const commentOnPR = async (comment, prNumber) => { console.log(comment); // Logs for debugging the action. @@ -90,7 +94,7 @@ const getPRs = async () => { prs = prs.filter(({ checks, reviews, number, title }) => { if (hasFailingChecks(checks)) { - commentOnPR(`Skipped merging ${number}: ${title} due to failing checks`, number); + commentOnPR(`Skipped merging ${number}: ${title} due to failing or running checks`, number); return false; } @@ -127,18 +131,6 @@ const merge = async ({ prs, type }) => { for await (const { number, files, html_url, title } of prs) { try { if (mergeLimitExceeded()) return; - const fileOverlap = files.find((file) => SEEN[file]); - if (fileOverlap) { - commentOnPR( - `Skipped ${number}: "${title}" due to file "${fileOverlap}" overlap. Merging will be attempted in the next batch`, - number, - ); - continue; - } - if (type !== LABELS.zeroImpact) { - files.forEach((file) => (SEEN[file] = true)); - } - if (!process.env.LOCAL_RUN) { await github.rest.pulls.merge({ owner, @@ -161,7 +153,6 @@ const merge = async ({ prs, type }) => { ).catch(console.error); await new Promise((resolve) => setTimeout(resolve, 5000)); } catch (error) { - files.forEach((file) => (SEEN[file] = false)); commentOnPR(`Error merging ${number}: ${title} ${error.message}`, number); } } @@ -172,10 +163,6 @@ const getStageToMainPR = () => github.rest.pulls .then(({ data } = {}) => data.find(({ title } = {}) => title === PR_TITLE)) .then((pr) => pr && addLabels({ pr, github, owner, repo })) .then((pr) => pr && addFiles({ pr, github, owner, repo })) - .then((pr) => { - pr?.files.forEach((file) => (SEEN[file] = true)); - return pr; - }); const openStageToMainPR = async () => { const { data: comparisonData } = await github.rest.repos.compareCommits({ @@ -231,7 +218,7 @@ const main = async (params) => { github = params.github; owner = params.context.repo.owner; repo = params.context.repo.repo; - if (isWithinRCP(process.env.STAGE_RCP_OFFSET_DAYS || 2)) return console.log('Stopped, within RCP period.'); + if (isWithinRCP({ offset: process.env.STAGE_RCP_OFFSET_DAYS || 2, excludeShortRCP: true })) return console.log('Stopped, within RCP period.'); try { const stageToMainPR = await getStageToMainPR(); diff --git a/.github/workflows/merge-to-stage.yaml b/.github/workflows/merge-to-stage.yaml index ee491407eba..e320dc5e6c1 100644 --- a/.github/workflows/merge-to-stage.yaml +++ b/.github/workflows/merge-to-stage.yaml @@ -22,17 +22,17 @@ jobs: environment: milo_pr_merge steps: - - uses: actions/create-github-app-token@v1 + - uses: actions/create-github-app-token@21cfef2b496dd8ef5b904c159339626a10ad380e id: milo-pr-merge-token with: app-id: ${{ secrets.MILO_PR_MERGE_APP_ID }} private-key: ${{ secrets.MILO_PR_MERGE_PRIVATE_KEY }} - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Merge to stage or queue to merge - uses: actions/github-script@v7 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea with: github-token: ${{ steps.milo-pr-merge-token.outputs.token }} script: | diff --git a/.github/workflows/pr-reminders.yaml b/.github/workflows/pr-reminders.yaml index 51d7e0c16ad..df8f443bef1 100644 --- a/.github/workflows/pr-reminders.yaml +++ b/.github/workflows/pr-reminders.yaml @@ -12,10 +12,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Remind PR initiators - uses: actions/github-script@v7 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea with: script: | const main = require('./.github/workflows/pr-reminders.js') diff --git a/.github/workflows/rcp-notifier.js b/.github/workflows/rcp-notifier.js index ad5bdd2cde2..e9cf865a712 100644 --- a/.github/workflows/rcp-notifier.js +++ b/.github/workflows/rcp-notifier.js @@ -2,10 +2,13 @@ const { slackNotification, getLocalConfigs, RCPDates, + isShortRCP, } = require('./helpers.js'); -const isWithin24Hours = (targetDate) => - Math.abs(new Date() - targetDate) <= 24 * 60 * 60 * 1000; +const isWithin24Hours = (targetDate) => { + const now = new Date(); + return now < targetDate && new Date(now.getTime() + 24 * 60 * 60 * 1000) > targetDate; +}; const calculateDateOffset = (date, offset) => { const newDate = new Date(date); @@ -19,19 +22,20 @@ const main = async () => { for (const rcp of RCPDates) { const start = new Date(rcp.start); const end = new Date(rcp.end); - const tenDaysBefore = calculateDateOffset(start, 10); - const fourDaysBefore = calculateDateOffset(start, 4); + const isShort = isShortRCP(start, end); + const firstNoticeOffset = calculateDateOffset(start, 13); + const lastNoticeOffset = calculateDateOffset(start, 6); const stageOffset = Number(process.env.STAGE_RCP_OFFSET_DAYS) || 2; const slackText = (days) => `Reminder RCP starts in ${days} days: from ${start.toUTCString()} to ${end.toUTCString()}. Merges to stage will be disabled beginning ${calculateDateOffset(start, stageOffset).toUTCString()}.`; - if (isWithin24Hours(tenDaysBefore)) { - console.log('Is within 24 hours of 10 days before RCP'); - await slackNotification(slackText(10), process.env.MILO_DEV_HOOK); + if (isWithin24Hours(firstNoticeOffset) && !isShort) { + console.log('Is within 24 hours of 13 days before RCP'); + await slackNotification(slackText(13), process.env.MILO_DEV_HOOK); } - if (isWithin24Hours(fourDaysBefore)) { - console.log('Is within 24 hours of 4 days before RCP'); - await slackNotification(slackText(4), process.env.MILO_DEV_HOOK); + if (isWithin24Hours(lastNoticeOffset) && !isShort) { + console.log('Is within 24 hours of 6 days before RCP'); + await slackNotification(slackText(6), process.env.MILO_DEV_HOOK); } } diff --git a/.github/workflows/rcp-notifier.yml b/.github/workflows/rcp-notifier.yml index e9bbae768d7..dedca2af985 100644 --- a/.github/workflows/rcp-notifier.yml +++ b/.github/workflows/rcp-notifier.yml @@ -14,10 +14,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Create RCP Notification - uses: actions/github-script@v7 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea with: script: | const main = require('./.github/workflows/rcp-notifier.js') diff --git a/.github/workflows/release-standalone-feds.yml b/.github/workflows/release-standalone-feds.yml new file mode 100644 index 00000000000..dc24f727690 --- /dev/null +++ b/.github/workflows/release-standalone-feds.yml @@ -0,0 +1,55 @@ +name: Create a Release for Standalone Feds GlobalNav and Footer +on: + workflow_dispatch: + inputs: + version: + description: 'Version' + required: true + type: string + +permissions: + contents: write + +jobs: + release-feds: + name: Release Standalone Feds + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [20.x] + defaults: + run: + working-directory: ./libs/navigation + steps: + - name: Checkout repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 + with: + fetch-depth: 2 + + - name: Set up Node.js ${{ matrix.node-version }} + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies + run: npm install + + - name: Build Files + run: node ./build.mjs + + - name: Generate tarball + run: npm pack + + - name: Create Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release create "feds-standalone-v${{ inputs.version }}" \ + --repo="$GITHUB_REPOSITORY" \ + --title="@adobecom/standalone-feds v${{ inputs.version }} Release" \ + --generate-notes + + - name: Upload Files to Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh release upload "feds-standalone-v${{ inputs.version }}" "adobecom-standalone-feds-${{ inputs.version }}.tgz" diff --git a/.github/workflows/run-lint.yaml b/.github/workflows/run-lint.yaml index 25d9185cf50..014bfcb55e3 100644 --- a/.github/workflows/run-lint.yaml +++ b/.github/workflows/run-lint.yaml @@ -10,9 +10,9 @@ jobs: name: Running eslint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e with: node-version: 20 @@ -20,7 +20,7 @@ jobs: run: npm ci - name: Run eslint on changed files - uses: tj-actions/eslint-changed-files@v25 + uses: tj-actions/eslint-changed-files@74f98653675512158746d3136cd2d9326fbfb6e1 with: config_path: ".eslintrc.js" # ignore_path: "/path/to/.eslintignore" diff --git a/.github/workflows/run-mas-tests.yaml b/.github/workflows/run-mas-tests.yaml index c5ccba75b7e..e427128b2f1 100644 --- a/.github/workflows/run-mas-tests.yaml +++ b/.github/workflows/run-mas-tests.yaml @@ -14,12 +14,12 @@ jobs: node-version: [20.x] steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 2 - name: Set up Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e with: node-version: ${{ matrix.node-version }} @@ -32,15 +32,8 @@ jobs: working-directory: libs/features/mas - name: Upload commerce coverage to Codecov - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@0565863a31f2c772f9f0395002a31e3f06189574 with: - name: mas-commerce + name: mas token: ${{ secrets.CODECOV_TOKEN }} - files: libs/features/mas/commerce/coverage/lcov.info - - - name: Upload web-components coverage to Codecov - uses: codecov/codecov-action@v4 - with: - name: mas-web-components - token: ${{ secrets.CODECOV_TOKEN }} - files: libs/features/mas/web-components/coverage/lcov.info + files: libs/features/mas/coverage/lcov.info diff --git a/.github/workflows/run-nala-circleci.yml b/.github/workflows/run-nala-circleci.yml index a2a7e963bff..d7b115959d0 100644 --- a/.github/workflows/run-nala-circleci.yml +++ b/.github/workflows/run-nala-circleci.yml @@ -1,9 +1,7 @@ name: Nala Tests on CircleCI on: - push: - branches: - - stage + workflow_dispatch: jobs: trigger-circleci: @@ -15,4 +13,4 @@ jobs: curl -X POST 'https://circle.ci.adobe.com/api/v2/project/gh/wcms/nala/pipeline' \ -H 'Circle-Token: ${{ secrets.CCI_TOKEN }}' \ -H 'content-type: application/json' \ - -d "{\"branch\":\"main\"}" \ No newline at end of file + -d "{\"branch\":\"main\"}" diff --git a/.github/workflows/run-nala-default.yml b/.github/workflows/run-nala-default.yml index 4031be7c8de..2e62b9de910 100644 --- a/.github/workflows/run-nala-default.yml +++ b/.github/workflows/run-nala-default.yml @@ -10,6 +10,8 @@ on: - stage - main types: [opened, synchronize, reopened] + + workflow_dispatch: jobs: run-nala-tests: @@ -20,12 +22,12 @@ jobs: node-version: [20.x] steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 2 - name: Set up Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e with: node-version: ${{ matrix.node-version }} diff --git a/.github/workflows/run-nala-milolibs.yaml b/.github/workflows/run-nala-milolibs.yaml index eb159474935..c6258b42bd7 100644 --- a/.github/workflows/run-nala-milolibs.yaml +++ b/.github/workflows/run-nala-milolibs.yaml @@ -30,7 +30,7 @@ jobs: steps: - name: Check out repository - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Set environment variables run: | @@ -46,7 +46,7 @@ jobs: HLX_TKN: ${{ secrets.HLX_TKN }} SLACK_WH: ${{ secrets.SLACK_WH }} - name: Persist JSON Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 if: always() with: name: nala-results diff --git a/.github/workflows/run-nala.yml b/.github/workflows/run-nala.yml index 286b7df3c97..eca2c6b2924 100644 --- a/.github/workflows/run-nala.yml +++ b/.github/workflows/run-nala.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Check out repository - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Run Nala Tests (Consuming Apps) uses: adobecom/nala@main # Change if doing dev work env: diff --git a/.github/workflows/run-tests.yaml b/.github/workflows/run-tests.yaml index d085407ac76..0fe822c35e8 100644 --- a/.github/workflows/run-tests.yaml +++ b/.github/workflows/run-tests.yaml @@ -14,14 +14,15 @@ jobs: node-version: [20.x] steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 2 - name: Set up Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e with: node-version: ${{ matrix.node-version }} + cache: 'npm' - name: Install dependencies run: npm install @@ -30,7 +31,7 @@ jobs: run: npm test - name: Upload coverage to Codecov - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@0565863a31f2c772f9f0395002a31e3f06189574 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage/lcov.info diff --git a/.github/workflows/servicenow.py b/.github/workflows/servicenow.py new file mode 100644 index 00000000000..37303857ac7 --- /dev/null +++ b/.github/workflows/servicenow.py @@ -0,0 +1,245 @@ +import requests +import time +import datetime +import random +import json +import os +import sys + +def find_string_in_json(json_data, target_string): + """ + Finds a target string in a JSON object. + + Args: + json_data (dict or list): The JSON data to search. + target_string (str): The string to find. + + Returns: + bool: True if the string is found, False otherwise. + """ + + if isinstance(json_data, dict): + for key, value in json_data.items(): + if isinstance(value, str) and target_string in value: + return True + elif isinstance(value, (dict, list)): + if find_string_in_json(value, target_string): + return True + elif isinstance(json_data, list): + for item in json_data: + if isinstance(item, str) and target_string in item: + return True + elif isinstance(item, (dict, list)): + if find_string_in_json(item, target_string): + return True + + return False + +def backoff_with_timeout(operation, max_retries=5, base_delay=1, max_delay=60, timeout=300): + """ + Smart back off for operations that may require multiple attempts with increasing intervals between each + execution until a successful return. Allows max attempts and/or timeout to ensure infinite looping doesn't + happen. + + Args: + operation (_type_): The operation you would like to attempt in intervals. + max_retries (int, optional): The max amount of attempts allowed for the smart backoff. Defaults to 5. + base_delay (int, optional): The starting delay for the random amount to calculate intervals. Defaults to 1. + max_delay (int, optional): The maximum delay for the random amount to calculate intervals. Defaults to 60. + timeout (int, optional): The max amount of time allowed for the smart backoff. Defaults to 300. + + Raises: + TimeoutError: If the max amount of attempts or timeout is reached before a successful operation return happens, a timeout exception is thrown. + + Returns: + _type_: The return value from the sent in operation that requires a smart backoff. + """ + + start_time = time.time() + attempts = 0 + while attempts <= max_retries and (time.time() - start_time) < timeout: + try: + print("Attempting ServiceNow API operation...") + return operation() # Attempt the operation + except Exception as e: + attempts += 1 + if attempts > max_retries or (time.time() - start_time) >= timeout: + raise # Re-raise the exception if max retries or timeout is reached + + delay = min(base_delay * (2 ** (attempts - 1)), max_delay) + random.uniform(0, 0.1 * base_delay) + time.sleep(delay) + raise TimeoutError("Operation timed out after {} seconds or {} retries, whatever came first.".format(timeout, max_retries)) + +def get_cmr_id_operation(): + """ + Operation to retrieve a Change Management Request ID from ServiceNow + + Raises: + Exception: If the GET request returns a non 200 response. + Exception: If the GET request is successful but returns a error message payload. + Exception: If the GET request is successful but returns an "Unknown" status message in payload. + + Returns: + _type_: The Change ID from the JSON payload + """ + response = requests.get(servicenow_get_cmr_url, headers=headers) + JSON_PARSE = json.loads(response.text) + + if response.status_code != 200: + print("GET failed with response code: ", response.status_code) + print(response.text) + raise Exception("CMR ID Retrieval Operation failed...") + elif find_string_in_json(JSON_PARSE, "error"): + print("CMR ID retrieval failed with response code: ", response.status_code) + print(response.text) + raise Exception("CMR ID Retrieval Operation failed...") + else: + if find_string_in_json(JSON_PARSE, "Unknown"): + print("CMR ID retrieval failed with response code: ", response.status_code) + print(response.text) + raise Exception("CMR ID Retrieval Operation failed...") + + print("CMR ID retrieval was successful: ", response.status_code) + print(response.text) + + return JSON_PARSE["result"]["changeId"] + +# Execute Script logic: +# python3 servicenow.py +if __name__ == "__main__": + + print("Starting CMR Action...") + + print("Setting Planned Maintenance Time Windows for CMR...") + start_time = (datetime.datetime.now() + datetime.timedelta(seconds = 10)).timestamp() + end_time = (datetime.datetime.now() + datetime.timedelta(minutes = 10)).timestamp() + + print("Set Release Summary for CMR...") + release_title = os.environ['PR_TITLE'] + release_details = os.environ['PR_BODY'] + pr_num = os.environ['PR_NUMBER'] + pr_created = os.environ['PR_CREATED_AT'] + pr_merged = os.environ['PR_MERGED_AT'] + release_summary = f"Release_Details: {release_details} \n\nPull Request Number: {pr_num} \nPull Request Created At: {pr_created} \nPull Request Merged At: {pr_merged}" + + print("Getting IMS Token") + ims_url = 'https://ims-na1.adobelogin.com/ims/token' + headers = {"Content-Type":"multipart/form-data"} + data = { + 'client_id': os.environ['IMSACCESS_CLIENT_ID'], + 'client_secret': os.environ['IMSACCESS_CLIENT_SECRET'], + 'grant_type': "authorization_code", + 'code': os.environ['IMSACCESS_AUTH_CODE'] + } + response = requests.post(ims_url, data=data) + jsonParse = json.loads(response.text) + + if response.status_code != 200: + print("POST failed with response code: ", response.status_code) + print(response.text) + sys.exit(1) + elif find_string_in_json(jsonParse, "error"): + print("IMS token request failed with response code: ", response.status_code) + print(response.text) + sys.exit(1) + else: + print("IMS token request was successful: ", response.status_code) + token = jsonParse["access_token"] + + print("Create CMR in ServiceNow...") + + servicenow_cmr_url = 'https://ipaasapi.adobe-services.com/change_management/changes' + headers = { + "Accept":"application/json", + "Authorization":token, + "Content-Type":"application/json", + "api_key":os.environ['IPAAS_KEY'] + } + data = { + "title":release_title, + "description":release_summary, + "instanceIds": [ 537445 ], + "plannedStartDate": start_time, + "plannedEndDate": end_time, + "coordinator": "narcis@adobe.com", + "customerImpact": "No Impact", + "changeReason": [ "New Features", "Bug Fixes", "Enhancement", "Maintenance", "Security" ], + "preProductionTestingType": [ "End-to-End", "Functional", "Integrations", "QA", "Regression", "UAT", "Unit Test" ], + "backoutPlanType": "Roll back", + "approvedBy": [ "casalino@adobe.com", "jmichnow@adobe.com", "mauchley@adobe.com", "bbalakrishna@adobe.com", "tuscany@adobe.com", "brahmbha@adobe.com" ], + "testPlan": "Test plan is documented in the PR link in the Milo repository above. See the PR's merge checks to see Unit and Nala testing.", + "implementationPlan": "The change will be released as part of the continuous deployment of Milo's production branch, i.e., \"main\"", + "backoutPlan": "Revert merge to the Milo production branch by creating a revert commit.", "testResults": "Changes are tested and validated successfully in staging environment. Please see the link of the PR in the description for the test results and/or the \"#nala-test-results\" slack channel." + } + response = requests.post(servicenow_cmr_url, headers=headers, json=data) + jsonParse = json.loads(response.text) + + if response.status_code != 200: + print("POST failed with response code: ", response.status_code) + print(response.text) + sys.exit(1) + elif find_string_in_json(jsonParse, "error"): + print("CMR creation failed with response code: ", response.status_code) + print(response.text) + sys.exit(1) + else: + print("CMR creation was successful: ", response.status_code) + print(response.text) + transaction_id = jsonParse["id"] + + print("Waiting for Transaction from Queue to ServiceNow then Retrieve CMR ID...") + + servicenow_get_cmr_url = f'https://ipaasapi.adobe-services.com/change_management/transactions/{transaction_id}' + headers = { + "Accept":"application/json", + "Authorization":token, + "api_key":os.environ['IPAAS_KEY'] + } + + # Wait 10 seconds to provide time for the transaction to exit the queue and be saved into ServiceNow as a CMR record. + time.sleep(10) + + try: + cmr_id = backoff_with_timeout(get_cmr_id_operation, max_retries=15, base_delay=1, max_delay=60, timeout=120) + print("CMR ID found and validated: ", cmr_id) + except Exception as e: + print("All CMR ID retrieval attempts failed: ", e) + sys.exit(1) + + print("Setting Actual Maintenance Time Windows for CMR...") + actual_start_time = (datetime.datetime.now() - datetime.timedelta(seconds = 10)).timestamp() + actual_end_time = datetime.datetime.now().timestamp() + + print("Closing CMR in ServiceNow...") + + headers = { + "Accept":"application/json", + "Authorization":token, + "Content-Type":"application/json", + "api_key":os.environ['IPAAS_KEY'] + } + data = { + "id": transaction_id, + "actualStartDate": actual_start_time, + "actualEndDate": actual_end_time, + "state": "Closed", + "closeCode": "Successful", + "notes": "The change request is closed as the change was released successfully" + } + response = requests.post(servicenow_cmr_url, headers=headers, json=data) + jsonParse = json.loads(response.text) + + if response.status_code != 200: + print("POST failed with response code: ", response.status_code) + print(response.text) + sys.exit(1) + elif find_string_in_json(jsonParse, "error"): + print("CMR closure failed with response code: ", response.status_code) + print(response.text) + sys.exit(1) + else: + print("CMR closure was successful: ", response.status_code) + print(response.text) + + print("Change Management Request in ServiceNow was successful.") + print ("You can find the change record in ServiceNow https://adobe.service-now.com/now/change-launchpad/homepage, by searching for this ID: ", cmr_id) diff --git a/.github/workflows/servicenow.yaml b/.github/workflows/servicenow.yaml new file mode 100644 index 00000000000..241fe5fa9ab --- /dev/null +++ b/.github/workflows/servicenow.yaml @@ -0,0 +1,44 @@ +# This workflow will install Python dependencies, run CMR creation in ServiceNow +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python + +name: Create CMR in ServiceNow + +on: + pull_request: + types: + - closed + branches: + - main + +permissions: + contents: read + +env: + IMSACCESS_CLIENT_ID: ${{ secrets.IMSACCESS_CLIENT_ID }} + IMSACCESS_CLIENT_SECRET: ${{ secrets.IMSACCESS_CLIENT_SECRET_PROD }} + IMSACCESS_AUTH_CODE: ${{ secrets.IMSACCESS_AUTH_CODE_PROD }} + IPAAS_KEY: ${{ secrets.IPAAS_KEY_PROD }} + PR_TITLE: ${{ github.event.pull_request.title }} + PR_BODY: ${{ github.event.pull_request.body }} + PR_NUMBER: ${{ github.event.pull_request.number }} + PR_CREATED_AT: ${{ github.event.pull_request.created_at }} + PR_MERGED_AT: ${{ github.event.pull_request.merged_at }} + +jobs: + build: + # Only run this workflow on pull requests that have merged and not manually closed by user + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 + - name: Set up Python 3.x, latest minor release + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 + with: + python-version: "3.x" + - name: Install dependencies + run: | + python -m pip install --upgrade pip requests timedelta + - name: Execute script for creating and closing CMR + run: | + python ./.github/workflows/servicenow.py diff --git a/.github/workflows/skms.yaml b/.github/workflows/skms.yaml deleted file mode 100644 index 269cfe89696..00000000000 --- a/.github/workflows/skms.yaml +++ /dev/null @@ -1,130 +0,0 @@ -name: Create CMR in SKMS - -on: - pull_request: - types: - - closed - branches: - - main - -jobs: - create-cmr: - # Only run this workflow on pull requests that have merged and not manually closed by user - if: github.event.pull_request.merged == true - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - # Runs a single command using the runners shell for shell validation - - name: Validate Shell - run: echo Starting CMR Action... - - - name: Check Dependencies - run: | - if ! type "jq" >/dev/null; then - echo "jq is required but not installed" - exit 1 - fi - - if ! type "curl" >/dev/null; then - echo "curl is required but not installed" - exit 1 - fi - - echo "Dependencies check was successful" - - - name: Set Maintenance Time Windows for CMR - run: | - echo "start_time=$(date -d "+60 minutes" '+%Y-%m-%d %H:%M')" >> $GITHUB_ENV - echo "end_time=$(date -d "+90 minutes" '+%Y-%m-%d %H:%M')" >> $GITHUB_ENV - - - name: Set Release Summary for CMR - run: | - function sanitizeStr() { - local str=$1 - - if [ -z "$str" ]; then - echo "First parameter missing, must be a valid string" - return 1 - fi - - str="${str//\"/""}" - str="${str//\'/""}" - str="${str//(/"["}" - str="${str//)/"]"}" - str="${str//$'\r'/"\r"}" - str="${str//$'\n'/"\n"}" - str="${str//$'\t'/"\t"}" - str="${str//\\//}" - str="${str////"\/"}" - - echo "$str" - } - - release_title=$(sanitizeStr "${{ github.event.pull_request.title }}") - release_details=$(sanitizeStr "${{ github.event.pull_request.body }}") - release=Release_Title--"${release_title}"--Release_Details--"${release_details}"--Pull_Request_Number--"${{ github.event.pull_request.number }}"--Pull_Request_Created_At--"${{ github.event.pull_request.created_at }}"--Pull_Request_Merged_At--"${{ github.event.pull_request.merged_at }}" - - echo "release_summary<> $GITHUB_ENV - echo "$release" >> $GITHUB_ENV - echo "RS_EOF" >> $GITHUB_ENV - - - name: Create CMR in SKMS - run: | - DEFAULT_SKMS_URL='api.skms.adobe.com' - - function skms_request() { - local username=$1 - local passkey=$2 - local object=$3 - local method=$4 - local method_params=$5 - local url=$6 - - if [ -z "$username" ]; then - echo "First parameter missing, must be SKMS username" - return 1 - fi - - if [ -z "$passkey" ]; then - echo "Second parameter missing, must be SKMS passkey" - return 1 - fi - - if [ -z "$object" ]; then - echo "Third parameter missing, must be an SKMS dao object" - return 1 - fi - - if [ -z "$method" ]; then - echo "Fourth parameter missing, must be SKMS dao method" - return 1 - fi - - if [ -z "$method_params" ]; then - method_params='{}' - fi - - if [ -z "$url" ]; then - url=$DEFAULT_SKMS_URL - fi - - local params="{\"_username\":\"${username}\",\"_passkey\":\"${passkey}\",\"_object\":\"${object}\",\"_method\": \"${method}\"}" - params=$(echo "$params $method_params" | jq -s add) - - local response=$(curl --write-out "%{http_code}" --silent --output response.txt https://${url}/web_api --data-urlencode "_parameters=${params}") - - if [ $response != "200" ]; then - echo "CURL call returned HTTP status code: $response" - exit 1 - elif grep -q "\"status\":\"error\"" response.txt; then - echo "CMR creation failed with response: " - cat response.txt - exit 1 - else - echo "CMR creation was successful" - fi - } - - skms_request '${{ secrets.SKMS_USER }}' '${{ secrets.SKMS_PASS }}' CmrDao createCmrFromPreapprovedChangeModel '{"change_executor":"${{ secrets.SKMS_CHANGE_EXECUTOR }}","maintenance_window_end_time":"${{ env.end_time }}","maintenance_window_start_time":"${{ env.start_time }}","preapproved_change_model_id":"${{ secrets.SKMS_CHANGE_MODEL_ID }}","summary":"${{ env.release_summary }}"}' diff --git a/.github/workflows/update-dependencies.yaml b/.github/workflows/update-dependencies.yaml index a6cc0aaf326..e59b760882f 100644 --- a/.github/workflows/update-dependencies.yaml +++ b/.github/workflows/update-dependencies.yaml @@ -11,10 +11,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - name: Update file and create PR if needed - uses: actions/github-script@v7 + - name: Update ims lib and create PR if needed + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea with: script: | const updateDependency = require('./.github/workflows/update-script.js') @@ -26,5 +26,18 @@ jobs: branch: 'update-imslib', scriptPath: './libs/deps/imslib.min.js' }) + - name: Update forms2 and create PR if needed + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea + with: + script: | + const updateDependency = require('./.github/workflows/update-script.js') + updateDependency({ + github, + context, + title: '[AUTOMATED-PR] Update forms2.min.js dependency', + path: 'https://engage.adobe.com/js/forms2/js/forms2.min.js', + branch: 'update-forms2', + scriptPath: './libs/deps/forms2.min.js' + }) env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/update-script.js b/.github/workflows/update-script.js index c50dafa93e5..69c4ffca8f5 100644 --- a/.github/workflows/update-script.js +++ b/.github/workflows/update-script.js @@ -17,41 +17,67 @@ const localRunConfigs = { origin: process.env.LOCAL_RUN_ORIGIN || 'origin', }; -const getPrDescription = ({ branch, scriptPath }) => `## Description -Update ${scriptPath} to the latest version - -## Related Issue -Resolves: NO TICKET - AUTOMATED CREATED PR. - -## Testing instructions -1. Signing in should still function -2. Signing out should still work -3. Regression tests on all consumers - -## Test URLs -**Acrobat:** -- Before: https://www.stage.adobe.com/acrobat/online/sign-pdf.html?martech=off -- After: https://www.stage.adobe.com/acrobat/online/sign-pdf.html?martech=off&milolibs=${branch}--milo--adobecom - -**BACOM:** -- Before: https://business.stage.adobe.com/fr/customer-success-stories.html?martech=off -- After: https://business.stage.adobe.com/fr/customer-success-stories.html?martech=off&milolibs=${branch}--milo--adobecom - -**CC:** -- Before: https://main--cc--adobecom.hlx.live/?martech=off -- After: https://main--cc--adobecom.hlx.live/?martech=off&milolibs=${branch}--milo--adobecom - -**Homepage:** -- Before: https://main--homepage--adobecom.hlx.page/homepage/index-loggedout?martech=off -- After: https://main--homepage--adobecom.hlx.page/homepage/index-loggedout?martech=off&milolibs=${branch}--milo--adobecom - -**Blog:** -- Before: https://main--blog--adobecom.hlx.page/?martech=off -- After: https://main--blog--adobecom.hlx.page/?martech=off&milolibs=${branch}--milo--adobecom - -**Milo:** -- Before: https://main--milo--adobecom.aem.page/ch_de/drafts/ramuntea/gnav-refactor?martech=off -- After: https://${branch}--milo--adobecom.aem.page/ch_de/drafts/ramuntea/gnav-refactor?martech=off`; +const getPrDescription = ({ branch, scriptPath }) => { + switch(scriptPath) { + case './libs/deps/imslib.min.js': + return `## Description + Update ${scriptPath} to the latest version + + ## Related Issue + Resolves: NO TICKET - AUTOMATED CREATED PR. + + ## Testing instructions - IMS Libs + 1. Signing in should still function + 2. Signing out should still work + 3. Regression tests on all consumers + + ## Test URLs - IMS + **Acrobat:** + - Before: https://www.stage.adobe.com/acrobat/online/sign-pdf.html?martech=off + - After: https://www.stage.adobe.com/acrobat/online/sign-pdf.html?martech=off&milolibs=${branch}--milo--adobecom + + **BACOM:** + - Before: https://business.stage.adobe.com/fr/customer-success-stories.html?martech=off + - After: https://business.stage.adobe.com/fr/customer-success-stories.html?martech=off&milolibs=${branch}--milo--adobecom + + **CC:** + - Before: https://main--cc--adobecom.hlx.live/?martech=off + - After: https://main--cc--adobecom.hlx.live/?martech=off&milolibs=${branch}--milo--adobecom + + **Homepage:** + - Before: https://main--homepage--adobecom.hlx.page/homepage/index-loggedout?martech=off + - After: https://main--homepage--adobecom.hlx.page/homepage/index-loggedout?martech=off&milolibs=${branch}--milo--adobecom + + **Blog:** + - Before: https://main--blog--adobecom.hlx.page/?martech=off + - After: https://main--blog--adobecom.hlx.page/?martech=off&milolibs=${branch}--milo--adobecom + + **Milo:** + - Before: https://main--milo--adobecom.aem.page/ch_de/drafts/ramuntea/gnav-refactor?martech=off + - After: https://${branch}--milo--adobecom.aem.page/ch_de/drafts/ramuntea/gnav-refactor?martech=off` + case './libs/deps/forms2.min.js': + return `## Description + Update ${scriptPath} to the latest version + + ## Related Issue + Resolves: NO TICKET - AUTOMATED CREATED PR. + + ## Testing instructions - Marketo Forms + 1. The form should still load + 2. The form should still submit + 3. The form should redirect you a new page + + ## Test URLs - Marketo + + **BACOM:** + - Before: https://business.stage.adobe.com?martech=off + - After: https://business.stage.adobe.com?martech=off&milolibs=${branch}--milo--adobecom + + **Milo:** + - Before: https://main--milo--adobecom.hlx.live/drafts/bmarshal/marketo/full + - After: https://${branch}--milo--adobecom.hlx.live/drafts/bmarshal/marketo/full` + } +} const fetchScript = (path) => new Promise((resolve, reject) => { diff --git a/.gitignore b/.gitignore index 168ba7ef67d..926dd3c69de 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,9 @@ logs/* test-html-results/ test-results/ test-a11y-results/ +tmp +libs/navigation/dist/ +*.mdc +/.cursor*/ +.cursor\ 2/ +/.cursor 2 diff --git a/.hlxignore b/.hlxignore index 213dabe3a5d..ddde486d22a 100644 --- a/.hlxignore +++ b/.hlxignore @@ -10,3 +10,4 @@ web-test-runner.config.mjs codecov.yaml libs/features/mas/* !libs/features/mas/docs +!libs/features/mas/dist diff --git a/.kodiak/config.yaml b/.kodiak/config.yaml index 7c4c3feab0a..9c8f3cb0b04 100644 --- a/.kodiak/config.yaml +++ b/.kodiak/config.yaml @@ -14,14 +14,13 @@ notifications: project: MWPW # Project queue in which the security ticket will be created. Can be any valid JIRA project. filters: include: - risk_rating: R5 # Please do not change this unless instructed to do so. + risk_rating: R3 # Please do not change this unless instructed to do so. fields: assignee: name: sghimpos - customfield_11800: MWPW-140779 # Jira epic security tickets will be assigned to. + customfield_11800: MWPW-166942 # Jira epic security tickets will be assigned to. watchers: # Everyone who is an admin on your repository should be a watcher. - casalino - - mauchley - radu labels: # You can add additional labels to your tickets here. Do not delete/change the first three. - "OriginatingProcess=Kodiak" diff --git a/CODEOWNERS b/CODEOWNERS index d4fea27718a..8b8bdc024b7 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -41,7 +41,6 @@ /libs/blocks/ost/ @adobecom/tacocat /libs/blocks/pdf-vewer/ @meganthecoder @JasonHowellSlavin @Brandon32 /libs/blocks/quiz/ @colloyd @sabyamon @fullcolorcoder @JackySun9 -/libs/blocks/quiz-entry/ @colloyd @fullcolorcoder @JackySun9 /libs/blocks/quiz-marquee/ @ryanmparrish /libs/blocks/quiz-results/ @colloyd @sabyamon @fullcolorcoder @JackySun9 /libs/blocks/quote/ @ryanmparrish diff --git a/README.md b/README.md index bed210afec2..798920dd416 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Milo is a shared set of features and services to power Franklin-based websites o ### Detailed 1. Fork this repo. -1. Install the [AEM Code Sync](https://github.com/apps/aem-code-sync) on your forked repo. +1. Install the [AEM Code Sync](https://github.com/apps/aem-code-sync) on your forked repo. Make sure that a `main` branch exists in your forked repository. 1. Clone your forked repo down to your computer. 1. Install the [AEM CLI](https://github.com/adobe/helix-cli) using your terminal: `sudo npm install -g @adobe/aem-cli` 1. In a terminal, run `aem up` your repo's folder on your computer. It will open a browser. @@ -74,6 +74,8 @@ npm run test:watch ----- #### 1. Running Nala Tests +Make sure you ran `npm install` in the project root. +You might need also to run `npx playwright install`. Nala tests are run using the `npm run nala [options]` command: ```sh @@ -91,8 +93,14 @@ npm run nala [options] - config= # Configuration file (default: Playwright default) - project= # Project configuration (default: milo-live-chromium) - milolibs= # Milolibs?= +``` +Examples: +``` +npm run nala local test=masccd.test.js # Run tests from masccd.test.js file on your local changes. Don't forget `aem up` before running. +npm run nala MWPW-162385 owner='npeltier' @mas-ccd # Run tests tagged as 'mas-ccd' in 'npeltier' fork on MWPW-162385 branch ``` + #### 2. Nala Help Command: To view examples of how to use Nala commands with various options, you can run ```sh diff --git a/codecov.yaml b/codecov.yaml index fe402a21775..1a77e996544 100644 --- a/codecov.yaml +++ b/codecov.yaml @@ -3,8 +3,11 @@ coverage: patch: default: target: 90% - threshold: 0.1% + threshold: 0.5% project: default: target: auto - threshold: 0.1% + threshold: 0.5% + ignore: + - "!libs/" + - "libs/deps/" diff --git a/libs/blocks/accordion/accordion.css b/libs/blocks/accordion/accordion.css index c979c3557a5..39d22fbfb8f 100644 --- a/libs/blocks/accordion/accordion.css +++ b/libs/blocks/accordion/accordion.css @@ -2,28 +2,65 @@ padding: var(--spacing-m) 0; } -div.accordion { +div.accordion:not(.descr-list) { display: none; } -dl.accordion { +.descr-list.accordion { margin: 0 auto; max-width: var(--grid-container-width); border-bottom: 1px solid var(--color-gray-500); } -.accordion-container.no-borders dl.accordion { +.accordion-container.no-borders .descr-list.accordion { border: none; } -.accordion dd { +.accordion .descr-details { margin: 0; padding: var(--spacing-xs); font-size: var(--type-body-s-size); line-height: var(--type-body-s-lh); } -.accordion dt button { +.accordion-expand-all { + display: flex; + flex-wrap: wrap; + max-width: var(--grid-container-width); + margin: 0 auto 40px; +} + +.accordion-expand-all button { + display: flex; + align-items: center; + box-sizing: content-box; + cursor: pointer; + margin-bottom: 16px; + font-family: var(--body-font-family); +} + +.accordion-expand-all button:focus-visible { + outline: 2px solid var(--color-accent-focus-ring); + outline-offset: 2px; +} + +.accordion-expand-all button:disabled { + color: var(--color-gray-500); + border-color: var(--color-gray-500); + background-color: #fff; + text-decoration: line-through; + cursor: auto; +} + +.accordion-expand-all .expand-btn { + margin-inline-end: 24px; +} + +.accordion-expand-all svg { + margin-inline-start: 8px; +} + +.accordion .descr-term button { align-items: center; background: none; border: 1px solid var(--color-gray-500); @@ -41,16 +78,16 @@ dl.accordion { -webkit-text-size-adjust: 100%; } -.accordion dt button:hover { +.accordion .descr-term button:hover { cursor: pointer; color: var(--color-black); } -.accordion-container.no-borders .accordion dt button { +.accordion-container.no-borders .accordion .descr-term button { border: none; } -.accordion dt .accordion-heading { +.accordion .descr-term .accordion-heading { margin: 0; } @@ -91,7 +128,7 @@ html[dir="rtl"] .accordion-icon { height: 2px; } -.accordion dt button::before { +.accordion .descr-term button::before { content: ""; display: block; position: absolute; @@ -102,72 +139,72 @@ html[dir="rtl"] .accordion-icon { background-color: transparent; } -.accordion dt button[aria-expanded="true"]::before { +.accordion .descr-term button[aria-expanded="true"]::before { background-color: var(--link-color-dark); } -.quiet .accordion dt button[aria-expanded="true"]::before { +.quiet .accordion .descr-term button[aria-expanded="true"]::before { display: none; } -.accordion dt button[aria-expanded="true"] .accordion-icon::before, -.accordion dt button[aria-expanded="true"] .accordion-icon::after { +.accordion .descr-term button[aria-expanded="true"] .accordion-icon::before, +.accordion .descr-term button[aria-expanded="true"] .accordion-icon::after { transform: rotate(90deg); } -.accordion dt button[aria-expanded="true"] .accordion-icon::after { +.accordion .descr-term button[aria-expanded="true"] .accordion-icon::after { opacity: 0; } -.accordion dt button:hover .accordion-icon::before, -.accordion dt button:hover .accordion-icon::after { +.accordion .descr-term button:hover .accordion-icon::before, +.accordion .descr-term button:hover .accordion-icon::after { background: var(--color-black); } -.accordion dt button:focus, -.accordion dt button:hover, -.accordion dt button[aria-expanded="true"] { +.accordion .descr-term button:focus, +.accordion .descr-term button:hover, +.accordion .descr-term button[aria-expanded="true"] { background: #00000005; } -.accordion dd p:first-child { +.accordion .descr-details p:first-child { margin-top: 0; } /* dark */ -.dark .accordion dt button, -.darkest .accordion dt button { +.dark .accordion .descr-term button, +.darkest .accordion .descr-term button { color: #fff; } -.dark dl.accordion { +.dark .descr-list.accordion { border-bottom-color: var(--color-gray-600); } -.dark .accordion dt button { +.dark .accordion .descr-term button { border-top-color: var(--color-gray-600); } -.dark .accordion dt button:focus, -.dark .accordion dt button:hover, -.dark .accordion dt button[aria-expanded="true"] { +.dark .accordion .descr-term button:focus, +.dark .accordion .descr-term button:hover, +.dark .accordion .descr-term button[aria-expanded="true"] { background: #00000060; } -.dark .accordion dt button:hover .accordion-icon::before, -.dark .accordion dt button:hover .accordion-icon::after { +.dark .accordion .descr-term button:hover .accordion-icon::before, +.dark .accordion .descr-term button:hover .accordion-icon::after { background: var(--color-gray-100); } -html[dir="rtl"] .accordion dt button { +html[dir="rtl"] .accordion .descr-term button { padding: var(--spacing-s) var(--spacing-xs) var(--spacing-s) var(--spacing-m); } -html[dir="rtl"] .accordion dt button::before { +html[dir="rtl"] .accordion .descr-term button::before { right: 0; } -.section[class*='-up'] dl.accordion { +.section[class*='-up'] .descr-list.accordion { max-width: unset; } @@ -209,6 +246,16 @@ div.media-p { padding: 0; } +@media screen and (min-width: 600px) { + .accordion-expand-all .con-button.button-l { + border-radius: 25px; + font-size: 19px; + line-height: 24px; + min-height: 28px; + padding: 10px 24px 8px; + } +} + @media screen and (min-width: 1200px) { .editorial { display: flex; @@ -236,4 +283,19 @@ div.media-p { overflow: hidden; margin: 0; } + + .editorial.expand-all-button { + display: grid; + grid-template-columns: minmax(41.67%, 1fr) minmax(400px, 700px); + row-gap: 0; + } + + .editorial.expand-all-button > * { + width: 100%; + } + + .editorial.expand-all-button .accordion-expand-all { + grid-column: span 2; + max-width: 100%; + } } diff --git a/libs/blocks/accordion/accordion.js b/libs/blocks/accordion/accordion.js index f67abbcbc60..94882d2cb23 100644 --- a/libs/blocks/accordion/accordion.js +++ b/libs/blocks/accordion/accordion.js @@ -1,7 +1,10 @@ -import { createTag } from '../../utils/utils.js'; +import { createTag, getConfig } from '../../utils/utils.js'; import { decorateButtons } from '../../utils/decorate.js'; import { processTrackingLabels } from '../../martech/attributes.js'; +import { replaceKey } from '../../features/placeholders.js'; +const chevronIcon = ''; +const closeIcon = ''; const faq = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: [] }; const mediaCollection = {}; @@ -12,61 +15,103 @@ function setSEO(questions) { document.head.append(script); } -function toggleMedia(con, trig, status) { - if (status === 'open') { - trig.setAttribute('hidden', ''); - trig.setAttribute('aria-expanded', 'false'); - con.setAttribute('hidden', ''); - con.setAttribute('aria-expanded', 'false'); - } else { - trig.setAttribute('aria-expanded', 'true'); - trig.removeAttribute('hidden'); - con.setAttribute('aria-expanded', 'true'); - con.removeAttribute('hidden'); +/* c8 ignore next 8 */ +function playVideo(video) { + if (!video) return; + if (video.getAttribute('autoplay') === null) return; + const playBtn = video.nextElementSibling; + const isPlaying = playBtn.getAttribute('aria-pressed') === 'true'; + if (isPlaying || video.readyState === 0) return; + playBtn.click(); +} + +/* c8 ignore next 11 */ +function pauseVideo(video) { + if (!video) return; + if (video.getAttribute('controls') !== null) { + video.pause(); + return; } + const pauseBtn = video.nextElementSibling; + const isPlaying = pauseBtn?.getAttribute('aria-pressed') === 'true'; + if (!isPlaying || video.readyState === 0) return; + pauseBtn.click(); } -function displayMedia(displayArea, el, dd, i, expanded) { - const id = el.getAttribute('aria-controls').split('-')[1]; - [...mediaCollection[id]].forEach( - (mediaCollectionItem, idx, total) => { - mediaCollectionItem.classList.remove('expanded'); +function openPanel(btn, panel) { + const analyticsValue = btn.getAttribute('daa-ll'); + btn.setAttribute('aria-expanded', 'true'); + btn.setAttribute('daa-ll', analyticsValue.replace(/open-/, 'close-')); + panel.removeAttribute('hidden'); +} - total.forEach((element, index) => { - const trigger = document.querySelector(`#accordion-${id}-trigger-${index + 1}`); - const content = document.querySelector(`#accordion-${id}-content-${index + 1}`); - toggleMedia(content, trigger, 'open'); - }); - toggleMedia(dd, el); - displayArea.childNodes[i - 1].classList.add('expanded'); - - if (expanded) { - toggleMedia(dd, el, 'open'); - displayArea.childNodes[i - 1]?.classList.remove('expanded'); - } - }, - ); +function closePanel(btn, panel) { + const analyticsValue = btn.getAttribute('daa-ll'); + btn.setAttribute('aria-expanded', 'false'); + btn.setAttribute('daa-ll', analyticsValue.replace(/close-/, 'open-')); + panel.setAttribute('hidden', ''); +} + +function closeMediaPanel(displayArea, el, dd, clickedId) { + closePanel(el, dd); + const clickedMedia = displayArea.childNodes[clickedId - 1]; + const video = clickedMedia.querySelector('video'); + if (video) pauseVideo(video); + const otherExpandedPanels = el.closest('.accordion').querySelectorAll('.accordion-trigger[aria-expanded="true"]'); + if (!otherExpandedPanels.length) return; + clickedMedia.classList.remove('expanded'); + const newExpandedId = otherExpandedPanels[0].id.split('trigger-')[1] - 1; + displayArea.childNodes[newExpandedId].classList.add('expanded'); +} + +function openMediaPanel(displayArea, el, dd, clickedId) { + const accordionId = el.getAttribute('aria-controls').split('-')[1]; + [...mediaCollection[accordionId]].forEach((mediaCollectionItem, idx) => { + const video = mediaCollectionItem.querySelector('video'); + if (idx === clickedId - 1) { + openPanel(el, dd); + displayArea.childNodes[idx].classList.add('expanded'); + if (video) playVideo(video); + return; + } + mediaCollectionItem.classList.remove('expanded'); + const trigger = document.querySelector(`#accordion-${accordionId}-trigger-${idx + 1}`); + const content = document.querySelector(`#accordion-${accordionId}-content-${idx + 1}`); + closePanel(trigger, content); + if (video) pauseVideo(video); + }); } function handleClick(el, dd, num) { - const expanded = el.getAttribute('aria-expanded') === 'true'; - const analyticsValue = el.getAttribute('daa-ll'); - if (expanded) { - el.setAttribute('aria-expanded', 'false'); - el.setAttribute('daa-ll', analyticsValue.replace(/close-/, 'open-')); - dd.setAttribute('hidden', ''); - } else { - el.setAttribute('aria-expanded', 'true'); - el.setAttribute('daa-ll', analyticsValue.replace(/open-/, 'close-')); - dd.removeAttribute('hidden'); + const expandAllBtns = el.closest('.accordion-container')?.querySelectorAll('.accordion-expand-all button'); + if (expandAllBtns.length) { + expandAllBtns.forEach((btn) => { + btn.setAttribute('aria-pressed', 'mixed'); + btn.classList.remove('fill'); + btn.disabled = false; + }); } const closestEditorial = el.closest('.editorial'); - if (closestEditorial) displayMedia(closestEditorial.querySelector('.accordion-media'), el, dd, num, expanded); + const expanded = el.getAttribute('aria-expanded') === 'true'; + if (closestEditorial) { + if (expanded) { + closeMediaPanel(closestEditorial.querySelector('.accordion-media'), el, dd, num); + return; + } + openMediaPanel(closestEditorial.querySelector('.accordion-media'), el, dd, num); + return; + } + + if (expanded) { + closePanel(el, dd); + return; + } + openPanel(el, dd); } -function defalutOpen(accordion) { - handleClick(accordion.querySelector('.accordion-trigger'), accordion.querySelector('dd'), 1, 0); +function defaultOpen(accordion) { + handleClick(accordion.querySelector('.accordion-trigger'), accordion.querySelector('.descr-details'), 1); } function createItem(accordion, id, heading, num, edit) { @@ -89,10 +134,10 @@ function createItem(accordion, id, heading, num, edit) { const para = panel?.querySelector('p'); const text = para ? para.textContent : panel?.textContent; - const dtAttrs = hTag ? {} : { role: 'heading', 'aria-level': 3 }; + const dtAttrs = hTag ? { class: 'descr-term' } : { role: 'heading', 'aria-level': 3, class: 'descr-term' }; const dtHtml = hTag ? createTag(hTag.tagName, { class: 'accordion-heading' }, button) : button; - const dt = createTag('dt', dtAttrs, dtHtml); - const dd = createTag('dd', { 'aria-labelledby': triggerId, id: panelId, hidden: true }, panel); + const dt = createTag('div', dtAttrs, dtHtml); + const dd = createTag('div', { 'aria-labelledby': triggerId, id: panelId, hidden: true, class: 'descr-details' }, panel); const dm = createTag('div', { class: 'media-p' }); if (edit) { @@ -105,7 +150,7 @@ function createItem(accordion, id, heading, num, edit) { button.addEventListener('click', (e) => { handleClick(e.target, dd, num, id); }); accordion.append(dt, dd); - return { name: heading.textContent, text }; + return { name: heading.textContent, text, dt, dd }; } function getUniqueId(el) { @@ -118,12 +163,56 @@ function populateMedia(accordion, id, num, collection) { accordion.append(mediaCollection[id][num]); } -export default function init(el) { +async function createExpandAllContainer(accordionItems, isEditorial, mediaEl) { + const config = getConfig(); + const expandText = await replaceKey('expand-all', config); + const collapseText = await replaceKey('collapse-all', config); + const expandBtn = createTag('button', { class: 'expand-btn con-button button-l', 'aria-pressed': 'false' }, expandText); + expandBtn.insertAdjacentHTML('beforeend', chevronIcon); + const collapseBtn = createTag('button', { class: 'collapse-btn con-button button-l', 'aria-pressed': 'false' }, collapseText); + collapseBtn.insertAdjacentHTML('beforeend', closeIcon); + const container = createTag('div', { class: 'accordion-expand-all foreground' }, [expandBtn, collapseBtn]); + const toggleAll = (targetBtn, action) => { + if (targetBtn.getAttribute('aria-pressed') === 'true') return; + targetBtn.setAttribute('aria-pressed', 'true'); + targetBtn.classList.remove('fill'); + targetBtn.disabled = true; + const siblingBtn = targetBtn.nextElementSibling || targetBtn.previousElementSibling; + siblingBtn.setAttribute('aria-pressed', 'false'); + siblingBtn.disabled = false; + siblingBtn.classList.add('fill'); + siblingBtn.focus(); + if (action === 'expand') { + accordionItems.forEach(({ dt, dd }) => openPanel(dt.querySelector('button'), dd)); + if (!isEditorial) return; + [...mediaEl.childNodes].forEach((node, idx) => { + if (idx === 0) { + node.classList.add('expanded'); + const video = node.querySelector('video'); + if (video) playVideo(node.querySelector('video')); + return; + } + node.classList.remove('expanded'); + }); + return; + } + accordionItems.forEach(({ dt, dd }) => closePanel(dt.querySelector('button'), dd)); + if (!isEditorial) return; + const video = mediaEl.querySelector('.expanded video'); + if (video) pauseVideo(video); + }; + expandBtn.addEventListener('click', ({ currentTarget }) => toggleAll(currentTarget, 'expand')); + collapseBtn.addEventListener('click', ({ currentTarget }) => toggleAll(currentTarget, 'collapse')); + return container; +} + +export default async function init(el) { const id = getUniqueId(el); - const accordion = createTag('dl', { class: 'accordion', id: `accordion-${id}`, role: 'presentation' }); + const accordion = createTag('div', { class: 'descr-list accordion', id: `accordion-${id}`, role: 'presentation' }); const accordionMedia = createTag('div', { class: 'accordion-media', id: `accordion-media-${id}` }); const isSeo = el.classList.contains('seo'); const isEditorial = el.classList.contains('editorial'); + const hasExpandAll = el.classList.contains('expand-all-button'); decorateButtons(el); if (isEditorial) { @@ -155,6 +244,10 @@ export default function init(el) { el.append(accordion); if (isEditorial) { el.append(accordionMedia); - defalutOpen(el); + defaultOpen(el); + } + if (hasExpandAll) { + const expandAllContainer = await createExpandAllContainer(items, isEditorial, accordionMedia); + el.prepend(expandAllContainer); } } diff --git a/libs/blocks/action-item/action-item.css b/libs/blocks/action-item/action-item.css index 4ee91d0c785..e6b1fcdf511 100644 --- a/libs/blocks/action-item/action-item.css +++ b/libs/blocks/action-item/action-item.css @@ -114,18 +114,11 @@ transition: transform .2s ease; } -.action-item:not(.zoom) a:focus-visible picture:not(.floated-icon) img, -.action-item.zoom a:focus-visible picture:not(.floated-icon) { - outline-color: -webkit-focus-ring-color; - outline-style: auto; -} - .action-item:not(.float-button) a { width: 100%; } .action-item a:not(.con-button):focus-visible { - outline: none; text-decoration: underline; } diff --git a/libs/blocks/action-scroller/action-scroller.css b/libs/blocks/action-scroller/action-scroller.css index 87d4b933592..2b32356ec7c 100644 --- a/libs/blocks/action-scroller/action-scroller.css +++ b/libs/blocks/action-scroller/action-scroller.css @@ -16,7 +16,7 @@ grid-auto-columns: minmax(var(--action-scroller-column-width), 1fr); grid-auto-flow: column; gap: var(--spacing-m); - padding: 0 var(--action-scroller-mobile-padding); + padding: 3px var(--action-scroller-mobile-padding); overflow-x: auto; -ms-overflow-style: none; scrollbar-width: none; diff --git a/libs/blocks/adobetv/adobetv.js b/libs/blocks/adobetv/adobetv.js index 85928d1c038..4c1cb98c6b6 100644 --- a/libs/blocks/adobetv/adobetv.js +++ b/libs/blocks/adobetv/adobetv.js @@ -1,8 +1,9 @@ import { decorateAnchorVideo } from '../../utils/decorate.js'; +import { createTag } from '../../utils/utils.js'; export default function init(a) { a.classList.add('hide-video'); - const bgBlocks = ['aside', 'marquee', 'hero-marquee']; + const bgBlocks = ['aside', 'marquee', 'hero-marquee', 'long-form']; if (a.href.includes('.mp4') && bgBlocks.some((b) => a.closest(`.${b}`))) { a.classList.add('hide'); if (!a.parentNode) return; @@ -11,11 +12,36 @@ export default function init(a) { anchorTag: a, }); } else { - const embed = `
- -
`; - a.insertAdjacentHTML('afterend', embed); + const iframe = createTag('iframe', { + src: a.href, + class: 'adobetv', + scrolling: 'no', + allow: 'encrypted-media; fullscreen', + title: 'Adobe Video Publishing Cloud Player', + loading: 'lazy', + }); + const embed = createTag('div', { class: 'milo-video' }, iframe); + a.insertAdjacentElement('afterend', embed); + + window.addEventListener('message', (event) => { + if (event.origin !== 'https://video.tv.adobe.com' || !event.data) return; + const { state, id } = event.data; + if (!['play', 'pause'].includes(state) + || !Number.isInteger(id) + || !iframe.src.startsWith(`${event.origin}/v/${id}`)) return; + + iframe.setAttribute('data-playing', state === 'play'); + }); + + const io = new IntersectionObserver((entries) => { + entries.forEach(({ isIntersecting, target }) => { + if (!isIntersecting && target.getAttribute('data-playing') === 'true') { + target.contentWindow?.postMessage({ type: 'mpcAction', action: 'pause' }, target.src); + } + }); + }, { rootMargin: '0px' }); + io.observe(iframe); + a.remove(); } } diff --git a/libs/blocks/article-feed/article-feed.js b/libs/blocks/article-feed/article-feed.js index ae7322283f1..766863a6a22 100644 --- a/libs/blocks/article-feed/article-feed.js +++ b/libs/blocks/article-feed/article-feed.js @@ -303,7 +303,7 @@ async function buildFilter(type, tax, block, config) { dropdown.setAttribute('aria-labelledby', `${type}-filter-button`); dropdown.setAttribute('role', 'menu'); - const SEARCH_ICON = ` + const SEARCH_ICON = ``; const searchBar = createTag('div', { class: 'filter-search' }); diff --git a/libs/blocks/article-header/article-header.css b/libs/blocks/article-header/article-header.css index 646e67deb59..8c7ba5d39dd 100644 --- a/libs/blocks/article-header/article-header.css +++ b/libs/blocks/article-header/article-header.css @@ -181,7 +181,8 @@ background: yellow; } -.article-feature-image { +.article-feature-image, +.article-feature-video { padding: 0; margin: auto; width: 100%; @@ -198,6 +199,11 @@ object-fit: cover; } +.article-feature-video .video-container, +.article-feature-video video { + width: 100%; +} + @media (min-width: 480px) { .article-title h1 { font-size: var(--type-heading-l-size); @@ -218,6 +224,17 @@ .article-byline .article-byline-sharing span:not(:last-child) { margin-right: 8px; } + + .article-feature-video .milo-video, + .article-feature-video .embed-vimeo { + padding-bottom: 580px; + } + + .article-feature-video lite-vimeo, + .article-feature-video video { + height: 580px; + width: 100%; + } } @media (min-width: 700px) { diff --git a/libs/blocks/article-header/article-header.js b/libs/blocks/article-header/article-header.js index 363aad66645..9a112e10b84 100644 --- a/libs/blocks/article-header/article-header.js +++ b/libs/blocks/article-header/article-header.js @@ -182,6 +182,15 @@ function decorateFigure(el) { el.lastElementChild.remove(); } +function decorateMedia(el) { + if (el.querySelector('picture')) { + decorateFigure(el); + return; + } + + el.classList.add('article-feature-video'); +} + export default async function init(blockEl) { const childrenEls = Array.from(blockEl.children); const categoryContainer = childrenEls[0]; @@ -214,8 +223,8 @@ export default async function init(blockEl) { const shareBlock = await buildSharing(); bylineContainer.append(shareBlock); - const featureImgContainer = childrenEls[3]; - decorateFigure(featureImgContainer); + const mediaContainer = childrenEls[3]; + decorateMedia(mediaContainer); document.addEventListener('milo:deferred', () => updateShareText(shareBlock)); } diff --git a/libs/blocks/aside/aside.css b/libs/blocks/aside/aside.css index 54615ee9787..954e67c04bf 100644 --- a/libs/blocks/aside/aside.css +++ b/libs/blocks/aside/aside.css @@ -171,7 +171,7 @@ align-items: center; } -.aside:not(.notification) .foreground.container .icon-area { +.aside:not(.notification, .promobar) .foreground.container .icon-area:not(.con-button) { max-height: 80px; display: flex; align-items: center; @@ -554,7 +554,7 @@ display: flex; } -.aside.split.bio .foreground.container .text .icon-area { +.aside.split.bio .foreground.container .text .icon-area:not(.con-button) { display: none; } @@ -567,7 +567,7 @@ } .aside.promobar .action-area .con-button { - flex-shrink: 0; + white-space: nowrap; } .aside.promobar .promo-text.desktop-up, @@ -761,6 +761,10 @@ object-position: center top; } + .aside.split .split-image img.accessibility-control { + position: relative; + } + .aside .split-image .modal-img-link, .aside.split.half .split-image img, .aside.split.half .split-image video { @@ -905,7 +909,7 @@ margin-top: 0; } - .aside.split.bio .foreground.container .text .icon-area { + .aside.split.bio .foreground.container .text .icon-area:not(.con-button) { display: block; } @@ -950,6 +954,11 @@ align-items: center; text-align: center; } + + .aside.promobar .action-area wbr, + .aside.notification .action-area wbr { + display: none; + } } @media (min-width: 600px) and (max-width: 1199px) { @@ -997,7 +1006,8 @@ } .aside.split.media-top-tablet .split-image img, - .aside.split.media-bottom-tablet .split-image img { + .aside.split.media-bottom-tablet .split-image img, + .aside.split:is(.media-top-tablet, .media-bottom-tablet) .split-image video { position: relative; width: 100%; max-width: 100%; @@ -1236,3 +1246,10 @@ flex: 0 0 calc(500px - 10.5vw); } } + +.aside .foreground.container .action-area a.icon-area.con-button, +.aside.split.bio .foreground.container .text .action-area a.icon-area.con-button { + display: inline-block; + height: unset; + margin-bottom: unset; +} diff --git a/libs/blocks/aside/aside.js b/libs/blocks/aside/aside.js index 92ea2500d4f..7cf1f215f77 100644 --- a/libs/blocks/aside/aside.js +++ b/libs/blocks/aside/aside.js @@ -33,7 +33,7 @@ const blockConfig = { }, }; const FORMAT_REGEX = /^format:/i; -const closeSvg = ` +const closeSvg = `Next icon`; -const ARROW_PREVIOUS_IMG = `Previous icon`; +const ARROW_NEXT_IMG = ` +Next slide arrow + +`; + +const ARROW_PREVIOUS_IMG = ` +Previous slide arrow + +`; const LIGHTBOX_ICON = `Expand carousel to full screen`; const CLOSE_ICON = `Expand carousel to full screen`; @@ -22,7 +29,7 @@ function decorateNextPreviousBtns() { 'button', { class: 'carousel-button carousel-previous is-delayed', - 'aria-label': 'Previous', + 'aria-label': 'Previous slide', 'data-toggle': 'previous', }, ARROW_PREVIOUS_IMG, @@ -32,7 +39,7 @@ function decorateNextPreviousBtns() { 'button', { class: 'carousel-button carousel-next is-delayed', - 'aria-label': 'Next', + 'aria-label': 'Next slide', 'data-toggle': 'next', }, ARROW_NEXT_IMG, @@ -60,23 +67,26 @@ function decorateLightboxButtons() { return [expandBtn, closeBtn]; } -function decorateSlideIndicators(slides) { +function decorateSlideIndicators(slides, jumpTo) { const indicatorDots = []; for (let i = 0; i < slides.length; i += 1) { const li = createTag('li', { class: 'carousel-indicator', - role: 'tab', - tabindex: -1, 'data-index': i, - 'aria-selected': false, - 'aria-labelledby': `Viewing Slide ${i + 1}`, }); + if (jumpTo) { + li.setAttribute('role', 'tab'); + li.setAttribute('tabindex', -1); + li.setAttribute('aria-selected', false); + li.setAttribute('aria-labelledby', `Viewing Slide ${i + 1}`); + } + // Set inital active state if (i === 0) { li.classList.add('active'); - li.setAttribute('tabindex', 0); + if (jumpTo) li.setAttribute('tabindex', 0); } indicatorDots.push(li); } @@ -134,12 +144,41 @@ function jumpToDirection(activeSlideIndex, jumpToIndex, slideContainer) { function checkSlideForVideo(activeSlide) { const video = activeSlide.querySelector('video'); /* c8 ignore start */ - if (video?.played.length > 0) { + if (video?.played.length > 0 && !video?.paused) { video.pause(); + syncPausePlayIcon(video); } /* c8 ignore end */ } +// Sets a muliplyer variable, used by CSS, to move the indicator dots. +function setIndicatorMultiplyer(carouselElements, activeSlideIndicator, event) { + const { slides, direction } = carouselElements; + const maxViewableIndicators = 6; + if (slides.length <= maxViewableIndicators) return; + + const { currentTarget, key } = event; + const eventDirection = currentTarget.dataset.toggle || direction; + const keyNavDirection = key === KEY_CODES.ARROW_RIGHT || undefined; + const multiplyerOffset = (eventDirection === 'next' || eventDirection === 'left') + || keyNavDirection ? 4 : 3; + const activeSlideIndex = Number(activeSlideIndicator.dataset.index); + if (activeSlideIndex > multiplyerOffset && activeSlideIndex <= slides.length) { + /* + * Stop adding to the multiplyer if it equals the difference + * between the slides length and maxViewableIndicators + */ + const multiplyer = activeSlideIndex - multiplyerOffset >= slides.length - maxViewableIndicators + ? slides.length - maxViewableIndicators + : activeSlideIndex - multiplyerOffset; + activeSlideIndicator.parentElement.classList.add('move-indicators'); + activeSlideIndicator.parentElement.style = `--indicator-multiplyer: ${multiplyer}`; + } else { + const multiplyer = 0; + activeSlideIndicator.parentElement.style = `--indicator-multiplyer: ${multiplyer}`; + } +} + function moveSlides(event, carouselElements, jumpToIndex) { const { slideContainer, @@ -148,6 +187,7 @@ function moveSlides(event, carouselElements, jumpToIndex) { slideIndicators, controlsContainer, direction, + jumpTo, } = carouselElements; let referenceSlide = slideContainer.querySelector('.reference-slide'); @@ -170,7 +210,7 @@ function moveSlides(event, carouselElements, jumpToIndex) { activeSlide.classList.remove('active'); activeSlide.querySelectorAll('a, video').forEach((focusableElement) => focusableElement.setAttribute('tabindex', -1)); activeSlideIndicator.classList.remove('active'); - activeSlideIndicator.setAttribute('tabindex', -1); + if (jumpTo) activeSlideIndicator.setAttribute('tabindex', -1); /* * If indicator dot buttons are clicked update: @@ -238,7 +278,8 @@ function moveSlides(event, carouselElements, jumpToIndex) { .forEach((focusableElement) => { focusableElement.setAttribute('tabindex', 0); }); } activeSlideIndicator.classList.add('active'); - activeSlideIndicator.setAttribute('tabindex', 0); + if (jumpTo) activeSlideIndicator.setAttribute('tabindex', 0); + setIndicatorMultiplyer(carouselElements, activeSlideIndicator, event); // Loop over all slide siblings to update their order for (let i = 2; i <= slides.length; i += 1) { @@ -252,7 +293,7 @@ function moveSlides(event, carouselElements, jumpToIndex) { * JumpToInidex uses a shorter delay that better supports * non-linear slide navigation. */ - const slideDelay = jumpToIndex >= 0 ? 10 : 50; + const slideDelay = 25; slideContainer.classList.remove('is-ready'); return setTimeout(() => slideContainer.classList.add('is-ready'), slideDelay); } @@ -308,7 +349,7 @@ function mobileSwipeDetect(carouselElements) { } function handleChangingSlides(carouselElements) { - const { el, nextPreviousBtns, slideIndicators } = carouselElements; + const { el, nextPreviousBtns, slideIndicators, jumpTo } = carouselElements; // Handle Next/Previous Buttons [...nextPreviousBtns].forEach((btn) => { @@ -323,13 +364,15 @@ function handleChangingSlides(carouselElements) { || event.key === KEY_CODES.ARROW_LEFT) { moveSlides(event, carouselElements); } }); - // Handle slide indictors - [...slideIndicators].forEach((li) => { - li.addEventListener('click', (event) => { - const jumpToIndex = Number(li.dataset.index); - moveSlides(event, carouselElements, jumpToIndex); + // Handle slide indictors click + if (jumpTo) { + [...slideIndicators].forEach((li) => { + li.addEventListener('click', (event) => { + const jumpToIndex = Number(li.dataset.index); + moveSlides(event, carouselElements, jumpToIndex); + }); }); - }); + } // Swipe Events mobileSwipeDetect(carouselElements); @@ -378,9 +421,11 @@ export default function init(el) { return rdx; }, []); + const jumpTo = el.classList.contains('jump-to'); const fragment = new DocumentFragment(); const nextPreviousBtns = decorateNextPreviousBtns(); - const slideIndicators = decorateSlideIndicators(slides); + const nextPreviousContainer = createTag('div', { class: 'carousel-button-container' }); + const slideIndicators = decorateSlideIndicators(slides, jumpTo); const controlsContainer = createTag('div', { class: 'carousel-controls is-delayed' }); convertMpcMp4(slides); @@ -395,6 +440,7 @@ export default function init(el) { slideIndicators, controlsContainer, direction: undefined, + jumpTo, }; if (el.classList.contains('lightbox')) { @@ -404,7 +450,6 @@ export default function init(el) { } else { slideWrapper.append(slideContainer); } - /* * Hinting center variant - Set slides order * before moveSlides is called for centering to work. @@ -416,15 +461,16 @@ export default function init(el) { el.textContent = ''; el.append(slideWrapper); - const dotsUl = createTag('ul', { - class: 'carousel-indicators', - role: 'tablist', - tabindex: 0, - }); + const dotsUl = createTag('ul', { class: 'carousel-indicators' }); + if (jumpTo) { + dotsUl.setAttribute('role', 'tablist'); + dotsUl.setAttribute('tabindex', 0); + } + dotsUl.append(...slideIndicators); controlsContainer.append(dotsUl); - - el.append(...nextPreviousBtns, controlsContainer); + nextPreviousContainer.append(...nextPreviousBtns, controlsContainer); + el.append(nextPreviousContainer); function handleDeferredImages() { const images = el.querySelectorAll('img[loading="lazy"]'); diff --git a/libs/blocks/chart/chart.css b/libs/blocks/chart/chart.css index eafead2d0cd..5d4ff1253a5 100644 --- a/libs/blocks/chart/chart.css +++ b/libs/blocks/chart/chart.css @@ -7,7 +7,7 @@ display: flex; flex-wrap: wrap; justify-content: center; - align-items: flex-start; + align-items: stretch; gap: 16px; margin: 0 auto; } diff --git a/libs/blocks/chart/chart.js b/libs/blocks/chart/chart.js index bfadbbe6071..844386cc60b 100644 --- a/libs/blocks/chart/chart.js +++ b/libs/blocks/chart/chart.js @@ -8,7 +8,6 @@ import { formatExcelDate, } from './utils.js'; import getTheme from './chartLightTheme.js'; -import { replaceKey } from '../../features/placeholders.js'; export const SMALL = 'small'; export const MEDIUM = 'medium'; @@ -192,12 +191,13 @@ export const tooltipFormatter = (params, units) => { return tooltip; }; -export const barSeriesOptions = (chartType, hasOverride, firstDataset, colors, size, yUnits) => { +export const barSeriesOptions = (chartType, hasOverride, dimensions, colors, size, yUnits) => { const isLarge = size === LARGE; const isBar = chartType === 'bar'; - return firstDataset.map((value, index) => ({ + return dimensions.map((value, index) => ({ type: 'bar', + name: value, label: { show: isBar, formatter: `{@[${index + 1}]}${yUnits[0]}`, @@ -220,11 +220,12 @@ export const barSeriesOptions = (chartType, hasOverride, firstDataset, colors, s })); }; -export const lineSeriesOptions = (series, firstDataset, xUnit, yUnits) => { +export const lineSeriesOptions = (series, dimensions, xUnit, yUnits) => { const marks = processMarkData(series, xUnit); - return firstDataset.map((value, index) => { + return dimensions.map((value, index) => { let options = { + name: value, type: 'line', symbol: 'none', lineStyle: { width: 3 }, @@ -239,9 +240,10 @@ export const lineSeriesOptions = (series, firstDataset, xUnit, yUnits) => { }); }; -export const areaSeriesOptions = (firstDataset) => ( - firstDataset.map(() => ({ +export const areaSeriesOptions = (dimensions) => ( + dimensions.map((value) => ({ type: 'line', + name: value, symbol: 'none', areaStyle: { opacity: 1 }, stack: 'area', @@ -351,7 +353,7 @@ export const getChartOptions = ({ }) => { const hasOverride = headers ? hasPropertyCI(headers, 'color') : false; const source = dataset?.source; - const firstDataset = source?.[1]?.slice() || []; + const dimensions = source?.[0]?.slice() || []; const isBar = chartType === 'bar'; const isColumn = chartType === 'column'; const isPie = chartType === 'pie'; @@ -365,7 +367,7 @@ export const getChartOptions = ({ yUnits = units.length > 1 ? units.slice(1) : ['']; } - firstDataset.shift(); + dimensions.shift(); let bottomGrid = 90; @@ -387,6 +389,21 @@ export const getChartOptions = ({ inactiveColor: '#6C6C6C', type: 'scroll', }, + aria: { + enabled: true, + label: { + general: { withTitle: 'This is a chart' }, + series: { + maxCount: 1, + multiple: + { + prefix: '. It consists of {seriesCount} series count ', + withName: `with series ${dimensions.join(', ')}. `, + }, + }, + data: { separator: { middle: `${yUnits}, `, end: yUnits } }, + }, + }, title: isDonut ? donutTitleOptions(source, series, yUnits[0], size) : {}, tooltip: { show: true, @@ -431,10 +448,10 @@ export const getChartOptions = ({ ))(), series: (() => { if (isBar || isColumn) { - return barSeriesOptions(chartType, hasOverride, firstDataset, colors, size, yUnits); + return barSeriesOptions(chartType, hasOverride, dimensions, colors, size, yUnits); } - if (chartType === 'line') return lineSeriesOptions(series, firstDataset, xUnit, yUnits); - if (chartType === 'area') return areaSeriesOptions(firstDataset); + if (chartType === 'line') return lineSeriesOptions(series, dimensions, xUnit, yUnits); + if (chartType === 'area') return areaSeriesOptions(dimensions); if (isDonut) return donutSeriesOptions(size); if (isPie) return pieSeriesOptions(size); return []; @@ -464,6 +481,7 @@ const initChart = ({ const chart = window.echarts?.init(chartWrapper, themeName, { renderer: 'svg' }); chartWrapper.tabIndex = 0; + chartWrapper.role = 'img'; chart.setOption(chartOptions); if (chartType === 'donut') { @@ -635,13 +653,15 @@ const init = (el) => { const number = data?.number; const [fontSize, titleY, subtitleY] = getOversizedNumberSize(number?.length); - const html = ` + const html = ``; chartWrapper.innerHTML = html; + chartWrapper.role = 'img'; + chartWrapper.ariaLabel = `${number} ${data?.subtitle}`; }) // eslint-disable-next-line no-console .catch((error) => console.log('Error loading script:', error)); @@ -692,8 +712,6 @@ const init = (el) => { observer.observe(el); } - const title = children[0]?.textContent.trim() || children[1]?.textContent.trim(); - chartWrapper.setAttribute('aria-label', `${await replaceKey(`${chartType}-chart`, config)}: ${title}`); /* c8 ignore next 4 */ window.addEventListener('resize', throttle( 1000, diff --git a/libs/blocks/chart/chartLightTheme.js b/libs/blocks/chart/chartLightTheme.js index 7e62061ea1f..64f8493362e 100644 --- a/libs/blocks/chart/chartLightTheme.js +++ b/libs/blocks/chart/chartLightTheme.js @@ -23,7 +23,7 @@ export default (deviceSize) => { const axisColor = '#767676'; const options = { textStyle: { - fontFamily: 'Adobe Clean', + fontFamily: 'inherit', fontSize: 16, fontWeight: 700, }, diff --git a/libs/blocks/faas/faas.css b/libs/blocks/faas/faas.css index bd0b0a8a35a..7dd613f111c 100644 --- a/libs/blocks/faas/faas.css +++ b/libs/blocks/faas/faas.css @@ -394,6 +394,25 @@ input[type="checkbox"] + label { line-height: 1.375em; } +.dialog-modal .faas-form-confirm-overlay { + position: absolute; + height: 100%; + width: 100%; + background-color: #FBFBFB; + opacity: 0.5; + top: 0; + display: flex; + align-items: center; + justify-content: center; + animation: fade-in-to-opaque .5s ease-in; +} + +.dialog-modal .faas-form-confirm-overlay .icon-milo.checkmark-green { + height: 44px; + animation: pulse 2s ease; +} + + /* for mobile */ @media (max-width:799.99px) { .faas-form label, @@ -450,3 +469,28 @@ input[type="checkbox"] + label { width: 100%; } } + + +@keyframes pulse { + 0% { + transform: scale(0.7); + } + + 50% { + transform: scale(1); + } + + 100% { + transform: scale(0.7); + } +} + +@keyframes fade-in-to-opaque { + 0% { + opacity: 0; + } + + 100% { + opacity: 0.5; + } +} diff --git a/libs/blocks/faas/utils.js b/libs/blocks/faas/utils.js index 9c3249d7e4a..e22a5934d5b 100644 --- a/libs/blocks/faas/utils.js +++ b/libs/blocks/faas/utils.js @@ -254,6 +254,32 @@ const beforeSubmitCallback = () => { }; /* c8 ignore stop */ +export const afterSubmitCallback = (e) => { + const config = getConfig(); + if (!e.success || !(config.faasCloseModalAfterSubmit === 'on')) return; + const faasForms = document.querySelectorAll('.dialog-modal .faas'); + if (faasForms.length !== 1) return; + const faas = faasForms[0]; + const dialogModal = faas.closest('.dialog-modal'); + if (!dialogModal) return; + const closeBtn = dialogModal.querySelector('.dialog-close'); + const faasFormWrapper = dialogModal.querySelector('.faas-form-wrapper'); + if (!faasFormWrapper) return; + const overlay = createTag('div', { class: 'faas-form-confirm-overlay' }); + const checkIcon = createTag('img', { + class: 'icon-milo checkmark-green', + src: `${config.miloLibs || config.codeRoot}/ui/img/checkmark-green.svg`, + alt: 'checkmark-green', + }); + overlay.append(checkIcon); + faasFormWrapper.append(overlay); + + checkIcon.addEventListener('animationend', () => { + if (faas.reset) faas.reset(); + if (closeBtn) closeBtn.click(); + }, { passive: true, once: true }); +}; + export const makeFaasConfig = (targetState) => { if (!targetState) { state = defaultState; @@ -293,6 +319,7 @@ export const makeFaasConfig = (targetState) => { e: { afterYiiLoadedCallback, beforeSubmitCallback, + afterSubmitCallback, }, style_backgroundTheme: targetState.style_backgroundTheme || 'white', style_layout: targetState.style_layout || 'column1', diff --git a/libs/blocks/fallback/fallback.js b/libs/blocks/fallback/fallback.js index cb5f2222ad4..33e650829e7 100644 --- a/libs/blocks/fallback/fallback.js +++ b/libs/blocks/fallback/fallback.js @@ -17,6 +17,8 @@ const SYNTHETIC_BLOCKS = [ 'region-selector', 'search', 'social', + 'product-entry-cta', + 'gnav-image', ]; // eslint-disable-next-line import/prefer-default-export diff --git a/libs/blocks/figure/figure.js b/libs/blocks/figure/figure.js index 40c9e40c28a..09511458b31 100644 --- a/libs/blocks/figure/figure.js +++ b/libs/blocks/figure/figure.js @@ -1,4 +1,3 @@ -import { applyHoverPlay, decorateAnchorVideo, applyAccessibilityEvents, decoratePausePlayWrapper, isVideoAccessible } from '../../utils/decorate.js'; import { createTag } from '../../utils/utils.js'; function buildCaption(pEl) { @@ -8,68 +7,37 @@ function buildCaption(pEl) { return figCaptionEl; } -function htmlToElement(html) { - const template = document.createElement('template'); - const convertHtml = html.trim(); - template.innerHTML = convertHtml; - return template.content.firstChild; -} - -function decorateVideo(clone, figEl) { - const videoTag = clone.querySelector('video'); - const anchorTag = clone.querySelector('a[href*=".mp4"]'); - if (anchorTag && !anchorTag.hash) anchorTag.hash = '#autoplay'; - if (anchorTag) decorateAnchorVideo({ src: anchorTag.href, anchorTag }); +function decorateVideo(videoEl, figEl) { + const videoTag = videoEl.querySelector('video'); if (videoTag) { - videoTag.removeAttribute('data-mouseevent'); - if (videoTag.dataset?.videoSource) { - videoTag.appendChild( - createTag('source', { - src: videoTag.dataset?.videoSource, - type: 'video/mp4', - }), - ); - } - applyHoverPlay(videoTag); - if (!videoTag.controls && isVideoAccessible(anchorTag)) { - applyAccessibilityEvents(videoTag); - decoratePausePlayWrapper(videoTag, 'autoplay'); - } - figEl.prepend(clone.querySelector('.video-container, .pause-play-wrapper, video')); + figEl.prepend(videoEl.querySelector('.video-container, .pause-play-wrapper, video')); } } export function buildFigure(blockEl) { - const figEl = document.createElement('figure'); - figEl.classList.add('figure'); + const figEl = createTag('figure', { class: 'figure' }); Array.from(blockEl.children).forEach((child) => { - const clone = child.cloneNode(true); // picture, video, or embed link is NOT wrapped in P tag const tags = ['PICTURE', 'VIDEO', 'A']; - if (tags.includes(clone.nodeName) || (clone.nodeName === 'SPAN' && clone.classList.contains('modal-img-link'))) { - if (clone.href?.includes('.mp4')) { - const videoPlaceholderLink = `

${clone.outerHTML}

`; - const videoLink = htmlToElement(videoPlaceholderLink); - decorateVideo(videoLink, figEl); - } - figEl.prepend(clone); + if (tags.includes(child.nodeName) || (child.nodeName === 'SPAN' && child.classList.contains('modal-img-link'))) { + figEl.prepend(child); } else { // content wrapped in P tag(s) - const imageVideo = clone.querySelector('.modal-img-link'); + const imageVideo = child.querySelector('.modal-img-link'); if (imageVideo) { figEl.prepend(imageVideo); } - const picture = clone.querySelector('picture'); + const picture = child.querySelector('picture'); if (picture) { figEl.prepend(picture); } - decorateVideo(clone, figEl); - const caption = clone.querySelector('em'); + decorateVideo(child, figEl); + const caption = child.querySelector('em'); if (caption) { const figElCaption = buildCaption(caption); figEl.append(figElCaption); } - const link = clone.querySelector('a'); + const link = child.querySelector('a'); if (link) { const img = figEl.querySelector('picture') || figEl.querySelector('video'); if (img && !link.classList.contains('pause-play-wrapper')) { diff --git a/libs/blocks/footer/footer.js b/libs/blocks/footer/footer.js index feb8ac1d6f0..9d7237d10fd 100644 --- a/libs/blocks/footer/footer.js +++ b/libs/blocks/footer/footer.js @@ -14,8 +14,8 @@ import { getSVGsfromFile } from '../share/share.js'; const { miloLibs, codeRoot, locale } = getConfig(); const base = miloLibs || codeRoot; -const GLOBE_IMG = ''; -const SPECTRUM_CHEVRON = ''; +const GLOBE_IMG = ''; +const SPECTRUM_CHEVRON = ''; const ADCHOICE_IMG = `AdChoices icon`; const SUPPORTED_SOCIAL = ['facebook', 'instagram', 'twitter', 'linkedin', 'pinterest', 'discord', 'behance', 'youtube', 'weibo', 'social-media']; diff --git a/libs/blocks/fragment/fragment.js b/libs/blocks/fragment/fragment.js index 1b08525b360..b6b13a2a64f 100644 --- a/libs/blocks/fragment/fragment.js +++ b/libs/blocks/fragment/fragment.js @@ -95,7 +95,7 @@ export default async function init(a) { let resourcePath = a.href; if (a.href.includes('/federal/')) { - const { getFederatedUrl } = await import('../../utils/federated.js'); + const { getFederatedUrl } = await import('../../utils/utils.js'); resourcePath = getFederatedUrl(a.href); } const resp = await customFetch({ resource: `${resourcePath}.plain.html`, withCacheRules: true }) @@ -119,10 +119,7 @@ export default async function init(a) { } const fragment = createTag('div', { class: 'fragment', 'data-path': relHref }); - - if (!inline) { - fragment.append(...sections); - } + fragment.append(...sections); updateFragMap(fragment, a, relHref); if (a.dataset.manifestId diff --git a/libs/blocks/global-footer/global-footer.css b/libs/blocks/global-footer/global-footer.css index 5f32030e011..5a15be78b5b 100644 --- a/libs/blocks/global-footer/global-footer.css +++ b/libs/blocks/global-footer/global-footer.css @@ -221,25 +221,28 @@ /* Privacy */ .feds-footer-legalWrapper { display: flex; - flex-direction: column; /* More privacy rows are allowed */ - align-items: flex-start; + flex-direction: column; row-gap: 12px; } .feds-footer-privacySection { display: flex; - align-items: center; - column-gap: 5px; flex-wrap: wrap; margin: 0; } .feds-footer-privacyLink { - display: flex; + display: inline-flex; column-gap: 5px; align-items: center; color: var(--feds-color-link); fill: var(--feds-color-link); + vertical-align: bottom; +} + +span.feds-footer-privacyLink-divider { + display: inline-block; + margin: 0 5px; } .feds-footer-privacyLink:hover { @@ -252,6 +255,20 @@ height: 12px; } +@media (min-width: 600px) { + dialog.feds-dialog { + max-width: 80vw; + width: fit-content; + } +} + +@media (min-width: 1200px) { + dialog.feds-dialog { + width: 1200px; + max-width: calc((100% - 6px) - 2em); + } +} + @media (min-width: 900px) { /* If there is too much content, float it on multiple rows */ .feds-footer-wrapper .feds-menu-content { @@ -296,12 +313,17 @@ /* Privacy */ .feds-footer-legalWrapper { align-items: flex-end; + text-align: right; } .feds-footer-privacySection { justify-content: flex-end; text-align: right; } + span.feds-footer-privacyLink-divider, .feds-footer-privacyLink { + margin-left: 5px; + margin-right: 0; + } } /* max-width (1440) + 2 x gutter (32) */ diff --git a/libs/blocks/global-footer/global-footer.js b/libs/blocks/global-footer/global-footer.js index 7fe74c487df..77ffe831005 100644 --- a/libs/blocks/global-footer/global-footer.js +++ b/libs/blocks/global-footer/global-footer.js @@ -4,8 +4,10 @@ import { decorateLinks, getMetadata, getConfig, - loadBlock, localizeLink, + loadStyle, + getFederatedUrl, + getFedsPlaceholderConfig, } from '../../utils/utils.js'; import { @@ -22,8 +24,6 @@ import { isDarkMode, } from '../global-navigation/utilities/utilities.js'; -import { getFederatedUrl, getFedsPlaceholderConfig } from '../../utils/federated.js'; - import { replaceKey } from '../../features/placeholders.js'; const { miloLibs, codeRoot, locale, mep } = getConfig(); @@ -66,7 +66,7 @@ class Footer { observer.disconnect(); this.decorateContent(); }, CONFIG.delays.decoration); - }, 'Error in global footer init', 'errorType=error,module=global-footer'); + }, 'Error in global footer init', 'global-footer', 'error'); decorateContent = () => logErrorFor(async () => { // Fetch footer content @@ -76,7 +76,16 @@ class Footer { shouldDecorateLinks: false, }); - if (!this.body) return; + if (!this.body) { + const error = new Error('Could not create global footer. Content not found!'); + error.tags = 'global-footer'; + error.url = url; + error.errorType = 'error'; + lanaLog({ message: error.message, ...error }); + const { onFooterError } = getConfig(); + onFooterError?.(error); + return; + } const [region, social] = ['.region-selector', '.social'].map((selector) => this.body.querySelector(selector)); const [regionParent, socialParent] = [region?.parentElement, social?.parentElement]; @@ -112,9 +121,10 @@ class Footer { const mepMartech = mep?.martech || ''; this.block.setAttribute('daa-lh', `gnav|${getExperienceName()}|footer${mepMartech}`); - this.block.append(this.elements.footer); - }, 'Failed to decorate footer content', 'errorType=error,module=global-footer'); + const { onFooterReady } = getConfig(); + onFooterReady?.(); + }, 'Failed to decorate footer content', 'global-footer', 'error'); loadMenuLogic = async () => { this.menuLogic = this.menuLogic || new Promise(async (resolve) => { @@ -154,7 +164,8 @@ class Footer { lanaLog({ message: 'Issue with loadIcons', e: `${file.statusText} url: ${file.url}`, - tags: 'errorType=info,module=global-footer', + tags: 'global-footer', + errorType: 'info', }); } const content = await file.text(); @@ -179,7 +190,7 @@ class Footer { if (placeholder && placeholder.length) { this.elements.featuredProducts - .append(toFragment`${placeholder}`); + .append(toFragment`${placeholder}`); } featuredProductsContent.querySelectorAll('.link-group').forEach((linkGroup) => { @@ -199,7 +210,7 @@ class Footer { try { url = new URL(regionSelector.href); } catch (e) { - lanaLog({ message: `Could not create URL for region picker; href: ${regionSelector.href}`, tags: 'errorType=error,module=global-footer' }); + lanaLog({ message: `Could not create URL for region picker; href: ${regionSelector.href}`, tags: 'global-footer', errorType: 'error' }); return this.elements.regionPicker; } @@ -209,14 +220,14 @@ class Footer { `; + regionPickerElem.dataset.modalPath = `${url.pathname}#_inline`; + regionPickerElem.dataset.modalHash = url.hash; const regionPickerWrapperClass = 'feds-regionPicker-wrapper'; this.elements.regionPicker = toFragment`
${regionPickerElem} @@ -229,25 +240,36 @@ class Footer { if (url.hash !== '') { // Hash -> region selector opens a modal decorateAutoBlock(regionPickerElem); // add modal-specific attributes - // TODO remove logs after finding the root cause for the region picker 404s -> MWPW-143627 - if (regionPickerElem.classList[0] !== 'modal') { - lanaLog({ - message: `Modal block class missing from region picker pre loading the block; locale: ${locale}; regionPickerElem: ${regionPickerElem.outerHTML}`, - tags: 'errorType=warn,module=global-footer', - }); - } - await loadBlock(regionPickerElem); // load modal logic and styles - if (regionPickerElem.classList[0] !== 'modal') { - lanaLog({ - message: `Modal block class missing from region picker post loading the block; locale: ${locale}; regionPickerElem: ${regionPickerElem.outerHTML}`, - tags: 'errorType=warn,module=global-footer', - }); - } - // 'decorateAutoBlock' logic replaces class name entirely, need to add it back - regionPickerElem.classList.add(regionPickerClass); + regionPickerElem.href = url.hash; + loadStyle(`${base}/blocks/modal/modal.css`); + const { default: initModal } = await import('../modal/modal.js'); + const modal = await initModal(regionPickerElem); + + const loadRegionNav = async () => { + const block = document.querySelector('.region-nav'); + if (block && getConfig().standaloneGnav) { + // on standalone the region-nav will fail to load automatically through + // the modal calling fragment.js. In that case we will have data-failed=true + // and we should manually load region nav + // If that's not the case then we're not a standalone gnav + // and we mustn't load region-nav twice. + if (block.getAttribute('data-failed') !== 'true') return; + block.classList.add('hide'); + loadStyle(`${base}/blocks/region-nav/region-nav.css`); + const { default: initRegionNav } = await import('../region-nav/region-nav.js'); + initRegionNav(block); + // decoratePlaceholders(block, getConfig()); + block.classList.remove('hide'); + } + }; + + if (modal) await loadRegionNav(); // just in case the modal is already open + regionPickerElem.addEventListener('click', () => { if (!isRegionPickerExpanded()) { regionPickerElem.setAttribute('aria-expanded', 'true'); + // wait for the modal to load before we load the region nav + window.addEventListener('milo:modal:loaded', loadRegionNav, { once: true }); } }); // Set aria-expanded to false when region modal is closed @@ -258,11 +280,13 @@ class Footer { }); } else { // No hash -> region selector expands a dropdown + regionPickerElem.setAttribute('aria-haspopup', 'true'); regionPickerElem.href = '#'; // reset href value to not get treated as a fragment regionSelector.href = localizeLink(regionSelector.href); decorateAutoBlock(regionSelector); // add fragment-specific class(es) this.elements.regionPicker.append(regionSelector); // add fragment after regionPickerElem - await loadBlock(regionSelector); // load fragment and replace original link + const { default: initFragment } = await import('../fragment/fragment.js'); + await initFragment(regionSelector); // load fragment and replace original link // Update aria-expanded on click regionPickerElem.addEventListener('click', (e) => { e.preventDefault(); @@ -278,7 +302,7 @@ class Footer { }); } - return this.regionPicker; + return this.elements.regionPicker; }; decorateSocial = () => { @@ -301,7 +325,7 @@ class Footer { aria-label="${platform}" daa-ll="${getAnalyticsValue(platform, index + 1)}" target="_blank"> - + @@ -325,26 +349,49 @@ class Footer { // Decorate copyright element const currentYear = new Date().getFullYear(); - copyrightElem.replaceWith(toFragment` - Copyright Š ${currentYear} ${copyrightElem.textContent} - `); + copyrightElem.remove(); // Add Ad Choices icon const adChoicesElem = privacyContent.querySelector('a[href*="#interest-based-ads"]'); - adChoicesElem?.prepend(toFragment` + adChoicesElem?.prepend(toFragment``); this.elements.legal = toFragment``; + const linkDivider = ''; + let privacyContentIndex = 0; while (privacyContent.children.length) { const privacySection = privacyContent.firstElementChild; privacySection.classList.add('feds-footer-privacySection'); privacySection.querySelectorAll('a').forEach((link, index) => { link.classList.add('feds-footer-privacyLink'); link.setAttribute('daa-ll', getAnalyticsValue(link.textContent, index + 1)); + const privacySectionListItem = document.createElement('li'); + privacySectionListItem.classList.add('feds-footer-privacy-listitem'); + link.parentNode.insertBefore(privacySectionListItem, link); + privacySectionListItem.appendChild(link); + if (index !== privacySection.querySelectorAll('a').length - 1) { + privacySectionListItem.innerHTML += linkDivider; + } }); this.elements.legal.append(privacySection); + + if (privacyContentIndex === 0) { + const privacySectionList = document.createElement('ul'); + [...privacySection.attributes].forEach((attr) => { + privacySectionList.setAttribute(attr.name, attr.value); + }); + const copyrightListItem = document.createElement('li'); + copyrightListItem.classList.add('feds-footer-privacy-listitem'); + copyrightListItem.innerHTML = linkDivider; + copyrightListItem.prepend(copyrightElem); + copyrightElem.replaceWith(toFragment`Copyright Š ${currentYear} ${copyrightElem.textContent}`); + privacySectionList.prepend(copyrightListItem); + privacySectionList.innerHTML += privacySection.innerHTML.replace(/( \/ )/g, ''); + privacySection.parentNode.replaceChild(privacySectionList, privacySection); + } + privacyContentIndex += 1; } return this.elements.legal; diff --git a/libs/blocks/global-navigation/base.css b/libs/blocks/global-navigation/base.css index 1eb4d98d29c..241797786f0 100644 --- a/libs/blocks/global-navigation/base.css +++ b/libs/blocks/global-navigation/base.css @@ -27,14 +27,26 @@ --feds-background-link--hover: #e9e9e9; --feds-borderColor-link: #e9e9e9; --feds-color-link: #292929; - --feds-color-blue-link: #3b63fb; - --feds-color-link--hover: #274dea; + --feds-color-blue-link: #274dea; + --feds-color-link--hover: #1d3ecf; --feds-color-navLink-description: #505050; --feds-color-link-breadcrumbs: #707070; /* Footer */ --feds-background-footer: #fafafa; --feds-borderColor-featuredProducts: #999; --feds-gutter-footer: 32px; + + /* mobile gnav redesign */ + --feds-color-white-v2: #fff; + --feds-color-black-v2: #000; + --feds-background-cloudmenu-v2: #111; + --feds-borderColor-link-v2: #eaeaea; + --feds-backgroundColor-tabs-v2: #f8f8f8; + --feds-backgroundColor-tabContent-v2: #f3f3f3; + --feds-borderColor-localnav-v2: #eee; + + /* App banner */ + --app-banner-height: 76px; } /* Nav Link styles */ @@ -95,7 +107,7 @@ } [dir = "rtl"] .feds-navLink--hoverCaret { - padding-right: 12px; + padding-right: 20px; padding-left: 32px; } @@ -118,8 +130,8 @@ align-items: center; } -header.global-navigation { - visibility: visible; +header.global-navigation.ready { + visibility: visible !important; } /* Desktop styles */ @@ -261,6 +273,14 @@ header.global-navigation { content: ''; } + .feds-navLink.feds-navLink--header[class *= '-gradient'] .feds-navLink-title:after { + display: none; + } + + .feds-navLink.feds-navLink--header { + pointer-events: none; + } + [dir = "rtl"] .feds-navLink[class *= '-gradient'] .feds-navLink-title:after { transform: rotate(135deg); } diff --git a/libs/blocks/global-navigation/dark-nav.css b/libs/blocks/global-navigation/dark-nav.css index 22585dc606f..1191d2f6767 100644 --- a/libs/blocks/global-navigation/dark-nav.css +++ b/libs/blocks/global-navigation/dark-nav.css @@ -40,6 +40,10 @@ --feds-color-profile--dark: #dbdbdb; --feds-color-profile--emphasis--dark: #f2f2f2; --feds-border-profile--dark: 1px solid var(--feds-borderColor); + + /* mobile gnav redesign */ + --feds-borderColor-link-v2: #323232; + --feds-borderColor-localnav-v2: #323232; } .feds--dark .feds-navLink--hoverCaret:hover, @@ -84,6 +88,44 @@ color: var(--feds-color-link--dark); } +header.new-nav.feds--dark .feds-nav > section.feds-navItem > .feds-popup .top-bar { + background-color: var(--feds-background-nav--desktop); + border-bottom: 1px solid var(--feds-background-nav--desktop); +} + +header.new-nav.feds--dark .feds-nav > section.feds-navItem > .feds-popup .title { + background-color: var(--background-color); + border-bottom: 1px solid var(--feds-borderColor-link-v2); +} + +header.new-nav.feds--dark .feds-nav > section.feds-navItem > .feds-popup .tabs { + background-color: var(--background-color); +} + +header.new-nav.feds--dark .feds-nav > section.feds-navItem > .feds-popup .tab-content { + background-color: var(--background-color); + border-left: 1px solid var(--feds-borderColor-link-v2); +} + +[dir = "rtl"] header.new-nav.feds--dark .feds-nav > section.feds-navItem > .feds-popup .tab-content { + border-left: none; + border-right: 1px solid var(--feds-borderColor-link-v2); +} + +header.new-nav.feds--dark .feds-nav > section.feds-navItem > .feds-popup .tabs button[aria-selected="true"] { + color: var(--background-color); + background-color: var(--feds-borderColor-navLink); +} + +header.new-nav.feds--dark .feds-nav > section.feds-navItem > .feds-popup .sticky-cta { + background-color: var(--background-color); + border-top: 1px solid var(--feds-borderColor-link-v2); +} + +header.new-nav.feds--dark .feds-nav > section.feds-navItem > .feds-popup .top-bar .main-menu { + color: var(--text-color); +} + /* Popup */ .feds--dark .feds-popup { background-color: #151515; diff --git a/libs/blocks/global-navigation/features/aside/aside.js b/libs/blocks/global-navigation/features/aside/aside.js index 2abbf96eaaf..0d956460eef 100644 --- a/libs/blocks/global-navigation/features/aside/aside.js +++ b/libs/blocks/global-navigation/features/aside/aside.js @@ -2,8 +2,9 @@ import { loadBlock, decorateAutoBlock } from '../../../../utils/utils.js'; import { toFragment, lanaLog } from '../../utilities/utilities.js'; import { processTrackingLabels } from '../../../../martech/attributes.js'; -export default async function decorateAside({ headerElem, promoPath } = {}) { +export default async function decorateAside({ headerElem, fedsPromoWrapper, promoPath } = {}) { const onError = () => { + fedsPromoWrapper?.remove(); headerElem?.classList.remove('has-promo'); lanaLog({ message: 'Gnav Promo fragment not replaced, potential CLS' }); return ''; diff --git a/libs/blocks/global-navigation/features/breadcrumbs/breadcrumbs.js b/libs/blocks/global-navigation/features/breadcrumbs/breadcrumbs.js index dffb2186b3d..1ddd8292cb0 100644 --- a/libs/blocks/global-navigation/features/breadcrumbs/breadcrumbs.js +++ b/libs/blocks/global-navigation/features/breadcrumbs/breadcrumbs.js @@ -1,6 +1,5 @@ -import { getMetadata, getConfig } from '../../../../utils/utils.js'; +import { getMetadata, getConfig, getFederatedUrl } from '../../../../utils/utils.js'; import { toFragment, lanaLog } from '../../utilities/utilities.js'; -import { getFederatedUrl } from '../../../../utils/federated.js'; const metadata = { seo: 'breadcrumbs-seo', @@ -23,10 +22,11 @@ const setBreadcrumbSEO = (breadcrumbs) => { }; breadcrumbs.querySelectorAll('ul > li').forEach((item, idx) => { const link = item.querySelector('a'); + const name = link ? link.innerText.trim() : [...item.childNodes].filter((node) => !node.matches?.('span[aria-hidden="true"]')).map((node) => node.textContent.trim()).join(''); breadcrumbsSEO.itemListElement.push({ '@type': 'ListItem', position: idx + 1, - name: link ? link.innerText.trim() : item.innerText.trim(), + name, item: link?.href, }); }); @@ -53,13 +53,16 @@ const createBreadcrumbs = (element) => { .split(',') .map((item) => item.trim()) || []; - ul.querySelectorAll('li').forEach((li) => { + ul.querySelectorAll('li').forEach((li, index) => { if (hiddenEntries.includes(li.innerText?.toLowerCase().trim())) li.remove(); + if (index > 0) li.insertAdjacentHTML('afterbegin', ''); }); + const noTransform = element.classList.contains('no-transform') ? ' no-transform' : ''; + const breadcrumbs = toFragment`
- +
`; ul.querySelector('li:last-of-type')?.setAttribute('aria-current', 'page'); @@ -77,7 +80,7 @@ const createWithBase = async (el) => { element.querySelector('ul')?.prepend(...base.querySelectorAll('li')); return createBreadcrumbs(element); } catch (e) { - lanaLog({ e, message: 'Breadcrumbs failed fetching base', tags: 'errorType=info,module=gnav-breadcrumbs' }); + lanaLog({ e, message: 'Breadcrumbs failed fetching base', tags: 'gnav-breadcrumbs', errorType: 'info' }); return null; } }; @@ -106,7 +109,7 @@ export default async function init(el) { setBreadcrumbSEO(breadcrumbsEl); return breadcrumbsEl; } catch (e) { - lanaLog({ e, message: 'Breadcrumbs failed rendering', tags: 'errorType=error,module=gnav-breadcrumbs' }); + lanaLog({ e, message: 'Breadcrumbs failed rendering', tags: 'gnav-breadcrumbs', errorType: 'error' }); return null; } } diff --git a/libs/blocks/global-navigation/features/profile/dropdown.js b/libs/blocks/global-navigation/features/profile/dropdown.js index d874963e821..8c47f2083bb 100644 --- a/libs/blocks/global-navigation/features/profile/dropdown.js +++ b/libs/blocks/global-navigation/features/profile/dropdown.js @@ -1,7 +1,6 @@ -import { getConfig } from '../../../../utils/utils.js'; +import { getConfig, getFedsPlaceholderConfig } from '../../../../utils/utils.js'; import { toFragment, trigger, closeAllDropdowns, logErrorFor } from '../../utilities/utilities.js'; import { replaceKeyArray } from '../../../../features/placeholders.js'; -import { getFedsPlaceholderConfig } from '../../../../utils/federated.js'; const getLanguage = (ietfLocale) => { if (!ietfLocale.length) return 'en'; @@ -55,7 +54,7 @@ class ProfileDropdown { this.sections = sections; this.openOnInit = openOnInit; this.localMenu = rawElem.querySelector('h5')?.parentElement; - logErrorFor(this.init.bind(this), 'ProfileDropdown.init()', 'errorType=error,module=gnav-profile'); + logErrorFor(this.init.bind(this), 'ProfileDropdown.init()', 'gnav-profile', 'error'); } async init() { @@ -102,6 +101,7 @@ class ProfileDropdown { // the email had some special logic as well; // for MVP, we took a simpler approach ("Some very long name, very l...") this.avatarElem = toFragment` ${this.avatarElem}
-

${this.profileData.displayName}

-

${this.decorateEmail(this.profileData.email)}

+

${this.profileData.displayName}

+

${this.decorateEmail(this.profileData.email)}

diff --git a/libs/blocks/global-navigation/features/search/gnav-search.js b/libs/blocks/global-navigation/features/search/gnav-search.js index 76532c5d31e..0d3891c3826 100644 --- a/libs/blocks/global-navigation/features/search/gnav-search.js +++ b/libs/blocks/global-navigation/features/search/gnav-search.js @@ -7,9 +7,8 @@ import { logErrorFor, } from '../../utilities/utilities.js'; import { replaceKeyArray } from '../../../../features/placeholders.js'; -import { getConfig } from '../../../../utils/utils.js'; +import { getConfig, getFedsPlaceholderConfig } from '../../../../utils/utils.js'; import { debounce } from '../../../../utils/action.js'; -import { getFedsPlaceholderConfig } from '../../../../utils/federated.js'; const CONFIG = { suggestions: { diff --git a/libs/blocks/global-navigation/global-navigation.css b/libs/blocks/global-navigation/global-navigation.css index 8f984b225d8..eaf5503dd48 100644 --- a/libs/blocks/global-navigation/global-navigation.css +++ b/libs/blocks/global-navigation/global-navigation.css @@ -61,11 +61,12 @@ header.global-navigation { right: 20px; /* hamburger menu gutter */ display: none; flex-direction: column; - height: calc(100vh - 100% - 1px); + height: calc(100dvh - 100% - 1px); border-top: 1px solid var(--feds-borderColor); background-color: var(--feds-background-nav); } + [dir = "rtl"] .feds-nav-wrapper { left: 20px; right: 0; @@ -86,6 +87,11 @@ header.global-navigation { z-index: 1; } +/* Product Entry CTA */ +.feds-product-entry-cta{ + align-items: center; +} + /* Hamburger toggle */ .feds-toggle { width: 60px; @@ -114,6 +120,15 @@ header.global-navigation { flex-shrink: 0; } +.feds-brand-container > .feds-brand:first-child { + margin-left: 12px; +} + +[dir = "rtl"] .feds-brand-container > .feds-brand:first-child { + margin-left: 0; + margin-right: 12px; +} + .feds-brand, .feds-logo { align-items: center; @@ -253,6 +268,13 @@ header.global-navigation { cursor: pointer; } +.feds-promo .feds-cta { + height: initial; + min-height: 32px; + line-height: 1.5; + white-space: unset; +} + .feds-topnav--overflowing .feds-cta { height: 30px; padding: 0 10px; @@ -363,6 +385,11 @@ header.global-navigation { text-transform: capitalize; } +.feds-breadcrumbs.no-transform a, +.feds-breadcrumbs.no-transform [aria-current] { + text-transform: none; +} + .feds-breadcrumbs a { display: block; color: var(--feds-color-link-breadcrumbs); @@ -372,9 +399,8 @@ header.global-navigation { color: var(--feds-color-breadcrumbs--current); } -.feds-breadcrumbs li:not(:first-of-type)::before { +.feds-breadcrumbs li span[aria-hidden="true"] { padding: 0 12px; - content: '/'; } .feds-utilities { @@ -387,7 +413,6 @@ header.global-navigation { .feds-utilities .unav-comp-app-switcher-popover, /* App Switcher */ .feds-utilities .spectrum-Dialog-content, /* Notifications */ -.feds-utilities .unav-comp-external-profile, /* Profile */ .feds-utilities .unav-comp-help-popover, /* Help */ .feds-utilities .unc-overlay-container { /* Tooltips */ transform: translate3d(0,0,0); /* Fix Safari issues w/ position: sticky */ @@ -488,6 +513,12 @@ header.global-navigation { right: auto; } +@media (max-width: 900px) { + .feds-product-entry-cta { + display: none; + } +} + /* Desktop styles */ @media (min-width: 900px) { /* General */ @@ -583,13 +614,13 @@ header.global-navigation { .feds-navItem--megaMenu .feds-popup { right: 0; padding: 40px 0 0; - max-height: calc(100vh - 100%); + max-height: calc(100dvh - 100%); overflow: auto; box-sizing: border-box; } .global-navigation.has-promo .feds-navItem--megaMenu .feds-popup { - max-height: calc(100vh - 100% - var(--global-height-navPromo)); + max-height: calc(100dvh - 100% - var(--global-height-navPromo)); } [dir = "rtl"] .feds-navItem--megaMenu .feds-popup { @@ -705,6 +736,9 @@ header.global-navigation { .feds-brand-image + .feds-brand-label { display: none; } + .feds-localnav { + display: none; + } } /* Desktop styles */ @@ -724,4 +758,613 @@ header.global-navigation { .feds-navItem--megaMenu .feds-popup { align-items: center; } + + .feds-localnav { + display: none; + } +} + +/* + * + * + * mobile gnav redesign + * + * + */ + +/* new mobile gnav is not sticky when localnav */ +header.new-nav.local-nav { + position: relative; +} + +/* Don't blur the background when opening the mega menu on a local nav page */ +header.new-nav.local-nav .feds-curtain--open { + display: none; +} + +header.new-nav:has(.feds-dropdown--active) { + z-index: 12; +} + +/* main-menu screen */ + +header.new-nav .feds-nav-wrapper { + width: 100%; + background-color: var(--feds-background-cloudmenu-v2); + translate: -200vw 0; + opacity: 0; + transition: translate 0.4s ease-out, opacity 0.4s ease, visibility 0s linear 0.5s; + display: flex; + visibility: hidden; +} + +[dir = "rtl"] header.new-nav .feds-nav-wrapper { + translate: 200vw 0; +} + +header.new-nav.local-nav .feds-nav-wrapper { + visibility: hidden; /* we don't want to see the main menu on a local nav page */ +} + +header.new-nav .feds-nav-wrapper--expanded { + translate: 0; + opacity: 1; + z-index: 2; + transition: translate 0.4s ease-out, opacity 0.4s ease, visibility 0s linear 0s; + visibility: visible; +} + +[dir = "rtl"] header.new-nav .feds-nav-wrapper--expanded { + translate: 0; +} + +header.new-nav .feds-nav-wrapper--expanded .feds-nav > section.feds-navItem:first-child { + padding-top: 25px; +} + +header.new-nav .feds-nav-wrapper--expanded .feds-nav > .feds-navItem.feds-navItem--mobile-only:last-of-type { + margin-bottom: 10px; + border-bottom: 2px solid var(--feds-color-white-v2); +} + +header.new-nav .feds-nav-wrapper--expanded .feds-nav > section.feds-navItem > button.feds-navLink { + color: var(--feds-color-white-v2); + font-size: 20px; + font-weight: 400; + line-height: 25px; + border: none; + opacity:0; + translate: -100px 0; + animation: slideleft 0.4s ease, fadein 0.2s ease; + animation-fill-mode: forwards; + padding: 15px 20px; +} + +[dir = "rtl"] header.new-nav .feds-nav-wrapper--expanded .feds-nav > section.feds-navItem > button.feds-navLink { + translate: 100px 0; + animation: rtlslideleft 0.4s ease, fadein 0.2s ease; + animation-fill-mode: forwards; +} + +header.new-nav .feds-nav > section.feds-navItem > button.feds-navLink { + opacity: 0; + border: none; + animation: slideright 0.4s ease, fadeout 0.2s ease; + animation-fill-mode: forwards; +} + +[dir = "rtl"] header.new-nav .feds-nav > section.feds-navItem > button.feds-navLink { + animation: rtlslideright 0.4s ease, fadeout 0.2s ease; + animation-fill-mode: forwards; +} + +header.new-nav .feds-nav > section.feds-navItem > button.feds-navLink::after { + width: 9.271px; + height: 9.179px; + transform: rotate(-45deg); + border-color: var(--feds-color-white-v2); + right: 20px; + top: calc(50% - 4px); +} + +[dir = "rtl"] header.new-nav .feds-nav > section.feds-navItem > button.feds-navLink::after { + transform: rotate(135deg); + right: unset; + left: 20px; +} + +header.new-nav .feds-nav > .feds-navItem > a.feds-navLink { + border-bottom: 1px solid #2c2c2c; + padding: 20px; + font-size: 20px; + color: var(--feds-color-white-v2); +} + +/* + +/* Mega Menu */ + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup { + position: fixed; + transform: translate3d(0,0,0); /* render correctly on iOS Safari */ + -webkit-transform: translate3d(0,0,0); /* older iOS versions */ + top: calc(-1 * var(--feds-height-nav)); + visibility: hidden; + width: 100%; + height: calc(var(--feds-height-nav) + 100%); + background-color: var(--feds-background-nav); + transition: translate 0.4s ease-out, opacity 0.2s ease, visibility 0s linear 0.5s; + translate: 300vw 0; + display: grid; + grid-template-rows: 56px max-content auto 80px; + grid-template-columns: 111px 1fr; + grid-template-areas: + "top-bar top-bar" + "title title" + "tabs tab-panel" + "cta cta"; + box-sizing: content-box; /* Some DC pages use non default box-sizing globally */ +} + +.feds-promo-aside-wrapper + header.new-nav .feds-nav > section.feds-navItem > .feds-popup { + top: calc(0px - var(--feds-height-nav) - var(--global-height-navPromo)); +} + +[dir = "rtl"] header.new-nav .feds-nav > section.feds-navItem > .feds-popup { + translate: -300vw 0; +} + +header.new-nav.local-nav .feds-nav > section.feds-navItem > .feds-popup { + translate: 0; +} + +header.new-nav .feds-nav > section.feds-navItem.feds-dropdown--active::before { + width: 0; +} + +header.new-nav .feds-nav > section.feds-navItem.feds-dropdown--active > .feds-popup { + translate: 0; + opacity: 1; + z-index: 2; + transition: translate 0.4s ease-out, opacity 0.2s ease, visibility 0s linear 0s; + visibility: visible; +} + +[dir = "rtl"] header.new-nav .feds-nav > section.feds-navItem.feds-dropdown--active > .feds-popup { + translate: 0; +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .top-bar { + grid-area: top-bar; + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid var(--feds-borderColor-link-v2); + padding: 0 20px; +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .top-bar .feds-brand { + padding-left: 0; +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .top-bar .close-icon { + width:14px; + height:14px; + padding: 0; + border: 0; + font-family: var(--body-font-family); + margin-top: 2px; +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .top-bar .main-menu { + font-size: 14px; + font-weight: 700; + line-height: 16px; + padding: 1px 0; + border: 0; + font-family: var(--body-font-family); + color: var(--text-color); +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .top-bar .main-menu svg { + translate: 0 2px; + margin-right: 7px; +} + +[dir = "rtl"] header.new-nav .feds-nav > section.feds-navItem > .feds-popup .top-bar .main-menu svg { + transform: rotate(180deg); + margin-right: unset; + margin-left: 7px; +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .title { + grid-area: title; + display: flex; + flex-direction: column; + border-bottom: 1px solid var(--feds-borderColor-link-v2); + padding: 0 20px; + box-sizing: inherit; +} +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .title .breadcrumbs { + display: block; /* even if the actual breadcrumbs are display none, we need the space to visible for the mobile gnav */ + height: 23px; + padding-top: 12px; + box-sizing: inherit; +} +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .title h7 { + min-height: 25px; + font-size: 28px; + font-weight: 700; + line-height: 25px; + padding: 8px 0 24px; + box-sizing: inherit; + white-space: break-spaces; +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .tabs { + grid-area: tabs; + display: flex; + flex-direction: column; + padding-top: 16px; + background-color: var(--feds-backgroundColor-tabs-v2); + overflow-y: auto; +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .tabs button { + min-height:48px; + width: 111px; + border: none; + padding: 8px 11px 8px 20px; + white-space: normal; + font-weight: 700; + text-align: unset; + color: var(--text-color); + font-family: var(--body-font-family); + font-size: 14px; +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .tabs button[aria-selected="true"] { + background-color: var(--feds-color-black-v2); + color: var(--feds-color-white-v2); +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .tab-content { + background-color: var(--feds-backgroundColor-tabContent-v2); + padding: 10px 13px 25px; + display: flex; + flex-direction: column; + gap: 28px; + font-size:14px; + line-height: 16px; + overflow-y: scroll; + border-left: 1px solid var(--feds-borderColor-link-v2); +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .tab-content .feds-cta--secondary { + margin: 12px; + height: unset; + display: inline-block; + line-height: 1.2; + text-wrap: wrap; + min-width: 100px; + max-width: 200px; + text-align: center; + padding: 5px 18px 6px; +} + +[dir = "rtl"] header.new-nav .feds-nav > section.feds-navItem > .feds-popup .tab-content { + border-left: none; + border-right: 1px solid var(--feds-borderColor-link-v2); +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .tab-content a { + translate: 0 12px; + opacity: 0; + animation: slideup 0.6s ease, fadein 0.8s ease; + animation-fill-mode: forwards; + font-weight: 700; +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .tab-content a.feds-navLink:not(:has(div)) { + white-space: break-spaces; +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .tab-content .feds-navLink-title { + font-weight: 700; + white-space: break-spaces; +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .tab-content .feds-navLink--blue .feds-navLink-title { + font-weight: 400; +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .tab-content .feds-navLink-description { + display: inline-block; + font-weight: 400; + white-space: break-spaces; +} + +header.new-nav .feds-nav > section.feds-navItem > .feds-popup .sticky-cta { + grid-area: cta; + display: flex; + align-items: center; + justify-content: center; + width: 100%; + position:sticky; + border-top: 1px solid var(--feds-borderColor-link-v2); +} + +header.new-nav .feds-nav > section.feds-navItem.feds-dropdown--active > .feds-popup .sticky-cta a { + width: 320px; + height: 39px; + border-radius: 50px; +} + +/* breadcrumbs new nav*/ +header.new-nav .feds-breadcrumbs-wrapper { + display: none; +} + +header.new-nav .feds-navItem--section { + display: flex; +} + +header.new-nav .feds-breadcrumbs { + padding: 2px 0 0; +} + +header.new-nav .feds-breadcrumbs ul { + font-weight: 700; +} + +header.new-nav .feds-breadcrumbs li:not(:first-of-type)::before { + padding: 0 4px; + color: var(--feds-color-link-breadcrumbs); +} + +header.new-nav .feds-breadcrumbs li:first-child:not(:nth-last-child(-n+3)):after { + content: '/ â€Ļ'; + padding: 0 0 0 4px; + color: var(--feds-color-link-breadcrumbs); +} + +/* local-nav */ +.feds-localnav { + position: sticky; + top: 0px; + width: 100%; + left: 0px; + z-index: 9; +} + +.feds-localnav.has-promo { + top: var(--global-height-navPromo); +} + +.local-nav .feds-toggle[aria-expanded = "true"]:before { + content: "\2630"; +} + +.feds-localnav a { + text-decoration: unset; +} + +.feds-localnav-title { + width: 100%; + height: 40px; + font-size: 16px; + font-weight: 700; + border: 0; + padding: 0 20px; + text-align: justify; + color: var(--text-color); + cursor: pointer; + border-top: 1px solid var(--feds-borderColor-localnav-v2); + border-bottom: 1px solid var(--feds-borderColor-localnav-v2); + background-color: var(--feds-background-nav); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-family: var(--body-font-family); + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2); +} + +.feds-localnav-items { + padding: 20px 0 24px; + background: var(--feds-background-popup); + border-bottom: 1px solid var(--feds-borderColor-localnav-v2); + display: none; + box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25); +} + +.feds-localnav-items .feds-navLink { + border: 0; +} + +.feds-localnav-items .feds-navItem.feds-navItem--active > .feds-navLink { + font-weight: 600; +} + +.feds-localnav.feds-localnav--active .feds-localnav-items { + display: block; + width: 100%; + position: absolute; + overflow: auto; + top: var(--feds-localnav-height); +} + +.feds-localnav .feds-localnav-items li { + list-style: none; +} + +.feds-localnav.feds-localnav--active .feds-localnav-items .feds-menu-items { + padding: 0; + border-bottom: 0; +} + +.feds-localnav.feds-localnav--active .feds-localnav-items .feds-menu-column > ul { + padding: 0; +} + +.feds-localnav.feds-localnav--active .feds-localnav-items .feds-menu-column .feds-navLink { + padding-left: 38px; +} + +.feds-localnav.feds-localnav--active .feds-localnav-items .feds-menu-items .feds-navLink { + padding: 12px 56px; +} + +.feds-localnav .feds-localnav-items .feds-navLink { + border-bottom: 0; + font-size: 14px; + padding: 12px 20px; + background: var(--feds-background-popup); + outline-offset: -1px; + cursor: pointer; +} + +.feds-localnav .feds-localnav-items .feds-menu-headline { + background: var(--feds-background-popup); + font-weight: 400; + border-bottom: 0; + padding: 12px 46px 12px 38px; + outline-offset: -1px; + color: var(--feds-color-link); + white-space: break-spaces; +} + +.feds-localnav .feds-localnav-items .feds-navLink-content .feds-navLink-title, +.feds-localnav .feds-localnav-items li .feds-navLink { + white-space: break-spaces; +} + +.feds-localnav .feds-localnav-items .feds-navItem--centered { + padding: 10px 20px; +} + +.feds-localnav.feds-localnav--active .feds-localnav-items { + box-sizing: border-box; + max-height: calc(100dvh - (var(--global-height-nav) + var(--feds-localnav-height))); +} + +.feds-localnav.has-promo.feds-localnav--active .feds-localnav-items { + max-height: calc(100dvh - (var(--global-height-nav) + var(--feds-localnav-height) + var(--global-height-navPromo))); +} + +.feds-localnav.feds-localnav--active.is-sticky .feds-localnav-items { + max-height: calc(100dvh - var(--feds-localnav-height)); +} + +.feds-localnav .feds-localnav--active::before { + display: none; +} + +.feds-localnav .feds-localnav-exit { + display: none; +} + +.feds-localnav.feds-localnav--active .feds-localnav-title::after { + transform: rotateZ(-135deg); +} + +.feds-localnav.feds-localnav--active .feds-localnav-curtain { + width: 100%; + height: 101lvh; + background: var(--feds-color-black-v2); + opacity: 0.7; +} + +.feds-localnav.feds-localnav--active .feds-localnav-exit { + display: block; +} + +@keyframes slideright { + from { + translate: 0 0; + } + to { + translate: -100px 0; + } +} + +@keyframes rtlslideright { + from { + translate: 0 0; + } + to { + translate: 100px 0; + } +} + +@keyframes slideleft { + from { + translate: -100px 0; + } + to { + translate: 0 0; + } +} + +@keyframes rtlslideleft { + from { + translate: 100px 0; + } + to { + translate: 0 0; + } +} + +@keyframes slideup { + from { + translate: 0 40px; + } + to { + translate: 0 0; + } +} + +@keyframes fadein { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes fadeout { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + +/* */ + +.disable-ios-scroll { + overflow: hidden; + width: 100%; + min-height: 100dvh; + position: fixed; +} + +html:has(body.disable-ios-scroll) { /* this class is only added on iOS */ + height: 100dvh; + position: fixed; +} + +/* Adjustments for app banner non-sticky behavior */ +.branch-banner-is-active.branch-banner-inline { + transition: 0ms !important; +} + +.disable-ios-scroll.branch-banner-is-active.branch-banner-inline { + margin-top: 0 !important; +} + +.disable-ios-scroll.branch-banner-is-active.branch-banner-inline #branch-banner-iframe { + position: relative; + display: block; } diff --git a/libs/blocks/global-navigation/global-navigation.js b/libs/blocks/global-navigation/global-navigation.js index a1879aa779b..621a9f2a6ca 100644 --- a/libs/blocks/global-navigation/global-navigation.js +++ b/libs/blocks/global-navigation/global-navigation.js @@ -1,3 +1,4 @@ +/* eslint import/no-relative-packages: 0 */ /* eslint-disable no-async-promise-executor */ import { getConfig, @@ -5,6 +6,8 @@ import { loadIms, decorateLinks, loadScript, + getGnavSource, + getFedsPlaceholderConfig, } from '../../utils/utils.js'; import { closeAllDropdowns, @@ -13,21 +16,18 @@ import { getActiveLink, getAnalyticsValue, getExperienceName, - hasActiveLink, isActiveLink, icons, isDesktop, isTangentToViewport, lanaLog, loadBaseStyles, - loadBlock, loadDecorateMenu, rootPath, loadStyles, logErrorFor, selectors, setActiveDropdown, - setActiveLink, setCurtainState, setUserProfile, toFragment, @@ -37,12 +37,20 @@ import { isDarkMode, darkIcons, setDisableAEDState, - getDisableAEDState, + animateInSequence, + transformTemplateToMobile, + closeAllTabs, + disableMobileScroll, + enableMobileScroll, + setAsyncDropdownCount, + branchBannerLoadCheck, + getBranchBannerInfo, } from './utilities/utilities.js'; -import { getFedsPlaceholderConfig } from '../../utils/federated.js'; import { replaceKey, replaceKeyArray } from '../../features/placeholders.js'; +import { getMiloLocaleSettings } from '../merch/merch.js'; + const SIGNIN_CONTEXT = getConfig()?.signInContext; function getHelpChildren() { @@ -53,6 +61,33 @@ function getHelpChildren() { ]; } +const getMessageEventListener = () => { + const configListener = getConfig().unav?.profile?.messageEventListener; + if (configListener) return configListener; + + return (event) => { + const { name, payload, executeDefaultAction } = event.detail; + if (!name || name !== 'System' || !payload || typeof executeDefaultAction !== 'function') return; + switch (payload.subType) { + case 'AppInitiated': + window.adobeProfile?.getUserProfile() + .then((data) => { setUserProfile(data); }) + .catch(() => { setUserProfile({}); }); + break; + case 'SignOut': + executeDefaultAction(); + break; + case 'ProfileSwitch': + Promise.resolve(executeDefaultAction()).then((profile) => { + if (profile) window.location.reload(); + }); + break; + default: + break; + } + }; +}; + export const CONFIG = { icons: isDarkMode() ? darkIcons : icons, delays: { @@ -74,28 +109,24 @@ export const CONFIG = { name: 'profile', attributes: { isSignUpRequired: false, + messageEventListener: getMessageEventListener(), componentLoaderConfig: { config: { enableLocalSection: true, + enableProfileSwitcher: true, miniAppContext: { - onMessage: (name, payload) => { - if (name === 'System' && payload.subType === 'AppInitiated') { - window.adobeProfile?.getUserProfile() - .then((data) => { setUserProfile(data); }) - .catch(() => { setUserProfile({}); }); - } - }, logger: { trace: () => {}, debug: () => {}, info: () => {}, - warn: (e) => lanaLog({ message: 'Profile Menu warning', e, tags: 'errorType=warn,module=universalnav' }), - error: (e) => lanaLog({ message: 'Profile Menu error', e, tags: 'errorType=error,module=universalnav' }), + warn: (e) => lanaLog({ message: 'Profile Menu warning', e, tags: 'universalnav', errorType: 'warn' }), + error: (e) => lanaLog({ message: 'Profile Menu error', e, tags: 'universalnav', errorType: 'error' }), }, }, ...getConfig().unav?.profile?.config, }, }, + complexConfig: getConfig().unav?.profile?.complexConfig || null, callbacks: { onSignIn: () => { window.adobeIMS?.signIn(SIGNIN_CONTEXT); }, onSignUp: () => { window.adobeIMS?.signIn(SIGNIN_CONTEXT); }, @@ -105,7 +136,14 @@ export const CONFIG = { appswitcher: { name: 'app-switcher' }, notifications: { name: 'notifications', - attributes: { notificationsConfig: { applicationContext: { appID: getConfig().unav?.uncAppId || 'adobecom' } } }, + attributes: { + notificationsConfig: { + applicationContext: { + appID: getConfig().unav?.uncAppId || 'adobecom', + ...getConfig().unav?.uncConfig, + }, + }, + }, }, help: { name: 'help', @@ -118,6 +156,7 @@ export const CONFIG = { callbacks: getConfig().jarvis?.callbacks, }, }, + cart: { name: 'cart' }, }, }, }; @@ -152,7 +191,7 @@ export const LANGMAP = { // signIn, decorateSignIn and decorateProfileTrigger can be removed if IMS takes over the profile const signIn = (options = {}) => { if (typeof window.adobeIMS?.signIn !== 'function') { - lanaLog({ message: 'IMS signIn method not available', tags: 'errorType=warn,module=gnav' }); + lanaLog({ message: 'IMS signIn method not available', tags: 'gnav', errorType: 'warn' }); return; } window.adobeIMS.signIn(options); @@ -188,7 +227,7 @@ const decorateSignIn = async ({ rawElem, decoratedElem }) => { signIn(SIGNIN_CONTEXT); }); } else { - lanaLog({ message: 'Sign in link not found in dropdown.', tags: 'errorType=warn,module=gnav' }); + lanaLog({ message: 'Sign in link not found in dropdown.', tags: 'gnav', errorType: 'warn' }); } decoratedElem.append(dropdownElem); @@ -205,6 +244,7 @@ const decorateProfileTrigger = async ({ avatar }) => { const buttonElem = toFragment` `; @@ -220,10 +260,10 @@ const decorateProfileTrigger = async ({ avatar }) => { }; let keyboardNav; -const setupKeyboardNav = async () => { +const setupKeyboardNav = async (newMobileWithLnav) => { keyboardNav = keyboardNav || new Promise(async (resolve) => { - const KeyboardNavigation = await loadBlock('./keyboard/index.js'); - const instance = new KeyboardNavigation(); + const { default: KeyboardNavigation } = await import('./utilities/keyboard/index.js'); + const instance = new KeyboardNavigation(newMobileWithLnav); resolve(instance); }); }; @@ -245,10 +285,12 @@ const getBrandImage = (image, brandImageOnly) => { return brandImageOnly ? CONFIG.icons.brand : CONFIG.icons.company; }; -const closeOnClickOutside = (e) => { - if (!isDesktop.matches) return; +const closeOnClickOutside = (e, isLocalNav, navWrapper) => { + if (isLocalNav && navWrapper.classList.contains('feds-nav-wrapper--expanded')) return; + const newMobileNav = getMetadata('mobile-gnav-v2') !== 'false'; + if (!isDesktop.matches && !newMobileNav) return; - const openElemSelector = `${selectors.globalNav} [aria-expanded = "true"]`; + const openElemSelector = `${selectors.globalNav} [aria-expanded = "true"]:not(.universal-nav-container *), ${selectors.localNav} [aria-expanded = "true"]`; const isClickedElemOpen = [...document.querySelectorAll(openElemSelector)] .find((openItem) => openItem.parentElement.contains(e.target)); @@ -277,8 +319,13 @@ const convertToPascalCase = (str) => str .map((s) => s.charAt(0).toUpperCase() + s.slice(1)) .join(' '); +const removeLocalNav = () => { + lanaLog({ message: 'Gnav Localnav was removed, potential CLS', tags: 'gnav-localnav' }); + document.querySelector('.feds-localnav')?.remove(); +}; + class Gnav { - constructor({ content, block } = {}) { + constructor({ content, block, newMobileNav } = {}) { this.content = content; this.block = block; this.customLinks = getConfig()?.customLinks?.split(',') || []; @@ -286,7 +333,7 @@ class Gnav { this.blocks = { profile: { rawElem: this.content.querySelector('.profile'), - decoratedElem: toFragment`
`, + decoratedElem: toFragment`
`, }, search: { config: { icon: CONFIG.icons.search } }, breadcrumbs: { wrapper: '' }, @@ -294,8 +341,12 @@ class Gnav { this.setupUniversalNav(); this.elements = {}; + this.newMobileNav = newMobileNav; } + // eslint-disable-next-line no-return-assign + getOriginalTitle = (firstElem) => this.originalTitle ||= firstElem.textContent?.split('::'); + setupUniversalNav = () => { const meta = getMetadata('universal-nav')?.toLowerCase(); this.universalNavComponents = meta?.split(',').map((option) => option.trim()) @@ -311,31 +362,42 @@ class Gnav { }; init = () => logErrorFor(async () => { + branchBannerLoadCheck(this.updatePopupPosition); this.elements.curtain = toFragment`
`; // Order is important, decorateTopnavWrapper will render the nav // Ensure any critical task is executed before it const tasks = [ + // decorateAside is the only async function that fires prior to rendering + // (at time of writing). If there is no aside it returns sync -- no problem. + // But if there is, we need those functions (import + decorate) to enter the event loop + // before the delayed decorateDropdown function does. + // the rest is taken care of by the 'await' semantics + // We needn't worry about delays now since decorateAside + // needed to run anyway prior to decorateTopNavWrapper + this.decorateAside, this.decorateMainNav, this.decorateTopNav, - this.decorateAside, this.decorateTopnavWrapper, loadBaseStyles, this.ims, this.addChangeEventListeners, ]; + const fetchKeyboardNav = () => { + setupKeyboardNav(this.isLocalNav()); + }; this.block.addEventListener('click', this.loadDelayed); - this.block.addEventListener('keydown', setupKeyboardNav); + this.block.addEventListener('keydown', fetchKeyboardNav); setTimeout(this.loadDelayed, CONFIG.delays.loadDelayed); - setTimeout(setupKeyboardNav, CONFIG.delays.keyboardNav); - for await (const task of tasks) { + setTimeout(fetchKeyboardNav, CONFIG.delays.keyboardNav); + for (const task of tasks) { await yieldToMain(); await task(); } - document.addEventListener('click', closeOnClickOutside); + document.addEventListener('click', (e) => closeOnClickOutside(e, this.isLocalNav(), this.elements.navWrapper)); isDesktop.addEventListener('change', closeAllDropdowns); - }, 'Error in global navigation init', 'errorType=error,module=gnav'); + }, 'Error in global navigation init', 'gnav', 'error'); ims = async () => (window.adobeIMS?.initialized ? this.imsReady() : loadIms() .then(() => this.imsReady()) @@ -344,9 +406,17 @@ class Gnav { window.addEventListener('onImsLibInstance', () => this.imsReady()); return; } - lanaLog({ message: 'GNAV: Error with IMS', e, tags: 'errorType=info,module=gnav' }); + lanaLog({ message: 'GNAV: Error with IMS', e, tags: 'gnav', errorType: 'info' }); })); + decorateProductEntryCTA = () => { + const button = this.content.querySelector('.product-entry-cta a'); + if (!button) return null; + const cta = decorateCta({ elem: button, type: this.getMainNavItemType(button) }); + cta.closest('.feds-cta-wrapper').classList.add('feds-product-entry-cta'); + return cta; + }; + decorateTopNav = () => { this.elements.mobileToggle = this.decorateToggle(); this.elements.topnav = toFragment` @@ -356,6 +426,7 @@ class Gnav { ${this.decorateBrand()}
${this.elements.navWrapper} + ${getMetadata('product-entry-cta')?.toLowerCase() === 'on' ? this.decorateProductEntryCTA() : ''} ${getConfig().searchEnabled === 'on' ? toFragment`` : ''} ${this.useUniversalNav ? this.blocks.universalNav : ''} ${(!this.useUniversalNav && this.blocks.profile.rawElem) ? this.blocks.profile.decoratedElem : ''} @@ -364,14 +435,93 @@ class Gnav { `; }; + decorateLocalNav = async () => { + if (!this.isLocalNav()) { + removeLocalNav(); + return; + } + const localNavItems = this.elements.navWrapper.querySelector('.feds-nav').querySelectorAll('.feds-navItem:not(.feds-navItem--section, .feds-navItem--mobile-only)'); + const firstElem = localNavItems[0]?.querySelector('a') || localNavItems[0]?.querySelector('button'); + if (!firstElem) { + lanaLog({ message: 'GNAV: Incorrect authoring of localnav found.', tags: 'gnav', errorType: 'info' }); + return; + } + const [title, navTitle = ''] = this.getOriginalTitle(firstElem); + let localNav = document.querySelector('.feds-localnav'); + if (!localNav) { + lanaLog({ + message: 'GNAV: Localnav does not include \'localnav\' in its name.', + tags: 'gnav', + errorType: 'info', + }); + localNav = toFragment`
`; + this.block.after(localNav); + } + localNav.setAttribute('daa-lh', `${title}_localNav`); + localNav.append(toFragment``, toFragment`
`, toFragment`
`, toFragment`.`); + + const itemWrapper = localNav.querySelector('.feds-localnav-items'); + const titleLabel = await replaceKey('overview', getFedsPlaceholderConfig()); + + localNavItems.forEach((elem, idx) => { + const clonedItem = elem.cloneNode(true); + const link = clonedItem.querySelector('a, button'); + + if (link) { + link.dataset.title = link.textContent; + } + + if (idx === 0) { + localNav.querySelector('.feds-localnav-title').innerText = title.trim(); + link.textContent = navTitle.trim() || titleLabel; + } + + itemWrapper.appendChild(clonedItem); + }); + + localNav.querySelector('.feds-localnav-title').addEventListener('click', () => { + localNav.classList.toggle('feds-localnav--active'); + const isActive = localNav.classList.contains('feds-localnav--active'); + localNav.querySelector('.feds-localnav-title').setAttribute('aria-expanded', isActive); + localNav.querySelector('.feds-localnav-title').setAttribute('daa-ll', `${title}_localNav|${isActive ? 'close' : 'open'}`); + }); + + localNav.querySelector('.feds-localnav-curtain').addEventListener('click', (e) => { + trigger({ element: e.currentTarget, event: e, type: 'localNav-curtain' }); + }); + const promo = document.querySelector('.feds-promo-aside-wrapper'); + if (promo) localNav.classList.add('has-promo'); + this.elements.localNav = localNav; + firstElem.textContent = title.trim(); + const isAtTop = () => { + const rect = this.elements.localNav.getBoundingClientRect(); + // note: ios safari changes between -0.34375, 0, and 0.328125 + return rect.top === 0; + }; + window.addEventListener('scroll', () => { + const classList = this.elements.localNav?.classList; + if (isAtTop()) { + if (!classList?.contains('is-sticky')) { + classList?.add('is-sticky'); + } + } else { + classList?.remove('is-sticky'); + } + }); + }; + decorateTopnavWrapper = async () => { const breadcrumbs = isDesktop.matches ? await this.decorateBreadcrumbs() : ''; this.elements.topnavWrapper = toFragment`
${this.elements.topnav} ${breadcrumbs} -
`; +
+ `; - this.block.append(this.elements.curtain, this.elements.aside, this.elements.topnavWrapper); + this.block.append( + this.elements.curtain, + this.elements.topnavWrapper, + ); }; addChangeEventListeners = () => { @@ -425,17 +575,17 @@ class Gnav { this.block.removeEventListener('keydown', this.loadDelayed); if (this.searchPresent()) { const [ - Search, + { default: Search }, ] = await Promise.all([ - loadBlock('../features/search/gnav-search.js'), + import('./features/search/gnav-search.js'), loadStyles(rootPath('features/search/gnav-search.css')), ]); this.Search = Search; } if (!this.useUniversalNav) { - const [ProfileDropdown] = await Promise.all([ - loadBlock('../features/profile/dropdown.js'), + const [{ default: ProfileDropdown }] = await Promise.all([ + import('./features/profile/dropdown.js'), loadStyles(rootPath('features/profile/dropdown.css')), ]); this.ProfileDropdown = ProfileDropdown; @@ -443,7 +593,7 @@ class Gnav { resolve(); } catch (e) { - lanaLog({ message: 'GNAV: Error within loadDelayed', e, tags: 'errorType=warn,module=gnav' }); + lanaLog({ message: 'GNAV: Error within loadDelayed', e, tags: 'gnav', errorType: 'warn' }); resolve(); } }); @@ -462,7 +612,12 @@ class Gnav { await task(); } } catch (e) { - lanaLog({ message: 'GNAV: issues within onReady', e, tags: 'errorType=info,module=gnav' }); + lanaLog({ + e, + tags: 'gnav', + errorType: 'info', + message: `GNAV: issues within imsReady - ${this.useUniversalNav ? 'decorateUniversalNav' : 'decorateProfile'}`, + }); } }; @@ -488,7 +643,8 @@ class Gnav { lanaLog({ message: 'GNAV: decorateProfile has failed to fetch profile data', e: `${profileData.statusText} url: ${profileData.url}`, - tags: 'errorType=info,module=gnav', + tags: 'gnav', + errorType: 'info', }); return; } @@ -537,10 +693,10 @@ class Gnav { return 'linux'; }; - const unavVersion = new URLSearchParams(window.location.search).get('unavVersion') || '1.3'; + const unavVersion = new URLSearchParams(window.location.search).get('unavVersion') || '1.4'; await Promise.all([ loadScript(`https://${environment}.adobeccstatic.com/unav/${unavVersion}/UniversalNav.js`), - loadStyles(`https://${environment}.adobeccstatic.com/unav/${unavVersion}/UniversalNav.css`), + loadStyles(`https://${environment}.adobeccstatic.com/unav/${unavVersion}/UniversalNav.css`, true), ]); const getChildren = () => { @@ -622,6 +778,7 @@ class Gnav { target: this.blocks.universalNav, env: environment, locale, + countryCode: getMiloLocaleSettings(getConfig().locale)?.country || 'US', imsClientId: window.adobeid?.client_id, theme: isDarkMode() ? 'dark' : 'light', analyticsContext: { @@ -637,6 +794,7 @@ class Gnav { }, children: getChildren(), isSectionDividerRequired: getConfig()?.unav?.showSectionDivider, + showTrayExperience: (!isDesktop.matches), }); // Exposing UNAV config for consumers @@ -644,7 +802,7 @@ class Gnav { await window.UniversalNav(CONFIG.universalNav.universalNavConfig); this.decorateAppPrompt({ getAnchorState: () => window.UniversalNav.getComponent?.('app-switcher') }); isDesktop.addEventListener('change', () => { - window.UniversalNav.reload(CONFIG.universalNav.universalNavConfig); + window.UniversalNav.reload(getConfiguration()); }); }; @@ -684,9 +842,32 @@ class Gnav { isToggleExpanded = () => this.elements.mobileToggle?.getAttribute('aria-expanded') === 'true'; + isLocalNav = () => this.newMobileNav && this + .elements + .navWrapper + ?.querySelectorAll('.feds-nav > section.feds-navItem') + ?.length <= 1; + + hasMegaMenu = () => this + .elements + .navWrapper + ?.querySelectorAll('.feds-nav > section.feds-navItem') + ?.length >= 1; + toggleMenuMobile = () => { const toggle = this.elements.mobileToggle; const isExpanded = this.isToggleExpanded(); + if (!isExpanded && this.newMobileNav) { + const sections = document.querySelectorAll('header.new-nav .feds-nav > section.feds-navItem > button.feds-navLink'); + animateInSequence(sections, 0.075); + if (this.isLocalNav() && this.hasMegaMenu()) { + disableMobileScroll(); + const section = sections[0]; + queueMicrotask(() => section.click()); + } + } else if (isExpanded && this.isLocalNav()) { + enableMobileScroll(); + } toggle?.setAttribute('aria-expanded', !isExpanded); document.body.classList.toggle('disable-scroll', !isExpanded); this.elements.navWrapper?.classList?.toggle('feds-nav-wrapper--expanded', !isExpanded); @@ -696,7 +877,7 @@ class Gnav { }; decorateToggle = () => { - if (!this.mainNavItemCount) return ''; + if (!this.mainNavItemCount || (this.newMobileNav && !this.hasMegaMenu())) return ''; const toggle = toFragment` + `; + // Get the outerHTML of the .feds-brand element or use a default empty if it doesn't exist + const brand = document.querySelector('.feds-brand')?.outerHTML || ''; + const breadCrumbs = document.querySelector('.feds-breadcrumbs')?.outerHTML; + popup.innerHTML = ` +
+ ${localnav ? brand : await replaceText(mainMenu, getFedsPlaceholderConfig())} + +
+
+ ${breadCrumbs || ''} + ${item.textContent.trim()} +
+
+ ${tabs.map(({ name, daallTab }, i) => ` + + `).join('')} +
+
+ ${tabs.map(({ links, daalhTabContent }, i) => ` + `).join('')} +
+
+ ${CTA} +
+ `; + + popup.querySelector('.close-icon')?.addEventListener('click', () => { + document.querySelector(selectors.mainNavToggle).focus(); + closeAllDropdowns(); + enableMobileScroll(); + }); + popup.querySelector('.main-menu')?.addEventListener('click', (e) => { + e.target.closest(selectors.activeDropdown).querySelector('button').focus(); + enableMobileScroll(); + closeAllDropdowns(); + }); + const tabbuttons = popup.querySelectorAll('.tabs button'); + const tabpanels = popup.querySelectorAll('.tab-content [role="tabpanel"]'); + + tabpanels.forEach((panel) => { + animateInSequence(panel.querySelectorAll('a'), 0.02); + }); + + tabbuttons.forEach((tab, i) => { + tab.addEventListener('click', () => { + closeAllTabs(tabbuttons, tabpanels); + tabpanels?.[i]?.removeAttribute('hidden'); + tab.setAttribute('aria-selected', 'true'); + }); + }); + return originalContent; +}; + +export const takeWhile = (xs, f) => { + const r = []; + for (let i = 0; i < xs.length; i += 1) { + if (!f(xs[i])) return r; + r.push(xs[i]); + } + return r; +}; + +export const dropWhile = (xs, f) => { + if (!xs.length) return xs; + if (f(xs[0])) return dropWhile(xs.slice(1), f); + return xs; +}; + +export function getGnavHeight() { + let topHeight = document.querySelector('header')?.offsetHeight || 0; + if (isLocalNav() && !isDesktop.matches) { + const localNav = document.querySelector('.feds-localnav'); + topHeight = localNav.offsetHeight || DEFAULT_LOCALNAV_HEIGHT; + } + + const fedsPromo = document.querySelector('.feds-promo-aside-wrapper'); + if (fedsPromo instanceof HTMLElement) { + topHeight += fedsPromo.offsetHeight; + } + + return topHeight; +} + +/** + * Initializes a MutationObserver to monitor the body + for the addition or removal of a branch banner iframe. + * When the branch banner is added or removed, updates the branch banner + information and adjusts the local navigation and popup position accordingly. + * A callback function to update the popup position when the branch banner is added or removed. + * @param {Function} updatePopupPosition + */ +export const [branchBannerLoadCheck, getBranchBannerInfo] = (() => { + const branchBannerInfo = { + isPresent: false, + isSticky: false, + height: 0, + }; + return [ + (updatePopupPosition) => { + // Create a MutationObserver instance to monitor the body for new child elements + const observer = new MutationObserver((mutationsList) => { + mutationsList.forEach((mutation) => { + if (mutation.type === 'childList') { + mutation.addedNodes.forEach((node) => { + // Check if the added node has the ID 'branch-banner-iframe' + if (node.id === 'branch-banner-iframe') { + branchBannerInfo.isPresent = true; + // The element is added, now check its height and sticky status + // Check if the element has a sticky position + branchBannerInfo.isSticky = window.getComputedStyle(node).position === 'fixed'; + branchBannerInfo.height = node.offsetHeight; // Get the height of the element + if (branchBannerInfo.isSticky) { + // Adjust the top position of the lnav to account for the branch banner height + document.querySelector('.feds-localnav').style.top = `${branchBannerInfo.height}px`; + } else { + // Add a class to the body to indicate the presence of a non-sticky branch banner + document.body.classList.add('branch-banner-inline'); + } + // Update the popup position when the branch banner is added + updatePopupPosition(); + } + }); + + mutation.removedNodes.forEach((node) => { + // Check if the removed node has the ID 'branch-banner-iframe' + if (node.id === 'branch-banner-iframe') { + branchBannerInfo.isPresent = false; + branchBannerInfo.isSticky = false; + branchBannerInfo.height = 0; + // Remove the top style attribute when the branch banner is removed + document.querySelector('.feds-localnav')?.removeAttribute('style'); + // Remove the class indicating the presence of a non-sticky branch banner + document.body.classList.remove('branch-banner-inline'); + // Update the popup position when the branch banner is removed + updatePopupPosition(); + // Optional: Disconnect the observer if you no longer need to track it + observer.disconnect(); + } + }); + } + }); + }); + + // Start observing the body element for added child nodes + observer.observe(document.body, { + childList: true, // Watch for added or removed child nodes + subtree: false, // Only observe direct children of + }); + }, + /** + * Retrieves the current status of the branch banner. + * @returns {Object} An object containing the presence and sticky status of the branch banner. + */ + () => branchBannerInfo, + ]; +})(); diff --git a/libs/blocks/gnav/gnav-appLauncher.js b/libs/blocks/gnav/gnav-appLauncher.js index c36f224ca22..6b907f9c0a7 100644 --- a/libs/blocks/gnav/gnav-appLauncher.js +++ b/libs/blocks/gnav/gnav-appLauncher.js @@ -1,6 +1,6 @@ import { createTag } from '../../utils/utils.js'; -const WAFFLE_ICON = ''; +const WAFFLE_ICON = ''; function decorateAppsMenu(profileEl, appsDom, toggle) { const appsNavItem = createTag('div', { class: 'gnav-navitem app-launcher has-menu', 'da-ll': 'App Launcher' }); diff --git a/libs/blocks/gnav/gnav.js b/libs/blocks/gnav/gnav.js index 10ebe8b7010..f3d8237afc0 100644 --- a/libs/blocks/gnav/gnav.js +++ b/libs/blocks/gnav/gnav.js @@ -13,10 +13,10 @@ import { analyticsGetLabel, } from '../../martech/attributes.js'; -const COMPANY_IMG = ''; -const BRAND_IMG = ''; -const BRAND_LOGO_AS_TEXT = ''; -const SEARCH_ICON = ''; +const COMPANY_IMG = ''; +const BRAND_IMG = ''; +const BRAND_LOGO_AS_TEXT = ''; +const SEARCH_ICON = ''; const SEARCH_DEBOUNCE_MS = 300; export const IS_OPEN = 'is-open'; const SEARCH_TYPE_CONTEXTUAL = 'contextual'; diff --git a/libs/blocks/hero-marquee/hero-marquee.css b/libs/blocks/hero-marquee/hero-marquee.css index 37833e56b94..d9095227b35 100644 --- a/libs/blocks/hero-marquee/hero-marquee.css +++ b/libs/blocks/hero-marquee/hero-marquee.css @@ -2,7 +2,7 @@ --s-min-height: 248px; /* 360px */ --m-min-height: 448px; /* 560px */ --l-min-height: 588px; /* 700px */ - + /* 112 = 56px default padding */ padding: var(--spacing-xl) 0; @@ -41,7 +41,7 @@ .hero-marquee .action-area { flex-flow: column wrap; - gap: var(--spacing-s); + gap: var(--spacing-s); width: 100%; } @@ -95,8 +95,8 @@ } .hero-marquee.center .action-area, -.hero-marquee.center .lockup-area { - justify-content: center; +.hero-marquee.center .lockup-area { + justify-content: center; } .hero-marquee .norm p { margin: var(--spacing-xs) 0; } @@ -158,7 +158,7 @@ html[dir="rtl"] .hero-marquee .foreground { /* Row Types */ .hero-marquee .row-list { text-align: left; -} +} html[dir="rtl"] .hero-marquee .row-list { text-align: right; @@ -170,7 +170,7 @@ html[dir="rtl"] .hero-marquee .row-list { .hero-marquee .row-list li { margin-bottom: var(--spacing-xxs); -} +} /* row-qr */ .hero-marquee .row-qrcode .row-wrapper { @@ -207,8 +207,8 @@ html[dir="rtl"] .hero-marquee .row-list { justify-content: center; } -.hero-marquee.center .row-list .row-wrapper { - margin: 0 auto; +.hero-marquee.center .row-list .row-wrapper { + margin: 0 auto; } .hero-marquee .row-list .icon-list { @@ -258,15 +258,15 @@ html[dir="rtl"] .hero-marquee li.icon-item span.icon { display: block; text-align: center; } - + .hero-marquee.media-top-mobile { flex-direction: column-reverse; } .hero-marquee.media-top-mobile .foreground .copy { order: 2; - } - + } + .hero-marquee.media-cover:not(.bg-bottom-mobile), .hero-marquee.media-cover:not(.media-hidden-mobile) { padding-bottom: 0; @@ -286,7 +286,7 @@ html[dir="rtl"] .hero-marquee li.icon-item span.icon { .hero-marquee.bg-bottom-mobile { padding-bottom: unset; } - + .hero-marquee.media-cover.media-top-mobile, .hero-marquee.media-cover.media-hidden-mobile:not(.bg-bottom-mobile) { padding-top: 0; @@ -301,7 +301,7 @@ html[dir="rtl"] .hero-marquee li.icon-item span.icon { .hero-marquee.bg-bottom-mobile .background { order: 2; } - + .hero-marquee.media-hidden-mobile .foreground .asset, .hero-marquee.media-hidden-mobile .foreground-media { display: none; } } @@ -311,7 +311,7 @@ html[dir="rtl"] .hero-marquee li.icon-item span.icon { .hero-marquee.media-cover:not(.bg-bottom-mobile) { padding-bottom: 0; } - + .hero-marquee.media-top-tablet, .hero-marquee.media-cover.media-top-tablet { flex-direction: column-reverse; @@ -319,10 +319,10 @@ html[dir="rtl"] .hero-marquee li.icon-item span.icon { .hero-marquee.media-top-tablet > .foreground .copy { order: 2; - } - + } + .hero-marquee.media-cover.media-top-tablet, - .hero-marquee.media-cover.media-hidden-tablet { + .hero-marquee.media-cover.media-hidden-tablet:not(.bg-bottom-tablet) { padding-top: 0; padding-bottom: var(--spacing-xl); } @@ -337,7 +337,7 @@ html[dir="rtl"] .hero-marquee li.icon-item span.icon { .hero-marquee.bg-top-tablet { padding-top: 0; } - + .hero-marquee.bg-bottom-tablet { padding-bottom: 0; } @@ -345,7 +345,7 @@ html[dir="rtl"] .hero-marquee li.icon-item span.icon { .hero-marquee.bg-bottom-tablet .background { order: 2; } - + /* helper classes */ .hero-marquee.media-hidden-tablet .foreground .asset, .hero-marquee.media-hidden-tablet .foreground-media, @@ -355,15 +355,15 @@ html[dir="rtl"] .hero-marquee li.icon-item span.icon { /* Tablet UP */ @media screen and (min-width: 600px) { .hero-marquee, - .hero-marquee .action-area { + .hero-marquee .action-area { flex-direction: row; } - .hero-marquee .action-area { + .hero-marquee .action-area { align-items: center; } - - .hero-marquee.media-cover { + + .hero-marquee.media-cover { flex-direction: column; } @@ -379,7 +379,7 @@ html[dir="rtl"] .hero-marquee li.icon-item span.icon { /* min height */ .hero-marquee.s-min-height-tablet { min-height: var(--s-min-height);} .hero-marquee.l-min-height-tablet { min-height: var(--l-min-height);} - + /* helper classes */ .hero-marquee .order-0-tablet { order: 0; } .hero-marquee .order-1-tablet { order: 1; } @@ -400,15 +400,15 @@ html[dir="rtl"] .hero-marquee li.icon-item span.icon { display: flex; flex-direction: row; } - - .hero-marquee.media-cover { + + .hero-marquee.media-cover { flex-direction: row; } .hero-marquee.media-cover picture { display: unset; } - + .hero-marquee.media-cover.has-bg .asset { display: initial; } @@ -447,11 +447,11 @@ html[dir="rtl"] .hero-marquee li.icon-item span.icon { right: 0; left: unset; } - + .hero-marquee.asset-left > .foreground.cols-2 > .asset { order: unset; } - + /* Action area order */ .hero-marquee .main-copy .action-area, .hero-marquee .main-copy [class*='heading-'] + [class*='body-'] { diff --git a/libs/blocks/library-config/lists/blocks.js b/libs/blocks/library-config/lists/blocks.js index 19df5a7bcf7..621564b4932 100644 --- a/libs/blocks/library-config/lists/blocks.js +++ b/libs/blocks/library-config/lists/blocks.js @@ -116,7 +116,8 @@ export function getHtml(container, path) { const isBlock = element.nodeName === 'DIV' && element.className; const content = isBlock ? getTable(element) : element.outerHTML; - return `${acc}${content}`; + const brTop = !acc || acc.endsWith('
') ? '' : BLOCK_SPACING; + return `${acc}${brTop}${content}${BLOCK_SPACING}`; }, ''); } @@ -283,7 +284,7 @@ export default async function loadBlocks(blocks, list, query, type) { const containerHtml = getHtml(container, block.path); e.target.classList.add('copied'); setTimeout(() => { e.target.classList.remove('copied'); }, 3000); - const blob = new Blob([`${BLOCK_SPACING}${containerHtml}${BLOCK_SPACING}`], { type: 'text/html' }); + const blob = new Blob([containerHtml], { type: 'text/html' }); createCopy(blob); }); item.append(name, copy); diff --git a/libs/blocks/locui-create/locui-create.css b/libs/blocks/locui-create/locui-create.css new file mode 100644 index 00000000000..76edb29b0b3 --- /dev/null +++ b/libs/blocks/locui-create/locui-create.css @@ -0,0 +1,16 @@ +.locui-create.missing-details { + margin: 0 auto; + margin-top: 10vh; + max-width: 60%; + border-radius: 10px; + border: 10px solid var(--color-gray-200); + padding: 10px 30px 30px; +} + +.locui-create .goto-step ul { + list-style-type: disc; +} + +.locui-create .goto-step p { + margin: 0; +} diff --git a/libs/blocks/locui-create/locui-create.js b/libs/blocks/locui-create/locui-create.js new file mode 100644 index 00000000000..dfdc26df9f6 --- /dev/null +++ b/libs/blocks/locui-create/locui-create.js @@ -0,0 +1,22 @@ +import { createTag } from '../../utils/utils.js'; + +function makeGotoSteps(link, linkText) { + const goToAnchor = createTag('a', { href: link, target: '_blank', rel: 'noopener noreferrer' }, linkText); + return goToAnchor; +} + +export default function init(el) { + el.classList.add('missing-details'); + const heading = createTag('h2', null, 'Missing project details'); + const paragraph = createTag('p', null, 'The project details were removed after you logged in. To resolve this:'); + const steps = createTag('ol', null); + const gotoSteps = createTag('ul', null); + const gotoURls = [{ link: 'https://milostudio.adobe.com', linkText: 'Production' }, { link: 'https://milostudio.stage.adobe.com', linkText: 'Stage' }, { link: 'https://milostudio.dev.adobe.com', linkText: 'Development' }]; + const goToContainer = createTag('div', { class: 'goto-step' }); + gotoURls.forEach((gotoUrl) => gotoSteps.append(createTag('li', null, makeGotoSteps(gotoUrl.link, gotoUrl.linkText)))); + goToContainer.append(createTag('p', null, 'Please navigate to the respective MiloStudio environment:')); + goToContainer.append(gotoSteps); + const stepsList = ['Close this window or tab.', goToContainer, 'Select the tenant.', 'Click on Localization.', 'Click on "Add New Project".']; + stepsList.forEach((step) => steps.append(createTag('li', null, step))); + el.append(heading, paragraph, steps); +} diff --git a/libs/blocks/marketo/marketo-multi.js b/libs/blocks/marketo/marketo-multi.js new file mode 100644 index 00000000000..27aa613ef6b --- /dev/null +++ b/libs/blocks/marketo/marketo-multi.js @@ -0,0 +1,105 @@ +import { createTag } from '../../utils/utils.js'; +import { debounce } from '../../utils/action.js'; + +const VALIDATION_STEP = { + name: '2', + phone: '2', + mktoFormsJobTitle: '2', + mktoFormsFunctionalArea: '2', + company: '3', + state: '3', + postcode: '3', + mktoFormsPrimaryProductInterest: '3', + mktoFormsCompanyType: '3', +}; + +function updateStepDetails(formEl, step, totalSteps) { + formEl.classList.add('hide-errors'); + formEl.classList.remove('show-warnings'); + formEl.dataset.step = step; + formEl.querySelector('.step-details .step').textContent = `Step ${step} of ${totalSteps}`; + formEl.querySelector('#mktoButton_new')?.classList.toggle('mktoHidden', step !== totalSteps); + formEl.querySelector('#mktoButton_next')?.classList.toggle('mktoHidden', step === totalSteps); + setTimeout(() => { + formEl.querySelector(`.mktoFormRowTop[data-validate="${step}"]:not(.mktoHidden) input`)?.focus(); + }, 100); +} + +function showPreviousStep(formEl, totalSteps) { + const currentStep = parseInt(formEl.dataset.step, 10); + const previousStep = currentStep - 1; + const backBtn = formEl.querySelector('.back-btn'); + + updateStepDetails(formEl, previousStep, totalSteps); + if (previousStep === 1) backBtn?.remove(); +} + +const showNextStep = (formEl, currentStep, totalSteps) => { + if (currentStep === totalSteps) return; + const nextStep = currentStep + 1; + const stepDetails = formEl.querySelector('.step-details'); + + if (!stepDetails.querySelector('.back-btn')) { + const backBtn = createTag('button', { class: 'back-btn', type: 'button' }, 'Back'); + backBtn.addEventListener('click', () => showPreviousStep(formEl, totalSteps)); + stepDetails.prepend(backBtn); + } + + updateStepDetails(formEl, nextStep, totalSteps); +}; + +export const formValidate = (formEl) => { + const currentStep = parseInt(formEl.dataset.step, 10) || 1; + + if (formEl.querySelector(`.mktoFormRowTop[data-validate="${currentStep}"] .mktoInvalid`)) { + return false; + } + + const totalSteps = formEl.closest('.marketo').classList.contains('multi-3') ? 3 : 2; + showNextStep(formEl, currentStep, totalSteps); + + return currentStep === totalSteps; +}; + +function setValidationSteps(formEl, totalSteps) { + formEl.querySelectorAll('.mktoFormRowTop').forEach((row) => { + const rowAttr = row.getAttribute('data-mktofield') || row.getAttribute('data-mkto_vis_src'); + const step = VALIDATION_STEP[rowAttr] ? Math.min(VALIDATION_STEP[rowAttr], totalSteps) : 1; + row.dataset.validate = rowAttr?.startsWith('adobe-privacy') ? totalSteps : step; + }); +} + +function onRender(formEl, totalSteps) { + const currentStep = parseInt(formEl.dataset.step, 10); + const submitButton = formEl.querySelector('#mktoButton_new'); + submitButton?.classList.toggle('mktoHidden', currentStep !== totalSteps); + formEl.querySelector('.step-details .step').textContent = `Step ${currentStep} of ${totalSteps}`; + setValidationSteps(formEl, totalSteps); +} + +const readyForm = (form, totalSteps) => { + const formEl = form.getFormElem().get(0); + form.onValidate(() => formValidate(formEl)); + + const nextButton = createTag('button', { type: 'button', id: 'mktoButton_next', class: 'mktoButton mktoUpdatedBTN mktoVisible' }, 'Next'); + nextButton.addEventListener('click', () => form.validate()); + const nextContainer = createTag('div', { class: 'mktoButtonRow' }, nextButton); + const stepEl = createTag('p', { class: 'step' }, `Step 1 of ${totalSteps}`); + const stepDetails = createTag('div', { class: 'step-details' }, stepEl); + formEl.append(nextContainer, stepDetails); + + const debouncedOnRender = debounce(() => onRender(formEl, totalSteps), 10); + const observer = new MutationObserver(debouncedOnRender); + observer.observe(formEl, { childList: true, subtree: true }); + debouncedOnRender(); +}; + +export default (el) => { + if (!el.classList.contains('multi-step')) return; + const formEl = el.querySelector('form'); + const totalSteps = el.classList.contains('multi-3') ? 3 : 2; + formEl.dataset.step = 1; + + const { MktoForms2 } = window; + MktoForms2.whenReady((form) => { readyForm(form, totalSteps); }); +}; diff --git a/libs/blocks/marketo/marketo.css b/libs/blocks/marketo/marketo.css index 130a6848c7e..f9c2b4cd29a 100644 --- a/libs/blocks/marketo/marketo.css +++ b/libs/blocks/marketo/marketo.css @@ -4,7 +4,11 @@ --marketo-form-border: #6E6E6E; --marketo-form-error: #D7373F; --marketo-form-selected: #0265DC; - --marketo-form-placeholder-height: calc(78px * 3 + 57px); /* 3 rows + submit */ + --marketo-form-focus: #147AF3; + --marketo-form-placeholder-height: calc(78px * 7 + 57px); /* 7 rows + submit */ + --marketo-form-placeholder-height-desktop: calc(78px * 4 + 57px); /* 4 rows + submit */ + --marketo-form-placeholder-height-multi: calc(78px * 2 + 57px); /* 2 rows + submit */ + --marketo-form-placeholder-height-multi-desktop: calc(78px + 57px); /* 1 row + submit */ --marketo-form-min-height: 215px; --marketo-form-max-height: 10000px; } @@ -23,6 +27,10 @@ min-height: var(--marketo-form-placeholder-height); } +.marketo.marketo.multi-step.loading form { + min-height: var(--marketo-form-placeholder-height-multi); +} + .marketo .marketo-title { font-size: 28px; font-weight: bold; @@ -85,6 +93,50 @@ display: contents; } +.marketo.multi-step .mktoFormRow.mktoFormRowTop[data-validate="2"], +.marketo.multi-step .mktoFormRow.mktoFormRowTop[data-validate="3"] { + display: none; +} + +.marketo.multi-step .mktoForm[data-step="2"] .mktoFormRow.mktoFormRowTop[data-validate="2"], +.marketo.multi-step .mktoForm[data-step="3"] .mktoFormRow.mktoFormRowTop[data-validate="3"] { + display: contents; +} + +.marketo.multi-step .mktoForm[data-step="2"] .mktoFormRow.mktoFormRowTop[data-validate="1"], +.marketo.multi-step .mktoForm[data-step="3"] .mktoFormRow.mktoFormRowTop[data-validate="1"] { + display: none; +} + +.marketo.multi-step .mktoForm[data-step="1"] .mktoFormRow.mktoFormRowTop.adobe-privacy, +.marketo.multi-step .mktoForm[data-step="2"] .mktoFormRow.mktoFormRowTop.adobe-privacy { + display: none; +} + +.marketo.multi-step .mktoForm[data-step="3"] .mktoFormRow.mktoFormRowTop.adobe-privacy, +.marketo.multi-step.multi-2 .mktoForm[data-step="2"] .mktoFormRow.mktoFormRowTop.adobe-privacy { + display: grid; +} + +.marketo.multi-step .step-details { + display: flex; + justify-content: center; + font-size: var(--type-body-xs-size); + font-weight: normal; + line-height: var(--type-body-xs-lh); + grid-column: span 2; +} + +.marketo.multi-step .step-details button { + background: none; + border: none; + padding: 0; + text-decoration: underline; + cursor: pointer; + color: var(--link-color-dark); + margin-right: 8px; +} + .marketo .mktoFormCol.mktoVisible { width: 100%; margin-bottom: 11px; @@ -174,8 +226,8 @@ } .marketo .mktoForm .mktoField:focus-visible { - outline: 0; - border-color: var(--link-color-dark); + outline: 2px solid var(--marketo-form-focus); + outline-offset: 2px; } .marketo .mktoForm select { @@ -194,7 +246,7 @@ .marketo .mktoForm .mktoCheckboxList .mktoField:focus-visible, .marketo .mktoForm .mktoRadioList .mktoField:focus-visible { - outline: var(--link-color-dark) auto 2px; + outline: 2px solid var(--marketo-form-focus); } .marketo .mktoForm .mktoCheckboxList label, @@ -230,16 +282,16 @@ border-radius: 2px; } -.marketo .mktoForm .mktoCheckboxList.mktoInvalid input::before { - border: 2px solid var(--marketo-form-error); -} - .marketo .mktoForm .mktoCheckboxList input:checked::before { border: 2px solid var(--marketo-form-selected); background: var(--marketo-form-selected); } -.marketo .mktoForm .mktoCheckboxList.mktoInvalid input:checked::before { +.marketo .mktoForm.show-warnings .mktoCheckboxList.mktoInvalid input::before { + border: 2px solid var(--marketo-form-error); +} + +.marketo .mktoForm.show-warnings .mktoCheckboxList.mktoInvalid input:checked::before { background: var(--marketo-form-error); } @@ -320,12 +372,12 @@ outline: 2px solid var(--color-accent-focus-ring); } -.marketo .mktoForm .mktoFormRow.msg-error { +.marketo .mktoFormRow.mktoFormRowTop.msg-error .mktoFormCol { display: none; } -.marketo .mktoForm.show-warnings .mktoFormRow.msg-error { - display: contents; +.marketo .show-warnings .mktoFormRow.mktoFormRowTop.msg-error .mktoFormCol { + display: block; } .marketo .mktoForm .mktoFormRow.msg-error .mktoHtmlText { @@ -511,6 +563,16 @@ grid-column: span 2; } + .marketo.multi-step .mktoForm[data-step="2"] .mktoFormRow.mktoFormRowTop[data-validate="2"].comments, + .marketo.multi-step .mktoForm[data-step="2"] .mktoFormRow.mktoFormRowTop[data-validate="2"].demo, + .marketo.multi-step .mktoForm[data-step="2"] .mktoFormRow.mktoFormRowTop[data-validate="2"].name, + .marketo.multi-step .mktoForm[data-step="3"] .mktoFormRow.mktoFormRowTop[data-validate="3"].comments, + .marketo.multi-step .mktoForm[data-step="3"] .mktoFormRow.mktoFormRowTop[data-validate="3"].demo, + .marketo.multi-step .mktoForm[data-step="3"] .mktoFormRow.mktoFormRowTop[data-validate="3"].name { + display: block; + grid-column: span 2; + } + .marketo .mktoFormRow.mktoFormRowTop.name .mktoFormRow[data-mktofield="Salutation"] { grid-area: salutation; } @@ -579,6 +641,22 @@ } @media screen and (min-width: 1200px) { + .marketo.loading form { + min-height: var(--marketo-form-placeholder-height-desktop); + } + + .marketo.multi-step.loading form { + min-height: var(--marketo-form-placeholder-height-multi-desktop); + } + + .marketo .mktoForm { + max-height: var(--marketo-form-placeholder-height-desktop); + } + + .marketo.multi-step .mktoForm { + max-height: var(--marketo-form-placeholder-height-multi-desktop); + } + .resource-form.section.two-up { grid-template-columns: repeat(2, 1fr); } diff --git a/libs/blocks/marketo/marketo.js b/libs/blocks/marketo/marketo.js index a91fa2ee6d5..1c0496c18bb 100644 --- a/libs/blocks/marketo/marketo.js +++ b/libs/blocks/marketo/marketo.js @@ -19,8 +19,10 @@ import { loadLink, localizeLink, createTag, + getConfig, createIntersectionObserver, SLD, + MILO_EVENTS, } from '../../utils/utils.js'; const ROOT_MARGIN = 50; @@ -38,6 +40,8 @@ const FORM_MAP = { 'success-section': SUCCESS_SECTION, 'co-partner-names': 'program.copartnernames', 'sfdc-campaign-id': 'program.campaignids.sfdc', + 'poi-field': 'field_filters.products', + 'hardcoded-poi': 'program.poi', }; export const FORM_PARAM = 'form'; @@ -53,6 +57,7 @@ export const decorateURL = (destination, baseURL = window.location) => { let destinationUrl = new URL(destination, baseURL.origin); const { hostname, pathname, search, hash } = destinationUrl; + /* c8 ignore next 3 */ if (!hostname) { throw new Error('URL does not have a valid host'); } @@ -93,36 +98,35 @@ export const setPreferences = (formData) => { Object.entries(formData).forEach(([key, value]) => setPreference(key, value)); }; -const showSuccessSection = (formData, scroll = true) => { - const show = (el) => { - el.classList.remove('hide-block'); - if (scroll) el.scrollIntoView({ behavior: 'smooth' }); +const showSuccessSection = (formData) => { + const show = async (sections) => { + sections.forEach((section) => section.classList.remove('hide-block')); + await new Promise((resolve) => { setTimeout(resolve, 300); }); + const pageTop = document.querySelector('header')?.offsetHeight ?? 0; + const targetPosition = sections[0]?.getBoundingClientRect().top ?? 0; + const offsetPosition = targetPosition + window.scrollY - pageTop; + window.scrollTo(0, offsetPosition); }; const successClass = formData[SUCCESS_SECTION]?.toLowerCase().replaceAll(' ', '-'); if (!successClass) { window.lana?.log('Error showing Marketo success section', { tags: 'warn,marketo' }); return; } - const section = document.querySelector(`.section.${successClass}`); - if (section) { - show(section); - return; - } - // For Marquee use case - const maxIntervals = 6; - let count = 0; - const interval = setInterval(() => { - const el = document.querySelector(`.section.${successClass}`); - if (el) { - clearInterval(interval); - show(el); - } - count += 1; - if (count > maxIntervals) { - clearInterval(interval); - window.lana?.log('Error showing Marketo success section', { tags: 'warn,marketo' }); - } - }, 500); + + let successSections = document.querySelectorAll(`.section.${successClass}`); + show(successSections); + document.addEventListener( + MILO_EVENTS.DEFERRED, + () => { + successSections = document.querySelectorAll(`.section.${successClass}`); + show(successSections); + /* c8 ignore next 3 */ + if (!document.querySelector(`.section.${successClass}`)) { + window.lana?.log(`Error showing Marketo success section ${successClass}`, { tags: 'warn,marketo' }); + } + }, + false, + ); }; export const formSuccess = (formEl, formData) => { @@ -173,14 +177,19 @@ export const loadMarketo = (el, formData) => { const baseURL = formData[BASE_URL]; const munchkinID = formData[MUNCHKIN_ID]; const formID = formData[FORM_ID]; + const { base } = getConfig(); - loadScript(`https://${baseURL}/js/forms2/js/forms2.min.js`) + loadScript(`${base}/deps/forms2.min.js`) .then(() => { const { MktoForms2 } = window; if (!MktoForms2) throw new Error('Marketo forms not loaded'); MktoForms2.loadForm(`//${baseURL}`, munchkinID, formID); MktoForms2.whenReady((form) => { readyForm(form, formData); }); + /* c8 ignore next 3 */ + if (el.classList.contains('multi-step')) { + import('./marketo-multi.js').then(({ default: multiStep }) => multiStep(el)); + } }) .catch(() => { /* c8 ignore next 2 */ @@ -227,7 +236,7 @@ export default function init(el) { if (formData[SUCCESS_TYPE] === 'section' && ungated) { el.classList.add('hide-block'); - showSuccessSection(formData, false); + showSuccessSection(formData); return; } @@ -262,6 +271,10 @@ export default function init(el) { fragment.append(formWrapper); el.replaceChildren(fragment); el.classList.add('loading'); + /* c8 ignore next 3 */ + if (el.classList.contains('multi-2') || el.classList.contains('multi-3')) { + el.classList.add('multi-step'); + } loadLink(`https://${baseURL}`, { rel: 'dns-prefetch' }); diff --git a/libs/blocks/mas-autoblock/mas-autoblock.css b/libs/blocks/mas-autoblock/mas-autoblock.css new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libs/blocks/mas-autoblock/mas-autoblock.js b/libs/blocks/mas-autoblock/mas-autoblock.js new file mode 100644 index 00000000000..def9dd1dec3 --- /dev/null +++ b/libs/blocks/mas-autoblock/mas-autoblock.js @@ -0,0 +1,32 @@ +import { createTag } from '../../utils/utils.js'; +import '../../deps/mas/merch-card.js'; +import '../../deps/mas/merch-quantity-select.js'; + +export function getFragmentId(el) { + const { hash } = new URL(el.href); + const hashValue = hash.startsWith('#') ? hash.substring(1) : hash; + const searchParams = new URLSearchParams(hashValue); + return searchParams.get('fragment'); +} + +/** + * From element's text content extracts the first word, which should be the tag name. + * @param el DOM element + * @returns {*|string} tag name + */ +export function getTagName(el) { + return el.textContent.trim().match(/^[^:\s]+/)?.[0] || 'merch-card'; +} + +export async function createCard(el, fragment) { + const aemFragment = createTag('aem-fragment', { fragment }); + const merchCard = createTag(getTagName(el), { consonant: '' }, aemFragment); + el.replaceWith(merchCard); + await merchCard.checkReady(); +} + +export default async function init(el) { + const fragment = getFragmentId(el); + if (!fragment) return; + await createCard(el, fragment); +} diff --git a/libs/blocks/media/media.css b/libs/blocks/media/media.css index a1db42de61d..20884e66f44 100644 --- a/libs/blocks/media/media.css +++ b/libs/blocks/media/media.css @@ -66,6 +66,11 @@ width: 100%; } +.media .text .action-area a:not(.con-button), +.media .text > :nth-last-child(-n+1 of p[class^="body-"]) a:not(.con-button) { + font-weight: 700; +} + .media .text .action-area { display: flex; gap: var(--spacing-s); @@ -88,7 +93,7 @@ div[class*="-up"] .media { width: 100%; } -div[class*="-up"] .media.has-bg { +div[class*="-up"] .media.has-bg { width: initial; } @@ -122,18 +127,31 @@ div[class*="-up"] .media .foreground > .media-row { margin-bottom: var(--spacing-xs); } -.media ul > li::before { - content: ""; - display: inline-block; - margin-left: 3px; +[dir="rtl"] .media ul { + padding-left: initial; + padding-right: 20px; +} + +.media.checklist ul { + padding: initial; + display: flex; + flex-direction: column; + row-gap: 1px; } .media.checklist li { - background: url("/libs/img/ui/checkmark-green.svg") no-repeat 5px 5px transparent; list-style-type: none; - margin-left: -25px; - padding: 0 0 1px 29px; - vertical-align: middle; + display: flex; + align-items: flex-start; + column-gap: 4px; +} + +.media.checklist li::before { + content: ""; + width: 20px; + height: 24px; + flex-shrink: 0; + background: url("/libs/img/ui/checkmark-green.svg") no-repeat 50% calc(50% + 2px) transparent; } .media .subcopy { @@ -318,7 +336,7 @@ div[class*="-up"] .media .foreground > .media-row { .media.medium-compact > .foreground .media-row .text { width: 55%; } - + .media[class*="-up"] .foreground > .media-row .image, div[class*="-up"] .media .foreground > .media-row .image { margin-bottom: var(--spacing-s); @@ -371,7 +389,7 @@ div[class*="-up"] .media .foreground > .media-row { grid-template-rows: auto; gap: var(--spacing-m); } - + .media .icon-stack-area { grid-template-columns: repeat(2, 1fr); } @@ -497,7 +515,7 @@ div[class*="-up"] .media .foreground > .media-row { .media.in-modal.media-reverse-mobile > .container.foreground > .media-row div:first-child { grid-area: 2 / 1 / 3 / 2; } - + .media.in-modal.media-reverse-mobile > .container.foreground > .media-row div:nth-child(2) { grid-area: 1 / 1 / 2 / 2; } @@ -511,7 +529,7 @@ div[class*="-up"] .media .foreground > .media-row { .media.in-modal > .container.foreground > .media-row div:first-child { grid-area: 1 / 1 / 2 / 2; } - + .media.in-modal > .container.foreground > .media-row div:nth-child(2) { grid-area: 1 / 2 / 2 / 3; } diff --git a/libs/blocks/merch-card-collection/merch-card-collection.js b/libs/blocks/merch-card-collection/merch-card-collection.js index b6d7f901635..906bd6df46a 100644 --- a/libs/blocks/merch-card-collection/merch-card-collection.js +++ b/libs/blocks/merch-card-collection/merch-card-collection.js @@ -1,10 +1,13 @@ +import '../merch/merch.js'; import { overrideUrlOrigin } from '../../utils/helpers.js'; import { createTag, decorateLinks, getConfig, loadBlock, loadStyle, localizeLink, } from '../../utils/utils.js'; import { replaceText } from '../../features/placeholders.js'; -const DIGITS_ONLY = /^\d+$/; +const DIGITS_ONLY = /^\/?\d+\/?$/; +const FILTER_REGEX = /(filter|\/filter\/)/; +const SEARCH_REGEX = /search|\/search\//; export const OVERRIDE_PATHS = 'overrides'; const LITERAL_SLOTS = [ @@ -40,7 +43,15 @@ const fail = (el, err = '') => { /** Parse and prepare cards */ async function getCardsRoot(config, html) { - const cards = `
${html}
`; + let cards = `
${html}
`; + const { mep, placeholders } = config; + if (mep?.commands?.length) { + const mepRoot = createTag('div', {}, cards); + const { handleCommands, replacePlaceholders } = await import('../../features/personalization/personalization.js'); + handleCommands(mep?.commands, mepRoot, false, true); + if (placeholders) mepRoot.innerHTML = replacePlaceholders(mepRoot.innerHTML, placeholders); + cards = mepRoot.innerHTML; + } const fragment = document.createRange().createContextualFragment( await replaceText(cards, config), ); @@ -131,14 +142,8 @@ export function parsePreferences(elements) { } /** Retrieve cards from query-index */ -async function fetchCardsData(config, type, el) { +async function fetchCardsData(config, endpointElement, type, el) { let cardsData; - const usePreviewIndex = config.env.name === 'stage' && !window.location.host.includes('.live'); - const endpointElement = el.querySelector(`a[href*="${usePreviewIndex ? PREVIEW_INDEX : PROD_INDEX}"]`) - ?? el.querySelector(`a[href*="${PROD_INDEX}"]`); - if (!endpointElement) { - throw new Error('No query-index endpoint provided'); - } el.querySelector(`a[href*="${PROD_INDEX}"]`)?.remove(); el.querySelector(`a[href*="${PREVIEW_INDEX}"]`)?.remove(); let queryIndexCardPath = localizeLink(endpointElement.getAttribute('href'), config); @@ -185,28 +190,39 @@ export default async function init(el) { } const config = getConfig(); const type = el.classList[1]; - const cardsDataPromise = fetchCardsData(config, type, el); - - const merchCardCollectionDep = import('../../deps/mas/merch-card-collection.js'); - const polyfills = import('../merch/merch.js'); - await polyfills; - let deps = [ - polyfills, - merchCardCollectionDep, - import('../merch-card/merch-card.js'), - import('../../deps/mas/merch-card.js'), - ]; - - const { base, mep } = getConfig(); - const merchStyles = new Promise((resolve) => { - loadStyle(`${base}/blocks/merch/merch.css`, resolve); - }); - const merchCardStyles = new Promise((resolve) => { - loadStyle(`${base}/blocks/merch-card/merch-card.css`, resolve); - }); + + const usePreviewIndex = config.env.name === 'stage' && !window.location.host.includes('.live'); + const endpointElement = el.querySelector(`a[href*="${usePreviewIndex ? PREVIEW_INDEX : PROD_INDEX}"]`) + ?? el.querySelector(`a[href*="${PROD_INDEX}"]`); + if (!endpointElement) { + return fail(el, 'No query-index endpoint provided'); + } let cardsData; + let deps; + let base; + let mep; + let merchStyles; + let merchCardStyles; + const merchCardCollectionDep = import( + '../../deps/mas/merch-card-collection.js' + ); try { + const cardsDataPromise = fetchCardsData(config, endpointElement, type, el); + deps = [ + merchCardCollectionDep, + import('../merch-card/merch-card.js'), + import('../../deps/mas/merch-card.js'), + ]; + + ({ base, mep } = config); + merchStyles = new Promise((resolve) => { + loadStyle(`${base}/blocks/merch/merch.css`, resolve); + }); + merchCardStyles = new Promise((resolve) => { + loadStyle(`${base}/blocks/merch-card/merch-card.css`, resolve); + }); + cardsData = await cardsDataPromise; } catch (error) { return fail(el, error); @@ -263,23 +279,26 @@ export default async function init(el) { } } - const literalsEl = el.lastElementChild?.firstElementChild; + // in case of search literals being fragments, data is marked with a data-path attribute, + // and shallower + const literalsEl = el.lastElementChild?.firstElementChild?.getAttribute('data-path') !== null + ? el.lastElementChild : el.lastElementChild?.firstElementChild; // parse literals const literalSlots = []; - if (literalsEl && /filter/.test(literalsEl.querySelector('u')?.innerText)) { + if (literalsEl && FILTER_REGEX.test(literalsEl.querySelector('u')?.innerText)) { literalsEl.querySelectorAll('u').forEach((u) => { const text = u.innerText.trim(); if (DIGITS_ONLY.test(text)) { u.outerHTML = ''; - } else if (text === 'search') { + } else if (SEARCH_REGEX.test(text)) { u.outerHTML = ''; - } else if (text === 'filter') { + } else if (FILTER_REGEX.test(text)) { u.outerHTML = ''; } }); let index = 0; - while (literalsEl.firstElementChild) { - const literalEl = literalsEl.firstElementChild; + while (literalsEl?.firstElementChild) { + const literalEl = literalsEl?.firstElementChild; let slot; if (literalEl.tagName === 'P') { slot = literalEl; @@ -329,5 +348,6 @@ export default async function init(el) { 'merch-card-collection-render', 'merch-card-collection-render:start', ); + return merchCardCollection; } diff --git a/libs/blocks/merch-card/img/chevron.js b/libs/blocks/merch-card/img/chevron.js new file mode 100644 index 00000000000..5422850210d --- /dev/null +++ b/libs/blocks/merch-card/img/chevron.js @@ -0,0 +1,12 @@ +export const chevronDownSVG = ` + + + + + + `; +export const chevronUpSVG = ` + + + +`; diff --git a/libs/blocks/merch-card/merch-card.js b/libs/blocks/merch-card/merch-card.js index e1c9f34f265..bd6bc084689 100644 --- a/libs/blocks/merch-card/merch-card.js +++ b/libs/blocks/merch-card/merch-card.js @@ -77,6 +77,7 @@ export async function loadMnemonicList(foreground) { try { const { base } = getConfig(); const stylePromise = new Promise((resolve) => { + /* c8 ignore next */ loadStyle(`${base}/blocks/mnemonic-list/mnemonic-list.css`, resolve); }); const loadModule = import(`${base}/blocks/mnemonic-list/mnemonic-list.js`) @@ -225,6 +226,7 @@ const parseContent = async (el, merchCard) => { ]; innerElements.forEach((element) => { + if (!element.innerHTML.trim()) return; let { tagName } = element; if (isHeadingTag(tagName)) { let slotName = SLOT_MAP[merchCard.variant]?.[tagName] || SLOT_MAP_DEFAULT[tagName]; @@ -391,23 +393,98 @@ const getMiniCompareChartFooterRows = (el) => { return footerRows; }; -const decorateFooterRows = (merchCard, footerRows) => { - if (footerRows) { - const footerRowsSlot = createTag('div', { slot: 'footer-rows' }); - footerRows.forEach((row) => { - const rowIcon = row.firstElementChild.querySelector('picture'); - const rowText = row.querySelector('div > div:nth-child(2)').innerHTML; - const rowTextParagraph = createTag('div', { class: 'footer-row-cell-description' }, rowText); - const footerRowCell = createTag('ul', { class: 'footer-row-cell' }); - if (rowIcon) { - rowIcon.classList.add('footer-row-icon'); - footerRowCell.appendChild(rowIcon); +const createFirstRow = async (firstRow, isMobile, checkmarkCopyContainer, defaultChevronState) => { + const firstRowText = firstRow.querySelector('div > div:last-child').innerHTML; + let firstRowTextParagraph; + + if (isMobile) { + const { chevronDownSVG, chevronUpSVG } = await import('./img/chevron.js'); + const chevronIcon = createTag('span', { class: 'chevron-icon' }, chevronDownSVG); + firstRowTextParagraph = createTag('div', { class: 'footer-rows-title' }, firstRowText); + firstRowTextParagraph.appendChild(chevronIcon); + + if (defaultChevronState === 'open') { + checkmarkCopyContainer.classList.add('open'); + } + + firstRowTextParagraph.addEventListener('click', () => { + const isOpen = checkmarkCopyContainer.classList.toggle('open'); + chevronIcon.innerHTML = isOpen ? chevronUpSVG : chevronDownSVG; + }); + } else { + firstRowTextParagraph = createTag('div', { class: 'footer-rows-title' }, firstRowText); + checkmarkCopyContainer.classList.add('open'); + } + + return firstRowTextParagraph; +}; + +const createFooterRowCell = (row, isCheckmark) => { + const rowIcon = row.firstElementChild.querySelector('picture'); + const rowText = row.querySelector('div > div:nth-child(2)').innerHTML; + const rowTextParagraph = createTag('div', { class: 'footer-row-cell-description' }, rowText); + const footerRowCellClass = isCheckmark ? 'footer-row-cell-checkmark' : 'footer-row-cell'; + const footerRowIconClass = isCheckmark ? 'footer-row-icon-checkmark' : 'footer-row-icon'; + const footerRowCell = createTag('li', { class: footerRowCellClass }); + + if (rowIcon) { + rowIcon.classList.add(footerRowIconClass); + footerRowCell.appendChild(rowIcon); + } + footerRowCell.appendChild(rowTextParagraph); + + return footerRowCell; +}; + +const decorateFooterRows = async (merchCard, footerRows) => { + if (!footerRows) return; + + const footerRowsSlot = createTag('div', { slot: 'footer-rows' }); + const isCheckmark = merchCard.classList.contains('bullet-list'); + const isMobile = window.matchMedia('(max-width: 767px)').matches; + + const ulContainer = createTag('ul'); + if (isCheckmark) { + const firstRow = footerRows[0]; + const firstRowContent = firstRow.querySelector('div > div:first-child').innerHTML.split(','); + let bgStyle = '#E8E8E8'; + let defaultChevronState = 'close'; + + firstRowContent.forEach((item) => { + const trimmedItem = item.trim(); + if (trimmedItem.startsWith('#')) { + bgStyle = trimmedItem; + } else if (trimmedItem === 'open' || trimmedItem === 'close') { + defaultChevronState = trimmedItem; } - footerRowCell.appendChild(rowTextParagraph); - footerRowsSlot.appendChild(footerRowCell); }); - merchCard.appendChild(footerRowsSlot); + + const hrElem = createTag('hr', { style: `background: ${bgStyle};` }); + footerRowsSlot.appendChild(hrElem); + merchCard.classList.add('has-divider'); + + ulContainer.classList.add('checkmark-copy-container'); + const firstRowTextParagraph = await createFirstRow( + firstRow, + isMobile, + ulContainer, + defaultChevronState, + ); + + footerRowsSlot.appendChild(firstRowTextParagraph); + + footerRows.splice(0, 1); + footerRowsSlot.style.padding = '0px var(--consonant-merch-spacing-xs)'; + footerRowsSlot.style.marginBlockEnd = 'var(--consonant-merch-spacing-xs)'; } + footerRowsSlot.appendChild(ulContainer); + + footerRows.forEach((row) => { + const footerRowCell = createFooterRowCell(row, isCheckmark); + ulContainer.appendChild(footerRowCell); + }); + + merchCard.appendChild(footerRowsSlot); }; const setMiniCompareOfferSlot = (merchCard, offers) => { @@ -451,6 +528,19 @@ const addStartingAt = async (styles, merchCard) => { export default async function init(el) { if (!el.querySelector(INNER_ELEMENTS_SELECTOR)) return el; + // TODO: Remove after bugfix PR adobe/helix-html2md#556 is merged + const liELs = el.querySelectorAll('ul li'); + if (liELs) { + [...liELs].forEach((liEl) => { + liEl.querySelectorAll('p').forEach((pElement) => { + while (pElement?.firstChild) { + pElement.parentNode.insertBefore(pElement.firstChild, pElement); + } + pElement.remove(); + }); + }); + } + // TODO: Remove after bugfix PR adobe/helix-html2md#556 is merged const styles = [...el.classList]; const cardType = getPodType(styles) || PRODUCT; if (!styles.includes(cardType)) { @@ -550,6 +640,17 @@ export default async function init(el) { actionMenuContent.innerHTML, ), ); + merchCard.addEventListener('focusin', () => { + const actionMenu = merchCard.shadowRoot.querySelector('.action-menu'); + actionMenu.classList.add('always-visible'); + }); + merchCard.addEventListener('focusout', (e) => { + if (!e.target.href || e.target.src || e.target.parentElement.classList.contains('card-heading')) { + return; + } + const actionMenu = merchCard.shadowRoot.querySelector('.action-menu'); + actionMenu.classList.remove('always-visible'); + }); } let ctas = el.querySelector('p > strong a, p > em a')?.closest('p'); if (!ctas) { @@ -576,7 +677,10 @@ export default async function init(el) { const merchIcon = createTag('merch-icon', { slot: 'icons', src: icon.src, alt: icon.alt, href: icon.href, size: 'l' }); merchCard.appendChild(merchIcon); }); - icons.forEach((icon) => icon.remove()); + icons.forEach((icon) => { + if (icon.parentElement.nodeName === 'A') icon.parentElement.remove(); + else icon.remove(); + }); } addStock(merchCard, styles); @@ -624,7 +728,7 @@ export default async function init(el) { decorateBlockHrs(merchCard); simplifyHrs(merchCard); if (merchCard.classList.contains('has-divider')) merchCard.setAttribute('custom-hr', true); - decorateFooterRows(merchCard, footerRows); + await decorateFooterRows(merchCard, footerRows); } else { parseTwpContent(el, merchCard); } diff --git a/libs/blocks/merch-card/merch-offer-select.js b/libs/blocks/merch-card/merch-offer-select.js index 4913caf38ad..b9a0391c0e5 100644 --- a/libs/blocks/merch-card/merch-offer-select.js +++ b/libs/blocks/merch-card/merch-offer-select.js @@ -27,7 +27,8 @@ function createDynamicSlots(el, bodySlot) { } function createMerchOffer(option, quantitySelector, variant) { - const merchOffer = createTag('merch-offer', { [quantitySelector ? 'value' : 'text']: option.childNodes[0].textContent.trim() }); + const radioBtnText = Array.from(option.childNodes)?.find((childNode) => childNode.textContent.trim() !== '')?.textContent.trim(); + const merchOffer = createTag('merch-offer', { [quantitySelector ? 'value' : 'text']: radioBtnText }); [...option.querySelector('ul').children].forEach((li, index) => { const override = li.childNodes[0]; if (override.nodeName === '#text') { diff --git a/libs/blocks/merch/merch.css b/libs/blocks/merch/merch.css index 907fd8ef61e..715ba210002 100644 --- a/libs/blocks/merch/merch.css +++ b/libs/blocks/merch/merch.css @@ -27,6 +27,26 @@ a[is='checkout-link'].con-button > span { content: "\00a0"; } +.three-in-one { + display: flex; + height: 100%; +} + +.three-in-one .loading iframe { + visibility: hidden; +} + +.three-in-one sp-theme { + height: 100%; + width: 100%; + align-content: center; +} + +.three-in-one sp-theme sp-progress-circle { + inset-inline-start: 50%; + transform: translate(-50%); +} + @media (max-width: 1199px) { #checkout-link-modal { height: 100vh; diff --git a/libs/blocks/merch/merch.js b/libs/blocks/merch/merch.js index 73afd8b8eb7..3c2a70aab60 100644 --- a/libs/blocks/merch/merch.js +++ b/libs/blocks/merch/merch.js @@ -426,15 +426,16 @@ async function openFragmentModal(path, getModal) { export function appendTabName(url) { const metaPreselectPlan = document.querySelector('meta[name="preselect-plan"]'); if (!metaPreselectPlan?.content) return url; + const isRelativePath = url.startsWith('/'); let urlWithPlan; try { - urlWithPlan = new URL(url); + urlWithPlan = isRelativePath ? new URL(`${window.location.origin}${url}`) : new URL(url); } catch (err) { window.lana?.log(`Invalid URL ${url} : ${err}`); return url; } urlWithPlan.searchParams.set('plan', metaPreselectPlan.content); - return urlWithPlan.href; + return isRelativePath ? urlWithPlan.href.replace(window.location.origin, '') : urlWithPlan.href; } export function appendExtraOptions(url, extraOptions) { @@ -478,7 +479,7 @@ async function openExternalModal(url, getModal, extraOptions) { const isInternalModal = (url) => /\/fragments\//.test(url); -export async function openModal(e, url, offerType, hash, extraOptions) { +export async function openModal(e, url, offerType, hash, extraOptions, el) { e.preventDefault(); e.stopImmediatePropagation(); const { getModal } = await import('../modal/modal.js'); @@ -489,14 +490,18 @@ export async function openModal(e, url, offerType, hash, extraOptions) { const prevHash = window.location.hash.replace('#', '') === hash ? '' : window.location.hash; window.location.hash = hash; window.addEventListener('milo:modal:closed', () => { - window.location.hash = prevHash; + window.history.pushState({}, document.title, prevHash !== '' ? `#${prevHash}` : `${window.location.pathname}${window.location.search}`); }, { once: true }); } if (isInternalModal(url)) { const fragmentPath = url.split(/(hlx|aem).(page|live)/).pop(); modal = await openFragmentModal(fragmentPath, getModal); + } else if (el?.opens3in1Modal) { + const { default: openThreeInOneModal, handle3in1IFrameEvents } = await import('./three-in-one.js'); + window.addEventListener('message', handle3in1IFrameEvents); + modal = await openThreeInOneModal(el); } else { - modal = await openExternalModal(url, getModal, extraOptions); + modal = await openExternalModal(url, getModal, extraOptions, el); } if (modal) { modal.classList.add(offerTypeClass); @@ -512,6 +517,14 @@ export function setCtaHash(el, checkoutLinkConfig, offerType) { return hash; } +const isProdModal = (url) => { + try { + return (new URL(url)).hostname.endsWith('.adobe.com'); + } catch (e) { + return false; + } +}; + export async function getModalAction(offers, options, el) { const [{ offerType, @@ -529,9 +542,12 @@ export async function getModalAction(offers, options, el) { const hash = setCtaHash(el, checkoutLinkConfig, offerType); let url = checkoutLinkConfig[columnName]; if (!url) return undefined; - url = isInternalModal(url) + url = isInternalModal(url) || isProdModal(url) ? localizeLink(checkoutLinkConfig[columnName]) : checkoutLinkConfig[columnName]; - return { url, handler: (e) => openModal(e, url, offerType, hash, options.extraOptions) }; + return { + url, + handler: (e) => openModal(e, url, offerType, hash, options.extraOptions, el), + }; } export async function getCheckoutAction(offers, options, imsSignedInPromise, el) { @@ -713,6 +729,19 @@ export async function buildCta(el, params) { reopenModal(cta); }); } + + // Adding aria-label for checkout-link using productFamily and customerSegment as placeholder key. + if (!cta.getAttribute('aria-label')) { + cta.onceSettled().finally(async () => { + const productFamily = cta.value[0]?.productArrangement?.productFamily; + const marketSegment = cta.value[0]?.marketSegments[0]; + const customerSegment = marketSegment === 'EDU' ? marketSegment : cta.value[0]?.customerSegment; + let ariaLabel = cta.textContent; + ariaLabel = productFamily ? `${ariaLabel} - ${await replaceKey(productFamily, getConfig())}` : ariaLabel; + ariaLabel = customerSegment ? `${ariaLabel} - ${await replaceKey(customerSegment, getConfig())}` : ariaLabel; + cta.setAttribute('aria-label', ariaLabel); + }); + } return cta; } diff --git a/libs/blocks/merch/three-in-one.js b/libs/blocks/merch/three-in-one.js new file mode 100644 index 00000000000..9158f8c03bc --- /dev/null +++ b/libs/blocks/merch/three-in-one.js @@ -0,0 +1,82 @@ +/* eslint-disable import/no-relative-packages */ +import { createTag } from '../../utils/utils.js'; +import { MODAL_TYPE_3_IN_1 } from '../../deps/mas/mas.js'; +import '../../features/spectrum-web-components/dist/theme.js'; +import '../../features/spectrum-web-components/dist/progress-circle.js'; + +export const MSG_SUBTYPE = { + AppLoaded: 'AppLoaded', + EXTERNAL: 'EXTERNAL', + SWITCH: 'SWITCH', + RETURN_BACK: 'RETURN_BACK', + OrderComplete: 'OrderComplete', + Error: 'Error', + Close: 'Close', +}; + +export const LANA_OPTIONS = { + clientId: 'merch-at-scale', + sampleRate: 10, + tags: 'three-in-one', +}; + +export const handle3in1IFrameEvents = ({ data: msgData }) => { + let parsedMsg = null; + try { + parsedMsg = JSON.parse(msgData); + } catch (error) { + return; + } + const { app, subType, data } = parsedMsg || {}; + if (app !== 'ucv3') return; + window.lana?.log(`3-in-1 modal: ${subType}`, LANA_OPTIONS); + const threeInOne = document.querySelector('.three-in-one'); + const closeBtn = threeInOne?.querySelector('.dialog-close'); + if (!threeInOne) return; + switch (subType) { + case MSG_SUBTYPE.AppLoaded: + threeInOne.querySelector('iframe')?.classList.remove('loading'); + threeInOne.querySelector('sp-theme')?.remove(); + if (closeBtn) { + closeBtn.setAttribute('aria-hidden', 'true'); + closeBtn.style.opacity = '0'; + } + break; + case MSG_SUBTYPE.EXTERNAL: + case MSG_SUBTYPE.SWITCH: + case MSG_SUBTYPE.RETURN_BACK: + if (data?.externalUrl && data.target) { + window.open(data.externalUrl, data.target); + } + break; + case MSG_SUBTYPE.Close: + document.querySelector('.dialog-modal.three-in-one')?.dispatchEvent(new Event('closeModal')); + window.removeEventListener('message', handle3in1IFrameEvents); + break; + default: + break; + } +}; + +export async function createContent(iframeUrl, modalType) { + const content = createTag('div', { class: 'milo-iframe' }); + content.innerHTML = ` + + + `; + return content; +} + +export default async function openThreeInOneModal(el) { + const iframeUrl = el?.href; + const modalType = el?.getAttribute('data-modal-type'); + if (!modalType || !iframeUrl) return undefined; + const { getModal } = await import('../modal/modal.js'); + const content = await createContent(iframeUrl, modalType); + return getModal(null, { + id: 'three-in-one', + content, + closeEvent: 'closeModal', + class: 'three-in-one', + }); +} diff --git a/libs/blocks/mmm/mmm.css b/libs/blocks/mmm/mmm.css new file mode 100644 index 00000000000..b7fe2baa90e --- /dev/null +++ b/libs/blocks/mmm/mmm.css @@ -0,0 +1,575 @@ +@import '../../styles/inline.css'; + +.mmm-page_item-subtext { + position: absolute; + font-size: 12px; + bottom: 3px; + left: 16px; + color: #505050; +} +.mmm-container { + padding: var(--spacing-m) 0; +} + +div.mmm { + display: none; +} + +dl.mmm { + margin: 32px auto; + max-width: var(--grid-container-width); + border-bottom: 1px solid var(--color-gray-500); +} + +.mmm-container.no-borders dl.mmm { + border: none; +} + +.mmm dd { + margin: 0; + padding: var(--spacing-xs); + font-size: var(--type-body-s-size); + line-height: var(--type-body-s-lh); + background: #eee; +} + +.mmm dt button { + align-items: center; + background: none; + border: 1px solid var(--color-gray-500); + border-width: 1px 0 0; + color: var(--text-color); + display: flex; + font-family: var(--body-font-family); + font-size: var(--type-heading-xs-size); + font-weight: 700; + line-height: var(--type-heading-s-lh); + padding: var(--spacing-xs) var(--spacing-m) var(--spacing-m) var(--spacing-xs); + position: relative; + text-align: start; + width: 100%; + -webkit-text-size-adjust: 100%; +} + +.mmm dt button:hover { + cursor: pointer; + color: var(--color-black); +} + +.mmm-container dt button h5 { + word-wrap: break-word; + display: inline-block; + width: calc(100% - 30px); +} + +.mmm-container.no-borders .mmm dt button { + border: none; +} + +.mmm dt .mmm-heading { + margin: 0; +} + +.mmm dt .mmm-heading h5 { + margin: 0; +} + +.mmm-icon { + position: absolute; + right: var(--spacing-xs); + top: 50%; + margin-top: -6px; + width: 12px; + height: 12px; + pointer-events: none; +} + +html[dir="rtl"] .mmm-icon { + right: unset; + left: var(--spacing-xs); +} + +.mmm-icon::before, +.mmm-icon::after { + content: ""; + display: block; + position: absolute; + width: 2px; + height: 12px; + background: var(--color-gray-600); + border-radius: 2px; + top: 0; + right: 0; + bottom: 0; + left: 0; + margin: auto; + transition: all .2s ease; +} + +.mmm-icon::after { + width: 12px; + height: 2px; +} + +.mmm dt button::before { + content: ""; + display: block; + position: absolute; + width: 2px; + height: 100%; + left: 0; + top: 0; + background-color: transparent; +} + +.mmm dt button[aria-expanded="true"]::before { + background-color: var(--link-color-dark); +} + +.quiet .mmm dt button[aria-expanded="true"]::before { + display: none; +} + +.mmm dt button[aria-expanded="true"] .mmm-icon::before, +.mmm dt button[aria-expanded="true"] .mmm-icon::after { + transform: rotate(90deg); +} + +.mmm dt button[aria-expanded="true"] .mmm-icon::after { + opacity: 0; +} + +.mmm dt button:hover .mmm-icon::before, +.mmm dt button:hover .mmm-icon::after { + background: var(--color-black); +} + +.mmm dt button:focus, +.mmm dt button:hover, +.mmm dt button[aria-expanded="true"] { + background: #00000005; +} + +.mmm dd p:first-child { + margin-top: 0; +} + +/* dark */ +.dark .mmm dt button, +.darkest .mmm dt button { + color: #fff; +} + +.dark dl.mmm { + border-bottom-color: var(--color-gray-600); +} + +.dark .mmm dt button { + border-top-color: var(--color-gray-600); +} + +.dark .mmm dt button:focus, +.dark .mmm dt button:hover, +.dark .mmm dt button[aria-expanded="true"] { + background: #00000060; +} + +.dark .mmm dt button:hover .mmm-icon::before, +.dark .mmm dt button:hover .mmm-icon::after { + background: var(--color-gray-100); +} + +html[dir="rtl"] .mmm dt button { + padding: var(--spacing-s) var(--spacing-xs) var(--spacing-s) var(--spacing-m); +} + +html[dir="rtl"] .mmm dt button::before { + right: 0; +} + +.section[class*='-up'] dl.mmm { + max-width: unset; +} + +/* Editorial Variation */ +.mmm-media { + display: none; +} + +.mmm-media > div { + position: relative; + display: none; + animation-duration: 1s; + animation-name: fade-in; +} + + +@keyframes fade-in { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +.mmm-media > div.expanded, +.mmm-media > div.expanded > img { + display: inline; + position: relative; + height: 525px; + max-height: 525px; + max-width: 700px; + width: auto; +} + +div.media-p { + width: 268px; + padding: 0; +} + +dd .mep-popup-header .mep-close { + display: none; +} +@media screen and (min-width: 1200px) { + .editorial { + display: flex; + gap: 54px; + align-items: center; + justify-content: center; + } + + .editorial .mmm { + width: 50%; + display: inline-block; + margin: 0; + } + + .media-p { + display: none; + } + + .mmm-media { + width: 700px; + height: 525px; + display: flex; + justify-content: center; + align-items: center; + overflow: hidden; + margin: 0; + } +} + +.mmm-hide { + display: none; +} +.mmm-search-container { + margin-top: var(--spacing-m); +} +.mmm-form-container { + display: flex; + justify-content: center; + gap: var(--spacing-s); + margin: 0 auto; + width: 700px; + flex-flow: row nowrap; + max-width: 80vw; + position: relative; +} +.mmm-form-container > div { + flex: 1; +} +.mmm-form-container label { + margin-top: var(--spacing-xxs); + margin-right: var(--spacing-xxs); + display: block; + font-size: var(--type-body-xs-size); +} +.mmm-form-container textarea { + padding: 1rem; + width: 95%; + min-height: 2rem; + resize: vertical; + overflow: auto; +} +.mmm-form-container input, +.mmm-form-container select { + width: 100%; + padding: var(--spacing-xxs); + font-size: var(--type-body-xs-size); + padding-inline-start: 12px; + box-sizing: border-box; +} + +.loading { + width: 100px; + margin: 0 auto; +} +#mmm-shareButtonContainer { + position: absolute; + top: 0; + right: 0; +} +@media screen and (min-width: 1199px) { + .mmm-form-container { + flex-flow: row nowrap; + } + #mmm-dropdown-sub-container { + display: flex; + gap: var(--spacing-s); + } + #mmm-dropdown-container { + flex: 0 0 50%; + } + #mmm-shareButtonContainer { + right: 100px; + } + #mmm-dropdown-container > div > div { + flex: 1; + } +} + + +.mmm-form-container > div.share-mmm { + right: -4rem; + top: 33px; + position: absolute; + height: 33px; + width: 33px; + display: flex; + justify-content: center; + align-items: flex-end; + +} + +.share-mmm svg.icon { + height: 28px; + transition: filter 0.3s; + display: inline-block; + width: 28px; + margin: 0; + color: #adadad; +} + +.share-mmm a svg.icon:hover { + filter: brightness(0.7); +} + +.share-mmm p.icon-container { + display: flex; + justify-content: center; + align-items: center; +} + +.share-mmm p.icon-container svg { + color: #adadad; +} + +.share-mmm p.icon-container > a:not(:first-child) { + margin-inline-start: 18px; +} + +.share-mmm .copy-to-clipboard { + padding: 0; + background: none; + margin: 0; + line-height: 0; + cursor: pointer; + position: relative; + transition: filter 0.3s; + border-radius: 4px; + border: 2px solid transparent; + outline: none; +} + +.share-mmm .copy-to-clipboard:focus-visible { + border: 2px solid black; +} + +.share-mmm .copy-to-clipboard:hover svg { + filter: brightness(0.7); +} + +.share-mmm .copy-to-clipboard::before { + content: attr(data-copy-to-clipboard); + display: block; + pointer-events: none; + position : absolute; + bottom: 100%; + left: 50%; + transform: translate(-50%, -4px); + opacity: 0; + visibility: hidden; + transition: transform 130ms ease-in-out, opacity 130ms ease-in-out, visibility 0ms linear 130ms; + background-color: #6d6d6d; + color: #fff; + padding: 4px 9px 5px; + font-size: 12px; + line-height: 1.3; + border-radius: 4px; + white-space: nowrap; +} + +.share-mmm .copy-to-clipboard::after { + content: ''; + display: block; + pointer-events: none; + position : absolute; + bottom: 100%; + left: 50%; + transform: translate(-50%, 0); + opacity: 0; + visibility: hidden; + transition: transform 130ms ease-in-out, opacity 130ms ease-in-out, visibility 0ms linear 130ms; + height: 4px; + width: 8px; + background-color: #6d6d6d; + clip-path: polygon(0 -5%, 50% 100%, 100% -5%); +} + +.share-mmm .copy-to-clipboard:hover::before, +.share-mmm .copy-to-clipboard:focus::before, +.share-mmm .copy-to-clipboard:hover::after, +.share-mmm .copy-to-clipboard:focus::after { + visibility: visible; + opacity: 1; + transition-delay: 0ms; +} + +.share-mmm .copy-to-clipboard:hover::before, +.share-mmm .copy-to-clipboard:focus::before { + transform: translate(-50%, -6px); +} + +.share-mmm .copy-to-clipboard:hover::after, +.share-mmm .copy-to-clipboard:focus::after { + transform: translate(-50%, -2px); +} + +.share-mmm .copy-to-clipboard.copy-to-clipboard-copied::before { + content: attr(data-copied); +} + +.share-mmm.inline { + margin: 0 auto; + text-align: center; + padding: 8px 0 16px; +} + +.share-mmm.inline p.icon-container { + justify-content: flex-start; + margin: 0; +} + +#mmm-pagination { + display: flex; + flex-direction: row; + gap: 1rem; + font-size: 1.25rem; + justify-content: center; + padding: 2rem 8rem; + flex-wrap: wrap; + max-width: 1200px; + margin: 0 auto; +} + +#mmm-pagination a { + text-decoration: none; + cursor: pointer; + color: #4285f4; +} +#mmm-pagination .current-page { + font-weight: 600; + cursor: default; + pointer-events: none; + color: #000; +} +#mmm-pagination .disabled { + color: #ddd; + cursor: default; + pointer-events: none; +} +#mmm-pagination .arrow { + font-weight: 600; +} + +.mmm-pagination-summary { + display: flex; + justify-content: flex-end; + padding: 0 0; +} + +main > .section > .share-mmm.inline { + margin: 0 auto; +} + +main > .section > .inline-wrapper > .share-mmm.inline { + margin-top: 0; + margin-bottom: 0; +} + +/* main > .section.center .share-mmm.inline p.icon-container { + margin: 0 auto; + justify-content: center; +} */ + +@media (max-width: 900px) { + .share-mmm { + left: 0; + right: 0 !important; + top: -1rem !important; + margin: auto; + } +} + +@media (max-width: 700px) { + #mmm-pagination { + padding: 2rem 4rem; + } +} + +/* pagination */ +#mmm-pagination-wrapper { + width: 100%; + display: flex; + gap: 10px; + justify-content: right; + flex-direction: row; +} + +#pagination-select { + align-items: center; +} + +#mmm-pagination-wrapper label, +#mmm-pagination-wrapper span { + font-size: 12px; + font-weight: 400; + text-align: left; +} + +#mmm-pagination-dropdown { + min-width: 90px; + height: 36px; + border-radius: 4px; + margin-right: 20px; +} + +#pagination-arrows, +#pagination-select { + display: flex; + gap: 10px; + align-items: center; +} + +#pagination-arrows a:not(.disabled) { + color: #000; + cursor: pointer; +} + +#pagination-arrows a.disabled svg { + opacity: .4; +} + + diff --git a/libs/blocks/mmm/mmm.js b/libs/blocks/mmm/mmm.js new file mode 100644 index 00000000000..70c7878c444 --- /dev/null +++ b/libs/blocks/mmm/mmm.js @@ -0,0 +1,477 @@ +import { createTag, loadStyle } from '../../utils/utils.js'; +import { fetchData, DATA_TYPE } from '../../features/personalization/personalization.js'; +import { getMepPopup, API_URLS } from '../../features/personalization/preview.js'; + +const SEARCH_CRITERIA_CHANGE_EVENT = 'mmm-search-change'; +let cachedSearchCriteria = ''; +export const DEBOUNCE_TIME = 800; +export const MMM_LOCAL_STORAGE_KEY = 'mmm_filter_settings'; +const SEARCH_CONTAINER = '.mmm-search-container'; +const LAST_SEEN_OPTIONS = { + day: { value: 'Day', key: 'day' }, + week: { value: 'Week', key: 'week' }, + month: { value: 'Month', key: 'month' }, + threeMonths: { value: '3 Months', key: 'threeMonths' }, + sixMonths: { value: '6 Months', key: 'sixMonths' }, + year: { value: 'Year', key: 'year' }, + all: { value: 'All', key: 'all' }, +}; +const SUBDOMAIN_OPTIONS = { + www: { value: 'www', key: 'www' }, + business: { value: 'business', key: 'business' }, + all: { value: 'all', key: 'all' }, +}; + +export const getLocalStorageFilter = () => { + const cookie = localStorage.getItem(MMM_LOCAL_STORAGE_KEY); + return cookie ? JSON.parse(cookie) : null; +}; + +const setLocalStorageFilter = (obj) => { + localStorage.setItem(MMM_LOCAL_STORAGE_KEY, JSON.stringify(obj)); +}; + +const getInitialValues = () => { + const search = new URLSearchParams(window.location.search); + const values = {}; + if (search.size) { + search.entries().forEach((item) => { + const key = item[0]; + const value = item[1]; + values[key] = value; + }); + return values; + } + return getLocalStorageFilter(); +}; + +const SEARCH_INITIAL_VALUES = getInitialValues() ?? { + lastSeenManifest: LAST_SEEN_OPTIONS.threeMonths.key, + pageNum: 1, + subdomain: SUBDOMAIN_OPTIONS.www.key, + perPage: 25, +}; + +async function toggleDrawer(target, dd, pageId) { + const el = target.closest('button'); + const expanded = el.getAttribute('aria-expanded') === 'true'; + if (expanded) { + el.setAttribute('aria-expanded', 'false'); + dd.setAttribute('hidden', ''); + } else { + document.querySelectorAll('dd:not([hidden])').forEach((openDd) => { + openDd.setAttribute('hidden', ''); + }); + document.querySelectorAll('dt button[aria-expanded="true"]').forEach((openButton) => { + openButton.setAttribute('aria-expanded', 'false'); + }); + el.setAttribute('aria-expanded', 'true'); + dd.removeAttribute('hidden'); + const loading = dd.querySelector('.loading'); + if (dd.classList.contains('placeholder-resolved') || !loading) return; + const pageData = await fetchData(`${API_URLS.pageDetails}${pageId}`, DATA_TYPE.JSON); + loading.replaceWith(getMepPopup(pageData, true)); + dd.classList.add('placeholder-resolved'); + } +} + +function createButtonDetailsPair(mmmEl, page) { + const { url, pageId, numOfActivities } = page; + const triggerId = `mmm-trigger-${pageId}`; + const panelId = `mmm-content-${pageId}`; + const icon = createTag('span', { class: 'mmm-icon' }); + const hTag = createTag('h5', false, url); + const activitiesNum = createTag( + 'span', + { class: 'mmm-page_item-subtext' }, + `${numOfActivities} Manifest(s) found`, + ); + const button = createTag('button', { + type: 'button', + id: triggerId, + class: 'mmm-trigger tracking-header', + 'aria-expanded': 'false', + 'aria-controls': panelId, + }, hTag); + button.append(icon); + button.append(activitiesNum); + + const dtHtml = hTag ? createTag(hTag.tagName, { class: 'mmm-heading' }, button) : button; + const dt = createTag('dt', false, dtHtml); + const loading = createTag( + 'div', + { class: 'loading' }, + ` + + + + + + + + + + `, + ); + const dd = createTag('dd', { id: panelId, hidden: true }, loading); + button.addEventListener('click', (e) => { toggleDrawer(e.target, dd, pageId, 'mmm'); }); + mmmEl.append(dt, dd); +} + +/** + * This function should be fired by any search criteria field change event + * Or by page number change event + * @param {Number} pageNum - optional. Number of the clicked page. + * @param {Event} event - optional. Page number click Event object. + */ +function filterPageList(pageNum, perPage, event) { + const shareUrl = new URL(`${window.location.origin}${window.location.pathname}`); + const searchValues = {}; + const activeSearchWithShortKeyword = event?.target?.value && event.target.value.length < 2; + + document.querySelector(SEARCH_CONTAINER).querySelectorAll('input, select, textarea').forEach((field) => { + const id = field.getAttribute('id').split('-').pop(); + const { value, tagName } = field; + searchValues[id] = { + value, + tagName, + }; + if (value) shareUrl.searchParams.set(id, value); + }); + + // add pageNum and perPage to args for api call + searchValues.pageNum = { value: pageNum || 1, tagName: 'A' }; + searchValues.perPage = { value: perPage || 25, tagName: 'SELECT' }; + + // assemble event details object with all filter criterias + const detail = {}; + Object.keys(searchValues).forEach((key) => { + detail[key] = searchValues[key].value; + }); + // This event triggers an API call with most recent search criteria and a forces a re-render + if (!activeSearchWithShortKeyword) { + setLocalStorageFilter(detail); + document.dispatchEvent(new CustomEvent(SEARCH_CRITERIA_CHANGE_EVENT, { detail })); + } + + document.querySelectorAll('button.copy-to-clipboard').forEach((button) => { + button.dataset.destination = shareUrl.href; + }); +} + +function parseData(el) { + const data = {}; + const rows = el.querySelectorAll('div'); + let currentKey = ''; + rows.forEach((row) => { + const cols = row.querySelectorAll('div'); + if (cols.length < 2) return; + const val = cols[1].innerText.trim(); + let key = cols[0].innerText.toLowerCase().replace(/\s+/g, ''); + if (key.startsWith('menu')) { + key = key.split(':')[1].trim(); + currentKey = key; + data[key] = { + label: val, + options: {}, + }; + return; + } + if (data[currentKey]) data[currentKey].options[key] = val; + }); + return data; +} + +function createShareButton() { + const div = createTag( + 'div', + { class: 'share-mmm' }, + ); + const buttonLabel = 'Copy link to these search settings'; + const button = createTag( + 'button', + { + type: 'button', + class: 'copy-to-clipboard', + 'aria-label': buttonLabel, + 'data-copy-to-clipboard': buttonLabel, + 'data-copied': 'Copied!', + }, + ` + + `, + ); + // set initial destination + button.dataset.destination = document.location.href; + div.append(button); + button.addEventListener('click', (e) => { + /* c8 ignore start */ + e.preventDefault(); + navigator.clipboard.writeText(button.dataset.destination).then(() => { + button.classList.add('copy-to-clipboard-copied'); + setTimeout(() => document.activeElement.blur(), 500); + setTimeout( + () => button.classList.remove('copy-to-clipboard-copied'), + 2000, + ); + }); + /* c8 ignore end */ + }); + return div; +} + +function createDropdowns(data) { + const searchContainer = document.querySelector(SEARCH_CONTAINER); + const dropdownForm = createTag( + 'div', + { id: 'mmm-dropdown-container', class: 'mmm-form-container' }, + ); + searchContainer.append(dropdownForm); + const dropdownSubContainer = createTag('div', { id: 'mmm-dropdown-sub-container' }); + dropdownForm.append(dropdownSubContainer); + dropdownForm.append(createShareButton()); + Object.keys(data).forEach((key) => { + const { label, options } = data[key]; + const container = createTag('div'); + dropdownSubContainer.append(container); + container.append(createTag('label', { for: `mmm-dropdown-${key}` }, `${label}:`)); + const select = createTag('select', { id: `mmm-dropdown-${key}` }); + container.append(select); + select.append(createTag('option', { value: '' }, 'Show all')); + Object.keys(options).forEach((option) => { + const optionEl = createTag('option', { value: option }, options[option]); + select.append(optionEl); + const startingVal = SEARCH_INITIAL_VALUES[key]; + if (startingVal === option) optionEl.setAttribute('selected', 'selected'); + }); + select.addEventListener('change', () => filterPageList()); + }); +} + +function debounce(func) { + let timeout; + return (event) => { + clearTimeout(timeout); + timeout = setTimeout(() => func(event), DEBOUNCE_TIME); + }; +} + +function createSearchField() { + const searchContainer = document.querySelector(SEARCH_CONTAINER); + const searchForm = createTag( + 'div', + { id: 'mmm-search-filter-container', class: 'mmm-form-container' }, + `
+ + +
`, + ); + searchContainer.append(searchForm); + const searchField = searchForm.querySelector('textarea'); + searchField.value = SEARCH_INITIAL_VALUES.filter || ''; + + searchField.addEventListener('keyup', debounce((event) => filterPageList(null, null, event))); + searchField.addEventListener('change', debounce((event) => filterPageList(null, null, event))); + searchField.addEventListener('input', function adjustHeight() { + this.style.height = 'auto'; /* Reset height to auto to recalculate */ + this.style.height = `${this.scrollHeight - 32}px`; + }); +} + +function createLastSeenManifestAndDomainDD() { + const searchContainer = document.querySelector(SEARCH_CONTAINER); + const dd = createTag( + 'div', + { id: 'mmm-dropdown-container', class: 'mmm-form-container' }, + `
+ + +
+
+ + +
+ `, + ); + dd.addEventListener('change', () => filterPageList()); + searchContainer.append(dd); +} + +async function createForm(el) { + const data = parseData(el); + const searchContainer = createTag('div', { class: SEARCH_CONTAINER.slice(1) }); + document.querySelector('.mmm-container').parentNode.prepend(searchContainer); + createDropdowns(data); + createLastSeenManifestAndDomainDD(); + createSearchField(); +} + +function createPaginationEl({ data, el }) { + const { pageNum, perPage, totalRecords } = data; + const arrowIcons = { + first: '', + prev: '', + next: '', + last: '', + }; + const paginationEl = createTag('div', { + id: 'mmm-pagination', + 'data-current-page': pageNum, + 'data-perpage': perPage, + }); + if (totalRecords) { + const perPageOptions = [25, 50, 100]; // add more options as needed + const paginationWrapper = createTag('div', { id: 'mmm-pagination-wrapper' }); + const paginationLabel = createTag( + 'label', + { for: 'mmm-pagination-dropdown' }, + 'Items per page:', + ); + const paginationDropdown = createTag( + 'select', + { + id: 'mmm-pagination-dropdown', + value: perPage, + }, + ); + perPageOptions.forEach((option) => paginationDropdown.append(createTag('option', { + value: option, + ...(option === perPage ? { selected: 'selected' } : {}), + }, option))); + paginationEl.append(paginationWrapper); + const totalPages = Math.ceil(totalRecords / perPage); + const prev = pageNum - 1 || 1; + const next = pageNum < totalPages ? pageNum + 1 : pageNum; + const firstEl = createTag('a', { + 'data-page-num': '1', + class: `arrow ${pageNum === 1 ? 'disabled' : ''}`, + }, arrowIcons.first); + const prevEl = createTag('a', { + 'data-page-num': prev, + class: `arrow ${pageNum === 1 ? 'disabled' : ''}`, + }, arrowIcons.prev); + const nextEl = createTag('a', { + 'data-page-num': next, + class: `arrow ${pageNum === totalPages ? 'disabled' : ''}`, + }, arrowIcons.next); + const lastEl = createTag('a', { + 'data-page-num': totalPages, + class: `arrow ${pageNum === totalPages ? 'disabled' : ''}`, + }, arrowIcons.last); + const rangeStart = pageNum * perPage - (perPage - 1); + const rangeEnd = pageNum * perPage < totalRecords ? pageNum * perPage : totalRecords; + const range = `${rangeStart.toLocaleString()} - ${rangeEnd.toLocaleString()}`; + const paginationSummary = createTag( + 'div', + { class: 'mmm-pagination-summary' }, + `
${range} of ${totalRecords.toLocaleString()}
`, + ); + paginationWrapper.append( + createTag('div', { id: 'pagination-select' }, [paginationLabel, paginationDropdown]), + createTag('div', { id: 'pagination-arrows' }, [ + firstEl, + prevEl, + paginationSummary, + nextEl, + lastEl, + ]), + ); + } else { + paginationEl.append(createTag('h5', { id: 'mmm-pagination-no-results' }, 'No results')); + } + el.append(paginationEl); +} + +function handlePaginationDropdownChange() { + const paginationEl = document.querySelector('#mmm-pagination'); + paginationEl?.querySelector('select')?.addEventListener('change', (event) => { + paginationEl.dataset.perpage = event.target.value; + filterPageList( + paginationEl.dataset.pageNum, + paginationEl.dataset.perpage, + event, + ); + }); +} + +function handlePaginationClicks() { + const paginationEl = document.querySelector('#mmm-pagination'); + paginationEl?.querySelectorAll('a').forEach((item) => { + item?.addEventListener('click', (event) => { + paginationEl.dataset.currentPage = item.dataset.pageNum; + filterPageList( + item.dataset.pageNum, + paginationEl.dataset.perpage, + event, + ); + }); + }); +} + +async function createPageList(el, search) { + const paginationEl = document.querySelector('.mmm-pagination'); + paginationEl?.classList.add('mmm-hide'); + const mmmElContainer = createTag('div', { class: 'mmm-container max-width-12-desktop' }); + const mmmEl = createTag('dl', { + class: 'mmm foreground', + id: 'mmm', + role: 'presentation', + }); + mmmElContainer.append(mmmEl); + const url = API_URLS.pageList; + const response = await fetchData( + url, + DATA_TYPE.JSON, + { + method: 'POST', + body: JSON.stringify(search ?? SEARCH_INITIAL_VALUES), + }, + ); + response.result?.map((page) => createButtonDetailsPair(mmmEl, page)); + const section = createTag('div', { id: 'mep-section', class: 'section' }); + const main = document.querySelector('main'); + el.replaceWith(mmmElContainer); + main.append(section); + createPaginationEl({ + data: response, + el: mmmElContainer, + }); + paginationEl?.classList.remove('mmm-hide'); + handlePaginationClicks(); + handlePaginationDropdownChange(); +} + +/** + * This function creates a listener to search criteria changes + * and will fires an API call when event is received. + * The search criteria change event is fired inside filterPageList() + */ +function subscribeToSearchCriteriaChanges() { + document.addEventListener(SEARCH_CRITERIA_CHANGE_EVENT, (el) => { + // clear url of search params (if user came from a share link) + if (document.location.search) { + window.history.pushState({}, document.title, `${document.location.origin}${document.location.pathname}`); + } + + const searchCriteria = JSON.stringify(el?.detail || {}); + if (cachedSearchCriteria !== searchCriteria) { + createPageList(document.querySelector('.mmm').parentNode, el.detail); + cachedSearchCriteria = searchCriteria; + } + }); +} + +export default async function init(el) { + await createPageList(el); + createForm(el); + subscribeToSearchCriteriaChanges(); + loadStyle('/libs/features/personalization/preview.css'); +} diff --git a/libs/blocks/mobile-app-banner/mobile-app-banner.js b/libs/blocks/mobile-app-banner/mobile-app-banner.js index 62f68b70869..b98354776de 100644 --- a/libs/blocks/mobile-app-banner/mobile-app-banner.js +++ b/libs/blocks/mobile-app-banner/mobile-app-banner.js @@ -16,7 +16,7 @@ async function getKey(product) { async function getECID() { let ecid = null; if (window.alloy) { - await window.alloy('getIdentity').then((data) => { + await window.alloy_getIdentity.then((data) => { ecid = data?.identity?.ECID; }).catch((err) => window.lana.log(`Error fetching ECID: ${err}`, { tags: 'mobile-app-banner' })); } diff --git a/libs/blocks/modal/modal.css b/libs/blocks/modal/modal.css index b20f93e6865..7a019560f71 100644 --- a/libs/blocks/modal/modal.css +++ b/libs/blocks/modal/modal.css @@ -21,6 +21,31 @@ z-index: 102; } +.dialog-modal.upgrade-flow-modal, +.dialog-modal.three-in-one { + height: 100%; + width: 100%; + max-height: 100%; + max-width: 100%; + overflow: hidden; +} + +.upgrade-flow-modal .dialog-close { + display: none; +} + +.upgrade-flow-modal .upgrade-flow-iframe, +.three-in-one .milo-iframe { + overflow: hidden; + height: 100%; + width: 100%; + box-sizing: border-box; +} + +.three-in-one iframe { + width: 100%; +} + #locale-modal-v2 .dialog-close, #locale-modal-v2 .georouting-wrapper { display: block; @@ -72,25 +97,6 @@ } } -.dialog-modal.upgrade-flow-modal { - height: 100%; - width: 100%; - max-height: 100%; - max-width: 100%; - overflow: hidden; -} - -.upgrade-flow-modal .dialog-close { - display: none; -} - -.upgrade-flow-modal .upgrade-flow-iframe { - overflow: hidden; - height: 100%; - width: 100%; - box-sizing: border-box; -} - .modal-curtain.is-open { position: fixed; top: 0; @@ -119,6 +125,10 @@ outline: 2px solid var(--modal-focus-color); } +.dialog-focus-placeholder { + height: 0; +} + .dialog-modal .section > .content { max-width: initial; } @@ -238,6 +248,14 @@ width: fit-content; } + .dialog-modal.three-in-one { + width: 100%; + } + + .dialog-modal .embed-vimeo { + min-width: 80vw; + } + .dialog-modal.tall-video { --modal-width-var: 50vw; @@ -278,7 +296,7 @@ max-width: 100%; max-height: 100%; } - + .dialog-modal.upgrade-flow-modal { border-radius: 0; } @@ -351,7 +369,7 @@ .dialog-modal.commerce-frame .milo-iframe iframe { height: 0%; } - + .dialog-modal.upgrade-flow-modal { height: 820px; max-width: 1100px; @@ -359,6 +377,13 @@ width: 80%; } + .dialog-modal.three-in-one { + height: 820px; + width: 80%; + max-width: 1100px; + overflow: hidden; + } + .dialog-modal.tall-video, .dialog-modal.tall-video .milo-video { --modal-width-var: 35vw; diff --git a/libs/blocks/modal/modal.js b/libs/blocks/modal/modal.js index 5ba3f3a0c80..2e95a2f60be 100644 --- a/libs/blocks/modal/modal.js +++ b/libs/blocks/modal/modal.js @@ -3,8 +3,8 @@ import { createTag, getMetadata, localizeLink, loadStyle, getConfig } from '../../utils/utils.js'; import { decorateSectionAnalytics } from '../../martech/attributes.js'; -const FOCUSABLES = 'a:not(.hide-video), button, input, textarea, select, details, [tabindex]:not([tabindex="-1"]'; -const CLOSE_ICON = ` +const FOCUSABLES = 'a:not(.hide-video), button:not([disabled], .locale-modal-v2 .paddle), input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; +const CLOSE_ICON = `
handleChange(e.target, name, idx)}> -

${prettyPath(item.url)}

-

${item.edit && html`EDIT`}

+

${prettyUrl}

+

${item.edit && html`EDIT`}

${item.action === 'preview' ? 'Previewing' : prettyDate(item.preview)}

${isChecked && disablePublish ? html`${disablePublish}` : publishText} diff --git a/libs/blocks/preflight/panels/seo.js b/libs/blocks/preflight/panels/seo.js index a2cf70f3b2e..f5c266b62e8 100644 --- a/libs/blocks/preflight/panels/seo.js +++ b/libs/blocks/preflight/panels/seo.js @@ -127,7 +127,8 @@ async function checkBody() { async function checkLorem() { const result = { ...loremResult.value }; const { innerHTML } = document.documentElement; - if (innerHTML.includes('Lorem ipsum')) { + const htmlWithoutPreflight = innerHTML.replace(document.getElementById('preflight')?.outerHTML, ''); + if (htmlWithoutPreflight.includes('Lorem ipsum')) { result.icon = fail; result.description = 'Reason: Lorem ipsum is used on the page.'; } else { @@ -226,8 +227,9 @@ async function checkLinks() { && !link.closest('.preflight') // Is not inside preflight && !knownBadUrls.some((url) => url === link.hostname) // Is not a known bad url ) { - link.liveHref = link.href.replace('hlx.page', 'hlx.live'); - link.liveHref = link.href.replace('aem.page', 'aem.live'); + link.liveHref = link.href; + if (link.href.includes('hlx.page')) link.liveHref = link.href.replace('hlx.page', 'hlx.live'); + if (link.href.includes('aem.page')) link.liveHref = link.href.replace('aem.page', 'aem.live'); return true; } return false; @@ -237,6 +239,16 @@ async function checkLinks() { const baseOpts = { method: 'POST', headers: { 'Content-Type': 'application/json' } }; const badResults = []; + [...document.querySelectorAll('a')].forEach((link) => { + if (link.dataset?.httpLink) { + const httpLink = { + url: link.liveHref, + status: 'authored as http', + }; + badResults.push(httpLink); + } + }); + for (const group of groups) { const urls = group.map((link) => link.liveHref); const opts = { ...baseOpts, body: JSON.stringify({ urls }) }; @@ -244,7 +256,8 @@ async function checkLinks() { badResults.push(...spidyResults); } - badLinks.value = badResults.map((result) => links.find((link) => compareResults(result, link))); + badLinks.value = badResults.map((result) => links.find((link) => compareResults(result, link))) + .filter(Boolean); // Format the results for display const count = badLinks.value.length; diff --git a/libs/blocks/preflight/preflight.css b/libs/blocks/preflight/preflight.css index 5c2c2f7e78b..c704e7d4bfd 100644 --- a/libs/blocks/preflight/preflight.css +++ b/libs/blocks/preflight/preflight.css @@ -170,14 +170,22 @@ p.preflight-content-heading-edit { } a.preflight-edit { - background: url('./img/word-icon.svg'); - background-repeat: no-repeat; display: block; text-indent: -1000px; overflow: hidden; height: 32px; } +a.preflight-edit.sharepoint-icon { + background: url('./img/word-icon.svg'); + background-repeat: no-repeat; +} + +a.preflight-edit.da-icon { + background: url('./img/document-authoring.svg'); + background-repeat: no-repeat; +} + .preflight-group-row.preflight-group-detail.not-found::before { background-image: url('./img/red-error.svg'); background-repeat: no-repeat; diff --git a/libs/blocks/quiz-entry/mlField.js b/libs/blocks/quiz-entry/mlField.js deleted file mode 100644 index 17b9f72fc96..00000000000 --- a/libs/blocks/quiz-entry/mlField.js +++ /dev/null @@ -1,52 +0,0 @@ -import { html } from '../../deps/htm-preact.js'; -import { getConfig } from '../../utils/utils.js'; - -export const getMLResults = async (endpoint, apiKey, threshold, input, count, validFiCodes) => { - const { env } = getConfig(); - const subdomain = env === 'prod' ? 'cchome' : 'cchome-dev'; - const apiUrl = `https://${subdomain}.adobe.io/int/v1/models`; - const params = { - endpoint, - contentType: 'application/json', - payload: { - data: { - input, - num_items: count || 10, - given_prod_list: validFiCodes, - }, - }, - }; - - const result = await fetch(apiUrl, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'x-api-key': apiKey, - }, - body: JSON.stringify(params), - }) - .then((response) => response.json()) - .catch((error) => window.lana.log(`ERROR: Fetching fi codes ${error}`, { tags: 'quiz-entry', errorType: 'i' })); - - let value; - let highestProb = null; - if (result) { - result.filtered = result?.data?.filter((item) => { - let isValid = false; - if (!highestProb) { - highestProb = item.prob; - isValid = true; - } else if (item.prob / highestProb > threshold) { - isValid = true; - } - return isValid; - }); - value = result; - } else { - value = { errors: [{ title: 'Unable to fetch fi codes' }] }; - } - return value; -}; - -export const mlField = ({ cardsUsed, onMLInput, onMLEnter, placeholderText, onClearClick }) => html` -

`; diff --git a/libs/blocks/quiz-entry/quiz-entry.css b/libs/blocks/quiz-entry/quiz-entry.css deleted file mode 100644 index a64b8ad7e9a..00000000000 --- a/libs/blocks/quiz-entry/quiz-entry.css +++ /dev/null @@ -1,489 +0,0 @@ -.quiz-entry { - --quiz-button-disabled-bg: #757575; - --quiz-button-disabled-text: #FFF; -} - -.quiz-container { - align-items: center; - color: var(--color-black); - display: flex; - flex-direction: column; - padding: var(--spacing-xxxl) var(--spacing-xl); -} - -.quiz-container *{ - box-sizing: border-box; -} - -.quiz-heading-container { - color: #2C2C2C; - margin-bottom: var(--spacing-m); - text-align: center; -} - -.quiz-title { - font-size: var(--type-heading-xl-size); - line-height: var(--type-heading-xl-lh); - font-weight: var(--type-heading-all-weight); - margin: 0 0 8px; -} - -.quiz-subtitle { - font-size: var(--type-heading-l-size); - line-height: var(--type-heading-l-lh); - margin: 0; -} - -.quiz-question-container { - display: flex; - flex-flow: row wrap; - justify-content: center; - margin-bottom: var(--spacing-xl); - max-width: 1130px; - width: 100%; -} - -.quiz-input-container { - display: flex; - flex-flow:row nowrap; - justify-content: center; - max-width: 480px; - position: relative; - width: 100%; -} - -.quiz-input { - background: url("data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%3Cg%20clip-path%3D%22url%28%23clip0_796_4337%29%22%3E%0A%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M15.77%2014.7094L11.2357%2010.1751C12.1742%208.96682%2012.6169%207.44625%2012.4736%205.92302C12.3304%204.39978%2011.6119%202.98841%2010.4646%201.97626C9.31732%200.964113%207.82737%200.427296%206.29816%200.475108C4.76895%200.52292%203.31545%201.15177%202.23361%202.23361C1.15177%203.31545%200.52292%204.76895%200.475108%206.29816C0.427296%207.82737%200.964113%209.31732%201.97626%2010.4646C2.98841%2011.6119%204.39978%2012.3304%205.92302%2012.4736C7.44625%2012.6169%208.96682%2012.1742%2010.1751%2011.2357L14.7094%2015.77C14.85%2015.9107%2015.0408%2015.9897%2015.2397%2015.9897C15.4386%2015.9897%2015.6293%2015.9107%2015.77%2015.77C15.9106%2015.6294%2015.9896%2015.4386%2015.9896%2015.2397C15.9896%2015.0408%2015.9106%2014.8501%2015.77%2014.7094ZM6.49998%2011C5.60997%2011%204.73994%2010.7361%203.99992%2010.2416C3.2599%209.74716%202.68312%209.04436%202.34253%208.22209C2.00193%207.39982%201.91282%206.49502%202.08645%205.62211C2.26008%204.74919%202.68867%203.94737%203.318%203.31803C3.94734%202.6887%204.74916%202.26011%205.62208%202.08648C6.49499%201.91285%207.39979%202.00196%208.22206%202.34256C9.04433%202.68315%209.74713%203.25993%2010.2416%203.99995C10.7361%204.73997%2011%205.61%2011%206.50001C10.9986%207.69308%2010.5241%208.83689%209.68048%209.68051C8.83686%2010.5241%207.69305%2010.9987%206.49998%2011Z%22%20fill%3D%22%23222222%22%2F%3E%0A%3C%2Fg%3E%0A%3Cdefs%3E%0A%3CclipPath%20id%3D%22clip0_796_4337%22%3E%0A%3Crect%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22white%22%2F%3E%0A%3C%2FclipPath%3E%0A%3C%2Fdefs%3E%0A%3C%2Fsvg%3E") no-repeat #fff; - background-position: center right 24px; - border: 2px solid #e6e6e6; - border-radius: 40px; - color: var(--text-color); - cursor: pointer; - font-size: var( --type-body-s-size); - height: 56px; - line-height: var(--type-heading-m-lh); - padding: 0 var(--spacing-xxl) 0 var(--spacing-s); - width: 100%; -} - -.quiz-input::placeholder { - color: var(--text-color); - font-size: var( --type-body-s-size) !important; - font-style: italic; -} - -.quiz-input:focus-visible { - outline: 4px solid #4B75FF; - outline-offset:-1px; -} - -.quiz-input:disabled { - background-color: #fafafacc; - cursor: not-allowed; - outline: none; - opacity: 0.5; -} - -.quiz-input-clear { - background: url("data:image/svg+xml,%0A%3Csvg id='Layer_1' data-name='Layer 1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Crect id='Frame' x='4.14' y='3.77' width='12' height='12' style='fill:red;fill-opacity:0'/%3E%3Cg id='Line'%3E%3Cpath d='M14.88,13.16a1,1,0,0,1,0,1.35,1,1,0,0,1-.67.27.94.94,0,0,1-.67-.27l-3.4-3.4-3.39,3.4a1,1,0,0,1-1.35,0,1,1,0,0,1,0-1.35L8.8,9.77,5.4,6.37A1,1,0,0,1,5.4,5,1,1,0,0,1,6.75,5l3.39,3.39L13.54,5a.95.95,0,1,1,1.34,1.34l-3.39,3.4Z' style='fill:%236e6e6e'/%3E%3C/g%3E%3C/svg%3E") center no-repeat #fff; - background-size: 50%; - border-radius: 50%; - cursor: pointer; - height: 52px; - position: absolute; - right: 8px; - top: 50%; - transform: translateY(-50%); - width: 52px; -} - -.quiz-input-clear.hidden { - display: none; -} - -.popover-container { - left: 50%; - position: absolute; - transform: translateX(-50%); - width: 100%; - z-index: 10; -} - -.popover-container.popover-bottom { - top: 100%; -} - -.popover-content { - background-color: var(--color-white); - padding: 20px; - max-height: 404px; - overflow: hidden; - text-align: left; - border-radius: 4px; - border: 2px solid #E6E6E6; - margin-top: 8px; - box-sizing: border-box; -} - -.popover-content div:hover { - background-color: #f0f0f0; /* Highlight color on hover */ - text-decoration: underline; -} - -.popover-item { - cursor: pointer; - font-size: var(--type-detail-l-size); - font-weight: 400; - line-height: var(--type-heading-s-lh); - color: var(--link-color-dark); -} - -.quiz-directions { - align-items: center; - background: linear-gradient(90deg, #A900A2 1.24%, #E84601 100%); - border-radius: 8px; - color: #FFF; - display: flex; - font-size: 17px; - font-weight: 900; - height: 40px; - justify-content: center; - line-height: 30px; - margin: var(--spacing-m) 0 8px; - width: 100%; -} - -.quiz-options-container { - display: flex; - flex-flow: row wrap; - position: relative; - max-width: 320px; - width: 100%; -} - -.quiz-options-container:focus-visible { - outline: 4px solid #4B75FF; - outline-offset: 2px; -} - -.carousel-slides { - display: flex; - gap: 8px; - justify-content: center; - overflow: hidden; - padding: 8px; - position: relative; - width: 100%; -} - -.carousel-arrow { - background-color: #fff; -background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='16' viewBox='0 0 10 16'%3E%3Cdefs%3E%3Cstyle%3E.a%7Bfill%3A%23f0f%3Bopacity%3A0%3B%7D.b%7Bfill%3A%23767676%3B%7D%3C/style%3E%3C/defs%3E%3Cg transform='translate(10 16) rotate(180)'%3E%3Crect class='a' width='10' height='16'/%3E%3Cpath class='b' d='M9.115,13.853l0,0L3.051,8,9.117,2.15l0,0A1.246,1.246,0,1,0,7.386.353l0,0L7.367.366h0L.382,7.1l0,0a1.237,1.237,0,0,0,0,1.794l0,0,6.982,6.732,0,0,.015.014,0,0a1.246,1.246,0,1,0,1.73-1.794Z'/%3E%3C/g%3E%3C/svg%3E"); - background-size: 15px; - background-position: 50% 50%; - background-repeat: no-repeat; - border: none; - border-radius: 50%; - box-shadow: 10px 10px 15px -5px rgba(0 0 0 /23%); - cursor: pointer; - height: 63px; - position: absolute; - top: 50%; - transform: translateY(-50%); - width: 63px; - z-index: 1; -} - -.arrow-next { - right: -32px; -} - -.arrow-prev { - left: -32px; - transform: rotate(180deg) translateY(50%); -} - -.arrow-next.rtl { - transform: rotate(180deg) translateY(50%); - -} - -.arrow-prev.rtl { - transform: rotate(0deg) translateY(-50%); -} - -.quiz-options-container:focus-visible, -.carousel-arrow:focus-visible { - outline: 4px solid #4B75FF; - outline-offset: -1px; -} - -.quiz-option { - flex: 0 0 138px; - flex-direction: column; - height: 100%; - margin: 0; - align-items: stretch; - border: none; - border-radius: 0.5rem; - cursor: pointer; - display: flex; - font-family: inherit; - padding: 0; - user-select: none; - min-height: 186px; - outline: none; - position: relative; -} - -.quiz-option-image { - display: flex; - align-items: center; - border-radius: 0.5rem; - justify-content: center; - margin: 0; - height: 100%; - filter: brightness(35%); -} - -.quiz-option-text-container { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; - padding: 0 1rem; -} - -.quiz-option-title { - color: white; - font-size: var(--type-detail-l-size); - font-weight: 900; - line-height: var(--type-heading-s-lh); - margin: 0 0 4px; - text-align: start; -} - -.quiz-option-text { - color: white; - font-size: 14px; - font-weight: 400; - line-height: 21px; - margin: 0; - text-align: start; -} - -.quiz-option.selected { - border: 5px solid #FC00F2; - border-radius: 13px; -} - -.quiz-option.selected::before { - background: url("data:image/svg+xml,%3Csvg%20width%3D%2225%22%20height%3D%224%22%20viewBox%3D%220%200%2025%204%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%3Cpath%20d%3D%22M2%202H23%22%20stroke%3D%22white%22%20stroke-width%3D%224%22%20stroke-linecap%3D%22round%22%2F%3E%0A%3C%2Fsvg%3E") no-repeat; - background-size: 20px 4px; - content: " "; - height: 4px; - position: absolute; - right: 20px; - top: 20px; - width: 20px; - z-index: 1; -} - -.quiz-option:hover .quiz-option-image, -.quiz-option.selected .quiz-option-image, -.quiz-option:focus-visible .quiz-option-image { - filter: brightness(20%); -} - -.quiz-option:focus-visible::after { - content: " "; - border-radius: 0.5rem; - height: 100%; - outline: 4px solid #4B75FF; - outline-offset: 2px; - position: absolute; - width: 100%; - z-index: -1; -} - -.quiz-option.selected:focus-visible::after { - border-radius: 8px; - outline-offset: 8px; -} - -.quiz-option.disabled { - background-color: #fafafacc; - outline: none; -} - -.quiz-option.disabled .quiz-option-icon, -.quiz-option.disabled .quiz-option-image, -.quiz-option.disabled .quiz-option-text-container{ - opacity: 0.5; - cursor: not-allowed; -} - -.quiz-button-container { - align-items: center; - display: flex; - justify-content: center; -} - -.quiz-button { - background: var(--color-gray-800); - border: 2px solid var(--color-white); - border-radius: 20px; - cursor: pointer; - font-family: inherit; - font-size: 17px; - font-weight: 700; - line-height: 21px; - padding: 9px 16px; -} - -.quiz-button:focus-visible { - outline: 4px solid #4B75FF; -} - -.quiz-button-label { - color: var(--color-white); - font-size: 18px; - font-weight: var(--type-heading-all-weight); - line-height: 22px; -} - -.quiz-button[disabled] { - background: var(--quiz-button-disabled-bg); - cursor: not-allowed; -} - -.quiz-button[disabled] .quiz-button-label{ - color: var(--quiz-button-disabled-text); -} - -/* Tablet up */ -@media screen and (min-width: 600px) { - .quiz-container { - padding: 80px 64px; - } - - .quiz-input { - height: 66px; - } - - .quiz-input::placeholder { - width: 311px; - height: 30px; - font-size: 20px; - line-height: 30px; - } - - .quiz-options-container { - max-width: none; - } - - .carousel-slides { - justify-content: left; - } - - .carousel-slides.align-right { - justify-content: right; - margin-left: 0; - } - - .quiz-option-icon { - border-radius: 0.5rem; - justify-content: center; - min-height: 126px; - } - - .quiz-option-icon img { - height: var(--icon-size-xl); - width: var(--icon-size-xl); - max-width: 100%; - } - - .quiz-option.has-icon.quiz-option.has-image .no-icon-tablet, - .quiz-option.has-icon .quiz-option-image { - display: none; - } - - .quiz-option.has-icon .no-icon-tablet ~ .quiz-option-image, - .quiz-option.has-icon .no-icon-default { - display: flex; - } - - .quiz-option.selected .quiz-option-text { - font-weight: normal; - } - - .quiz-footer { - margin: 0 0 40px; - } -} - -/* Desktop */ -@media screen and (min-width: 1024px) { - .quiz-container { - padding: 104px 64px; - } - - .quiz-directions { - height: 50px; - } - - .carousel-slides { - justify-content: left; - margin: 0 -8px; - width: calc(100% + 8px); - } - - .carousel-slides.align-right { - justify-content: right; - margin-left: 0; - } - - .quiz-option { - flex: 0 0 232px; - min-height: 232px; - } - - .quiz-option-title { - font-size: 24px; - line-height: 30px; - text-align: center; - } - - .quiz-option-text { - display: none; - text-align: center; - font-size: var(--type-detail-l-size); - line-height: var(--type-heading-s-lh); - } - - .quiz-option:hover .quiz-option-text, - .quiz-option.selected .quiz-option-text , - .quiz-option:focus-visible .quiz-option-text { - display: block; - } - - .quiz-option.has-image .quiz-option-icon { - display: none; - } - - .quiz-option.has-icon .quiz-option-image { - display: flex; - } - - .quiz-step-container.top { - display: flex; - } - - .quiz-step-container.bottom { - display: none; - } -} diff --git a/libs/blocks/quiz-entry/quiz-entry.js b/libs/blocks/quiz-entry/quiz-entry.js deleted file mode 100644 index 5ffecb10ed4..00000000000 --- a/libs/blocks/quiz-entry/quiz-entry.js +++ /dev/null @@ -1,437 +0,0 @@ -import { render, html, useEffect, useState, useRef } from '../../deps/htm-preact.js'; -import { getQuizEntryData, handleNext, handleSelections } from './utils.js'; -import { mlField, getMLResults } from './mlField.js'; -import { GetQuizOption } from './quizoption.js'; -import { quizPopover, getSuggestions } from './quizPopover.js'; -import { getConfig } from '../../utils/utils.js'; - -export const locationWrapper = { - redirect: (url) => { - window.location = url; - }, -}; - -const App = ({ - quizPath, - maxQuestions, - analyticsType = null, - questionData = { questions: { data: [] } }, - stringsData = { questions: { data: [] } }, - resultsData = {}, - debug = false, -}) => { - const [dataLoaded, setDataLoaded] = useState(false); - const [quizState, setQuizState] = useState({ userFlow: [], userSelection: [], results: {} }); - const [quizLists, setQuizLists] = useState({}); - const [quizData, setQuizData] = useState({}); - const [hasMLData, setHasMLData] = useState(false); - const [mlData, setMLData] = useState({}); - const [mlInputUsed, setMLInputUsed] = useState(false); - const [cardsUsed, setCardsUsed] = useState(false); - const [selectedQuestion, setSelectedQuestion] = useState(null); - const [selectedCards, setSelectedCards] = useState({}); - const questionCount = useRef(0); - const [btnAnalytics, setBtnAnalytics] = useState(null); - const [showPopover, setShowPopover] = useState(false); - const [suggestions, setSuggestions] = useState([]); - - const QUIZ_INPUT = '#quiz-input'; - const QUIZ_INPUT_CLEAR = '#quiz-input-clear'; - const fiCodeCount = 3; - const enterKeyCode = 13; - const defaultThreshold = 0; - - let maxSelections = 10; - - const getStringValue = (propName) => { - if (!selectedQuestion?.questions) return ''; - const question = quizLists.strings[selectedQuestion.questions]; - return question?.[propName] || ''; - }; - - const getOptionsValue = (optionsType, prop) => { - const optionItem = quizData.strings[selectedQuestion.questions].data.find( - (item) => item.options === optionsType, - ); - return optionItem && optionItem[prop] ? optionItem[prop] : ''; - }; - - const sendMLFieldAnalytics = (input, isFieldText = true) => { - let val = ''; - - if (isFieldText) { - val = `Filters|${analyticsType}|${input}`; - } else if (input.length > 0) { - const fiCodes = input.map((result) => result.ficode); - val = `Filters|${analyticsType}|${selectedQuestion?.questions}/interest-${fiCodes.join('-')}`; - } - - const eventData = { - xdm: { - eventType: 'web.webinteraction.linkClicks', - web: { - webInteraction: { - linkClicks: { value: 1 }, - type: 'other', - name: val, - }, - }, - }, - data: { - _adobe_corpnew: { - digitalData: { - search: isFieldText ? { searchInfo: { keyword: val } } : undefined, - primaryEvent: !isFieldText ? { eventInfo: { eventName: val } } : undefined, - }, - }, - }, - }; - - // eslint-disable-next-line no-underscore-dangle - window._satellite?.track('event', eventData); - }; - - useEffect(() => { - (async () => { - const qMap = {}; - const questionDataArray = questionData?.questions?.data || []; - questionDataArray.forEach((question) => { - qMap[question.questions] = question; - }); - - const strMap = {}; - const stringsDataArray = stringsData?.questions?.data || []; - stringsDataArray.forEach((question) => { - strMap[question.q] = question; - }); - - const qLists = { - questions: qMap, - strings: strMap, - }; - - const qData = { - questions: questionData, - strings: stringsData, - }; - - if (questionDataArray.length > 0) { - setQuizState({ - userFlow: [questionDataArray[0].questions], - userSelection: quizState.userSelection, - results: resultsData, - }); - setSelectedQuestion(qLists.questions[questionDataArray[0].questions]); - } - setQuizData(qData); - setQuizLists(qLists); - setDataLoaded(true); - })(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - useEffect(() => { - (async () => { - const selectedTotal = Object.keys(selectedCards).length; - if (selectedTotal > 0) { - setCardsUsed(true); - } else { - setCardsUsed(false); - } - })(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [selectedCards]); - - useEffect(() => { - (async () => { - if (quizState.userFlow && quizState.userFlow.length) { - const currentFlow = [...quizState.userFlow]; - if (currentFlow && currentFlow.length && questionCount.current < maxQuestions) { - quizState.userFlow.shift(); - questionCount.current += 1; - setSelectedQuestion(quizLists.questions[currentFlow.shift()] || []); - } - } - })(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [quizState]); - - useEffect(() => { - (async () => { - if (selectedQuestion) { - const mlmap = { mlDetails: {}, mlOptions: [], mlValues: [] }; - quizData.questions[selectedQuestion.questions].data.forEach((row) => { - if (row.type === 'form') { - mlmap.mlDetails = row; - } else if (row.type === 'api_return_code') { - mlmap.mlOptions.push(row); - mlmap.mlValues.push(row.options); - } - }); - setMLData(mlmap); - if (Object.keys(mlmap.mlDetails).length > 0) { - setHasMLData(true); - } else { - setHasMLData(false); - } - } - })(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [selectedQuestion]); - - useEffect(() => { - let btnAnalyticsData = ''; - const selectedCardNames = Object.keys(selectedCards); - if (selectedCardNames.length > 0) { - btnAnalyticsData = `Filters|${analyticsType}|${selectedQuestion?.questions}/${selectedCardNames.join('/')}`; - } - - setBtnAnalytics(btnAnalyticsData); - }, [selectedQuestion, selectedCards, analyticsType]); - - const continueQuiz = async () => { - let selections = {}; - let userFlow = []; - if (mlInputUsed) { - const { mlDetails, mlValues } = mlData; - const mlFieldText = document.querySelector(QUIZ_INPUT).value; - const fiResults = await getMLResults(mlDetails.endpoint, mlDetails['api-key'], mlDetails.threshold || defaultThreshold, mlFieldText, fiCodeCount, mlValues); - const { filtered } = fiResults; - let fallback = []; - let error = 'Cannot connect to the ML endpoint'; - - if (mlDetails.fallback) fallback = mlDetails.fallback.split(','); - if (filtered) { - filtered.forEach((item) => { - selections[item.ficode] = true; - }); - - sendMLFieldAnalytics(filtered, false); - } else if (fiResults.errors || fiResults.error_code) { - for (const ficode of fallback) { - selections[ficode] = true; - } - if (fiResults.errors) error = fiResults.errors[0].title; - if (fiResults.error_code) error = fiResults.message; - window.lana.log(`ML results error - ${error}`, { tags: 'quiz-entry', errorType: 'i' }); - sendMLFieldAnalytics(fallback, false); - } - - sendMLFieldAnalytics(mlFieldText, true); - - if (debug) { - let fiCodes = []; - if (!fiResults.errors && !fiResults.error_code) { - // eslint-disable-next-line no-console - console.log('all', fiResults.data); - // eslint-disable-next-line no-console - console.log('filtered', filtered); - - fiCodes = filtered.map((result) => result.ficode); - } else { - // eslint-disable-next-line no-console - console.log('fallback codes used', fallback); - fiCodes = fallback.map((result) => result.ficode); - } - // eslint-disable-next-line no-console - console.log('sending ML field text to Adobe Analytics: ', `Filters|${analyticsType}|${mlFieldText}`); - // eslint-disable-next-line no-console - console.log('sending ML field fiCodes to Adobe Analytics: ', `Filters|${analyticsType}|${selectedQuestion?.questions}/interest-${fiCodes.join('-')}`); - } - } - - if (cardsUsed) { - userFlow = quizState.userFlow; - selections = selectedCards; - } - - if (Object.keys(selections).length > 0) { - const { nextFlow } = handleNext( - questionData, - selectedQuestion, - selections, - userFlow, - ); - const { nextSelections } = handleSelections( - quizState.userSelection, - selectedQuestion, - selections, - ); - - if (mlInputUsed) { nextSelections[0].isML = true; } - - const currentQuizState = { - userFlow: nextFlow, - userSelection: nextSelections, - results: resultsData, - }; - localStorage.setItem('stored-quiz-state', JSON.stringify(currentQuizState)); - setQuizState(currentQuizState); - - // eslint-disable-next-line no-console - if (debug) console.log(currentQuizState); - if (questionCount.current === maxQuestions || currentQuizState.userFlow.length === 1) { - if (!debug) { - locationWrapper.redirect(quizPath); - } - } else { - setSelectedCards({}); - setSelectedQuestion(null); - setMLInputUsed(false); - } - } - }; - - const onOptionClick = (option) => () => { - const selected = { ...selectedCards }; - const selectedTotal = Object.keys(selected).length; - - if (selectedTotal >= maxSelections && !selected[option.options]) { - return; - } - - if (!selected[option.options]) { - selected[option.options] = true; - } else { - delete selected[option.options]; - } - - setSelectedCards(selected); - }; - - const onMLInput = async (event) => { - const inputValue = event.target.value; - setMLInputUsed(true); - const { mlDetails } = mlData; - const data = await getSuggestions(mlDetails['ac-endpoint'], mlDetails['ac-client-id'], inputValue, mlDetails['ac-scope']); - if (data && data.suggested_completions && data.suggested_completions.length > 0) { - setSuggestions(data.suggested_completions.slice(0, 5)); - setShowPopover(true); - } - - document.querySelector(QUIZ_INPUT_CLEAR).classList.toggle('hidden', !inputValue.length); - - if (inputValue.length === 0) { - setMLInputUsed(false); - setSuggestions([]); - setShowPopover(false); - } - }; - - const onMLEnter = (event) => { - if (event.keyCode === enterKeyCode) continueQuiz(); - }; - - const onSuggestionClick = (suggestion) => () => { - const input = document.querySelector(QUIZ_INPUT); - input.value = suggestion.name; - setSuggestions([]); - setShowPopover(false); - input.focus(); - }; - - const onClearClick = () => { - document.querySelector(QUIZ_INPUT).value = ''; - document.querySelector(QUIZ_INPUT_CLEAR).classList.add('hidden'); - setMLInputUsed(false); - setSuggestions([]); - setShowPopover(false); - }; - - if (selectedQuestion) { - maxSelections = +selectedQuestion['max-selections']; - } - - if (!dataLoaded || !selectedQuestion) return null; - - const { locale } = getConfig(); - return html`
-
-

${quizLists.strings[selectedQuestion.questions].heading}

-

${quizLists.strings[selectedQuestion.questions]['sub-head']}

-
-
-
- ${hasMLData && html` - <${mlField} - cardsUsed="${cardsUsed}" - onMLInput="${onMLInput}" - onMLEnter="${onMLEnter}" - onClearClick="${onClearClick}" - placeholderText="${getOptionsValue('fi_code', 'title')}"/>`} - ${showPopover && html`<${quizPopover} - suggestions=${suggestions} - position="bottom" - onSuggestionClick=${onSuggestionClick}/>`} -
-
${quizLists.strings[selectedQuestion.questions].text}
- ${selectedQuestion.questions && html`<${GetQuizOption} - maxSelections=${maxSelections} - options=${quizData.strings[selectedQuestion.questions]} - background=${getStringValue('icon-background-color')} - countSelectedCards=${Object.keys(selectedCards).length} - selectedCards=${selectedCards} - onOptionClick=${onOptionClick} - getOptionsValue=${getOptionsValue} - mlInputUsed=${mlInputUsed}/>`} -
-
- -
-
`; -}; -export default async function init( - el, - config = { - quizPath: null, - maxQuestions: null, - analyticsType: null, - questionData: null, - stringsData: null, - resultsData: null, - debug: false, - }, -) { - let quizEntry; - if (config.questionData && config.stringsData) { - quizEntry = config; - } else { - try { - quizEntry = await getQuizEntryData(el); - } catch (error) { - // eslint-disable-next-line no-console - console.error('Failed to load quiz data:', error); - quizEntry = { - quizPath: '', - maxQuestions: 0, - analyticsType: '', - questionData: { questions: { data: [] } }, - stringsData: { questions: { data: [] } }, - resultsData: {}, - debug: false, - }; - } - } - - const params = new URL(document.location).searchParams; - const isDebug = params.get('debug') === 'quiz-entry'; - quizEntry.debug = isDebug; - - el.replaceChildren(); - render(html`<${App} - quizPath=${quizEntry.quizPath || ''} - maxQuestions=${quizEntry.maxQuestions || 0} - analyticsType=${quizEntry.analyticsType || ''} - questionData=${quizEntry.questionData} - stringsData=${quizEntry.stringsData} - resultsData=${quizEntry.resultsData} - debug=${quizEntry.debug || false} - />`, el); -} diff --git a/libs/blocks/quiz-entry/quizPopover.js b/libs/blocks/quiz-entry/quizPopover.js deleted file mode 100644 index ed0edbe212b..00000000000 --- a/libs/blocks/quiz-entry/quizPopover.js +++ /dev/null @@ -1,31 +0,0 @@ -import { html } from '../../deps/htm-preact.js'; -import { getConfig } from '../../utils/utils.js'; - -export const getSuggestions = async (endpoint, clientId, input, scope) => { - const { locale } = getConfig(); - const localeCode = locale?.ietf ? `${locale.ietf}`.replace('-', '_') : 'en_us'; - const apiUrl = `https://adobesearch.adobe.io/${endpoint}/completions?q[text]=${input}&q[locale]=${localeCode}&scope=${scope}`; - - const response = await fetch(apiUrl, { - method: 'GET', - headers: { 'x-api-key': clientId }, - }); - - if (!response.ok) { - window.lana.log('Failed to fetch suggestions', { tags: 'quiz-entry', errorType: 'i' }); - return ''; - } - - const data = await response.json(); - return data; -}; - -export const quizPopover = ({ suggestions, position = 'bottom', onSuggestionClick }) => html`
-
- ${suggestions.map((suggestion, index) => html` -
- ${suggestion.name} -
- `)} -
-
`; diff --git a/libs/blocks/quiz-entry/quizoption.js b/libs/blocks/quiz-entry/quizoption.js deleted file mode 100644 index 634d00d6f54..00000000000 --- a/libs/blocks/quiz-entry/quizoption.js +++ /dev/null @@ -1,184 +0,0 @@ -import { html, useState, useEffect } from '../../deps/htm-preact.js'; -import { getSwipeDistance, getSwipeDirection } from '../carousel/carousel.js'; -import { createTag } from '../../utils/utils.js'; -import { removeLeftToRightMark } from '../quiz/utils.js'; - -export const OptionCard = ({ - text, title, image, icon, iconTablet, iconDesktop, options, - disabled, selected, background, onClick, -}) => { - const getOptionClass = () => { - let className = 'no-track '; - if (icon || iconTablet || iconDesktop) className += 'has-icon '; - if (image) className += 'has-image '; - if (background) className += 'has-background '; - if (disabled) className += 'disabled '; - if (selected) className += 'selected '; - return className; - }; - - const getIconHtml = () => html`
- - ${iconDesktop && html``} - ${iconTablet && html``} - - -
`; - - const imageHtml = image ? html`
` : null; - const titleHtml = title ? html`

${title}

` : null; - const textHtml = text ? html`

${text}

` : null; - - return html``; -}; - -export const GetQuizOption = ({ - options, maxSelections, selectedCards, - onOptionClick, countSelectedCards, getOptionsValue, - background, mlInputUsed, -}) => { - const [index, setIndex] = useState(0); - const [visibleCount, setVisibleCount] = useState(6); - const [slideWidth, setSlideWidth] = useState(0); - - setVisibleCount(window.innerWidth >= 600 ? 6 : 3); - - const isRTL = document.documentElement.getAttribute('dir') === 'rtl'; - - /** - * Resets focus to the top of the quiz-entry options for accessibility. - * To ensure that the next keyboard tab after carousel navigation - * will focus the first avaiable quiz option. - */ - const resetFocus = () => { - const quiz = document.querySelector('.quiz-options-container'); - const focuser = createTag('button', { tabindex: 0 }); - quiz.prepend(focuser); - focuser.focus(); - quiz.removeChild(focuser); - }; - - const next = async () => { - if (index + visibleCount < options.data.length) { - setIndex(index + 1); - resetFocus(); - } - }; - - const prev = () => { - if (index > 0) { - setIndex(index - 1); - resetFocus(); - } - }; - - useEffect(() => { - const slide = document.querySelector('.quiz-option'); - if (slide) { - setSlideWidth(slide.offsetWidth); - } - }, [options, slideWidth, setSlideWidth]); - - useEffect(() => { - const handleResize = () => setVisibleCount(window.innerWidth >= 600 ? 6 : 3); - const el = document.querySelector('.quiz-options-container'); - - window.addEventListener('resize', handleResize); - - const swipe = { xMin: 50 }; - - const handleTouchStart = (event) => { - const touch = event.touches[0]; - swipe.xStart = touch.screenX; - }; - - const handleTouchMove = (event) => { - const touch = event.touches[0]; - swipe.xEnd = touch.screenX; - }; - - const handleTouchEnd = () => { - const swipeDistance = {}; - swipeDistance.xDistance = getSwipeDistance(swipe.xStart, swipe.xEnd); - const direction = getSwipeDirection(swipe, swipeDistance); - - swipe.xStart = 0; - swipe.xEnd = 0; - - if (swipeDistance.xDistance > swipe.xMin) { - if (direction === 'left') { - next(); - } else if (direction === 'right') { - prev(); - } - } - }; - - el.addEventListener('touchstart', handleTouchStart); - el.addEventListener('touchmove', handleTouchMove); - el.addEventListener('touchend', handleTouchEnd); - - return () => { - window.removeEventListener('resize', handleResize); - - el.removeEventListener('touchstart', handleTouchStart); - el.removeEventListener('touchmove', handleTouchMove); - el.removeEventListener('touchend', handleTouchEnd); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [index, visibleCount, options.data.length]); - - const handleKey = (e) => { - if (e.key === 'ArrowRight') { - e.preventDefault(); - if (isRTL) { - prev(); - } else { - next(); - } - } else if (e.key === 'ArrowLeft') { - e.preventDefault(); - if (isRTL) { - next(); - } else { - prev(); - } - } else if (e.key === 'Enter' || e.key === ' ') { - e.preventDefault(); - if (e.target && e.target.click) { - e.target.click(); - } - } - }; - - return html` -
- ${index > 0 && html``} - - ${(index + visibleCount < options.data.length) && html``} -
`; -}; diff --git a/libs/blocks/quiz-entry/utils.js b/libs/blocks/quiz-entry/utils.js deleted file mode 100644 index 787b4ee79ab..00000000000 --- a/libs/blocks/quiz-entry/utils.js +++ /dev/null @@ -1,122 +0,0 @@ -import { getNormalizedMetadata, getLocalizedURL } from '../quiz/utils.js'; - -export async function fetchJson(path) { - const response = await fetch(path); - return response.json(); -} - -export async function getQuizJson(path) { - try { - // Fetch required files - const [questions, strings] = await Promise.all([ - fetchJson(`${path}questions.json`), - fetchJson(`${path}strings.json`), - ]); - - // Try to fetch optional file, results.json - let results = []; - try { - results = await fetchJson(`${path}results.json`); - } catch (ex) { - window.lana?.log(`INFO: results.json not found or couldn't be fetched: ${ex}`, { tags: 'errorType=info,module=quiz-entry' }); - } - - return [questions, strings, results]; - } catch (ex) { - window.lana?.log(`ERROR: Fetching data for quiz entry: ${ex}`, { tags: 'errorType=error,module=quiz-entry' }); - return []; - } -} - -export const handleNext = (questionsData, selectedQuestion, userInputSelections, userFlow) => { - const allcards = Object.keys(userInputSelections); - let nextFlow = []; - let hasResultTrigger = false; - - allcards.forEach((selection) => { - // for each elem in current selection, find its coresponding - // next element and push it to the next array. - const nextItems = questionsData[selectedQuestion.questions].data; - const getAllSelectedQuestionsRelatedOptions = nextItems.filter( - (nextItem) => nextItem.options === selection, - ); - - getAllSelectedQuestionsRelatedOptions.forEach(({ options, next }) => { - if (options === selection) { - const flowStepsList = next.split(','); - // RESET the queue and add only the next question. - if (flowStepsList.includes('RESET')) { // Reset to intial question - nextFlow = []; // Resetting the nextQuizViews - // eslint-disable-next-line no-param-reassign - userFlow = []; // Resetting the userFlow as well - } - - if (!hasResultTrigger) { - hasResultTrigger = flowStepsList.includes('RESULT'); - } - - const filteredNextSteps = flowStepsList.filter((val) => (val !== 'RESULT' && val !== 'RESET')); - - nextFlow = [...nextFlow, ...filteredNextSteps]; - } - }); - }); - - // Stripping off the next steps that are negated using 'NOT()'. - nextFlow.forEach((nextStep) => { - if (nextStep?.startsWith('NOT(')) { - const stepsToSkip = nextStep?.substring( - nextStep.indexOf('(') + 1, - nextStep.lastIndexOf(')'), - ); - const stepsToSkipArr = stepsToSkip?.split(','); - stepsToSkipArr?.forEach((skip) => { - nextFlow = nextFlow.filter((view) => (view !== skip)); - }); - } - }); - - // Filtering out the NOT() from the nextQuizViews. - nextFlow = nextFlow.filter((view) => view.startsWith('NOT(') === false); - - return { nextFlow: [...new Set([...userFlow, ...nextFlow])] }; -}; - -export const handleSelections = (prevSelections, selectedQuestion, selections) => { - const newSelections = { selectedQuestion, selectedCards: selections }; - let nextSelections = []; - let isNewQuestion = true; - // de-dup any existing data if they use the ml field and cards. - if (prevSelections.length > 0) { - prevSelections.forEach((selection) => { - if (JSON.stringify(selection.selectedQuestion) === JSON.stringify(selectedQuestion)) { - selection.selectedCards = selections; - isNewQuestion = false; - } - }); - nextSelections = prevSelections; - } - - if (isNewQuestion) nextSelections.push(newSelections); - - return { nextSelections }; -}; - -export async function getQuizEntryData(el) { - const blockData = getNormalizedMetadata(el); - const dataPath = getLocalizedURL(blockData.data.text); - const quizPath = getLocalizedURL(blockData.quiz.text); - const maxQuestions = Number(blockData.maxquestions?.text) || 10; - const analyticsType = blockData.analyticstype?.text; - const analyticsQuiz = blockData.analyticsquiz?.text; - const [questionData, stringsData, resultsData] = await getQuizJson(dataPath); - return { - quizPath, - maxQuestions, - analyticsQuiz, - analyticsType, - questionData, - stringsData, - resultsData, - }; -} diff --git a/libs/blocks/quiz-marquee/quiz-marquee.js b/libs/blocks/quiz-marquee/quiz-marquee.js index 70b82eade83..f98d1a9f33a 100644 --- a/libs/blocks/quiz-marquee/quiz-marquee.js +++ b/libs/blocks/quiz-marquee/quiz-marquee.js @@ -68,9 +68,13 @@ export default async function init(el) { [...rows].forEach(async (row) => { const cols = row.querySelectorAll(':scope > div'); const isFragRow = cols[0].textContent.trim() === 'nested-fragments'; + const isList = cols[2]?.textContent?.trim() === 'list' || false; if (isFragRow) { - cols[0].parentElement.classList.add('nested', cols[1].textContent.trim()); + const fragParent = cols[0].parentElement; + fragParent?.classList.add('nested', cols[1]?.textContent?.trim()); + if (isList) fragParent.setAttribute('role', 'list'); + const wrapper = createTag('div', { class: 'copy-wrapper' }); row.append(wrapper); wrapper.append(...cols); diff --git a/libs/blocks/quiz-results/quiz-results.js b/libs/blocks/quiz-results/quiz-results.js index 7c9622366a9..c4577ddea8e 100644 --- a/libs/blocks/quiz-results/quiz-results.js +++ b/libs/blocks/quiz-results/quiz-results.js @@ -16,6 +16,7 @@ async function loadFragments(el, experiences) { } document.querySelectorAll('main > div, .quiz-results').forEach((quiz) => quiz.removeAttribute('daa-lh')); document.querySelectorAll('.quiz-results.basic > .fragment > .section').forEach((section, idx) => decorateSectionAnalytics(section, idx, getConfig())); + if (el.getAttribute('role') === 'list') document.querySelectorAll('.nested[role=list] > .fragment').forEach((fragment) => fragment.setAttribute('role', 'listitem')); } function redirectPage(quizUrl, debug, message) { diff --git a/libs/blocks/region-nav/region-nav.css b/libs/blocks/region-nav/region-nav.css index b3a9859c0ba..a996434f335 100644 --- a/libs/blocks/region-nav/region-nav.css +++ b/libs/blocks/region-nav/region-nav.css @@ -56,6 +56,10 @@ column-count: 1; } +.region-nav.hide { + display: none; +} + @media (min-width: 600px) { .region-nav > div:nth-of-type(2) { column-count: 3; diff --git a/libs/blocks/region-nav/region-nav.js b/libs/blocks/region-nav/region-nav.js index deb802cf9f4..af1a48022b9 100644 --- a/libs/blocks/region-nav/region-nav.js +++ b/libs/blocks/region-nav/region-nav.js @@ -1,5 +1,7 @@ import { getConfig } from '../../utils/utils.js'; +const queriedPages = []; + function setInternational(prefix) { const domain = window.location.host.endsWith('.adobe.com') ? 'domain=adobe.com' : ''; const maxAge = 365 * 24 * 60 * 60; // max-age in seconds for 365 days @@ -10,25 +12,38 @@ function setInternational(prefix) { function handleEvent({ prefix, link, callback } = {}) { if (typeof callback !== 'function') return; + const existingPage = queriedPages.find((page) => page.href === link.href); + if (existingPage) { + callback(existingPage.resp.ok + ? link.href + : `${prefix ? `/${prefix}` : ''}/`); + return; + } fetch(link.href, { method: 'HEAD' }).then((resp) => { + queriedPages.push({ href: link.href, resp }); if (!resp.ok) throw new Error('request failed'); callback(link.href); }).catch(() => { - const prefixUrl = prefix ? `/${prefix}` : ''; - callback(`${prefixUrl}/`); + callback(`${prefix ? `/${prefix}` : ''}/`); }); } -function decorateLink(link, path) { +export function decorateLink(link, path) { let hrefAdapted; let pathname = link.getAttribute('href'); if (pathname.startsWith('http')) { try { pathname = new URL(pathname).pathname; } catch (e) { /* href does not contain domain */ } } const linkParts = pathname.split('/'); - const prefix = linkParts[1] || 'us'; + const prefix = linkParts[1] || ''; let { href } = link; if (href.endsWith('/')) href = href.slice(0, -1); + + const { languageMap } = getConfig(); + if (languageMap && !getConfig().locales[prefix]) { + const valueInMap = languageMap[prefix]; + href = href.replace(`/${prefix}`, valueInMap ? `/${valueInMap}` : ''); + } link.href = `${href}${path}`; link.addEventListener('mouseover', () => { @@ -47,7 +62,7 @@ function decorateLink(link, path) { }); link.addEventListener('click', (e) => { - setInternational(prefix); + setInternational(prefix === '' ? 'us' : prefix); if (hrefAdapted) return; e.preventDefault(); handleEvent({ diff --git a/libs/blocks/rollout/rollout.css b/libs/blocks/rollout/rollout.css new file mode 100644 index 00000000000..03d2674eb0b --- /dev/null +++ b/libs/blocks/rollout/rollout.css @@ -0,0 +1,138 @@ +/* Rollout Modal styling */ +.modal { + padding: 20px; + max-width: 500px; + margin: 40px auto; + text-align: center; + font-family: Arial, sans-serif; +} + +.modal.warning { + display: flex; + align-items: center; + justify-content: center; + gap: 15px; + background-color: #fff3e0; + border: 1px solid #ffb74d; + border-radius: 8px; + padding: 15px 20px; + text-align: left; +} + +.warning-icon { + width: 24px; + height: 24px; + background-color: #f57c00; + border-radius: 50%; + position: relative; +} + +.warning-icon:before { + content: "!"; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: white; + font-weight: bold; + font-size: 16px; +} + +.warning-text { + color: #e65100; + font-size: 20px; + font-weight: 800; +} + +.warning-text-sub { + font-size: 14px; + font-weight: 500; +} + +.env-label { + font-weight: 600; + margin-bottom: 10px; + color: #333; + font-size: 16px; +} + +.radio-group { + display: flex; + flex-direction: column; + gap: 10px; + margin: 10px 0; +} + +.radio-group label { + display: flex; + align-items: center; + font-size: 14px; + font-weight: 500; + padding: 8px 10px; + border: 1px solid #ddd; + border-radius: 5px; + background-color: #fff; + cursor: pointer; + transition: all 0.2s ease; + box-shadow: 0 2px 4px rgb(0 0 0 / 5%); +} + +.radio-group label:hover { + border-color: #0078d4; + background-color: #f0f8ff; + box-shadow: 0 3px 6px rgb(0 0 0 / 10%); +} + +.radio-group input[type="radio"] { + margin-right: 8px; + accent-color: #0078d4; + width: 16px; + height: 16px; +} + +.button-group { + display: flex; + justify-content: center; + margin-top: 15px; +} + +.rollout-btn { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 8px 16px; + font-size: 14px; + font-weight: bold; + color: #fff; + background: linear-gradient(135deg, #0078d4, #005a9e); + border: none; + border-radius: 5px; + cursor: pointer; + transition: background 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease; + box-shadow: 0 3px 6px rgb(0 0 0 / 10%); +} + +.rollout-btn:hover { + background: linear-gradient(135deg, #005a9e, #003e6b); + transform: translateY(-2px); + box-shadow: 0 4px 8px rgb(0 0 0 / 15%); +} + +.rollout-btn:active { + background: linear-gradient(135deg, #004080, #002a57); + transform: translateY(1px); + box-shadow: 0 2px 4px rgb(0 0 0 / 10%); +} + +.rollout-btn:disabled { + background-color: #ccc; + color: #666; + cursor: not-allowed; + box-shadow: none; +} + +.rollout-btn-text { + font-size: 14px; + font-weight: normal; + color: inherit; +} diff --git a/libs/blocks/rollout/rollout.js b/libs/blocks/rollout/rollout.js new file mode 100644 index 00000000000..6a0a931a8a9 --- /dev/null +++ b/libs/blocks/rollout/rollout.js @@ -0,0 +1,206 @@ +import { createTag } from '../../utils/utils.js'; + +const urlData = { + urlBranch: '', + urlRepo: '', + urlOwner: '', + urlPathRemainder: '', + currentPageLang: '', + referrer: '', + host: '', + project: '', +}; + +/** + * Extracts language code from URL path + * @param {string} url - URL to parse + * @returns {string|null} Language code or null if invalid + */ +const getLanguageCode = (url) => { + if (!url) return null; + + try { + const pathSegments = new URL(url).pathname.split('/').filter(Boolean); + if (pathSegments[0] !== 'langstore') return null; + + const langPattern = /^[a-z]{2,3}(-[A-Za-z]{4})?(-[A-Za-z0-9]{2,3})?$/; + return langPattern.test(pathSegments[1]) ? pathSegments[1] : null; + } catch (err) { + return null; + } +}; + +/** + * Parses URL and sets URL data + * @param {string} url - URL to parse + * @param {boolean} allowEmptyPaths - Whether to allow empty paths + * @returns {Object|null} URL data object or null if invalid + */ +const setUrlData = (url, allowEmptyPaths = false) => { + if (!url) return null; + + try { + const urlParts = url.split('--'); + if (urlParts.length !== 3) { + return null; + } + + const hlxPageIndex = urlParts[2].indexOf('.hlx.page'); + const aemPageIndex = urlParts[2].indexOf('.aem.page'); + const pageIndex = hlxPageIndex >= 0 ? hlxPageIndex : aemPageIndex; + const sld = hlxPageIndex >= 0 ? '.hlx.page' : '.aem.page'; + + const pathLengthCheck = allowEmptyPaths ? sld.length - 1 : sld.length; + if (pageIndex < 0 || pageIndex + pathLengthCheck >= urlParts[2].length) { + return null; + } + + Object.assign(urlData, { + urlBranch: urlParts[0].slice(8), // remove "https://" + urlRepo: urlParts[1], + urlOwner: urlParts[2].slice(0, pageIndex), + urlPathRemainder: urlParts[2].slice(pageIndex + sld.length), + currentPageLang: getLanguageCode(url), + sld, + }); + + return urlData; + } catch (err) { + return null; + } +}; + +/** + * Creates and configures radio button element + * @param {string} value - Radio button value + * @param {boolean} checked - Whether radio is checked + * @returns {HTMLElement} Label containing radio button + */ +const createRadioButton = (value, checked = false) => { + const label = createTag('label'); + const radio = createTag('input', { + type: 'radio', + name: 'deployTarget', + value, + required: true, + checked, + }); + label.appendChild(radio); + label.appendChild(document.createTextNode(value.charAt(0).toUpperCase() + value.slice(1))); + return label; +}; + +/** + * Builds UI elements + * @param {HTMLElement} el - Container element + * @param {string} previewUrl - Preview URL + */ +const buildUi = async (el, previewUrl, overrideBranch) => { + try { + const modal = createTag('div', { class: 'modal' }); + const radioGroup = createTag('div', { class: 'radio-group' }); + const envLabel = createTag('div', { class: 'env-label' }, 'Environment'); + radioGroup.appendChild(envLabel); + + radioGroup.appendChild(createRadioButton('stage', true)); + radioGroup.appendChild(createRadioButton('prod')); + + const rolloutBtn = createTag('button', { class: 'rollout-btn' }); + rolloutBtn.append( + createTag('span', { class: 'rollout-btn-text' }, 'Rollout'), + ); + + rolloutBtn.addEventListener('click', () => { + const selectedEnv = document.querySelector('input[name="deployTarget"]:checked')?.value; + if (!selectedEnv) return; + + let branch = urlData.urlBranch; + if (overrideBranch) { + branch = selectedEnv === 'stage' ? `${overrideBranch}-stage` : overrideBranch; + } + + const locV3ConfigUrl = new URL( + 'tools/locui-create', + `https://${branch}--${urlData.urlRepo}--${urlData.urlOwner}${urlData.sld}`, + ); + + const params = { + milolibs: selectedEnv === 'stage' ? 'milostudio-stage' : 'milostudio', + ref: urlData.urlBranch, + repo: urlData.urlRepo, + owner: urlData.urlOwner, + host: urlData.host, + project: urlData.project, + env: selectedEnv, + type: 'rollout', + encodedUrls: previewUrl, + language: urlData.currentPageLang, + }; + + Object.entries(params).forEach(([key, value]) => { + if (value) locV3ConfigUrl.searchParams.append(key, value); + }); + + window.open(locV3ConfigUrl, '_blank'); + }); + + const buttonGroup = createTag('div', { class: 'button-group' }); + modal.appendChild(radioGroup); + buttonGroup.appendChild(rolloutBtn); + modal.appendChild(buttonGroup); + + el.appendChild(modal); + } catch (err) { + el.innerHTML = ''; + } +}; + +/** + * Sets up the rollout interface + * @param {HTMLElement} el - Container element + * @param {string} previewUrl - Preview URL + */ +const setup = async (el, previewUrl, overrideBranch) => { + if (!el || !previewUrl) return; + + const data = setUrlData(previewUrl, true); + if (!data) { + el.innerHTML = ''; + return; + } + el.innerHTML = ''; + await buildUi(el, previewUrl, overrideBranch); +}; + +/** + * Initializes the rollout tool + * @param {HTMLElement} el - Container element + * @param {string} search - Search params string + * @returns {Promise} Success status + */ +export default async function init(el, search = window.location.search) { + if (!el) return false; + try { + const params = new URLSearchParams(search); + const overrideBranch = params?.get('overrideBranch')?.trim(); + const referrer = params?.get('referrer')?.trim(); + const host = params?.get('host')?.trim(); + const project = params?.get('project')?.trim(); + if (!referrer || !project) { + el.innerHTML = ''; + return false; + } + + if (!referrer.includes('/langstore/')) { + el.innerHTML = ''; + return false; + } + + Object.assign(urlData, { referrer, host, project }); + await setup(el, referrer, overrideBranch); + return true; + } catch (err) { + el.innerHTML = ''; + return false; + } +} diff --git a/libs/blocks/section-metadata/section-metadata.css b/libs/blocks/section-metadata/section-metadata.css index 893b519c7e8..f1e84884c9f 100644 --- a/libs/blocks/section-metadata/section-metadata.css +++ b/libs/blocks/section-metadata/section-metadata.css @@ -208,7 +208,8 @@ z-index: 4; } -.section.sticky-bottom.popup { +.section.sticky-bottom.popup, +.section.sticky-bottom:has(.notification.pill) { bottom: var(--spacing-xs); } @@ -239,6 +240,13 @@ main > .section[class*='-up'] > .content { display: grid; } +.fill-sticky-section > div.notification.pill, +.fill-sticky-section > div.aside.promobar { + width: 100%; + border-radius: 0; + max-width: unset; +} + /* mobile only */ @media (max-width: 600px) { .section.two-up.reverse-mobile > div:nth-child(1) { @@ -249,6 +257,10 @@ main > .section[class*='-up'] > .content { order: 1; } + .section[class*='grid-width-'] { + display: block; + } + } @media screen and (min-width: 600px) and (max-width: 1200px) { @@ -264,7 +276,7 @@ main > .section[class*='-up'] > .content { grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); } - .section.masonry-layout .grid-full-width:first-child { + .section.masonry-layout .grid-full-width { grid-column: 1 / -1; } } diff --git a/libs/blocks/section-metadata/section-metadata.js b/libs/blocks/section-metadata/section-metadata.js index c8eff8be17a..720350d0be6 100644 --- a/libs/blocks/section-metadata/section-metadata.js +++ b/libs/blocks/section-metadata/section-metadata.js @@ -55,6 +55,12 @@ function handleDelay(time, section) { setTimeout(() => { section.classList.remove('hide-sticky-section'); }, getDelayTime(time)); } +function handleAnchor(anchor, section) { + if (!anchor || !section) return; + section.id = anchor.toLowerCase().trim().replaceAll(/\s+/g, '-'); + section.classList.add('section-anchor'); +} + export const getMetadata = (el) => [...el.childNodes].reduce((rdx, row) => { if (row.children) { const key = row.children[0].textContent.trim().toLowerCase(); @@ -73,4 +79,5 @@ export default async function init(el) { if (metadata.layout) handleLayout(metadata.layout.text, section); if (metadata.masonry) handleMasonry(metadata.masonry.text, section); if (metadata.delay) handleDelay(metadata.delay.text, section); + if (metadata.anchor) handleAnchor(metadata.anchor.text, section); } diff --git a/libs/blocks/section-metadata/sticky-section.js b/libs/blocks/section-metadata/sticky-section.js index 2db43622eaa..e9a691560b2 100644 --- a/libs/blocks/section-metadata/sticky-section.js +++ b/libs/blocks/section-metadata/sticky-section.js @@ -1,9 +1,10 @@ import { createTag } from '../../utils/utils.js'; import { getMetadata, getDelayTime } from './section-metadata.js'; +import { getGnavHeight } from '../global-navigation/utilities/utilities.js'; function handleTopHeight(section) { - const headerHeight = document.querySelector('header').offsetHeight; - section.style.top = `${headerHeight}px`; + const topHeight = getGnavHeight(); + section.style.top = `${topHeight}px`; } function promoIntersectObserve(el, stickySectionEl, options = {}) { @@ -14,11 +15,13 @@ function promoIntersectObserve(el, stickySectionEl, options = {}) { observer.unobserve(entry.target); return; } - const isPromoStart = entry.target === stickySectionEl; - const abovePromoStart = (isPromoStart && entry.isIntersecting) + + const abovePromoStart = (entry.target === stickySectionEl && entry.isIntersecting) || stickySectionEl?.getBoundingClientRect().y > 0; - if (entry.isIntersecting || abovePromoStart) el.classList.add('hide-sticky-section'); - else el.classList.remove('hide-sticky-section'); + + if (entry.target === document.querySelector('footer')) { + el.classList.toggle('fill-sticky-section', entry.isIntersecting); + } else el.classList.toggle('hide-sticky-section', abovePromoStart); }); }, options); return io; @@ -33,6 +36,7 @@ function handleStickyPromobar(section, delay) { if ((section.querySelector(':is(.promobar, .notification)').classList.contains('no-delay')) || (delay && section.classList.contains('popup'))) { hasScrollControl = true; + section.classList.remove('hide-sticky-section'); } if (!hasScrollControl && main.children[0] !== section) { stickySectionEl = createTag('div', { class: 'section show-sticky-section' }); @@ -40,7 +44,7 @@ function handleStickyPromobar(section, delay) { } const io = promoIntersectObserve(section, stickySectionEl); if (stickySectionEl) io.observe(stickySectionEl); - if (section.querySelector(':is(.promobar, .notification:not(.no-hide))')) { + if (section.querySelector(':is(.promobar, .notification)')) { io.observe(document.querySelector('footer')); } } @@ -51,6 +55,7 @@ export default async function handleStickySection(sticky, section) { case 'sticky-top': { const { debounce } = await import('../../utils/action.js'); window.addEventListener('resize', debounce(() => handleTopHeight(section))); + handleTopHeight(section); main.prepend(section); break; } diff --git a/libs/blocks/table/table.css b/libs/blocks/table/table.css index 19eb5beed91..cc1a4c81a6b 100644 --- a/libs/blocks/table/table.css +++ b/libs/blocks/table/table.css @@ -292,7 +292,7 @@ .table .section-head .section-head-title > :not(.icon) { font-size: var(--type-body-m-size); line-height: var(--type-heading-s-lh); - width: calc(100% - 20px); + width: calc(100% - 25px); } .table .section-head .section-head-title, @@ -323,25 +323,24 @@ /* icons */ .table:not(.merch) .row .col span.milo-tooltip { - margin-left: var(--spacing-xs); - margin-right: 0; + margin-right: -4px; } [dir='rtl'] .table:not(.merch) .row .col span.milo-tooltip { - margin-left: 0; - margin-right: var(--spacing-xs); + margin-right: 0; + margin-left: -4px; } -.table .icon-milo-info { +.table span[data-tooltip] .icon-milo { height: 16px; } -.table .icon-milo-info:hover { +.table span[data-tooltip] .icon-milo:hover { cursor: pointer; } -.table .icon-milo-info:hover path, -.table .active .icon-milo-info path { +.table span[data-tooltip] .icon-milo:hover path, +.table span[data-tooltip] .active .icon-milo path { color: var(--hover-border-color); } @@ -354,12 +353,18 @@ .table .icon.expand { background-color: transparent; border: 0; - background-image: url('../../ui/img/expand2.svg'); + background-image: url('../../ui/img/chevron-wide-black.svg'); background-repeat: no-repeat; - background-position: center right; - width: 15px; - height: 15px; + background-position: center; + width: 12px; + aspect-ratio: 1.7; cursor: pointer; + rotate: -90deg; + background-size: contain; +} + +[dir="rtl"] .table .icon.expand { + rotate: 90deg; } .table .section-head-title:hover .icon.expand { @@ -367,7 +372,7 @@ } .table .icon.expand[aria-expanded=true] { - background-image: url('../../ui/img/collapse2.svg'); + rotate: unset; } .table .row-highlight .col-highlight.transparent-border { @@ -397,23 +402,6 @@ margin-left: 16px; } -[dir="rtl"] .section-row-title .milo-tooltip:is(.top, .bottom, .left, .right)::before { - left: initial; - margin: 0 12px 0 0; - right: 100%; - top: 50%; - transform: translateY(-50%); -} - -[dir="rtl"] .section-row-title .milo-tooltip:is(.top, .bottom, .left, .right)::after { - left: -8px; - margin: 0 4px 0 -4px; - top: 50%; - transform: translateY(-50%); - border: 8px solid transparent; - border-left-color: #0469E3; -} - /* hover */ @media (min-width: 900px) { .table .col.hover { @@ -508,7 +496,7 @@ } .table.has-addon .addon-label .icon, -.table.has-addon .active .icon-milo-info path { +.table.has-addon span[data-tooltip] .active .icon-milo path { color: black; } @@ -687,36 +675,6 @@ background-color: var(--color-gray-100); } - .section-row-title .milo-tooltip:is(.top, .bottom, .left, .right)::before { - left: initial; - margin: 0 12px 0 0; - right: 100%; - top: 50%; - transform: translateY(-50%); - } - - .section-row-title .milo-tooltip:is(.top, .bottom, .left, .right)::after { - left: -8px; - margin: 0 4px 0 -4px; - top: 50%; - transform: translateY(-50%); - border: 8px solid #0469E3; - border-color: transparent transparent transparent #0469E3; - } - - [dir="rtl"] .section-row-title .milo-tooltip:is(.top, .bottom, .left, .right)::before { - left: 100%; - margin: 0 0 0 12px; - right: initial; - } - - [dir="rtl"] .section-row-title .milo-tooltip:is(.top, .bottom, .left, .right)::after { - border-color: transparent #0469E3 transparent transparent; - left: 100%; - margin: 0 0 0 -4px; - right: initial; - } - .table .row-heading .col-heading .pricing { overflow-wrap: anywhere; } diff --git a/libs/blocks/table/table.js b/libs/blocks/table/table.js index ab0d1ce3da0..b470565f854 100644 --- a/libs/blocks/table/table.js +++ b/libs/blocks/table/table.js @@ -1,7 +1,9 @@ /* eslint-disable no-plusplus */ -import { createTag, MILO_EVENTS } from '../../utils/utils.js'; +import { createTag, getConfig, MILO_EVENTS } from '../../utils/utils.js'; import { decorateButtons } from '../../utils/decorate.js'; import { debounce } from '../../utils/action.js'; +import { replaceKeyArray } from '../../features/placeholders.js'; +import { getGnavHeight } from '../global-navigation/utilities/utilities.js'; const DESKTOP_SIZE = 900; const MOBILE_SIZE = 768; @@ -19,7 +21,7 @@ function defineDeviceByScreenSize() { return 'TABLET'; } -function isStickyHeader(el) { +export function isStickyHeader(el) { return el.classList.contains('sticky') || (el.classList.contains('sticky-desktop-up') && defineDeviceByScreenSize() === 'DESKTOP') || (el.classList.contains('sticky-tablet-up') && defineDeviceByScreenSize() !== 'MOBILE' && !isMobileLandscape()); @@ -75,7 +77,6 @@ function handleHeading(table, headingCols) { } const trackingHeader = col.querySelector('.tracking-header'); - const nodeToApplyRoleScope = trackingHeader ?? col; if (trackingHeader) { const trackingHeaderID = `t${tableIndex + 1}-c${i + 1}-header`; @@ -90,11 +91,12 @@ function handleHeading(table, headingCols) { const describedBy = `${headerBody?.id ?? ''} ${headerPricing?.id ?? ''}`.trim(); trackingHeader.setAttribute('aria-describedby', describedBy); - col.removeAttribute('role'); + col.setAttribute('role', 'columnheader'); } - nodeToApplyRoleScope.setAttribute('role', 'columnheader'); - nodeToApplyRoleScope.setAttribute('scope', 'col'); + col.querySelectorAll('h1, h2, h3, h4, h5, h6').forEach((heading) => { + heading.setAttribute('role', 'paragraph'); + }); }); } @@ -150,6 +152,67 @@ function handleAddOnContent(table) { }); }); setTimeout(() => handleEqualHeight(table, '.row-heading'), 0); + table.addEventListener('mas:resolved', debounce(() => { handleEqualHeight(table, '.row-heading'); })); +} + +function setTooltipPosition(el) { + if (!['TABLET', 'MOBILE'].includes(defineDeviceByScreenSize())) return; + + const isRtl = document.documentElement.dir === 'rtl'; + const classesToCheck = isRtl ? ['top', 'bottom', 'left'] : ['top', 'bottom', 'right']; + const selector = classesToCheck.map((cls) => `.milo-tooltip.${cls}`).join(','); + const tooltips = el.querySelectorAll(selector); + + tooltips.forEach((tooltip) => { + tooltip.classList.remove(...classesToCheck); + tooltip.classList.add(isRtl ? 'right' : 'left'); + }); +} + +async function setAriaLabelForIcons(el) { + const config = getConfig(); + const expendableIcons = el.querySelectorAll('.icon.expand[role="button"]'); + const selectFilters = el.parentElement.querySelectorAll('.filters .filter'); + const ariaLabelElements = [...selectFilters, ...expendableIcons]; + + if (!ariaLabelElements.length) { + return; + } + + const ariaLabels = await replaceKeyArray(['toggle-row', 'choose-table-column'], config); + + ariaLabelElements.forEach((element) => { + const labelIndex = element.classList.contains('filter') ? 1 : 0; + element.setAttribute('aria-label', ariaLabels[labelIndex]); + }); +} + +function setTooltipListeners(el) { + document.addEventListener('keydown', (event) => { + if (event.key === 'Escape') { + el.querySelectorAll('.milo-tooltip').forEach((tooltip) => { + tooltip.classList.add('hide-tooltip'); + }); + } + }); + + el.querySelectorAll('.milo-tooltip').forEach((tooltip) => { + tooltip.addEventListener('mouseenter', () => { + tooltip.classList.remove('hide-tooltip'); + }); + + tooltip.addEventListener('mouseleave', () => { + tooltip.classList.add('hide-tooltip'); + }); + + tooltip.addEventListener('focus', () => { + tooltip.classList.remove('hide-tooltip'); + }); + + tooltip.addEventListener('blur', () => { + tooltip.classList.add('hide-tooltip'); + }); + }); } function handleHighlight(table) { @@ -254,8 +317,10 @@ function handleSection(sectionParams) { } if (isCollapseTable) { - const iconTag = createTag('span', { class: 'icon expand' }); - sectionHeadTitle.appendChild(iconTag); + const iconTag = createTag('span', { class: 'icon expand', role: 'button' }); + if (!sectionHeadTitle.querySelector('.icon.expand')) { + sectionHeadTitle.prepend(iconTag); + } if (expandSection) { iconTag.setAttribute('aria-expanded', 'true'); @@ -373,9 +438,8 @@ function handleHovering(table) { } } -function handleScrollEffect(table) { - const gnav = document.querySelector('header'); - const gnavHeight = gnav ? gnav.offsetHeight : 0; +async function handleScrollEffect(table) { + const gnavHeight = getGnavHeight(); const highlightRow = table.querySelector('.row-highlight'); const headingRow = table.querySelector('.row-heading'); @@ -426,7 +490,8 @@ function applyStylesBasedOnScreenSize(table, originTable) { icon.parentElement.addEventListener('click', () => handleExpand(icon)); icon.parentElement.setAttribute('tabindex', 0); icon.parentElement.addEventListener('keydown', (e) => { - e.preventDefault(); + if (e.key === ' ') e.preventDefault(); + if (e.key === 'Enter' || e.key === ' ') handleExpand(icon); }); }); @@ -585,6 +650,7 @@ export default function init(el) { const handleResize = () => { applyStylesBasedOnScreenSize(el, originTable); if (isStickyHeader(el)) handleScrollEffect(el); + setTooltipPosition(el); }; handleResize(); @@ -599,6 +665,8 @@ export default function init(el) { }); isDecorated = true; + setAriaLabelForIcons(el); + setTooltipListeners(el); }; window.addEventListener(MILO_EVENTS.DEFERRED, () => { diff --git a/libs/blocks/tabs/tabs.css b/libs/blocks/tabs/tabs.css index 0efb1d762fe..afb884256e1 100644 --- a/libs/blocks/tabs/tabs.css +++ b/libs/blocks/tabs/tabs.css @@ -1,35 +1,56 @@ :root { /* Tab Colors */ --tabs-active-color: #1473e6; - --tabs-border-color: #d8d8d8; + --tabs-border-color: #909090; --tabs-border-hover-color: #acacac; - --tabs-text-color: #7e7e7e; - --tabs-active-text-color: #2C2C2C; + --tabs-text-color: #686868; + --tabs-active-text-color: #2c2c2c; --tabs-bg-color: #f1f1f1; --tabs-active-bg-color: #fff; - --tabs-list-bg-gradient: linear-gradient(rgb(255 255 255 / 0%) 60%, rgb(245 245 245 / 80%)); - --tabs-pill-bg-color: #e1e1e1; - --tabs-pill-bg-color-hover: #dadada; - --tabs-pill-bg-color-active: #c6c6c6; - --tabs-pill-text-color: #131313; + --tabs-list-bg-gradient: linear-gradient( + to bottom, + rgba(136, 136, 136, 0) 0%, + rgba(136, 136, 136, 0) 60%, + rgba(136, 136, 136, 0.03) 80%, + rgba(136, 136, 136, 0.08) 100% + ); + --tabs-mobile-stacked-bg-color: #242424; + --tabs-mobile-stacked-text-color: #ffffff; + --tabs-pill-bg-color: #292929; + --tabs-pill-bg-color-hover: #e1e1e1; + --tabs-pill-bg-focus: #505050; + --tabs-pill-bg-color-active: #505050; + --tabs-pill-text-focus-color: #ffffff; + --tabs-pill-text-color: #505050; + --tabs-pill-text-selected-color: #ffffff; --tabs-paddle-bs-color: #0000001a; - --tabs-radio-gray: #6D6D6D; - --tabs-radio-blue: #0265DC; + --tabs-radio-gray: #6d6d6d; + --tabs-radio-blue: #0265dc; --tabs-radio-bg: #fff; --tabs-radio-button-bg: #fdfdfd; } :root .dark { - --tabs-border-color: rgb(56 56 56); - --tabs-text-color: #cdcdcd; + --tabs-border-color: #909090; + --tabs-text-color: #b6b6b6; --tabs-active-text-color: #fff; --tabs-bg-color: #1a1a1a; - --tabs-active-bg-color: #111; - --tabs-list-bg-gradient: linear-gradient(rgb(0 0 0 / 0%) 60%, rgb(0 0 0 / 80%)); - --tabs-pill-bg-color: #555; - --tabs-pill-bg-color-hover: #666; - --tabs-pill-bg-color-active: #444; + --tabs-active-bg-color: #1e1e1e; + --tabs-list-bg-gradient: linear-gradient( + rgba(0, 0, 0, 0%) 0%, + rgba(0, 0, 0, 0%) 60%, + rgba(0, 0, 0, 20%) 80%, + rgba(0, 0, 0, 40%) 100% + ); + --tabs-pill-bg-color: #ffffff; + --tabs-pill-bg-focus: #6d6d6d; + --tabs-pill-bg-color-hover: #6d6d6d; + --tabs-pill-bg-color-active: #393939; --tabs-pill-text-color: #fff; + --tabs-pill-text-selected-color: #000000; + --tabs-pill-text-focus-color: #ffffff; + --tabs-mobile-stacked-bg-color: #ffffff; + --tabs-mobile-stacked-text-color: #131313; --tabs-paddle-bs-color: #ffffff1a; --tabs-radio-gray: #d4d4d4; --tabs-radio-blue: #5eaaf7; @@ -49,29 +70,48 @@ padding: var(--spacing-xxl) 0; } +.tabs.xxl-spacing .paddle { + top: var(--spacing-xxl); +} + .tabs.xl-spacing { padding: var(--spacing-xl) 0; } +.tabs.xl-spacing .paddle { + top: var(--spacing-xl); +} + .tabs.l-spacing { padding: var(--spacing-l) 0; } +.tabs.l-spacing .paddle { + top: var(--spacing-l); +} + .tabs.s-spacing { padding: var(--spacing-s) 0; } +.tabs.s-spacing .paddle { + top: var(--spacing-s); +} + .tabs.xs-spacing { padding: var(--spacing-xs) 0; } +.tabs.xs-spacing .paddle { + top: var(--spacing-xs); +} + .tabs div[role="tablist"] { position: relative; box-shadow: 0 -1px 0 inset var(--tabs-border-color); display: flex; z-index: 2; margin: 0 var(--spacing-m); - /* ScrollProps - If content exceeds height of container, overflow! */ overflow: auto; overflow-y: hidden; @@ -81,6 +121,9 @@ /* default bg */ background: var(--tabs-list-bg-gradient); + background-size: 100% 16px; + background-position: bottom; + background-repeat: no-repeat; } .tabs div[role="tablist"]::-webkit-scrollbar { @@ -110,7 +153,7 @@ margin: auto; } -.tabs.center div[role="tablist"] .tab-list-container { +.tabs.center:not(.same-width) div[role="tablist"] .tab-list-container { width: auto; } @@ -161,12 +204,16 @@ z-index: 1; } -.tabs .tab-paddles .paddle { +.tabs.same-width div[role="tablist"] button { + flex: 1; +} + +.tabs .paddle { position: absolute; cursor: pointer; width: 32px; height: 48px; - bottom: 0; + top: 0; background: var(--tabs-active-bg-color); border: 0; border-bottom: 1px solid var(--tabs-border-color); @@ -175,9 +222,13 @@ align-items: center; } +.tabs.quiet .paddle { + margin-top: 1px; +} + .tabs.radio div[role="tablist"], .tabs.radio div[role="tablist"] button, -.tabs.radio .tab-paddles .paddle { +.tabs.radio .paddle { box-shadow: none; background: none; border: none; @@ -212,6 +263,10 @@ margin-inline-start: 24px; } +.tabs.quiet .tabList { + padding-bottom: 1px; +} + .tabs[class*='pill'] .tab-content { border-bottom: none; } @@ -233,6 +288,7 @@ border-radius: 75px; font-weight: 400; padding: 0.2em 1em; + border: none; } .tabs.radio div[role="tablist"] button { @@ -259,8 +315,17 @@ border-bottom-color: var(--tabs-active-color); } +.tabs[class*='pill'] div[role="tablist"] button:focus { + color: var(--tabs-pill-text-focus-color); + background: var(--tabs-pill-bg-focus); +} + +.tabs[class*='pill'] div[role="tablist"] button:focus-visible { + outline: 2px solid #4145ca; +} + .tabs[class*='pill'] div[role="tablist"] button[aria-selected="true"] { - color: var(--tabs-pill-text-color); + color: var(--tabs-pill-text-selected-color); background: var(--tabs-pill-bg-color); text-shadow: 0.4px 0 0 var(--tabs-pill-text-color); } @@ -270,18 +335,8 @@ background: var(--tabs-pill-bg-color-hover); } -.tabs[class*='pill'] div[role="tablist"] button:focus { - color: var(--tabs-pill-text-color); - background: var(--tabs-pill-bg-color-hover); -} - -.tabs[class*='pill'] div[role="tablist"] button:focus-visible { - outline: 2px solid #4145ca; - outline-offset: 2px; -} - .tabs[class*='pill'] div[role="tablist"] button:active { - color: var(--tabs-pill-text-color); + color: var(--tabs-pill-text-focus-color); background: var(--tabs-pill-bg-color-active); } @@ -303,28 +358,30 @@ height: 24px; } -.tabs .tab-paddles { - position: relative; +.tabs .paddle { z-index: 3; } -.tabs .tab-paddles .paddle:disabled { +.tabs .paddle:disabled { cursor: default; box-shadow: none; background: var(--tabs-list-bg-gradient); + background-size: 100% 16px; + background-position: bottom; + background-repeat: no-repeat; } -.tabs .tab-paddles .paddle-left { +.tabs .paddle-left { box-shadow: 4px 0 4px -2px var(--tabs-paddle-bs-color); left: 0; } -.tabs .tab-paddles .paddle-right { +.tabs .paddle-right { box-shadow: -4px 0 4px -2px var(--tabs-paddle-bs-color); right: 0; } -.tabs .tab-paddles .paddle svg { +.tabs .paddle svg { opacity: 1; width: 8px; height: 14px; @@ -333,19 +390,19 @@ color: var(--tabs-text-color); } -.tabs .tab-paddles .paddle-left svg { +.tabs .paddle-left svg { transform: rotate(180deg); } -.tabs .tab-paddles .paddle:hover svg { +.tabs .paddle:hover svg { color: var(--tabs-active-text-color); } -.tabs .tab-paddles .paddle:disabled svg { +.tabs .paddle:disabled svg { opacity: 0; } -.tabs[class*='pill'] .tab-paddles .paddle { +.tabs[class*='pill'] .paddle { background: unset; border: none; } @@ -358,7 +415,7 @@ border: none; } -.tabs.radio .tab-paddles { +.tabs.radio .paddle { display: none; } @@ -368,7 +425,7 @@ inline-size: var(--grid-container-width); } -.tabs.radio div[role="tablist"] .tab-list-container { +.tabs.radio div[role="tablist"].tabList .tab-list-container { background: var(--tabs-radio-bg); border: 1px solid var(--tabs-border-color); border-radius: 24px; @@ -413,11 +470,19 @@ margin-block-end: var(--spacing-xs); } +.tabs.radio div[role="tablist"] :is(button, button:hover, button:focus-visible, button[aria-selected="true"]) { + background: unset; + border-radius: unset; + outline: revert; + outline-offset: revert; + margin-inline-start: revert; +} + /* Section Metadata */ .tabs-background-transparent .tabs, .tabs-background-transparent .tabs div[role="tablist"], .tabs-background-transparent .tabs div[role="tablist"] button[aria-selected="true"], -.tabs-background-transparent .tabs .tab-paddles .paddle { +.tabs-background-transparent .tabs .tabList .paddle { background: transparent; } @@ -439,7 +504,7 @@ } @media screen and (min-width: 600px) { - .tabs.radio div[role="tablist"] .tab-list-container { + .tabs.radio div[role="tablist"].tabList .tab-list-container { flex-direction: row; align-items: center; border-radius: 40px; @@ -475,6 +540,10 @@ width: auto; } + .tabs .tabList { + min-height: 62px; + } + .tabs div[role="tablist"] button { padding: 24px 32px 18px; line-height: 18px; @@ -485,11 +554,60 @@ padding-bottom: 18px; } - .tabs .tab-paddles .paddle { + .tabs .paddle { height: 62px; } - .tabs .tab-paddles .paddle svg { + .tabs .paddle svg { top: 24px; } } + +@media screen and (max-width: 599px) { + .tabs.stacked-mobile div[role="tablist"] { + margin: 0; + } + + .tabs.stacked-mobile .paddle { + display: none; + } + + .tabs.stacked-mobile div[role="tablist"] .tab-list-container { + flex-direction: column; + margin: 30px auto; + } + + .tabs.stacked-mobile div[role="tablist"] button { + font-size: 20px; + white-space: unset; + word-wrap: break-word; + line-height: 25px; + padding: 8px; + border-radius: 0; + border: 0; + margin-bottom: 8px; + } + + .tabs.stacked-mobile div[role="tablist"] button:last-of-type { + margin-bottom: 0; + } + + .tabs.stacked-mobile div[role="tablist"] button[aria-selected="true"] { + background-color: var(--tabs-mobile-stacked-bg-color); + color: var(--tabs-mobile-stacked-text-color); + } + + .tabs.stacked-mobile.center div[role="tablist"] .tab-list-container { + width: 100%; + margin: 0 30px 30px; + } + + .tabs.stacked-mobile.quiet div[role="tablist"] button { + margin-inline-start: 0; + } + + .tabs[class*='stacked-mobile'] .paddle { + background: unset; + border: none; + } +} diff --git a/libs/blocks/tabs/tabs.js b/libs/blocks/tabs/tabs.js index 8d3a11d4572..f74505c6fc7 100644 --- a/libs/blocks/tabs/tabs.js +++ b/libs/blocks/tabs/tabs.js @@ -2,11 +2,12 @@ * tabs - consonant v6 * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/Tab_Role */ -import { debounce } from '../../utils/action.js'; import { createTag, MILO_EVENTS, getConfig } from '../../utils/utils.js'; import { processTrackingLabels } from '../../martech/attributes.js'; -const PADDLE = ''; +const PADDLE = ''; +const tabColor = {}; +const linkedTabs = {}; const isTabInTabListView = (tab) => { const tabList = tab.closest('[role="tablist"]'); @@ -34,22 +35,59 @@ const removeAttributes = (el, attrsKeys) => { attrsKeys.forEach((key) => el.removeAttribute(key)); }; +const scrollStackedMobile = (content) => { + if (!window.matchMedia('(max-width: 600px)').matches) return; + const rects = content.getBoundingClientRect(); + const stickyTop = document.querySelector('.feds-localnav') ?? document.querySelector('.global-navigation, .gnav'); + const navHeight = stickyTop?.scrollHeight || 0; + const topOffset = rects.top + window.scrollY - navHeight - 1; + window.scrollTo({ top: topOffset, behavior: 'smooth' }); +}; + +export function getRedirectionUrl(linkedTabsList, targetId) { + if (!targetId || !linkedTabsList[targetId] || window.location.pathname === linkedTabsList[targetId]) return ''; + const currentUrl = new URL(window.location.href); + /* c8 ignore next 4 */ + const tabParam = currentUrl.searchParams.get('tab'); + if (tabParam) { + currentUrl.searchParams.set('tab', `${tabParam.split('-')[0]}-${targetId.split('-')[2]}`); + } + currentUrl.pathname = linkedTabsList[targetId]; + return currentUrl; +} + function changeTabs(e) { const { target } = e; + const targetId = target.getAttribute('id'); + const redirectionUrl = getRedirectionUrl(linkedTabs, targetId); + /* c8 ignore next 4 */ + if (redirectionUrl) { + window.location.assign(redirectionUrl); + return; + } const parent = target.parentNode; const content = parent.parentNode.parentNode.lastElementChild; - const blockId = target.closest('.tabs').id; + const targetContent = content.querySelector(`#${target.getAttribute('aria-controls')}`); + const tabsBlock = target.closest('.tabs'); + const blockId = tabsBlock.id; parent .querySelectorAll(`[aria-selected="true"][data-block-id="${blockId}"]`) - .forEach((t) => t.setAttribute('aria-selected', false)); + .forEach((t) => { + t.setAttribute('aria-selected', false); + if (Object.keys(tabColor).length) { + t.removeAttribute('style', 'backgroundColor'); + } + }); target.setAttribute('aria-selected', true); + if (tabColor[targetId]) { + target.style.backgroundColor = tabColor[targetId]; + } scrollTabIntoView(target); content .querySelectorAll(`[role="tabpanel"][data-block-id="${blockId}"]`) .forEach((p) => p.setAttribute('hidden', true)); - content - .querySelector(`#${target.getAttribute('aria-controls')}`) - .removeAttribute('hidden'); + targetContent.removeAttribute('hidden'); + if (tabsBlock.classList.contains('stacked-mobile')) scrollStackedMobile(targetContent); } function getStringKeyName(str) { @@ -67,7 +105,10 @@ function configTabs(config, rootElem) { if (config['active-tab']) { const id = `#tab-${CSS.escape(config['tab-id'])}-${CSS.escape(getStringKeyName(config['active-tab']))}`; const sel = rootElem.querySelector(id); - if (sel) sel.click(); + if (sel) { + sel.addEventListener('click', (e) => e.stopPropagation(), { once: true }); + sel.click(); + } } const tabParam = new URLSearchParams(window.location.search).get('tab'); if (!tabParam) return; @@ -79,8 +120,9 @@ function configTabs(config, rootElem) { function initTabs(elm, config, rootElem) { const tabs = elm.querySelectorAll('[role="tab"]'); const tabLists = elm.querySelectorAll('[role="tablist"]'); + let tabFocus = 0; + tabLists.forEach((tabList) => { - let tabFocus = 0; tabList.addEventListener('keydown', (e) => { if (e.key === 'ArrowRight' || e.key === 'ArrowLeft') { if (e.key === 'ArrowRight') { @@ -115,9 +157,7 @@ function nextTab(current, i, arr) { return (previous && isTabInTabListView(previous) && !isTabInTabListView(current)); } -function initPaddles(tabList, tabPaddles) { - const left = tabPaddles.firstElementChild; - const right = tabPaddles.lastElementChild; +function initPaddles(tabList, left, right) { const tabListItems = tabList.querySelectorAll('[role="tab"]'); const tabListItemsArray = [...tabListItems]; const firstTab = tabListItemsArray[0]; @@ -144,13 +184,6 @@ function initPaddles(tabList, tabPaddles) { } }); - tabList.addEventListener('scroll', debounce(() => { - tabPaddles.setAttribute( - 'aria-valuenow', - ((tabList.scrollLeft / (tabList.scrollWidth - tabList.clientWidth)) * 100).toFixed(0), - ); - }, 500)); - const options = { root: tabList, rootMargin: '0px', @@ -199,6 +232,14 @@ const handlePillSize = (pill) => { return `${sizes[size]?.[0] ?? sizes[1]}-pill`; }; +export function assignLinkedTabs(linkedTabsList, metaSettings, id, val) { + if (!metaSettings.link || !id || !val || !linkedTabsList) return; + const relativeLinkRegex = /^\/(?:[a-zA-Z0-9-_]+(?:\/[a-zA-Z0-9-_]+)*)?$/; + if (relativeLinkRegex.test(metaSettings.link)) { + linkedTabsList[`tab-${id}-${val}`] = metaSettings.link; + } +} + const init = (block) => { const rootElem = block.closest('.fragment') || document; const rows = block.querySelectorAll(':scope > div'); @@ -268,42 +309,47 @@ const init = (block) => { } // Tab Paddles - const tabPaddles = createTag('div', { class: 'tab-paddles', role: 'scrollbar', 'aria-valuenow': 0 }); const paddleLeft = createTag('button', { class: 'paddle paddle-left', disabled: '', 'aria-hidden': true, 'aria-label': 'Scroll tabs to left' }, PADDLE); const paddleRight = createTag('button', { class: 'paddle paddle-right', disabled: '', 'aria-hidden': true, 'aria-label': 'Scroll tabs to right' }, PADDLE); - tabPaddles.append(paddleLeft, paddleRight); - tabList.after(tabPaddles); - initPaddles(tabList, tabPaddles); + tabList.insertAdjacentElement('afterend', paddleRight); + block.prepend(paddleLeft); + initPaddles(tabList, paddleLeft, paddleRight); // Tab Sections const allSections = Array.from(rootElem.querySelectorAll('div.section')); allSections.forEach((e) => { const sectionMetadata = e.querySelector(':scope > .section-metadata'); if (!sectionMetadata) return; - const smRows = sectionMetadata.querySelectorAll(':scope > div'); - smRows.forEach((row) => { + const metaSettings = {}; + sectionMetadata.querySelectorAll(':scope > div').forEach((row) => { const key = getStringKeyName(row.children[0].textContent); - if (key !== 'tab') return; - let val = getStringKeyName(row.children[1].textContent); - /* c8 ignore next */ + if (!['tab', 'tab-background', 'link'].includes(key)) return; + const val = row.children[1].textContent; if (!val) return; - let id = tabId; - let assocTabItem = rootElem.querySelector(`#tab-panel-${id}-${val}`); - if (config.id) { - const values = row.children[1].textContent.split(','); - [id] = values; - val = getStringKeyName(String(values[1])); - assocTabItem = rootElem.querySelector(`#tab-panel-${id}-${val}`); + metaSettings[key] = val; + }); + if (!metaSettings.tab) return; + let id = tabId; + let val = getStringKeyName(metaSettings.tab); + let assocTabItem = rootElem.querySelector(`#tab-panel-${id}-${val}`); + if (config.id) { + const values = metaSettings.tab.split(','); + [id] = values; + val = getStringKeyName(String(values[1])); + assocTabItem = rootElem.querySelector(`#tab-panel-${id}-${val}`); + } + if (assocTabItem) { + if (metaSettings['tab-background']) { + tabColor[`tab-${id}-${val}`] = metaSettings['tab-background']; } - if (assocTabItem) { - const tabLabel = tabListItems[val - 1]?.innerText; - if (tabLabel) { - assocTabItem.setAttribute('data-nested-lh', `t${val}${processTrackingLabels(tabLabel, getConfig(), 3)}`); - } - const section = sectionMetadata.closest('.section'); - assocTabItem.append(section); + assignLinkedTabs(linkedTabs, metaSettings, id, val); + const tabLabel = tabListItems[val - 1]?.innerText; + if (tabLabel) { + assocTabItem.setAttribute('data-nested-lh', `t${val}${processTrackingLabels(tabLabel, getConfig(), 3)}`); } - }); + const section = sectionMetadata.closest('.section'); + assocTabItem.append(section); + } }); handleDeferredImages(block); initTabs(block, config, rootElem); diff --git a/libs/blocks/text/text.css b/libs/blocks/text/text.css index 6242f50132f..685c9fbbd0e 100644 --- a/libs/blocks/text/text.css +++ b/libs/blocks/text/text.css @@ -120,7 +120,7 @@ align-items: center; } -.text-block .icon-area { +.text-block .icon-area:not(:has(span.icon)) { display: flex; column-gap: var(--spacing-xs); } @@ -201,7 +201,6 @@ .inset.text-block .foreground ul, .inset.text-block .foreground ol { - list-style: outside; padding-left: var(--spacing-xs); } diff --git a/libs/blocks/timeline/timeline.css b/libs/blocks/timeline/timeline.css index ebf0842787e..58635b9bc86 100644 --- a/libs/blocks/timeline/timeline.css +++ b/libs/blocks/timeline/timeline.css @@ -4,6 +4,7 @@ width: 100%; margin: 0 auto; } + .dialog-modal .timeline { padding: 0 var(--spacing-xl) var(--spacing-xl) var(--spacing-xl); } @@ -12,6 +13,22 @@ display: grid; } +.timeline.segment-timeline-3-9 .row, +.timeline.segment-timeline-4-8 .row, +.timeline.segment-timeline-5-7 .row { + grid-template-columns: 1fr 58.3%; +} + +.timeline.segment-timeline-6-6 .row { + grid-template-columns: 50% 50%; +} + +.timeline.segment-timeline-7-5 .row, +.timeline.segment-timeline-8-4 .row, +.timeline.segment-timeline-9-3 .row { + grid-template-columns: 1fr 41.7%; +} + .timeline h1, .timeline h2, .timeline h3, @@ -40,7 +57,6 @@ .timeline .row:nth-of-type(1)>.left>div>* { max-width: 100px; - padding-right: var(--spacing-m); } .dark .timeline .row:nth-child(3)>div *, @@ -59,7 +75,68 @@ } .timeline .row:nth-of-type(1)>.right { - grid-template-columns: minmax(110px, 1fr) 1fr; + grid-template-columns: 1.5fr 1fr; + grid-gap: 8px; +} + +[dir="rtl"] .timeline .row:nth-of-type(1)>.right { + grid-template-columns: 1fr 1fr; +} + +.timeline.segment-timeline-3-9 .left-center, +.timeline.segment-timeline-4-8 .left-center, +.timeline.segment-timeline-5-7 .left-center, +.timeline.segment-timeline-6-6 .left-center { + display: none; +} +@media screen and (max-width: 599.99px) { + .timeline.segment-timeline-7-5 .row:nth-of-type(1)>.right, + .timeline.segment-timeline-8-4 .row:nth-of-type(1)>.right, + .timeline.segment-timeline-9-3 .row:nth-of-type(1)>.right { + grid-template-columns: 1fr; + } + + .timeline.segment-timeline-7-5 .row:nth-of-type(1)>.left, + .timeline.segment-timeline-8-4 .row:nth-of-type(1)>.left, + .timeline.segment-timeline-9-3 .row:nth-of-type(1)>.left { + grid-template-columns: 1fr 1.5fr; + display: grid; + justify-content: space-between; + grid-gap: 8px; + } + + .timeline.segment-timeline-7-5 .right-center, + .timeline.segment-timeline-8-4 .right-center, + .timeline.segment-timeline-9-3 .right-center { + display: none; + } + + .timeline.segment-timeline-7-5 .left-center, + .timeline.segment-timeline-8-4 .left-center, + .timeline.segment-timeline-9-3 .left-center { + text-align: right; + display: flex; + flex-direction: column; + align-items: flex-end; + } + + [dir="rtl"] .timeline.segment-timeline-7-5 .left-center, + [dir="rtl"] .timeline.segment-timeline-8-4 .left-center, + [dir="rtl"] .timeline.segment-timeline-9-3 .left-center { + text-align: left; + } + + .timeline .row:nth-of-type(1)>.left .left-center>* { + padding-right: 0; + } +} + +@media screen and (min-width: 600px) { + .timeline.segment-timeline-7-5 .left-center, + .timeline.segment-timeline-8-4 .left-center, + .timeline.segment-timeline-9-3 .left-center { + display: none; + } } .timeline .row:nth-of-type(2)>.right { @@ -68,7 +145,7 @@ .timeline .row:nth-of-type(1)>.right>div:nth-of-type(1) { max-width: 135px; - padding-right: var(--spacing-xxs); + /* padding-right: var(--spacing-xxs); */ } .timeline .bar { @@ -103,10 +180,18 @@ } [dir="rtl"] .timeline .row:nth-of-type(1)>.left>div>* { - padding: 0 0 0 var(--spacing-m); + /* padding: 0 0 0 var(--spacing-m); */ + padding: 0; text-align: right; } +[dir="rtl"] .timeline.timeline.segment-timeline-7-5 .row:nth-of-type(1)>.left>.left-center>*, +[dir="rtl"] .timeline.timeline.segment-timeline-8-4 .row:nth-of-type(1)>.left>.left-center>*, +[dir="rtl"] .timeline.timeline.segment-timeline-9-3 .row:nth-of-type(1)>.left>.left-center>* { + padding: 0; + text-align: left; +} + [dir="rtl"] .timeline .row:nth-of-type(1)>.right>div+div { padding: 0 0 var(--spacing-xxs) 0; text-align: left; @@ -120,15 +205,40 @@ margin: 0 3px 0 0; } -[dir="rtl"] .timeline .row:nth-of-type(1)>.right>div:nth-of-type(1) { - padding: 0 0 0 var(--spacing-xxs); -} - @media screen and (min-width: 600px) { .dialog-modal .timeline { padding: 0 var(--spacing-xl) var(--spacing-xl) var(--spacing-xl); } } +@media screen and (min-width: 1200px) { + .timeline.segment-timeline-3-9 .row { + grid-template-columns: 1fr 75% + } + + .timeline.segment-timeline-4-8 .row { + grid-template-columns: 1fr 66.69%; + } + + .timeline.segment-timeline-5-7 .row { + grid-template-columns: 1fr 58.3%; + } + + .timeline.segment-timeline-6-6 .row { + grid-template-columns: 1fr 50%; + } + + .timeline.segment-timeline-7-5 .row { + grid-template-columns: 1fr 41.7%; + } + + .timeline.segment-timeline-8-4 .row { + grid-template-columns: 1fr 33.3%; + } + + .timeline.segment-timeline-9-3 .row { + grid-template-columns: 1fr 25%; + } +} @media screen and (min-width:1120px) { .timeline { @@ -140,4 +250,3 @@ padding: 0 var(--spacing-xl) var(--spacing-xl) var(--spacing-xl); } } - diff --git a/libs/blocks/timeline/timeline.js b/libs/blocks/timeline/timeline.js index ba2ea4aacfa..035ef739ac4 100644 --- a/libs/blocks/timeline/timeline.js +++ b/libs/blocks/timeline/timeline.js @@ -14,7 +14,20 @@ function isColorOrGradient(str) { return isColor(str) || isGradient(str); } -function getColWidth(text, colWidths) { +function hasSegmentClass(el) { + const segmentClassRegex = /^segment-timeline-(3-9|4-8|5-7|6-6|7-5|8-4|9-3)$/; + const startsWithSegmentTimelineRegex = /^segment-timeline-/; + let hasValidSegmentClass = Array.from(el.classList).some((cls) => segmentClassRegex.test(cls)); + if (!hasValidSegmentClass + && Array.from(el.classList).some((cls) => startsWithSegmentTimelineRegex.test(cls))) { + el.classList.add('segment-timeline-6-6'); + hasValidSegmentClass = true; + } + return hasValidSegmentClass; +} + +function getColWidth(text, colWidths, hasSegment) { + if (hasSegment || colWidths.length === 2) return; const numRegex = /\b\d{1,3}\b/; colWidths.push((text.match(numRegex) || [])[0]); } @@ -109,8 +122,8 @@ function setColors(colors, fragment, el) { function colWidthsNotValid(colWidths) { return (colWidths.length !== 2 || colWidths.some((value) => Number.isNaN(value))); } -function updateColWidths(colWidths, fragment) { - if (colWidthsNotValid(colWidths)) return; +function updateColWidths(colWidths, fragment, hasSegment) { + if (colWidthsNotValid(colWidths) || hasSegment) return; const total = Number(colWidths[0]) + Number(colWidths[1]); const right = Math.floor((Number(colWidths[1]) / total) * 10000) / 100; const colString = `1fr minmax(${String(right)}%, 150px)`; @@ -123,6 +136,7 @@ export default function init(el) { const [textRow, left, right] = createRow(); const rows = el.querySelectorAll(':scope > div > div'); const colors = []; const periodText = []; const colWidths = []; + const hasSegment = hasSegmentClass(el); rows.forEach((row, index) => { const side = index === 0 ? left : right; const color = row.firstElementChild?.textContent?.trim(); @@ -131,7 +145,7 @@ export default function init(el) { const [text, period] = p.textContent.trim().split('|'); if (period) { periodText.push(period.trim()); - getColWidth(period, colWidths); + getColWidth(period, colWidths, hasSegment); } if (text) { p.textContent = text.trim(); @@ -143,11 +157,17 @@ export default function init(el) { row.firstElementChild.remove(); } row.parentElement.remove(); + if (index === 1 && hasSegment) { + const mobileCenterLeft = row.cloneNode(true); + mobileCenterLeft.classList.add('left-center'); + left.append(mobileCenterLeft); + row.classList.add('right-center'); + } side.append(row); }); textRow.append(left, right); [textRow, addBarRow(), addBottomRow(periodText)].forEach((row) => fragment.append(row)); - updateColWidths(colWidths, fragment, el); + updateColWidths(colWidths, fragment, hasSegment); setColors(colors, fragment, el); el.append(fragment); } diff --git a/libs/blocks/video/video.css b/libs/blocks/video/video.css index 6538e0596ae..4530754f745 100644 --- a/libs/blocks/video/video.css +++ b/libs/blocks/video/video.css @@ -44,7 +44,7 @@ video { justify-content: center; align-items: center; border-radius: 50%; - z-index: 2; + z-index: 3; padding: 3px; cursor: pointer; } @@ -112,8 +112,11 @@ video { position: inherit; } -:is(.video-container .pause-play-wrapper, .aside.split.split-left .split-image) img.accessibility-control { - width: auto; +:is(.video-container .pause-play-wrapper, .aside.split.split-left .split-image) img.accessibility-control, +.brick.split.row.media-right .foreground .brick-media img.accessibility-control { + width: inherit; + height: inherit; + margin: 0; } .video-container .pause-play-wrapper img.hidden { @@ -128,6 +131,10 @@ video { height: fit-content; } +:is(.media .background, .hero-marquee .foreground-media) .video-container { + width: 100%; +} + @media (min-width: 600px) { .media:not(.media-reverse-mobile, .media-reversed) .video-container .pause-play-wrapper, :is(.marquee.row-reversed .asset, .marquee-anchors, .hero-marquee.asset-left) .video-container .pause-play-wrapper, @@ -150,7 +157,8 @@ video { } @media (min-width: 600px) and (max-width: 1199px) { - .hero-marquee.asset-left .video-container.video-holder .pause-play-wrapper { + .hero-marquee.asset-left .video-container.video-holder .pause-play-wrapper, + .aside:is(.media-top-tablet, .media-bottom-tablet) .video-container.video-holder .pause-play-wrapper { left: auto; right: 2%; } diff --git a/libs/deps/echarts.common.min.js b/libs/deps/echarts.common.min.js index a4665679d46..d74a9de58a7 100644 --- a/libs/deps/echarts.common.min.js +++ b/libs/deps/echarts.common.min.js @@ -32,7 +32,7 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])})(t,n)};function n(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}var i=function(){this.firefox=!1,this.ie=!1,this.edge=!1,this.newEdge=!1,this.weChat=!1},r=new function(){this.browser=new i,this.node=!1,this.wxa=!1,this.worker=!1,this.svgSupported=!1,this.touchEventsSupported=!1,this.pointerEventsSupported=!1,this.domSupported=!1,this.transformSupported=!1,this.transform3dSupported=!1,this.hasGlobalWindow="undefined"!=typeof window};"object"==typeof wx&&"function"==typeof wx.getSystemInfoSync?(r.wxa=!0,r.touchEventsSupported=!0):"undefined"==typeof document&&"undefined"!=typeof self?r.worker=!0:"undefined"==typeof navigator?(r.node=!0,r.svgSupported=!0):function(t,e){var n=e.browser,i=t.match(/Firefox\/([\d.]+)/),r=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),o=t.match(/Edge?\/([\d.]+)/),a=/micromessenger/i.test(t);i&&(n.firefox=!0,n.version=i[1]);r&&(n.ie=!0,n.version=r[1]);o&&(n.edge=!0,n.version=o[1],n.newEdge=+o[1].split(".")[0]>18);a&&(n.weChat=!0);e.svgSupported="undefined"!=typeof SVGRect,e.touchEventsSupported="ontouchstart"in window&&!n.ie&&!n.edge,e.pointerEventsSupported="onpointerdown"in window&&(n.edge||n.ie&&+n.version>=11),e.domSupported="undefined"!=typeof document;var s=document.documentElement.style;e.transform3dSupported=(n.ie&&"transition"in s||n.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),e.transformSupported=e.transform3dSupported||n.ie&&+n.version>=9}(navigator.userAgent,r);var o="sans-serif",a="12px sans-serif";var s,l,u=function(t){var e={};if("undefined"==typeof JSON)return e;for(var n=0;n=0)o=r*t.length;else for(var c=0;c>1)%2;a.style.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",i[s]+":0",r[l]+":0",i[1-s]+":auto",r[1-l]+":auto",""].join("!important;"),t.appendChild(a),n.push(a)}return n}(e,a),a,o);if(s)return s(t,n,i),!0}return!1}function jt(t){return"CANVAS"===t.nodeName.toUpperCase()}var qt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Kt=[],$t=r.browser.firefox&&+r.browser.version.split(".")[0]<39;function Qt(t,e,n,i){return n=n||{},i?Jt(t,e,n):$t&&null!=e.layerX&&e.layerX!==e.offsetX?(n.zrX=e.layerX,n.zrY=e.layerY):null!=e.offsetX?(n.zrX=e.offsetX,n.zrY=e.offsetY):Jt(t,e,n),n}function Jt(t,e,n){if(r.domSupported&&t.getBoundingClientRect){var i=e.clientX,o=e.clientY;if(jt(t)){var a=t.getBoundingClientRect();return n.zrX=i-a.left,void(n.zrY=o-a.top)}if(Xt(Kt,t,i,o))return n.zrX=Kt[0],void(n.zrY=Kt[1])}n.zrX=n.zrY=0}function te(t){return t||window.event}function ee(t,e,n){if(null!=(e=te(e)).zrX)return e;var i=e.type;if(i&&i.indexOf("touch")>=0){var r="touchend"!==i?e.targetTouches[0]:e.changedTouches[0];r&&Qt(t,r,e,n)}else{Qt(t,e,e,n);var o=function(t){var e=t.wheelDelta;if(e)return e;var n=t.deltaX,i=t.deltaY;if(null==n||null==i)return e;return 3*(0!==i?Math.abs(i):Math.abs(n))*(i>0?-1:i<0?1:n>0?-1:1)}(e);e.zrDelta=o?o/120:-(e.detail||0)/3}var a=e.button;return null==e.which&&void 0!==a&&qt.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function ne(t,e,n,i){t.addEventListener(e,n,i)}var ie=function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0};function re(t){return 2===t.which||3===t.which}var oe=function(){function t(){this._track=[]}return t.prototype.recognize=function(t,e,n){return this._doTrack(t,e,n),this._recognize(t)},t.prototype.clear=function(){return this._track.length=0,this},t.prototype._doTrack=function(t,e,n){var i=t.touches;if(i){for(var r={points:[],touches:[],target:e,event:t},o=0,a=i.length;o1&&r&&r.length>1){var a=ae(r)/ae(o);!isFinite(a)&&(a=1),e.pinchScale=a;var s=[((i=r)[0][0]+i[1][0])/2,(i[0][1]+i[1][1])/2];return e.pinchX=s[0],e.pinchY=s[1],{type:"pinch",target:t[0].target,event:e}}}}},le="silent";function ue(){ie(this.event)}var he=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.handler=null,e}return n(e,t),e.prototype.dispose=function(){},e.prototype.setCursor=function(){},e}(Wt),ce=function(t,e){this.x=t,this.y=e},pe=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],de=function(t){function e(e,n,i,r){var o=t.call(this)||this;return o._hovered=new ce(0,0),o.storage=e,o.painter=n,o.painterRoot=r,i=i||new he,o.proxy=null,o.setHandlerProxy(i),o._draggingMgr=new Ht(o),o}return n(e,t),e.prototype.setHandlerProxy=function(t){this.proxy&&this.proxy.dispose(),t&&(E(pe,(function(e){t.on&&t.on(e,this[e],this)}),this),t.handler=this),this.proxy=t},e.prototype.mousemove=function(t){var e=t.zrX,n=t.zrY,i=ge(this,e,n),r=this._hovered,o=r.target;o&&!o.__zr&&(o=(r=this.findHover(r.x,r.y)).target);var a=this._hovered=i?new ce(e,n):this.findHover(e,n),s=a.target,l=this.proxy;l.setCursor&&l.setCursor(s?s.cursor:"default"),o&&s!==o&&this.dispatchToElement(r,"mouseout",t),this.dispatchToElement(a,"mousemove",t),s&&s!==o&&this.dispatchToElement(a,"mouseover",t)},e.prototype.mouseout=function(t){var e=t.zrEventControl;"only_globalout"!==e&&this.dispatchToElement(this._hovered,"mouseout",t),"no_globalout"!==e&&this.trigger("globalout",{type:"globalout",event:t})},e.prototype.resize=function(){this._hovered=new ce(0,0)},e.prototype.dispatch=function(t,e){var n=this[t];n&&n.call(this,e)},e.prototype.dispose=function(){this.proxy.dispose(),this.storage=null,this.proxy=null,this.painter=null},e.prototype.setCursorStyle=function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},e.prototype.dispatchToElement=function(t,e,n){var i=(t=t||{}).target;if(!i||!i.silent){for(var r="on"+e,o=function(t,e,n){return{type:t,event:n,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:n.zrX,offsetY:n.zrY,gestureEvent:n.gestureEvent,pinchX:n.pinchX,pinchY:n.pinchY,pinchScale:n.pinchScale,wheelDelta:n.zrDelta,zrByTouch:n.zrByTouch,which:n.which,stop:ue}}(e,t,n);i&&(i[r]&&(o.cancelBubble=!!i[r].call(i,o)),i.trigger(e,o),i=i.__hostTarget?i.__hostTarget:i.parent,!o.cancelBubble););o.cancelBubble||(this.trigger(e,o),this.painter&&this.painter.eachOtherLayer&&this.painter.eachOtherLayer((function(t){"function"==typeof t[r]&&t[r].call(t,o),t.trigger&&t.trigger(e,o)})))}},e.prototype.findHover=function(t,e,n){for(var i=this.storage.getDisplayList(),r=new ce(t,e),o=i.length-1;o>=0;o--){var a=void 0;if(i[o]!==n&&!i[o].ignore&&(a=fe(i[o],t,e))&&(!r.topTarget&&(r.topTarget=i[o]),a!==le)){r.target=i[o];break}}return r},e.prototype.processGesture=function(t,e){this._gestureMgr||(this._gestureMgr=new oe);var n=this._gestureMgr;"start"===e&&n.clear();var i=n.recognize(t,this.findHover(t.zrX,t.zrY,null).target,this.proxy.dom);if("end"===e&&n.clear(),i){var r=i.type;t.gestureEvent=r;var o=new ce;o.target=i.target,this.dispatchToElement(o,r,i.event)}},e}(Wt);function fe(t,e,n){if(t[t.rectHover?"rectContain":"contain"](e,n)){for(var i=t,r=void 0,o=!1;i;){if(i.ignoreClip&&(o=!0),!o){var a=i.getClipPath();if(a&&!a.contain(e,n))return!1;i.silent&&(r=!0)}var s=i.__hostTarget;i=s||i.parent}return!r||le}return!1}function ge(t,e,n){var i=t.painter;return e<0||e>i.getWidth()||n<0||n>i.getHeight()}E(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],(function(t){de.prototype[t]=function(e){var n,i,r=e.zrX,o=e.zrY,a=ge(this,r,o);if("mouseup"===t&&a||(i=(n=this.findHover(r,o)).target),"mousedown"===t)this._downEl=i,this._downPoint=[e.zrX,e.zrY],this._upEl=i;else if("mouseup"===t)this._upEl=i;else if("click"===t){if(this._downEl!==this._upEl||!this._downPoint||Lt(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(n,t,e)}}));function ve(t,e,n,i){var r=e+1;if(r===n)return 1;if(i(t[r++],t[e])<0){for(;r=0;)r++;return r-e}function ye(t,e,n,i,r){for(i===e&&i++;i>>1])<0?l=o:s=o+1;var u=i-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;u>0;)t[s+u]=t[s+u-1],u--}t[s]=a}}function me(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])>0){for(s=i-r;l0;)a=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}else{for(s=r+1;ls&&(l=s);var u=a;a=r-l,l=r-u}for(a++;a>>1);o(t,e[n+h])>0?a=h+1:l=h}return l}function _e(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])<0){for(s=r+1;ls&&(l=s);var u=a;a=r-l,l=r-u}else{for(s=i-r;l=0;)a=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}for(a++;a>>1);o(t,e[n+h])<0?l=h:a=h+1}return l}function xe(t,e){var n,i,r=7,o=0;t.length;var a=[];function s(s){var l=n[s],u=i[s],h=n[s+1],c=i[s+1];i[s]=u+c,s===o-3&&(n[s+1]=n[s+2],i[s+1]=i[s+2]),o--;var p=_e(t[h],t,l,u,0,e);l+=p,0!==(u-=p)&&0!==(c=me(t[l+u-1],t,h,c,c-1,e))&&(u<=c?function(n,i,o,s){var l=0;for(l=0;l=7||d>=7);if(f)break;g<0&&(g=0),g+=2}if((r=g)<1&&(r=1),1===i){for(l=0;l=0;l--)t[d+l]=t[p+l];return void(t[c]=a[h])}var f=r;for(;;){var g=0,v=0,y=!1;do{if(e(a[h],t[u])<0){if(t[c--]=t[u--],g++,v=0,0==--i){y=!0;break}}else if(t[c--]=a[h--],v++,g=0,1==--s){y=!0;break}}while((g|v)=0;l--)t[d+l]=t[p+l];if(0===i){y=!0;break}}if(t[c--]=a[h--],1==--s){y=!0;break}if(0!==(v=s-me(t[u],a,0,s,s-1,e))){for(s-=v,d=(c-=v)+1,p=(h-=v)+1,l=0;l=7||v>=7);if(y)break;f<0&&(f=0),f+=2}(r=f)<1&&(r=1);if(1===s){for(d=(c-=i)+1,p=(u-=i)+1,l=i-1;l>=0;l--)t[d+l]=t[p+l];t[c]=a[h]}else{if(0===s)throw new Error;for(p=c-(s-1),l=0;l1;){var t=o-2;if(t>=1&&i[t-1]<=i[t]+i[t+1]||t>=2&&i[t-2]<=i[t]+i[t-1])i[t-1]i[t+1])break;s(t)}},forceMergeRuns:function(){for(;o>1;){var t=o-2;t>0&&i[t-1]=32;)e|=1&t,t>>=1;return t+e}(r);do{if((o=ve(t,n,i,e))s&&(l=s),ye(t,n,n+l,n+o,e),o=l}a.pushRun(n,o),a.mergeRuns(),r-=o,n+=o}while(0!==r);a.forceMergeRuns()}}}var be=!1;function Se(){be||(be=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function Me(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}var Ce=function(){function t(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=Me}return t.prototype.traverse=function(t,e){for(var n=0;n0&&(u.__clipPaths=[]),isNaN(u.z)&&(Se(),u.z=0),isNaN(u.z2)&&(Se(),u.z2=0),isNaN(u.zlevel)&&(Se(),u.zlevel=0),this._displayList[this._displayListLen++]=u}var h=t.getDecalElement&&t.getDecalElement();h&&this._updateAndAddDisplayable(h,e,n);var c=t.getTextGuideLine();c&&this._updateAndAddDisplayable(c,e,n);var p=t.getTextContent();p&&this._updateAndAddDisplayable(p,e,n)}},t.prototype.addRoot=function(t){t.__zr&&t.__zr.storage===this||this._roots.push(t)},t.prototype.delRoot=function(t){if(t instanceof Array)for(var e=0,n=t.length;e=0&&this._roots.splice(i,1)}},t.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},t.prototype.getRoots=function(){return this._roots},t.prototype.dispose=function(){this._displayList=null,this._roots=null},t}(),Ie=r.hasGlobalWindow&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(t){return setTimeout(t,16)},Te={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,n=.1;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=.4*Math.asin(1/n)/(2*Math.PI),-n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4))},elasticOut:function(t){var e,n=.1;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=.4*Math.asin(1/n)/(2*Math.PI),n*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/.4)+1)},elasticInOut:function(t){var e,n=.1,i=.4;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=i*Math.asin(1/n)/(2*Math.PI),(t*=2)<1?n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*-.5:n*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-Te.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?.5*Te.bounceIn(2*t):.5*Te.bounceOut(2*t-1)+.5}},De=Math.pow,ke=Math.sqrt,Ae=1e-8,Pe=1e-4,Le=ke(3),Oe=1/3,Re=wt(),Ne=wt(),Ee=wt();function ze(t){return t>-1e-8&&tAe||t<-1e-8}function Ve(t,e,n,i,r){var o=1-r;return o*o*(o*t+3*r*e)+r*r*(r*i+3*o*n)}function Fe(t,e,n,i,r){var o=1-r;return 3*(((e-t)*o+2*(n-e)*r)*o+(i-n)*r*r)}function He(t,e,n,i,r,o){var a=i+3*(e-n)-t,s=3*(n-2*e+t),l=3*(e-t),u=t-r,h=s*s-3*a*l,c=s*l-9*a*u,p=l*l-3*s*u,d=0;if(ze(h)&&ze(c)){if(ze(s))o[0]=0;else(M=-l/s)>=0&&M<=1&&(o[d++]=M)}else{var f=c*c-4*h*p;if(ze(f)){var g=c/h,v=-g/2;(M=-s/a+g)>=0&&M<=1&&(o[d++]=M),v>=0&&v<=1&&(o[d++]=v)}else if(f>0){var y=ke(f),m=h*s+1.5*a*(-c+y),_=h*s+1.5*a*(-c-y);(M=(-s-((m=m<0?-De(-m,Oe):De(m,Oe))+(_=_<0?-De(-_,Oe):De(_,Oe))))/(3*a))>=0&&M<=1&&(o[d++]=M)}else{var x=(2*h*s-3*a*c)/(2*ke(h*h*h)),w=Math.acos(x)/3,b=ke(h),S=Math.cos(w),M=(-s-2*b*S)/(3*a),C=(v=(-s+b*(S+Le*Math.sin(w)))/(3*a),(-s+b*(S-Le*Math.sin(w)))/(3*a));M>=0&&M<=1&&(o[d++]=M),v>=0&&v<=1&&(o[d++]=v),C>=0&&C<=1&&(o[d++]=C)}}return d}function We(t,e,n,i,r){var o=6*n-12*e+6*t,a=9*e+3*i-3*t-9*n,s=3*e-3*t,l=0;if(ze(a)){if(Be(o))(h=-s/o)>=0&&h<=1&&(r[l++]=h)}else{var u=o*o-4*a*s;if(ze(u))r[0]=-o/(2*a);else if(u>0){var h,c=ke(u),p=(-o-c)/(2*a);(h=(-o+c)/(2*a))>=0&&h<=1&&(r[l++]=h),p>=0&&p<=1&&(r[l++]=p)}}return l}function Ge(t,e,n,i,r,o){var a=(e-t)*r+t,s=(n-e)*r+e,l=(i-n)*r+n,u=(s-a)*r+a,h=(l-s)*r+s,c=(h-u)*r+u;o[0]=t,o[1]=a,o[2]=u,o[3]=c,o[4]=c,o[5]=h,o[6]=l,o[7]=i}function Ue(t,e,n,i,r,o,a,s,l){for(var u=t,h=e,c=0,p=1/l,d=1;d<=l;d++){var f=d*p,g=Ve(t,n,r,a,f),v=Ve(e,i,o,s,f),y=g-u,m=v-h;c+=Math.sqrt(y*y+m*m),u=g,h=v}return c}function Ze(t,e,n,i){var r=1-i;return r*(r*t+2*i*e)+i*i*n}function Ye(t,e,n,i){return 2*((1-i)*(e-t)+i*(n-e))}function Xe(t,e,n){var i=t+n-2*e;return 0===i?.5:(t-e)/i}function je(t,e,n,i,r){var o=(e-t)*i+t,a=(n-e)*i+e,s=(a-o)*i+o;r[0]=t,r[1]=o,r[2]=s,r[3]=s,r[4]=a,r[5]=n}function qe(t,e,n,i,r,o,a){for(var s=t,l=e,u=0,h=1/a,c=1;c<=a;c++){var p=c*h,d=Ze(t,n,r,p),f=Ze(e,i,o,p),g=d-s,v=f-l;u+=Math.sqrt(g*g+v*v),s=d,l=f}return u}var Ke=/cubic-bezier\(([0-9,\.e ]+)\)/;function $e(t){var e=t&&Ke.exec(t);if(e){var n=e[1].split(","),i=+lt(n[0]),r=+lt(n[1]),o=+lt(n[2]),a=+lt(n[3]);if(isNaN(i+r+o+a))return;var s=[];return function(t){return t<=0?0:t>=1?1:He(0,i,o,1,t,s)&&Ve(0,r,a,1,s[0])}}}var Qe=function(){function t(t){this._inited=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=t.life||1e3,this._delay=t.delay||0,this.loop=t.loop||!1,this.onframe=t.onframe||mt,this.ondestroy=t.ondestroy||mt,this.onrestart=t.onrestart||mt,t.easing&&this.setEasing(t.easing)}return t.prototype.step=function(t,e){if(this._inited||(this._startTime=t+this._delay,this._inited=!0),!this._paused){var n=this._life,i=t-this._startTime-this._pausedTime,r=i/n;r<0&&(r=0),r=Math.min(r,1);var o=this.easingFunc,a=o?o(r):r;if(this.onframe(a),1===r){if(!this.loop)return!0;var s=i%n;this._startTime=t-s,this._pausedTime=0,this.onrestart()}return!1}this._pausedTime+=e},t.prototype.pause=function(){this._paused=!0},t.prototype.resume=function(){this._paused=!1},t.prototype.setEasing=function(t){this.easing=t,this.easingFunc=U(t)?t:Te[t]||$e(t)},t}(),Je=function(t){this.value=t},tn=function(){function t(){this._len=0}return t.prototype.insert=function(t){var e=new Je(t);return this.insertEntry(e),e},t.prototype.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},t.prototype.remove=function(t){var e=t.prev,n=t.next;e?e.next=n:this.head=n,n?n.prev=e:this.tail=e,t.next=t.prev=null,this._len--},t.prototype.len=function(){return this._len},t.prototype.clear=function(){this.head=this.tail=null,this._len=0},t}(),en=function(){function t(t){this._list=new tn,this._maxSize=10,this._map={},this._maxSize=t}return t.prototype.put=function(t,e){var n=this._list,i=this._map,r=null;if(null==i[t]){var o=n.len(),a=this._lastRemovedEntry;if(o>=this._maxSize&&o>0){var s=n.head;n.remove(s),delete i[s.key],r=s.value,this._lastRemovedEntry=s}a?a.value=e:a=new Je(e),a.key=t,n.insertEntry(a),i[t]=a}return r},t.prototype.get=function(t){var e=this._map[t],n=this._list;if(null!=e)return e!==n.tail&&(n.remove(e),n.insertEntry(e)),e.value},t.prototype.clear=function(){this._list.clear(),this._map={}},t.prototype.len=function(){return this._list.len()},t}(),nn={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function rn(t){return(t=Math.round(t))<0?0:t>255?255:t}function on(t){return t<0?0:t>1?1:t}function an(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?rn(parseFloat(e)/100*255):rn(parseInt(e,10))}function sn(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?on(parseFloat(e)/100):on(parseFloat(e))}function ln(t,e,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?t+(e-t)*n*6:2*n<1?e:3*n<2?t+(e-t)*(2/3-n)*6:t}function un(t,e,n){return t+(e-t)*n}function hn(t,e,n,i,r){return t[0]=e,t[1]=n,t[2]=i,t[3]=r,t}function cn(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}var pn=new en(20),dn=null;function fn(t,e){dn&&cn(dn,e),dn=pn.put(t,dn||e.slice())}function gn(t,e){if(t){e=e||[];var n=pn.get(t);if(n)return cn(e,n);var i=(t+="").replace(/ /g,"").toLowerCase();if(i in nn)return cn(e,nn[i]),fn(t,e),e;var r,o=i.length;if("#"===i.charAt(0))return 4===o||5===o?(r=parseInt(i.slice(1,4),16))>=0&&r<=4095?(hn(e,(3840&r)>>4|(3840&r)>>8,240&r|(240&r)>>4,15&r|(15&r)<<4,5===o?parseInt(i.slice(4),16)/15:1),fn(t,e),e):void hn(e,0,0,0,1):7===o||9===o?(r=parseInt(i.slice(1,7),16))>=0&&r<=16777215?(hn(e,(16711680&r)>>16,(65280&r)>>8,255&r,9===o?parseInt(i.slice(7),16)/255:1),fn(t,e),e):void hn(e,0,0,0,1):void 0;var a=i.indexOf("("),s=i.indexOf(")");if(-1!==a&&s+1===o){var l=i.substr(0,a),u=i.substr(a+1,s-(a+1)).split(","),h=1;switch(l){case"rgba":if(4!==u.length)return 3===u.length?hn(e,+u[0],+u[1],+u[2],1):hn(e,0,0,0,1);h=sn(u.pop());case"rgb":return 3!==u.length?void hn(e,0,0,0,1):(hn(e,an(u[0]),an(u[1]),an(u[2]),h),fn(t,e),e);case"hsla":return 4!==u.length?void hn(e,0,0,0,1):(u[3]=sn(u[3]),vn(u,e),fn(t,e),e);case"hsl":return 3!==u.length?void hn(e,0,0,0,1):(vn(u,e),fn(t,e),e);default:return}}hn(e,0,0,0,1)}}function vn(t,e){var n=(parseFloat(t[0])%360+360)%360/360,i=sn(t[1]),r=sn(t[2]),o=r<=.5?r*(i+1):r+i-r*i,a=2*r-o;return hn(e=e||[],rn(255*ln(a,o,n+1/3)),rn(255*ln(a,o,n)),rn(255*ln(a,o,n-1/3)),1),4===t.length&&(e[3]=t[3]),e}function yn(t,e){var n=gn(t);if(n){for(var i=0;i<3;i++)n[i]=e<0?n[i]*(1-e)|0:(255-n[i])*e+n[i]|0,n[i]>255?n[i]=255:n[i]<0&&(n[i]=0);return Sn(n,4===n.length?"rgba":"rgb")}}function mn(t,e,n){if(e&&e.length&&t>=0&&t<=1){n=n||[];var i=t*(e.length-1),r=Math.floor(i),o=Math.ceil(i),a=e[r],s=e[o],l=i-r;return n[0]=rn(un(a[0],s[0],l)),n[1]=rn(un(a[1],s[1],l)),n[2]=rn(un(a[2],s[2],l)),n[3]=on(un(a[3],s[3],l)),n}}var _n=mn;function xn(t,e,n){if(e&&e.length&&t>=0&&t<=1){var i=t*(e.length-1),r=Math.floor(i),o=Math.ceil(i),a=gn(e[r]),s=gn(e[o]),l=i-r,u=Sn([rn(un(a[0],s[0],l)),rn(un(a[1],s[1],l)),rn(un(a[2],s[2],l)),on(un(a[3],s[3],l))],"rgba");return n?{color:u,leftIndex:r,rightIndex:o,value:i}:u}}var wn=xn;function bn(t,e){var n=gn(t);if(n&&null!=e)return n[3]=on(e),Sn(n,"rgba")}function Sn(t,e){if(t&&t.length){var n=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(n+=","+t[3]),e+"("+n+")"}}function Mn(t,e){var n=gn(t);return n?(.299*n[0]+.587*n[1]+.114*n[2])*n[3]/255+(1-n[3])*e:0}var Cn=Object.freeze({__proto__:null,parse:gn,lift:yn,toHex:function(t){var e=gn(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)},fastLerp:mn,fastMapToColor:_n,lerp:xn,mapToColor:wn,modifyHSL:function(t,e,n,i){var r,o=gn(t);if(t)return o=function(t){if(t){var e,n,i=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(i,r,o),s=Math.max(i,r,o),l=s-a,u=(s+a)/2;if(0===l)e=0,n=0;else{n=u<.5?l/(s+a):l/(2-s-a);var h=((s-i)/6+l/2)/l,c=((s-r)/6+l/2)/l,p=((s-o)/6+l/2)/l;i===s?e=p-c:r===s?e=1/3+h-p:o===s&&(e=2/3+c-h),e<0&&(e+=1),e>1&&(e-=1)}var d=[360*e,n,u];return null!=t[3]&&d.push(t[3]),d}}(o),null!=e&&(o[0]=(r=e,(r=Math.round(r))<0?0:r>360?360:r)),null!=n&&(o[1]=sn(n)),null!=i&&(o[2]=sn(i)),Sn(vn(o),"rgba")},modifyAlpha:bn,stringify:Sn,lum:Mn,random:function(){return Sn([Math.round(255*Math.random()),Math.round(255*Math.random()),Math.round(255*Math.random())],"rgb")}}),In=Math.round;function Tn(t){var e;if(t&&"transparent"!==t){if("string"==typeof t&&t.indexOf("rgba")>-1){var n=gn(t);n&&(t="rgb("+n[0]+","+n[1]+","+n[2]+")",e=n[3])}}else t="none";return{color:t,opacity:null==e?1:e}}var Dn=1e-4;function kn(t){return t-1e-4}function An(t){return In(1e3*t)/1e3}function Pn(t){return In(1e4*t)/1e4}var Ln={left:"start",right:"end",center:"middle",middle:"middle"};function On(t){return t&&!!t.image}function Rn(t){return"linear"===t.type}function Nn(t){return"radial"===t.type}function En(t){return"url(#"+t+")"}function zn(t){var e=t.getGlobalScale(),n=Math.max(e[0],e[1]);return Math.max(Math.ceil(Math.log(n)/Math.log(10)),1)}function Bn(t){var e=t.x||0,n=t.y||0,i=(t.rotation||0)*_t,r=it(t.scaleX,1),o=it(t.scaleY,1),a=t.skewX||0,s=t.skewY||0,l=[];return(e||n)&&l.push("translate("+e+"px,"+n+"px)"),i&&l.push("rotate("+i+")"),1===r&&1===o||l.push("scale("+r+","+o+")"),(a||s)&&l.push("skew("+In(a*_t)+"deg, "+In(s*_t)+"deg)"),l.join(" ")}var Vn=r.hasGlobalWindow&&U(window.btoa)?function(t){return window.btoa(unescape(t))}:"undefined"!=typeof Buffer?function(t){return Buffer.from(t).toString("base64")}:function(t){return null},Fn=Array.prototype.slice;function Hn(t,e,n){return(e-t)*n+t}function Wn(t,e,n,i){for(var r=e.length,o=0;oi?e:t,o=Math.min(n,i),a=r[o-1]||{color:[0,0,0,0],offset:0},s=o;sa)i.length=a;else for(var s=o;s=1},t.prototype.getAdditiveTrack=function(){return this._additiveTrack},t.prototype.addKeyframe=function(t,e,n){this._needsSort=!0;var i=this.keyframes,r=i.length,o=!1,a=6,s=e;if(N(e)){var l=function(t){return N(t&&t[0])?2:1}(e);a=l,(1===l&&!X(e[0])||2===l&&!X(e[0][0]))&&(o=!0)}else if(X(e)&&!et(e))a=0;else if(Z(e))if(isNaN(+e)){var u=gn(e);u&&(s=u,a=3)}else a=0;else if(Q(e)){var h=k({},s);h.colorStops=z(e.colorStops,(function(t){return{offset:t.offset,color:gn(t.color)}})),Rn(e)?a=4:Nn(e)&&(a=5),s=h}0===r?this.valType=a:a===this.valType&&6!==a||(o=!0),this.discrete=this.discrete||o;var c={time:t,value:s,rawValue:e,percent:0};return n&&(c.easing=n,c.easingFunc=U(n)?n:Te[n]||$e(n)),i.push(c),c},t.prototype.prepare=function(t,e){var n=this.keyframes;this._needsSort&&n.sort((function(t,e){return t.time-e.time}));for(var i=this.valType,r=n.length,o=n[r-1],a=this.discrete,s=Kn(i),l=qn(i),u=0;u=0&&!(l[n].percent<=e);n--);n=d(n,u-2)}else{for(n=p;ne);n++);n=d(n-1,u-2)}r=l[n+1],i=l[n]}if(i&&r){this._lastFr=n,this._lastFrP=e;var f=r.percent-i.percent,g=0===f?1:d((e-i.percent)/f,1);r.easingFunc&&(g=r.easingFunc(g));var v=o?this._additiveValue:c?$n:t[h];if(!Kn(s)&&!c||v||(v=this._additiveValue=[]),this.discrete)t[h]=g<1?i.rawValue:r.rawValue;else if(Kn(s))1===s?Wn(v,i[a],r[a],g):function(t,e,n,i){for(var r=e.length,o=r&&e[0].length,a=0;a0&&s.addKeyframe(0,Xn(l),i),this._trackKeys.push(a)}s.addKeyframe(t,Xn(e[a]),i)}return this._maxTime=Math.max(this._maxTime,t),this},t.prototype.pause=function(){this._clip.pause(),this._paused=!0},t.prototype.resume=function(){this._clip.resume(),this._paused=!1},t.prototype.isPaused=function(){return!!this._paused},t.prototype.duration=function(t){return this._maxTime=t,this._force=!0,this},t.prototype._doneCallback=function(){this._setTracksFinished(),this._clip=null;var t=this._doneCbs;if(t)for(var e=t.length,n=0;n0)){this._started=1;for(var e=this,n=[],i=this._maxTime||0,r=0;r1){var a=o.pop();r.addKeyframe(a.time,t[i]),r.prepare(this._maxTime,r.getAdditiveTrack())}}}},t}();function ti(){return(new Date).getTime()}var ei,ni,ii=function(t){function e(e){var n=t.call(this)||this;return n._running=!1,n._time=0,n._pausedTime=0,n._pauseStart=0,n._paused=!1,e=e||{},n.stage=e.stage||{},n}return n(e,t),e.prototype.addClip=function(t){t.animation&&this.removeClip(t),this._head?(this._tail.next=t,t.prev=this._tail,t.next=null,this._tail=t):this._head=this._tail=t,t.animation=this},e.prototype.addAnimator=function(t){t.animation=this;var e=t.getClip();e&&this.addClip(e)},e.prototype.removeClip=function(t){if(t.animation){var e=t.prev,n=t.next;e?e.next=n:this._head=n,n?n.prev=e:this._tail=e,t.next=t.prev=t.animation=null}},e.prototype.removeAnimator=function(t){var e=t.getClip();e&&this.removeClip(e),t.animation=null},e.prototype.update=function(t){for(var e=ti()-this._pausedTime,n=e-this._time,i=this._head;i;){var r=i.next;i.step(e,n)?(i.ondestroy(),this.removeClip(i),i=r):i=r}this._time=e,t||(this.trigger("frame",n),this.stage.update&&this.stage.update())},e.prototype._startLoop=function(){var t=this;this._running=!0,Ie((function e(){t._running&&(Ie(e),!t._paused&&t.update())}))},e.prototype.start=function(){this._running||(this._time=ti(),this._pausedTime=0,this._startLoop())},e.prototype.stop=function(){this._running=!1},e.prototype.pause=function(){this._paused||(this._pauseStart=ti(),this._paused=!0)},e.prototype.resume=function(){this._paused&&(this._pausedTime+=ti()-this._pauseStart,this._paused=!1)},e.prototype.clear=function(){for(var t=this._head;t;){var e=t.next;t.prev=t.next=t.animation=null,t=e}this._head=this._tail=null},e.prototype.isFinished=function(){return null==this._head},e.prototype.animate=function(t,e){e=e||{},this.start();var n=new Jn(t,e.loop);return this.addAnimator(n),n},e}(Wt),ri=r.domSupported,oi=(ni={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},{mouse:ei=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],touch:["touchstart","touchend","touchmove"],pointer:z(ei,(function(t){var e=t.replace("mouse","pointer");return ni.hasOwnProperty(e)?e:t}))}),ai=["mousemove","mouseup"],si=["pointermove","pointerup"],li=!1;function ui(t){var e=t.pointerType;return"pen"===e||"touch"===e}function hi(t){t&&(t.zrByTouch=!0)}function ci(t,e){for(var n=e,i=!1;n&&9!==n.nodeType&&!(i=n.domBelongToZr||n!==e&&n===t.painterRoot);)n=n.parentNode;return i}var pi=function(t,e){this.stopPropagation=mt,this.stopImmediatePropagation=mt,this.preventDefault=mt,this.type=e.type,this.target=this.currentTarget=t.dom,this.pointerType=e.pointerType,this.clientX=e.clientX,this.clientY=e.clientY},di={mousedown:function(t){t=ee(this.dom,t),this.__mayPointerCapture=[t.zrX,t.zrY],this.trigger("mousedown",t)},mousemove:function(t){t=ee(this.dom,t);var e=this.__mayPointerCapture;!e||t.zrX===e[0]&&t.zrY===e[1]||this.__togglePointerCapture(!0),this.trigger("mousemove",t)},mouseup:function(t){t=ee(this.dom,t),this.__togglePointerCapture(!1),this.trigger("mouseup",t)},mouseout:function(t){ci(this,(t=ee(this.dom,t)).toElement||t.relatedTarget)||(this.__pointerCapturing&&(t.zrEventControl="no_globalout"),this.trigger("mouseout",t))},wheel:function(t){li=!0,t=ee(this.dom,t),this.trigger("mousewheel",t)},mousewheel:function(t){li||(t=ee(this.dom,t),this.trigger("mousewheel",t))},touchstart:function(t){hi(t=ee(this.dom,t)),this.__lastTouchMoment=new Date,this.handler.processGesture(t,"start"),di.mousemove.call(this,t),di.mousedown.call(this,t)},touchmove:function(t){hi(t=ee(this.dom,t)),this.handler.processGesture(t,"change"),di.mousemove.call(this,t)},touchend:function(t){hi(t=ee(this.dom,t)),this.handler.processGesture(t,"end"),di.mouseup.call(this,t),+new Date-+this.__lastTouchMoment<300&&di.click.call(this,t)},pointerdown:function(t){di.mousedown.call(this,t)},pointermove:function(t){ui(t)||di.mousemove.call(this,t)},pointerup:function(t){di.mouseup.call(this,t)},pointerout:function(t){ui(t)||di.mouseout.call(this,t)}};E(["click","dblclick","contextmenu"],(function(t){di[t]=function(e){e=ee(this.dom,e),this.trigger(t,e)}}));var fi={pointermove:function(t){ui(t)||fi.mousemove.call(this,t)},pointerup:function(t){fi.mouseup.call(this,t)},mousemove:function(t){this.trigger("mousemove",t)},mouseup:function(t){var e=this.__pointerCapturing;this.__togglePointerCapture(!1),this.trigger("mouseup",t),e&&(t.zrEventControl="only_globalout",this.trigger("mouseout",t))}};function gi(t,e){var n=e.domHandlers;r.pointerEventsSupported?E(oi.pointer,(function(i){yi(e,i,(function(e){n[i].call(t,e)}))})):(r.touchEventsSupported&&E(oi.touch,(function(i){yi(e,i,(function(r){n[i].call(t,r),function(t){t.touching=!0,null!=t.touchTimer&&(clearTimeout(t.touchTimer),t.touchTimer=null),t.touchTimer=setTimeout((function(){t.touching=!1,t.touchTimer=null}),700)}(e)}))})),E(oi.mouse,(function(i){yi(e,i,(function(r){r=te(r),e.touching||n[i].call(t,r)}))})))}function vi(t,e){function n(n){yi(e,n,(function(i){i=te(i),ci(t,i.target)||(i=function(t,e){return ee(t.dom,new pi(t,e),!0)}(t,i),e.domHandlers[n].call(t,i))}),{capture:!0})}r.pointerEventsSupported?E(si,n):r.touchEventsSupported||E(ai,n)}function yi(t,e,n,i){t.mounted[e]=n,t.listenerOpts[e]=i,ne(t.domTarget,e,n,i)}function mi(t){var e,n,i,r,o=t.mounted;for(var a in o)o.hasOwnProperty(a)&&(e=t.domTarget,n=a,i=o[a],r=t.listenerOpts[a],e.removeEventListener(n,i,r));t.mounted={}}var _i=function(t,e){this.mounted={},this.listenerOpts={},this.touching=!1,this.domTarget=t,this.domHandlers=e},xi=function(t){function e(e,n){var i=t.call(this)||this;return i.__pointerCapturing=!1,i.dom=e,i.painterRoot=n,i._localHandlerScope=new _i(e,di),ri&&(i._globalHandlerScope=new _i(document,fi)),gi(i,i._localHandlerScope),i}return n(e,t),e.prototype.dispose=function(){mi(this._localHandlerScope),ri&&mi(this._globalHandlerScope)},e.prototype.setCursor=function(t){this.dom.style&&(this.dom.style.cursor=t||"default")},e.prototype.__togglePointerCapture=function(t){if(this.__mayPointerCapture=null,ri&&+this.__pointerCapturing^+t){this.__pointerCapturing=t;var e=this._globalHandlerScope;t?vi(this,e):mi(e)}},e}(Wt),wi=1;r.hasGlobalWindow&&(wi=Math.max(window.devicePixelRatio||window.screen&&window.screen.deviceXDPI/window.screen.logicalXDPI||1,1));var bi=wi,Si="#333",Mi="#ccc";function Ci(){return[1,0,0,1,0,0]}function Ii(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function Ti(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function Di(t,e,n){var i=e[0]*n[0]+e[2]*n[1],r=e[1]*n[0]+e[3]*n[1],o=e[0]*n[2]+e[2]*n[3],a=e[1]*n[2]+e[3]*n[3],s=e[0]*n[4]+e[2]*n[5]+e[4],l=e[1]*n[4]+e[3]*n[5]+e[5];return t[0]=i,t[1]=r,t[2]=o,t[3]=a,t[4]=s,t[5]=l,t}function ki(t,e,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+n[0],t[5]=e[5]+n[1],t}function Ai(t,e,n){var i=e[0],r=e[2],o=e[4],a=e[1],s=e[3],l=e[5],u=Math.sin(n),h=Math.cos(n);return t[0]=i*h+a*u,t[1]=-i*u+a*h,t[2]=r*h+s*u,t[3]=-r*u+h*s,t[4]=h*o+u*l,t[5]=h*l-u*o,t}function Pi(t,e,n){var i=n[0],r=n[1];return t[0]=e[0]*i,t[1]=e[1]*r,t[2]=e[2]*i,t[3]=e[3]*r,t[4]=e[4]*i,t[5]=e[5]*r,t}function Li(t,e){var n=e[0],i=e[2],r=e[4],o=e[1],a=e[3],s=e[5],l=n*a-o*i;return l?(l=1/l,t[0]=a*l,t[1]=-o*l,t[2]=-i*l,t[3]=n*l,t[4]=(i*s-a*r)*l,t[5]=(o*r-n*s)*l,t):null}var Oi=Object.freeze({__proto__:null,create:Ci,identity:Ii,copy:Ti,mul:Di,translate:ki,rotate:Ai,scale:Pi,invert:Li,clone:function(t){var e=[1,0,0,1,0,0];return Ti(e,t),e}}),Ri=Ii,Ni=5e-5;function Ei(t){return t>Ni||t<-5e-5}var zi=[],Bi=[],Vi=[1,0,0,1,0,0],Fi=Math.abs,Hi=function(){function t(){}return t.prototype.getLocalTransform=function(e){return t.getLocalTransform(this,e)},t.prototype.setPosition=function(t){this.x=t[0],this.y=t[1]},t.prototype.setScale=function(t){this.scaleX=t[0],this.scaleY=t[1]},t.prototype.setSkew=function(t){this.skewX=t[0],this.skewY=t[1]},t.prototype.setOrigin=function(t){this.originX=t[0],this.originY=t[1]},t.prototype.needLocalTransform=function(){return Ei(this.rotation)||Ei(this.x)||Ei(this.y)||Ei(this.scaleX-1)||Ei(this.scaleY-1)||Ei(this.skewX)||Ei(this.skewY)},t.prototype.updateTransform=function(){var t=this.parent&&this.parent.transform,e=this.needLocalTransform(),n=this.transform;e||t?(n=n||[1,0,0,1,0,0],e?this.getLocalTransform(n):Ri(n),t&&(e?Di(n,t,n):Ti(n,t)),this.transform=n,this._resolveGlobalScaleRatio(n)):n&&Ri(n)},t.prototype._resolveGlobalScaleRatio=function(t){var e=this.globalScaleRatio;if(null!=e&&1!==e){this.getGlobalScale(zi);var n=zi[0]<0?-1:1,i=zi[1]<0?-1:1,r=((zi[0]-n)*e+n)/zi[0]||0,o=((zi[1]-i)*e+i)/zi[1]||0;t[0]*=r,t[1]*=r,t[2]*=o,t[3]*=o}this.invTransform=this.invTransform||[1,0,0,1,0,0],Li(this.invTransform,t)},t.prototype.getComputedTransform=function(){for(var t=this,e=[];t;)e.push(t),t=t.parent;for(;t=e.pop();)t.updateTransform();return this.transform},t.prototype.setLocalTransform=function(t){if(t){var e=t[0]*t[0]+t[1]*t[1],n=t[2]*t[2]+t[3]*t[3],i=Math.atan2(t[1],t[0]),r=Math.PI/2+i-Math.atan2(t[3],t[2]);n=Math.sqrt(n)*Math.cos(r),e=Math.sqrt(e),this.skewX=r,this.skewY=0,this.rotation=-i,this.x=+t[4],this.y=+t[5],this.scaleX=e,this.scaleY=n,this.originX=0,this.originY=0}},t.prototype.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(Di(Bi,t.invTransform,e),e=Bi);var n=this.originX,i=this.originY;(n||i)&&(Vi[4]=n,Vi[5]=i,Di(Bi,e,Vi),Bi[4]-=n,Bi[5]-=i,e=Bi),this.setLocalTransform(e)}},t.prototype.getGlobalScale=function(t){var e=this.transform;return t=t||[],e?(t[0]=Math.sqrt(e[0]*e[0]+e[1]*e[1]),t[1]=Math.sqrt(e[2]*e[2]+e[3]*e[3]),e[0]<0&&(t[0]=-t[0]),e[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},t.prototype.transformCoordToLocal=function(t,e){var n=[t,e],i=this.invTransform;return i&&Et(n,n,i),n},t.prototype.transformCoordToGlobal=function(t,e){var n=[t,e],i=this.transform;return i&&Et(n,n,i),n},t.prototype.getLineScale=function(){var t=this.transform;return t&&Fi(t[0]-1)>1e-10&&Fi(t[3]-1)>1e-10?Math.sqrt(Fi(t[0]*t[3]-t[2]*t[1])):1},t.prototype.copyTransform=function(t){Gi(this,t)},t.getLocalTransform=function(t,e){e=e||[];var n=t.originX||0,i=t.originY||0,r=t.scaleX,o=t.scaleY,a=t.anchorX,s=t.anchorY,l=t.rotation||0,u=t.x,h=t.y,c=t.skewX?Math.tan(t.skewX):0,p=t.skewY?Math.tan(-t.skewY):0;if(n||i||a||s){var d=n+a,f=i+s;e[4]=-d*r-c*f*o,e[5]=-f*o-p*d*r}else e[4]=e[5]=0;return e[0]=r,e[3]=o,e[1]=p*r,e[2]=c*o,l&&Ai(e,e,l),e[4]+=n+u,e[5]+=i+h,e},t.initDefaultProps=function(){var e=t.prototype;e.scaleX=e.scaleY=e.globalScaleRatio=1,e.x=e.y=e.originX=e.originY=e.skewX=e.skewY=e.rotation=e.anchorX=e.anchorY=0}(),t}(),Wi=["x","y","originX","originY","anchorX","anchorY","rotation","scaleX","scaleY","skewX","skewY"];function Gi(t,e){for(var n=0;nf&&(f=_,gf&&(f=x,y=n.x&&t<=n.x+n.width&&e>=n.y&&e<=n.y+n.height},t.prototype.clone=function(){return new t(this.x,this.y,this.width,this.height)},t.prototype.copy=function(e){t.copy(this,e)},t.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},t.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},t.prototype.isZero=function(){return 0===this.width||0===this.height},t.create=function(e){return new t(e.x,e.y,e.width,e.height)},t.copy=function(t,e){t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height},t.applyTransform=function(e,n,i){if(i){if(i[1]<1e-5&&i[1]>-1e-5&&i[2]<1e-5&&i[2]>-1e-5){var r=i[0],o=i[3],a=i[4],s=i[5];return e.x=n.x*r+a,e.y=n.y*o+s,e.width=n.width*r,e.height=n.height*o,e.width<0&&(e.x+=e.width,e.width=-e.width),void(e.height<0&&(e.y+=e.height,e.height=-e.height))}Xi.x=qi.x=n.x,Xi.y=Ki.y=n.y,ji.x=Ki.x=n.x+n.width,ji.y=qi.y=n.y+n.height,Xi.transform(i),Ki.transform(i),ji.transform(i),qi.transform(i),e.x=Zi(Xi.x,ji.x,qi.x,Ki.x),e.y=Zi(Xi.y,ji.y,qi.y,Ki.y);var l=Yi(Xi.x,ji.x,qi.x,Ki.x),u=Yi(Xi.y,ji.y,qi.y,Ki.y);e.width=l-e.x,e.height=u-e.y}else e!==n&&t.copy(e,n)},t}(),tr={};function er(t,e){var n=tr[e=e||a];n||(n=tr[e]=new en(500));var i=n.get(t);return null==i&&(i=h.measureText(t,e).width,n.put(t,i)),i}function nr(t,e,n,i){var r=er(t,e),o=ar(e),a=rr(0,r,n),s=or(0,o,i);return new Ji(a,s,r,o)}function ir(t,e,n,i){var r=((t||"")+"").split("\n");if(1===r.length)return nr(r[0],e,n,i);for(var o=new Ji(0,0,0,0),a=0;a=0?parseFloat(t)/100*e:parseFloat(t):t}function lr(t,e,n){var i=e.position||"inside",r=null!=e.distance?e.distance:5,o=n.height,a=n.width,s=o/2,l=n.x,u=n.y,h="left",c="top";if(i instanceof Array)l+=sr(i[0],n.width),u+=sr(i[1],n.height),h=null,c=null;else switch(i){case"left":l-=r,u+=s,h="right",c="middle";break;case"right":l+=r+a,u+=s,c="middle";break;case"top":l+=a/2,u-=r,h="center",c="bottom";break;case"bottom":l+=a/2,u+=o+r,h="center";break;case"inside":l+=a/2,u+=s,h="center",c="middle";break;case"insideLeft":l+=r,u+=s,c="middle";break;case"insideRight":l+=a-r,u+=s,h="right",c="middle";break;case"insideTop":l+=a/2,u+=r,h="center";break;case"insideBottom":l+=a/2,u+=o-r,h="center",c="bottom";break;case"insideTopLeft":l+=r,u+=r;break;case"insideTopRight":l+=a-r,u+=r,h="right";break;case"insideBottomLeft":l+=r,u+=o-r,c="bottom";break;case"insideBottomRight":l+=a-r,u+=o-r,h="right",c="bottom"}return(t=t||{}).x=l,t.y=u,t.align=h,t.verticalAlign=c,t}var ur="__zr_normal__",hr=Wi.concat(["ignore"]),cr=B(Wi,(function(t,e){return t[e]=!0,t}),{ignore:!1}),pr={},dr=new Ji(0,0,0,0),fr=function(){function t(t){this.id=M(),this.animators=[],this.currentStates=[],this.states={},this._init(t)}return t.prototype._init=function(t){this.attr(t)},t.prototype.drift=function(t,e,n){switch(this.draggable){case"horizontal":e=0;break;case"vertical":t=0}var i=this.transform;i||(i=this.transform=[1,0,0,1,0,0]),i[4]+=t,i[5]+=e,this.decomposeTransform(),this.markRedraw()},t.prototype.beforeUpdate=function(){},t.prototype.afterUpdate=function(){},t.prototype.update=function(){this.updateTransform(),this.__dirty&&this.updateInnerText()},t.prototype.updateInnerText=function(t){var e=this._textContent;if(e&&(!e.ignore||t)){this.textConfig||(this.textConfig={});var n=this.textConfig,i=n.local,r=e.innerTransformable,o=void 0,a=void 0,s=!1;r.parent=i?this:null;var l=!1;if(r.copyTransform(e),null!=n.position){var u=dr;n.layoutRect?u.copy(n.layoutRect):u.copy(this.getBoundingRect()),i||u.applyTransform(this.transform),this.calculateTextPosition?this.calculateTextPosition(pr,n,u):lr(pr,n,u),r.x=pr.x,r.y=pr.y,o=pr.align,a=pr.verticalAlign;var h=n.origin;if(h&&null!=n.rotation){var c=void 0,p=void 0;"center"===h?(c=.5*u.width,p=.5*u.height):(c=sr(h[0],u.width),p=sr(h[1],u.height)),l=!0,r.originX=-r.x+c+(i?0:u.x),r.originY=-r.y+p+(i?0:u.y)}}null!=n.rotation&&(r.rotation=n.rotation);var d=n.offset;d&&(r.x+=d[0],r.y+=d[1],l||(r.originX=-d[0],r.originY=-d[1]));var f=null==n.inside?"string"==typeof n.position&&n.position.indexOf("inside")>=0:n.inside,g=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={}),v=void 0,y=void 0,m=void 0;f&&this.canBeInsideText()?(v=n.insideFill,y=n.insideStroke,null!=v&&"auto"!==v||(v=this.getInsideTextFill()),null!=y&&"auto"!==y||(y=this.getInsideTextStroke(v),m=!0)):(v=n.outsideFill,y=n.outsideStroke,null!=v&&"auto"!==v||(v=this.getOutsideFill()),null!=y&&"auto"!==y||(y=this.getOutsideStroke(v),m=!0)),(v=v||"#000")===g.fill&&y===g.stroke&&m===g.autoStroke&&o===g.align&&a===g.verticalAlign||(s=!0,g.fill=v,g.stroke=y,g.autoStroke=m,g.align=o,g.verticalAlign=a,e.setDefaultTextStyle(g)),e.__dirty|=1,s&&e.dirtyStyle(!0)}},t.prototype.canBeInsideText=function(){return!0},t.prototype.getInsideTextFill=function(){return"#fff"},t.prototype.getInsideTextStroke=function(t){return"#000"},t.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?Mi:Si},t.prototype.getOutsideStroke=function(t){var e=this.__zr&&this.__zr.getBackgroundColor(),n="string"==typeof e&&gn(e);n||(n=[255,255,255,1]);for(var i=n[3],r=this.__zr.isDarkMode(),o=0;o<3;o++)n[o]=n[o]*i+(r?0:255)*(1-i);return n[3]=1,Sn(n,"rgba")},t.prototype.traverse=function(t,e){},t.prototype.attrKV=function(t,e){"textConfig"===t?this.setTextConfig(e):"textContent"===t?this.setTextContent(e):"clipPath"===t?this.setClipPath(e):"extra"===t?(this.extra=this.extra||{},k(this.extra,e)):this[t]=e},t.prototype.hide=function(){this.ignore=!0,this.markRedraw()},t.prototype.show=function(){this.ignore=!1,this.markRedraw()},t.prototype.attr=function(t,e){if("string"==typeof t)this.attrKV(t,e);else if(j(t))for(var n=F(t),i=0;i0},t.prototype.getState=function(t){return this.states[t]},t.prototype.ensureState=function(t){var e=this.states;return e[t]||(e[t]={}),e[t]},t.prototype.clearStates=function(t){this.useState(ur,!1,t)},t.prototype.useState=function(t,e,n,i){var r=t===ur;if(this.hasState()||!r){var o=this.currentStates,a=this.stateTransition;if(!(L(o,t)>=0)||!e&&1!==o.length){var s;if(this.stateProxy&&!r&&(s=this.stateProxy(t)),s||(s=this.states&&this.states[t]),s||r){r||this.saveCurrentToNormalState(s);var l=!!(s&&s.hoverLayer||i);l&&this._toggleHoverLayerFlag(!0),this._applyStateObj(t,s,this._normalState,e,!n&&!this.__inHover&&a&&a.duration>0,a);var u=this._textContent,h=this._textGuide;return u&&u.useState(t,e,n,l),h&&h.useState(t,e,n,l),r?(this.currentStates=[],this._normalState={}):e?this.currentStates.push(t):this.currentStates=[t],this._updateAnimationTargets(),this.markRedraw(),!l&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=-2),s}C("State "+t+" not exists.")}}},t.prototype.useStates=function(t,e,n){if(t.length){var i=[],r=this.currentStates,o=t.length,a=o===r.length;if(a)for(var s=0;s0,d);var f=this._textContent,g=this._textGuide;f&&f.useStates(t,e,c),g&&g.useStates(t,e,c),this._updateAnimationTargets(),this.currentStates=t.slice(),this.markRedraw(),!c&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=-2)}else this.clearStates()},t.prototype._updateAnimationTargets=function(){for(var t=0;t=0){var n=this.currentStates.slice();n.splice(e,1),this.useStates(n)}},t.prototype.replaceState=function(t,e,n){var i=this.currentStates.slice(),r=L(i,t),o=L(i,e)>=0;r>=0?o?i.splice(r,1):i[r]=e:n&&!o&&i.push(e),this.useStates(i)},t.prototype.toggleState=function(t,e){e?this.useState(t,!0):this.removeState(t)},t.prototype._mergeStates=function(t){for(var e,n={},i=0;i=0&&e.splice(n,1)})),this.animators.push(t),n&&n.animation.addAnimator(t),n&&n.wakeUp()},t.prototype.updateDuringAnimation=function(t){this.markRedraw()},t.prototype.stopAnimation=function(t,e){for(var n=this.animators,i=n.length,r=[],o=0;o0&&n.during&&o[0].during((function(t,e){n.during(e)}));for(var p=0;p0||r.force&&!a.length){var b,S=void 0,M=void 0,C=void 0;if(s){M={},p&&(S={});for(x=0;x<_;x++){M[y=g[x]]=n[y],p?S[y]=i[y]:n[y]=i[y]}}else if(p){C={};for(x=0;x<_;x++){C[y=g[x]]=Xn(n[y]),yr(n,i,y)}}(b=new Jn(n,!1,!1,c?V(f,(function(t){return t.targetName===e})):null)).targetName=e,r.scope&&(b.scope=r.scope),p&&S&&b.whenWithKeys(0,S,g),C&&b.whenWithKeys(0,C,g),b.whenWithKeys(null==u?500:u,s?M:i,g).delay(h||0),t.addAnimator(b,e),a.push(b)}}R(fr,Wt),R(fr,Hi);var _r=function(t){function e(e){var n=t.call(this)||this;return n.isGroup=!0,n._children=[],n.attr(e),n}return n(e,t),e.prototype.childrenRef=function(){return this._children},e.prototype.children=function(){return this._children.slice()},e.prototype.childAt=function(t){return this._children[t]},e.prototype.childOfName=function(t){for(var e=this._children,n=0;n=0&&(n.splice(i,0,t),this._doAdd(t))}return this},e.prototype.replace=function(t,e){var n=L(this._children,t);return n>=0&&this.replaceAt(e,n),this},e.prototype.replaceAt=function(t,e){var n=this._children,i=n[e];if(t&&t!==this&&t.parent!==this&&t!==i){n[e]=t,i.parent=null;var r=this.__zr;r&&i.removeSelfFromZr(r),this._doAdd(t)}return this},e.prototype._doAdd=function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__zr;e&&e!==t.__zr&&t.addSelfToZr(e),e&&e.refresh()},e.prototype.remove=function(t){var e=this.__zr,n=this._children,i=L(n,t);return i<0||(n.splice(i,1),t.parent=null,e&&t.removeSelfFromZr(e),e&&e.refresh()),this},e.prototype.removeAll=function(){for(var t=this._children,e=this.__zr,n=0;n18);a&&(n.weChat=!0);e.svgSupported="undefined"!=typeof SVGRect,e.touchEventsSupported="ontouchstart"in window&&!n.ie&&!n.edge,e.pointerEventsSupported="onpointerdown"in window&&(n.edge||n.ie&&+n.version>=11),e.domSupported="undefined"!=typeof document;var s=document.documentElement.style;e.transform3dSupported=(n.ie&&"transition"in s||n.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),e.transformSupported=e.transform3dSupported||n.ie&&+n.version>=9}(navigator.userAgent,r);var o="sans-serif",a="12px "+o;var s,l,u=function(t){var e={};if("undefined"==typeof JSON)return e;for(var n=0;n=0)o=r*t.length;else for(var c=0;c>1)%2;a.style.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",i[s]+":0",r[l]+":0",i[1-s]+":auto",r[1-l]+":auto",""].join("!important;"),t.appendChild(a),n.push(a)}return n}(e,a),l=function(t,e,n){for(var i=n?"invTrans":"trans",r=e[i],o=e.srcCoords,a=[],s=[],l=!0,u=0;u<4;u++){var h=t[u].getBoundingClientRect(),c=2*u,p=h.left,d=h.top;a.push(p,d),l=l&&o&&p===o[c]&&d===o[c+1],s.push(t[u].offsetLeft,t[u].offsetTop)}return l&&r?r:(e.srcCoords=a,e[i]=n?Xt(s,a):Xt(a,s))}(s,a,o);if(l)return l(t,n,i),!0}return!1}function $t(t){return"CANVAS"===t.nodeName.toUpperCase()}var Qt=/([&<>"'])/g,Jt={"&":"&","<":"<",">":">",'"':""","'":"'"};function te(t){return null==t?"":(t+"").replace(Qt,(function(t,e){return Jt[e]}))}var ee=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ne=[],ie=r.browser.firefox&&+r.browser.version.split(".")[0]<39;function re(t,e,n,i){return n=n||{},i?oe(t,e,n):ie&&null!=e.layerX&&e.layerX!==e.offsetX?(n.zrX=e.layerX,n.zrY=e.layerY):null!=e.offsetX?(n.zrX=e.offsetX,n.zrY=e.offsetY):oe(t,e,n),n}function oe(t,e,n){if(r.domSupported&&t.getBoundingClientRect){var i=e.clientX,o=e.clientY;if($t(t)){var a=t.getBoundingClientRect();return n.zrX=i-a.left,void(n.zrY=o-a.top)}if(Kt(ne,t,i,o))return n.zrX=ne[0],void(n.zrY=ne[1])}n.zrX=n.zrY=0}function ae(t){return t||window.event}function se(t,e,n){if(null!=(e=ae(e)).zrX)return e;var i=e.type;if(i&&i.indexOf("touch")>=0){var r="touchend"!==i?e.targetTouches[0]:e.changedTouches[0];r&&re(t,r,e,n)}else{re(t,e,e,n);var o=function(t){var e=t.wheelDelta;if(e)return e;var n=t.deltaX,i=t.deltaY;if(null==n||null==i)return e;return 3*(0!==i?Math.abs(i):Math.abs(n))*(i>0?-1:i<0?1:n>0?-1:1)}(e);e.zrDelta=o?o/120:-(e.detail||0)/3}var a=e.button;return null==e.which&&void 0!==a&&ee.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function le(t,e,n,i){t.addEventListener(e,n,i)}var ue=function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0};function he(t){return 2===t.which||3===t.which}var ce=function(){function t(){this._track=[]}return t.prototype.recognize=function(t,e,n){return this._doTrack(t,e,n),this._recognize(t)},t.prototype.clear=function(){return this._track.length=0,this},t.prototype._doTrack=function(t,e,n){var i=t.touches;if(i){for(var r={points:[],touches:[],target:e,event:t},o=0,a=i.length;o1&&r&&r.length>1){var a=pe(r)/pe(o);!isFinite(a)&&(a=1),e.pinchScale=a;var s=[((i=r)[0][0]+i[1][0])/2,(i[0][1]+i[1][1])/2];return e.pinchX=s[0],e.pinchY=s[1],{type:"pinch",target:t[0].target,event:e}}}}};function fe(){return[1,0,0,1,0,0]}function ge(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function ve(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function ye(t,e,n){var i=e[0]*n[0]+e[2]*n[1],r=e[1]*n[0]+e[3]*n[1],o=e[0]*n[2]+e[2]*n[3],a=e[1]*n[2]+e[3]*n[3],s=e[0]*n[4]+e[2]*n[5]+e[4],l=e[1]*n[4]+e[3]*n[5]+e[5];return t[0]=i,t[1]=r,t[2]=o,t[3]=a,t[4]=s,t[5]=l,t}function me(t,e,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+n[0],t[5]=e[5]+n[1],t}function _e(t,e,n,i){void 0===i&&(i=[0,0]);var r=e[0],o=e[2],a=e[4],s=e[1],l=e[3],u=e[5],h=Math.sin(n),c=Math.cos(n);return t[0]=r*c+s*h,t[1]=-r*h+s*c,t[2]=o*c+l*h,t[3]=-o*h+c*l,t[4]=c*(a-i[0])+h*(u-i[1])+i[0],t[5]=c*(u-i[1])-h*(a-i[0])+i[1],t}function xe(t,e,n){var i=n[0],r=n[1];return t[0]=e[0]*i,t[1]=e[1]*r,t[2]=e[2]*i,t[3]=e[3]*r,t[4]=e[4]*i,t[5]=e[5]*r,t}function we(t,e){var n=e[0],i=e[2],r=e[4],o=e[1],a=e[3],s=e[5],l=n*a-o*i;return l?(l=1/l,t[0]=a*l,t[1]=-o*l,t[2]=-i*l,t[3]=n*l,t[4]=(i*s-a*r)*l,t[5]=(o*r-n*s)*l,t):null}var be=Object.freeze({__proto__:null,create:fe,identity:ge,copy:ve,mul:ye,translate:me,rotate:_e,scale:xe,invert:we,clone:function(t){var e=[1,0,0,1,0,0];return ve(e,t),e}}),Se=function(){function t(t,e){this.x=t||0,this.y=e||0}return t.prototype.copy=function(t){return this.x=t.x,this.y=t.y,this},t.prototype.clone=function(){return new t(this.x,this.y)},t.prototype.set=function(t,e){return this.x=t,this.y=e,this},t.prototype.equal=function(t){return t.x===this.x&&t.y===this.y},t.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this},t.prototype.scale=function(t){this.x*=t,this.y*=t},t.prototype.scaleAndAdd=function(t,e){this.x+=t.x*e,this.y+=t.y*e},t.prototype.sub=function(t){return this.x-=t.x,this.y-=t.y,this},t.prototype.dot=function(t){return this.x*t.x+this.y*t.y},t.prototype.len=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},t.prototype.lenSquare=function(){return this.x*this.x+this.y*this.y},t.prototype.normalize=function(){var t=this.len();return this.x/=t,this.y/=t,this},t.prototype.distance=function(t){var e=this.x-t.x,n=this.y-t.y;return Math.sqrt(e*e+n*n)},t.prototype.distanceSquare=function(t){var e=this.x-t.x,n=this.y-t.y;return e*e+n*n},t.prototype.negate=function(){return this.x=-this.x,this.y=-this.y,this},t.prototype.transform=function(t){if(t){var e=this.x,n=this.y;return this.x=t[0]*e+t[2]*n+t[4],this.y=t[1]*e+t[3]*n+t[5],this}},t.prototype.toArray=function(t){return t[0]=this.x,t[1]=this.y,t},t.prototype.fromArray=function(t){this.x=t[0],this.y=t[1]},t.set=function(t,e,n){t.x=e,t.y=n},t.copy=function(t,e){t.x=e.x,t.y=e.y},t.len=function(t){return Math.sqrt(t.x*t.x+t.y*t.y)},t.lenSquare=function(t){return t.x*t.x+t.y*t.y},t.dot=function(t,e){return t.x*e.x+t.y*e.y},t.add=function(t,e,n){t.x=e.x+n.x,t.y=e.y+n.y},t.sub=function(t,e,n){t.x=e.x-n.x,t.y=e.y-n.y},t.scale=function(t,e,n){t.x=e.x*n,t.y=e.y*n},t.scaleAndAdd=function(t,e,n,i){t.x=e.x+n.x*i,t.y=e.y+n.y*i},t.lerp=function(t,e,n,i){var r=1-i;t.x=r*e.x+i*n.x,t.y=r*e.y+i*n.y},t}(),Me=Math.min,Ce=Math.max,Te=new Se,Ie=new Se,De=new Se,ke=new Se,Ae=new Se,Pe=new Se,Le=function(){function t(t,e,n,i){n<0&&(t+=n,n=-n),i<0&&(e+=i,i=-i),this.x=t,this.y=e,this.width=n,this.height=i}return t.prototype.union=function(t){var e=Me(t.x,this.x),n=Me(t.y,this.y);isFinite(this.x)&&isFinite(this.width)?this.width=Ce(t.x+t.width,this.x+this.width)-e:this.width=t.width,isFinite(this.y)&&isFinite(this.height)?this.height=Ce(t.y+t.height,this.y+this.height)-n:this.height=t.height,this.x=e,this.y=n},t.prototype.applyTransform=function(e){t.applyTransform(this,this,e)},t.prototype.calculateTransform=function(t){var e=this,n=t.width/e.width,i=t.height/e.height,r=[1,0,0,1,0,0];return me(r,r,[-e.x,-e.y]),xe(r,r,[n,i]),me(r,r,[t.x,t.y]),r},t.prototype.intersect=function(e,n){if(!e)return!1;e instanceof t||(e=t.create(e));var i=this,r=i.x,o=i.x+i.width,a=i.y,s=i.y+i.height,l=e.x,u=e.x+e.width,h=e.y,c=e.y+e.height,p=!(of&&(f=_,gf&&(f=x,y=n.x&&t<=n.x+n.width&&e>=n.y&&e<=n.y+n.height},t.prototype.clone=function(){return new t(this.x,this.y,this.width,this.height)},t.prototype.copy=function(e){t.copy(this,e)},t.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},t.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},t.prototype.isZero=function(){return 0===this.width||0===this.height},t.create=function(e){return new t(e.x,e.y,e.width,e.height)},t.copy=function(t,e){t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height},t.applyTransform=function(e,n,i){if(i){if(i[1]<1e-5&&i[1]>-1e-5&&i[2]<1e-5&&i[2]>-1e-5){var r=i[0],o=i[3],a=i[4],s=i[5];return e.x=n.x*r+a,e.y=n.y*o+s,e.width=n.width*r,e.height=n.height*o,e.width<0&&(e.x+=e.width,e.width=-e.width),void(e.height<0&&(e.y+=e.height,e.height=-e.height))}Te.x=De.x=n.x,Te.y=ke.y=n.y,Ie.x=ke.x=n.x+n.width,Ie.y=De.y=n.y+n.height,Te.transform(i),ke.transform(i),Ie.transform(i),De.transform(i),e.x=Me(Te.x,Ie.x,De.x,ke.x),e.y=Me(Te.y,Ie.y,De.y,ke.y);var l=Ce(Te.x,Ie.x,De.x,ke.x),u=Ce(Te.y,Ie.y,De.y,ke.y);e.width=l-e.x,e.height=u-e.y}else e!==n&&t.copy(e,n)},t}(),Oe="silent";function Re(){ue(this.event)}var Ne=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.handler=null,e}return n(e,t),e.prototype.dispose=function(){},e.prototype.setCursor=function(){},e}(Ut),ze=function(t,e){this.x=t,this.y=e},Ee=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],Be=new Le(0,0,0,0),Ve=function(t){function e(e,n,i,r,o){var a=t.call(this)||this;return a._hovered=new ze(0,0),a.storage=e,a.painter=n,a.painterRoot=r,a._pointerSize=o,i=i||new Ne,a.proxy=null,a.setHandlerProxy(i),a._draggingMgr=new Gt(a),a}return n(e,t),e.prototype.setHandlerProxy=function(t){this.proxy&&this.proxy.dispose(),t&&(z(Ee,(function(e){t.on&&t.on(e,this[e],this)}),this),t.handler=this),this.proxy=t},e.prototype.mousemove=function(t){var e=t.zrX,n=t.zrY,i=We(this,e,n),r=this._hovered,o=r.target;o&&!o.__zr&&(o=(r=this.findHover(r.x,r.y)).target);var a=this._hovered=i?new ze(e,n):this.findHover(e,n),s=a.target,l=this.proxy;l.setCursor&&l.setCursor(s?s.cursor:"default"),o&&s!==o&&this.dispatchToElement(r,"mouseout",t),this.dispatchToElement(a,"mousemove",t),s&&s!==o&&this.dispatchToElement(a,"mouseover",t)},e.prototype.mouseout=function(t){var e=t.zrEventControl;"only_globalout"!==e&&this.dispatchToElement(this._hovered,"mouseout",t),"no_globalout"!==e&&this.trigger("globalout",{type:"globalout",event:t})},e.prototype.resize=function(){this._hovered=new ze(0,0)},e.prototype.dispatch=function(t,e){var n=this[t];n&&n.call(this,e)},e.prototype.dispose=function(){this.proxy.dispose(),this.storage=null,this.proxy=null,this.painter=null},e.prototype.setCursorStyle=function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},e.prototype.dispatchToElement=function(t,e,n){var i=(t=t||{}).target;if(!i||!i.silent){for(var r="on"+e,o=function(t,e,n){return{type:t,event:n,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:n.zrX,offsetY:n.zrY,gestureEvent:n.gestureEvent,pinchX:n.pinchX,pinchY:n.pinchY,pinchScale:n.pinchScale,wheelDelta:n.zrDelta,zrByTouch:n.zrByTouch,which:n.which,stop:Re}}(e,t,n);i&&(i[r]&&(o.cancelBubble=!!i[r].call(i,o)),i.trigger(e,o),i=i.__hostTarget?i.__hostTarget:i.parent,!o.cancelBubble););o.cancelBubble||(this.trigger(e,o),this.painter&&this.painter.eachOtherLayer&&this.painter.eachOtherLayer((function(t){"function"==typeof t[r]&&t[r].call(t,o),t.trigger&&t.trigger(e,o)})))}},e.prototype.findHover=function(t,e,n){var i=this.storage.getDisplayList(),r=new ze(t,e);if(He(i,r,t,e,n),this._pointerSize&&!r.target){for(var o=[],a=this._pointerSize,s=a/2,l=new Le(t-s,e-s,a,a),u=i.length-1;u>=0;u--){var h=i[u];h===n||h.ignore||h.ignoreCoarsePointer||h.parent&&h.parent.ignoreCoarsePointer||(Be.copy(h.getBoundingRect()),h.transform&&Be.applyTransform(h.transform),Be.intersect(l)&&o.push(h))}if(o.length)for(var c=Math.PI/12,p=2*Math.PI,d=0;d=0;o--){var a=t[o],s=void 0;if(a!==r&&!a.ignore&&(s=Fe(a,n,i))&&(!e.topTarget&&(e.topTarget=a),s!==Oe)){e.target=a;break}}}function We(t,e,n){var i=t.painter;return e<0||e>i.getWidth()||n<0||n>i.getHeight()}z(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],(function(t){Ve.prototype[t]=function(e){var n,i,r=e.zrX,o=e.zrY,a=We(this,r,o);if("mouseup"===t&&a||(i=(n=this.findHover(r,o)).target),"mousedown"===t)this._downEl=i,this._downPoint=[e.zrX,e.zrY],this._upEl=i;else if("mouseup"===t)this._upEl=i;else if("click"===t){if(this._downEl!==this._upEl||!this._downPoint||Rt(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(n,t,e)}}));function Ge(t,e,n,i){var r=e+1;if(r===n)return 1;if(i(t[r++],t[e])<0){for(;r=0;)r++;return r-e}function Ue(t,e,n,i,r){for(i===e&&i++;i>>1])<0?l=o:s=o+1;var u=i-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;u>0;)t[s+u]=t[s+u-1],u--}t[s]=a}}function Ze(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])>0){for(s=i-r;l0;)a=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}else{for(s=r+1;ls&&(l=s);var u=a;a=r-l,l=r-u}for(a++;a>>1);o(t,e[n+h])>0?a=h+1:l=h}return l}function Ye(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])<0){for(s=r+1;ls&&(l=s);var u=a;a=r-l,l=r-u}else{for(s=i-r;l=0;)a=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}for(a++;a>>1);o(t,e[n+h])<0?l=h:a=h+1}return l}function Xe(t,e){var n,i,r=7,o=0,a=[];function s(s){var l=n[s],u=i[s],h=n[s+1],c=i[s+1];i[s]=u+c,s===o-3&&(n[s+1]=n[s+2],i[s+1]=i[s+2]),o--;var p=Ye(t[h],t,l,u,0,e);l+=p,0!==(u-=p)&&0!==(c=Ze(t[l+u-1],t,h,c,c-1,e))&&(u<=c?function(n,i,o,s){var l=0;for(l=0;l=7||d>=7);if(f)break;g<0&&(g=0),g+=2}if((r=g)<1&&(r=1),1===i){for(l=0;l=0;l--)t[d+l]=t[p+l];return void(t[c]=a[h])}var f=r;for(;;){var g=0,v=0,y=!1;do{if(e(a[h],t[u])<0){if(t[c--]=t[u--],g++,v=0,0==--i){y=!0;break}}else if(t[c--]=a[h--],v++,g=0,1==--s){y=!0;break}}while((g|v)=0;l--)t[d+l]=t[p+l];if(0===i){y=!0;break}}if(t[c--]=a[h--],1==--s){y=!0;break}if(0!==(v=s-Ze(t[u],a,0,s,s-1,e))){for(s-=v,d=(c-=v)+1,p=(h-=v)+1,l=0;l=7||v>=7);if(y)break;f<0&&(f=0),f+=2}(r=f)<1&&(r=1);if(1===s){for(d=(c-=i)+1,p=(u-=i)+1,l=i-1;l>=0;l--)t[d+l]=t[p+l];t[c]=a[h]}else{if(0===s)throw new Error;for(p=c-(s-1),l=0;l1;){var t=o-2;if(t>=1&&i[t-1]<=i[t]+i[t+1]||t>=2&&i[t-2]<=i[t]+i[t-1])i[t-1]i[t+1])break;s(t)}},forceMergeRuns:function(){for(;o>1;){var t=o-2;t>0&&i[t-1]=32;)e|=1&t,t>>=1;return t+e}(r);do{if((o=Ge(t,n,i,e))s&&(l=s),Ue(t,n,n+l,n+o,e),o=l}a.pushRun(n,o),a.mergeRuns(),r-=o,n+=o}while(0!==r);a.forceMergeRuns()}}}var qe=!1;function Ke(){qe||(qe=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function $e(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}var Qe=function(){function t(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=$e}return t.prototype.traverse=function(t,e){for(var n=0;n0&&(u.__clipPaths=[]),isNaN(u.z)&&(Ke(),u.z=0),isNaN(u.z2)&&(Ke(),u.z2=0),isNaN(u.zlevel)&&(Ke(),u.zlevel=0),this._displayList[this._displayListLen++]=u}var h=t.getDecalElement&&t.getDecalElement();h&&this._updateAndAddDisplayable(h,e,n);var c=t.getTextGuideLine();c&&this._updateAndAddDisplayable(c,e,n);var p=t.getTextContent();p&&this._updateAndAddDisplayable(p,e,n)}},t.prototype.addRoot=function(t){t.__zr&&t.__zr.storage===this||this._roots.push(t)},t.prototype.delRoot=function(t){if(t instanceof Array)for(var e=0,n=t.length;e=0&&this._roots.splice(i,1)}},t.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},t.prototype.getRoots=function(){return this._roots},t.prototype.dispose=function(){this._displayList=null,this._roots=null},t}(),Je=r.hasGlobalWindow&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(t){return setTimeout(t,16)},tn={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,n=.1;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=.4*Math.asin(1/n)/(2*Math.PI),-n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4))},elasticOut:function(t){var e,n=.1;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=.4*Math.asin(1/n)/(2*Math.PI),n*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/.4)+1)},elasticInOut:function(t){var e,n=.1,i=.4;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=i*Math.asin(1/n)/(2*Math.PI),(t*=2)<1?n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*-.5:n*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-tn.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?.5*tn.bounceIn(2*t):.5*tn.bounceOut(2*t-1)+.5}},en=Math.pow,nn=Math.sqrt,rn=1e-8,on=1e-4,an=nn(3),sn=1/3,ln=St(),un=St(),hn=St();function cn(t){return t>-1e-8&&trn||t<-1e-8}function dn(t,e,n,i,r){var o=1-r;return o*o*(o*t+3*r*e)+r*r*(r*i+3*o*n)}function fn(t,e,n,i,r){var o=1-r;return 3*(((e-t)*o+2*(n-e)*r)*o+(i-n)*r*r)}function gn(t,e,n,i,r,o){var a=i+3*(e-n)-t,s=3*(n-2*e+t),l=3*(e-t),u=t-r,h=s*s-3*a*l,c=s*l-9*a*u,p=l*l-3*s*u,d=0;if(cn(h)&&cn(c)){if(cn(s))o[0]=0;else(M=-l/s)>=0&&M<=1&&(o[d++]=M)}else{var f=c*c-4*h*p;if(cn(f)){var g=c/h,v=-g/2;(M=-s/a+g)>=0&&M<=1&&(o[d++]=M),v>=0&&v<=1&&(o[d++]=v)}else if(f>0){var y=nn(f),m=h*s+1.5*a*(-c+y),_=h*s+1.5*a*(-c-y);(M=(-s-((m=m<0?-en(-m,sn):en(m,sn))+(_=_<0?-en(-_,sn):en(_,sn))))/(3*a))>=0&&M<=1&&(o[d++]=M)}else{var x=(2*h*s-3*a*c)/(2*nn(h*h*h)),w=Math.acos(x)/3,b=nn(h),S=Math.cos(w),M=(-s-2*b*S)/(3*a),C=(v=(-s+b*(S+an*Math.sin(w)))/(3*a),(-s+b*(S-an*Math.sin(w)))/(3*a));M>=0&&M<=1&&(o[d++]=M),v>=0&&v<=1&&(o[d++]=v),C>=0&&C<=1&&(o[d++]=C)}}return d}function vn(t,e,n,i,r){var o=6*n-12*e+6*t,a=9*e+3*i-3*t-9*n,s=3*e-3*t,l=0;if(cn(a)){if(pn(o))(h=-s/o)>=0&&h<=1&&(r[l++]=h)}else{var u=o*o-4*a*s;if(cn(u))r[0]=-o/(2*a);else if(u>0){var h,c=nn(u),p=(-o-c)/(2*a);(h=(-o+c)/(2*a))>=0&&h<=1&&(r[l++]=h),p>=0&&p<=1&&(r[l++]=p)}}return l}function yn(t,e,n,i,r,o){var a=(e-t)*r+t,s=(n-e)*r+e,l=(i-n)*r+n,u=(s-a)*r+a,h=(l-s)*r+s,c=(h-u)*r+u;o[0]=t,o[1]=a,o[2]=u,o[3]=c,o[4]=c,o[5]=h,o[6]=l,o[7]=i}function mn(t,e,n,i,r,o,a,s,l){for(var u=t,h=e,c=0,p=1/l,d=1;d<=l;d++){var f=d*p,g=dn(t,n,r,a,f),v=dn(e,i,o,s,f),y=g-u,m=v-h;c+=Math.sqrt(y*y+m*m),u=g,h=v}return c}function _n(t,e,n,i){var r=1-i;return r*(r*t+2*i*e)+i*i*n}function xn(t,e,n,i){return 2*((1-i)*(e-t)+i*(n-e))}function wn(t,e,n){var i=t+n-2*e;return 0===i?.5:(t-e)/i}function bn(t,e,n,i,r){var o=(e-t)*i+t,a=(n-e)*i+e,s=(a-o)*i+o;r[0]=t,r[1]=o,r[2]=s,r[3]=s,r[4]=a,r[5]=n}function Sn(t,e,n,i,r,o,a){for(var s=t,l=e,u=0,h=1/a,c=1;c<=a;c++){var p=c*h,d=_n(t,n,r,p),f=_n(e,i,o,p),g=d-s,v=f-l;u+=Math.sqrt(g*g+v*v),s=d,l=f}return u}var Mn=/cubic-bezier\(([0-9,\.e ]+)\)/;function Cn(t){var e=t&&Mn.exec(t);if(e){var n=e[1].split(","),i=+lt(n[0]),r=+lt(n[1]),o=+lt(n[2]),a=+lt(n[3]);if(isNaN(i+r+o+a))return;var s=[];return function(t){return t<=0?0:t>=1?1:gn(0,i,o,1,t,s)&&dn(0,r,a,1,s[0])}}}var Tn=function(){function t(t){this._inited=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=t.life||1e3,this._delay=t.delay||0,this.loop=t.loop||!1,this.onframe=t.onframe||xt,this.ondestroy=t.ondestroy||xt,this.onrestart=t.onrestart||xt,t.easing&&this.setEasing(t.easing)}return t.prototype.step=function(t,e){if(this._inited||(this._startTime=t+this._delay,this._inited=!0),!this._paused){var n=this._life,i=t-this._startTime-this._pausedTime,r=i/n;r<0&&(r=0),r=Math.min(r,1);var o=this.easingFunc,a=o?o(r):r;if(this.onframe(a),1===r){if(!this.loop)return!0;var s=i%n;this._startTime=t-s,this._pausedTime=0,this.onrestart()}return!1}this._pausedTime+=e},t.prototype.pause=function(){this._paused=!0},t.prototype.resume=function(){this._paused=!1},t.prototype.setEasing=function(t){this.easing=t,this.easingFunc=U(t)?t:tn[t]||Cn(t)},t}(),In=function(t){this.value=t},Dn=function(){function t(){this._len=0}return t.prototype.insert=function(t){var e=new In(t);return this.insertEntry(e),e},t.prototype.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},t.prototype.remove=function(t){var e=t.prev,n=t.next;e?e.next=n:this.head=n,n?n.prev=e:this.tail=e,t.next=t.prev=null,this._len--},t.prototype.len=function(){return this._len},t.prototype.clear=function(){this.head=this.tail=null,this._len=0},t}(),kn=function(){function t(t){this._list=new Dn,this._maxSize=10,this._map={},this._maxSize=t}return t.prototype.put=function(t,e){var n=this._list,i=this._map,r=null;if(null==i[t]){var o=n.len(),a=this._lastRemovedEntry;if(o>=this._maxSize&&o>0){var s=n.head;n.remove(s),delete i[s.key],r=s.value,this._lastRemovedEntry=s}a?a.value=e:a=new In(e),a.key=t,n.insertEntry(a),i[t]=a}return r},t.prototype.get=function(t){var e=this._map[t],n=this._list;if(null!=e)return e!==n.tail&&(n.remove(e),n.insertEntry(e)),e.value},t.prototype.clear=function(){this._list.clear(),this._map={}},t.prototype.len=function(){return this._list.len()},t}(),An={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function Pn(t){return(t=Math.round(t))<0?0:t>255?255:t}function Ln(t){return t<0?0:t>1?1:t}function On(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?Pn(parseFloat(e)/100*255):Pn(parseInt(e,10))}function Rn(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?Ln(parseFloat(e)/100):Ln(parseFloat(e))}function Nn(t,e,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?t+(e-t)*n*6:2*n<1?e:3*n<2?t+(e-t)*(2/3-n)*6:t}function zn(t,e,n){return t+(e-t)*n}function En(t,e,n,i,r){return t[0]=e,t[1]=n,t[2]=i,t[3]=r,t}function Bn(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}var Vn=new kn(20),Fn=null;function Hn(t,e){Fn&&Bn(Fn,e),Fn=Vn.put(t,Fn||e.slice())}function Wn(t,e){if(t){e=e||[];var n=Vn.get(t);if(n)return Bn(e,n);var i=(t+="").replace(/ /g,"").toLowerCase();if(i in An)return Bn(e,An[i]),Hn(t,e),e;var r,o=i.length;if("#"===i.charAt(0))return 4===o||5===o?(r=parseInt(i.slice(1,4),16))>=0&&r<=4095?(En(e,(3840&r)>>4|(3840&r)>>8,240&r|(240&r)>>4,15&r|(15&r)<<4,5===o?parseInt(i.slice(4),16)/15:1),Hn(t,e),e):void En(e,0,0,0,1):7===o||9===o?(r=parseInt(i.slice(1,7),16))>=0&&r<=16777215?(En(e,(16711680&r)>>16,(65280&r)>>8,255&r,9===o?parseInt(i.slice(7),16)/255:1),Hn(t,e),e):void En(e,0,0,0,1):void 0;var a=i.indexOf("("),s=i.indexOf(")");if(-1!==a&&s+1===o){var l=i.substr(0,a),u=i.substr(a+1,s-(a+1)).split(","),h=1;switch(l){case"rgba":if(4!==u.length)return 3===u.length?En(e,+u[0],+u[1],+u[2],1):En(e,0,0,0,1);h=Rn(u.pop());case"rgb":return u.length>=3?(En(e,On(u[0]),On(u[1]),On(u[2]),3===u.length?h:Rn(u[3])),Hn(t,e),e):void En(e,0,0,0,1);case"hsla":return 4!==u.length?void En(e,0,0,0,1):(u[3]=Rn(u[3]),Gn(u,e),Hn(t,e),e);case"hsl":return 3!==u.length?void En(e,0,0,0,1):(Gn(u,e),Hn(t,e),e);default:return}}En(e,0,0,0,1)}}function Gn(t,e){var n=(parseFloat(t[0])%360+360)%360/360,i=Rn(t[1]),r=Rn(t[2]),o=r<=.5?r*(i+1):r+i-r*i,a=2*r-o;return En(e=e||[],Pn(255*Nn(a,o,n+1/3)),Pn(255*Nn(a,o,n)),Pn(255*Nn(a,o,n-1/3)),1),4===t.length&&(e[3]=t[3]),e}function Un(t,e){var n=Wn(t);if(n){for(var i=0;i<3;i++)n[i]=e<0?n[i]*(1-e)|0:(255-n[i])*e+n[i]|0,n[i]>255?n[i]=255:n[i]<0&&(n[i]=0);return Kn(n,4===n.length?"rgba":"rgb")}}function Zn(t,e,n){if(e&&e.length&&t>=0&&t<=1){n=n||[];var i=t*(e.length-1),r=Math.floor(i),o=Math.ceil(i),a=e[r],s=e[o],l=i-r;return n[0]=Pn(zn(a[0],s[0],l)),n[1]=Pn(zn(a[1],s[1],l)),n[2]=Pn(zn(a[2],s[2],l)),n[3]=Ln(zn(a[3],s[3],l)),n}}var Yn=Zn;function Xn(t,e,n){if(e&&e.length&&t>=0&&t<=1){var i=t*(e.length-1),r=Math.floor(i),o=Math.ceil(i),a=Wn(e[r]),s=Wn(e[o]),l=i-r,u=Kn([Pn(zn(a[0],s[0],l)),Pn(zn(a[1],s[1],l)),Pn(zn(a[2],s[2],l)),Ln(zn(a[3],s[3],l))],"rgba");return n?{color:u,leftIndex:r,rightIndex:o,value:i}:u}}var jn=Xn;function qn(t,e){var n=Wn(t);if(n&&null!=e)return n[3]=Ln(e),Kn(n,"rgba")}function Kn(t,e){if(t&&t.length){var n=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(n+=","+t[3]),e+"("+n+")"}}function $n(t,e){var n=Wn(t);return n?(.299*n[0]+.587*n[1]+.114*n[2])*n[3]/255+(1-n[3])*e:0}var Qn=new kn(100);function Jn(t){if(Z(t)){var e=Qn.get(t);return e||(e=Un(t,-.1),Qn.put(t,e)),e}if(Q(t)){var n=k({},t);return n.colorStops=E(t.colorStops,(function(t){return{offset:t.offset,color:Un(t.color,-.1)}})),n}return t}var ti=Object.freeze({__proto__:null,parse:Wn,lift:Un,toHex:function(t){var e=Wn(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)},fastLerp:Zn,fastMapToColor:Yn,lerp:Xn,mapToColor:jn,modifyHSL:function(t,e,n,i){var r,o=Wn(t);if(t)return o=function(t){if(t){var e,n,i=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(i,r,o),s=Math.max(i,r,o),l=s-a,u=(s+a)/2;if(0===l)e=0,n=0;else{n=u<.5?l/(s+a):l/(2-s-a);var h=((s-i)/6+l/2)/l,c=((s-r)/6+l/2)/l,p=((s-o)/6+l/2)/l;i===s?e=p-c:r===s?e=1/3+h-p:o===s&&(e=2/3+c-h),e<0&&(e+=1),e>1&&(e-=1)}var d=[360*e,n,u];return null!=t[3]&&d.push(t[3]),d}}(o),null!=e&&(o[0]=(r=e,(r=Math.round(r))<0?0:r>360?360:r)),null!=n&&(o[1]=Rn(n)),null!=i&&(o[2]=Rn(i)),Kn(Gn(o),"rgba")},modifyAlpha:qn,stringify:Kn,lum:$n,random:function(){return Kn([Math.round(255*Math.random()),Math.round(255*Math.random()),Math.round(255*Math.random())],"rgb")},liftColor:Jn}),ei=Math.round;function ni(t){var e;if(t&&"transparent"!==t){if("string"==typeof t&&t.indexOf("rgba")>-1){var n=Wn(t);n&&(t="rgb("+n[0]+","+n[1]+","+n[2]+")",e=n[3])}}else t="none";return{color:t,opacity:null==e?1:e}}var ii=1e-4;function ri(t){return t-1e-4}function oi(t){return ei(1e3*t)/1e3}function ai(t){return ei(1e4*t)/1e4}var si={left:"start",right:"end",center:"middle",middle:"middle"};function li(t){return t&&!!t.image}function ui(t){return li(t)||function(t){return t&&!!t.svgElement}(t)}function hi(t){return"linear"===t.type}function ci(t){return"radial"===t.type}function pi(t){return t&&("linear"===t.type||"radial"===t.type)}function di(t){return"url(#"+t+")"}function fi(t){var e=t.getGlobalScale(),n=Math.max(e[0],e[1]);return Math.max(Math.ceil(Math.log(n)/Math.log(10)),1)}function gi(t){var e=t.x||0,n=t.y||0,i=(t.rotation||0)*wt,r=it(t.scaleX,1),o=it(t.scaleY,1),a=t.skewX||0,s=t.skewY||0,l=[];return(e||n)&&l.push("translate("+e+"px,"+n+"px)"),i&&l.push("rotate("+i+")"),1===r&&1===o||l.push("scale("+r+","+o+")"),(a||s)&&l.push("skew("+ei(a*wt)+"deg, "+ei(s*wt)+"deg)"),l.join(" ")}var vi=r.hasGlobalWindow&&U(window.btoa)?function(t){return window.btoa(unescape(encodeURIComponent(t)))}:"undefined"!=typeof Buffer?function(t){return Buffer.from(t).toString("base64")}:function(t){return null},yi=Array.prototype.slice;function mi(t,e,n){return(e-t)*n+t}function _i(t,e,n,i){for(var r=e.length,o=0;oi?e:t,o=Math.min(n,i),a=r[o-1]||{color:[0,0,0,0],offset:0},s=o;sa)i.length=a;else for(var s=o;s=1},t.prototype.getAdditiveTrack=function(){return this._additiveTrack},t.prototype.addKeyframe=function(t,e,n){this._needsSort=!0;var i=this.keyframes,r=i.length,o=!1,a=6,s=e;if(N(e)){var l=function(t){return N(t&&t[0])?2:1}(e);a=l,(1===l&&!X(e[0])||2===l&&!X(e[0][0]))&&(o=!0)}else if(X(e)&&!et(e))a=0;else if(Z(e))if(isNaN(+e)){var u=Wn(e);u&&(s=u,a=3)}else a=0;else if(Q(e)){var h=k({},s);h.colorStops=E(e.colorStops,(function(t){return{offset:t.offset,color:Wn(t.color)}})),hi(e)?a=4:ci(e)&&(a=5),s=h}0===r?this.valType=a:a===this.valType&&6!==a||(o=!0),this.discrete=this.discrete||o;var c={time:t,value:s,rawValue:e,percent:0};return n&&(c.easing=n,c.easingFunc=U(n)?n:tn[n]||Cn(n)),i.push(c),c},t.prototype.prepare=function(t,e){var n=this.keyframes;this._needsSort&&n.sort((function(t,e){return t.time-e.time}));for(var i=this.valType,r=n.length,o=n[r-1],a=this.discrete,s=Ii(i),l=Ti(i),u=0;u=0&&!(l[n].percent<=e);n--);n=d(n,u-2)}else{for(n=p;ne);n++);n=d(n-1,u-2)}r=l[n+1],i=l[n]}if(i&&r){this._lastFr=n,this._lastFrP=e;var f=r.percent-i.percent,g=0===f?1:d((e-i.percent)/f,1);r.easingFunc&&(g=r.easingFunc(g));var v=o?this._additiveValue:c?Di:t[h];if(!Ii(s)&&!c||v||(v=this._additiveValue=[]),this.discrete)t[h]=g<1?i.rawValue:r.rawValue;else if(Ii(s))1===s?_i(v,i[a],r[a],g):function(t,e,n,i){for(var r=e.length,o=r&&e[0].length,a=0;a0&&s.addKeyframe(0,Mi(l),i),this._trackKeys.push(a)}s.addKeyframe(t,Mi(e[a]),i)}return this._maxTime=Math.max(this._maxTime,t),this},t.prototype.pause=function(){this._clip.pause(),this._paused=!0},t.prototype.resume=function(){this._clip.resume(),this._paused=!1},t.prototype.isPaused=function(){return!!this._paused},t.prototype.duration=function(t){return this._maxTime=t,this._force=!0,this},t.prototype._doneCallback=function(){this._setTracksFinished(),this._clip=null;var t=this._doneCbs;if(t)for(var e=t.length,n=0;n0)){this._started=1;for(var e=this,n=[],i=this._maxTime||0,r=0;r1){var a=o.pop();r.addKeyframe(a.time,t[i]),r.prepare(this._maxTime,r.getAdditiveTrack())}}}},t}();function Pi(){return(new Date).getTime()}var Li,Oi,Ri=function(t){function e(e){var n=t.call(this)||this;return n._running=!1,n._time=0,n._pausedTime=0,n._pauseStart=0,n._paused=!1,e=e||{},n.stage=e.stage||{},n}return n(e,t),e.prototype.addClip=function(t){t.animation&&this.removeClip(t),this._head?(this._tail.next=t,t.prev=this._tail,t.next=null,this._tail=t):this._head=this._tail=t,t.animation=this},e.prototype.addAnimator=function(t){t.animation=this;var e=t.getClip();e&&this.addClip(e)},e.prototype.removeClip=function(t){if(t.animation){var e=t.prev,n=t.next;e?e.next=n:this._head=n,n?n.prev=e:this._tail=e,t.next=t.prev=t.animation=null}},e.prototype.removeAnimator=function(t){var e=t.getClip();e&&this.removeClip(e),t.animation=null},e.prototype.update=function(t){for(var e=Pi()-this._pausedTime,n=e-this._time,i=this._head;i;){var r=i.next;i.step(e,n)?(i.ondestroy(),this.removeClip(i),i=r):i=r}this._time=e,t||(this.trigger("frame",n),this.stage.update&&this.stage.update())},e.prototype._startLoop=function(){var t=this;this._running=!0,Je((function e(){t._running&&(Je(e),!t._paused&&t.update())}))},e.prototype.start=function(){this._running||(this._time=Pi(),this._pausedTime=0,this._startLoop())},e.prototype.stop=function(){this._running=!1},e.prototype.pause=function(){this._paused||(this._pauseStart=Pi(),this._paused=!0)},e.prototype.resume=function(){this._paused&&(this._pausedTime+=Pi()-this._pauseStart,this._paused=!1)},e.prototype.clear=function(){for(var t=this._head;t;){var e=t.next;t.prev=t.next=t.animation=null,t=e}this._head=this._tail=null},e.prototype.isFinished=function(){return null==this._head},e.prototype.animate=function(t,e){e=e||{},this.start();var n=new Ai(t,e.loop);return this.addAnimator(n),n},e}(Ut),Ni=r.domSupported,zi=(Oi={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},{mouse:Li=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],touch:["touchstart","touchend","touchmove"],pointer:E(Li,(function(t){var e=t.replace("mouse","pointer");return Oi.hasOwnProperty(e)?e:t}))}),Ei=["mousemove","mouseup"],Bi=["pointermove","pointerup"],Vi=!1;function Fi(t){var e=t.pointerType;return"pen"===e||"touch"===e}function Hi(t){t&&(t.zrByTouch=!0)}function Wi(t,e){for(var n=e,i=!1;n&&9!==n.nodeType&&!(i=n.domBelongToZr||n!==e&&n===t.painterRoot);)n=n.parentNode;return i}var Gi=function(t,e){this.stopPropagation=xt,this.stopImmediatePropagation=xt,this.preventDefault=xt,this.type=e.type,this.target=this.currentTarget=t.dom,this.pointerType=e.pointerType,this.clientX=e.clientX,this.clientY=e.clientY},Ui={mousedown:function(t){t=se(this.dom,t),this.__mayPointerCapture=[t.zrX,t.zrY],this.trigger("mousedown",t)},mousemove:function(t){t=se(this.dom,t);var e=this.__mayPointerCapture;!e||t.zrX===e[0]&&t.zrY===e[1]||this.__togglePointerCapture(!0),this.trigger("mousemove",t)},mouseup:function(t){t=se(this.dom,t),this.__togglePointerCapture(!1),this.trigger("mouseup",t)},mouseout:function(t){Wi(this,(t=se(this.dom,t)).toElement||t.relatedTarget)||(this.__pointerCapturing&&(t.zrEventControl="no_globalout"),this.trigger("mouseout",t))},wheel:function(t){Vi=!0,t=se(this.dom,t),this.trigger("mousewheel",t)},mousewheel:function(t){Vi||(t=se(this.dom,t),this.trigger("mousewheel",t))},touchstart:function(t){Hi(t=se(this.dom,t)),this.__lastTouchMoment=new Date,this.handler.processGesture(t,"start"),Ui.mousemove.call(this,t),Ui.mousedown.call(this,t)},touchmove:function(t){Hi(t=se(this.dom,t)),this.handler.processGesture(t,"change"),Ui.mousemove.call(this,t)},touchend:function(t){Hi(t=se(this.dom,t)),this.handler.processGesture(t,"end"),Ui.mouseup.call(this,t),+new Date-+this.__lastTouchMoment<300&&Ui.click.call(this,t)},pointerdown:function(t){Ui.mousedown.call(this,t)},pointermove:function(t){Fi(t)||Ui.mousemove.call(this,t)},pointerup:function(t){Ui.mouseup.call(this,t)},pointerout:function(t){Fi(t)||Ui.mouseout.call(this,t)}};z(["click","dblclick","contextmenu"],(function(t){Ui[t]=function(e){e=se(this.dom,e),this.trigger(t,e)}}));var Zi={pointermove:function(t){Fi(t)||Zi.mousemove.call(this,t)},pointerup:function(t){Zi.mouseup.call(this,t)},mousemove:function(t){this.trigger("mousemove",t)},mouseup:function(t){var e=this.__pointerCapturing;this.__togglePointerCapture(!1),this.trigger("mouseup",t),e&&(t.zrEventControl="only_globalout",this.trigger("mouseout",t))}};function Yi(t,e){var n=e.domHandlers;r.pointerEventsSupported?z(zi.pointer,(function(i){ji(e,i,(function(e){n[i].call(t,e)}))})):(r.touchEventsSupported&&z(zi.touch,(function(i){ji(e,i,(function(r){n[i].call(t,r),function(t){t.touching=!0,null!=t.touchTimer&&(clearTimeout(t.touchTimer),t.touchTimer=null),t.touchTimer=setTimeout((function(){t.touching=!1,t.touchTimer=null}),700)}(e)}))})),z(zi.mouse,(function(i){ji(e,i,(function(r){r=ae(r),e.touching||n[i].call(t,r)}))})))}function Xi(t,e){function n(n){ji(e,n,(function(i){i=ae(i),Wi(t,i.target)||(i=function(t,e){return se(t.dom,new Gi(t,e),!0)}(t,i),e.domHandlers[n].call(t,i))}),{capture:!0})}r.pointerEventsSupported?z(Bi,n):r.touchEventsSupported||z(Ei,n)}function ji(t,e,n,i){t.mounted[e]=n,t.listenerOpts[e]=i,le(t.domTarget,e,n,i)}function qi(t){var e,n,i,r,o=t.mounted;for(var a in o)o.hasOwnProperty(a)&&(e=t.domTarget,n=a,i=o[a],r=t.listenerOpts[a],e.removeEventListener(n,i,r));t.mounted={}}var Ki=function(t,e){this.mounted={},this.listenerOpts={},this.touching=!1,this.domTarget=t,this.domHandlers=e},$i=function(t){function e(e,n){var i=t.call(this)||this;return i.__pointerCapturing=!1,i.dom=e,i.painterRoot=n,i._localHandlerScope=new Ki(e,Ui),Ni&&(i._globalHandlerScope=new Ki(document,Zi)),Yi(i,i._localHandlerScope),i}return n(e,t),e.prototype.dispose=function(){qi(this._localHandlerScope),Ni&&qi(this._globalHandlerScope)},e.prototype.setCursor=function(t){this.dom.style&&(this.dom.style.cursor=t||"default")},e.prototype.__togglePointerCapture=function(t){if(this.__mayPointerCapture=null,Ni&&+this.__pointerCapturing^+t){this.__pointerCapturing=t;var e=this._globalHandlerScope;t?Xi(this,e):qi(e)}},e}(Ut),Qi=1;r.hasGlobalWindow&&(Qi=Math.max(window.devicePixelRatio||window.screen&&window.screen.deviceXDPI/window.screen.logicalXDPI||1,1));var Ji=Qi,tr="#333",er="#ccc",nr=ge,ir=5e-5;function rr(t){return t>ir||t<-5e-5}var or=[],ar=[],sr=[1,0,0,1,0,0],lr=Math.abs,ur=function(){function t(){}return t.prototype.getLocalTransform=function(e){return t.getLocalTransform(this,e)},t.prototype.setPosition=function(t){this.x=t[0],this.y=t[1]},t.prototype.setScale=function(t){this.scaleX=t[0],this.scaleY=t[1]},t.prototype.setSkew=function(t){this.skewX=t[0],this.skewY=t[1]},t.prototype.setOrigin=function(t){this.originX=t[0],this.originY=t[1]},t.prototype.needLocalTransform=function(){return rr(this.rotation)||rr(this.x)||rr(this.y)||rr(this.scaleX-1)||rr(this.scaleY-1)||rr(this.skewX)||rr(this.skewY)},t.prototype.updateTransform=function(){var t=this.parent&&this.parent.transform,e=this.needLocalTransform(),n=this.transform;e||t?(n=n||[1,0,0,1,0,0],e?this.getLocalTransform(n):nr(n),t&&(e?ye(n,t,n):ve(n,t)),this.transform=n,this._resolveGlobalScaleRatio(n)):n&&(nr(n),this.invTransform=null)},t.prototype._resolveGlobalScaleRatio=function(t){var e=this.globalScaleRatio;if(null!=e&&1!==e){this.getGlobalScale(or);var n=or[0]<0?-1:1,i=or[1]<0?-1:1,r=((or[0]-n)*e+n)/or[0]||0,o=((or[1]-i)*e+i)/or[1]||0;t[0]*=r,t[1]*=r,t[2]*=o,t[3]*=o}this.invTransform=this.invTransform||[1,0,0,1,0,0],we(this.invTransform,t)},t.prototype.getComputedTransform=function(){for(var t=this,e=[];t;)e.push(t),t=t.parent;for(;t=e.pop();)t.updateTransform();return this.transform},t.prototype.setLocalTransform=function(t){if(t){var e=t[0]*t[0]+t[1]*t[1],n=t[2]*t[2]+t[3]*t[3],i=Math.atan2(t[1],t[0]),r=Math.PI/2+i-Math.atan2(t[3],t[2]);n=Math.sqrt(n)*Math.cos(r),e=Math.sqrt(e),this.skewX=r,this.skewY=0,this.rotation=-i,this.x=+t[4],this.y=+t[5],this.scaleX=e,this.scaleY=n,this.originX=0,this.originY=0}},t.prototype.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(t.invTransform=t.invTransform||[1,0,0,1,0,0],ye(ar,t.invTransform,e),e=ar);var n=this.originX,i=this.originY;(n||i)&&(sr[4]=n,sr[5]=i,ye(ar,e,sr),ar[4]-=n,ar[5]-=i,e=ar),this.setLocalTransform(e)}},t.prototype.getGlobalScale=function(t){var e=this.transform;return t=t||[],e?(t[0]=Math.sqrt(e[0]*e[0]+e[1]*e[1]),t[1]=Math.sqrt(e[2]*e[2]+e[3]*e[3]),e[0]<0&&(t[0]=-t[0]),e[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},t.prototype.transformCoordToLocal=function(t,e){var n=[t,e],i=this.invTransform;return i&&Bt(n,n,i),n},t.prototype.transformCoordToGlobal=function(t,e){var n=[t,e],i=this.transform;return i&&Bt(n,n,i),n},t.prototype.getLineScale=function(){var t=this.transform;return t&&lr(t[0]-1)>1e-10&&lr(t[3]-1)>1e-10?Math.sqrt(lr(t[0]*t[3]-t[2]*t[1])):1},t.prototype.copyTransform=function(t){cr(this,t)},t.getLocalTransform=function(t,e){e=e||[];var n=t.originX||0,i=t.originY||0,r=t.scaleX,o=t.scaleY,a=t.anchorX,s=t.anchorY,l=t.rotation||0,u=t.x,h=t.y,c=t.skewX?Math.tan(t.skewX):0,p=t.skewY?Math.tan(-t.skewY):0;if(n||i||a||s){var d=n+a,f=i+s;e[4]=-d*r-c*f*o,e[5]=-f*o-p*d*r}else e[4]=e[5]=0;return e[0]=r,e[3]=o,e[1]=p*r,e[2]=c*o,l&&_e(e,e,l),e[4]+=n+u,e[5]+=i+h,e},t.initDefaultProps=function(){var e=t.prototype;e.scaleX=e.scaleY=e.globalScaleRatio=1,e.x=e.y=e.originX=e.originY=e.skewX=e.skewY=e.rotation=e.anchorX=e.anchorY=0}(),t}(),hr=["x","y","originX","originY","anchorX","anchorY","rotation","scaleX","scaleY","skewX","skewY"];function cr(t,e){for(var n=0;n=0?parseFloat(t)/100*e:parseFloat(t):t}function xr(t,e,n){var i=e.position||"inside",r=null!=e.distance?e.distance:5,o=n.height,a=n.width,s=o/2,l=n.x,u=n.y,h="left",c="top";if(i instanceof Array)l+=_r(i[0],n.width),u+=_r(i[1],n.height),h=null,c=null;else switch(i){case"left":l-=r,u+=s,h="right",c="middle";break;case"right":l+=r+a,u+=s,c="middle";break;case"top":l+=a/2,u-=r,h="center",c="bottom";break;case"bottom":l+=a/2,u+=o+r,h="center";break;case"inside":l+=a/2,u+=s,h="center",c="middle";break;case"insideLeft":l+=r,u+=s,c="middle";break;case"insideRight":l+=a-r,u+=s,h="right",c="middle";break;case"insideTop":l+=a/2,u+=r,h="center";break;case"insideBottom":l+=a/2,u+=o-r,h="center",c="bottom";break;case"insideTopLeft":l+=r,u+=r;break;case"insideTopRight":l+=a-r,u+=r,h="right";break;case"insideBottomLeft":l+=r,u+=o-r,c="bottom";break;case"insideBottomRight":l+=a-r,u+=o-r,h="right",c="bottom"}return(t=t||{}).x=l,t.y=u,t.align=h,t.verticalAlign=c,t}var wr="__zr_normal__",br=hr.concat(["ignore"]),Sr=B(hr,(function(t,e){return t[e]=!0,t}),{ignore:!1}),Mr={},Cr=new Le(0,0,0,0),Tr=function(){function t(t){this.id=M(),this.animators=[],this.currentStates=[],this.states={},this._init(t)}return t.prototype._init=function(t){this.attr(t)},t.prototype.drift=function(t,e,n){switch(this.draggable){case"horizontal":e=0;break;case"vertical":t=0}var i=this.transform;i||(i=this.transform=[1,0,0,1,0,0]),i[4]+=t,i[5]+=e,this.decomposeTransform(),this.markRedraw()},t.prototype.beforeUpdate=function(){},t.prototype.afterUpdate=function(){},t.prototype.update=function(){this.updateTransform(),this.__dirty&&this.updateInnerText()},t.prototype.updateInnerText=function(t){var e=this._textContent;if(e&&(!e.ignore||t)){this.textConfig||(this.textConfig={});var n=this.textConfig,i=n.local,r=e.innerTransformable,o=void 0,a=void 0,s=!1;r.parent=i?this:null;var l=!1;if(r.copyTransform(e),null!=n.position){var u=Cr;n.layoutRect?u.copy(n.layoutRect):u.copy(this.getBoundingRect()),i||u.applyTransform(this.transform),this.calculateTextPosition?this.calculateTextPosition(Mr,n,u):xr(Mr,n,u),r.x=Mr.x,r.y=Mr.y,o=Mr.align,a=Mr.verticalAlign;var h=n.origin;if(h&&null!=n.rotation){var c=void 0,p=void 0;"center"===h?(c=.5*u.width,p=.5*u.height):(c=_r(h[0],u.width),p=_r(h[1],u.height)),l=!0,r.originX=-r.x+c+(i?0:u.x),r.originY=-r.y+p+(i?0:u.y)}}null!=n.rotation&&(r.rotation=n.rotation);var d=n.offset;d&&(r.x+=d[0],r.y+=d[1],l||(r.originX=-d[0],r.originY=-d[1]));var f=null==n.inside?"string"==typeof n.position&&n.position.indexOf("inside")>=0:n.inside,g=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={}),v=void 0,y=void 0,m=void 0;f&&this.canBeInsideText()?(v=n.insideFill,y=n.insideStroke,null!=v&&"auto"!==v||(v=this.getInsideTextFill()),null!=y&&"auto"!==y||(y=this.getInsideTextStroke(v),m=!0)):(v=n.outsideFill,y=n.outsideStroke,null!=v&&"auto"!==v||(v=this.getOutsideFill()),null!=y&&"auto"!==y||(y=this.getOutsideStroke(v),m=!0)),(v=v||"#000")===g.fill&&y===g.stroke&&m===g.autoStroke&&o===g.align&&a===g.verticalAlign||(s=!0,g.fill=v,g.stroke=y,g.autoStroke=m,g.align=o,g.verticalAlign=a,e.setDefaultTextStyle(g)),e.__dirty|=1,s&&e.dirtyStyle(!0)}},t.prototype.canBeInsideText=function(){return!0},t.prototype.getInsideTextFill=function(){return"#fff"},t.prototype.getInsideTextStroke=function(t){return"#000"},t.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?er:tr},t.prototype.getOutsideStroke=function(t){var e=this.__zr&&this.__zr.getBackgroundColor(),n="string"==typeof e&&Wn(e);n||(n=[255,255,255,1]);for(var i=n[3],r=this.__zr.isDarkMode(),o=0;o<3;o++)n[o]=n[o]*i+(r?0:255)*(1-i);return n[3]=1,Kn(n,"rgba")},t.prototype.traverse=function(t,e){},t.prototype.attrKV=function(t,e){"textConfig"===t?this.setTextConfig(e):"textContent"===t?this.setTextContent(e):"clipPath"===t?this.setClipPath(e):"extra"===t?(this.extra=this.extra||{},k(this.extra,e)):this[t]=e},t.prototype.hide=function(){this.ignore=!0,this.markRedraw()},t.prototype.show=function(){this.ignore=!1,this.markRedraw()},t.prototype.attr=function(t,e){if("string"==typeof t)this.attrKV(t,e);else if(j(t))for(var n=F(t),i=0;i0},t.prototype.getState=function(t){return this.states[t]},t.prototype.ensureState=function(t){var e=this.states;return e[t]||(e[t]={}),e[t]},t.prototype.clearStates=function(t){this.useState(wr,!1,t)},t.prototype.useState=function(t,e,n,i){var r=t===wr;if(this.hasState()||!r){var o=this.currentStates,a=this.stateTransition;if(!(L(o,t)>=0)||!e&&1!==o.length){var s;if(this.stateProxy&&!r&&(s=this.stateProxy(t)),s||(s=this.states&&this.states[t]),s||r){r||this.saveCurrentToNormalState(s);var l=!!(s&&s.hoverLayer||i);l&&this._toggleHoverLayerFlag(!0),this._applyStateObj(t,s,this._normalState,e,!n&&!this.__inHover&&a&&a.duration>0,a);var u=this._textContent,h=this._textGuide;return u&&u.useState(t,e,n,l),h&&h.useState(t,e,n,l),r?(this.currentStates=[],this._normalState={}):e?this.currentStates.push(t):this.currentStates=[t],this._updateAnimationTargets(),this.markRedraw(),!l&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=-2),s}C("State "+t+" not exists.")}}},t.prototype.useStates=function(t,e,n){if(t.length){var i=[],r=this.currentStates,o=t.length,a=o===r.length;if(a)for(var s=0;s0,d);var f=this._textContent,g=this._textGuide;f&&f.useStates(t,e,c),g&&g.useStates(t,e,c),this._updateAnimationTargets(),this.currentStates=t.slice(),this.markRedraw(),!c&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=-2)}else this.clearStates()},t.prototype.isSilent=function(){for(var t=this.silent,e=this.parent;!t&&e;){if(e.silent){t=!0;break}e=e.parent}return t},t.prototype._updateAnimationTargets=function(){for(var t=0;t=0){var n=this.currentStates.slice();n.splice(e,1),this.useStates(n)}},t.prototype.replaceState=function(t,e,n){var i=this.currentStates.slice(),r=L(i,t),o=L(i,e)>=0;r>=0?o?i.splice(r,1):i[r]=e:n&&!o&&i.push(e),this.useStates(i)},t.prototype.toggleState=function(t,e){e?this.useState(t,!0):this.removeState(t)},t.prototype._mergeStates=function(t){for(var e,n={},i=0;i=0&&e.splice(n,1)})),this.animators.push(t),n&&n.animation.addAnimator(t),n&&n.wakeUp()},t.prototype.updateDuringAnimation=function(t){this.markRedraw()},t.prototype.stopAnimation=function(t,e){for(var n=this.animators,i=n.length,r=[],o=0;o0&&n.during&&o[0].during((function(t,e){n.during(e)}));for(var p=0;p0||r.force&&!a.length){var b,S=void 0,M=void 0,C=void 0;if(s){M={},p&&(S={});for(x=0;x<_;x++){M[y=g[x]]=n[y],p?S[y]=i[y]:n[y]=i[y]}}else if(p){C={};for(x=0;x<_;x++){C[y=g[x]]=Mi(n[y]),kr(n,i,y)}}(b=new Ai(n,!1,!1,c?V(f,(function(t){return t.targetName===e})):null)).targetName=e,r.scope&&(b.scope=r.scope),p&&S&&b.whenWithKeys(0,S,g),C&&b.whenWithKeys(0,C,g),b.whenWithKeys(null==u?500:u,s?M:i,g).delay(h||0),t.addAnimator(b,e),a.push(b)}}R(Tr,Ut),R(Tr,ur);var Pr=function(t){function e(e){var n=t.call(this)||this;return n.isGroup=!0,n._children=[],n.attr(e),n}return n(e,t),e.prototype.childrenRef=function(){return this._children},e.prototype.children=function(){return this._children.slice()},e.prototype.childAt=function(t){return this._children[t]},e.prototype.childOfName=function(t){for(var e=this._children,n=0;n=0&&(n.splice(i,0,t),this._doAdd(t))}return this},e.prototype.replace=function(t,e){var n=L(this._children,t);return n>=0&&this.replaceAt(e,n),this},e.prototype.replaceAt=function(t,e){var n=this._children,i=n[e];if(t&&t!==this&&t.parent!==this&&t!==i){n[e]=t,i.parent=null;var r=this.__zr;r&&i.removeSelfFromZr(r),this._doAdd(t)}return this},e.prototype._doAdd=function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__zr;e&&e!==t.__zr&&t.addSelfToZr(e),e&&e.refresh()},e.prototype.remove=function(t){var e=this.__zr,n=this._children,i=L(n,t);return i<0||(n.splice(i,1),t.parent=null,e&&t.removeSelfFromZr(e),e&&e.refresh()),this},e.prototype.removeAll=function(){for(var t=this._children,e=this.__zr,n=0;n0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},t.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},t.prototype.wakeUp=function(){this.animation.start(),this._stillFrameAccum=0},t.prototype.refreshHover=function(){this._needsRefreshHover=!0},t.prototype.refreshHoverImmediately=function(){this._needsRefreshHover=!1,this.painter.refreshHover&&"canvas"===this.painter.getType()&&this.painter.refreshHover()},t.prototype.resize=function(t){t=t||{},this.painter.resize(t.width,t.height),this.handler.resize()},t.prototype.clearAnimation=function(){this.animation.clear()},t.prototype.getWidth=function(){return this.painter.getWidth()},t.prototype.getHeight=function(){return this.painter.getHeight()},t.prototype.setCursorStyle=function(t){this.handler.setCursorStyle(t)},t.prototype.findHover=function(t,e){return this.handler.findHover(t,e)},t.prototype.on=function(t,e,n){return this.handler.on(t,e,n),this},t.prototype.off=function(t,e){this.handler.off(t,e)},t.prototype.trigger=function(t,e){this.handler.trigger(t,e)},t.prototype.clear=function(){for(var t=this.storage.getRoots(),e=0;e0){if(t<=r)return a;if(t>=o)return s}else{if(t>=r)return a;if(t<=o)return s}else{if(t===r)return a;if(t===o)return s}return(t-r)/l*u+a}function Dr(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return Z(t)?(n=t,n.replace(/^\s+|\s+$/g,"")).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t;var n}function kr(t,e,n){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),n?t:+t}function Ar(t){return t.sort((function(t,e){return t-e})),t}function Pr(t){if(t=+t,isNaN(t))return 0;if(t>1e-14)for(var e=1,n=0;n<15;n++,e*=10)if(Math.round(t*e)/e===t)return n;return Lr(t)}function Lr(t){var e=t.toString().toLowerCase(),n=e.indexOf("e"),i=n>0?+e.slice(n+1):0,r=n>0?n:e.length,o=e.indexOf("."),a=o<0?0:r-1-o;return Math.max(0,a-i)}function Or(t,e){var n=Math.log,i=Math.LN10,r=Math.floor(n(t[1]-t[0])/i),o=Math.round(n(Math.abs(e[1]-e[0]))/i),a=Math.min(Math.max(-r+o,0),20);return isFinite(a)?a:20}function Rr(t,e,n){if(!t[e])return 0;var i=B(t,(function(t,e){return t+(isNaN(e)?0:e)}),0);if(0===i)return 0;for(var r=Math.pow(10,n),o=z(t,(function(t){return(isNaN(t)?0:t)/i*r*100})),a=100*r,s=z(o,(function(t){return Math.floor(t)})),l=B(s,(function(t,e){return t+e}),0),u=z(o,(function(t,e){return t-s[e]}));lh&&(h=u[p],c=p);++s[c],u[c]=0,++l}return s[e]/r}function Nr(t,e){var n=Math.max(Pr(t),Pr(e)),i=t+e;return n>20?i:kr(i,n)}function Er(t){var e=2*Math.PI;return(t%e+e)%e}function zr(t){return t>-1e-4&&t=10&&e++,e}function Wr(t,e){var n=Hr(t),i=Math.pow(10,n),r=t/i;return t=(e?r<1.5?1:r<2.5?2:r<4?3:r<7?5:10:r<1?1:r<2?2:r<3?3:r<5?5:10)*i,n>=-20?+t.toFixed(n<0?-n:0):t}function Gr(t){var e=parseFloat(t);return e==t&&(0!==e||!Z(t)||t.indexOf("x")<=0)?e:NaN}function Ur(t){return!isNaN(Gr(t))}function Zr(){return Math.round(9*Math.random())}function Yr(t,e){return 0===e?t:Yr(e,t%e)}function Xr(t,e){return null==t?e:null==e?t:t*e/Yr(t,e)}"undefined"!=typeof console&&console.warn&&console.log;function jr(t){0}function qr(t){throw new Error(t)}function Kr(t,e,n){return(e-t)*n+t}var $r="series\0",Qr="\0_ec_\0";function Jr(t){return t instanceof Array?t:null==t?[]:[t]}function to(t,e,n){if(t){t[e]=t[e]||{},t.emphasis=t.emphasis||{},t.emphasis[e]=t.emphasis[e]||{};for(var i=0,r=n.length;i=0||r&&L(r,s)<0)){var l=n.getShallow(s,e);null!=l&&(o[t[a][0]]=l)}}return o}}var Ao=ko([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]]),Po=function(){function t(){}return t.prototype.getAreaStyle=function(t,e){return Ao(this,t,e)},t}(),Lo=new en(50);function Oo(t){if("string"==typeof t){var e=Lo.get(t);return e&&e.image}return t}function Ro(t,e,n,i,r){if(t){if("string"==typeof t){if(e&&e.__zrImageSrc===t||!n)return e;var o=Lo.get(t),a={hostEl:n,cb:i,cbPayload:r};return o?!Eo(e=o.image)&&o.pending.push(a):((e=h.loadImage(t,No,No)).__zrImageSrc=t,Lo.put(t,e.__cachedImgObj={image:e,pending:[a]})),e}return t}return e}function No(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;e=a;l++)s-=a;var u=er(n,e);return u>s&&(n="",u=0),s=t-u,r.ellipsis=n,r.ellipsisWidth=u,r.contentWidth=s,r.containerWidth=t,r}function Fo(t,e){var n=e.containerWidth,i=e.font,r=e.contentWidth;if(!n)return"";var o=er(t,i);if(o<=n)return t;for(var a=0;;a++){if(o<=r||a>=e.maxIterations){t+=e.ellipsis;break}var s=0===a?Ho(t,r,e.ascCharWidth,e.cnCharWidth):o>0?Math.floor(t.length*r/o):0;o=er(t=t.substr(0,s),i)}return""===t&&(t=e.placeholder),t}function Ho(t,e,n,i){for(var r=0,o=0,a=t.length;o0&&f+i.accumWidth>i.width&&(o=e.split("\n"),c=!0),i.accumWidth=f}else{var g=jo(e,h,i.width,i.breakAll,i.accumWidth);i.accumWidth=g.accumWidth+d,a=g.linesWidths,o=g.lines}}else o=e.split("\n");for(var v=0;v=33&&e<=383}(t)||!!Yo[t]}function jo(t,e,n,i,r){for(var o=[],a=[],s="",l="",u=0,h=0,c=0;cn:r+h+d>n)?h?(s||l)&&(f?(s||(s=l,l="",h=u=0),o.push(s),a.push(h-u),l+=p,s="",h=u+=d):(l&&(s+=l,l="",u=0),o.push(s),a.push(h),s=p,h=d)):f?(o.push(l),a.push(u),l=p,u=d):(o.push(p),a.push(d)):(h+=d,f?(l+=p,u+=d):(l&&(s+=l,l="",u=0),s+=p))}else l&&(s+=l,h+=u),o.push(s),a.push(h),s="",l="",u=0,h=0}return o.length||s||(s=t,l="",u=0),l&&(s+=l),s&&(o.push(s),a.push(h)),1===o.length&&(h+=r),{accumWidth:h,lines:o,linesWidths:a}}var qo="__zr_style_"+Math.round(10*Math.random()),Ko={shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"#000",opacity:1,blend:"source-over"},$o={style:{shadowBlur:!0,shadowOffsetX:!0,shadowOffsetY:!0,shadowColor:!0,opacity:!0}};Ko[qo]=!0;var Qo=["z","z2","invisible"],Jo=["invisible"],ta=function(t){function e(e){return t.call(this,e)||this}var i;return n(e,t),e.prototype._init=function(e){for(var n=F(e),i=0;i1e-4)return s[0]=t-n,s[1]=e-i,l[0]=t+n,void(l[1]=e+i);if(la[0]=aa(r)*n+t,la[1]=oa(r)*i+e,ua[0]=aa(o)*n+t,ua[1]=oa(o)*i+e,u(s,la,ua),h(l,la,ua),(r%=sa)<0&&(r+=sa),(o%=sa)<0&&(o+=sa),r>o&&!a?o+=sa:rr&&(ha[0]=aa(d)*n+t,ha[1]=oa(d)*i+e,u(s,ha,s),h(l,ha,l))}var ya={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},ma=[],_a=[],xa=[],wa=[],ba=[],Sa=[],Ma=Math.min,Ca=Math.max,Ia=Math.cos,Ta=Math.sin,Da=Math.abs,ka=Math.PI,Aa=2*ka,Pa="undefined"!=typeof Float32Array,La=[];function Oa(t){return Math.round(t/ka*1e8)/1e8%2*ka}var Ra=function(){function t(t){this.dpr=1,this._xi=0,this._yi=0,this._x0=0,this._y0=0,this._len=0,t&&(this._saveData=!1),this._saveData&&(this.data=[])}return t.prototype.increaseVersion=function(){this._version++},t.prototype.getVersion=function(){return this._version},t.prototype.setScale=function(t,e,n){(n=n||0)>0&&(this._ux=Da(n/bi/t)||0,this._uy=Da(n/bi/e)||0)},t.prototype.setDPR=function(t){this.dpr=t},t.prototype.setContext=function(t){this._ctx=t},t.prototype.getContext=function(){return this._ctx},t.prototype.beginPath=function(){return this._ctx&&this._ctx.beginPath(),this.reset(),this},t.prototype.reset=function(){this._saveData&&(this._len=0),this._pathSegLen&&(this._pathSegLen=null,this._pathLen=0),this._version++},t.prototype.moveTo=function(t,e){return this._drawPendingPt(),this.addData(ya.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},t.prototype.lineTo=function(t,e){var n=Da(t-this._xi),i=Da(e-this._yi),r=n>this._ux||i>this._uy;if(this.addData(ya.L,t,e),this._ctx&&r&&this._ctx.lineTo(t,e),r)this._xi=t,this._yi=e,this._pendingPtDist=0;else{var o=n*n+i*i;o>this._pendingPtDist&&(this._pendingPtX=t,this._pendingPtY=e,this._pendingPtDist=o)}return this},t.prototype.bezierCurveTo=function(t,e,n,i,r,o){return this._drawPendingPt(),this.addData(ya.C,t,e,n,i,r,o),this._ctx&&this._ctx.bezierCurveTo(t,e,n,i,r,o),this._xi=r,this._yi=o,this},t.prototype.quadraticCurveTo=function(t,e,n,i){return this._drawPendingPt(),this.addData(ya.Q,t,e,n,i),this._ctx&&this._ctx.quadraticCurveTo(t,e,n,i),this._xi=n,this._yi=i,this},t.prototype.arc=function(t,e,n,i,r,o){this._drawPendingPt(),La[0]=i,La[1]=r,function(t,e){var n=Oa(t[0]);n<0&&(n+=Aa);var i=n-t[0],r=t[1];r+=i,!e&&r-n>=Aa?r=n+Aa:e&&n-r>=Aa?r=n-Aa:!e&&n>r?r=n+(Aa-Oa(n-r)):e&&nu.length&&(this._expandData(),u=this.data);for(var h=0;h0&&(this._ctx&&this._ctx.lineTo(this._pendingPtX,this._pendingPtY),this._pendingPtDist=0)},t.prototype._expandData=function(){if(!(this.data instanceof Array)){for(var t=[],e=0;e11&&(this.data=new Float32Array(t)))}},t.prototype.getBoundingRect=function(){xa[0]=xa[1]=ba[0]=ba[1]=Number.MAX_VALUE,wa[0]=wa[1]=Sa[0]=Sa[1]=-Number.MAX_VALUE;var t,e=this.data,n=0,i=0,r=0,o=0;for(t=0;tn||Da(v)>i||c===e-1)&&(f=Math.sqrt(k*k+v*v),r=g,o=_);break;case ya.C:var y=t[c++],m=t[c++],_=(g=t[c++],t[c++]),x=t[c++],w=t[c++];f=Ue(r,o,y,m,g,_,x,w,10),r=x,o=w;break;case ya.Q:f=qe(r,o,y=t[c++],m=t[c++],g=t[c++],_=t[c++],10),r=g,o=_;break;case ya.A:var b=t[c++],S=t[c++],M=t[c++],C=t[c++],I=t[c++],T=t[c++],D=T+I;c+=1;t[c++];d&&(a=Ia(I)*M+b,s=Ta(I)*C+S),f=Ca(M,C)*Ma(Aa,Math.abs(T)),r=Ia(D)*M+b,o=Ta(D)*C+S;break;case ya.R:a=r=t[c++],s=o=t[c++],f=2*t[c++]+2*t[c++];break;case ya.Z:var k=a-r;v=s-o;f=Math.sqrt(k*k+v*v),r=a,o=s}f>=0&&(l[h++]=f,u+=f)}return this._pathLen=u,u},t.prototype.rebuildPath=function(t,e){var n,i,r,o,a,s,l,u,h,c,p=this.data,d=this._ux,f=this._uy,g=this._len,v=e<1,y=0,m=0,_=0;if(!v||(this._pathSegLen||this._calculateLength(),l=this._pathSegLen,u=e*this._pathLen))t:for(var x=0;x0&&(t.lineTo(h,c),_=0),w){case ya.M:n=r=p[x++],i=o=p[x++],t.moveTo(r,o);break;case ya.L:a=p[x++],s=p[x++];var S=Da(a-r),M=Da(s-o);if(S>d||M>f){if(v){if(y+(j=l[m++])>u){var C=(u-y)/j;t.lineTo(r*(1-C)+a*C,o*(1-C)+s*C);break t}y+=j}t.lineTo(a,s),r=a,o=s,_=0}else{var I=S*S+M*M;I>_&&(h=a,c=s,_=I)}break;case ya.C:var T=p[x++],D=p[x++],k=p[x++],A=p[x++],P=p[x++],L=p[x++];if(v){if(y+(j=l[m++])>u){Ge(r,T,k,P,C=(u-y)/j,ma),Ge(o,D,A,L,C,_a),t.bezierCurveTo(ma[1],_a[1],ma[2],_a[2],ma[3],_a[3]);break t}y+=j}t.bezierCurveTo(T,D,k,A,P,L),r=P,o=L;break;case ya.Q:T=p[x++],D=p[x++],k=p[x++],A=p[x++];if(v){if(y+(j=l[m++])>u){je(r,T,k,C=(u-y)/j,ma),je(o,D,A,C,_a),t.quadraticCurveTo(ma[1],_a[1],ma[2],_a[2]);break t}y+=j}t.quadraticCurveTo(T,D,k,A),r=k,o=A;break;case ya.A:var O=p[x++],R=p[x++],N=p[x++],E=p[x++],z=p[x++],B=p[x++],V=p[x++],F=!p[x++],H=N>E?N:E,W=Da(N-E)>.001,G=z+B,U=!1;if(v)y+(j=l[m++])>u&&(G=z+B*(u-y)/j,U=!0),y+=j;if(W&&t.ellipse?t.ellipse(O,R,N,E,V,z,G,F):t.arc(O,R,H,z,G,F),U)break t;b&&(n=Ia(z)*N+O,i=Ta(z)*E+R),r=Ia(G)*N+O,o=Ta(G)*E+R;break;case ya.R:n=r=p[x],i=o=p[x+1],a=p[x++],s=p[x++];var Z=p[x++],Y=p[x++];if(v){if(y+(j=l[m++])>u){var X=u-y;t.moveTo(a,s),t.lineTo(a+Ma(X,Z),s),(X-=Z)>0&&t.lineTo(a+Z,s+Ma(X,Y)),(X-=Y)>0&&t.lineTo(a+Ca(Z-X,0),s+Y),(X-=Z)>0&&t.lineTo(a,s+Ca(Y-X,0));break t}y+=j}t.rect(a,s,Z,Y);break;case ya.Z:if(v){var j;if(y+(j=l[m++])>u){C=(u-y)/j;t.lineTo(r*(1-C)+n*C,o*(1-C)+i*C);break t}y+=j}t.closePath(),r=n,o=i}}},t.prototype.clone=function(){var e=new t,n=this.data;return e.data=n.slice?n.slice():Array.prototype.slice.call(n),e._len=this._len,e},t.CMD=ya,t.initDefaultProps=function(){var e=t.prototype;e._saveData=!0,e._ux=0,e._uy=0,e._pendingPtDist=0,e._version=0}(),t}();function Na(t,e,n,i,r,o,a){if(0===r)return!1;var s=r,l=0;if(a>e+s&&a>i+s||at+s&&o>n+s||oe+c&&h>i+c&&h>o+c&&h>s+c||ht+c&&u>n+c&&u>r+c&&u>a+c||u=0&&fe+u&&l>i+u&&l>o+u||lt+u&&s>n+u&&s>r+u||s=0&&vn||h+ur&&(r+=Fa);var p=Math.atan2(l,s);return p<0&&(p+=Fa),p>=i&&p<=r||p+Fa>=i&&p+Fa<=r}function Wa(t,e,n,i,r,o){if(o>e&&o>i||or?s:0}var Ga=Ra.CMD,Ua=2*Math.PI;var Za=[-1,-1,-1],Ya=[-1,-1];function Xa(t,e,n,i,r,o,a,s,l,u){if(u>e&&u>i&&u>o&&u>s||u1&&(h=void 0,h=Ya[0],Ya[0]=Ya[1],Ya[1]=h),f=Ve(e,i,o,s,Ya[0]),d>1&&(g=Ve(e,i,o,s,Ya[1]))),2===d?ye&&s>i&&s>o||s=0&&h<=1&&(r[l++]=h);else{var u=a*a-4*o*s;if(ze(u))(h=-a/(2*o))>=0&&h<=1&&(r[l++]=h);else if(u>0){var h,c=ke(u),p=(-a-c)/(2*o);(h=(-a+c)/(2*o))>=0&&h<=1&&(r[l++]=h),p>=0&&p<=1&&(r[l++]=p)}}return l}(e,i,o,s,Za);if(0===l)return 0;var u=Xe(e,i,o);if(u>=0&&u<=1){for(var h=0,c=Ze(e,i,o,u),p=0;pn||s<-n)return 0;var l=Math.sqrt(n*n-s*s);Za[0]=-l,Za[1]=l;var u=Math.abs(i-r);if(u<1e-4)return 0;if(u>=Ua-1e-4){i=0,r=Ua;var h=o?1:-1;return a>=Za[0]+t&&a<=Za[1]+t?h:0}if(i>r){var c=i;i=r,r=c}i<0&&(i+=Ua,r+=Ua);for(var p=0,d=0;d<2;d++){var f=Za[d];if(f+t>a){var g=Math.atan2(s,f);h=o?1:-1;g<0&&(g=Ua+g),(g>=i&&g<=r||g+Ua>=i&&g+Ua<=r)&&(g>Math.PI/2&&g<1.5*Math.PI&&(h=-h),p+=h)}}return p}function Ka(t,e,n,i,r){for(var o,a,s,l,u=t.data,h=t.len(),c=0,p=0,d=0,f=0,g=0,v=0;v1&&(n||(c+=Wa(p,d,f,g,i,r))),m&&(f=p=u[v],g=d=u[v+1]),y){case Ga.M:p=f=u[v++],d=g=u[v++];break;case Ga.L:if(n){if(Na(p,d,u[v],u[v+1],e,i,r))return!0}else c+=Wa(p,d,u[v],u[v+1],i,r)||0;p=u[v++],d=u[v++];break;case Ga.C:if(n){if(Ea(p,d,u[v++],u[v++],u[v++],u[v++],u[v],u[v+1],e,i,r))return!0}else c+=Xa(p,d,u[v++],u[v++],u[v++],u[v++],u[v],u[v+1],i,r)||0;p=u[v++],d=u[v++];break;case Ga.Q:if(n){if(za(p,d,u[v++],u[v++],u[v],u[v+1],e,i,r))return!0}else c+=ja(p,d,u[v++],u[v++],u[v],u[v+1],i,r)||0;p=u[v++],d=u[v++];break;case Ga.A:var _=u[v++],x=u[v++],w=u[v++],b=u[v++],S=u[v++],M=u[v++];v+=1;var C=!!(1-u[v++]);o=Math.cos(S)*w+_,a=Math.sin(S)*b+x,m?(f=o,g=a):c+=Wa(p,d,o,a,i,r);var I=(i-_)*b/w+_;if(n){if(Ha(_,x,b,S,S+M,C,e,I,r))return!0}else c+=qa(_,x,b,S,S+M,C,I,r);p=Math.cos(S+M)*w+_,d=Math.sin(S+M)*b+x;break;case Ga.R:if(f=p=u[v++],g=d=u[v++],o=f+u[v++],a=g+u[v++],n){if(Na(f,g,o,g,e,i,r)||Na(o,g,o,a,e,i,r)||Na(o,a,f,a,e,i,r)||Na(f,a,f,g,e,i,r))return!0}else c+=Wa(o,g,o,a,i,r),c+=Wa(f,a,f,g,i,r);break;case Ga.Z:if(n){if(Na(p,d,f,g,e,i,r))return!0}else c+=Wa(p,d,f,g,i,r);p=f,d=g}}return n||(s=d,l=g,Math.abs(s-l)<1e-4)||(c+=Wa(p,d,f,g,i,r)||0),0!==c}var $a=A({fill:"#000",stroke:null,strokePercent:1,fillOpacity:1,strokeOpacity:1,lineDashOffset:0,lineWidth:1,lineCap:"butt",miterLimit:10,strokeNoScale:!1,strokeFirst:!1},Ko),Qa={style:A({fill:!0,stroke:!0,strokePercent:!0,fillOpacity:!0,strokeOpacity:!0,lineDashOffset:!0,lineWidth:!0,miterLimit:!0},$o.style)},Ja=Wi.concat(["invisible","culling","z","z2","zlevel","parent"]),ts=function(t){function e(e){return t.call(this,e)||this}var i;return n(e,t),e.prototype.update=function(){var n=this;t.prototype.update.call(this);var i=this.style;if(i.decal){var r=this._decalEl=this._decalEl||new e;r.buildPath===e.prototype.buildPath&&(r.buildPath=function(t){n.buildPath(t,n.shape)}),r.silent=!0;var o=r.style;for(var a in i)o[a]!==i[a]&&(o[a]=i[a]);o.fill=i.fill?i.decal:null,o.decal=null,o.shadowColor=null,i.strokeFirst&&(o.stroke=null);for(var s=0;s.5?Si:e>.2?"#eee":Mi}if(t)return Mi}return Si},e.prototype.getInsideTextStroke=function(t){var e=this.style.fill;if(Z(e)){var n=this.__zr;if(!(!n||!n.isDarkMode())===Mn(t,0)<.4)return e}},e.prototype.buildPath=function(t,e,n){},e.prototype.pathUpdated=function(){this.__dirty&=-5},e.prototype.getUpdatedPathProxy=function(t){return!this.path&&this.createPathProxy(),this.path.beginPath(),this.buildPath(this.path,this.shape,t),this.path},e.prototype.createPathProxy=function(){this.path=new Ra(!1)},e.prototype.hasStroke=function(){var t=this.style,e=t.stroke;return!(null==e||"none"===e||!(t.lineWidth>0))},e.prototype.hasFill=function(){var t=this.style.fill;return null!=t&&"none"!==t},e.prototype.getBoundingRect=function(){var t=this._rect,e=this.style,n=!t;if(n){var i=!1;this.path||(i=!0,this.createPathProxy());var r=this.path;(i||4&this.__dirty)&&(r.beginPath(),this.buildPath(r,this.shape,!1),this.pathUpdated()),t=r.getBoundingRect()}if(this._rect=t,this.hasStroke()&&this.path&&this.path.len()>0){var o=this._rectStroke||(this._rectStroke=t.clone());if(this.__dirty||n){o.copy(t);var a=e.strokeNoScale?this.getLineScale():1,s=e.lineWidth;if(!this.hasFill()){var l=this.strokeContainThreshold;s=Math.max(s,null==l?4:l)}a>1e-10&&(o.width+=s/a,o.height+=s/a,o.x-=s/a/2,o.y-=s/a/2)}return o}return t},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect(),r=this.style;if(t=n[0],e=n[1],i.contain(t,e)){var o=this.path;if(this.hasStroke()){var a=r.lineWidth,s=r.strokeNoScale?this.getLineScale():1;if(s>1e-10&&(this.hasFill()||(a=Math.max(a,this.strokeContainThreshold)),function(t,e,n,i){return Ka(t,e,!0,n,i)}(o,a/s,t,e)))return!0}if(this.hasFill())return function(t,e,n){return Ka(t,0,!1,e,n)}(o,t,e)}return!1},e.prototype.dirtyShape=function(){this.__dirty|=4,this._rect&&(this._rect=null),this._decalEl&&this._decalEl.dirtyShape(),this.markRedraw()},e.prototype.dirty=function(){this.dirtyStyle(),this.dirtyShape()},e.prototype.animateShape=function(t){return this.animate("shape",t)},e.prototype.updateDuringAnimation=function(t){"style"===t?this.dirtyStyle():"shape"===t?this.dirtyShape():this.markRedraw()},e.prototype.attrKV=function(e,n){"shape"===e?this.setShape(n):t.prototype.attrKV.call(this,e,n)},e.prototype.setShape=function(t,e){var n=this.shape;return n||(n=this.shape={}),"string"==typeof t?n[t]=e:k(n,t),this.dirtyShape(),this},e.prototype.shapeChanged=function(){return!!(4&this.__dirty)},e.prototype.createStyle=function(t){return gt($a,t)},e.prototype._innerSaveToNormal=function(e){t.prototype._innerSaveToNormal.call(this,e);var n=this._normalState;e.shape&&!n.shape&&(n.shape=k({},this.shape))},e.prototype._applyStateObj=function(e,n,i,r,o,a){t.prototype._applyStateObj.call(this,e,n,i,r,o,a);var s,l=!(n&&r);if(n&&n.shape?o?r?s=n.shape:(s=k({},i.shape),k(s,n.shape)):(s=k({},r?this.shape:i.shape),k(s,n.shape)):l&&(s=i.shape),s)if(o){this.shape=k({},this.shape);for(var u={},h=F(s),c=0;c0},e.prototype.hasFill=function(){var t=this.style.fill;return null!=t&&"none"!==t},e.prototype.createStyle=function(t){return gt(es,t)},e.prototype.setBoundingRect=function(t){this._rect=t},e.prototype.getBoundingRect=function(){var t=this.style;if(!this._rect){var e=t.text;null!=e?e+="":e="";var n=ir(e,t.font,t.textAlign,t.textBaseline);if(n.x+=t.x||0,n.y+=t.y||0,this.hasStroke()){var i=t.lineWidth;n.x-=i/2,n.y-=i/2,n.width+=i,n.height+=i}this._rect=n}return this._rect},e.initDefaultProps=void(e.prototype.dirtyRectTolerance=10),e}(ta);ns.prototype.type="tspan";var is=A({x:0,y:0},Ko),rs={style:A({x:!0,y:!0,width:!0,height:!0,sx:!0,sy:!0,sWidth:!0,sHeight:!0},$o.style)};var os=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.createStyle=function(t){return gt(is,t)},e.prototype._getSize=function(t){var e=this.style,n=e[t];if(null!=n)return n;var i,r=(i=e.image)&&"string"!=typeof i&&i.width&&i.height?e.image:this.__image;if(!r)return 0;var o="width"===t?"height":"width",a=e[o];return null==a?r[t]:r[t]/r[o]*a},e.prototype.getWidth=function(){return this._getSize("width")},e.prototype.getHeight=function(){return this._getSize("height")},e.prototype.getAnimationStyleProps=function(){return rs},e.prototype.getBoundingRect=function(){var t=this.style;return this._rect||(this._rect=new Ji(t.x||0,t.y||0,this.getWidth(),this.getHeight())),this._rect},e}(ta);os.prototype.type="image";var as=Math.round;function ss(t,e,n){if(e){var i=e.x1,r=e.x2,o=e.y1,a=e.y2;t.x1=i,t.x2=r,t.y1=o,t.y2=a;var s=n&&n.lineWidth;return s?(as(2*i)===as(2*r)&&(t.x1=t.x2=us(i,s,!0)),as(2*o)===as(2*a)&&(t.y1=t.y2=us(o,s,!0)),t):t}}function ls(t,e,n){if(e){var i=e.x,r=e.y,o=e.width,a=e.height;t.x=i,t.y=r,t.width=o,t.height=a;var s=n&&n.lineWidth;return s?(t.x=us(i,s,!0),t.y=us(r,s,!0),t.width=Math.max(us(i+o,s,!1)-t.x,0===o?0:1),t.height=Math.max(us(r+a,s,!1)-t.y,0===a?0:1),t):t}}function us(t,e,n){if(!e)return t;var i=as(2*t);return(i+as(e))%2==0?i/2:(i+(n?1:-1))/2}var hs=function(){this.x=0,this.y=0,this.width=0,this.height=0},cs={},ps=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new hs},e.prototype.buildPath=function(t,e){var n,i,r,o;if(this.subPixelOptimize){var a=ls(cs,e,this.style);n=a.x,i=a.y,r=a.width,o=a.height,a.r=e.r,e=a}else n=e.x,i=e.y,r=e.width,o=e.height;e.r?function(t,e){var n,i,r,o,a,s=e.x,l=e.y,u=e.width,h=e.height,c=e.r;u<0&&(s+=u,u=-u),h<0&&(l+=h,h=-h),"number"==typeof c?n=i=r=o=c:c instanceof Array?1===c.length?n=i=r=o=c[0]:2===c.length?(n=r=c[0],i=o=c[1]):3===c.length?(n=c[0],i=o=c[1],r=c[2]):(n=c[0],i=c[1],r=c[2],o=c[3]):n=i=r=o=0,n+i>u&&(n*=u/(a=n+i),i*=u/a),r+o>u&&(r*=u/(a=r+o),o*=u/a),i+r>h&&(i*=h/(a=i+r),r*=h/a),n+o>h&&(n*=h/(a=n+o),o*=h/a),t.moveTo(s+n,l),t.lineTo(s+u-i,l),0!==i&&t.arc(s+u-i,l+i,i,-Math.PI/2,0),t.lineTo(s+u,l+h-r),0!==r&&t.arc(s+u-r,l+h-r,r,0,Math.PI/2),t.lineTo(s+o,l+h),0!==o&&t.arc(s+o,l+h-o,o,Math.PI/2,Math.PI),t.lineTo(s,l+n),0!==n&&t.arc(s+n,l+n,n,Math.PI,1.5*Math.PI)}(t,e):t.rect(n,i,r,o)},e.prototype.isZeroArea=function(){return!this.shape.width||!this.shape.height},e}(ts);ps.prototype.type="rect";var ds={fill:"#000"},fs={style:A({fill:!0,stroke:!0,fillOpacity:!0,strokeOpacity:!0,lineWidth:!0,fontSize:!0,lineHeight:!0,width:!0,height:!0,textShadowColor:!0,textShadowBlur:!0,textShadowOffsetX:!0,textShadowOffsetY:!0,backgroundColor:!0,padding:!0,borderColor:!0,borderWidth:!0,borderRadius:!0},$o.style)},gs=function(t){function e(e){var n=t.call(this)||this;return n.type="text",n._children=[],n._defaultStyle=ds,n.attr(e),n}return n(e,t),e.prototype.childrenRef=function(){return this._children},e.prototype.update=function(){t.prototype.update.call(this),this.styleChanged()&&this._updateSubTexts();for(var e=0;ed&&h){var f=Math.floor(d/l);n=n.slice(0,f)}if(t&&a&&null!=c)for(var g=Vo(c,o,e.ellipsis,{minChar:e.truncateMinChar,placeholder:e.placeholder}),v=0;v0,I=null!=t.width&&("truncate"===t.overflow||"break"===t.overflow||"breakAll"===t.overflow),T=i.calculatedLineHeight,D=0;Dl&&Zo(n,t.substring(l,u),e,s),Zo(n,i[2],e,s,i[1]),l=zo.lastIndex}lo){w>0?(m.tokens=m.tokens.slice(0,w),v(m,x,_),n.lines=n.lines.slice(0,y+1)):n.lines=n.lines.slice(0,y);break t}var T=b.width,D=null==T||"auto"===T;if("string"==typeof T&&"%"===T.charAt(T.length-1))L.percentWidth=T,h.push(L),L.contentWidth=er(L.text,C);else{if(D){var k=b.backgroundColor,A=k&&k.image;A&&Eo(A=Oo(A))&&(L.width=Math.max(L.width,A.width*I/A.height))}var P=f&&null!=r?r-x:null;null!=P&&P=0&&"right"===(T=_[I]).align;)this._placeToken(T,t,w,f,C,"right",v),b-=T.width,C-=T.width,I--;for(M+=(n-(M-d)-(g-C)-b)/2;S<=I;)T=_[S],this._placeToken(T,t,w,f,M+T.width/2,"center",v),M+=T.width,S++;f+=w}},e.prototype._placeToken=function(t,e,n,i,r,o,s){var l=e.rich[t.styleName]||{};l.text=t.text;var u=t.verticalAlign,h=i+n/2;"top"===u?h=i+t.height/2:"bottom"===u&&(h=i+n-t.height/2),!t.isLineHolder&&Ts(l)&&this._renderBackground(l,e,"right"===o?r-t.width:"center"===o?r-t.width/2:r,h-t.height/2,t.width,t.height);var c=!!l.backgroundColor,p=t.textPadding;p&&(r=Cs(r,o,p),h-=t.height/2-p[0]-t.innerHeight/2);var d=this._getOrCreateChild(ns),f=d.createStyle();d.useStyle(f);var g=this._defaultStyle,v=!1,y=0,m=Ms("fill"in l?l.fill:"fill"in e?e.fill:(v=!0,g.fill)),_=Ss("stroke"in l?l.stroke:"stroke"in e?e.stroke:c||s||g.autoStroke&&!v?null:(y=2,g.stroke)),x=l.textShadowBlur>0||e.textShadowBlur>0;f.text=t.text,f.x=r,f.y=h,x&&(f.shadowBlur=l.textShadowBlur||e.textShadowBlur||0,f.shadowColor=l.textShadowColor||e.textShadowColor||"transparent",f.shadowOffsetX=l.textShadowOffsetX||e.textShadowOffsetX||0,f.shadowOffsetY=l.textShadowOffsetY||e.textShadowOffsetY||0),f.textAlign=o,f.textBaseline="middle",f.font=t.font||a,f.opacity=rt(l.opacity,e.opacity,1),xs(f,l),_&&(f.lineWidth=rt(l.lineWidth,e.lineWidth,y),f.lineDash=it(l.lineDash,e.lineDash),f.lineDashOffset=e.lineDashOffset||0,f.stroke=_),m&&(f.fill=m);var w=t.contentWidth,b=t.contentHeight;d.setBoundingRect(new Ji(rr(f.x,w,f.textAlign),or(f.y,b,f.textBaseline),w,b))},e.prototype._renderBackground=function(t,e,n,i,r,o){var a,s,l,u=t.backgroundColor,h=t.borderWidth,c=t.borderColor,p=u&&u.image,d=u&&!p,f=t.borderRadius,g=this;if(d||t.lineHeight||h&&c){(a=this._getOrCreateChild(ps)).useStyle(a.createStyle()),a.style.fill=null;var v=a.shape;v.x=n,v.y=i,v.width=r,v.height=o,v.r=f,a.dirtyShape()}if(d)(l=a.style).fill=u||null,l.fillOpacity=it(t.fillOpacity,1);else if(p){(s=this._getOrCreateChild(os)).onload=function(){g.dirtyStyle()};var y=s.style;y.image=u.image,y.x=n,y.y=i,y.width=r,y.height=o}h&&c&&((l=a.style).lineWidth=h,l.stroke=c,l.strokeOpacity=it(t.strokeOpacity,1),l.lineDash=t.borderDash,l.lineDashOffset=t.borderDashOffset||0,a.strokeContainThreshold=0,a.hasFill()&&a.hasStroke()&&(l.strokeFirst=!0,l.lineWidth*=2));var m=(a||s).style;m.shadowBlur=t.shadowBlur||0,m.shadowColor=t.shadowColor||"transparent",m.shadowOffsetX=t.shadowOffsetX||0,m.shadowOffsetY=t.shadowOffsetY||0,m.opacity=rt(t.opacity,e.opacity,1)},e.makeFont=function(t){var e="";return ws(t)&&(e=[t.fontStyle,t.fontWeight,_s(t.fontSize),t.fontFamily||"sans-serif"].join(" ")),e&<(e)||t.textFont||t.font},e}(ta),vs={left:!0,right:1,center:1},ys={top:1,bottom:1,middle:1},ms=["fontStyle","fontWeight","fontSize","fontFamily"];function _s(t){return"string"!=typeof t||-1===t.indexOf("px")&&-1===t.indexOf("rem")&&-1===t.indexOf("em")?isNaN(+t)?"12px":t+"px":t}function xs(t,e){for(var n=0;n=0,o=!1;if(t instanceof ts){var a=Ps(t),s=r&&a.selectFill||a.normalFill,l=r&&a.selectStroke||a.normalStroke;if(Fs(s)||Fs(l)){var u=(i=i||{}).style||{};"inherit"===u.fill?(o=!0,i=k({},i),(u=k({},u)).fill=s):!Fs(u.fill)&&Fs(s)?(o=!0,i=k({},i),(u=k({},u)).fill=Ws(s)):!Fs(u.stroke)&&Fs(l)&&(o||(i=k({},i),u=k({},u)),u.stroke=Ws(l)),i.style=u}}if(i&&null==i.z2){o||(i=k({},i));var h=t.z2EmphasisLift;i.z2=t.z2+(null!=h?h:10)}return i}(this,0,e,n);if("blur"===t)return function(t,e,n){var i=L(t.currentStates,e)>=0,r=t.style.opacity,o=i?null:function(t,e,n,i){for(var r=t.style,o={},a=0;a0){var o={dataIndex:r,seriesIndex:t.seriesIndex};null!=i&&(o.dataType=i),e.push(o)}}))})),e}function vl(t,e,n){wl(t,!0),$s(t,tl),function(t,e,n){var i=Ds(t);null!=e?(i.focus=e,i.blurScope=n):i.focus&&(i.focus=null)}(t,e,n)}function yl(t,e,n,i){i?function(t){wl(t,!1)}(t):vl(t,e,n)}var ml=["emphasis","blur","select"],_l={itemStyle:"getItemStyle",lineStyle:"getLineStyle",areaStyle:"getAreaStyle"};function xl(t,e,n,i){n=n||"itemStyle";for(var r=0;r1&&(a*=kl(f),s*=kl(f));var g=(r===o?-1:1)*kl((a*a*(s*s)-a*a*(d*d)-s*s*(p*p))/(a*a*(d*d)+s*s*(p*p)))||0,v=g*a*d/s,y=g*-s*p/a,m=(t+n)/2+Pl(c)*v-Al(c)*y,_=(e+i)/2+Al(c)*v+Pl(c)*y,x=Nl([1,0],[(p-v)/a,(d-y)/s]),w=[(p-v)/a,(d-y)/s],b=[(-1*p-v)/a,(-1*d-y)/s],S=Nl(w,b);if(Rl(w,b)<=-1&&(S=Ll),Rl(w,b)>=1&&(S=0),S<0){var M=Math.round(S/Ll*1e6)/1e6;S=2*Ll+M%2*Ll}h.addData(u,m,_,a,s,x,S,c,o)}var zl=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi,Bl=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;var Vl=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.applyTransform=function(t){},e}(ts);function Fl(t){return null!=t.setData}function Hl(t,e){var n=function(t){var e=new Ra;if(!t)return e;var n,i=0,r=0,o=i,a=r,s=Ra.CMD,l=t.match(zl);if(!l)return e;for(var u=0;uA*A+P*P&&(M=I,C=T),{cx:M,cy:C,x0:-h,y0:-c,x1:M*(r/w-1),y1:C*(r/w-1)}}function ru(t,e){var n,i=tu(e.r,0),r=tu(e.r0||0,0),o=i>0;if(o||r>0){if(o||(i=r,r=0),r>i){var a=i;i=r,r=a}var s=e.startAngle,l=e.endAngle;if(!isNaN(s)&&!isNaN(l)){var u=e.cx,h=e.cy,c=!!e.clockwise,p=Ql(l-s),d=p>Xl&&p%Xl;if(d>nu&&(p=d),i>nu)if(p>Xl-nu)t.moveTo(u+i*ql(s),h+i*jl(s)),t.arc(u,h,i,s,l,!c),r>nu&&(t.moveTo(u+r*ql(l),h+r*jl(l)),t.arc(u,h,r,l,s,c));else{var f=void 0,g=void 0,v=void 0,y=void 0,m=void 0,_=void 0,x=void 0,w=void 0,b=void 0,S=void 0,M=void 0,C=void 0,I=void 0,T=void 0,D=void 0,k=void 0,A=i*ql(s),P=i*jl(s),L=r*ql(l),O=r*jl(l),R=p>nu;if(R){var N=e.cornerRadius;N&&(f=(n=function(t){var e;if(G(t)){var n=t.length;if(!n)return t;e=1===n?[t[0],t[0],0,0]:2===n?[t[0],t[0],t[1],t[1]]:3===n?t.concat(t[2]):t}else e=[t,t,t,t];return e}(N))[0],g=n[1],v=n[2],y=n[3]);var E=Ql(i-r)/2;if(m=eu(E,v),_=eu(E,y),x=eu(E,f),w=eu(E,g),M=b=tu(m,_),C=S=tu(x,w),(b>nu||S>nu)&&(I=i*ql(l),T=i*jl(l),D=r*ql(s),k=r*jl(s),pnu){var Z=eu(v,M),Y=eu(y,M),X=iu(D,k,A,P,i,Z,c),j=iu(I,T,L,O,i,Y,c);t.moveTo(u+X.cx+X.x0,h+X.cy+X.y0),M0&&t.arc(u+X.cx,h+X.cy,Z,$l(X.y0,X.x0),$l(X.y1,X.x1),!c),t.arc(u,h,i,$l(X.cy+X.y1,X.cx+X.x1),$l(j.cy+j.y1,j.cx+j.x1),!c),Y>0&&t.arc(u+j.cx,h+j.cy,Y,$l(j.y1,j.x1),$l(j.y0,j.x0),!c))}else t.moveTo(u+A,h+P),t.arc(u,h,i,s,l,!c);else t.moveTo(u+A,h+P);if(r>nu&&R)if(C>nu){Z=eu(f,C),X=iu(L,O,I,T,r,-(Y=eu(g,C)),c),j=iu(A,P,D,k,r,-Z,c);t.lineTo(u+X.cx+X.x0,h+X.cy+X.y0),C0&&t.arc(u+X.cx,h+X.cy,Y,$l(X.y0,X.x0),$l(X.y1,X.x1),!c),t.arc(u,h,r,$l(X.cy+X.y1,X.cx+X.x1),$l(j.cy+j.y1,j.cx+j.x1),c),Z>0&&t.arc(u+j.cx,h+j.cy,Z,$l(j.y1,j.x1),$l(j.y0,j.x0),!c))}else t.lineTo(u+L,h+O),t.arc(u,h,r,l,s,c);else t.lineTo(u+L,h+O)}else t.moveTo(u,h);t.closePath()}}}var ou=function(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=2*Math.PI,this.clockwise=!0,this.cornerRadius=0},au=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new ou},e.prototype.buildPath=function(t,e){ru(t,e)},e.prototype.isZeroArea=function(){return this.shape.startAngle===this.shape.endAngle||this.shape.r===this.shape.r0},e}(ts);au.prototype.type="sector";var su=function(){this.cx=0,this.cy=0,this.r=0,this.r0=0},lu=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new su},e.prototype.buildPath=function(t,e){var n=e.cx,i=e.cy,r=2*Math.PI;t.moveTo(n+e.r,i),t.arc(n,i,e.r,0,r,!1),t.moveTo(n+e.r0,i),t.arc(n,i,e.r0,0,r,!0)},e}(ts);function uu(t,e,n){var i=e.smooth,r=e.points;if(r&&r.length>=2){if(i){var o=function(t,e,n,i){var r,o,a,s,l=[],u=[],h=[],c=[];if(i){a=[1/0,1/0],s=[-1/0,-1/0];for(var p=0,d=t.length;pDu[1]){if(a=!1,r)return a;var u=Math.abs(Du[0]-Tu[1]),h=Math.abs(Tu[0]-Du[1]);Math.min(u,h)>i.len()&&(u0){var c={duration:h.duration,delay:h.delay||0,easing:h.easing,done:o,force:!!o||!!a,setToFinal:!u,scope:t,during:a};l?e.animateFrom(n,c):e.animateTo(n,c)}else e.stopAnimation(),!l&&e.attr(n),a&&a(1),o&&o()}function zu(t,e,n,i,r,o){Eu("update",t,e,n,i,r,o)}function Bu(t,e,n,i,r,o){Eu("enter",t,e,n,i,r,o)}function Vu(t){if(!t.__zr)return!0;for(var e=0;eMath.abs(o[1])?o[0]>0?"right":"left":o[1]>0?"bottom":"top"}function sh(t){return!t.isGroup}function lh(t,e,n){if(t&&e){var i,r=(i={},t.traverse((function(t){sh(t)&&t.anid&&(i[t.anid]=t)})),i);e.traverse((function(t){if(sh(t)&&t.anid){var e=r[t.anid];if(e){var i=o(t);t.attr(o(e)),zu(t,i,n,Ds(t).dataIndex)}}}))}function o(t){var e={x:t.x,y:t.y,rotation:t.rotation};return function(t){return null!=t.shape}(t)&&(e.shape=k({},t.shape)),e}}function uh(t,e){return z(t,(function(t){var n=t[0];n=Uu(n,e.x),n=Zu(n,e.x+e.width);var i=t[1];return i=Uu(i,e.y),[n,i=Zu(i,e.y+e.height)]}))}function hh(t,e){var n=Uu(t.x,e.x),i=Zu(t.x+t.width,e.x+e.width),r=Uu(t.y,e.y),o=Zu(t.y+t.height,e.y+e.height);if(i>=n&&o>=r)return{x:n,y:r,width:i-n,height:o-r}}function ch(t,e,n){var i=k({rectHover:!0},e),r=i.style={strokeNoScale:!0};if(n=n||{x:-1,y:-1,width:2,height:2},t)return 0===t.indexOf("image://")?(r.image=t.slice(8),A(r,n),new os(i)):Qu(t.replace("path://",""),i,n,"center")}function ph(t,e,n,i,r,o,a,s){var l,u=n-t,h=i-e,c=a-r,p=s-o,d=dh(c,p,u,h);if((l=d)<=1e-6&&l>=-1e-6)return!1;var f=t-r,g=e-o,v=dh(f,g,u,h)/d;if(v<0||v>1)return!1;var y=dh(f,g,c,p)/d;return!(y<0||y>1)}function dh(t,e,n,i){return t*i-n*e}function fh(t){var e=t.itemTooltipOption,n=t.componentModel,i=t.itemName,r=Z(e)?{formatter:e}:e,o=n.mainType,a=n.componentIndex,s={componentType:o,name:i,$vars:["name"]};s[o+"Index"]=a;var l=t.formatterParamsExtra;l&&E(F(l),(function(t){yt(s,t)||(s[t]=l[t],s.$vars.push(t))}));var u=Ds(t.el);u.componentMainType=o,u.componentIndex=a,u.tooltipConfig={name:i,option:A({content:i,formatterParams:s},r)}}function gh(t,e){var n;t.isGroup&&(n=e(t)),n||t.traverse(e)}function vh(t,e){if(t)if(G(t))for(var n=0;n-1?Zh:Xh;function $h(t,e){t=t.toUpperCase(),qh[t]=new Hh(e),jh[t]=e}$h(Yh,{time:{month:["January","February","March","April","May","June","July","August","September","October","November","December"],monthAbbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayOfWeekAbbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},legend:{selector:{all:"All",inverse:"Inv"}},toolbox:{brush:{title:{rect:"Box Select",polygon:"Lasso Select",lineX:"Horizontally Select",lineY:"Vertically Select",keep:"Keep Selections",clear:"Clear Selections"}},dataView:{title:"Data View",lang:["Data View","Close","Refresh"]},dataZoom:{title:{zoom:"Zoom",back:"Zoom Reset"}},magicType:{title:{line:"Switch to Line Chart",bar:"Switch to Bar Chart",stack:"Stack",tiled:"Tile"}},restore:{title:"Restore"},saveAsImage:{title:"Save as Image",lang:["Right Click to Save Image"]}},series:{typeNames:{pie:"Pie chart",bar:"Bar chart",line:"Line chart",scatter:"Scatter plot",effectScatter:"Ripple scatter plot",radar:"Radar chart",tree:"Tree",treemap:"Treemap",boxplot:"Boxplot",candlestick:"Candlestick",k:"K line chart",heatmap:"Heat map",map:"Map",parallel:"Parallel coordinate map",lines:"Line graph",graph:"Relationship graph",sankey:"Sankey diagram",funnel:"Funnel chart",gauge:"Gauge",pictorialBar:"Pictorial bar",themeRiver:"Theme River Map",sunburst:"Sunburst"}},aria:{general:{withTitle:'This is a chart about "{title}"',withoutTitle:"This is a chart"},series:{single:{prefix:"",withName:" with type {seriesType} named {seriesName}.",withoutName:" with type {seriesType}."},multiple:{prefix:". It consists of {seriesCount} series count.",withName:" The {seriesId} series is a {seriesType} representing {seriesName}.",withoutName:" The {seriesId} series is a {seriesType}.",separator:{middle:"",end:""}}},data:{allData:"The data is as follows: ",partialData:"The first {displayCnt} items are: ",withName:"the data for {name} is {value}",withoutName:"{value}",separator:{middle:", ",end:". "}}}}),$h(Zh,{time:{month:["一月","ä猿œˆ","三月","四月","ä甿œˆ","六月","七月","å…Ģ月","䚝月","十月","十一月","十ä猿œˆ"],monthAbbr:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeek:["星期æ—Ĩ","星期一","星期äēŒ","星期三","星期四","星期äē”","星期六"],dayOfWeekAbbr:["æ—Ĩ","一","äēŒ","三","四","äē”","六"]},legend:{selector:{all:"全选",inverse:"反选"}},toolbox:{brush:{title:{rect:"įŸŠåŊĸ选拊",polygon:"圈选",lineX:"æ¨Ē向选拊",lineY:"įēĩ向选拊",keep:"äŋæŒé€‰æ‹Š",clear:"清除选拊"}},dataView:{title:"æ•°æŽč§†å›ž",lang:["æ•°æŽč§†å›ž","å…ŗé—­","åˆˇæ–°"]},dataZoom:{title:{zoom:"åŒē域įŧŠæ”ž",back:"åŒē域įŧŠæ”žčŋ˜åŽŸ"}},magicType:{title:{line:"切æĸä¸ē折įēŋ回",bar:"切æĸä¸ēæŸąįŠļ回",stack:"切æĸä¸ē堆叠",tiled:"切æĸä¸ēåšŗé“ē"}},restore:{title:"čŋ˜åŽŸ"},saveAsImage:{title:"äŋå­˜ä¸ēå›žį‰‡",lang:["åŗé”ŽåĻ存ä¸ēå›žį‰‡"]}},series:{typeNames:{pie:"éĨŧ回",bar:"æŸąįŠļ回",line:"折įēŋ回",scatter:"æ•Ŗį‚šå›ž",effectScatter:"æļŸæŧĒæ•Ŗį‚šå›ž",radar:"é›ˇčžžå›ž",tree:"树回",treemap:"įŸŠåŊĸ树回",boxplot:"įŽąåž‹å›ž",candlestick:"Kįēŋ回",k:"Kįēŋ回",heatmap:"įƒ­åŠ›å›ž",map:"地回",parallel:"åšŗčĄŒåæ ‡å›ž",lines:"įēŋ回",graph:"å…ŗįŗģ回",sankey:"æĄ‘åŸē回",funnel:"æŧæ–—回",gauge:"äģĒčĄ¨į›˜å›ž",pictorialBar:"蹥åŊĸæŸąå›ž",themeRiver:"ä¸ģéĸ˜æ˛ŗæĩå›ž",sunburst:"旭æ—Ĩ回"}},aria:{general:{withTitle:"čŋ™æ˜¯ä¸€ä¸Ēå…ŗäēŽâ€œ{title}â€įš„å›žčĄ¨ã€‚",withoutTitle:"čŋ™æ˜¯ä¸€ä¸Ēå›žčĄ¨īŧŒ"},series:{single:{prefix:"",withName:"å›žčĄ¨įąģ型是{seriesType}īŧŒčĄ¨į¤ē{seriesName}。",withoutName:"å›žčĄ¨įąģ型是{seriesType}。"},multiple:{prefix:"åŽƒį”ą{seriesCount}ä¸Ēå›žčĄ¨įŗģ列į섿ˆã€‚",withName:"įŦŦ{seriesId}ä¸Ēįŗģ列是一ä¸Ē襨į¤ē{seriesName}įš„{seriesType}īŧŒ",withoutName:"įŦŦ{seriesId}ä¸Ēįŗģ列是一ä¸Ē{seriesType}īŧŒ",separator:{middle:"īŧ›",end:"。"}}},data:{allData:"å…ļ数捎是——",partialData:"å…ļ中īŧŒå‰{displayCnt}éĄšæ˜¯â€”â€”",withName:"{name}įš„æ•°æŽæ˜¯{value}",withoutName:"{value}",separator:{middle:"īŧŒ",end:""}}}});var Qh=1e3,Jh=6e4,tc=36e5,ec=864e5,nc=31536e6,ic={year:"{yyyy}",month:"{MMM}",day:"{d}",hour:"{HH}:{mm}",minute:"{HH}:{mm}",second:"{HH}:{mm}:{ss}",millisecond:"{HH}:{mm}:{ss} {SSS}",none:"{yyyy}-{MM}-{dd} {HH}:{mm}:{ss} {SSS}"},rc="{yyyy}-{MM}-{dd}",oc={year:"{yyyy}",month:"{yyyy}-{MM}",day:rc,hour:"{yyyy}-{MM}-{dd} "+ic.hour,minute:"{yyyy}-{MM}-{dd} "+ic.minute,second:"{yyyy}-{MM}-{dd} "+ic.second,millisecond:ic.none},ac=["year","month","day","hour","minute","second","millisecond"],sc=["year","half-year","quarter","month","week","half-week","day","half-day","quarter-day","hour","minute","second","millisecond"];function lc(t,e){return"0000".substr(0,e-(t+="").length)+t}function uc(t){switch(t){case"half-year":case"quarter":return"month";case"week":case"half-week":return"day";case"half-day":case"quarter-day":return"hour";default:return t}}function hc(t){return t===uc(t)}function cc(t,e,n,i){var r=Vr(t),o=r[fc(n)](),a=r[gc(n)]()+1,s=Math.floor((a-1)/3)+1,l=r[vc(n)](),u=r["get"+(n?"UTC":"")+"Day"](),h=r[yc(n)](),c=(h-1)%12+1,p=r[mc(n)](),d=r[_c(n)](),f=r[xc(n)](),g=(i instanceof Hh?i:function(t){return qh[t]}(i||Kh)||qh.EN).getModel("time"),v=g.get("month"),y=g.get("monthAbbr"),m=g.get("dayOfWeek"),_=g.get("dayOfWeekAbbr");return(e||"").replace(/{yyyy}/g,o+"").replace(/{yy}/g,o%100+"").replace(/{Q}/g,s+"").replace(/{MMMM}/g,v[a-1]).replace(/{MMM}/g,y[a-1]).replace(/{MM}/g,lc(a,2)).replace(/{M}/g,a+"").replace(/{dd}/g,lc(l,2)).replace(/{d}/g,l+"").replace(/{eeee}/g,m[u]).replace(/{ee}/g,_[u]).replace(/{e}/g,u+"").replace(/{HH}/g,lc(h,2)).replace(/{H}/g,h+"").replace(/{hh}/g,lc(c+"",2)).replace(/{h}/g,c+"").replace(/{mm}/g,lc(p,2)).replace(/{m}/g,p+"").replace(/{ss}/g,lc(d,2)).replace(/{s}/g,d+"").replace(/{SSS}/g,lc(f,3)).replace(/{S}/g,f+"")}function pc(t,e){var n=Vr(t),i=n[gc(e)]()+1,r=n[vc(e)](),o=n[yc(e)](),a=n[mc(e)](),s=n[_c(e)](),l=0===n[xc(e)](),u=l&&0===s,h=u&&0===a,c=h&&0===o,p=c&&1===r;return p&&1===i?"year":p?"month":c?"day":h?"hour":u?"minute":l?"second":"millisecond"}function dc(t,e,n){var i=X(t)?Vr(t):t;switch(e=e||pc(t,n)){case"year":return i[fc(n)]();case"half-year":return i[gc(n)]()>=6?1:0;case"quarter":return Math.floor((i[gc(n)]()+1)/4);case"month":return i[gc(n)]();case"day":return i[vc(n)]();case"half-day":return i[yc(n)]()/24;case"hour":return i[yc(n)]();case"minute":return i[mc(n)]();case"second":return i[_c(n)]();case"millisecond":return i[xc(n)]()}}function fc(t){return t?"getUTCFullYear":"getFullYear"}function gc(t){return t?"getUTCMonth":"getMonth"}function vc(t){return t?"getUTCDate":"getDate"}function yc(t){return t?"getUTCHours":"getHours"}function mc(t){return t?"getUTCMinutes":"getMinutes"}function _c(t){return t?"getUTCSeconds":"getSeconds"}function xc(t){return t?"getUTCMilliseconds":"getMilliseconds"}function wc(t){return t?"setUTCFullYear":"setFullYear"}function bc(t){return t?"setUTCMonth":"setMonth"}function Sc(t){return t?"setUTCDate":"setDate"}function Mc(t){return t?"setUTCHours":"setHours"}function Cc(t){return t?"setUTCMinutes":"setMinutes"}function Ic(t){return t?"setUTCSeconds":"setSeconds"}function Tc(t){return t?"setUTCMilliseconds":"setMilliseconds"}function Dc(t){if(!Ur(t))return Z(t)?t:"-";var e=(t+"").split(".");return e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:"")}function kc(t,e){return t=(t||"").toLowerCase().replace(/-(.)/g,(function(t,e){return e.toUpperCase()})),e&&t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}var Ac=at,Pc=/([&<>"'])/g,Lc={"&":"&","<":"<",">":">",'"':""","'":"'"};function Oc(t){return null==t?"":(t+"").replace(Pc,(function(t,e){return Lc[e]}))}function Rc(t,e,n){function i(t){return t&<(t)?t:"-"}function r(t){return!(null==t||isNaN(t)||!isFinite(t))}var o="time"===e,a=t instanceof Date;if(o||a){var s=o?Vr(t):t;if(!isNaN(+s))return cc(s,"{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}",n);if(a)return"-"}if("ordinal"===e)return Y(t)?i(t):X(t)&&r(t)?t+"":"-";var l=Gr(t);return r(l)?Dc(l):Y(t)?i(t):"boolean"==typeof t?t+"":"-"}var Nc=["a","b","c","d","e","f","g"],Ec=function(t,e){return"{"+t+(null==e?"":e)+"}"};function zc(t,e,n){G(e)||(e=[e]);var i=e.length;if(!i)return"";for(var r=e[0].$vars||[],o=0;o':'':{renderMode:o,content:"{"+(n.markerId||"markerX")+"|} ",style:"subItem"===r?{width:4,height:4,borderRadius:2,backgroundColor:i}:{width:10,height:10,borderRadius:5,backgroundColor:i}}:""}function Vc(t,e){return e=e||"transparent",Z(t)?t:j(t)&&t.colorStops&&(t.colorStops[0]||{}).color||e}function Fc(t,e){if("_blank"===e||"blank"===e){var n=window.open();n.opener=null,n.location.href=t}else window.open(t,e)}var Hc=E,Wc=["left","right","top","bottom","width","height"],Gc=[["width","left","right"],["height","top","bottom"]];function Uc(t,e,n,i,r){var o=0,a=0;null==i&&(i=1/0),null==r&&(r=1/0);var s=0;e.eachChild((function(l,u){var h,c,p=l.getBoundingRect(),d=e.childAt(u+1),f=d&&d.getBoundingRect();if("horizontal"===t){var g=p.width+(f?-f.x+p.x:0);(h=o+g)>i||l.newline?(o=0,h=g,a+=s+n,s=p.height):s=Math.max(s,p.height)}else{var v=p.height+(f?-f.y+p.y:0);(c=a+v)>r||l.newline?(o+=s+n,a=0,c=v,s=p.width):s=Math.max(s,p.width)}l.newline||(l.x=o,l.y=a,l.markRedraw(),"horizontal"===t?o=h+n:a=c+n)}))}var Zc=Uc;W(Uc,"vertical"),W(Uc,"horizontal");function Yc(t,e,n){n=Ac(n||0);var i=e.width,r=e.height,o=Dr(t.left,i),a=Dr(t.top,r),s=Dr(t.right,i),l=Dr(t.bottom,r),u=Dr(t.width,i),h=Dr(t.height,r),c=n[2]+n[0],p=n[1]+n[3],d=t.aspect;switch(isNaN(u)&&(u=i-s-p-o),isNaN(h)&&(h=r-l-c-a),null!=d&&(isNaN(u)&&isNaN(h)&&(d>i/r?u=.8*i:h=.8*r),isNaN(u)&&(u=d*h),isNaN(h)&&(h=u/d)),isNaN(o)&&(o=i-s-u-p),isNaN(a)&&(a=r-l-h-c),t.left||t.right){case"center":o=i/2-u/2-n[3];break;case"right":o=i-u-p}switch(t.top||t.bottom){case"middle":case"center":a=r/2-h/2-n[0];break;case"bottom":a=r-h-c}o=o||0,a=a||0,isNaN(u)&&(u=i-p-o-(s||0)),isNaN(h)&&(h=r-c-a-(l||0));var f=new Ji(o+n[3],a+n[0],u,h);return f.margin=n,f}function Xc(t,e,n,i,r,o){var a,s=!r||!r.hv||r.hv[0],l=!r||!r.hv||r.hv[1],u=r&&r.boundingMode||"all";if((o=o||t).x=t.x,o.y=t.y,!s&&!l)return!1;if("raw"===u)a="group"===t.type?new Ji(0,0,+e.width||0,+e.height||0):t.getBoundingRect();else if(a=t.getBoundingRect(),t.needLocalTransform()){var h=t.getLocalTransform();(a=a.clone()).applyTransform(h)}var c=Yc(A({width:a.width,height:a.height},e),n,i),p=s?c.x-a.x:0,d=l?c.y-a.y:0;return"raw"===u?(o.x=p,o.y=d):(o.x+=p,o.y+=d),o===t&&t.markRedraw(),!0}function jc(t){var e=t.layoutMode||t.constructor.layoutMode;return j(e)?e:e?{type:e}:null}function qc(t,e,n){var i=n&&n.ignoreSize;!G(i)&&(i=[i,i]);var r=a(Gc[0],0),o=a(Gc[1],1);function a(n,r){var o={},a=0,u={},h=0;if(Hc(n,(function(e){u[e]=t[e]})),Hc(n,(function(t){s(e,t)&&(o[t]=u[t]=e[t]),l(o,t)&&a++,l(u,t)&&h++})),i[r])return l(e,n[1])?u[n[2]]=null:l(e,n[2])&&(u[n[1]]=null),u;if(2!==h&&a){if(a>=2)return o;for(var c=0;c=0;a--)o=T(o,n[a],!0);e.defaultOption=o}return e.defaultOption},e.prototype.getReferringComponents=function(t,e){var n=t+"Index",i=t+"Id";return mo(this.ecModel,t,{index:this.get(n,!0),id:this.get(i,!0)},e)},e.prototype.getBoxLayoutParams=function(){var t=this;return{left:t.get("left"),top:t.get("top"),right:t.get("right"),bottom:t.get("bottom"),width:t.get("width"),height:t.get("height")}},e.prototype.getZLevelKey=function(){return""},e.prototype.setZLevel=function(t){this.option.zlevel=t},e.protoInitialize=function(){var t=e.prototype;t.type="component",t.id="",t.name="",t.mainType="",t.subType="",t.componentIndex=0}(),e}(Hh);Mo(Jc,Hh),Do(Jc),function(t){var e={};t.registerSubTypeDefaulter=function(t,n){var i=bo(t);e[i.main]=n},t.determineSubType=function(n,i){var r=i.type;if(!r){var o=bo(n).main;t.hasSubTypes(n)&&e[o]&&(r=e[o](i))}return r}}(Jc),function(t,e){function n(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}t.topologicalTravel=function(t,i,r,o){if(t.length){var a=function(t){var i={},r=[];return E(t,(function(o){var a=n(i,o),s=function(t,e){var n=[];return E(t,(function(t){L(e,t)>=0&&n.push(t)})),n}(a.originalDeps=e(o),t);a.entryCount=s.length,0===a.entryCount&&r.push(o),E(s,(function(t){L(a.predecessor,t)<0&&a.predecessor.push(t);var e=n(i,t);L(e.successor,t)<0&&e.successor.push(o)}))})),{graph:i,noEntryList:r}}(i),s=a.graph,l=a.noEntryList,u={};for(E(t,(function(t){u[t]=!0}));l.length;){var h=l.pop(),c=s[h],p=!!u[h];p&&(r.call(o,h,c.originalDeps.slice()),delete u[h]),E(c.successor,p?f:d)}E(u,(function(){var t="";throw new Error(t)}))}function d(t){s[t].entryCount--,0===s[t].entryCount&&l.push(t)}function f(t){u[t]=!0,d(t)}}}(Jc,(function(t){var e=[];E(Jc.getClassesByMainType(t),(function(t){e=e.concat(t.dependencies||t.prototype.dependencies||[])})),e=z(e,(function(t){return bo(t).main})),"dataset"!==t&&L(e,"dataset")<=0&&e.unshift("dataset");return e}));var tp="";"undefined"!=typeof navigator&&(tp=navigator.platform||"");var ep="rgba(0, 0, 0, 0.2)",np={darkMode:"auto",colorBy:"series",color:["#5470c6","#91cc75","#fac858","#ee6666","#73c0de","#3ba272","#fc8452","#9a60b4","#ea7ccc"],gradientColor:["#f6efa6","#d88273","#bf444c"],aria:{decal:{decals:[{color:ep,dashArrayX:[1,0],dashArrayY:[2,5],symbolSize:1,rotation:Math.PI/6},{color:ep,symbol:"circle",dashArrayX:[[8,8],[0,8,8,0]],dashArrayY:[6,0],symbolSize:.8},{color:ep,dashArrayX:[1,0],dashArrayY:[4,3],rotation:-Math.PI/4},{color:ep,dashArrayX:[[6,6],[0,6,6,0]],dashArrayY:[6,0]},{color:ep,dashArrayX:[[1,0],[1,6]],dashArrayY:[1,0,6,0],rotation:Math.PI/4},{color:ep,symbol:"triangle",dashArrayX:[[9,9],[0,9,9,0]],dashArrayY:[7,2],symbolSize:.75}]}},textStyle:{fontFamily:tp.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,stateAnimation:{duration:300,easing:"cubicOut"},animation:"auto",animationDuration:1e3,animationDurationUpdate:500,animationEasing:"cubicInOut",animationEasingUpdate:"cubicInOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1},ip=dt(["tooltip","label","itemName","itemId","itemGroupId","seriesName"]),rp="original",op="arrayRows",ap="objectRows",sp="keyedColumns",lp="typedArray",up="unknown",hp="column",cp="row",pp=1,dp=2,fp=3,gp=co();function vp(t,e,n){var i={},r=mp(e);if(!r||!t)return i;var o,a,s=[],l=[],u=e.ecModel,h=gp(u).datasetMap,c=r.uid+"_"+n.seriesLayoutBy;E(t=t.slice(),(function(e,n){var r=j(e)?e:t[n]={name:e};"ordinal"===r.type&&null==o&&(o=n,a=f(r)),i[r.name]=[]}));var p=h.get(c)||h.set(c,{categoryWayDim:a,valueWayDim:0});function d(t,e,n){for(var i=0;ie)return t[i];return t[n-1]}(i,a):n;if((h=h||n)&&h.length){var c=h[l];return r&&(u[r]=c),s.paletteIdx=(l+1)%h.length,c}}var Ap=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.init=function(t,e,n,i,r,o){i=i||{},this.option=null,this._theme=new Hh(i),this._locale=new Hh(r),this._optionManager=o},e.prototype.setOption=function(t,e,n){var i=Op(e);this._optionManager.setOption(t,n,i),this._resetOption(null,i)},e.prototype.resetOption=function(t,e){return this._resetOption(t,Op(e))},e.prototype._resetOption=function(t,e){var n=!1,i=this._optionManager;if(!t||"recreate"===t){var r=i.mountOption("recreate"===t);0,this.option&&"recreate"!==t?(this.restoreData(),this._mergeOption(r,e)):Mp(this,r),n=!0}if("timeline"!==t&&"media"!==t||this.restoreData(),!t||"recreate"===t||"timeline"===t){var o=i.getTimelineOption(this);o&&(n=!0,this._mergeOption(o,e))}if(!t||"recreate"===t||"media"===t){var a=i.getMediaOption(this);a.length&&E(a,(function(t){n=!0,this._mergeOption(t,e)}),this)}return n},e.prototype.mergeOption=function(t){this._mergeOption(t,null)},e.prototype._mergeOption=function(t,e){var n=this.option,i=this._componentsMap,r=this._componentsCount,o=[],a=dt(),s=e&&e.replaceMergeMainTypeMap;gp(this).datasetMap=dt(),E(t,(function(t,e){null!=t&&(Jc.hasClass(e)?e&&(o.push(e),a.set(e,!0)):n[e]=null==n[e]?I(t):T(n[e],t,!0))})),s&&s.each((function(t,e){Jc.hasClass(e)&&!a.get(e)&&(o.push(e),a.set(e,!0))})),Jc.topologicalTravel(o,Jc.getAllClassMainTypes(),(function(e){var o=function(t,e,n){var i=wp.get(e);if(!i)return n;var r=i(t);return r?n.concat(r):n}(this,e,Jr(t[e])),a=i.get(e),l=a?s&&s.get(e)?"replaceMerge":"normalMerge":"replaceAll",u=ro(a,o,l);(function(t,e,n){E(t,(function(t){var i=t.newOption;j(i)&&(t.keyInfo.mainType=e,t.keyInfo.subType=function(t,e,n,i){return e.type?e.type:n?n.subType:i.determineSubType(t,e)}(e,i,t.existing,n))}))})(u,e,Jc),n[e]=null,i.set(e,null),r.set(e,0);var h,c=[],p=[],d=0;E(u,(function(t,n){var i=t.existing,r=t.newOption;if(r){var o="series"===e,a=Jc.getClass(e,t.keyInfo.subType,!o);if(!a)return;if("tooltip"===e){if(h)return void 0;h=!0}if(i&&i.constructor===a)i.name=t.keyInfo.name,i.mergeOption(r,this),i.optionUpdated(r,!1);else{var s=k({componentIndex:n},t.keyInfo);k(i=new a(r,this,this,s),s),t.brandNew&&(i.__requireNewView=!0),i.init(r,this,this),i.optionUpdated(null,!0)}}else i&&(i.mergeOption({},this),i.optionUpdated({},!1));i?(c.push(i.option),p.push(i),d++):(c.push(void 0),p.push(void 0))}),this),n[e]=c,i.set(e,p),r.set(e,d),"series"===e&&bp(this)}),this),this._seriesIndices||bp(this)},e.prototype.getOption=function(){var t=I(this.option);return E(t,(function(e,n){if(Jc.hasClass(n)){for(var i=Jr(e),r=i.length,o=!1,a=r-1;a>=0;a--)i[a]&&!uo(i[a])?o=!0:(i[a]=null,!o&&r--);i.length=r,t[n]=i}})),delete t["\0_ec_inner"],t},e.prototype.getTheme=function(){return this._theme},e.prototype.getLocaleModel=function(){return this._locale},e.prototype.setUpdatePayload=function(t){this._payload=t},e.prototype.getUpdatePayload=function(){return this._payload},e.prototype.getComponent=function(t,e){var n=this._componentsMap.get(t);if(n){var i=n[e||0];if(i)return i;if(null==e)for(var r=0;r=e:"max"===n?t<=e:t===e})(i[a],t,o)||(r=!1)}})),r}var Hp=E,Wp=j,Gp=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"];function Up(t){var e=t&&t.itemStyle;if(e)for(var n=0,i=Gp.length;n=0;g--){var v=t[g];if(s||(p=v.data.rawIndexOf(v.stackedByDimension,c)),p>=0){var y=v.data.getByRawIndex(v.stackResultDimension,p);if("all"===l||"positive"===l&&y>0||"negative"===l&&y<0||"samesign"===l&&d>=0&&y>0||"samesign"===l&&d<=0&&y<0){d=Nr(d,y),f=y;break}}}return i[0]=d,i[1]=f,i}))}))}var ld,ud,hd,cd,pd,dd=function(t){this.data=t.data||(t.sourceFormat===sp?{}:[]),this.sourceFormat=t.sourceFormat||up,this.seriesLayoutBy=t.seriesLayoutBy||hp,this.startIndex=t.startIndex||0,this.dimensionsDetectedCount=t.dimensionsDetectedCount,this.metaRawOption=t.metaRawOption;var e=this.dimensionsDefine=t.dimensionsDefine;if(e)for(var n=0;nu&&(u=d)}s[0]=l,s[1]=u}},i=function(){return this._data?this._data.length/this._dimSize:0};function r(t){for(var e=0;e=0&&(s=o.interpolatedValue[l])}return null!=s?s+"":""})):void 0},t.prototype.getRawValue=function(t,e){return Ld(this.getData(e),t)},t.prototype.formatTooltip=function(t,e,n){},t}();function Nd(t){var e,n;return j(t)?t.type&&(n=t):e=t,{text:e,frag:n}}function Ed(t){return new zd(t)}var zd=function(){function t(t){t=t||{},this._reset=t.reset,this._plan=t.plan,this._count=t.count,this._onDirty=t.onDirty,this._dirty=!0}return t.prototype.perform=function(t){var e,n=this._upstream,i=t&&t.skip;if(this._dirty&&n){var r=this.context;r.data=r.outputData=n.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this),this._plan&&!i&&(e=this._plan(this.context));var o,a=h(this._modBy),s=this._modDataCount||0,l=h(t&&t.modBy),u=t&&t.modDataCount||0;function h(t){return!(t>=1)&&(t=1),t}a===l&&s===u||(e="reset"),(this._dirty||"reset"===e)&&(this._dirty=!1,o=this._doReset(i)),this._modBy=l,this._modDataCount=u;var c=t&&t.step;if(this._dueEnd=n?n._outputDueEnd:this._count?this._count(this.context):1/0,this._progress){var p=this._dueIndex,d=Math.min(null!=c?this._dueIndex+c:1/0,this._dueEnd);if(!i&&(o||p1&&i>0?s:a}};return o;function a(){return e=t?null:oi?-this._resultLT:0},t}(),Hd=function(){function t(){}return t.prototype.getRawData=function(){throw new Error("not supported")},t.prototype.getRawDataItem=function(t){throw new Error("not supported")},t.prototype.cloneRawData=function(){},t.prototype.getDimensionInfo=function(t){},t.prototype.cloneAllDimensionInfo=function(){},t.prototype.count=function(){},t.prototype.retrieveValue=function(t,e){},t.prototype.retrieveValueFromItem=function(t,e){},t.prototype.convertValue=function(t,e){return Vd(t,e)},t}();function Wd(t){var e=t.sourceFormat;if(!jd(e)){var n="";0,qr(n)}return t.data}function Gd(t){var e=t.sourceFormat,n=t.data;if(!jd(e)){var i="";0,qr(i)}if(e===op){for(var r=[],o=0,a=n.length;o65535?$d:Qd}function rf(t,e,n,i,r){var o=ef[n||"float"];if(r){var a=t[e],s=a&&a.length;if(s!==i){for(var l=new o(i),u=0;ug[1]&&(g[1]=f)}return this._rawCount=this._count=s,{start:a,end:s}},t.prototype._initDataFromProvider=function(t,e,n){for(var i=this._provider,r=this._chunks,o=this._dimensions,a=o.length,s=this._rawExtent,l=z(o,(function(t){return t.property})),u=0;uv[1]&&(v[1]=g)}}!i.persistent&&i.clean&&i.clean(),this._rawCount=this._count=e,this._extent=[]},t.prototype.count=function(){return this._count},t.prototype.get=function(t,e){if(!(e>=0&&e=0&&e=this._rawCount||t<0)return-1;if(!this._indices)return t;var e=this._indices,n=e[t];if(null!=n&&nt))return o;r=o-1}}return-1},t.prototype.indicesOfNearest=function(t,e,n){var i=this._chunks[t],r=[];if(!i)return r;null==n&&(n=1/0);for(var o=1/0,a=-1,s=0,l=0,u=this.count();l=0&&a<0)&&(o=c,a=h,s=0),h===a&&(r[s++]=l))}return r.length=s,r},t.prototype.getIndices=function(){var t,e=this._indices;if(e){var n=e.constructor,i=this._count;if(n===Array){t=new n(i);for(var r=0;r=u&&_<=h||isNaN(_))&&(a[s++]=d),d++}p=!0}else if(2===r){f=c[i[0]];var v=c[i[1]],y=t[i[1]][0],m=t[i[1]][1];for(g=0;g=u&&_<=h||isNaN(_))&&(x>=y&&x<=m||isNaN(x))&&(a[s++]=d),d++}p=!0}}if(!p)if(1===r)for(g=0;g=u&&_<=h||isNaN(_))&&(a[s++]=w)}else for(g=0;gt[M][1])&&(b=!1)}b&&(a[s++]=e.getRawIndex(g))}return sv[1]&&(v[1]=g)}}}},t.prototype.lttbDownSample=function(t,e){var n,i,r,o=this.clone([t],!0),a=o._chunks[t],s=this.count(),l=0,u=Math.floor(1/e),h=this.getRawIndex(0),c=new(nf(this._rawCount))(Math.min(2*(Math.ceil(s/u)+2),s));c[l++]=h;for(var p=1;pn&&(n=i,r=C)}M>0&&Mu-d&&(s=u-d,a.length=s);for(var f=0;fh[1]&&(h[1]=v),c[p++]=y}return r._count=p,r._indices=c,r._updateGetRawIdx(),r},t.prototype.each=function(t,e){if(this._count)for(var n=t.length,i=this._chunks,r=0,o=this.count();ra&&(a=l)}return i=[o,a],this._extent[t]=i,i},t.prototype.getRawDataItem=function(t){var e=this.getRawIndex(t);if(this._provider.persistent)return this._provider.getItem(e);for(var n=[],i=this._chunks,r=0;r=0?this._indices[t]:-1},t.prototype._updateGetRawIdx=function(){this.getRawIndex=this._indices?this._getRawIdx:this._getRawIdxIdentity},t.internalField=function(){function t(t,e,n,i){return Vd(t[i],this._dimensions[i])}qd={arrayRows:t,objectRows:function(t,e,n,i){return Vd(t[e],this._dimensions[i])},keyedColumns:t,original:function(t,e,n,i){var r=t&&(null==t.value?t:t.value);return Vd(r instanceof Array?r[i]:r,this._dimensions[i])},typedArray:function(t,e,n,i){return t[i]}}}(),t}(),af=function(){function t(t){this._sourceList=[],this._storeList=[],this._upstreamSignList=[],this._versionSignBase=0,this._dirty=!0,this._sourceHost=t}return t.prototype.dirty=function(){this._setLocalSource([],[]),this._storeList=[],this._dirty=!0},t.prototype._setLocalSource=function(t,e){this._sourceList=t,this._upstreamSignList=e,this._versionSignBase++,this._versionSignBase>9e10&&(this._versionSignBase=0)},t.prototype._getVersionSign=function(){return this._sourceHost.uid+"_"+this._versionSignBase},t.prototype.prepareSource=function(){this._isDirty()&&(this._createSource(),this._dirty=!1)},t.prototype._createSource=function(){this._setLocalSource([],[]);var t,e,n=this._sourceHost,i=this._getUpstreamSourceManagers(),r=!!i.length;if(lf(n)){var o=n,a=void 0,s=void 0,l=void 0;if(r){var u=i[0];u.prepareSource(),a=(l=u.getSource()).data,s=l.sourceFormat,e=[u._getVersionSign()]}else s=K(a=o.get("data",!0))?lp:rp,e=[];var h=this._getSourceMetaRawOption()||{},c=l&&l.metaRawOption||{},p=it(h.seriesLayoutBy,c.seriesLayoutBy)||null,d=it(h.sourceHeader,c.sourceHeader),f=it(h.dimensions,c.dimensions);t=p!==c.seriesLayoutBy||!!d!=!!c.sourceHeader||f?[gd(a,{seriesLayoutBy:p,sourceHeader:d,dimensions:f},s)]:[]}else{var g=n;if(r){var v=this._applyTransform(i);t=v.sourceList,e=v.upstreamSignList}else{t=[gd(g.get("source",!0),this._getSourceMetaRawOption(),null)],e=[]}}this._setLocalSource(t,e)},t.prototype._applyTransform=function(t){var e,n=this._sourceHost,i=n.get("transform",!0),r=n.get("fromTransformResult",!0);if(null!=r){var o="";1!==t.length&&uf(o)}var a,s=[],l=[];return E(t,(function(t){t.prepareSource();var e=t.getSource(r||0),n="";null==r||e||uf(n),s.push(e),l.push(t._getVersionSign())})),i?e=function(t,e,n){var i=Jr(t),r=i.length,o="";r||qr(o);for(var a=0,s=r;a1||n>0&&!t.noHeader;return E(t.blocks,(function(t){var n=vf(t);n>=e&&(e=n+ +(i&&(!n||ff(t)&&!t.noHeader)))})),e}return 0}function yf(t,e,n,i){var r,o=e.noHeader,a=(r=vf(e),{html:cf[r],richText:pf[r]}),s=[],l=e.blocks||[];st(!l||G(l)),l=l||[];var u=t.orderMode;if(e.sortBlocks&&u){l=l.slice();var h={valueAsc:"asc",valueDesc:"desc"};if(yt(h,u)){var c=new Fd(h[u],null);l.sort((function(t,e){return c.evaluate(t.sortParam,e.sortParam)}))}else"seriesDesc"===u&&l.reverse()}E(l,(function(n,r){var o=e.valueFormatter,l=gf(n)(o?k(k({},t),{valueFormatter:o}):t,n,r>0?a.html:0,i);null!=l&&s.push(l)}));var p="richText"===t.renderMode?s.join(a.richText):xf(s.join(""),o?n:a.html);if(o)return p;var d=Rc(e.header,"ordinal",t.useUTC),f=hf(i,t.renderMode).nameStyle;return"richText"===t.renderMode?wf(t,d,f)+a.richText+p:xf('
'+Oc(d)+"
"+p,n)}function mf(t,e,n,i){var r=t.renderMode,o=e.noName,a=e.noValue,s=!e.markerType,l=e.name,u=t.useUTC,h=e.valueFormatter||t.valueFormatter||function(t){return z(t=G(t)?t:[t],(function(t,e){return Rc(t,G(d)?d[e]:d,u)}))};if(!o||!a){var c=s?"":t.markupStyleCreator.makeTooltipMarker(e.markerType,e.markerColor||"#333",r),p=o?"":Rc(l,"ordinal",u),d=e.valueType,f=a?[]:h(e.value),g=!s||!o,v=!s&&o,y=hf(i,r),m=y.nameStyle,_=y.valueStyle;return"richText"===r?(s?"":c)+(o?"":wf(t,p,m))+(a?"":function(t,e,n,i,r){var o=[r],a=i?10:20;return n&&o.push({padding:[0,0,0,a],align:"right"}),t.markupStyleCreator.wrapRichTextStyle(G(e)?e.join(" "):e,o)}(t,f,g,v,_)):xf((s?"":c)+(o?"":function(t,e,n){return''+Oc(t)+""}(p,!s,m))+(a?"":function(t,e,n,i){var r=n?"10px":"20px",o=e?"float:right;margin-left:"+r:"";return t=G(t)?t:[t],''+z(t,(function(t){return Oc(t)})).join("  ")+""}(f,g,v,_)),n)}}function _f(t,e,n,i,r,o){if(t)return gf(t)({useUTC:r,renderMode:n,orderMode:i,markupStyleCreator:e,valueFormatter:t.valueFormatter},t,0,o)}function xf(t,e){return'
'+t+'
'}function wf(t,e,n){return t.markupStyleCreator.wrapRichTextStyle(e,n)}function bf(t,e){var n=t.get("padding");return null!=n?n:"richText"===e?[8,10]:10}var Sf=function(){function t(){this.richTextStyles={},this._nextStyleNameId=Zr()}return t.prototype._generateStyleName=function(){return"__EC_aUTo_"+this._nextStyleNameId++},t.prototype.makeTooltipMarker=function(t,e,n){var i="richText"===n?this._generateStyleName():null,r=Bc({color:e,type:t,renderMode:n,markerId:i});return Z(r)?r:(this.richTextStyles[i]=r.style,r.content)},t.prototype.wrapRichTextStyle=function(t,e){var n={};G(e)?E(e,(function(t){return k(n,t)})):k(n,e);var i=this._generateStyleName();return this.richTextStyles[i]=n,"{"+i+"|"+t+"}"},t}();function Mf(t){var e,n,i,r,o=t.series,a=t.dataIndex,s=t.multipleSeries,l=o.getData(),u=l.mapDimensionsAll("defaultedTooltip"),h=u.length,c=o.getRawValue(a),p=G(c),d=function(t,e){return Vc(t.getData().getItemVisual(e,"style")[t.visualDrawType])}(o,a);if(h>1||p&&!h){var f=function(t,e,n,i,r){var o=e.getData(),a=B(t,(function(t,e,n){var i=o.getDimensionInfo(n);return t||i&&!1!==i.tooltip&&null!=i.displayName}),!1),s=[],l=[],u=[];function h(t,e){var n=o.getDimensionInfo(e);n&&!1!==n.otherDims.tooltip&&(a?u.push(df("nameValue",{markerType:"subItem",markerColor:r,name:n.displayName,value:t,valueType:n.type})):(s.push(t),l.push(n.type)))}return i.length?E(i,(function(t){h(Ld(o,n,t),t)})):E(t,h),{inlineValues:s,inlineValueTypes:l,blocks:u}}(c,o,a,u,d);e=f.inlineValues,n=f.inlineValueTypes,i=f.blocks,r=f.inlineValues[0]}else if(h){var g=l.getDimensionInfo(u[0]);r=e=Ld(l,a,u[0]),n=g.type}else r=e=p?c[0]:c;var v=lo(o),y=v&&o.name||"",m=l.getName(a),_=s?y:m;return df("section",{header:y,noHeader:s||!v,sortParam:r,blocks:[df("nameValue",{markerType:"item",markerColor:d,name:_,noName:!lt(_),value:e,valueType:n})].concat(i||[])})}var Cf=co();function If(t,e){return t.getName(e)||t.getId(e)}var Tf=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._selectedDataIndicesMap={},e}return n(e,t),e.prototype.init=function(t,e,n){this.seriesIndex=this.componentIndex,this.dataTask=Ed({count:kf,reset:Af}),this.dataTask.context={model:this},this.mergeDefaultAndTheme(t,n),(Cf(this).sourceManager=new af(this)).prepareSource();var i=this.getInitialData(t,n);Lf(i,this),this.dataTask.context.data=i,Cf(this).dataBeforeProcessed=i,Df(this),this._initSelectedMapFromData(i)},e.prototype.mergeDefaultAndTheme=function(t,e){var n=jc(this),i=n?Kc(t):{},r=this.subType;Jc.hasClass(r)&&(r+="Series"),T(t,e.getTheme().get(this.subType)),T(t,this.getDefaultOption()),to(t,"label",["show"]),this.fillDataTextStyle(t.data),n&&qc(t,i,n)},e.prototype.mergeOption=function(t,e){t=T(this.option,t,!0),this.fillDataTextStyle(t.data);var n=jc(this);n&&qc(this.option,t,n);var i=Cf(this).sourceManager;i.dirty(),i.prepareSource();var r=this.getInitialData(t,e);Lf(r,this),this.dataTask.dirty(),this.dataTask.context.data=r,Cf(this).dataBeforeProcessed=r,Df(this),this._initSelectedMapFromData(r)},e.prototype.fillDataTextStyle=function(t){if(t&&!K(t))for(var e=["show"],n=0;nthis.getShallow("animationThreshold")&&(e=!1),!!e},e.prototype.restoreData=function(){this.dataTask.dirty()},e.prototype.getColorFromPalette=function(t,e,n){var i=this.ecModel,r=Tp.prototype.getColorFromPalette.call(this,t,e,n);return r||(r=i.getColorFromPalette(t,e,n)),r},e.prototype.coordDimToDataDim=function(t){return this.getRawData().mapDimensionsAll(t)},e.prototype.getProgressive=function(){return this.get("progressive")},e.prototype.getProgressiveThreshold=function(){return this.get("progressiveThreshold")},e.prototype.select=function(t,e){this._innerSelect(this.getData(e),t)},e.prototype.unselect=function(t,e){var n=this.option.selectedMap;if(n){var i=this.option.selectedMode,r=this.getData(e);if("series"===i||"all"===n)return this.option.selectedMap={},void(this._selectedDataIndicesMap={});for(var o=0;o=0&&n.push(r)}return n},e.prototype.isSelected=function(t,e){var n=this.option.selectedMap;if(!n)return!1;var i=this.getData(e);return("all"===n||n[If(i,t)])&&!i.getItemModel(t).get(["select","disabled"])},e.prototype.isUniversalTransitionEnabled=function(){if(this.__universalTransitionEnabled)return!0;var t=this.option.universalTransition;return!!t&&(!0===t||t&&t.enabled)},e.prototype._innerSelect=function(t,e){var n,i,r=this.option,o=r.selectedMode,a=e.length;if(o&&a)if("series"===o)r.selectedMap="all";else if("multiple"===o){j(r.selectedMap)||(r.selectedMap={});for(var s=r.selectedMap,l=0;l0&&this._innerSelect(t,e)}},e.registerClass=function(t){return Jc.registerClass(t)},e.protoInitialize=function(){var t=e.prototype;t.type="series.__base__",t.seriesIndex=0,t.ignoreStyleOnData=!1,t.hasSymbolVisual=!1,t.defaultSymbol="circle",t.visualStyleAccessPath="itemStyle",t.visualDrawType="fill"}(),e}(Jc);function Df(t){var e=t.name;lo(t)||(t.name=function(t){var e=t.getRawData(),n=e.mapDimensionsAll("seriesName"),i=[];return E(n,(function(t){var n=e.getDimensionInfo(t);n.displayName&&i.push(n.displayName)})),i.join(" ")}(t)||e)}function kf(t){return t.model.getRawData().count()}function Af(t){var e=t.model;return e.setData(e.getRawData().cloneShallow()),Pf}function Pf(t,e){e.outputData&&t.end>e.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function Lf(t,e){E(ft(t.CHANGABLE_METHODS,t.DOWNSAMPLE_METHODS),(function(n){t.wrapMethod(n,W(Of,e))}))}function Of(t,e){var n=Rf(t);return n&&n.setOutputEnd((e||this).count()),e}function Rf(t){var e=(t.ecModel||{}).scheduler,n=e&&e.getPipeline(t.uid);if(n){var i=n.currentTask;if(i){var r=i.agentStubMap;r&&(i=r.get(t.uid))}return i}}R(Tf,Rd),R(Tf,Tp),Mo(Tf,Jc);var Nf=function(){function t(){this.group=new _r,this.uid=Gh("viewComponent")}return t.prototype.init=function(t,e){},t.prototype.render=function(t,e,n,i){},t.prototype.dispose=function(t,e){},t.prototype.updateView=function(t,e,n,i){},t.prototype.updateLayout=function(t,e,n,i){},t.prototype.updateVisual=function(t,e,n,i){},t.prototype.toggleBlurSeries=function(t,e,n){},t.prototype.eachRendered=function(t){var e=this.group;e&&e.traverse(t)},t}();function Ef(){var t=co();return function(e){var n=t(e),i=e.pipelineContext,r=!!n.large,o=!!n.progressiveRender,a=n.large=!(!i||!i.large),s=n.progressiveRender=!(!i||!i.progressiveRender);return!(r===a&&o===s)&&"reset"}}So(Nf),Do(Nf);var zf=co(),Bf=Ef(),Vf=function(){function t(){this.group=new _r,this.uid=Gh("viewChart"),this.renderTask=Ed({plan:Wf,reset:Gf}),this.renderTask.context={view:this}}return t.prototype.init=function(t,e){},t.prototype.render=function(t,e,n,i){0},t.prototype.highlight=function(t,e,n,i){var r=t.getData(i&&i.dataType);r&&Hf(r,i,"emphasis")},t.prototype.downplay=function(t,e,n,i){var r=t.getData(i&&i.dataType);r&&Hf(r,i,"normal")},t.prototype.remove=function(t,e){this.group.removeAll()},t.prototype.dispose=function(t,e){},t.prototype.updateView=function(t,e,n,i){this.render(t,e,n,i)},t.prototype.updateLayout=function(t,e,n,i){this.render(t,e,n,i)},t.prototype.updateVisual=function(t,e,n,i){this.render(t,e,n,i)},t.prototype.eachRendered=function(t){vh(this.group,t)},t.markUpdateMethod=function(t,e){zf(t).updateMethod=e},t.protoInitialize=void(t.prototype.type="chart"),t}();function Ff(t,e,n){t&&bl(t)&&("emphasis"===e?il:rl)(t,n)}function Hf(t,e,n){var i=ho(t,e),r=e&&null!=e.highlightKey?function(t){var e=As[t];return null==e&&ks<=32&&(e=As[t]=ks++),e}(e.highlightKey):null;null!=i?E(Jr(i),(function(e){Ff(t.getItemGraphicEl(e),n,r)})):t.eachItemGraphicEl((function(t){Ff(t,n,r)}))}function Wf(t){return Bf(t.model)}function Gf(t){var e=t.model,n=t.ecModel,i=t.api,r=t.payload,o=e.pipelineContext.progressiveRender,a=t.view,s=r&&zf(r).updateMethod,l=o?"incrementalPrepareRender":s&&a[s]?s:"render";return"render"!==l&&a[l](e,n,i,r),Uf[l]}So(Vf),Do(Vf);var Uf={incrementalPrepareRender:{progress:function(t,e){e.view.incrementalRender(t,e.model,e.ecModel,e.api,e.payload)}},render:{forceFirstProgress:!0,progress:function(t,e){e.view.render(e.model,e.ecModel,e.api,e.payload)}}},Zf="\0__throttleOriginMethod",Yf="\0__throttleRate",Xf="\0__throttleType";function jf(t,e,n){var i,r,o,a,s,l=0,u=0,h=null;function c(){u=(new Date).getTime(),h=null,t.apply(o,a||[])}e=e||0;var p=function(){for(var t=[],p=0;p=0?c():h=setTimeout(c,-r),l=i};return p.clear=function(){h&&(clearTimeout(h),h=null)},p.debounceNextCall=function(t){s=t},p}function qf(t,e,n,i){var r=t[e];if(r){var o=r[Zf]||r,a=r[Xf];if(r[Yf]!==n||a!==i){if(null==n||!i)return t[e]=o;(r=t[e]=jf(o,n,"debounce"===i))[Zf]=o,r[Xf]=i,r[Yf]=n}return r}}function Kf(t,e){var n=t[e];n&&n[Zf]&&(n.clear&&n.clear(),t[e]=n[Zf])}var $f=co(),Qf={itemStyle:ko(Bh,!0),lineStyle:ko(Nh,!0)},Jf={lineStyle:"stroke",itemStyle:"fill"};function tg(t,e){var n=t.visualStyleMapper||Qf[e];return n||(console.warn("Unkown style type '"+e+"'."),Qf.itemStyle)}function eg(t,e){var n=t.visualDrawType||Jf[e];return n||(console.warn("Unkown style type '"+e+"'."),"fill")}var ng={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var n=t.getData(),i=t.visualStyleAccessPath||"itemStyle",r=t.getModel(i),o=tg(t,i)(r),a=r.getShallow("decal");a&&(n.setVisual("decal",a),a.dirty=!0);var s=eg(t,i),l=o[s],u=U(l)?l:null,h="auto"===o.fill||"auto"===o.stroke;if(!o[s]||u||h){var c=t.getColorFromPalette(t.name,null,e.getSeriesCount());o[s]||(o[s]=c,n.setVisual("colorFromPalette",!0)),o.fill="auto"===o.fill||U(o.fill)?c:o.fill,o.stroke="auto"===o.stroke||U(o.stroke)?c:o.stroke}if(n.setVisual("style",o),n.setVisual("drawType",s),!e.isSeriesFiltered(t)&&u)return n.setVisual("colorFromPalette",!1),{dataEach:function(e,n){var i=t.getDataParams(n),r=k({},o);r[s]=u(i),e.setItemVisual(n,"style",r)}}}},ig=new Hh,rg={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){if(!t.ignoreStyleOnData&&!e.isSeriesFiltered(t)){var n=t.getData(),i=t.visualStyleAccessPath||"itemStyle",r=tg(t,i),o=n.getVisual("drawType");return{dataEach:n.hasItemOption?function(t,e){var n=t.getRawDataItem(e);if(n&&n[i]){ig.option=n[i];var a=r(ig);k(t.ensureUniqueItemVisual(e,"style"),a),ig.option.decal&&(t.setItemVisual(e,"decal",ig.option.decal),ig.option.decal.dirty=!0),o in a&&t.setItemVisual(e,"colorFromPalette",!1)}}:null}}}},og={performRawSeries:!0,overallReset:function(t){var e=dt();t.eachSeries((function(t){var n=t.getColorBy();if(!t.isColorBySeries()){var i=t.type+"-"+n,r=e.get(i);r||(r={},e.set(i,r)),$f(t).scope=r}})),t.eachSeries((function(e){if(!e.isColorBySeries()&&!t.isSeriesFiltered(e)){var n=e.getRawData(),i={},r=e.getData(),o=$f(e).scope,a=e.visualStyleAccessPath||"itemStyle",s=eg(e,a);r.each((function(t){var e=r.getRawIndex(t);i[e]=t})),n.each((function(t){var a=i[t];if(r.getItemVisual(a,"colorFromPalette")){var l=r.ensureUniqueItemVisual(a,"style"),u=n.getName(t)||t+"",h=n.count();l[s]=e.getColorFromPalette(u,o,h)}}))}}))}},ag=Math.PI;var sg=function(){function t(t,e,n,i){this._stageTaskMap=dt(),this.ecInstance=t,this.api=e,n=this._dataProcessorHandlers=n.slice(),i=this._visualHandlers=i.slice(),this._allHandlers=n.concat(i)}return t.prototype.restoreData=function(t,e){t.restoreData(e),this._stageTaskMap.each((function(t){var e=t.overallTask;e&&e.dirty()}))},t.prototype.getPerformArgs=function(t,e){if(t.__pipeline){var n=this._pipelineMap.get(t.__pipeline.id),i=n.context,r=!e&&n.progressiveEnabled&&(!i||i.progressiveRender)&&t.__idxInPipeline>n.blockIndex?n.step:null,o=i&&i.modDataCount;return{step:r,modBy:null!=o?Math.ceil(o/r):null,modDataCount:o}}},t.prototype.getPipeline=function(t){return this._pipelineMap.get(t)},t.prototype.updateStreamModes=function(t,e){var n=this._pipelineMap.get(t.uid),i=t.getData().count(),r=n.progressiveEnabled&&e.incrementalPrepareRender&&i>=n.threshold,o=t.get("large")&&i>=t.get("largeThreshold"),a="mod"===t.get("progressiveChunkMode")?i:null;t.pipelineContext=n.context={progressiveRender:r,modDataCount:a,large:o}},t.prototype.restorePipelines=function(t){var e=this,n=e._pipelineMap=dt();t.eachSeries((function(t){var i=t.getProgressive(),r=t.uid;n.set(r,{id:r,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:i&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(i||700),count:0}),e._pipe(t,t.dataTask)}))},t.prototype.prepareStageTasks=function(){var t=this._stageTaskMap,e=this.api.getModel(),n=this.api;E(this._allHandlers,(function(i){var r=t.get(i.uid)||t.set(i.uid,{}),o="";st(!(i.reset&&i.overallReset),o),i.reset&&this._createSeriesStageTask(i,r,e,n),i.overallReset&&this._createOverallStageTask(i,r,e,n)}),this)},t.prototype.prepareView=function(t,e,n,i){var r=t.renderTask,o=r.context;o.model=e,o.ecModel=n,o.api=i,r.__block=!t.incrementalPrepareRender,this._pipe(e,r)},t.prototype.performDataProcessorTasks=function(t,e){this._performStageTasks(this._dataProcessorHandlers,t,e,{block:!0})},t.prototype.performVisualTasks=function(t,e,n){this._performStageTasks(this._visualHandlers,t,e,n)},t.prototype._performStageTasks=function(t,e,n,i){i=i||{};var r=!1,o=this;function a(t,e){return t.setDirty&&(!t.dirtyMap||t.dirtyMap.get(e.__pipeline.id))}E(t,(function(t,s){if(!i.visualType||i.visualType===t.visualType){var l=o._stageTaskMap.get(t.uid),u=l.seriesTaskMap,h=l.overallTask;if(h){var c,p=h.agentStubMap;p.each((function(t){a(i,t)&&(t.dirty(),c=!0)})),c&&h.dirty(),o.updatePayload(h,n);var d=o.getPerformArgs(h,i.block);p.each((function(t){t.perform(d)})),h.perform(d)&&(r=!0)}else u&&u.each((function(s,l){a(i,s)&&s.dirty();var u=o.getPerformArgs(s,i.block);u.skip=!t.performRawSeries&&e.isSeriesFiltered(s.context.model),o.updatePayload(s,n),s.perform(u)&&(r=!0)}))}})),this.unfinished=r||this.unfinished},t.prototype.performSeriesTasks=function(t){var e;t.eachSeries((function(t){e=t.dataTask.perform()||e})),this.unfinished=e||this.unfinished},t.prototype.plan=function(){this._pipelineMap.each((function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)}))},t.prototype.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)},t.prototype._createSeriesStageTask=function(t,e,n,i){var r=this,o=e.seriesTaskMap,a=e.seriesTaskMap=dt(),s=t.seriesType,l=t.getTargetSeries;function u(e){var s=e.uid,l=a.set(s,o&&o.get(s)||Ed({plan:pg,reset:dg,count:vg}));l.context={model:e,ecModel:n,api:i,useClearVisual:t.isVisual&&!t.isLayout,plan:t.plan,reset:t.reset,scheduler:r},r._pipe(e,l)}t.createOnAllSeries?n.eachRawSeries(u):s?n.eachRawSeriesByType(s,u):l&&l(n,i).each(u)},t.prototype._createOverallStageTask=function(t,e,n,i){var r=this,o=e.overallTask=e.overallTask||Ed({reset:lg});o.context={ecModel:n,api:i,overallReset:t.overallReset,scheduler:r};var a=o.agentStubMap,s=o.agentStubMap=dt(),l=t.seriesType,u=t.getTargetSeries,h=!0,c=!1,p="";function d(t){var e=t.uid,n=s.set(e,a&&a.get(e)||(c=!0,Ed({reset:ug,onDirty:cg})));n.context={model:t,overallProgress:h},n.agent=o,n.__block=h,r._pipe(t,n)}st(!t.createOnAllSeries,p),l?n.eachRawSeriesByType(l,d):u?u(n,i).each(d):(h=!1,E(n.getSeries(),d)),c&&o.dirty()},t.prototype._pipe=function(t,e){var n=t.uid,i=this._pipelineMap.get(n);!i.head&&(i.head=e),i.tail&&i.tail.pipe(e),i.tail=e,e.__idxInPipeline=i.count++,e.__pipeline=i},t.wrapStageHandler=function(t,e){return U(t)&&(t={overallReset:t,seriesType:yg(t)}),t.uid=Gh("stageHandler"),e&&(t.visualType=e),t},t}();function lg(t){t.overallReset(t.ecModel,t.api,t.payload)}function ug(t){return t.overallProgress&&hg}function hg(){this.agent.dirty(),this.getDownstream().dirty()}function cg(){this.agent&&this.agent.dirty()}function pg(t){return t.plan?t.plan(t.model,t.ecModel,t.api,t.payload):null}function dg(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=Jr(t.reset(t.model,t.ecModel,t.api,t.payload));return e.length>1?z(e,(function(t,e){return gg(e)})):fg}var fg=gg(0);function gg(t){return function(e,n){var i=n.data,r=n.resetDefines[t];if(r&&r.dataEach)for(var o=e.start;o0&&h===r.length-u.length){var c=r.slice(0,h);"data"!==c&&(e.mainType=c,e[u.toLowerCase()]=t,s=!0)}}a.hasOwnProperty(r)&&(n[r]=t,s=!0),s||(i[r]=t)}))}return{cptQuery:e,dataQuery:n,otherQuery:i}},t.prototype.filter=function(t,e){var n=this.eventInfo;if(!n)return!0;var i=n.targetEl,r=n.packedEvent,o=n.model,a=n.view;if(!o||!a)return!0;var s=e.cptQuery,l=e.dataQuery;return u(s,o,"mainType")&&u(s,o,"subType")&&u(s,o,"index","componentIndex")&&u(s,o,"name")&&u(s,o,"id")&&u(l,r,"name")&&u(l,r,"dataIndex")&&u(l,r,"dataType")&&(!a.filterForExposedEvent||a.filterForExposedEvent(t,e.otherQuery,i,r));function u(t,e,n,i){return null==t[n]||e[i||n]===t[n]}},t.prototype.afterTrigger=function(){this.eventInfo=null},t}(),Ag=["symbol","symbolSize","symbolRotate","symbolOffset"],Pg=Ag.concat(["symbolKeepAspect"]),Lg={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var n=t.getData();if(t.legendIcon&&n.setVisual("legendIcon",t.legendIcon),t.hasSymbolVisual){for(var i={},r={},o=!1,a=0;a=0&&$g(l)?l:.5,t.createRadialGradient(a,s,0,a,s,l)}(t,e,n):function(t,e,n){var i=null==e.x?0:e.x,r=null==e.x2?1:e.x2,o=null==e.y?0:e.y,a=null==e.y2?0:e.y2;return e.global||(i=i*n.width+n.x,r=r*n.width+n.x,o=o*n.height+n.y,a=a*n.height+n.y),i=$g(i)?i:0,r=$g(r)?r:1,o=$g(o)?o:0,a=$g(a)?a:0,t.createLinearGradient(i,o,r,a)}(t,e,n),r=e.colorStops,o=0;o0&&(e=i.lineDash,n=i.lineWidth,e&&"solid"!==e&&n>0?"dashed"===e?[4*n,2*n]:"dotted"===e?[n]:X(e)?[e]:G(e)?e:null:null),o=i.lineDashOffset;if(r){var a=i.strokeNoScale&&t.getLineScale?t.getLineScale():1;a&&1!==a&&(r=z(r,(function(t){return t/a})),o/=a)}return[r,o]}var nv=new Ra(!0);function iv(t){var e=t.stroke;return!(null==e||"none"===e||!(t.lineWidth>0))}function rv(t){return"string"==typeof t&&"none"!==t}function ov(t){var e=t.fill;return null!=e&&"none"!==e}function av(t,e){if(null!=e.fillOpacity&&1!==e.fillOpacity){var n=t.globalAlpha;t.globalAlpha=e.fillOpacity*e.opacity,t.fill(),t.globalAlpha=n}else t.fill()}function sv(t,e){if(null!=e.strokeOpacity&&1!==e.strokeOpacity){var n=t.globalAlpha;t.globalAlpha=e.strokeOpacity*e.opacity,t.stroke(),t.globalAlpha=n}else t.stroke()}function lv(t,e,n){var i=Ro(e.image,e.__image,n);if(Eo(i)){var r=t.createPattern(i,e.repeat||"repeat");if("function"==typeof DOMMatrix&&r&&r.setTransform){var o=new DOMMatrix;o.translateSelf(e.x||0,e.y||0),o.rotateSelf(0,0,(e.rotation||0)*_t),o.scaleSelf(e.scaleX||1,e.scaleY||1),r.setTransform(o)}return r}}var uv=["shadowBlur","shadowOffsetX","shadowOffsetY"],hv=[["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]];function cv(t,e,n,i,r){var o=!1;if(!i&&e===(n=n||{}))return!1;if(i||e.opacity!==n.opacity){fv(t,r),o=!0;var a=Math.max(Math.min(e.opacity,1),0);t.globalAlpha=isNaN(a)?Ko.opacity:a}(i||e.blend!==n.blend)&&(o||(fv(t,r),o=!0),t.globalCompositeOperation=e.blend||Ko.blend);for(var s=0;s0&&t.unfinished);t.unfinished||this._zr.flush()}}},e.prototype.getDom=function(){return this._dom},e.prototype.getId=function(){return this.id},e.prototype.getZr=function(){return this._zr},e.prototype.isSSR=function(){return this._ssr},e.prototype.setOption=function(t,e,n){if(!this.__flagInMainProcess)if(this._disposed)ay(this.id);else{var i,r,o;if(j(e)&&(n=e.lazyUpdate,i=e.silent,r=e.replaceMerge,o=e.transition,e=e.notMerge),this.__flagInMainProcess=!0,!this._model||e){var a=new Vp(this._api),s=this._theme,l=this._model=new Ap;l.scheduler=this._scheduler,l.ssr=this._ssr,l.init(null,null,null,s,this._locale,a)}this._model.setOption(t,{replaceMerge:r},hy);var u={seriesTransition:o,optionChanged:!0};if(n)this.__pendingUpdate={silent:i,updateParams:u},this.__flagInMainProcess=!1,this.getZr().wakeUp();else{try{zv(this),Fv.update.call(this,null,u)}catch(t){throw this.__pendingUpdate=null,this.__flagInMainProcess=!1,t}this._ssr||this._zr.flush(),this.__pendingUpdate=null,this.__flagInMainProcess=!1,Uv.call(this,i),Zv.call(this,i)}}},e.prototype.setTheme=function(){jr()},e.prototype.getModel=function(){return this._model},e.prototype.getOption=function(){return this._model&&this._model.getOption()},e.prototype.getWidth=function(){return this._zr.getWidth()},e.prototype.getHeight=function(){return this._zr.getHeight()},e.prototype.getDevicePixelRatio=function(){return this._zr.painter.dpr||Dv&&window.devicePixelRatio||1},e.prototype.getRenderedCanvas=function(t){return this.renderToCanvas(t)},e.prototype.renderToCanvas=function(t){t=t||{};var e=this._zr.painter;return e.getRenderedCanvas({backgroundColor:t.backgroundColor||this._model.get("backgroundColor"),pixelRatio:t.pixelRatio||this.getDevicePixelRatio()})},e.prototype.renderToSVGString=function(t){t=t||{};var e=this._zr.painter;return e.renderToString({useViewBox:t.useViewBox})},e.prototype.getSvgDataURL=function(){if(r.svgSupported){var t=this._zr;return E(t.storage.getDisplayList(),(function(t){t.stopAnimation(null,!0)})),t.painter.toDataURL()}},e.prototype.getDataURL=function(t){if(!this._disposed){var e=(t=t||{}).excludeComponents,n=this._model,i=[],r=this;E(e,(function(t){n.eachComponent({mainType:t},(function(t){var e=r._componentsMap[t.__viewId];e.group.ignore||(i.push(e),e.group.ignore=!0)}))}));var o="svg"===this._zr.painter.getType()?this.getSvgDataURL():this.renderToCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return E(i,(function(t){t.group.ignore=!1})),o}ay(this.id)},e.prototype.getConnectedDataURL=function(t){if(!this._disposed){var e="svg"===t.type,n=this.group,i=Math.min,r=Math.max,o=1/0;if(gy[n]){var a=o,s=o,l=-1/0,u=-1/0,c=[],p=t&&t.pixelRatio||this.getDevicePixelRatio();E(fy,(function(o,h){if(o.group===n){var p=e?o.getZr().painter.getSvgDom().innerHTML:o.renderToCanvas(I(t)),d=o.getDom().getBoundingClientRect();a=i(d.left,a),s=i(d.top,s),l=r(d.right,l),u=r(d.bottom,u),c.push({dom:p,left:d.left,top:d.top})}}));var d=(l*=p)-(a*=p),f=(u*=p)-(s*=p),g=h.createCanvas(),v=Sr(g,{renderer:e?"svg":"canvas"});if(v.resize({width:d,height:f}),e){var y="";return E(c,(function(t){var e=t.left-a,n=t.top-s;y+=''+t.dom+""})),v.painter.getSvgRoot().innerHTML=y,t.connectedBackgroundColor&&v.painter.setBackgroundColor(t.connectedBackgroundColor),v.refreshImmediately(),v.painter.toDataURL()}return t.connectedBackgroundColor&&v.add(new ps({shape:{x:0,y:0,width:d,height:f},style:{fill:t.connectedBackgroundColor}})),E(c,(function(t){var e=new os({style:{x:t.left*p-a,y:t.top*p-s,image:t.dom}});v.add(e)})),v.refreshImmediately(),g.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}ay(this.id)},e.prototype.convertToPixel=function(t,e){return Hv(this,"convertToPixel",t,e)},e.prototype.convertFromPixel=function(t,e){return Hv(this,"convertFromPixel",t,e)},e.prototype.containPixel=function(t,e){var n;if(!this._disposed)return E(fo(this._model,t),(function(t,i){i.indexOf("Models")>=0&&E(t,(function(t){var r=t.coordinateSystem;if(r&&r.containPoint)n=n||!!r.containPoint(e);else if("seriesModels"===i){var o=this._chartsMap[t.__viewId];o&&o.containPoint&&(n=n||o.containPoint(e,t))}else 0}),this)}),this),!!n;ay(this.id)},e.prototype.getVisual=function(t,e){var n=fo(this._model,t,{defaultMainType:"series"}),i=n.seriesModel;var r=i.getData(),o=n.hasOwnProperty("dataIndexInside")?n.dataIndexInside:n.hasOwnProperty("dataIndex")?r.indexOfRawIndex(n.dataIndex):null;return null!=o?function(t,e,n){switch(n){case"color":return t.getItemVisual(e,"style")[t.getVisual("drawType")];case"opacity":return t.getItemVisual(e,"style").opacity;case"symbol":case"symbolSize":case"liftZ":return t.getItemVisual(e,n)}}(r,o,e):Rg(r,e)},e.prototype.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},e.prototype.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]},e.prototype._initEvents=function(){var t,e,n,i=this;E(oy,(function(t){var e=function(e){var n,r=i.getModel(),o=e.target,a="globalout"===t;if(a?n={}:o&&Eg(o,(function(t){var e=Ds(t);if(e&&null!=e.dataIndex){var i=e.dataModel||r.getSeriesByIndex(e.seriesIndex);return n=i&&i.getDataParams(e.dataIndex,e.dataType)||{},!0}if(e.eventData)return n=k({},e.eventData),!0}),!0),n){var s=n.componentType,l=n.componentIndex;"markLine"!==s&&"markPoint"!==s&&"markArea"!==s||(s="series",l=n.seriesIndex);var u=s&&null!=l&&r.getComponent(s,l),h=u&&i["series"===u.mainType?"_chartsMap":"_componentsMap"][u.__viewId];0,n.event=e,n.type=t,i._$eventProcessor.eventInfo={targetEl:o,packedEvent:n,model:u,view:h},i.trigger(t,n)}};e.zrEventfulCallAtLast=!0,i._zr.on(t,e,i)})),E(ly,(function(t,e){i._messageCenter.on(e,(function(t){this.trigger(e,t)}),i)})),E(["selectchanged"],(function(t){i._messageCenter.on(t,(function(e){this.trigger(t,e)}),i)})),t=this._messageCenter,e=this,n=this._api,t.on("selectchanged",(function(t){var i=n.getModel();t.isFromClick?(Ng("map","selectchanged",e,i,t),Ng("pie","selectchanged",e,i,t)):"select"===t.fromAction?(Ng("map","selected",e,i,t),Ng("pie","selected",e,i,t)):"unselect"===t.fromAction&&(Ng("map","unselected",e,i,t),Ng("pie","unselected",e,i,t))}))},e.prototype.isDisposed=function(){return this._disposed},e.prototype.clear=function(){this._disposed?ay(this.id):this.setOption({series:[]},!0)},e.prototype.dispose=function(){if(this._disposed)ay(this.id);else{this._disposed=!0,this.getDom()&&_o(this.getDom(),my,"");var t=this,e=t._api,n=t._model;E(t._componentsViews,(function(t){t.dispose(n,e)})),E(t._chartsViews,(function(t){t.dispose(n,e)})),t._zr.dispose(),t._dom=t._model=t._chartsMap=t._componentsMap=t._chartsViews=t._componentsViews=t._scheduler=t._api=t._zr=t._throttledZrFlush=t._theme=t._coordSysMgr=t._messageCenter=null,delete fy[t.id]}},e.prototype.resize=function(t){if(!this.__flagInMainProcess)if(this._disposed)ay(this.id);else{this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var n=e.resetOption("media"),i=t&&t.silent;this.__pendingUpdate&&(null==i&&(i=this.__pendingUpdate.silent),n=!0,this.__pendingUpdate=null),this.__flagInMainProcess=!0;try{n&&zv(this),Fv.update.call(this,{type:"resize",animation:k({duration:0},t&&t.animation)})}catch(t){throw this.__flagInMainProcess=!1,t}this.__flagInMainProcess=!1,Uv.call(this,i),Zv.call(this,i)}}},e.prototype.showLoading=function(t,e){if(this._disposed)ay(this.id);else if(j(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),dy[t]){var n=dy[t](this._api,e),i=this._zr;this._loadingFX=n,i.add(n)}},e.prototype.hideLoading=function(){this._disposed?ay(this.id):(this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null)},e.prototype.makeActionFromEvent=function(t){var e=k({},t);return e.type=ly[t.type],e},e.prototype.dispatchAction=function(t,e){if(this._disposed)ay(this.id);else if(j(e)||(e={silent:!!e}),sy[t.type]&&this._model)if(this.__flagInMainProcess)this._pendingActions.push(t);else{var n=e.silent;Gv.call(this,t,n);var i=e.flush;i?this._zr.flush():!1!==i&&r.browser.weChat&&this._throttledZrFlush(),Uv.call(this,n),Zv.call(this,n)}},e.prototype.updateLabelLayout=function(){Cv.trigger("series:layoutlabels",this._model,this._api,{updatedSeries:[]})},e.prototype.appendData=function(t){if(this._disposed)ay(this.id);else{var e=t.seriesIndex,n=this.getModel().getSeriesByIndex(e);0,n.appendData(t),this._scheduler.unfinished=!0,this.getZr().wakeUp()}},e.internalField=function(){function t(t){t.clearColorPalette(),t.eachSeries((function(t){t.clearColorPalette()}))}function e(t){for(var e=[],n=t.currentStates,i=0;i0?{duration:o,delay:i.get("delay"),easing:i.get("easing")}:null;n.eachRendered((function(t){if(t.states&&t.states.emphasis){if(Vu(t))return;if(t instanceof ts&&function(t){var e=Ps(t);e.normalFill=t.style.fill,e.normalStroke=t.style.stroke;var n=t.states.select||{};e.selectFill=n.style&&n.style.fill||null,e.selectStroke=n.style&&n.style.stroke||null}(t),t.__dirty){var n=t.prevStates;n&&t.useStates(n)}if(r){t.stateTransition=a;var i=t.getTextContent(),o=t.getTextGuideLine();i&&(i.stateTransition=a),o&&(o.stateTransition=a)}t.__dirty&&e(t)}}))}zv=function(t){var e=t._scheduler;e.restorePipelines(t._model),e.prepareStageTasks(),Bv(t,!0),Bv(t,!1),e.plan()},Bv=function(t,e){for(var n=t._model,i=t._scheduler,r=e?t._componentsViews:t._chartsViews,o=e?t._componentsMap:t._chartsMap,a=t._zr,s=t._api,l=0;le.get("hoverLayerThreshold")&&!r.node&&!r.worker&&e.eachSeries((function(e){if(!e.preventUsingHoverLayer){var n=t._chartsMap[e.__viewId];n.__alive&&n.eachRendered((function(t){t.states.emphasis&&(t.states.emphasis.hoverLayer=!0)}))}}))}(t,e),Cv.trigger("series:afterupdate",e,n,l)},Jv=function(t){t.__needsUpdateStatus=!0,t.getZr().wakeUp()},ty=function(t){t.__needsUpdateStatus&&(t.getZr().storage.traverse((function(t){Vu(t)||e(t)})),t.__needsUpdateStatus=!1)},$v=function(t){return new(function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return n(i,e),i.prototype.getCoordinateSystems=function(){return t._coordSysMgr.getCoordinateSystems()},i.prototype.getComponentByElement=function(e){for(;e;){var n=e.__ecComponentInfo;if(null!=n)return t._model.getComponent(n.mainType,n.index);e=e.parent}},i.prototype.enterEmphasis=function(e,n){il(e,n),Jv(t)},i.prototype.leaveEmphasis=function(e,n){rl(e,n),Jv(t)},i.prototype.enterBlur=function(e){ol(e),Jv(t)},i.prototype.leaveBlur=function(e){al(e),Jv(t)},i.prototype.enterSelect=function(e){sl(e),Jv(t)},i.prototype.leaveSelect=function(e){ll(e),Jv(t)},i.prototype.getModel=function(){return t.getModel()},i.prototype.getViewOfComponentModel=function(e){return t.getViewOfComponentModel(e)},i.prototype.getViewOfSeriesModel=function(e){return t.getViewOfSeriesModel(e)},i}(Np))(t)},Qv=function(t){function e(t,e){for(var n=0;n=0)){Ly.push(n);var o=sg.wrapStageHandler(n,r);o.__prio=e,o.__raw=n,t.push(o)}}function Ry(t,e){dy[t]=e}function Ny(t,e,n){var i=Tv("registerMap");i&&i(t,e,n)}var Ey=function(t){var e=(t=I(t)).type,n="";e||qr(n);var i=e.split(":");2!==i.length&&qr(n);var r=!1;"echarts"===i[0]&&(e=i[1],r=!0),t.__isBuiltIn=r,Yd.set(e,t)};Py(kv,ng),Py(Av,rg),Py(Av,og),Py(kv,Lg),Py(Av,Og),Py(7e3,(function(t,e){t.eachRawSeries((function(n){if(!t.isSeriesFiltered(n)){var i=n.getData();i.hasItemVisual()&&i.each((function(t){var n=i.getItemVisual(t,"decal");n&&(i.ensureUniqueItemVisual(t,"style").decal=wv(n,e))}));var r=i.getVisual("decal");if(r)i.getVisual("style").decal=wv(r,e)}}))})),Sy(ad),My(900,(function(t){var e=dt();t.eachSeries((function(t){var n=t.get("stack");if(n){var i=e.get(n)||e.set(n,[]),r=t.getData(),o={stackResultDimension:r.getCalculationInfo("stackResultDimension"),stackedOverDimension:r.getCalculationInfo("stackedOverDimension"),stackedDimension:r.getCalculationInfo("stackedDimension"),stackedByDimension:r.getCalculationInfo("stackedByDimension"),isStackedByIndex:r.getCalculationInfo("isStackedByIndex"),data:r,seriesModel:t};if(!o.stackedDimension||!o.isStackedByIndex&&!o.stackedByDimension)return;i.length&&r.setCalculationInfo("stackedOnSeries",i[i.length-1].seriesModel),i.push(o)}})),e.each(sd)})),Ry("default",(function(t,e){A(e=e||{},{text:"loading",textColor:"#000",fontSize:12,fontWeight:"normal",fontStyle:"normal",fontFamily:"sans-serif",maskColor:"rgba(255, 255, 255, 0.8)",showSpinner:!0,color:"#5470c6",spinnerRadius:10,lineWidth:5,zlevel:0});var n=new _r,i=new ps({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4});n.add(i);var r,o=new gs({style:{text:e.text,fill:e.textColor,fontSize:e.fontSize,fontWeight:e.fontWeight,fontStyle:e.fontStyle,fontFamily:e.fontFamily},zlevel:e.zlevel,z:10001}),a=new ps({style:{fill:"none"},textContent:o,textConfig:{position:"right",distance:10},zlevel:e.zlevel,z:10001});return n.add(a),e.showSpinner&&((r=new bu({shape:{startAngle:-ag/2,endAngle:-ag/2+.1,r:e.spinnerRadius},style:{stroke:e.color,lineCap:"round",lineWidth:e.lineWidth},zlevel:e.zlevel,z:10001})).animateShape(!0).when(1e3,{endAngle:3*ag/2}).start("circularInOut"),r.animateShape(!0).when(1e3,{startAngle:3*ag/2}).delay(300).start("circularInOut"),n.add(r)),n.resize=function(){var n=o.getBoundingRect().width,s=e.showSpinner?e.spinnerRadius:0,l=(t.getWidth()-2*s-(e.showSpinner&&n?10:0)-n)/2-(e.showSpinner&&n?0:5+n/2)+(e.showSpinner?0:n/2)+(n?0:s),u=t.getHeight()/2;e.showSpinner&&r.setShape({cx:l,cy:u}),a.setShape({x:l-s,y:u-s,width:2*s,height:2*s}),i.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},n.resize(),n})),Dy({type:Ns,event:Ns,update:Ns},mt),Dy({type:Es,event:Es,update:Es},mt),Dy({type:zs,event:zs,update:zs},mt),Dy({type:Bs,event:Bs,update:Bs},mt),Dy({type:Vs,event:Vs,update:Vs},mt),by("light",Sg),by("dark",Dg);var zy=[],By={registerPreprocessor:Sy,registerProcessor:My,registerPostInit:Cy,registerPostUpdate:Iy,registerUpdateLifecycle:Ty,registerAction:Dy,registerCoordinateSystem:ky,registerLayout:Ay,registerVisual:Py,registerTransform:Ey,registerLoading:Ry,registerMap:Ny,registerImpl:function(t,e){Iv[t]=e},PRIORITY:Pv,ComponentModel:Jc,ComponentView:Nf,SeriesModel:Tf,ChartView:Vf,registerComponentModel:function(t){Jc.registerClass(t)},registerComponentView:function(t){Nf.registerClass(t)},registerSeriesModel:function(t){Tf.registerClass(t)},registerChartView:function(t){Vf.registerClass(t)},registerSubTypeDefaulter:function(t,e){Jc.registerSubTypeDefaulter(t,e)},registerPainter:function(t,e){Mr(t,e)}};function Vy(t){G(t)?E(t,(function(t){Vy(t)})):L(zy,t)>=0||(zy.push(t),U(t)&&(t={install:t}),t.install(By))}function Fy(t){return null==t?0:t.length||1}function Hy(t){return t}var Wy=function(){function t(t,e,n,i,r,o){this._old=t,this._new=e,this._oldKeyGetter=n||Hy,this._newKeyGetter=i||Hy,this.context=r,this._diffModeMultiple="multiple"===o}return t.prototype.add=function(t){return this._add=t,this},t.prototype.update=function(t){return this._update=t,this},t.prototype.updateManyToOne=function(t){return this._updateManyToOne=t,this},t.prototype.updateOneToMany=function(t){return this._updateOneToMany=t,this},t.prototype.updateManyToMany=function(t){return this._updateManyToMany=t,this},t.prototype.remove=function(t){return this._remove=t,this},t.prototype.execute=function(){this[this._diffModeMultiple?"_executeMultiple":"_executeOneToOne"]()},t.prototype._executeOneToOne=function(){var t=this._old,e=this._new,n={},i=new Array(t.length),r=new Array(e.length);this._initIndexMap(t,null,i,"_oldKeyGetter"),this._initIndexMap(e,n,r,"_newKeyGetter");for(var o=0;o1){var u=s.shift();1===s.length&&(n[a]=s[0]),this._update&&this._update(u,o)}else 1===l?(n[a]=null,this._update&&this._update(s,o)):this._remove&&this._remove(o)}this._performRestAdd(r,n)},t.prototype._executeMultiple=function(){var t=this._old,e=this._new,n={},i={},r=[],o=[];this._initIndexMap(t,n,r,"_oldKeyGetter"),this._initIndexMap(e,i,o,"_newKeyGetter");for(var a=0;a1&&1===c)this._updateManyToOne&&this._updateManyToOne(u,l),i[s]=null;else if(1===h&&c>1)this._updateOneToMany&&this._updateOneToMany(u,l),i[s]=null;else if(1===h&&1===c)this._update&&this._update(u,l),i[s]=null;else if(h>1&&c>1)this._updateManyToMany&&this._updateManyToMany(u,l),i[s]=null;else if(h>1)for(var p=0;p1)for(var a=0;a30}var Jy,tm,em,nm,im,rm,om,am=j,sm=z,lm="undefined"==typeof Int32Array?Array:Int32Array,um=["hasItemOption","_nameList","_idList","_invertedIndicesMap","_dimSummary","userOutput","_rawData","_dimValueGetter","_nameDimIdx","_idDimIdx","_nameRepeatCount"],hm=["_approximateExtent"],cm=function(){function t(t,e){var n;this.type="list",this._dimOmitted=!1,this._nameList=[],this._idList=[],this._visual={},this._layout={},this._itemVisuals=[],this._itemLayouts=[],this._graphicEls=[],this._approximateExtent={},this._calculationInfo={},this.hasItemOption=!1,this.TRANSFERABLE_METHODS=["cloneShallow","downSample","lttbDownSample","map"],this.CHANGABLE_METHODS=["filterSelf","selectRange"],this.DOWNSAMPLE_METHODS=["downSample","lttbDownSample"];var i=!1;qy(t)?(n=t.dimensions,this._dimOmitted=t.isDimensionOmitted(),this._schema=t):(i=!0,n=t),n=n||["x","y"];for(var r={},o=[],a={},s=!1,l={},u=0;u=e)){var n=this._store.getProvider();this._updateOrdinalMeta();var i=this._nameList,r=this._idList;if(n.getSource().sourceFormat===rp&&!n.pure)for(var o=[],a=t;a0},t.prototype.ensureUniqueItemVisual=function(t,e){var n=this._itemVisuals,i=n[t];i||(i=n[t]={});var r=i[e];return null==r&&(G(r=this.getVisual(e))?r=r.slice():am(r)&&(r=k({},r)),i[e]=r),r},t.prototype.setItemVisual=function(t,e,n){var i=this._itemVisuals[t]||{};this._itemVisuals[t]=i,am(e)?k(i,e):i[e]=n},t.prototype.clearAllVisual=function(){this._visual={},this._itemVisuals=[]},t.prototype.setLayout=function(t,e){am(t)?k(this._layout,t):this._layout[t]=e},t.prototype.getLayout=function(t){return this._layout[t]},t.prototype.getItemLayout=function(t){return this._itemLayouts[t]},t.prototype.setItemLayout=function(t,e,n){this._itemLayouts[t]=n?k(this._itemLayouts[t]||{},e):e},t.prototype.clearItemLayouts=function(){this._itemLayouts.length=0},t.prototype.setItemGraphicEl=function(t,e){!function(t,e,n,i){if(i){var r=Ds(i);r.dataIndex=n,r.dataType=e,r.seriesIndex=t,"group"===i.type&&i.traverse((function(i){var r=Ds(i);r.seriesIndex=t,r.dataIndex=n,r.dataType=e}))}}(this.hostModel&&this.hostModel.seriesIndex,this.dataType,t,e),this._graphicEls[t]=e},t.prototype.getItemGraphicEl=function(t){return this._graphicEls[t]},t.prototype.eachItemGraphicEl=function(t,e){E(this._graphicEls,(function(n,i){n&&t&&t.call(e,n,i)}))},t.prototype.cloneShallow=function(e){return e||(e=new t(this._schema?this._schema:sm(this.dimensions,this._getDimInfo,this),this.hostModel)),im(e,this),e._store=this._store,e},t.prototype.wrapMethod=function(t,e){var n=this[t];U(n)&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var t=n.apply(this,arguments);return e.apply(this,[t].concat(ot(arguments)))})},t.internalField=(Jy=function(t){var e=t._invertedIndicesMap;E(e,(function(n,i){var r=t._dimInfos[i],o=r.ordinalMeta,a=t._store;if(o){n=e[i]=new lm(o.categories.length);for(var s=0;s1&&(s+="__ec__"+u),i[e]=s}})),t}();function pm(t,e){fd(t)||(t=vd(t));var n=(e=e||{}).coordDimensions||[],i=e.dimensionsDefine||t.dimensionsDefine||[],r=dt(),o=[],a=function(t,e,n,i){var r=Math.max(t.dimensionsDetectedCount||1,e.length,n.length,i||0);return E(e,(function(t){var e;j(t)&&(e=t.dimsDef)&&(r=Math.max(r,e.length))})),r}(t,n,i,e.dimensionsCount),s=e.canOmitUnusedDimensions&&Qy(a),l=i===t.dimensionsDefine,u=l?$y(t):Ky(i),h=e.encodeDefine;!h&&e.encodeDefaulter&&(h=e.encodeDefaulter(t,a));for(var c=dt(h),p=new Jd(a),d=0;d0&&(i.name=r+(o-1)),o++,e.set(r,o)}}(o),new jy({source:t,dimensions:o,fullDimensionCount:a,dimensionOmitted:s})}function dm(t,e,n){var i=e.data;if(n||i.hasOwnProperty(t)){for(var r=0;i.hasOwnProperty(t+r);)r++;t+=r}return e.set(t,!0),t}var fm=function(t){this.coordSysDims=[],this.axisMap=dt(),this.categoryAxisMap=dt(),this.coordSysName=t};var gm={cartesian2d:function(t,e,n,i){var r=t.getReferringComponents("xAxis",vo).models[0],o=t.getReferringComponents("yAxis",vo).models[0];e.coordSysDims=["x","y"],n.set("x",r),n.set("y",o),vm(r)&&(i.set("x",r),e.firstCategoryDimIndex=0),vm(o)&&(i.set("y",o),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=1))},singleAxis:function(t,e,n,i){var r=t.getReferringComponents("singleAxis",vo).models[0];e.coordSysDims=["single"],n.set("single",r),vm(r)&&(i.set("single",r),e.firstCategoryDimIndex=0)},polar:function(t,e,n,i){var r=t.getReferringComponents("polar",vo).models[0],o=r.findAxisModel("radiusAxis"),a=r.findAxisModel("angleAxis");e.coordSysDims=["radius","angle"],n.set("radius",o),n.set("angle",a),vm(o)&&(i.set("radius",o),e.firstCategoryDimIndex=0),vm(a)&&(i.set("angle",a),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=1))},geo:function(t,e,n,i){e.coordSysDims=["lng","lat"]},parallel:function(t,e,n,i){var r=t.ecModel,o=r.getComponent("parallel",t.get("parallelIndex")),a=e.coordSysDims=o.dimensions.slice();E(o.parallelAxisIndex,(function(t,o){var s=r.getComponent("parallelAxis",t),l=a[o];n.set(l,s),vm(s)&&(i.set(l,s),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=o))}))}};function vm(t){return"category"===t.get("type")}function ym(t,e,n){var i,r,o,a=(n=n||{}).byIndex,s=n.stackedCoordDimension;!function(t){return!qy(t.schema)}(e)?(r=e.schema,i=r.dimensions,o=e.store):i=e;var l,u,h,c,p=!(!t||!t.get("stack"));if(E(i,(function(t,e){Z(t)&&(i[e]=t={name:t}),p&&!t.isExtraCoord&&(a||l||!t.ordinalMeta||(l=t),u||"ordinal"===t.type||"time"===t.type||s&&s!==t.coordDim||(u=t))})),!u||a||l||(a=!0),u){h="__\0ecstackresult_"+t.id,c="__\0ecstackedover_"+t.id,l&&(l.createInvertedIndices=!0);var d=u.coordDim,f=u.type,g=0;E(i,(function(t){t.coordDim===d&&g++}));var v={name:h,coordDim:d,coordDimIndex:g,type:f,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:i.length},y={name:c,coordDim:c,coordDimIndex:g+1,type:f,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:i.length+1};r?(o&&(v.storeDimIndex=o.ensureCalculationDimension(c,f),y.storeDimIndex=o.ensureCalculationDimension(h,f)),r.appendCalculationDimension(v),r.appendCalculationDimension(y)):(i.push(v),i.push(y))}return{stackedDimension:u&&u.name,stackedByDimension:l&&l.name,isStackedByIndex:a,stackedOverDimension:c,stackResultDimension:h}}function mm(t,e){return!!e&&e===t.getCalculationInfo("stackedDimension")}function _m(t,e){return mm(t,e)?t.getCalculationInfo("stackResultDimension"):e}function xm(t,e,n){n=n||{};var i,r=e.getSourceManager(),o=!1;t?(o=!0,i=vd(t)):o=(i=r.getSource()).sourceFormat===rp;var a=function(t){var e=t.get("coordinateSystem"),n=new fm(e),i=gm[e];if(i)return i(t,n,n.axisMap,n.categoryAxisMap),n}(e),s=function(t,e){var n,i=t.get("coordinateSystem"),r=zp.get(i);return e&&e.coordSysDims&&(n=z(e.coordSysDims,(function(t){var n={name:t},i=e.axisMap.get(t);if(i){var r=i.get("type");n.type=function(t){return"category"===t?"ordinal":"time"===t?"time":"float"}(r)}return n}))),n||(n=r&&(r.getDimensionsInfo?r.getDimensionsInfo():r.dimensions.slice())||["x","y"]),n}(e,a),l=n.useEncodeDefaulter,u=U(l)?l:l?W(vp,s,e):null,h=pm(i,{coordDimensions:s,generateCoord:n.generateCoord,encodeDefine:e.getEncode(),encodeDefaulter:u,canOmitUnusedDimensions:!o}),c=function(t,e,n){var i,r;return n&&E(t,(function(t,o){var a=t.coordDim,s=n.categoryAxisMap.get(a);s&&(null==i&&(i=o),t.ordinalMeta=s.getOrdinalMeta(),e&&(t.createInvertedIndices=!0)),null!=t.otherDims.itemName&&(r=!0)})),r||null==i||(t[i].otherDims.itemName=0),i}(h.dimensions,n.createInvertedIndices,a),p=o?null:r.getSharedDataStore(h),d=ym(e,{schema:h,store:p}),f=new cm(h,e);f.setCalculationInfo(d);var g=null!=c&&function(t){if(t.sourceFormat===rp){return!G(no(function(t){var e=0;for(;ee[1]&&(e[1]=t[1])},t.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},t.prototype.getExtent=function(){return this._extent.slice()},t.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=t),isNaN(e)||(n[1]=e)},t.prototype.isInExtentRange=function(t){return this._extent[0]<=t&&this._extent[1]>=t},t.prototype.isBlank=function(){return this._isBlank},t.prototype.setBlank=function(t){this._isBlank=t},t}();Do(wm);var bm=0,Sm=function(){function t(t){this.categories=t.categories||[],this._needCollect=t.needCollect,this._deduplication=t.deduplication,this.uid=++bm}return t.createByAxisModel=function(e){var n=e.option,i=n.data,r=i&&z(i,Mm);return new t({categories:r,needCollect:!r,deduplication:!1!==n.dedplication})},t.prototype.getOrdinal=function(t){return this._getOrCreateMap().get(t)},t.prototype.parseAndCollect=function(t){var e,n=this._needCollect;if(!Z(t)&&!n)return t;if(n&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,e;var i=this._getOrCreateMap();return null==(e=i.get(t))&&(n?(e=this.categories.length,this.categories[e]=t,i.set(t,e)):e=NaN),e},t.prototype._getOrCreateMap=function(){return this._map||(this._map=dt(this.categories))},t}();function Mm(t){return j(t)&&null!=t.value?t.value:t+""}function Cm(t){return"interval"===t.type||"log"===t.type}function Im(t,e,n,i){var r={},o=t[1]-t[0],a=r.interval=Wr(o/e,!0);null!=n&&ai&&(a=r.interval=i);var s=r.intervalPrecision=Dm(a);return function(t,e){!isFinite(t[0])&&(t[0]=e[0]),!isFinite(t[1])&&(t[1]=e[1]),km(t,0,e),km(t,1,e),t[0]>t[1]&&(t[0]=t[1])}(r.niceTickExtent=[kr(Math.ceil(t[0]/a)*a,s),kr(Math.floor(t[1]/a)*a,s)],t),r}function Tm(t){var e=Math.pow(10,Hr(t)),n=t/e;return n?2===n?n=3:3===n?n=5:n*=2:n=1,kr(n*e)}function Dm(t){return Pr(t)+2}function km(t,e,n){t[e]=Math.max(Math.min(t[e],n[1]),n[0])}function Am(t,e){return t>=e[0]&&t<=e[1]}function Pm(t,e){return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])}function Lm(t,e){return t*(e[1]-e[0])+e[0]}var Om=function(t){function e(e){var n=t.call(this,e)||this;n.type="ordinal";var i=n.getSetting("ordinalMeta");return i||(i=new Sm({})),G(i)&&(i=new Sm({categories:z(i,(function(t){return j(t)?t.value:t}))})),n._ordinalMeta=i,n._extent=n.getSetting("extent")||[0,i.categories.length-1],n}return n(e,t),e.prototype.parse=function(t){return null==t?NaN:Z(t)?this._ordinalMeta.getOrdinal(t):Math.round(t)},e.prototype.contain=function(t){return Am(t=this.parse(t),this._extent)&&null!=this._ordinalMeta.categories[t]},e.prototype.normalize=function(t){return Pm(t=this._getTickNumber(this.parse(t)),this._extent)},e.prototype.scale=function(t){return t=Math.round(Lm(t,this._extent)),this.getRawOrdinalNumber(t)},e.prototype.getTicks=function(){for(var t=[],e=this._extent,n=e[0];n<=e[1];)t.push({value:n}),n++;return t},e.prototype.getMinorTicks=function(t){},e.prototype.setSortInfo=function(t){if(null!=t){for(var e=t.ordinalNumbers,n=this._ordinalNumbersByTick=[],i=this._ticksByOrdinalNumber=[],r=0,o=this._ordinalMeta.categories.length,a=Math.min(o,e.length);r=0&&t=0&&t=t},e.prototype.getOrdinalMeta=function(){return this._ordinalMeta},e.prototype.calcNiceTicks=function(){},e.prototype.calcNiceExtent=function(){},e.type="ordinal",e}(wm);wm.registerClass(Om);var Rm=kr,Nm=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="interval",e._interval=0,e._intervalPrecision=2,e}return n(e,t),e.prototype.parse=function(t){return t},e.prototype.contain=function(t){return Am(t,this._extent)},e.prototype.normalize=function(t){return Pm(t,this._extent)},e.prototype.scale=function(t){return Lm(t,this._extent)},e.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=parseFloat(t)),isNaN(e)||(n[1]=parseFloat(e))},e.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1]),this.setExtent(e[0],e[1])},e.prototype.getInterval=function(){return this._interval},e.prototype.setInterval=function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=Dm(t)},e.prototype.getTicks=function(t){var e=this._interval,n=this._extent,i=this._niceExtent,r=this._intervalPrecision,o=[];if(!e)return o;n[0]1e4)return[];var s=o.length?o[o.length-1].value:i[1];return n[1]>s&&(t?o.push({value:Rm(s+e,r)}):o.push({value:n[1]})),o},e.prototype.getMinorTicks=function(t){for(var e=this.getTicks(!0),n=[],i=this.getExtent(),r=1;ri[0]&&h0&&(o=null===o?s:Math.min(o,s))}n[i]=o}}return n}(t),n=[];return E(t,(function(t){var i,r=t.coordinateSystem.getBaseAxis(),o=r.getExtent();if("category"===r.type)i=r.getBandWidth();else if("value"===r.type||"time"===r.type){var a=r.dim+"_"+r.index,s=e[a],l=Math.abs(o[1]-o[0]),u=r.scale.getExtent(),h=Math.abs(u[1]-u[0]);i=s?l/h*s:l}else{var c=t.getData();i=Math.abs(o[1]-o[0])/c.count()}var p=Dr(t.get("barWidth"),i),d=Dr(t.get("barMaxWidth"),i),f=Dr(t.get("barMinWidth")||(Zm(t)?.5:1),i),g=t.get("barGap"),v=t.get("barCategoryGap");n.push({bandWidth:i,barWidth:p,barMaxWidth:d,barMinWidth:f,barGap:g,barCategoryGap:v,axisKey:Fm(r),stackId:Vm(t)})})),function(t){var e={};E(t,(function(t,n){var i=t.axisKey,r=t.bandWidth,o=e[i]||{bandWidth:r,remainedWidth:r,autoWidthCount:0,categoryGap:null,gap:"20%",stacks:{}},a=o.stacks;e[i]=o;var s=t.stackId;a[s]||o.autoWidthCount++,a[s]=a[s]||{width:0,maxWidth:0};var l=t.barWidth;l&&!a[s].width&&(a[s].width=l,l=Math.min(o.remainedWidth,l),o.remainedWidth-=l);var u=t.barMaxWidth;u&&(a[s].maxWidth=u);var h=t.barMinWidth;h&&(a[s].minWidth=h);var c=t.barGap;null!=c&&(o.gap=c);var p=t.barCategoryGap;null!=p&&(o.categoryGap=p)}));var n={};return E(e,(function(t,e){n[e]={};var i=t.stacks,r=t.bandWidth,o=t.categoryGap;if(null==o){var a=F(i).length;o=Math.max(35-4*a,15)+"%"}var s=Dr(o,r),l=Dr(t.gap,1),u=t.remainedWidth,h=t.autoWidthCount,c=(u-s)/(h+(h-1)*l);c=Math.max(c,0),E(i,(function(t){var e=t.maxWidth,n=t.minWidth;if(t.width){i=t.width;e&&(i=Math.min(i,e)),n&&(i=Math.max(i,n)),t.width=i,u-=i+l*i,h--}else{var i=c;e&&ei&&(i=n),i!==c&&(t.width=i,u-=i+l*i,h--)}})),c=(u-s)/(h+(h-1)*l),c=Math.max(c,0);var p,d=0;E(i,(function(t,e){t.width||(t.width=c),p=t,d+=t.width*(1+l)})),p&&(d-=p.width*l);var f=-d/2;E(i,(function(t,i){n[e][i]=n[e][i]||{bandWidth:r,offset:f,width:t.width},f+=t.width*(1+l)}))})),n}(n)}function Gm(t,e){var n=Hm(t,e),i=Wm(n);E(n,(function(t){var e=t.getData(),n=t.coordinateSystem.getBaseAxis(),r=Vm(t),o=i[Fm(n)][r],a=o.offset,s=o.width;e.setLayout({bandWidth:o.bandWidth,offset:a,size:s})}))}function Um(t){return t.coordinateSystem&&"cartesian2d"===t.coordinateSystem.type}function Zm(t){return t.pipelineContext&&t.pipelineContext.large}var Ym=function(t){function e(e){var n=t.call(this,e)||this;return n.type="time",n}return n(e,t),e.prototype.getLabel=function(t){var e=this.getSetting("useUTC");return cc(t.value,oc[function(t){switch(t){case"year":case"month":return"day";case"millisecond":return"millisecond";default:return"second"}}(uc(this._minLevelUnit))]||oc.second,e,this.getSetting("locale"))},e.prototype.getFormattedLabel=function(t,e,n){var i=this.getSetting("useUTC");return function(t,e,n,i,r){var o=null;if(Z(n))o=n;else if(U(n))o=n(t.value,e,{level:t.level});else{var a=k({},ic);if(t.level>0)for(var s=0;s=0;--s)if(l[u]){o=l[u];break}o=o||a.none}if(G(o)){var h=null==t.level?0:t.level>=0?t.level:o.length+t.level;o=o[h=Math.min(h,o.length-1)]}}return cc(new Date(t.value),o,r,i)}(t,e,n,this.getSetting("locale"),i)},e.prototype.getTicks=function(){var t=this._interval,e=this._extent,n=[];if(!t)return n;n.push({value:e[0],level:0});var i=this.getSetting("useUTC"),r=function(t,e,n,i){var r=1e4,o=sc,a=0;function s(t,e,n,r,o,a,s){for(var l=new Date(e),u=e,h=l[r]();u1&&0===u&&o.unshift({value:o[0].value-p})}}for(u=0;u=i[0]&&y<=i[1]&&c++)}var m=(i[1]-i[0])/e;if(c>1.5*m&&p>m/1.5)break;if(u.push(g),c>m||t===o[d])break}h=[]}}0;var _=V(z(u,(function(t){return V(t,(function(t){return t.value>=i[0]&&t.value<=i[1]&&!t.notAdd}))})),(function(t){return t.length>0})),x=[],w=_.length-1;for(d=0;d<_.length;++d)for(var b=_[d],S=0;Sn&&(this._approxInterval=n);var o=Xm.length,a=Math.min(function(t,e,n,i){for(;n>>1;t[r][1]16?16:t>7.5?7:t>3.5?4:t>1.5?2:1}function qm(t){return(t/=2592e6)>6?6:t>3?3:t>2?2:1}function Km(t){return(t/=tc)>12?12:t>6?6:t>3.5?4:t>2?2:1}function $m(t,e){return(t/=e?Jh:Qh)>30?30:t>20?20:t>15?15:t>10?10:t>5?5:t>2?2:1}function Qm(t){return Wr(t,!0)}function Jm(t,e,n){var i=new Date(t);switch(uc(e)){case"year":case"month":i[bc(n)](0);case"day":i[Sc(n)](1);case"hour":i[Mc(n)](0);case"minute":i[Cc(n)](0);case"second":i[Ic(n)](0),i[Tc(n)](0)}return i.getTime()}wm.registerClass(Ym);var t_=wm.prototype,e_=Nm.prototype,n_=kr,i_=Math.floor,r_=Math.ceil,o_=Math.pow,a_=Math.log,s_=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="log",e.base=10,e._originalScale=new Nm,e._interval=0,e}return n(e,t),e.prototype.getTicks=function(t){var e=this._originalScale,n=this._extent,i=e.getExtent();return z(e_.getTicks.call(this,t),(function(t){var e=t.value,r=kr(o_(this.base,e));return r=e===n[0]&&this._fixMin?u_(r,i[0]):r,{value:r=e===n[1]&&this._fixMax?u_(r,i[1]):r}}),this)},e.prototype.setExtent=function(t,e){var n=this.base;t=a_(t)/a_(n),e=a_(e)/a_(n),e_.setExtent.call(this,t,e)},e.prototype.getExtent=function(){var t=this.base,e=t_.getExtent.call(this);e[0]=o_(t,e[0]),e[1]=o_(t,e[1]);var n=this._originalScale.getExtent();return this._fixMin&&(e[0]=u_(e[0],n[0])),this._fixMax&&(e[1]=u_(e[1],n[1])),e},e.prototype.unionExtent=function(t){this._originalScale.unionExtent(t);var e=this.base;t[0]=a_(t[0])/a_(e),t[1]=a_(t[1])/a_(e),t_.unionExtent.call(this,t)},e.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},e.prototype.calcNiceTicks=function(t){t=t||10;var e=this._extent,n=e[1]-e[0];if(!(n===1/0||n<=0)){var i=Fr(n);for(t/n*i<=.5&&(i*=10);!isNaN(i)&&Math.abs(i)<1&&Math.abs(i)>0;)i*=10;var r=[kr(r_(e[0]/i)*i),kr(i_(e[1]/i)*i)];this._interval=i,this._niceExtent=r}},e.prototype.calcNiceExtent=function(t){e_.calcNiceExtent.call(this,t),this._fixMin=t.fixMin,this._fixMax=t.fixMax},e.prototype.parse=function(t){return t},e.prototype.contain=function(t){return Am(t=a_(t)/a_(this.base),this._extent)},e.prototype.normalize=function(t){return Pm(t=a_(t)/a_(this.base),this._extent)},e.prototype.scale=function(t){return t=Lm(t,this._extent),o_(this.base,t)},e.type="log",e}(wm),l_=s_.prototype;function u_(t,e){return n_(t,Pr(e))}l_.getMinorTicks=e_.getMinorTicks,l_.getLabel=e_.getLabel,wm.registerClass(s_);var h_=function(){function t(t,e,n){this._prepareParams(t,e,n)}return t.prototype._prepareParams=function(t,e,n){n[1]0&&s>0&&!l&&(a=0),a<0&&s<0&&!u&&(s=0));var c=this._determinedMin,p=this._determinedMax;return null!=c&&(a=c,l=!0),null!=p&&(s=p,u=!0),{min:a,max:s,minFixed:l,maxFixed:u,isBlank:h}},t.prototype.modifyDataMinMax=function(t,e){this[p_[t]]=e},t.prototype.setDeterminedMinMax=function(t,e){var n=c_[t];this[n]=e},t.prototype.freeze=function(){this.frozen=!0},t}(),c_={min:"_determinedMin",max:"_determinedMax"},p_={min:"_dataMin",max:"_dataMax"};function d_(t,e,n){var i=t.rawExtentInfo;return i||(i=new h_(t,e,n),t.rawExtentInfo=i,i)}function f_(t,e){return null==e?null:et(e)?NaN:t.parse(e)}function g_(t,e){var n=t.type,i=d_(t,e,t.getExtent()).calculate();t.setBlank(i.isBlank);var r=i.min,o=i.max,a=e.ecModel;if(a&&"time"===n){var s=Hm("bar",a),l=!1;if(E(s,(function(t){l=l||t.getBaseAxis()===e.axis})),l){var u=Wm(s),h=function(t,e,n,i){var r=n.axis.getExtent(),o=r[1]-r[0],a=function(t,e,n){if(t&&e){var i=t[Fm(e)];return null!=i&&null!=n?i[Vm(n)]:i}}(i,n.axis);if(void 0===a)return{min:t,max:e};var s=1/0;E(a,(function(t){s=Math.min(t.offset,s)}));var l=-1/0;E(a,(function(t){l=Math.max(t.offset+t.width,l)})),s=Math.abs(s),l=Math.abs(l);var u=s+l,h=e-t,c=h/(1-(s+l)/o)-h;return{min:t-=c*(s/u),max:e+=c*(l/u)}}(r,o,e,u);r=h.min,o=h.max}}return{extent:[r,o],fixMin:i.minFixed,fixMax:i.maxFixed}}function v_(t,e){var n=e,i=g_(t,n),r=i.extent,o=n.get("splitNumber");t instanceof s_&&(t.base=n.get("logBase"));var a=t.type,s=n.get("interval"),l="interval"===a||"time"===a;t.setExtent(r[0],r[1]),t.calcNiceExtent({splitNumber:o,fixMin:i.fixMin,fixMax:i.fixMax,minInterval:l?n.get("minInterval"):null,maxInterval:l?n.get("maxInterval"):null}),null!=s&&t.setInterval&&t.setInterval(s)}function y_(t,e){if(e=e||t.get("type"))switch(e){case"category":return new Om({ordinalMeta:t.getOrdinalMeta?t.getOrdinalMeta():t.getCategories(),extent:[1/0,-1/0]});case"time":return new Ym({locale:t.ecModel.getLocaleModel(),useUTC:t.ecModel.get("useUTC")});default:return new(wm.getClass(e)||Nm)}}function m_(t){var e,n,i=t.getLabelModel().get("formatter"),r="category"===t.type?t.scale.getExtent()[0]:null;return"time"===t.scale.type?(n=i,function(e,i){return t.scale.getFormattedLabel(e,i,n)}):Z(i)?function(e){return function(n){var i=t.scale.getLabel(n);return e.replace("{value}",null!=i?i:"")}}(i):U(i)?(e=i,function(n,i){return null!=r&&(i=n.value-r),e(__(t,n),i,null!=n.level?{level:n.level}:null)}):function(e){return t.scale.getLabel(e)}}function __(t,e){return"category"===t.type?t.scale.getLabel(e):e.value}function x_(t,e){var n=e*Math.PI/180,i=t.width,r=t.height,o=i*Math.abs(Math.cos(n))+Math.abs(r*Math.sin(n)),a=i*Math.abs(Math.sin(n))+Math.abs(r*Math.cos(n));return new Ji(t.x,t.y,o,a)}function w_(t){var e=t.get("interval");return null==e?"auto":e}function b_(t){return"category"===t.type&&0===w_(t.getLabelModel())}function S_(t,e){var n={};return E(t.mapDimensionsAll(e),(function(e){n[_m(t,e)]=!0})),F(n)}var M_=function(){function t(){}return t.prototype.getNeedCrossZero=function(){return!this.option.scale},t.prototype.getCoordSysModel=function(){},t}();var C_={isDimensionStacked:mm,enableDataStack:ym,getStackedDimension:_m};var I_=Object.freeze({__proto__:null,createList:function(t){return xm(null,t)},getLayoutRect:Yc,dataStack:C_,createScale:function(t,e){var n=e;e instanceof Hh||(n=new Hh(e));var i=y_(n);return i.setExtent(t[0],t[1]),v_(i,n),i},mixinAxisModelCommonMethods:function(t){R(t,M_)},getECData:Ds,createTextStyle:function(t,e){return bh(t,null,null,"normal"!==(e=e||{}).state)},createDimensions:function(t,e){return pm(t,e).dimensions},createSymbol:jg,enableHoverEmphasis:vl});function T_(t,e){return Math.abs(t-e)<1e-8}function D_(t,e,n){var i=0,r=t[0];if(!r)return!1;for(var o=1;on&&(t=r,n=a)}if(t)return function(t){for(var e=0,n=0,i=0,r=t.length,o=t[r-1][0],a=t[r-1][1],s=0;s>1^-(1&s),l=l>>1^-(1&l),r=s+=r,o=l+=o,i.push([s/n,l/n])}return i}function B_(t,e){return z(V((t=function(t){if(!t.UTF8Encoding)return t;var e=t,n=e.UTF8Scale;return null==n&&(n=1024),E(e.features,(function(t){var e=t.geometry,i=e.encodeOffsets,r=e.coordinates;if(i)switch(e.type){case"LineString":e.coordinates=z_(r,i,n);break;case"Polygon":case"MultiLineString":E_(r,i,n);break;case"MultiPolygon":E(r,(function(t,e){return E_(t,i[e],n)}))}})),e.UTF8Encoding=!1,e}(t)).features,(function(t){return t.geometry&&t.properties&&t.geometry.coordinates.length>0})),(function(t){var n=t.properties,i=t.geometry,r=[];switch(i.type){case"Polygon":var o=i.coordinates;r.push(new O_(o[0],o.slice(1)));break;case"MultiPolygon":E(i.coordinates,(function(t){t[0]&&r.push(new O_(t[0],t.slice(1)))}));break;case"LineString":r.push(new R_([i.coordinates]));break;case"MultiLineString":r.push(new R_(i.coordinates))}var a=new N_(n[e||"name"],r,n.cp);return a.properties=n,a}))}var V_=Object.freeze({__proto__:null,linearMap:Tr,round:kr,asc:Ar,getPrecision:Pr,getPrecisionSafe:Lr,getPixelPrecision:Or,getPercentWithPrecision:Rr,MAX_SAFE_INTEGER:9007199254740991,remRadian:Er,isRadianAroundZero:zr,parseDate:Vr,quantity:Fr,quantityExponent:Hr,nice:Wr,quantile:function(t,e){var n=(t.length-1)*e+1,i=Math.floor(n),r=+t[i-1],o=n-i;return o?r+o*(t[i]-r):r},reformIntervals:function(t){t.sort((function(t,e){return s(t,e,0)?-1:1}));for(var e=-1/0,n=1,i=0;i1&&h/l>2&&(u=Math.round(Math.ceil(u/l)*l));var c=b_(t),p=a.get("showMinLabel")||c,d=a.get("showMaxLabel")||c;p&&u!==o[0]&&g(o[0]);for(var f=u;f<=o[1];f+=l)g(f);function g(t){var e={value:t};s.push(n?t:{formattedLabel:i(e),rawLabel:r.getLabel(e),tickValue:t})}return d&&f-l!==o[1]&&g(o[1]),s}function Q_(t,e,n){var i=t.scale,r=m_(t),o=[];return E(i.getTicks(),(function(t){var a=i.getLabel(t),s=t.value;e(t.value,a)&&o.push(n?s:{formattedLabel:r(t),rawLabel:a,tickValue:s})})),o}var J_=[0,1],tx=function(){function t(t,e,n){this.onBand=!1,this.inverse=!1,this.dim=t,this.scale=e,this._extent=n||[0,0]}return t.prototype.contain=function(t){var e=this._extent,n=Math.min(e[0],e[1]),i=Math.max(e[0],e[1]);return t>=n&&t<=i},t.prototype.containData=function(t){return this.scale.contain(t)},t.prototype.getExtent=function(){return this._extent.slice()},t.prototype.getPixelPrecision=function(t){return Or(t||this.scale.getExtent(),this._extent)},t.prototype.setExtent=function(t,e){var n=this._extent;n[0]=t,n[1]=e},t.prototype.dataToCoord=function(t,e){var n=this._extent,i=this.scale;return t=i.normalize(t),this.onBand&&"ordinal"===i.type&&ex(n=n.slice(),i.count()),Tr(t,J_,n,e)},t.prototype.coordToData=function(t,e){var n=this._extent,i=this.scale;this.onBand&&"ordinal"===i.type&&ex(n=n.slice(),i.count());var r=Tr(t,n,J_,e);return this.scale.scale(r)},t.prototype.pointToData=function(t,e){},t.prototype.getTicksCoords=function(t){var e=(t=t||{}).tickModel||this.getTickModel(),n=z(Y_(this,e).ticks,(function(t){return{coord:this.dataToCoord("ordinal"===this.scale.type?this.scale.getRawOrdinalNumber(t):t),tickValue:t}}),this);return function(t,e,n,i){var r=e.length;if(!t.onBand||n||!r)return;var o,a,s=t.getExtent();if(1===r)e[0].coord=s[0],o=e[1]={coord:s[0]};else{var l=e[r-1].tickValue-e[0].tickValue,u=(e[r-1].coord-e[0].coord)/l;E(e,(function(t){t.coord-=u/2})),a=1+t.scale.getExtent()[1]-e[r-1].tickValue,o={coord:e[r-1].coord+u*a},e.push(o)}var h=s[0]>s[1];c(e[0].coord,s[0])&&(i?e[0].coord=s[0]:e.shift());i&&c(s[0],e[0].coord)&&e.unshift({coord:s[0]});c(s[1],o.coord)&&(i?o.coord=s[1]:e.pop());i&&c(o.coord,s[1])&&e.push({coord:s[1]});function c(t,e){return t=kr(t),e=kr(e),h?t>e:t0&&t<100||(t=5),z(this.scale.getMinorTicks(t),(function(t){return z(t,(function(t){return{coord:this.dataToCoord(t),tickValue:t}}),this)}),this)},t.prototype.getViewLabels=function(){return Z_(this).labels},t.prototype.getLabelModel=function(){return this.model.getModel("axisLabel")},t.prototype.getTickModel=function(){return this.model.getModel("axisTick")},t.prototype.getBandWidth=function(){var t=this._extent,e=this.scale.getExtent(),n=e[1]-e[0]+(this.onBand?1:0);0===n&&(n=1);var i=Math.abs(t[1]-t[0]);return Math.abs(i)/n},t.prototype.calculateCategoryInterval=function(){return function(t){var e=function(t){var e=t.getLabelModel();return{axisRotate:t.getRotate?t.getRotate():t.isHorizontal&&!t.isHorizontal()?90:0,labelRotate:e.get("rotate")||0,font:e.getFont()}}(t),n=m_(t),i=(e.axisRotate-e.labelRotate)/180*Math.PI,r=t.scale,o=r.getExtent(),a=r.count();if(o[1]-o[0]<1)return 0;var s=1;a>40&&(s=Math.max(1,Math.floor(a/40)));for(var l=o[0],u=t.dataToCoord(l+1)-t.dataToCoord(l),h=Math.abs(u*Math.cos(i)),c=Math.abs(u*Math.sin(i)),p=0,d=0;l<=o[1];l+=s){var f,g,v=ir(n({value:l}),e.font,"center","top");f=1.3*v.width,g=1.3*v.height,p=Math.max(p,f,7),d=Math.max(d,g,7)}var y=p/h,m=d/c;isNaN(y)&&(y=1/0),isNaN(m)&&(m=1/0);var _=Math.max(0,Math.floor(Math.min(y,m))),x=U_(t.model),w=t.getExtent(),b=x.lastAutoInterval,S=x.lastTickCount;return null!=b&&null!=S&&Math.abs(b-_)<=1&&Math.abs(S-a)<=1&&b>_&&x.axisExtent0===w[0]&&x.axisExtent1===w[1]?_=b:(x.lastTickCount=a,x.lastAutoInterval=_,x.axisExtent0=w[0],x.axisExtent1=w[1]),_}(this)},t}();function ex(t,e){var n=(t[1]-t[0])/e/2;t[0]+=n,t[1]-=n}function nx(t,e,n,i,r,o,a,s){var l=r-t,u=o-e,h=n-t,c=i-e,p=Math.sqrt(h*h+c*c),d=(l*(h/=p)+u*(c/=p))/p;s&&(d=Math.min(Math.max(d,0),1)),d*=p;var f=a[0]=t+d*h,g=a[1]=e+d*c;return Math.sqrt((f-r)*(f-r)+(g-o)*(g-o))}var ix=new Ui,rx=new Ui,ox=new Ui,ax=new Ui,sx=new Ui,lx=[],ux=new Ui;function hx(t,e){if(e<=180&&e>0){e=e/180*Math.PI,ix.fromArray(t[0]),rx.fromArray(t[1]),ox.fromArray(t[2]),Ui.sub(ax,ix,rx),Ui.sub(sx,ox,rx);var n=ax.len(),i=sx.len();if(!(n<.001||i<.001)){ax.scale(1/n),sx.scale(1/i);var r=ax.dot(sx);if(Math.cos(e)1&&Ui.copy(ux,ox),ux.toArray(t[1])}}}}function cx(t,e,n){if(n<=180&&n>0){n=n/180*Math.PI,ix.fromArray(t[0]),rx.fromArray(t[1]),ox.fromArray(t[2]),Ui.sub(ax,rx,ix),Ui.sub(sx,ox,rx);var i=ax.len(),r=sx.len();if(!(i<.001||r<.001))if(ax.scale(1/i),sx.scale(1/r),ax.dot(e)=a)Ui.copy(ux,ox);else{ux.scaleAndAdd(sx,o/Math.tan(Math.PI/2-s));var l=ox.x!==rx.x?(ux.x-rx.x)/(ox.x-rx.x):(ux.y-rx.y)/(ox.y-rx.y);if(isNaN(l))return;l<0?Ui.copy(ux,rx):l>1&&Ui.copy(ux,ox)}ux.toArray(t[1])}}}function px(t,e,n,i){var r="normal"===n,o=r?t:t.ensureState(n);o.ignore=e;var a=i.get("smooth");a&&!0===a&&(a=.3),o.shape=o.shape||{},a>0&&(o.shape.smooth=a);var s=i.getModel("lineStyle").getLineStyle();r?t.useStyle(s):o.style=s}function dx(t,e){var n=e.smooth,i=e.points;if(i)if(t.moveTo(i[0][0],i[0][1]),n>0&&i.length>=3){var r=Lt(i[0],i[1]),o=Lt(i[1],i[2]);if(!r||!o)return t.lineTo(i[1][0],i[1][1]),void t.lineTo(i[2][0],i[2][1]);var a=Math.min(r,o)*n,s=Nt([],i[1],i[0],a/r),l=Nt([],i[1],i[2],a/o),u=Nt([],s,l,.5);t.bezierCurveTo(s[0],s[1],s[0],s[1],u[0],u[1]),t.bezierCurveTo(l[0],l[1],l[0],l[1],i[2][0],i[2][1])}else for(var h=1;h0&&o&&x(-h/a,0,a);var f,g,v=t[0],y=t[a-1];return m(),f<0&&w(-f,.8),g<0&&w(g,.8),m(),_(f,g,1),_(g,f,-1),m(),f<0&&b(-f),g<0&&b(g),u}function m(){f=v.rect[e]-i,g=r-y.rect[e]-y.rect[n]}function _(t,e,n){if(t<0){var i=Math.min(e,-t);if(i>0){x(i*n,0,a);var r=i+t;r<0&&w(-r*n,1)}else w(-t*n,1)}}function x(n,i,r){0!==n&&(u=!0);for(var o=i;o0)for(l=0;l0;l--)x(-o[l-1]*c,l,a)}}function b(t){var e=t<0?-1:1;t=Math.abs(t);for(var n=Math.ceil(t/(a-1)),i=0;i0?x(n,0,i+1):x(-n,a-i-1,a),(t-=n)<=0)return}}(t,"y","height",e,n,i)}var gx=Math.sin,vx=Math.cos,yx=Math.PI,mx=2*Math.PI,_x=180/yx,xx=function(){function t(){}return t.prototype.reset=function(t){this._start=!0,this._d=[],this._str="",this._p=Math.pow(10,t||4)},t.prototype.moveTo=function(t,e){this._add("M",t,e)},t.prototype.lineTo=function(t,e){this._add("L",t,e)},t.prototype.bezierCurveTo=function(t,e,n,i,r,o){this._add("C",t,e,n,i,r,o)},t.prototype.quadraticCurveTo=function(t,e,n,i){this._add("Q",t,e,n,i)},t.prototype.arc=function(t,e,n,i,r,o){this.ellipse(t,e,n,n,0,i,r,o)},t.prototype.ellipse=function(t,e,n,i,r,o,a,s){var l=a-o,u=!s,h=Math.abs(l),c=kn(h-mx)||(u?l>=mx:-l>=mx),p=l>0?l%mx:l%mx+mx,d=!1;d=!!c||!kn(h)&&p>=yx==!!u;var f=t+n*vx(o),g=e+i*gx(o);this._start&&this._add("M",f,g);var v=Math.round(r*_x);if(c){var y=1/this._p,m=(u?1:-1)*(mx-y);this._add("A",n,i,v,1,+u,t+n*vx(o+m),e+i*gx(o+m)),y>.01&&this._add("A",n,i,v,0,+u,f,g)}else{var _=t+n*vx(a),x=e+i*gx(a);this._add("A",n,i,v,+d,+u,_,x)}},t.prototype.rect=function(t,e,n,i){this._add("M",t,e),this._add("l",n,0),this._add("l",0,i),this._add("l",-n,0),this._add("Z")},t.prototype.closePath=function(){this._d.length>0&&this._add("Z")},t.prototype._add=function(t,e,n,i,r,o,a,s,l){for(var u=[],h=this._p,c=1;c"}(r,e.attrs)+(e.text||"")+(i?""+n+z(i,(function(e){return t(e)})).join(n)+n:"")+("")}(t)}function Lx(t){return{zrId:t,shadowCache:{},patternCache:{},gradientCache:{},clipPathCache:{},defs:{},cssNodes:{},cssAnims:{},cssClassIdx:0,cssAnimIdx:0,shadowIdx:0,gradientIdx:0,patternIdx:0,clipPathIdx:0}}function Ox(t,e,n,i){return Ax("svg","root",{width:t,height:e,xmlns:Tx,"xmlns:xlink":Dx,version:"1.1",baseProfile:"full",viewBox:!!i&&"0 0 "+t+" "+e},n)}var Rx={cubicIn:"0.32,0,0.67,0",cubicOut:"0.33,1,0.68,1",cubicInOut:"0.65,0,0.35,1",quadraticIn:"0.11,0,0.5,0",quadraticOut:"0.5,1,0.89,1",quadraticInOut:"0.45,0,0.55,1",quarticIn:"0.5,0,0.75,0",quarticOut:"0.25,1,0.5,1",quarticInOut:"0.76,0,0.24,1",quinticIn:"0.64,0,0.78,0",quinticOut:"0.22,1,0.36,1",quinticInOut:"0.83,0,0.17,1",sinusoidalIn:"0.12,0,0.39,0",sinusoidalOut:"0.61,1,0.88,1",sinusoidalInOut:"0.37,0,0.63,1",exponentialIn:"0.7,0,0.84,0",exponentialOut:"0.16,1,0.3,1",exponentialInOut:"0.87,0,0.13,1",circularIn:"0.55,0,1,0.45",circularOut:"0,0.55,0.45,1",circularInOut:"0.85,0,0.15,1"},Nx="transform-origin";function Ex(t,e,n){var i=k({},t.shape);k(i,e),t.buildPath(n,i);var r=new xx;return r.reset(zn(t)),n.rebuildPath(r,1),r.generateStr(),r.getStr()}function zx(t,e){var n=e.originX,i=e.originY;(n||i)&&(t[Nx]=n+"px "+i+"px")}var Bx={fill:"fill",opacity:"opacity",lineWidth:"stroke-width",lineDashOffset:"stroke-dashoffset"};function Vx(t,e){var n=e.zrId+"-ani-"+e.cssAnimIdx++;return e.cssAnims[n]=t,n}function Fx(t){return Z(t)?Rx[t]?"cubic-bezier("+Rx[t]+")":$e(t)?t:"":""}function Hx(t,e,n,i){var r=t.animators,o=r.length,a=[];if(t instanceof Su){if(v=function(t,e,n){var i,r,o=t.shape.paths,a={};if(E(o,(function(t){var e=Lx(n.zrId);e.animation=!0,Hx(t,{},e,!0);var o=e.cssAnims,s=e.cssNodes,l=F(o),u=l.length;if(u){var h=o[r=l[u-1]];for(var c in h){var p=h[c];a[c]=a[c]||{d:""},a[c].d+=p.d||""}for(var d in s){var f=s[d].animation;f.indexOf(r)>=0&&(i=f)}}})),i){e.d=!1;var s=Vx(a,n);return i.replace(r,s)}}(t,e,n))a.push(v);else if(!o)return}else if(!o)return;for(var s={},l=0;l0})).length)return Vx(h,n)+" "+r[0]+" both"}for(var g in s){var v;(v=f(s[g]))&&a.push(v)}if(a.length){var y=n.zrId+"-cls-"+n.cssClassIdx++;n.cssNodes["."+y]={animation:a.join(",")},e.class=y}}var Wx=Math.round;function Gx(t){return t&&Z(t.src)}function Ux(t){return t&&U(t.toDataURL)}function Zx(t,e,n,i){Ix((function(r,o){var a="fill"===r||"stroke"===r;a&&function(t){return t&&("linear"===t.type||"radial"===t.type)}(o)?function(t,e,n,i){var r,o=t[n],a={gradientUnits:o.global?"userSpaceOnUse":"objectBoundingBox"};if(Rn(o))r="linearGradient",a.x1=o.x,a.y1=o.y,a.x2=o.x2,a.y2=o.y2;else{if(!Nn(o))return void 0;r="radialGradient",a.cx=it(o.x,.5),a.cy=it(o.y,.5),a.r=it(o.r,.5)}for(var s=o.colorStops,l=[],u=0,h=s.length;ul?gw(t,null==n[c+1]?null:n[c+1].elm,n,s,c):vw(t,e,a,l))}(n,i,r):cw(r)?(cw(t.text)&&lw(n,""),gw(n,null,r,0,r.length-1)):cw(i)?vw(n,i,0,i.length-1):cw(t.text)&&lw(n,""):t.text!==e.text&&(cw(i)&&vw(n,i,0,i.length-1),lw(n,e.text)))}var _w=0,xw=function(){function t(t,e,n){if(this.type="svg",this.refreshHover=ww("refreshHover"),this.configLayer=ww("configLayer"),this.storage=e,this._opts=n=k({},n),this.root=t,this._id="zr"+_w++,this._oldVNode=Ox(n.width,n.height),t&&!n.ssr){var i=this._viewport=document.createElement("div");i.style.cssText="position:relative;overflow:hidden";var r=this._svgDom=this._oldVNode.elm=kx("svg");yw(null,this._oldVNode),i.appendChild(r),t.appendChild(i)}this.resize(n.width,n.height)}return t.prototype.getType=function(){return this.type},t.prototype.getViewportRoot=function(){return this._viewport},t.prototype.getViewportRootOffset=function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},t.prototype.getSvgDom=function(){return this._svgDom},t.prototype.refresh=function(){if(this.root){var t=this.renderToVNode({willUpdate:!0});t.attrs.style="position:absolute;left:0;top:0;user-select:none",function(t,e){if(dw(t,e))mw(t,e);else{var n=t.elm,i=aw(n);fw(e),null!==i&&(iw(i,e.elm,sw(n)),vw(i,[t],0,0))}}(this._oldVNode,t),this._oldVNode=t}},t.prototype.renderOneToVNode=function(t){return tw(t,Lx(this._id))},t.prototype.renderToVNode=function(t){t=t||{};var e=this.storage.getDisplayList(!0),n=this._backgroundColor,i=this._width,r=this._height,o=Lx(this._id);o.animation=t.animation,o.willUpdate=t.willUpdate,o.compress=t.compress;var a=[];if(n&&"none"!==n){var s=Tn(n),l=s.color,u=s.opacity;this._bgVNode=Ax("rect","bg",{width:i,height:r,x:"0",y:"0",id:"0",fill:l,"fill-opacity":u}),a.push(this._bgVNode)}else this._bgVNode=null;var h=t.compress?null:this._mainVNode=Ax("g","main",{},[]);this._paintList(e,o,h?h.children:a),h&&a.push(h);var c=z(F(o.defs),(function(t){return o.defs[t]}));if(c.length&&a.push(Ax("defs","defs",{},c)),t.animation){var p=function(t,e,n){var i=(n=n||{}).newline?"\n":"",r=" {"+i,o=i+"}",a=z(F(t),(function(e){return e+r+z(F(t[e]),(function(n){return n+":"+t[e][n]+";"})).join(i)+o})).join(i),s=z(F(e),(function(t){return"@keyframes "+t+r+z(F(e[t]),(function(n){return n+r+z(F(e[t][n]),(function(i){var r=e[t][n][i];return"d"===i&&(r='path("'+r+'")'),i+":"+r+";"})).join(i)+o})).join(i)+o})).join(i);return a||s?[""].join(i):""}(o.cssNodes,o.cssAnims,{newline:!0});if(p){var d=Ax("style","stl",{},[],p);a.push(d)}}return Ox(i,r,a,t.useViewBox)},t.prototype.renderToString=function(t){return t=t||{},Px(this.renderToVNode({animation:it(t.cssAnimation,!0),willUpdate:!1,compress:!0,useViewBox:it(t.useViewBox,!0)}),{newline:!0})},t.prototype.setBackgroundColor=function(t){this._backgroundColor=t;var e=this._bgVNode;if(e&&e.elm){var n=Tn(t),i=n.color,r=n.opacity;e.elm.setAttribute("fill",i),r<1&&e.elm.setAttribute("fill-opacity",r)}},t.prototype.getSvgRoot=function(){return this._mainVNode&&this._mainVNode.elm},t.prototype._paintList=function(t,e,n){for(var i,r,o=t.length,a=[],s=0,l=0,u=0;u=0&&(!c||!r||c[f]!==r[f]);f--);for(var g=d-1;g>f;g--)i=a[--s-1];for(var v=f+1;v=a)}}for(var h=this.__startIndex;h15)break}n.prevElClipPaths&&u.restore()};if(p)if(0===p.length)s=l.__endIndex;else for(var x=d.dpr,w=0;w0&&t>i[0]){for(s=0;st);s++);a=n[i[s]]}if(i.splice(s+1,0,t),n[t]=e,!e.virtual)if(a){var l=a.dom;l.nextSibling?o.insertBefore(e.dom,l.nextSibling):o.appendChild(e.dom)}else o.firstChild?o.insertBefore(e.dom,o.firstChild):o.appendChild(e.dom);e.__painter=this}},t.prototype.eachLayer=function(t,e){for(var n=this._zlevelList,i=0;i0?Iw:0),this._needsManuallyCompositing),u.__builtin__||C("ZLevel "+l+" has been used by unkown layer "+u.id),u!==o&&(u.__used=!0,u.__startIndex!==r&&(u.__dirty=!0),u.__startIndex=r,u.incremental?u.__drawIndex=-1:u.__drawIndex=r,e(r),o=u),1&s.__dirty&&!s.__inHover&&(u.__dirty=!0,u.incremental&&u.__drawIndex<0&&(u.__drawIndex=r))}e(r),this.eachBuiltinLayer((function(t,e){!t.__used&&t.getElementCount()>0&&(t.__dirty=!0,t.__startIndex=t.__endIndex=t.__drawIndex=0),t.__dirty&&t.__drawIndex<0&&(t.__drawIndex=t.__startIndex)}))},t.prototype.clear=function(){return this.eachBuiltinLayer(this._clearLayer),this},t.prototype._clearLayer=function(t){t.clear()},t.prototype.setBackgroundColor=function(t){this._backgroundColor=t,E(this._layers,(function(t){t.setUnpainted()}))},t.prototype.configLayer=function(t,e){if(e){var n=this._layerConfig;n[t]?T(n[t],e,!0):n[t]=e;for(var i=0;i-1&&(s.style.stroke=s.style.fill,s.style.fill="#fff",s.style.lineWidth=2),e},e.type="series.line",e.dependencies=["grid","polar"],e.defaultOption={z:3,coordinateSystem:"cartesian2d",legendHoverLink:!0,clip:!0,label:{position:"top"},endLabel:{show:!1,valueAnimation:!0,distance:8},lineStyle:{width:2,type:"solid"},emphasis:{scale:!0},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0,universalTransition:{divideShape:"clone"},triggerLineEvent:!1},e}(Tf);function kw(t,e){var n=t.mapDimensionsAll("defaultedLabel"),i=n.length;if(1===i){var r=Ld(t,e,n[0]);return null!=r?r+"":null}if(i){for(var o=[],a=0;a=0&&i.push(e[o])}return i.join(" ")}var Pw=function(t){function e(e,n,i,r){var o=t.call(this)||this;return o.updateData(e,n,i,r),o}return n(e,t),e.prototype._createSymbol=function(t,e,n,i,r){this.removeAll();var o=jg(t,-1,-1,2,2,null,r);o.attr({z2:100,culling:!0,scaleX:i[0]/2,scaleY:i[1]/2}),o.drift=Lw,this._symbolType=t,this.add(o)},e.prototype.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(null,t)},e.prototype.getSymbolType=function(){return this._symbolType},e.prototype.getSymbolPath=function(){return this.childAt(0)},e.prototype.highlight=function(){il(this.childAt(0))},e.prototype.downplay=function(){rl(this.childAt(0))},e.prototype.setZ=function(t,e){var n=this.childAt(0);n.zlevel=t,n.z=e},e.prototype.setDraggable=function(t,e){var n=this.childAt(0);n.draggable=t,n.cursor=!e&&t?"move":n.cursor},e.prototype.updateData=function(t,n,i,r){this.silent=!1;var o=t.getItemVisual(n,"symbol")||"circle",a=t.hostModel,s=e.getSymbolSize(t,n),l=o!==this._symbolType,u=r&&r.disableAnimation;if(l){var h=t.getItemVisual(n,"symbolKeepAspect");this._createSymbol(o,t,n,s,h)}else{(p=this.childAt(0)).silent=!1;var c={scaleX:s[0]/2,scaleY:s[1]/2};u?p.attr(c):zu(p,c,a,n),Gu(p)}if(this._updateCommon(t,n,s,i,r),l){var p=this.childAt(0);if(!u){c={scaleX:this._sizeX,scaleY:this._sizeY,style:{opacity:p.style.opacity}};p.scaleX=p.scaleY=0,p.style.opacity=0,Bu(p,c,a,n)}}u&&this.childAt(0).stopAnimation("leave")},e.prototype._updateCommon=function(t,e,n,i,r){var o,a,s,l,u,h,c,p,d,f=this.childAt(0),g=t.hostModel;if(i&&(o=i.emphasisItemStyle,a=i.blurItemStyle,s=i.selectItemStyle,l=i.focus,u=i.blurScope,c=i.labelStatesModels,p=i.hoverScale,d=i.cursorStyle,h=i.emphasisDisabled),!i||t.hasItemOption){var v=i&&i.itemModel?i.itemModel:t.getItemModel(e),y=v.getModel("emphasis");o=y.getModel("itemStyle").getItemStyle(),s=v.getModel(["select","itemStyle"]).getItemStyle(),a=v.getModel(["blur","itemStyle"]).getItemStyle(),l=y.get("focus"),u=y.get("blurScope"),h=y.get("disabled"),c=wh(v),p=y.getShallow("scale"),d=v.getShallow("cursor")}var m=t.getItemVisual(e,"symbolRotate");f.attr("rotation",(m||0)*Math.PI/180||0);var _=Kg(t.getItemVisual(e,"symbolOffset"),n);_&&(f.x=_[0],f.y=_[1]),d&&f.attr("cursor",d);var x=t.getItemVisual(e,"style"),w=x.fill;if(f instanceof os){var b=f.style;f.useStyle(k({image:b.image,x:b.x,y:b.y,width:b.width,height:b.height},x))}else f.__isEmptyBrush?f.useStyle(k({},x)):f.useStyle(x),f.style.decal=null,f.setColor(w,r&&r.symbolInnerColor),f.style.strokeNoScale=!0;var S=t.getItemVisual(e,"liftZ"),M=this._z2;null!=S?null==M&&(this._z2=f.z2,f.z2+=S):null!=M&&(f.z2=M,this._z2=null);var C=r&&r.useNameLabel;xh(f,c,{labelFetcher:g,labelDataIndex:e,defaultText:function(e){return C?t.getName(e):kw(t,e)},inheritColor:w,defaultOpacity:x.opacity}),this._sizeX=n[0]/2,this._sizeY=n[1]/2;var I=f.ensureState("emphasis");if(I.style=o,f.ensureState("select").style=s,f.ensureState("blur").style=a,p){var T=Math.max(X(p)?p:1.1,3/this._sizeY);I.scaleX=this._sizeX*T,I.scaleY=this._sizeY*T}this.setSymbolScale(1),yl(this,l,u,h)},e.prototype.setSymbolScale=function(t){this.scaleX=this.scaleY=t},e.prototype.fadeOut=function(t,e,n){var i=this.childAt(0),r=Ds(this).dataIndex,o=n&&n.animation;if(this.silent=i.silent=!0,n&&n.fadeLabel){var a=i.getTextContent();a&&Fu(a,{style:{opacity:0}},e,{dataIndex:r,removeOpt:o,cb:function(){i.removeTextContent()}})}else i.removeTextContent();Fu(i,{style:{opacity:0},scaleX:0,scaleY:0},e,{dataIndex:r,cb:t,removeOpt:o})},e.getSymbolSize=function(t,e){return qg(t.getItemVisual(e,"symbolSize"))},e}(_r);function Lw(t,e){this.parent.drift(t,e)}function Ow(t,e,n,i){return e&&!isNaN(e[0])&&!isNaN(e[1])&&!(i.isIgnore&&i.isIgnore(n))&&!(i.clipShape&&!i.clipShape.contain(e[0],e[1]))&&"none"!==t.getItemVisual(n,"symbol")}function Rw(t){return null==t||j(t)||(t={isIgnore:t}),t||{}}function Nw(t){var e=t.hostModel,n=e.getModel("emphasis");return{emphasisItemStyle:n.getModel("itemStyle").getItemStyle(),blurItemStyle:e.getModel(["blur","itemStyle"]).getItemStyle(),selectItemStyle:e.getModel(["select","itemStyle"]).getItemStyle(),focus:n.get("focus"),blurScope:n.get("blurScope"),emphasisDisabled:n.get("disabled"),hoverScale:n.get("scale"),labelStatesModels:wh(e),cursorStyle:e.get("cursor")}}var Ew=function(){function t(t){this.group=new _r,this._SymbolCtor=t||Pw}return t.prototype.updateData=function(t,e){this._progressiveEls=null,e=Rw(e);var n=this.group,i=t.hostModel,r=this._data,o=this._SymbolCtor,a=e.disableAnimation,s=Nw(t),l={disableAnimation:a},u=e.getSymbolPoint||function(e){return t.getItemLayout(e)};r||n.removeAll(),t.diff(r).add((function(i){var r=u(i);if(Ow(t,r,i,e)){var a=new o(t,i,s,l);a.setPosition(r),t.setItemGraphicEl(i,a),n.add(a)}})).update((function(h,c){var p=r.getItemGraphicEl(c),d=u(h);if(Ow(t,d,h,e)){var f=t.getItemVisual(h,"symbol")||"circle",g=p&&p.getSymbolType&&p.getSymbolType();if(!p||g&&g!==f)n.remove(p),(p=new o(t,h,s,l)).setPosition(d);else{p.updateData(t,h,s,l);var v={x:d[0],y:d[1]};a?p.attr(v):zu(p,v,i)}n.add(p),t.setItemGraphicEl(h,p)}else n.remove(p)})).remove((function(t){var e=r.getItemGraphicEl(t);e&&e.fadeOut((function(){n.remove(e)}),i)})).execute(),this._getSymbolPoint=u,this._data=t},t.prototype.updateLayout=function(){var t=this,e=this._data;e&&e.eachItemGraphicEl((function(e,n){var i=t._getSymbolPoint(n);e.setPosition(i),e.markRedraw()}))},t.prototype.incrementalPrepareUpdate=function(t){this._seriesScope=Nw(t),this._data=null,this.group.removeAll()},t.prototype.incrementalUpdate=function(t,e,n){function i(t){t.isGroup||(t.incremental=!0,t.ensureState("emphasis").hoverLayer=!0)}this._progressiveEls=[],n=Rw(n);for(var r=t.start;r0?n=i[0]:i[1]<0&&(n=i[1]);return n}(r,n),a=i.dim,s=r.dim,l=e.mapDimension(s),u=e.mapDimension(a),h="x"===s||"radius"===s?1:0,c=z(t.dimensions,(function(t){return e.mapDimension(t)})),p=!1,d=e.getCalculationInfo("stackResultDimension");return mm(e,c[0])&&(p=!0,c[0]=d),mm(e,c[1])&&(p=!0,c[1]=d),{dataDimsForPoint:c,valueStart:o,valueAxisDim:s,baseAxisDim:a,stacked:!!p,valueDim:l,baseDim:u,baseDataOffset:h,stackedOverDimension:e.getCalculationInfo("stackedOverDimension")}}function Bw(t,e,n,i){var r=NaN;t.stacked&&(r=n.get(n.getCalculationInfo("stackedOverDimension"),i)),isNaN(r)&&(r=t.valueStart);var o=t.baseDataOffset,a=[];return a[o]=n.get(t.baseDim,i),a[1-o]=r,e.dataToPoint(a)}var Vw=Math.min,Fw=Math.max;function Hw(t,e){return isNaN(t)||isNaN(e)}function Ww(t,e,n,i,r,o,a,s,l){for(var u,h,c,p,d,f,g=n,v=0;v=r||g<0)break;if(Hw(y,m)){if(l){g+=o;continue}break}if(g===n)t[o>0?"moveTo":"lineTo"](y,m),c=y,p=m;else{var _=y-u,x=m-h;if(_*_+x*x<.5){g+=o;continue}if(a>0){for(var w=g+o,b=e[2*w],S=e[2*w+1];b===y&&S===m&&v=i||Hw(b,S))d=y,f=m;else{I=b-u,T=S-h;var A=y-u,P=b-y,L=m-h,O=S-m,R=void 0,N=void 0;if("x"===s){var E=I>0?1:-1;d=y-E*(R=Math.abs(A))*a,f=m,D=y+E*(N=Math.abs(P))*a,k=m}else if("y"===s){var z=T>0?1:-1;d=y,f=m-z*(R=Math.abs(L))*a,D=y,k=m+z*(N=Math.abs(O))*a}else R=Math.sqrt(A*A+L*L),d=y-I*a*(1-(C=(N=Math.sqrt(P*P+O*O))/(N+R))),f=m-T*a*(1-C),k=m+T*a*C,D=Vw(D=y+I*a*C,Fw(b,y)),k=Vw(k,Fw(S,m)),D=Fw(D,Vw(b,y)),f=m-(T=(k=Fw(k,Vw(S,m)))-m)*R/N,d=Vw(d=y-(I=D-y)*R/N,Fw(u,y)),f=Vw(f,Fw(h,m)),D=y+(I=y-(d=Fw(d,Vw(u,y))))*N/R,k=m+(T=m-(f=Fw(f,Vw(h,m))))*N/R}t.bezierCurveTo(c,p,d,f,y,m),c=D,p=k}else t.lineTo(y,m)}u=y,h=m,g+=o}return v}var Gw=function(){this.smooth=0,this.smoothConstraint=!0},Uw=function(t){function e(e){var n=t.call(this,e)||this;return n.type="ec-polyline",n}return n(e,t),e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new Gw},e.prototype.buildPath=function(t,e){var n=e.points,i=0,r=n.length/2;if(e.connectNulls){for(;r>0&&Hw(n[2*r-2],n[2*r-1]);r--);for(;i=0){var v=a?(h-i)*g+i:(u-n)*g+n;return a?[t,v]:[v,t]}n=u,i=h;break;case o.C:u=r[l++],h=r[l++],c=r[l++],p=r[l++],d=r[l++],f=r[l++];var y=a?He(n,u,c,d,t,s):He(i,h,p,f,t,s);if(y>0)for(var m=0;m=0){v=a?Ve(i,h,p,f,_):Ve(n,u,c,d,_);return a?[t,v]:[v,t]}}n=d,i=f}}},e}(ts),Zw=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e}(Gw),Yw=function(t){function e(e){var n=t.call(this,e)||this;return n.type="ec-polygon",n}return n(e,t),e.prototype.getDefaultShape=function(){return new Zw},e.prototype.buildPath=function(t,e){var n=e.points,i=e.stackedOnPoints,r=0,o=n.length/2,a=e.smoothMonotone;if(e.connectNulls){for(;o>0&&Hw(n[2*o-2],n[2*o-1]);o--);for(;r=0;a--){var s=t.getDimensionInfo(i[a].dimension);if("x"===(r=s&&s.coordDim)||"y"===r){o=i[a];break}}if(o){var l=e.getAxis(r),u=z(o.stops,(function(t){return{coord:l.toGlobalCoord(l.dataToCoord(t.value)),color:t.color}})),h=u.length,c=o.outerColors.slice();h&&u[0].coord>u[h-1].coord&&(u.reverse(),c.reverse());var p=function(t,e){var n,i,r=[],o=t.length;function a(t,e,n){var i=t.coord;return{coord:n,color:xn((n-i)/(e.coord-i),[t.color,e.color])}}for(var s=0;se){i?r.push(a(i,l,e)):n&&r.push(a(n,l,0),a(n,l,e));break}n&&(r.push(a(n,l,0)),n=null),r.push(l),i=l}}return r}(u,"x"===r?n.getWidth():n.getHeight()),d=p.length;if(!d&&h)return u[0].coord<0?c[1]?c[1]:u[h-1].color:c[0]?c[0]:u[0].color;var f=p[0].coord-10,g=p[d-1].coord+10,v=g-f;if(v<.001)return"transparent";E(p,(function(t){t.offset=(t.coord-f)/v})),p.push({offset:d?p[d-1].offset:.5,color:c[1]||"transparent"}),p.unshift({offset:d?p[0].offset:.5,color:c[0]||"transparent"});var y=new Cu(0,0,0,0,p,!0);return y[r]=f,y[r+"2"]=g,y}}}function nb(t,e,n){var i=t.get("showAllSymbol"),r="auto"===i;if(!i||r){var o=n.getAxesByScale("ordinal")[0];if(o&&(!r||!function(t,e){var n=t.getExtent(),i=Math.abs(n[1]-n[0])/t.scale.count();isNaN(i)&&(i=0);for(var r=e.count(),o=Math.max(1,Math.round(r/5)),a=0;ai)return!1;return!0}(o,e))){var a=e.mapDimension(o.dim),s={};return E(o.getViewLabels(),(function(t){var e=o.scale.getRawOrdinalNumber(t.tickValue);s[e]=1})),function(t){return!s.hasOwnProperty(e.get(a,t))}}}}function ib(t,e){return[t[2*e],t[2*e+1]]}function rb(t){if(t.get(["endLabel","show"]))return!0;for(var e=0;e0&&"bolder"===t.get(["emphasis","lineStyle","width"]))&&(d.getState("emphasis").style.lineWidth=+d.style.lineWidth+1);Ds(d).seriesIndex=t.seriesIndex,yl(d,P,L,O);var R=Jw(t.get("smooth")),N=t.get("smoothMonotone");if(d.setShape({smooth:R,smoothMonotone:N,connectNulls:b}),f){var E=a.getCalculationInfo("stackedOnSeries"),z=0;f.useStyle(A(l.getAreaStyle(),{fill:T,opacity:.7,lineJoin:"bevel",decal:a.getVisual("style").decal})),E&&(z=Jw(E.get("smooth"))),f.setShape({smooth:R,stackedOnSmooth:z,smoothMonotone:N,connectNulls:b}),xl(f,t,"areaStyle"),Ds(f).seriesIndex=t.seriesIndex,yl(f,P,L,O)}var B=function(t){i._changePolyState(t)};a.eachItemGraphicEl((function(t){t&&(t.onHoverStateChange=B)})),this._polyline.onHoverStateChange=B,this._data=a,this._coordSys=r,this._stackedOnPoints=x,this._points=u,this._step=I,this._valueOrigin=m,t.get("triggerLineEvent")&&(this.packEventData(t,d),f&&this.packEventData(t,f))},e.prototype.packEventData=function(t,e){Ds(e).eventData={componentType:"series",componentSubType:"line",componentIndex:t.componentIndex,seriesIndex:t.seriesIndex,seriesName:t.name,seriesType:"line"}},e.prototype.highlight=function(t,e,n,i){var r=t.getData(),o=ho(r,i);if(this._changePolyState("emphasis"),!(o instanceof Array)&&null!=o&&o>=0){var a=r.getLayout("points"),s=r.getItemGraphicEl(o);if(!s){var l=a[2*o],u=a[2*o+1];if(isNaN(l)||isNaN(u))return;if(this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(l,u))return;var h=t.get("zlevel"),c=t.get("z");(s=new Pw(r,o)).x=l,s.y=u,s.setZ(h,c);var p=s.getSymbolPath().getTextContent();p&&(p.zlevel=h,p.z=c,p.z2=this._polyline.z2+1),s.__temp=!0,r.setItemGraphicEl(o,s),s.stopSymbolAnimation(!0),this.group.add(s)}s.highlight()}else Vf.prototype.highlight.call(this,t,e,n,i)},e.prototype.downplay=function(t,e,n,i){var r=t.getData(),o=ho(r,i);if(this._changePolyState("normal"),null!=o&&o>=0){var a=r.getItemGraphicEl(o);a&&(a.__temp?(r.setItemGraphicEl(o,null),this.group.remove(a)):a.downplay())}else Vf.prototype.downplay.call(this,t,e,n,i)},e.prototype._changePolyState=function(t){var e=this._polygon;Qs(this._polyline,t),e&&Qs(e,t)},e.prototype._newPolyline=function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new Uw({shape:{points:t},segmentIgnoreThreshold:2,z2:10}),this._lineGroup.add(e),this._polyline=e,e},e.prototype._newPolygon=function(t,e){var n=this._polygon;return n&&this._lineGroup.remove(n),n=new Yw({shape:{points:t,stackedOnPoints:e},segmentIgnoreThreshold:2}),this._lineGroup.add(n),this._polygon=n,n},e.prototype._initSymbolLabelAnimation=function(t,e,n){var i,r,o=e.getBaseAxis(),a=o.inverse;"cartesian2d"===e.type?(i=o.isHorizontal(),r=!1):"polar"===e.type&&(i="angle"===o.dim,r=!0);var s=t.hostModel,l=s.get("animationDuration");U(l)&&(l=l(null));var u=s.get("animationDelay")||0,h=U(u)?u(null):u;t.eachItemGraphicEl((function(t,o){var s=t;if(s){var c=[t.x,t.y],p=void 0,d=void 0,f=void 0;if(n)if(r){var g=n,v=e.pointToCoord(c);i?(p=g.startAngle,d=g.endAngle,f=-v[1]/180*Math.PI):(p=g.r0,d=g.r,f=v[0])}else{var y=n;i?(p=y.x,d=y.x+y.width,f=t.x):(p=y.y+y.height,d=y.y,f=t.y)}var m=d===p?0:(f-p)/(d-p);a&&(m=1-m);var _=U(u)?u(o):l*m+h,x=s.getSymbolPath(),w=x.getTextContent();s.attr({scaleX:0,scaleY:0}),s.animateTo({scaleX:1,scaleY:1},{duration:200,setToFinal:!0,delay:_}),w&&w.animateFrom({style:{opacity:0}},{duration:300,delay:_}),x.disableLabelAnimation=!0}}))},e.prototype._initOrUpdateEndLabel=function(t,e,n){var i=t.getModel("endLabel");if(rb(t)){var r=t.getData(),o=this._polyline,a=r.getLayout("points");if(!a)return o.removeTextContent(),void(this._endLabel=null);var s=this._endLabel;s||((s=this._endLabel=new gs({z2:200})).ignoreClip=!0,o.setTextContent(this._endLabel),o.disableLabelAnimation=!0);var l=function(t){for(var e,n,i=t.length/2;i>0&&(e=t[2*i-2],n=t[2*i-1],isNaN(e)||isNaN(n));i--);return i-1}(a);l>=0&&(xh(o,wh(t,"endLabel"),{inheritColor:n,labelFetcher:t,labelDataIndex:l,defaultText:function(t,e,n){return null!=n?Aw(r,n):kw(r,t)},enableTextSetter:!0},function(t,e){var n=e.getBaseAxis(),i=n.isHorizontal(),r=n.inverse,o=i?r?"right":"left":"center",a=i?"middle":r?"top":"bottom";return{normal:{align:t.get("align")||o,verticalAlign:t.get("verticalAlign")||a}}}(i,e)),o.textConfig.position=null)}else this._endLabel&&(this._polyline.removeTextContent(),this._endLabel=null)},e.prototype._endLabelOnDuring=function(t,e,n,i,r,o,a){var s=this._endLabel,l=this._polyline;if(s){t<1&&null==i.originalX&&(i.originalX=s.x,i.originalY=s.y);var u=n.getLayout("points"),h=n.hostModel,c=h.get("connectNulls"),p=o.get("precision"),d=o.get("distance")||0,f=a.getBaseAxis(),g=f.isHorizontal(),v=f.inverse,y=e.shape,m=v?g?y.x:y.y+y.height:g?y.x+y.width:y.y,_=(g?d:0)*(v?-1:1),x=(g?0:-d)*(v?-1:1),w=g?"x":"y",b=function(t,e,n){for(var i,r,o=t.length/2,a="x"===n?0:1,s=0,l=-1,u=0;u=e||i>=e&&r<=e){l=u;break}s=u,i=r}else i=r;return{range:[s,l],t:(e-i)/(r-i)}}(u,m,w),S=b.range,M=S[1]-S[0],C=void 0;if(M>=1){if(M>1&&!c){var I=ib(u,S[0]);s.attr({x:I[0]+_,y:I[1]+x}),r&&(C=h.getRawValue(S[0]))}else{(I=l.getPointOn(m,w))&&s.attr({x:I[0]+_,y:I[1]+x});var T=h.getRawValue(S[0]),D=h.getRawValue(S[1]);r&&(C=function(t,e,n,i,r){var o=null==e||"auto"===e;if(null==i)return i;if(X(i))return kr(f=Kr(n||0,i,r),o?Math.max(Pr(n||0),Pr(i)):e);if(Z(i))return r<1?n:i;for(var a=[],s=n,l=i,u=Math.max(s?s.length:0,l.length),h=0;h0?S[0]:0;I=ib(u,k);r&&(C=h.getRawValue(k)),s.attr({x:I[0]+_,y:I[1]+x})}r&&Dh(s).setLabelText(C)}},e.prototype._doUpdateAnimation=function(t,e,n,i,r,o,a){var s=this._polyline,l=this._polygon,u=t.hostModel,h=function(t,e,n,i,r,o,a,s){for(var l=function(t,e){var n=[];return e.diff(t).add((function(t){n.push({cmd:"+",idx:t})})).update((function(t,e){n.push({cmd:"=",idx:e,idx1:t})})).remove((function(t){n.push({cmd:"-",idx:t})})).execute(),n}(t,e),u=[],h=[],c=[],p=[],d=[],f=[],g=[],v=zw(r,e,a),y=t.getLayout("points")||[],m=e.getLayout("points")||[],_=0;_3e3||l&&Qw(p,f)>3e3)return s.stopAnimation(),s.setShape({points:d}),void(l&&(l.stopAnimation(),l.setShape({points:d,stackedOnPoints:f})));s.shape.__points=h.current,s.shape.points=c;var g={shape:{points:d}};h.current!==c&&(g.shape.__points=h.next),s.stopAnimation(),zu(s,g,u),l&&(l.setShape({points:c,stackedOnPoints:p}),l.stopAnimation(),zu(l,{shape:{stackedOnPoints:f}},u),s.shape.points!==l.shape.points&&(l.shape.points=s.shape.points));for(var v=[],y=h.status,m=0;me&&(e=t[n]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,n=0;n10&&"cartesian2d"===o.type&&r){var s=o.getBaseAxis(),l=o.getOtherAxis(s),u=s.getExtent(),h=n.getDevicePixelRatio(),c=Math.abs(u[1]-u[0])*(h||1),p=Math.round(a/c);if(isFinite(p)&&p>1){"lttb"===r&&t.setData(i.lttbDownSample(i.mapDimension(l.dim),1/p));var d=void 0;Z(r)?d=lb[r]:U(r)&&(d=r),d&&t.setData(i.downSample(i.mapDimension(l.dim),1/p,d,ub))}}}}}var cb=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.getInitialData=function(t,e){return xm(null,this,{useEncodeDefaulter:!0})},e.prototype.getMarkerPosition=function(t){var e=this.coordinateSystem;if(e&&e.clampData){var n=e.dataToPoint(e.clampData(t)),i=this.getData(),r=i.getLayout("offset"),o=i.getLayout("size");return n[e.getBaseAxis().isHorizontal()?0:1]+=r+o/2,n}return[NaN,NaN]},e.type="series.__base_bar__",e.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod"},e}(Tf);Tf.registerClass(cb);var pb=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.getInitialData=function(){return xm(null,this,{useEncodeDefaulter:!0,createInvertedIndices:!!this.get("realtimeSort",!0)||null})},e.prototype.getProgressive=function(){return!!this.get("large")&&this.get("progressive")},e.prototype.getProgressiveThreshold=function(){var t=this.get("progressiveThreshold"),e=this.get("largeThreshold");return e>t&&(t=e),t},e.prototype.brushSelector=function(t,e,n){return n.rect(e.getItemLayout(t))},e.type="series.bar",e.dependencies=["grid","polar"],e.defaultOption=Uh(cb.defaultOption,{clip:!0,roundCap:!1,showBackground:!1,backgroundStyle:{color:"rgba(180, 180, 180, 0.2)",borderColor:null,borderWidth:0,borderType:"solid",borderRadius:0,shadowBlur:0,shadowColor:null,shadowOffsetX:0,shadowOffsetY:0,opacity:1},select:{itemStyle:{borderColor:"#212121"}},realtimeSort:!1}),e}(cb),db=function(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=2*Math.PI,this.clockwise=!0},fb=function(t){function e(e){var n=t.call(this,e)||this;return n.type="sausage",n}return n(e,t),e.prototype.getDefaultShape=function(){return new db},e.prototype.buildPath=function(t,e){var n=e.cx,i=e.cy,r=Math.max(e.r0||0,0),o=Math.max(e.r,0),a=.5*(o-r),s=r+a,l=e.startAngle,u=e.endAngle,h=e.clockwise,c=2*Math.PI,p=h?u-lo)return!0;o=u}return!1},e.prototype._isOrderDifferentInView=function(t,e){for(var n=e.scale,i=n.getExtent(),r=Math.max(0,i[0]),o=Math.min(i[1],n.getOrdinalMeta().categories.length-1);r<=o;++r)if(t.ordinalNumbers[r]!==n.getRawOrdinalNumber(r))return!0},e.prototype._updateSortWithinSameData=function(t,e,n,i){if(this._isOrderChangedWithinSameData(t,e,n)){var r=this._dataSort(t,n,e);this._isOrderDifferentInView(r,n)&&(this._removeOnRenderedListener(i),i.dispatchAction({type:"changeAxisOrder",componentType:n.dim+"Axis",axisId:n.index,sortInfo:r}))}},e.prototype._dispatchInitSort=function(t,e,n){var i=e.baseAxis,r=this._dataSort(t,i,(function(n){return t.get(t.mapDimension(e.otherAxis.dim),n)}));n.dispatchAction({type:"changeAxisOrder",componentType:i.dim+"Axis",isInitSort:!0,axisId:i.index,sortInfo:r})},e.prototype.remove=function(t,e){this._clear(this._model),this._removeOnRenderedListener(e)},e.prototype.dispose=function(t,e){this._removeOnRenderedListener(e)},e.prototype._removeOnRenderedListener=function(t){this._onRendered&&(t.getZr().off("rendered",this._onRendered),this._onRendered=null)},e.prototype._clear=function(t){var e=this.group,n=this._data;t&&t.isAnimationEnabled()&&n&&!this._isLargeDraw?(this._removeBackground(),this._backgroundEls=[],n.eachItemGraphicEl((function(e){Wu(e,t,Ds(e).dataIndex)}))):e.removeAll(),this._data=null,this._isFirstFrame=!0},e.prototype._removeBackground=function(){this.group.remove(this._backgroundGroup),this._backgroundGroup=null},e.type="bar",e}(Vf),xb={cartesian2d:function(t,e){var n=e.width<0?-1:1,i=e.height<0?-1:1;n<0&&(e.x+=e.width,e.width=-e.width),i<0&&(e.y+=e.height,e.height=-e.height);var r=t.x+t.width,o=t.y+t.height,a=yb(e.x,t.x),s=mb(e.x+e.width,r),l=yb(e.y,t.y),u=mb(e.y+e.height,o),h=sr?s:a,e.y=c&&l>o?u:l,e.width=h?0:s-a,e.height=c?0:u-l,n<0&&(e.x+=e.width,e.width=-e.width),i<0&&(e.y+=e.height,e.height=-e.height),h||c},polar:function(t,e){var n=e.r0<=e.r?1:-1;if(n<0){var i=e.r;e.r=e.r0,e.r0=i}var r=mb(e.r,t.r),o=yb(e.r0,t.r0);e.r=r,e.r0=o;var a=r-o<0;if(n<0){i=e.r;e.r=e.r0,e.r0=i}return a}},wb={cartesian2d:function(t,e,n,i,r,o,a,s,l){var u=new ps({shape:k({},i),z2:1});(u.__dataIndex=n,u.name="item",o)&&(u.shape[r?"height":"width"]=0);return u},polar:function(t,e,n,i,r,o,a,s,l){var u=!r&&l?fb:au,h=new u({shape:i,z2:1});h.name="item";var c,p,d=Db(r);if(h.calculateTextPosition=(c=d,p=({isRoundCap:u===fb}||{}).isRoundCap,function(t,e,n){var i=e.position;if(!i||i instanceof Array)return lr(t,e,n);var r=c(i),o=null!=e.distance?e.distance:5,a=this.shape,s=a.cx,l=a.cy,u=a.r,h=a.r0,d=(u+h)/2,f=a.startAngle,g=a.endAngle,v=(f+g)/2,y=p?Math.abs(u-h)/2:0,m=Math.cos,_=Math.sin,x=s+u*m(f),w=l+u*_(f),b="left",S="top";switch(r){case"startArc":x=s+(h-o)*m(v),w=l+(h-o)*_(v),b="center",S="top";break;case"insideStartArc":x=s+(h+o)*m(v),w=l+(h+o)*_(v),b="center",S="bottom";break;case"startAngle":x=s+d*m(f)+gb(f,o+y,!1),w=l+d*_(f)+vb(f,o+y,!1),b="right",S="middle";break;case"insideStartAngle":x=s+d*m(f)+gb(f,-o+y,!1),w=l+d*_(f)+vb(f,-o+y,!1),b="left",S="middle";break;case"middle":x=s+d*m(v),w=l+d*_(v),b="center",S="middle";break;case"endArc":x=s+(u+o)*m(v),w=l+(u+o)*_(v),b="center",S="bottom";break;case"insideEndArc":x=s+(u-o)*m(v),w=l+(u-o)*_(v),b="center",S="top";break;case"endAngle":x=s+d*m(g)+gb(g,o+y,!0),w=l+d*_(g)+vb(g,o+y,!0),b="left",S="middle";break;case"insideEndAngle":x=s+d*m(g)+gb(g,-o+y,!0),w=l+d*_(g)+vb(g,-o+y,!0),b="right",S="middle";break;default:return lr(t,e,n)}return(t=t||{}).x=x,t.y=w,t.align=b,t.verticalAlign=S,t}),o){var f=r?"r":"endAngle",g={};h.shape[f]=r?0:i.startAngle,g[f]=i[f],(s?zu:Bu)(h,{shape:g},o)}return h}};function bb(t,e,n,i,r,o,a,s){var l,u;o?(u={x:i.x,width:i.width},l={y:i.y,height:i.height}):(u={y:i.y,height:i.height},l={x:i.x,width:i.width}),s||(a?zu:Bu)(n,{shape:l},e,r,null),(a?zu:Bu)(n,{shape:u},e?t.baseAxis.model:null,r)}function Sb(t,e){for(var n=0;n0?1:-1,a=i.height>0?1:-1;return{x:i.x+o*r/2,y:i.y+a*r/2,width:i.width-o*r,height:i.height-a*r}},polar:function(t,e,n){var i=t.getItemLayout(e);return{cx:i.cx,cy:i.cy,r0:i.r0,r:i.r,startAngle:i.startAngle,endAngle:i.endAngle,clockwise:i.clockwise}}};function Db(t){return function(t){var e=t?"Arc":"Angle";return function(t){switch(t){case"start":case"insideStart":case"end":case"insideEnd":return t+e;default:return t}}}(t)}function kb(t,e,n,i,r,o,a,s){var l=e.getItemVisual(n,"style");s||t.setShape("r",i.get(["itemStyle","borderRadius"])||0),t.useStyle(l);var u=i.getShallow("cursor");u&&t.attr("cursor",u);var h=s?a?r.r>=r.r0?"endArc":"startArc":r.endAngle>=r.startAngle?"endAngle":"startAngle":a?r.height>=0?"bottom":"top":r.width>=0?"right":"left",c=wh(i);xh(t,c,{labelFetcher:o,labelDataIndex:n,defaultText:kw(o.getData(),n),inheritColor:l.fill,defaultOpacity:l.opacity,defaultOutsidePosition:h});var p=t.getTextContent();if(s&&p){var d=i.get(["label","position"]);t.textConfig.inside="middle"===d||null,function(t,e,n,i){if(X(i))t.setTextConfig({rotation:i});else if(G(e))t.setTextConfig({rotation:0});else{var r,o=t.shape,a=o.clockwise?o.startAngle:o.endAngle,s=o.clockwise?o.endAngle:o.startAngle,l=(a+s)/2,u=n(e);switch(u){case"startArc":case"insideStartArc":case"middle":case"insideEndArc":case"endArc":r=l;break;case"startAngle":case"insideStartAngle":r=a;break;case"endAngle":case"insideEndAngle":r=s;break;default:return void t.setTextConfig({rotation:0})}var h=1.5*Math.PI-r;"middle"===u&&h>Math.PI/2&&h<1.5*Math.PI&&(h-=Math.PI),t.setTextConfig({rotation:h})}}(t,"outside"===d?h:d,Db(a),i.get(["label","rotate"]))}!function(t,e,n,i){if(t){var r=Dh(t);r.prevValue=r.value,r.value=n;var o=e.normal;r.valueAnimation=o.get("valueAnimation"),r.valueAnimation&&(r.precision=o.get("precision"),r.defaultInterpolatedText=i,r.statesModels=e)}}(p,c,o.getRawValue(n),(function(t){return Aw(e,t)}));var f=i.getModel(["emphasis"]);yl(t,f.get("focus"),f.get("blurScope"),f.get("disabled")),xl(t,i),function(t){return null!=t.startAngle&&null!=t.endAngle&&t.startAngle===t.endAngle}(r)&&(t.style.fill="none",t.style.stroke="none",E(t.states,(function(t){t.style&&(t.style.fill=t.style.stroke="none")})))}var Ab=function(){},Pb=function(t){function e(e){var n=t.call(this,e)||this;return n.type="largeBar",n}return n(e,t),e.prototype.getDefaultShape=function(){return new Ab},e.prototype.buildPath=function(t,e){for(var n=e.points,i=this.baseDimIdx,r=1-this.baseDimIdx,o=[],a=[],s=this.barWidth,l=0;l=s[0]&&e<=s[0]+l[0]&&n>=s[1]&&n<=s[1]+l[1])return a[h]}return-1}(this,t.offsetX,t.offsetY);Ds(this).dataIndex=e>=0?e:null}),30,!1);function Rb(t,e,n){if(qw(n,"cartesian2d")){var i=e,r=n.getArea();return{x:t?i.x:r.x,y:t?r.y:i.y,width:t?i.width:r.width,height:t?r.height:i.height}}var o=e;return{cx:(r=n.getArea()).cx,cy:r.cy,r0:t?r.r0:o.r0,r:t?r.r:o.r,startAngle:t?o.startAngle:0,endAngle:t?o.endAngle:2*Math.PI}}var Nb=2*Math.PI,Eb=Math.PI/180;function zb(t,e){return Yc(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function Bb(t,e){var n=zb(t,e),i=t.get("center"),r=t.get("radius");G(r)||(r=[0,r]),G(i)||(i=[i,i]);var o=Dr(n.width,e.getWidth()),a=Dr(n.height,e.getHeight()),s=Math.min(o,a);return{cx:Dr(i[0],o)+n.x,cy:Dr(i[1],a)+n.y,r0:Dr(r[0],s/2),r:Dr(r[1],s/2)}}function Vb(t,e,n){e.eachSeriesByType(t,(function(t){var e=t.getData(),i=e.mapDimension("value"),r=zb(t,n),o=Bb(t,n),a=o.cx,s=o.cy,l=o.r,u=o.r0,h=-t.get("startAngle")*Eb,c=t.get("minAngle")*Eb,p=0;e.each(i,(function(t){!isNaN(t)&&p++}));var d=e.getSum(i),f=Math.PI/(d||p)*2,g=t.get("clockwise"),v=t.get("roseType"),y=t.get("stillShowZeroSum"),m=e.getDataExtent(i);m[0]=0;var _=Nb,x=0,w=h,b=g?1:-1;if(e.setLayout({viewRect:r,r:l}),e.each(i,(function(t,n){var i;if(isNaN(t))e.setItemLayout(n,{angle:NaN,startAngle:NaN,endAngle:NaN,clockwise:g,cx:a,cy:s,r0:u,r:v?NaN:l});else{(i="area"!==v?0===d&&y?f:t*f:Nb/p)n?a:o,h=Math.abs(l.label.y-n);if(h>=u.maxY){var c=l.label.x-e-l.len2*r,p=i+l.len,f=Math.abs(c)t.unconstrainedWidth?null:d:null;i.setStyle("width",f)}var g=i.getBoundingRect();o.width=g.width;var v=(i.style.margin||0)+2.1;o.height=g.height+v,o.y-=(o.height-c)/2}}}function Gb(t){return"center"===t.position}function Ub(t){var e,n,i=t.getData(),r=[],o=!1,a=(t.get("minShowLabelAngle")||0)*Fb,s=i.getLayout("viewRect"),l=i.getLayout("r"),u=s.width,h=s.x,c=s.y,p=s.height;function d(t){t.ignore=!0}i.each((function(t){var s=i.getItemGraphicEl(t),c=s.shape,p=s.getTextContent(),f=s.getTextGuideLine(),g=i.getItemModel(t),v=g.getModel("label"),y=v.get("position")||g.get(["emphasis","label","position"]),m=v.get("distanceToLabelLine"),_=v.get("alignTo"),x=Dr(v.get("edgeDistance"),u),w=v.get("bleedMargin"),b=g.getModel("labelLine"),S=b.get("length");S=Dr(S,u);var M=b.get("length2");if(M=Dr(M,u),Math.abs(c.endAngle-c.startAngle)0?"right":"left":A>0?"left":"right"}var V=Math.PI,F=0,H=v.get("rotate");if(X(H))F=H*(V/180);else if("center"===y)F=0;else if("radial"===H||!0===H){F=A<0?-k+V:-k}else if("tangential"===H&&"outside"!==y&&"outer"!==y){var W=Math.atan2(A,P);W<0&&(W=2*V+W),P>0&&(W=V+W),F=W-V}if(o=!!F,p.x=C,p.y=I,p.rotation=F,p.setStyle({verticalAlign:"middle"}),L){p.setStyle({align:D});var G=p.states.select;G&&(G.x+=p.x,G.y+=p.y)}else{var U=p.getBoundingRect().clone();U.applyTransform(p.getComputedTransform());var Z=(p.style.margin||0)+2.1;U.y-=Z/2,U.height+=Z,r.push({label:p,labelLine:f,position:y,len:S,len2:M,minTurnAngle:b.get("minTurnAngle"),maxSurfaceAngle:b.get("maxSurfaceAngle"),surfaceNormal:new Ui(A,P),linePoints:T,textAlign:D,labelDistance:m,labelAlignTo:_,edgeDistance:x,bleedMargin:w,rect:U,unconstrainedWidth:U.width,labelStyleWidth:p.style.width})}s.setTextConfig({inside:L})}})),!o&&t.get("avoidLabelOverlap")&&function(t,e,n,i,r,o,a,s){for(var l=[],u=[],h=Number.MAX_VALUE,c=-Number.MAX_VALUE,p=0;p0){for(var l=o.getItemLayout(0),u=1;isNaN(l&&l.startAngle)&&u=n.r0}},e.type="pie",e}(Vf);var jb=function(){function t(t,e){this._getDataWithEncodedVisual=t,this._getRawData=e}return t.prototype.getAllNames=function(){var t=this._getRawData();return t.mapArray(t.getName)},t.prototype.containName=function(t){return this._getRawData().indexOfName(t)>=0},t.prototype.indexOfName=function(t){return this._getDataWithEncodedVisual().indexOfName(t)},t.prototype.getItemVisual=function(t,e){return this._getDataWithEncodedVisual().getItemVisual(t,e)},t}(),qb=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.init=function(e){t.prototype.init.apply(this,arguments),this.legendVisualProvider=new jb(H(this.getData,this),H(this.getRawData,this)),this._defaultLabelLine(e)},e.prototype.mergeOption=function(){t.prototype.mergeOption.apply(this,arguments)},e.prototype.getInitialData=function(){return function(t,e,n){e=G(e)&&{coordDimensions:e}||k({encodeDefine:t.getEncode()},e);var i=t.getSource(),r=pm(i,e).dimensions,o=new cm(r,t);return o.initData(i,n),o}(this,{coordDimensions:["value"],encodeDefaulter:W(yp,this)})},e.prototype.getDataParams=function(e){var n=this.getData(),i=t.prototype.getDataParams.call(this,e),r=[];return n.each(n.mapDimension("value"),(function(t){r.push(t)})),i.percent=Rr(r,e,n.hostModel.get("percentPrecision")),i.$vars.push("percent"),i},e.prototype._defaultLabelLine=function(t){to(t,"labelLine",["show"]);var e=t.labelLine,n=t.emphasis.labelLine;e.show=e.show&&t.label.show,n.show=n.show&&t.emphasis.label.show},e.type="series.pie",e.defaultOption={z:2,legendHoverLink:!0,colorBy:"data",center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,minShowLabelAngle:0,selectedOffset:10,percentPrecision:2,stillShowZeroSum:!0,left:0,top:0,right:0,bottom:0,width:null,height:null,label:{rotate:0,show:!0,overflow:"truncate",position:"outer",alignTo:"none",edgeDistance:"25%",bleedMargin:10,distanceToLabelLine:5},labelLine:{show:!0,length:15,length2:15,smooth:!1,minTurnAngle:90,maxSurfaceAngle:90,lineStyle:{width:1,type:"solid"}},itemStyle:{borderWidth:1,borderJoin:"round"},showEmptyCircle:!0,emptyCircleStyle:{color:"lightgray",opacity:1},labelLayout:{hideOverlap:!0},emphasis:{scale:!0,scaleSize:5},avoidLabelOverlap:!0,animationType:"expansion",animationDuration:1e3,animationTypeUpdate:"transition",animationEasingUpdate:"cubicInOut",animationDurationUpdate:500,animationEasing:"cubicInOut"},e}(Tf);var Kb=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.hasSymbolVisual=!0,n}return n(e,t),e.prototype.getInitialData=function(t,e){return xm(null,this,{useEncodeDefaulter:!0})},e.prototype.getProgressive=function(){var t=this.option.progressive;return null==t?this.option.large?5e3:this.get("progressive"):t},e.prototype.getProgressiveThreshold=function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?1e4:this.get("progressiveThreshold"):t},e.prototype.brushSelector=function(t,e,n){return n.point(e.getItemLayout(t))},e.prototype.getZLevelKey=function(){return this.getData().count()>this.getProgressiveThreshold()?this.id:""},e.type="series.scatter",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={coordinateSystem:"cartesian2d",z:2,legendHoverLink:!0,symbolSize:10,large:!1,largeThreshold:2e3,itemStyle:{opacity:.8},emphasis:{scale:!0},clip:!0,select:{itemStyle:{borderColor:"#212121"}},universalTransition:{divideShape:"clone"}},e}(Tf),$b=function(){},Qb=function(t){function e(e){var n=t.call(this,e)||this;return n._off=0,n.hoverDataIdx=-1,n}return n(e,t),e.prototype.getDefaultShape=function(){return new $b},e.prototype.reset=function(){this.notClear=!1,this._off=0},e.prototype.buildPath=function(t,e){var n,i=e.points,r=e.size,o=this.symbolProxy,a=o.shape,s=t.getContext?t.getContext():t,l=s&&r[0]<4,u=this.softClipShape;if(l)this._ctx=s;else{for(this._ctx=null,n=this._off;n=0;s--){var l=2*s,u=i[l]-o/2,h=i[l+1]-a/2;if(t>=u&&e>=h&&t<=u+o&&e<=h+a)return s}return-1},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect();return t=n[0],e=n[1],i.contain(t,e)?(this.hoverDataIdx=this.findDataIndex(t,e))>=0:(this.hoverDataIdx=-1,!1)},e.prototype.getBoundingRect=function(){var t=this._rect;if(!t){for(var e=this.shape,n=e.points,i=e.size,r=i[0],o=i[1],a=1/0,s=1/0,l=-1/0,u=-1/0,h=0;h=0&&(l.dataIndex=n+(t.startIndex||0))}))},t.prototype.remove=function(){this._clear()},t.prototype._clear=function(){this._newAdded=[],this.group.removeAll()},t}(),tS=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=t.getData();this._updateSymbolDraw(i,t).updateData(i,{clipShape:this._getClipShape(t)}),this._finished=!0},e.prototype.incrementalPrepareRender=function(t,e,n){var i=t.getData();this._updateSymbolDraw(i,t).incrementalPrepareUpdate(i),this._finished=!1},e.prototype.incrementalRender=function(t,e,n){this._symbolDraw.incrementalUpdate(t,e.getData(),{clipShape:this._getClipShape(e)}),this._finished=t.end===e.getData().count()},e.prototype.updateTransform=function(t,e,n){var i=t.getData();if(this.group.dirty(),!this._finished||i.count()>1e4)return{update:!0};var r=sb("").reset(t,e,n);r.progress&&r.progress({start:0,end:i.count(),count:i.count()},i),this._symbolDraw.updateLayout(i)},e.prototype.eachRendered=function(t){this._symbolDraw&&this._symbolDraw.eachRendered(t)},e.prototype._getClipShape=function(t){var e=t.coordinateSystem,n=e&&e.getArea&&e.getArea();return t.get("clip",!0)?n:null},e.prototype._updateSymbolDraw=function(t,e){var n=this._symbolDraw,i=e.pipelineContext.large;return n&&i===this._isLargeDraw||(n&&n.remove(),n=this._symbolDraw=i?new Jb:new Ew,this._isLargeDraw=i,this.group.removeAll()),this.group.add(n.group),n},e.prototype.remove=function(t,e){this._symbolDraw&&this._symbolDraw.remove(!0),this._symbolDraw=null},e.prototype.dispose=function(){},e.type="scatter",e}(Vf),eS=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.type="grid",e.dependencies=["xAxis","yAxis"],e.layoutMode="box",e.defaultOption={show:!1,z:0,left:"10%",top:60,right:"10%",bottom:70,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"},e}(Jc),nS=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getCoordSysModel=function(){return this.getReferringComponents("grid",vo).models[0]},e.type="cartesian2dAxis",e}(Jc);R(nS,M_);var iS={show:!0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#6E7079",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#E0E6F1"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(210,219,238,0.2)"]}}},rS=T({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},iS),oS=T({boundaryGap:[0,0],axisLine:{show:"auto"},axisTick:{show:"auto"},splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:"#F4F7FD",width:1}}},iS),aS={category:rS,value:oS,time:T({splitNumber:6,axisLabel:{showMinLabel:!1,showMaxLabel:!1,rich:{primary:{fontWeight:"bold"}}},splitLine:{show:!1}},oS),log:A({logBase:10},oS)},sS={value:1,category:1,time:1,log:1};function lS(t,e,i,r){E(sS,(function(o,a){var s=T(T({},aS[a],!0),r,!0),l=function(t){function i(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e+"Axis."+a,n}return n(i,t),i.prototype.mergeDefaultAndTheme=function(t,e){var n=jc(this),i=n?Kc(t):{};T(t,e.getTheme().get(a+"Axis")),T(t,this.getDefaultOption()),t.type=uS(t),n&&qc(t,i,n)},i.prototype.optionUpdated=function(){"category"===this.option.type&&(this.__ordinalMeta=Sm.createByAxisModel(this))},i.prototype.getCategories=function(t){var e=this.option;if("category"===e.type)return t?e.data:this.__ordinalMeta.categories},i.prototype.getOrdinalMeta=function(){return this.__ordinalMeta},i.type=e+"Axis."+a,i.defaultOption=s,i}(i);t.registerComponentModel(l)})),t.registerSubTypeDefaulter(e+"Axis",uS)}function uS(t){return t.type||(t.data?"category":"value")}var hS=function(){function t(t){this.type="cartesian",this._dimList=[],this._axes={},this.name=t||""}return t.prototype.getAxis=function(t){return this._axes[t]},t.prototype.getAxes=function(){return z(this._dimList,(function(t){return this._axes[t]}),this)},t.prototype.getAxesByScale=function(t){return t=t.toLowerCase(),V(this.getAxes(),(function(e){return e.scale.type===t}))},t.prototype.addAxis=function(t){var e=t.dim;this._axes[e]=t,this._dimList.push(e)},t}(),cS=["x","y"];function pS(t){return"interval"===t.type||"time"===t.type}var dS=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="cartesian2d",e.dimensions=cS,e}return n(e,t),e.prototype.calcAffineTransform=function(){this._transform=this._invTransform=null;var t=this.getAxis("x").scale,e=this.getAxis("y").scale;if(pS(t)&&pS(e)){var n=t.getExtent(),i=e.getExtent(),r=this.dataToPoint([n[0],i[0]]),o=this.dataToPoint([n[1],i[1]]),a=n[1]-n[0],s=i[1]-i[0];if(a&&s){var l=(o[0]-r[0])/a,u=(o[1]-r[1])/s,h=r[0]-n[0]*l,c=r[1]-i[0]*u,p=this._transform=[l,0,0,u,h,c];this._invTransform=Li([],p)}}},e.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAxis("x")},e.prototype.containPoint=function(t){var e=this.getAxis("x"),n=this.getAxis("y");return e.contain(e.toLocalCoord(t[0]))&&n.contain(n.toLocalCoord(t[1]))},e.prototype.containData=function(t){return this.getAxis("x").containData(t[0])&&this.getAxis("y").containData(t[1])},e.prototype.containZone=function(t,e){var n=this.dataToPoint(t),i=this.dataToPoint(e),r=this.getArea(),o=new Ji(n[0],n[1],i[0]-n[0],i[1]-n[1]);return r.intersect(o)},e.prototype.dataToPoint=function(t,e,n){n=n||[];var i=t[0],r=t[1];if(this._transform&&null!=i&&isFinite(i)&&null!=r&&isFinite(r))return Et(n,t,this._transform);var o=this.getAxis("x"),a=this.getAxis("y");return n[0]=o.toGlobalCoord(o.dataToCoord(i,e)),n[1]=a.toGlobalCoord(a.dataToCoord(r,e)),n},e.prototype.clampData=function(t,e){var n=this.getAxis("x").scale,i=this.getAxis("y").scale,r=n.getExtent(),o=i.getExtent(),a=n.parse(t[0]),s=i.parse(t[1]);return(e=e||[])[0]=Math.min(Math.max(Math.min(r[0],r[1]),a),Math.max(r[0],r[1])),e[1]=Math.min(Math.max(Math.min(o[0],o[1]),s),Math.max(o[0],o[1])),e},e.prototype.pointToData=function(t,e){var n=[];if(this._invTransform)return Et(n,t,this._invTransform);var i=this.getAxis("x"),r=this.getAxis("y");return n[0]=i.coordToData(i.toLocalCoord(t[0]),e),n[1]=r.coordToData(r.toLocalCoord(t[1]),e),n},e.prototype.getOtherAxis=function(t){return this.getAxis("x"===t.dim?"y":"x")},e.prototype.getArea=function(){var t=this.getAxis("x").getGlobalExtent(),e=this.getAxis("y").getGlobalExtent(),n=Math.min(t[0],t[1]),i=Math.min(e[0],e[1]),r=Math.max(t[0],t[1])-n,o=Math.max(e[0],e[1])-i;return new Ji(n,i,r,o)},e}(hS),fS=function(t){function e(e,n,i,r,o){var a=t.call(this,e,n,i)||this;return a.index=0,a.type=r||"value",a.position=o||"bottom",a}return n(e,t),e.prototype.isHorizontal=function(){var t=this.position;return"top"===t||"bottom"===t},e.prototype.getGlobalExtent=function(t){var e=this.getExtent();return e[0]=this.toGlobalCoord(e[0]),e[1]=this.toGlobalCoord(e[1]),t&&e[0]>e[1]&&e.reverse(),e},e.prototype.pointToData=function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},e.prototype.setCategorySortInfo=function(t){if("category"!==this.type)return!1;this.model.option.categorySortInfo=t,this.scale.setSortInfo(t)},e}(tx);function gS(t,e,n){n=n||{};var i=t.coordinateSystem,r=e.axis,o={},a=r.getAxesOnZeroOf()[0],s=r.position,l=a?"onZero":s,u=r.dim,h=i.getRect(),c=[h.x,h.x+h.width,h.y,h.y+h.height],p={left:0,right:1,top:0,bottom:1,onZero:2},d=e.get("offset")||0,f="x"===u?[c[2]-d,c[3]+d]:[c[0]-d,c[1]+d];if(a){var g=a.toGlobalCoord(a.dataToCoord(0));f[p.onZero]=Math.max(Math.min(g,f[1]),f[0])}o.position=["y"===u?f[p[l]]:c[0],"x"===u?f[p[l]]:c[3]],o.rotation=Math.PI/2*("x"===u?0:1);o.labelDirection=o.tickDirection=o.nameDirection={top:-1,bottom:1,left:-1,right:1}[s],o.labelOffset=a?f[p[s]]-f[p.onZero]:0,e.get(["axisTick","inside"])&&(o.tickDirection=-o.tickDirection),nt(n.labelInside,e.get(["axisLabel","inside"]))&&(o.labelDirection=-o.labelDirection);var v=e.get(["axisLabel","rotate"]);return o.labelRotate="top"===l?-v:v,o.z2=1,o}function vS(t){return"cartesian2d"===t.get("coordinateSystem")}function yS(t){var e={xAxisModel:null,yAxisModel:null};return E(e,(function(n,i){var r=i.replace(/Model$/,""),o=t.getReferringComponents(r,vo).models[0];e[i]=o})),e}var mS=Math.log;function _S(t,e,n){var i=Nm.prototype,r=i.getTicks.call(n),o=i.getTicks.call(n,!0),a=r.length-1,s=i.getInterval.call(n),l=g_(t,e),u=l.extent,h=l.fixMin,c=l.fixMax;if("log"===t.type){var p=mS(t.base);u=[mS(u[0])/p,mS(u[1])/p]}t.setExtent(u[0],u[1]),t.calcNiceExtent({splitNumber:a,fixMin:h,fixMax:c});var d=i.getExtent.call(t);h&&(u[0]=d[0]),c&&(u[1]=d[1]);var f=i.getInterval.call(t),g=u[0],v=u[1];if(h&&c)f=(v-g)/a;else if(h)for(v=u[0]+f*a;vu[0]&&isFinite(g)&&isFinite(u[0]);)f=Tm(f),g=u[1]-f*a;else{t.getTicks().length-1>a&&(f=Tm(f));var y=f*a;(g=kr((v=Math.ceil(u[1]/f)*f)-y))<0&&u[0]>=0?(g=0,v=kr(y)):v>0&&u[1]<=0&&(v=0,g=-kr(y))}var m=(r[0].value-o[0].value)/s,_=(r[a].value-o[a].value)/s;i.setExtent.call(t,g+f*m,v+f*_),i.setInterval.call(t,f),(m||_)&&i.setNiceExtent.call(t,g+f,v-f)}var xS=function(){function t(t,e,n){this.type="grid",this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this.axisPointerEnabled=!0,this.dimensions=cS,this._initCartesian(t,e,n),this.model=t}return t.prototype.getRect=function(){return this._rect},t.prototype.update=function(t,e){var n=this._axesMap;function i(t){var e,n=F(t),i=n.length;if(i){for(var r=[],o=i-1;o>=0;o--){var a=t[+n[o]],s=a.model,l=a.scale;Cm(l)&&s.get("alignTicks")&&null==s.get("interval")?r.push(a):(v_(l,s),Cm(l)&&(e=a))}r.length&&(e||v_((e=r.pop()).scale,e.model),E(r,(function(t){_S(t.scale,t.model,e.scale)})))}}this._updateScale(t,this.model),i(n.x),i(n.y);var r={};E(n.x,(function(t){bS(n,"y",t,r)})),E(n.y,(function(t){bS(n,"x",t,r)})),this.resize(this.model,e)},t.prototype.resize=function(t,e,n){var i=t.getBoxLayoutParams(),r=!n&&t.get("containLabel"),o=Yc(i,{width:e.getWidth(),height:e.getHeight()});this._rect=o;var a=this._axesList;function s(){E(a,(function(t){var e=t.isHorizontal(),n=e?[0,o.width]:[0,o.height],i=t.inverse?1:0;t.setExtent(n[i],n[1-i]),function(t,e){var n=t.getExtent(),i=n[0]+n[1];t.toGlobalCoord="x"===t.dim?function(t){return t+e}:function(t){return i-t+e},t.toLocalCoord="x"===t.dim?function(t){return t-e}:function(t){return i-t+e}}(t,e?o.x:o.y)}))}s(),r&&(E(a,(function(t){if(!t.model.get(["axisLabel","inside"])){var e=function(t){var e=t.model,n=t.scale;if(e.get(["axisLabel","show"])&&!n.isBlank()){var i,r,o=n.getExtent();r=n instanceof Om?n.count():(i=n.getTicks()).length;var a,s=t.getLabelModel(),l=m_(t),u=1;r>40&&(u=Math.ceil(r/40));for(var h=0;h0&&i>0||n<0&&i<0)}(t)}var MS=Math.PI,CS=function(){function t(t,e){this.group=new _r,this.opt=e,this.axisModel=t,A(e,{labelOffset:0,nameDirection:1,tickDirection:1,labelDirection:1,silent:!0,handleAutoShown:function(){return!0}});var n=new _r({x:e.position[0],y:e.position[1],rotation:e.rotation});n.updateTransform(),this._transformGroup=n}return t.prototype.hasBuilder=function(t){return!!IS[t]},t.prototype.add=function(t){IS[t](this.opt,this.axisModel,this.group,this._transformGroup)},t.prototype.getGroup=function(){return this.group},t.innerTextLayout=function(t,e,n){var i,r,o=Er(e-t);return zr(o)?(r=n>0?"top":"bottom",i="center"):zr(o-MS)?(r=n>0?"bottom":"top",i="center"):(r="middle",i=o>0&&o0?"right":"left":n>0?"left":"right"),{rotation:o,textAlign:i,textVerticalAlign:r}},t.makeAxisEventDataBase=function(t){var e={componentType:t.mainType,componentIndex:t.componentIndex};return e[t.mainType+"Index"]=t.componentIndex,e},t.isLabelSilent=function(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)},t}(),IS={axisLine:function(t,e,n,i){var r=e.get(["axisLine","show"]);if("auto"===r&&t.handleAutoShown&&(r=t.handleAutoShown("axisLine")),r){var o=e.axis.getExtent(),a=i.transform,s=[o[0],0],l=[o[1],0];a&&(Et(s,s,a),Et(l,l,a));var u=k({lineCap:"round"},e.getModel(["axisLine","lineStyle"]).getLineStyle()),h=new vu({subPixelOptimize:!0,shape:{x1:s[0],y1:s[1],x2:l[0],y2:l[1]},style:u,strokeContainThreshold:t.strokeContainThreshold||5,silent:!0,z2:1});h.anid="line",n.add(h);var c=e.get(["axisLine","symbol"]);if(null!=c){var p=e.get(["axisLine","symbolSize"]);Z(c)&&(c=[c,c]),(Z(p)||X(p))&&(p=[p,p]);var d=Kg(e.get(["axisLine","symbolOffset"])||0,p),f=p[0],g=p[1];E([{rotate:t.rotation+Math.PI/2,offset:d[0],r:0},{rotate:t.rotation-Math.PI/2,offset:d[1],r:Math.sqrt((s[0]-l[0])*(s[0]-l[0])+(s[1]-l[1])*(s[1]-l[1]))}],(function(e,i){if("none"!==c[i]&&null!=c[i]){var r=jg(c[i],-f/2,-g/2,f,g,u.stroke,!0),o=e.r+e.offset;r.attr({rotation:e.rotate,x:s[0]+o*Math.cos(t.rotation),y:s[1]-o*Math.sin(t.rotation),silent:!0,z2:11}),n.add(r)}}))}}},axisTickLabel:function(t,e,n,i){var r=function(t,e,n,i){var r=n.axis,o=n.getModel("axisTick"),a=o.get("show");"auto"===a&&i.handleAutoShown&&(a=i.handleAutoShown("axisTick"));if(!a||r.scale.isBlank())return;for(var s=o.getModel("lineStyle"),l=i.tickDirection*o.get("length"),u=AS(r.getTicksCoords(),e.transform,l,A(s.getLineStyle(),{stroke:n.get(["axisLine","lineStyle","color"])}),"ticks"),h=0;hc[1]?-1:1,d=["start"===s?c[0]-p*h:"end"===s?c[1]+p*h:(c[0]+c[1])/2,kS(s)?t.labelOffset+l*h:0],f=e.get("nameRotate");null!=f&&(f=f*MS/180),kS(s)?o=CS.innerTextLayout(t.rotation,null!=f?f:t.rotation,l):(o=function(t,e,n,i){var r,o,a=Er(n-t),s=i[0]>i[1],l="start"===e&&!s||"start"!==e&&s;zr(a-MS/2)?(o=l?"bottom":"top",r="center"):zr(a-1.5*MS)?(o=l?"top":"bottom",r="center"):(o="middle",r=a<1.5*MS&&a>MS/2?l?"left":"right":l?"right":"left");return{rotation:a,textAlign:r,textVerticalAlign:o}}(t.rotation,s,f||0,c),null!=(a=t.axisNameAvailableWidth)&&(a=Math.abs(a/Math.sin(o.rotation)),!isFinite(a)&&(a=null)));var g=u.getFont(),v=e.get("nameTruncate",!0)||{},y=v.ellipsis,m=nt(t.nameTruncateMaxWidth,v.maxWidth,a),_=new gs({x:d[0],y:d[1],rotation:o.rotation,silent:CS.isLabelSilent(e),style:bh(u,{text:r,font:g,overflow:"truncate",width:m,ellipsis:y,fill:u.getTextColor()||e.get(["axisLine","lineStyle","color"]),align:u.get("align")||o.textAlign,verticalAlign:u.get("verticalAlign")||o.textVerticalAlign}),z2:1});if(fh({el:_,componentModel:e,itemName:r}),_.__fullText=r,_.anid="name",e.get("triggerEvent")){var x=CS.makeAxisEventDataBase(e);x.targetType="axisName",x.name=r,Ds(_).eventData=x}i.add(_),_.updateTransform(),n.add(_),_.decomposeTransform()}}};function TS(t){t&&(t.ignore=!0)}function DS(t,e){var n=t&&t.getBoundingRect().clone(),i=e&&e.getBoundingRect().clone();if(n&&i){var r=Ii([]);return Ai(r,r,-t.rotation),n.applyTransform(Di([],r,t.getLocalTransform())),i.applyTransform(Di([],r,e.getLocalTransform())),n.intersect(i)}}function kS(t){return"middle"===t||"center"===t}function AS(t,e,n,i,r){for(var o=[],a=[],s=[],l=0;l=0||t===e}function OS(t){var e=RS(t);if(e){var n=e.axisPointerModel,i=e.axis.scale,r=n.option,o=n.get("status"),a=n.get("value");null!=a&&(a=i.parse(a));var s=NS(n);null==o&&(r.status=s?"show":"hide");var l=i.getExtent().slice();l[0]>l[1]&&l.reverse(),(null==a||a>l[1])&&(a=l[1]),aa)return!0;if(o){var s=RS(t).seriesDataCount,l=i.getExtent();return Math.abs(l[0]-l[1])/s>a}return!1}return!0===n},t.prototype.makeElOption=function(t,e,n,i,r){},t.prototype.createPointerEl=function(t,e,n,i){var r=e.pointer;if(r){var o=qS(t).pointerEl=new yh[r.type](KS(e.pointer));t.add(o)}},t.prototype.createLabelEl=function(t,e,n,i){if(e.label){var r=qS(t).labelEl=new gs(KS(e.label));t.add(r),tM(r,i)}},t.prototype.updatePointerEl=function(t,e,n){var i=qS(t).pointerEl;i&&e.pointer&&(i.setStyle(e.pointer.style),n(i,{shape:e.pointer.shape}))},t.prototype.updateLabelEl=function(t,e,n,i){var r=qS(t).labelEl;r&&(r.setStyle(e.label.style),n(r,{x:e.label.x,y:e.label.y}),tM(r,i))},t.prototype._renderHandle=function(t){if(!this._dragging&&this.updateHandleTransform){var e,n=this._axisPointerModel,i=this._api.getZr(),r=this._handle,o=n.getModel("handle"),a=n.get("status");if(!o.get("show")||!a||"hide"===a)return r&&i.remove(r),void(this._handle=null);this._handle||(e=!0,r=this._handle=ch(o.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){ie(t.event)},onmousedown:$S(this._onHandleDragMove,this,0,0),drift:$S(this._onHandleDragMove,this),ondragend:$S(this._onHandleDragEnd,this)}),i.add(r)),nM(r,n,!1),r.setStyle(o.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var s=o.get("size");G(s)||(s=[s,s]),r.scaleX=s[0]/2,r.scaleY=s[1]/2,qf(this,"_doDispatchAxisPointer",o.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,e)}},t.prototype._moveHandleToValue=function(t,e){QS(this._axisPointerModel,!e&&this._moveAnimation,this._handle,eM(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},t.prototype._onHandleDragMove=function(t,e){var n=this._handle;if(n){this._dragging=!0;var i=this.updateHandleTransform(eM(n),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=i,n.stopAnimation(),n.attr(eM(i)),qS(n).lastProp=null,this._doDispatchAxisPointer()}},t.prototype._doDispatchAxisPointer=function(){if(this._handle){var t=this._payloadInfo,e=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]})}},t.prototype._onHandleDragEnd=function(){if(this._dragging=!1,this._handle){var t=this._axisPointerModel.get("value");this._moveHandleToValue(t),this._api.dispatchAction({type:"hideTip"})}},t.prototype.clear=function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),n=this._group,i=this._handle;e&&n&&(this._lastGraphicKey=null,n&&e.remove(n),i&&e.remove(i),this._group=null,this._handle=null,this._payloadInfo=null),Kf(this,"_doDispatchAxisPointer")},t.prototype.doClear=function(){},t.prototype.buildLabel=function(t,e,n){return{x:t[n=n||0],y:t[1-n],width:e[n],height:e[1-n]}},t}());function sM(t,e){var n={};return n[e.dim+"AxisIndex"]=e.index,t.getCartesian(n)}var lM={line:function(t,e,n){var i,r,o;return{type:"Line",subPixelOptimize:!0,shape:(i=[e,n[0]],r=[e,n[1]],o=uM(t),{x1:i[o=o||0],y1:i[1-o],x2:r[o],y2:r[1-o]})}},shadow:function(t,e,n){var i,r,o,a=Math.max(1,t.getBandWidth()),s=n[1]-n[0];return{type:"Rect",shape:(i=[e-a/2,n[0]],r=[a,s],o=uM(t),{x:i[o=o||0],y:i[1-o],width:r[o],height:r[1-o]})}}};function uM(t){return"x"===t.dim?0:1}var hM=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="axisPointer",e.defaultOption={show:"auto",z:50,type:"line",snap:!1,triggerTooltip:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:"#B9BEC9",width:1,type:"dashed"},shadowStyle:{color:"rgba(210,219,238,0.2)"},label:{show:!0,formatter:null,precision:"auto",margin:3,color:"#fff",padding:[5,7,5,7],backgroundColor:"auto",borderColor:null,borderWidth:0,borderRadius:3},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:"#333",shadowBlur:3,shadowColor:"#aaa",shadowOffsetX:0,shadowOffsetY:2,throttle:40}},e}(Jc),cM=co(),pM=E;function dM(t,e,n){if(!r.node){var i=e.getZr();cM(i).records||(cM(i).records={}),function(t,e){if(cM(t).initialized)return;function n(n,i){t.on(n,(function(n){var r=function(t){var e={showTip:[],hideTip:[]},n=function(i){var r=e[i.type];r?r.push(i):(i.dispatchAction=n,t.dispatchAction(i))};return{dispatchAction:n,pendings:e}}(e);pM(cM(t).records,(function(t){t&&i(t,n,r.dispatchAction)})),function(t,e){var n,i=t.showTip.length,r=t.hideTip.length;i?n=t.showTip[i-1]:r&&(n=t.hideTip[r-1]);n&&(n.dispatchAction=null,e.dispatchAction(n))}(r.pendings,e)}))}cM(t).initialized=!0,n("click",W(gM,"click")),n("mousemove",W(gM,"mousemove")),n("globalout",fM)}(i,e),(cM(i).records[t]||(cM(i).records[t]={})).handler=n}}function fM(t,e,n){t.handler("leave",null,n)}function gM(t,e,n,i){e.handler(t,n,i)}function vM(t,e){if(!r.node){var n=e.getZr();(cM(n).records||{})[t]&&(cM(n).records[t]=null)}}var yM=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=e.getComponent("tooltip"),r=t.get("triggerOn")||i&&i.get("triggerOn")||"mousemove|click";dM("axisPointer",n,(function(t,e,n){"none"!==r&&("leave"===t||r.indexOf(t)>=0)&&n({type:"updateAxisPointer",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})}))},e.prototype.remove=function(t,e){vM("axisPointer",e)},e.prototype.dispose=function(t,e){vM("axisPointer",e)},e.type="axisPointer",e}(Nf);function mM(t,e){var n,i=[],r=t.seriesIndex;if(null==r||!(n=e.getSeriesByIndex(r)))return{point:[]};var o=n.getData(),a=ho(o,t);if(null==a||a<0||G(a))return{point:[]};var s=o.getItemGraphicEl(a),l=n.coordinateSystem;if(n.getTooltipPosition)i=n.getTooltipPosition(a)||[];else if(l&&l.dataToPoint)if(t.isStacked){var u=l.getBaseAxis(),h=l.getOtherAxis(u).dim,c=u.dim,p="x"===h||"radius"===h?1:0,d=o.mapDimension(c),f=[];f[p]=o.get(d,a),f[1-p]=o.get(o.getCalculationInfo("stackResultDimension"),a),i=l.dataToPoint(f)||[]}else i=l.dataToPoint(o.getValues(z(l.dimensions,(function(t){return o.mapDimension(t)})),a))||[];else if(s){var g=s.getBoundingRect().clone();g.applyTransform(s.transform),i=[g.x+g.width/2,g.y+g.height/2]}return{point:i,el:s}}var _M=co();function xM(t,e,n){var i=t.currTrigger,r=[t.x,t.y],o=t,a=t.dispatchAction||H(n.dispatchAction,n),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){CM(r)&&(r=mM({seriesIndex:o.seriesIndex,dataIndex:o.dataIndex},e).point);var l=CM(r),u=o.axesInfo,h=s.axesInfo,c="leave"===i||CM(r),p={},d={},f={list:[],map:{}},g={showPointer:W(bM,d),showTooltip:W(SM,f)};E(s.coordSysMap,(function(t,e){var n=l||t.containPoint(r);E(s.coordSysAxesInfo[e],(function(t,e){var i=t.axis,o=function(t,e){for(var n=0;n<(t||[]).length;n++){var i=t[n];if(e.axis.dim===i.axisDim&&e.axis.model.componentIndex===i.axisIndex)return i}}(u,t);if(!c&&n&&(!u||o)){var a=o&&o.value;null!=a||l||(a=i.pointToData(r)),null!=a&&wM(t,a,g,!1,p)}}))}));var v={};return E(h,(function(t,e){var n=t.linkGroup;n&&!d[e]&&E(n.axesInfo,(function(e,i){var r=d[i];if(e!==t&&r){var o=r.value;n.mapper&&(o=t.axis.scale.parse(n.mapper(o,MM(e),MM(t)))),v[t.key]=o}}))})),E(v,(function(t,e){wM(h[e],t,g,!0,p)})),function(t,e,n){var i=n.axesInfo=[];E(e,(function(e,n){var r=e.axisPointerModel.option,o=t[n];o?(!e.useHandle&&(r.status="show"),r.value=o.value,r.seriesDataIndices=(o.payloadBatch||[]).slice()):!e.useHandle&&(r.status="hide"),"show"===r.status&&i.push({axisDim:e.axis.dim,axisIndex:e.axis.model.componentIndex,value:r.value})}))}(d,h,p),function(t,e,n,i){if(CM(e)||!t.list.length)return void i({type:"hideTip"});var r=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};i({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:n.tooltipOption,position:n.position,dataIndexInside:r.dataIndexInside,dataIndex:r.dataIndex,seriesIndex:r.seriesIndex,dataByCoordSys:t.list})}(f,r,t,a),function(t,e,n){var i=n.getZr(),r="axisPointerLastHighlights",o=_M(i)[r]||{},a=_M(i)[r]={};E(t,(function(t,e){var n=t.axisPointerModel.option;"show"===n.status&&E(n.seriesDataIndices,(function(t){var e=t.seriesIndex+" | "+t.dataIndex;a[e]=t}))}));var s=[],l=[];E(o,(function(t,e){!a[e]&&l.push(t)})),E(a,(function(t,e){!o[e]&&s.push(t)})),l.length&&n.dispatchAction({type:"downplay",escapeConnect:!0,notBlur:!0,batch:l}),s.length&&n.dispatchAction({type:"highlight",escapeConnect:!0,notBlur:!0,batch:s})}(h,0,n),p}}function wM(t,e,n,i,r){var o=t.axis;if(!o.scale.isBlank()&&o.containData(e))if(t.involveSeries){var a=function(t,e){var n=e.axis,i=n.dim,r=t,o=[],a=Number.MAX_VALUE,s=-1;return E(e.seriesModels,(function(e,l){var u,h,c=e.getData().mapDimensionsAll(i);if(e.getAxisTooltipData){var p=e.getAxisTooltipData(c,t,n);h=p.dataIndices,u=p.nestestValue}else{if(!(h=e.getData().indicesOfNearest(c[0],t,"category"===n.type?.5:null)).length)return;u=e.getData().get(c[0],h[0])}if(null!=u&&isFinite(u)){var d=t-u,f=Math.abs(d);f<=a&&((f=0&&s<0)&&(a=f,s=d,r=u,o.length=0),E(h,(function(t){o.push({seriesIndex:e.seriesIndex,dataIndexInside:t,dataIndex:e.getData().getRawIndex(t)})})))}})),{payloadBatch:o,snapToValue:r}}(e,t),s=a.payloadBatch,l=a.snapToValue;s[0]&&null==r.seriesIndex&&k(r,s[0]),!i&&t.snap&&o.containData(l)&&null!=l&&(e=l),n.showPointer(t,e,s),n.showTooltip(t,a,l)}else n.showPointer(t,e)}function bM(t,e,n,i){t[e.key]={value:n,payloadBatch:i}}function SM(t,e,n,i){var r=n.payloadBatch,o=e.axis,a=o.model,s=e.axisPointerModel;if(e.triggerTooltip&&r.length){var l=e.coordSys.model,u=ES(l),h=t.map[u];h||(h=t.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},t.list.push(h)),h.dataByAxis.push({axisDim:o.dim,axisIndex:a.componentIndex,axisType:a.type,axisId:a.id,value:i,valueLabelOpt:{precision:s.get(["label","precision"]),formatter:s.get(["label","formatter"])},seriesDataIndices:r.slice()})}}function MM(t){var e=t.axis.model,n={},i=n.axisDim=t.axis.dim;return n.axisIndex=n[i+"AxisIndex"]=e.componentIndex,n.axisName=n[i+"AxisName"]=e.name,n.axisId=n[i+"AxisId"]=e.id,n}function CM(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}function IM(t){BS.registerAxisPointerClass("CartesianAxisPointer",aM),t.registerComponentModel(hM),t.registerComponentView(yM),t.registerPreprocessor((function(t){if(t){(!t.axisPointer||0===t.axisPointer.length)&&(t.axisPointer={});var e=t.axisPointer.link;e&&!G(e)&&(t.axisPointer.link=[e])}})),t.registerProcessor(t.PRIORITY.PROCESSOR.STATISTIC,(function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=PS(t,e)})),t.registerAction({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},xM)}function TM(t,e){var n;return E(e,(function(e){null!=t[e]&&"auto"!==t[e]&&(n=!0)})),n}var DM=["transition","enterFrom","leaveTo"],kM=DM.concat(["enterAnimation","updateAnimation","leaveAnimation"]);function AM(t,e,n){if(n&&(!t[n]&&e[n]&&(t[n]={}),t=t[n],e=e[n]),t&&e)for(var i=n?DM:kM,r=0;r0&&(a.during=s?H(GM,{el:e,userDuring:s}):null,a.setToFinal=!0,a.scope=t),k(a,n[o]),a}function BM(t,e,n,i){var r=(i=i||{}).dataIndex,o=i.isInit,a=i.clearStyle,s=n.isAnimationEnabled(),l=EM(t),u=e.style;l.userDuring=e.during;var h={},c={};if(function(t,e,n){for(var i=0;i=0)){var c=t.getAnimationStyleProps(),p=c?c.style:null;if(p){!r&&(r=i.style={});var d=F(n);for(u=0;u0&&t.animateFrom(p,d)}else!function(t,e,n,i,r){if(r){var o=zM("update",t,e,i,n);o.duration>0&&t.animateFrom(r,o)}}(t,e,r||0,n,h);VM(t,e),u?t.dirty():t.markRedraw()}function VM(t,e){for(var n=EM(t).leaveToProps,i=0;i=0){!o&&(o=i[t]={});var p=F(a);for(h=0;h=0;l--){var p,d,f;if(f=null!=(d=so((p=n[l]).id,null))?r.get(d):null){var g=f.parent,v=(c=$M(g),{}),y=Xc(f,p,g===i?{width:o,height:a}:{width:c.width,height:c.height},null,{hv:p.hv,boundingMode:p.bounding},v);if(!$M(f).isNew&&y){for(var m=p.transition,_={},x=0;x=0)?_[w]=b:f[w]=b}zu(f,_,t,0)}else f.attr(v)}}},e.prototype._clear=function(){var t=this,e=this._elMap;e.each((function(n){eC(n,$M(n).option,e,t._lastGraphicModel)})),this._elMap=dt()},e.prototype.dispose=function(){this._clear()},e.type="graphic",e}(Nf);function JM(t){var e=yt(KM,t)?KM[t]:$u(t);var n=new e({});return $M(n).type=t,n}function tC(t,e,n,i){var r=JM(n);return e.add(r),i.set(t,r),$M(r).id=t,$M(r).isNew=!0,r}function eC(t,e,n,i){t&&t.parent&&("group"===t.type&&t.traverse((function(t){eC(t,e,n,i)})),function(t,e,n,i){if(t){var r=t.parent,o=EM(t).leaveToProps;if(o){var a=zM("update",t,e,n,0);a.done=function(){r.remove(t),i&&i()},t.animateTo(o,a)}else r.remove(t),i&&i()}}(t,e,i),n.removeKey($M(t).id))}function nC(t,e,n,i){t.isGroup||E([["cursor",ta.prototype.cursor],["zlevel",i||0],["z",n||0],["z2",0]],(function(n){var i=n[0];yt(e,i)?t[i]=it(e[i],n[1]):null==t[i]&&(t[i]=n[1])})),E(F(e),(function(n){if(0===n.indexOf("on")){var i=e[n];t[n]=U(i)?i:null}})),yt(e,"draggable")&&(t.draggable=e.draggable),null!=e.name&&(t.name=e.name),null!=e.id&&(t.id=e.id)}var iC=["x","y","radius","angle","single"],rC=["cartesian2d","polar","singleAxis"];function oC(t){return t+"Axis"}function aC(t,e){var n,i=dt(),r=[],o=dt();t.eachComponent({mainType:"dataZoom",query:e},(function(t){o.get(t.uid)||s(t)}));do{n=!1,t.eachComponent("dataZoom",a)}while(n);function a(t){!o.get(t.uid)&&function(t){var e=!1;return t.eachTargetAxis((function(t,n){var r=i.get(t);r&&r[n]&&(e=!0)})),e}(t)&&(s(t),n=!0)}function s(t){o.set(t.uid,!0),r.push(t),t.eachTargetAxis((function(t,e){(i.get(t)||i.set(t,[]))[e]=!0}))}return r}function sC(t){var e=t.ecModel,n={infoList:[],infoMap:dt()};return t.eachTargetAxis((function(t,i){var r=e.getComponent(oC(t),i);if(r){var o=r.getCoordSysModel();if(o){var a=o.uid,s=n.infoMap.get(a);s||(s={model:o,axisModels:[]},n.infoList.push(s),n.infoMap.set(a,s)),s.axisModels.push(r)}}})),n}var lC=function(){function t(){this.indexList=[],this.indexMap=[]}return t.prototype.add=function(t){this.indexMap[t]||(this.indexList.push(t),this.indexMap[t]=!0)},t}(),uC=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._autoThrottle=!0,n._noTarget=!0,n._rangePropMode=["percent","percent"],n}return n(e,t),e.prototype.init=function(t,e,n){var i=hC(t);this.settledOption=i,this.mergeDefaultAndTheme(t,n),this._doInit(i)},e.prototype.mergeOption=function(t){var e=hC(t);T(this.option,t,!0),T(this.settledOption,e,!0),this._doInit(e)},e.prototype._doInit=function(t){var e=this.option;this._setDefaultThrottle(t),this._updateRangeUse(t);var n=this.settledOption;E([["start","startValue"],["end","endValue"]],(function(t,i){"value"===this._rangePropMode[i]&&(e[t[0]]=n[t[0]]=null)}),this),this._resetTarget()},e.prototype._resetTarget=function(){var t=this.get("orient",!0),e=this._targetAxisInfoMap=dt();this._fillSpecifiedTargetAxis(e)?this._orient=t||this._makeAutoOrientByTargetAxis():(this._orient=t||"horizontal",this._fillAutoTargetAxisByOrient(e,this._orient)),this._noTarget=!0,e.each((function(t){t.indexList.length&&(this._noTarget=!1)}),this)},e.prototype._fillSpecifiedTargetAxis=function(t){var e=!1;return E(iC,(function(n){var i=this.getReferringComponents(oC(n),yo);if(i.specified){e=!0;var r=new lC;E(i.models,(function(t){r.add(t.componentIndex)})),t.set(n,r)}}),this),e},e.prototype._fillAutoTargetAxisByOrient=function(t,e){var n=this.ecModel,i=!0;if(i){var r="vertical"===e?"y":"x";o(n.findComponents({mainType:r+"Axis"}),r)}i&&o(n.findComponents({mainType:"singleAxis",filter:function(t){return t.get("orient",!0)===e}}),"single");function o(e,n){var r=e[0];if(r){var o=new lC;if(o.add(r.componentIndex),t.set(n,o),i=!1,"x"===n||"y"===n){var a=r.getReferringComponents("grid",vo).models[0];a&&E(e,(function(t){r.componentIndex!==t.componentIndex&&a===t.getReferringComponents("grid",vo).models[0]&&o.add(t.componentIndex)}))}}}i&&E(iC,(function(e){if(i){var r=n.findComponents({mainType:oC(e),filter:function(t){return"category"===t.get("type",!0)}});if(r[0]){var o=new lC;o.add(r[0].componentIndex),t.set(e,o),i=!1}}}),this)},e.prototype._makeAutoOrientByTargetAxis=function(){var t;return this.eachTargetAxis((function(e){!t&&(t=e)}),this),"y"===t?"vertical":"horizontal"},e.prototype._setDefaultThrottle=function(t){if(t.hasOwnProperty("throttle")&&(this._autoThrottle=!1),this._autoThrottle){var e=this.ecModel.option;this.option.throttle=e.animation&&e.animationDurationUpdate>0?100:20}},e.prototype._updateRangeUse=function(t){var e=this._rangePropMode,n=this.get("rangeMode");E([["start","startValue"],["end","endValue"]],(function(i,r){var o=null!=t[i[0]],a=null!=t[i[1]];o&&!a?e[r]="percent":!o&&a?e[r]="value":n?e[r]=n[r]:o&&(e[r]="percent")}))},e.prototype.noTarget=function(){return this._noTarget},e.prototype.getFirstTargetAxisModel=function(){var t;return this.eachTargetAxis((function(e,n){null==t&&(t=this.ecModel.getComponent(oC(e),n))}),this),t},e.prototype.eachTargetAxis=function(t,e){this._targetAxisInfoMap.each((function(n,i){E(n.indexList,(function(n){t.call(e,i,n)}))}))},e.prototype.getAxisProxy=function(t,e){var n=this.getAxisModel(t,e);if(n)return n.__dzAxisProxy},e.prototype.getAxisModel=function(t,e){var n=this._targetAxisInfoMap.get(t);if(n&&n.indexMap[e])return this.ecModel.getComponent(oC(t),e)},e.prototype.setRawRange=function(t){var e=this.option,n=this.settledOption;E([["start","startValue"],["end","endValue"]],(function(i){null==t[i[0]]&&null==t[i[1]]||(e[i[0]]=n[i[0]]=t[i[0]],e[i[1]]=n[i[1]]=t[i[1]])}),this),this._updateRangeUse(t)},e.prototype.setCalculatedRange=function(t){var e=this.option;E(["start","startValue","end","endValue"],(function(n){e[n]=t[n]}))},e.prototype.getPercentRange=function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getDataPercentWindow()},e.prototype.getValueRange=function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getDataValueWindow();var n=this.findRepresentativeAxisProxy();return n?n.getDataValueWindow():void 0},e.prototype.findRepresentativeAxisProxy=function(t){if(t)return t.__dzAxisProxy;for(var e,n=this._targetAxisInfoMap.keys(),i=0;io&&(e[1-i]=e[i]+u.sign*o),e}function gC(t,e){var n=t[e]-t[1-e];return{span:Math.abs(n),sign:n>0?-1:n<0?1:e?-1:1}}function vC(t,e){return Math.min(null!=e[1]?e[1]:1/0,Math.max(null!=e[0]?e[0]:-1/0,t))}var yC=E,mC=Ar,_C=function(){function t(t,e,n,i){this._dimName=t,this._axisIndex=e,this.ecModel=i,this._dataZoomModel=n}return t.prototype.hostedBy=function(t){return this._dataZoomModel===t},t.prototype.getDataValueWindow=function(){return this._valueWindow.slice()},t.prototype.getDataPercentWindow=function(){return this._percentWindow.slice()},t.prototype.getTargetSeriesModels=function(){var t=[];return this.ecModel.eachSeries((function(e){if(function(t){var e=t.get("coordinateSystem");return L(rC,e)>=0}(e)){var n=oC(this._dimName),i=e.getReferringComponents(n,vo).models[0];i&&this._axisIndex===i.componentIndex&&t.push(e)}}),this),t},t.prototype.getAxisModel=function(){return this.ecModel.getComponent(this._dimName+"Axis",this._axisIndex)},t.prototype.getMinMaxSpan=function(){return I(this._minMaxSpan)},t.prototype.calculateDataWindow=function(t){var e,n=this._dataExtent,i=this.getAxisModel().axis.scale,r=this._dataZoomModel.getRangePropMode(),o=[0,100],a=[],s=[];yC(["start","end"],(function(l,u){var h=t[l],c=t[l+"Value"];"percent"===r[u]?(null==h&&(h=o[u]),c=i.parse(Tr(h,o,n))):(e=!0,h=Tr(c=null==c?n[u]:i.parse(c),n,o)),s[u]=c,a[u]=h})),mC(s),mC(a);var l=this._minMaxSpan;function u(t,e,n,r,o){var a=o?"Span":"ValueSpan";fC(0,t,n,"all",l["min"+a],l["max"+a]);for(var s=0;s<2;s++)e[s]=Tr(t[s],n,r,!0),o&&(e[s]=i.parse(e[s]))}return e?u(s,a,n,o,!1):u(a,s,o,n,!0),{valueWindow:s,percentWindow:a}},t.prototype.reset=function(t){if(t===this._dataZoomModel){var e=this.getTargetSeriesModels();this._dataExtent=function(t,e,n){var i=[1/0,-1/0];yC(n,(function(t){!function(t,e,n){e&&E(S_(e,n),(function(n){var i=e.getApproximateExtent(n);i[0]t[1]&&(t[1]=i[1])}))}(i,t.getData(),e)}));var r=t.getAxisModel(),o=d_(r.axis.scale,r,i).calculate();return[o.min,o.max]}(this,this._dimName,e),this._updateMinMaxSpan();var n=this.calculateDataWindow(t.settledOption);this._valueWindow=n.valueWindow,this._percentWindow=n.percentWindow,this._setAxisModel()}},t.prototype.filterData=function(t,e){if(t===this._dataZoomModel){var n=this._dimName,i=this.getTargetSeriesModels(),r=t.get("filterMode"),o=this._valueWindow;"none"!==r&&yC(i,(function(t){var e=t.getData(),i=e.mapDimensionsAll(n);if(i.length){if("weakFilter"===r){var a=e.getStore(),s=z(i,(function(t){return e.getDimensionIndex(t)}),e);e.filterSelf((function(t){for(var e,n,r,l=0;lo[1];if(h&&!c&&!p)return!0;h&&(r=!0),c&&(e=!0),p&&(n=!0)}return r&&e&&n}))}else yC(i,(function(n){if("empty"===r)t.setData(e=e.map(n,(function(t){return function(t){return t>=o[0]&&t<=o[1]}(t)?t:NaN})));else{var i={};i[n]=o,e.selectRange(i)}}));yC(i,(function(t){e.setApproximateExtent(o,t)}))}}))}},t.prototype._updateMinMaxSpan=function(){var t=this._minMaxSpan={},e=this._dataZoomModel,n=this._dataExtent;yC(["min","max"],(function(i){var r=e.get(i+"Span"),o=e.get(i+"ValueSpan");null!=o&&(o=this.getAxisModel().axis.scale.parse(o)),null!=o?r=Tr(n[0]+o,n,[0,100],!0):null!=r&&(o=Tr(r,[0,100],n,!0)-n[0]),t[i+"Span"]=r,t[i+"ValueSpan"]=o}),this)},t.prototype._setAxisModel=function(){var t=this.getAxisModel(),e=this._percentWindow,n=this._valueWindow;if(e){var i=Or(n,[0,500]);i=Math.min(i,20);var r=t.axis.scale.rawExtentInfo;0!==e[0]&&r.setDeterminedMinMax("min",+n[0].toFixed(i)),100!==e[1]&&r.setDeterminedMinMax("max",+n[1].toFixed(i)),r.freeze()}},t}();var xC={getTargetSeries:function(t){function e(e){t.eachComponent("dataZoom",(function(n){n.eachTargetAxis((function(i,r){var o=t.getComponent(oC(i),r);e(i,r,o,n)}))}))}e((function(t,e,n,i){n.__dzAxisProxy=null}));var n=[];e((function(e,i,r,o){r.__dzAxisProxy||(r.__dzAxisProxy=new _C(e,i,o,t),n.push(r.__dzAxisProxy))}));var i=dt();return E(n,(function(t){E(t.getTargetSeriesModels(),(function(t){i.set(t.uid,t)}))})),i},overallReset:function(t,e){t.eachComponent("dataZoom",(function(t){t.eachTargetAxis((function(e,n){t.getAxisProxy(e,n).reset(t)})),t.eachTargetAxis((function(n,i){t.getAxisProxy(n,i).filterData(t,e)}))})),t.eachComponent("dataZoom",(function(t){var e=t.findRepresentativeAxisProxy();if(e){var n=e.getDataPercentWindow(),i=e.getDataValueWindow();t.setCalculatedRange({start:n[0],end:n[1],startValue:i[0],endValue:i[1]})}}))}};var wC=!1;function bC(t){wC||(wC=!0,t.registerProcessor(t.PRIORITY.PROCESSOR.FILTER,xC),function(t){t.registerAction("dataZoom",(function(t,e){E(aC(e,t),(function(e){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})}))}))}(t),t.registerSubTypeDefaulter("dataZoom",(function(){return"slider"})))}function SC(t){t.registerComponentModel(cC),t.registerComponentView(dC),bC(t)}var MC=function(){},CC={};function IC(t,e){CC[t]=e}function TC(t){return CC[t]}var DC=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.optionUpdated=function(){t.prototype.optionUpdated.apply(this,arguments);var e=this.ecModel;E(this.option.feature,(function(t,n){var i=TC(n);i&&(i.getDefaultOption&&(i.defaultOption=i.getDefaultOption(e)),T(t,i.defaultOption))}))},e.type="toolbox",e.layoutMode={type:"box",ignoreSize:!0},e.defaultOption={show:!0,z:6,orient:"horizontal",left:"right",top:"top",backgroundColor:"transparent",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemSize:15,itemGap:8,showTitle:!0,iconStyle:{borderColor:"#666",color:"none"},emphasis:{iconStyle:{borderColor:"#3E98C5"}},tooltip:{show:!1,position:"bottom"}},e}(Jc);function kC(t,e){var n=Ac(e.get("padding")),i=e.getItemStyle(["color","opacity"]);return i.fill=e.get("backgroundColor"),t=new ps({shape:{x:t.x-n[3],y:t.y-n[0],width:t.width+n[1]+n[3],height:t.height+n[0]+n[2],r:e.get("borderRadius")},style:i,silent:!0,z2:-1})}var AC=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.render=function(t,e,n,i){var r=this.group;if(r.removeAll(),t.get("show")){var o=+t.get("itemSize"),a="vertical"===t.get("orient"),s=t.get("feature")||{},l=this._features||(this._features={}),u=[];E(s,(function(t,e){u.push(e)})),new Wy(this._featureNames||[],u).add(h).update(h).remove(W(h,null)).execute(),this._featureNames=u,function(t,e,n){var i=e.getBoxLayoutParams(),r=e.get("padding"),o={width:n.getWidth(),height:n.getHeight()},a=Yc(i,o,r);Zc(e.get("orient"),t,e.get("itemGap"),a.width,a.height),Xc(t,i,o,r)}(r,t,n),r.add(kC(r.getBoundingRect(),t)),a||r.eachChild((function(t){var e=t.__title,i=t.ensureState("emphasis"),a=i.textConfig||(i.textConfig={}),s=t.getTextContent(),l=s&&s.ensureState("emphasis");if(l&&!U(l)&&e){var u=l.style||(l.style={}),h=ir(e,gs.makeFont(u)),c=t.x+r.x,p=!1;t.y+r.y+o+h.height>n.getHeight()&&(a.position="top",p=!0);var d=p?-5-h.height:o+10;c+h.width/2>n.getWidth()?(a.position=["100%",d],u.align="right"):c-h.width/2<0&&(a.position=[0,d],u.align="left")}}))}function h(h,c){var p,d=u[h],f=u[c],g=s[d],v=new Hh(g,t,t.ecModel);if(i&&null!=i.newTitle&&i.featureName===d&&(g.title=i.newTitle),d&&!f){if(function(t){return 0===t.indexOf("my")}(d))p={onclick:v.option.onclick,featureName:d};else{var y=TC(d);if(!y)return;p=new y}l[d]=p}else if(!(p=l[f]))return;p.uid=Gh("toolbox-feature"),p.model=v,p.ecModel=e,p.api=n;var m=p instanceof MC;d||!f?!v.get("show")||m&&p.unusable?m&&p.remove&&p.remove(e,n):(!function(i,s,l){var u,h,c=i.getModel("iconStyle"),p=i.getModel(["emphasis","iconStyle"]),d=s instanceof MC&&s.getIcons?s.getIcons():i.get("icon"),f=i.get("title")||{};Z(d)?(u={})[l]=d:u=d;Z(f)?(h={})[l]=f:h=f;var g=i.iconPaths={};E(u,(function(l,u){var d=ch(l,{},{x:-o/2,y:-o/2,width:o,height:o});d.setStyle(c.getItemStyle()),d.ensureState("emphasis").style=p.getItemStyle();var f=new gs({style:{text:h[u],align:p.get("textAlign"),borderRadius:p.get("textBorderRadius"),padding:p.get("textPadding"),fill:null},ignore:!0});d.setTextContent(f),fh({el:d,componentModel:t,itemName:u,formatterParamsExtra:{title:h[u]}}),d.__title=h[u],d.on("mouseover",(function(){var e=p.getItemStyle(),i=a?null==t.get("right")&&"right"!==t.get("left")?"right":"left":null==t.get("bottom")&&"bottom"!==t.get("top")?"bottom":"top";f.setStyle({fill:p.get("textFill")||e.fill||e.stroke||"#000",backgroundColor:p.get("textBackgroundColor")}),d.setTextConfig({position:p.get("textPosition")||i}),f.ignore=!t.get("showTitle"),n.enterEmphasis(this)})).on("mouseout",(function(){"emphasis"!==i.get(["iconStatus",u])&&n.leaveEmphasis(this),f.hide()})),("emphasis"===i.get(["iconStatus",u])?il:rl)(d),r.add(d),d.on("click",H(s.onclick,s,e,n,u)),g[u]=d}))}(v,p,d),v.setIconStatus=function(t,e){var n=this.option,i=this.iconPaths;n.iconStatus=n.iconStatus||{},n.iconStatus[t]=e,i[t]&&("emphasis"===e?il:rl)(i[t])},p instanceof MC&&p.render&&p.render(v,e,n,i)):m&&p.dispose&&p.dispose(e,n)}},e.prototype.updateView=function(t,e,n,i){E(this._features,(function(t){t instanceof MC&&t.updateView&&t.updateView(t.model,e,n,i)}))},e.prototype.remove=function(t,e){E(this._features,(function(n){n instanceof MC&&n.remove&&n.remove(t,e)})),this.group.removeAll()},e.prototype.dispose=function(t,e){E(this._features,(function(n){n instanceof MC&&n.dispose&&n.dispose(t,e)}))},e.type="toolbox",e}(Nf);var PC=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.onclick=function(t,e){var n=this.model,i=n.get("name")||t.get("title.0.text")||"echarts",o="svg"===e.getZr().painter.getType(),a=o?"svg":n.get("type",!0)||"png",s=e.getConnectedDataURL({type:a,backgroundColor:n.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",connectedBackgroundColor:n.get("connectedBackgroundColor"),excludeComponents:n.get("excludeComponents"),pixelRatio:n.get("pixelRatio")}),l=r.browser;if(U(MouseEvent)&&(l.newEdge||!l.ie&&!l.edge)){var u=document.createElement("a");u.download=i+"."+a,u.target="_blank",u.href=s;var h=new MouseEvent("click",{view:document.defaultView,bubbles:!0,cancelable:!1});u.dispatchEvent(h)}else if(window.navigator.msSaveOrOpenBlob||o){var c=s.split(","),p=c[0].indexOf("base64")>-1,d=o?decodeURIComponent(c[1]):c[1];p&&(d=window.atob(d));var f=i+"."+a;if(window.navigator.msSaveOrOpenBlob){for(var g=d.length,v=new Uint8Array(g);g--;)v[g]=d.charCodeAt(g);var y=new Blob([v]);window.navigator.msSaveOrOpenBlob(y,f)}else{var m=document.createElement("iframe");document.body.appendChild(m);var _=m.contentWindow,x=_.document;x.open("image/svg+xml","replace"),x.write(d),x.close(),_.focus(),x.execCommand("SaveAs",!0,f),document.body.removeChild(m)}}else{var w=n.get("lang"),b='',S=window.open();S.document.write(b),S.document.title=i}},e.getDefaultOption=function(t){return{show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:t.getLocaleModel().get(["toolbox","saveAsImage","title"]),type:"png",connectedBackgroundColor:"#fff",name:"",excludeComponents:["toolbox"],lang:t.getLocaleModel().get(["toolbox","saveAsImage","lang"])}},e}(MC),LC="__ec_magicType_stack__",OC=[["line","bar"],["stack"]],RC=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getIcons=function(){var t=this.model,e=t.get("icon"),n={};return E(t.get("type"),(function(t){e[t]&&(n[t]=e[t])})),n},e.getDefaultOption=function(t){return{show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z"},title:t.getLocaleModel().get(["toolbox","magicType","title"]),option:{},seriesIndex:{}}},e.prototype.onclick=function(t,e,n){var i=this.model,r=i.get(["seriesIndex",n]);if(NC[n]){var o,a={series:[]};E(OC,(function(t){L(t,n)>=0&&E(t,(function(t){i.setIconStatus(t,"normal")}))})),i.setIconStatus(n,"emphasis"),t.eachComponent({mainType:"series",query:null==r?null:{seriesIndex:r}},(function(t){var e=t.subType,r=t.id,o=NC[n](e,r,t,i);o&&(A(o,t.option),a.series.push(o));var s=t.coordinateSystem;if(s&&"cartesian2d"===s.type&&("line"===n||"bar"===n)){var l=s.getAxesByScale("ordinal")[0];if(l){var u=l.dim+"Axis",h=t.getReferringComponents(u,vo).models[0].componentIndex;a[u]=a[u]||[];for(var c=0;c<=h;c++)a[u][h]=a[u][h]||{};a[u][h].boundaryGap="bar"===n}}}));var s=n;"stack"===n&&(o=T({stack:i.option.title.tiled,tiled:i.option.title.stack},i.option.title),"emphasis"!==i.get(["iconStatus",n])&&(s="tiled")),e.dispatchAction({type:"changeMagicType",currentType:s,newOption:a,newTitle:o,featureName:"magicType"})}},e}(MC),NC={line:function(t,e,n,i){if("bar"===t)return T({id:e,type:"line",data:n.get("data"),stack:n.get("stack"),markPoint:n.get("markPoint"),markLine:n.get("markLine")},i.get(["option","line"])||{},!0)},bar:function(t,e,n,i){if("line"===t)return T({id:e,type:"bar",data:n.get("data"),stack:n.get("stack"),markPoint:n.get("markPoint"),markLine:n.get("markLine")},i.get(["option","bar"])||{},!0)},stack:function(t,e,n,i){var r=n.get("stack")===LC;if("line"===t||"bar"===t)return i.setIconStatus("stack",r?"normal":"emphasis"),T({id:e,stack:r?"":LC},i.get(["option","stack"])||{},!0)}};Dy({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},(function(t,e){e.mergeOption(t.newOption)}));var EC=new Array(60).join("-"),zC="\t";function BC(t){return t.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}var VC=new RegExp("[\t]+","g");function FC(t,e){var n=t.split(new RegExp("\n*"+EC+"\n*","g")),i={series:[]};return E(n,(function(t,n){if(function(t){if(t.slice(0,t.indexOf("\n")).indexOf(zC)>=0)return!0}(t)){var r=function(t){for(var e=t.split(/\n+/g),n=[],i=z(BC(e.shift()).split(VC),(function(t){return{name:t,data:[]}})),r=0;r6}(t)||o){if(a&&!o){"single"===s.brushMode&&fI(t);var l=I(s);l.brushType=PI(l.brushType,a),l.panelId=a===KC?null:a.panelId,o=t._creatingCover=aI(t,l),t._covers.push(o)}if(o){var u=RI[PI(t._brushType,a)];o.__brushOption.range=u.getCreatingRange(TI(t,o,t._track)),i&&(sI(t,o),u.updateCommon(t,o)),lI(t,o),r={isEnd:i}}}else i&&"single"===s.brushMode&&s.removeOnClick&&pI(t,e,n)&&fI(t)&&(r={isEnd:i,removeOnClick:!0});return r}function PI(t,e){return"auto"===t?e.defaultBrushType:t}var LI={mousedown:function(t){if(this._dragging)OI(this,t);else if(!t.target||!t.target.draggable){DI(t);var e=this.group.transformCoordToLocal(t.offsetX,t.offsetY);this._creatingCover=null,(this._creatingPanel=pI(this,t,e))&&(this._dragging=!0,this._track=[e.slice()])}},mousemove:function(t){var e=t.offsetX,n=t.offsetY,i=this.group.transformCoordToLocal(e,n);if(function(t,e,n){if(t._brushType&&!function(t,e,n){var i=t._zr;return e<0||e>i.getWidth()||n<0||n>i.getHeight()}(t,e.offsetX,e.offsetY)){var i=t._zr,r=t._covers,o=pI(t,e,n);if(!t._dragging)for(var a=0;a=0)&&t(r,i._targetInfoList)}))}return t.prototype.setOutputRanges=function(t,e){return this.matchOutputRanges(t,e,(function(t,e,n){if((t.coordRanges||(t.coordRanges=[])).push(e),!t.coordRange){t.coordRange=e;var i=jI[t.brushType](0,n,e);t.__rangeOffset={offset:KI[t.brushType](i.values,t.range,[1,1]),xyMinMax:i.xyMinMax}}})),t},t.prototype.matchOutputRanges=function(t,e,n){E(t,(function(t){var i=this.findTargetInfo(t,e);i&&!0!==i&&E(i.coordSyses,(function(i){var r=jI[t.brushType](1,i,t.range,!0);n(t,r.values,i,e)}))}),this)},t.prototype.setInputRanges=function(t,e){E(t,(function(t){var n,i,r,o,a,s=this.findTargetInfo(t,e);if(t.range=t.range||[],s&&!0!==s){t.panelId=s.panelId;var l=jI[t.brushType](0,s.coordSys,t.coordRange),u=t.__rangeOffset;t.range=u?KI[t.brushType](l.values,u.offset,(n=l.xyMinMax,i=u.xyMinMax,r=QI(n),o=QI(i),a=[r[0]/o[0],r[1]/o[1]],isNaN(a[0])&&(a[0]=1),isNaN(a[1])&&(a[1]=1),a)):l.values}}),this)},t.prototype.makePanelOpts=function(t,e){return z(this._targetInfoList,(function(n){var i=n.getPanelRect();return{panelId:n.panelId,defaultBrushType:e?e(n):null,clipPath:zI(i),isTargetByCursor:VI(i,t,n.coordSysModel),getLinearBrushOtherExtent:BI(i)}}))},t.prototype.controlSeries=function(t,e,n){var i=this.findTargetInfo(t,n);return!0===i||i&&L(i.coordSyses,e.coordinateSystem)>=0},t.prototype.findTargetInfo=function(t,e){for(var n=this._targetInfoList,i=UI(e,t),r=0;rt[1]&&t.reverse(),t}function UI(t,e){return fo(t,e,{includeMainTypes:HI})}var ZI={grid:function(t,e){var n=t.xAxisModels,i=t.yAxisModels,r=t.gridModels,o=dt(),a={},s={};(n||i||r)&&(E(n,(function(t){var e=t.axis.grid.model;o.set(e.id,e),a[e.id]=!0})),E(i,(function(t){var e=t.axis.grid.model;o.set(e.id,e),s[e.id]=!0})),E(r,(function(t){o.set(t.id,t),a[t.id]=!0,s[t.id]=!0})),o.each((function(t){var r=t.coordinateSystem,o=[];E(r.getCartesians(),(function(t,e){(L(n,t.getAxis("x").model)>=0||L(i,t.getAxis("y").model)>=0)&&o.push(t)})),e.push({panelId:"grid--"+t.id,gridModel:t,coordSysModel:t,coordSys:o[0],coordSyses:o,getPanelRect:XI.grid,xAxisDeclared:a[t.id],yAxisDeclared:s[t.id]})})))},geo:function(t,e){E(t.geoModels,(function(t){var n=t.coordinateSystem;e.push({panelId:"geo--"+t.id,geoModel:t,coordSysModel:t,coordSys:n,coordSyses:[n],getPanelRect:XI.geo})}))}},YI=[function(t,e){var n=t.xAxisModel,i=t.yAxisModel,r=t.gridModel;return!r&&n&&(r=n.axis.grid.model),!r&&i&&(r=i.axis.grid.model),r&&r===e.gridModel},function(t,e){var n=t.geoModel;return n&&n===e.geoModel}],XI={grid:function(){return this.coordSys.master.getRect().clone()},geo:function(){var t=this.coordSys,e=t.getBoundingRect().clone();return e.applyTransform(rh(t)),e}},jI={lineX:W(qI,0),lineY:W(qI,1),rect:function(t,e,n,i){var r=t?e.pointToData([n[0][0],n[1][0]],i):e.dataToPoint([n[0][0],n[1][0]],i),o=t?e.pointToData([n[0][1],n[1][1]],i):e.dataToPoint([n[0][1],n[1][1]],i),a=[GI([r[0],o[0]]),GI([r[1],o[1]])];return{values:a,xyMinMax:a}},polygon:function(t,e,n,i){var r=[[1/0,-1/0],[1/0,-1/0]];return{values:z(n,(function(n){var o=t?e.pointToData(n,i):e.dataToPoint(n,i);return r[0][0]=Math.min(r[0][0],o[0]),r[1][0]=Math.min(r[1][0],o[1]),r[0][1]=Math.max(r[0][1],o[0]),r[1][1]=Math.max(r[1][1],o[1]),o})),xyMinMax:r}}};function qI(t,e,n,i){var r=n.getAxis(["x","y"][t]),o=GI(z([0,1],(function(t){return e?r.coordToData(r.toLocalCoord(i[t]),!0):r.toGlobalCoord(r.dataToCoord(i[t]))}))),a=[];return a[t]=o,a[1-t]=[NaN,NaN],{values:o,xyMinMax:a}}var KI={lineX:W($I,0),lineY:W($I,1),rect:function(t,e,n){return[[t[0][0]-n[0]*e[0][0],t[0][1]-n[0]*e[0][1]],[t[1][0]-n[1]*e[1][0],t[1][1]-n[1]*e[1][1]]]},polygon:function(t,e,n){return z(t,(function(t,i){return[t[0]-n[0]*e[i][0],t[1]-n[1]*e[i][1]]}))}};function $I(t,e,n,i){return[e[0]-i[t]*n[0],e[1]-i[t]*n[1]]}function QI(t){return t?[t[0][1]-t[0][0],t[1][1]-t[1][0]]:[NaN,NaN]}var JI,tT,eT=E,nT=Qr+"toolbox-dataZoom_",iT=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.render=function(t,e,n,i){this._brushController||(this._brushController=new oI(n.getZr()),this._brushController.on("brush",H(this._onBrush,this)).mount()),function(t,e,n,i,r){var o=n._isZoomActive;i&&"takeGlobalCursor"===i.type&&(o="dataZoomSelect"===i.key&&i.dataZoomSelectActive);n._isZoomActive=o,t.setIconStatus("zoom",o?"emphasis":"normal");var a=new WI(oT(t),e,{include:["grid"]}).makePanelOpts(r,(function(t){return t.xAxisDeclared&&!t.yAxisDeclared?"lineX":!t.xAxisDeclared&&t.yAxisDeclared?"lineY":"rect"}));n._brushController.setPanels(a).enableBrush(!(!o||!a.length)&&{brushType:"auto",brushStyle:t.getModel("brushStyle").getItemStyle()})}(t,e,this,i,n),function(t,e){t.setIconStatus("back",function(t){return ZC(t).length}(e)>1?"emphasis":"normal")}(t,e)},e.prototype.onclick=function(t,e,n){rT[n].call(this)},e.prototype.remove=function(t,e){this._brushController&&this._brushController.unmount()},e.prototype.dispose=function(t,e){this._brushController&&this._brushController.dispose()},e.prototype._onBrush=function(t){var e=t.areas;if(t.isEnd&&e.length){var n={},i=this.ecModel;this._brushController.updateCovers([]),new WI(oT(this.model),i,{include:["grid"]}).matchOutputRanges(e,i,(function(t,e,n){if("cartesian2d"===n.type){var i=t.brushType;"rect"===i?(r("x",n,e[0]),r("y",n,e[1])):r({lineX:"x",lineY:"y"}[i],n,e)}})),function(t,e){var n=ZC(t);GC(e,(function(e,i){for(var r=n.length-1;r>=0&&!n[r][i];r--);if(r<0){var o=t.queryComponents({mainType:"dataZoom",subType:"select",id:i})[0];if(o){var a=o.getPercentRange();n[0][i]={dataZoomId:i,start:a[0],end:a[1]}}}})),n.push(e)}(i,n),this._dispatchZoomAction(n)}function r(t,e,r){var o=e.getAxis(t),a=o.model,s=function(t,e,n){var i;return n.eachComponent({mainType:"dataZoom",subType:"select"},(function(n){n.getAxisModel(t,e.componentIndex)&&(i=n)})),i}(t,a,i),l=s.findRepresentativeAxisProxy(a).getMinMaxSpan();null==l.minValueSpan&&null==l.maxValueSpan||(r=fC(0,r.slice(),o.scale.getExtent(),0,l.minValueSpan,l.maxValueSpan)),s&&(n[s.id]={dataZoomId:s.id,startValue:r[0],endValue:r[1]})}},e.prototype._dispatchZoomAction=function(t){var e=[];eT(t,(function(t,n){e.push(I(t))})),e.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:e})},e.getDefaultOption=function(t){return{show:!0,filterMode:"filter",icon:{zoom:"M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",back:"M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"},title:t.getLocaleModel().get(["toolbox","dataZoom","title"]),brushStyle:{borderWidth:0,color:"rgba(210,219,238,0.2)"}}},e}(MC),rT={zoom:function(){var t=!this._isZoomActive;this.api.dispatchAction({type:"takeGlobalCursor",key:"dataZoomSelect",dataZoomSelectActive:t})},back:function(){this._dispatchZoomAction(function(t){var e=ZC(t),n=e[e.length-1];e.length>1&&e.pop();var i={};return GC(n,(function(t,n){for(var r=e.length-1;r>=0;r--)if(t=e[r][n]){i[n]=t;break}})),i}(this.ecModel))}};function oT(t){var e={xAxisIndex:t.get("xAxisIndex",!0),yAxisIndex:t.get("yAxisIndex",!0),xAxisId:t.get("xAxisId",!0),yAxisId:t.get("yAxisId",!0)};return null==e.xAxisIndex&&null==e.xAxisId&&(e.xAxisIndex="all"),null==e.yAxisIndex&&null==e.yAxisId&&(e.yAxisIndex="all"),e}JI="dataZoom",tT=function(t){var e=t.getComponent("toolbox",0),n=["feature","dataZoom"];if(e&&null!=e.get(n)){var i=e.getModel(n),r=[],o=fo(t,oT(i));return eT(o.xAxisModels,(function(t){return a(t,"xAxis","xAxisIndex")})),eT(o.yAxisModels,(function(t){return a(t,"yAxis","yAxisIndex")})),r}function a(t,e,n){var o=t.componentIndex,a={type:"select",$fromToolbox:!0,filterMode:i.get("filterMode",!0)||"filter",id:nT+e+o};a[n]=o,r.push(a)}},st(null==wp.get(JI)&&tT),wp.set(JI,tT);var aT=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="tooltip",e.dependencies=["axisPointer"],e.defaultOption={z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,displayMode:"single",renderMode:"auto",confine:null,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"#fff",shadowBlur:10,shadowColor:"rgba(0, 0, 0, .2)",shadowOffsetX:1,shadowOffsetY:2,borderRadius:4,borderWidth:1,padding:null,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:"#999",width:1,type:"dashed",textStyle:{}}},textStyle:{color:"#666",fontSize:14}},e}(Jc);function sT(t){var e=t.get("confine");return null!=e?!!e:"richText"===t.get("renderMode")}function lT(t){if(r.domSupported)for(var e=document.documentElement.style,n=0,i=t.length;n-1?(u+="top:50%",h+="translateY(-50%) rotate("+(a="left"===s?-225:-45)+"deg)"):(u+="left:50%",h+="translateX(-50%) rotate("+(a="top"===s?225:45)+"deg)");var c=a*Math.PI/180,p=l+r,d=p*Math.abs(Math.cos(c))+p*Math.abs(Math.sin(c)),f=e+" solid "+r+"px;";return'
'}(n,i,r)),Z(t))o.innerHTML=t+a;else if(t){o.innerHTML="",G(t)||(t=[t]);for(var s=0;s=0?this._tryShow(n,i):"leave"===e&&this._hide(i))}),this))},e.prototype._keepShow=function(){var t=this._tooltipModel,e=this._ecModel,n=this._api,i=t.get("triggerOn");if(null!=this._lastX&&null!=this._lastY&&"none"!==i&&"click"!==i){var r=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout((function(){!n.isDisposed()&&r.manuallyShowTip(t,e,n,{x:r._lastX,y:r._lastY,dataByCoordSys:r._lastDataByCoordSys})}))}},e.prototype.manuallyShowTip=function(t,e,n,i){if(i.from!==this.uid&&!r.node&&n.getDom()){var o=CT(i,n);this._ticket="";var a=i.dataByCoordSys,s=function(t,e,n){var i=go(t).queryOptionMap,r=i.keys()[0];if(!r||"series"===r)return;var o,a=mo(e,r,i.get(r),{useDefault:!1,enableAll:!1,enableNone:!1}).models[0];if(!a)return;if(n.getViewOfComponentModel(a).group.traverse((function(e){var n=Ds(e).tooltipConfig;if(n&&n.name===t.name)return o=e,!0})),o)return{componentMainType:r,componentIndex:a.componentIndex,el:o}}(i,e,n);if(s){var l=s.el.getBoundingRect().clone();l.applyTransform(s.el.transform),this._tryShow({offsetX:l.x+l.width/2,offsetY:l.y+l.height/2,target:s.el,position:i.position,positionDefault:"bottom"},o)}else if(i.tooltip&&null!=i.x&&null!=i.y){var u=bT;u.x=i.x,u.y=i.y,u.update(),Ds(u).tooltipConfig={name:null,option:i.tooltip},this._tryShow({offsetX:i.x,offsetY:i.y,target:u},o)}else if(a)this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,dataByCoordSys:a,tooltipOption:i.tooltipOption},o);else if(null!=i.seriesIndex){if(this._manuallyAxisShowTip(t,e,n,i))return;var h=mM(i,e),c=h.point[0],p=h.point[1];null!=c&&null!=p&&this._tryShow({offsetX:c,offsetY:p,target:h.el,position:i.position,positionDefault:"bottom"},o)}else null!=i.x&&null!=i.y&&(n.dispatchAction({type:"updateAxisPointer",x:i.x,y:i.y}),this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,target:n.getZr().findHover(i.x,i.y).target},o))}},e.prototype.manuallyHideTip=function(t,e,n,i){var r=this._tooltipContent;!this._alwaysShowContent&&this._tooltipModel&&r.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=this._lastDataByCoordSys=null,i.from!==this.uid&&this._hide(CT(i,n))},e.prototype._manuallyAxisShowTip=function(t,e,n,i){var r=i.seriesIndex,o=i.dataIndex,a=e.getComponent("axisPointer").coordSysAxesInfo;if(null!=r&&null!=o&&null!=a){var s=e.getSeriesByIndex(r);if(s)if("axis"===MT([s.getData().getItemModel(o),s,(s.coordinateSystem||{}).model],this._tooltipModel).get("trigger"))return n.dispatchAction({type:"updateAxisPointer",seriesIndex:r,dataIndex:o,position:i.position}),!0}},e.prototype._tryShow=function(t,e){var n=t.target;if(this._tooltipModel){this._lastX=t.offsetX,this._lastY=t.offsetY;var i=t.dataByCoordSys;if(i&&i.length)this._showAxisTooltip(i,t);else if(n){var r,o;this._lastDataByCoordSys=null,Eg(n,(function(t){return null!=Ds(t).dataIndex?(r=t,!0):null!=Ds(t).tooltipConfig?(o=t,!0):void 0}),!0),r?this._showSeriesItemTooltip(t,r,e):o?this._showComponentItemTooltip(t,o,e):this._hide(e)}else this._lastDataByCoordSys=null,this._hide(e)}},e.prototype._showOrMove=function(t,e){var n=t.get("showDelay");e=H(e,this),clearTimeout(this._showTimout),n>0?this._showTimout=setTimeout(e,n):e()},e.prototype._showAxisTooltip=function(t,e){var n=this._ecModel,i=this._tooltipModel,r=[e.offsetX,e.offsetY],o=MT([e.tooltipOption],i),a=this._renderMode,s=[],l=df("section",{blocks:[],noHeader:!0}),u=[],h=new Sf;E(t,(function(t){E(t.dataByAxis,(function(t){var e=n.getComponent(t.axisDim+"Axis",t.axisIndex),r=t.value;if(e&&null!=r){var o=rM(r,e.axis,n,t.seriesDataIndices,t.valueLabelOpt),c=df("section",{header:o,noHeader:!lt(o),sortBlocks:!0,blocks:[]});l.blocks.push(c),E(t.seriesDataIndices,(function(l){var p=n.getSeriesByIndex(l.seriesIndex),d=l.dataIndexInside,f=p.getDataParams(d);if(!(f.dataIndex<0)){f.axisDim=t.axisDim,f.axisIndex=t.axisIndex,f.axisType=t.axisType,f.axisId=t.axisId,f.axisValue=__(e.axis,{value:r}),f.axisValueLabel=o,f.marker=h.makeTooltipMarker("item",Vc(f.color),a);var g=Nd(p.formatTooltip(d,!0,null)),v=g.frag;if(v){var y=MT([p],i).get("valueFormatter");c.blocks.push(y?k({valueFormatter:y},v):v)}g.text&&u.push(g.text),s.push(f)}}))}}))})),l.blocks.reverse(),u.reverse();var c=e.position,p=o.get("order"),d=_f(l,h,a,p,n.get("useUTC"),o.get("textStyle"));d&&u.unshift(d);var f="richText"===a?"\n\n":"
",g=u.join(f);this._showOrMove(o,(function(){this._updateContentNotChangedOnAxis(t,s)?this._updatePosition(o,c,r[0],r[1],this._tooltipContent,s):this._showTooltipContent(o,g,s,Math.random()+"",r[0],r[1],c,null,h)}))},e.prototype._showSeriesItemTooltip=function(t,e,n){var i=this._ecModel,r=Ds(e),o=r.seriesIndex,a=i.getSeriesByIndex(o),s=r.dataModel||a,l=r.dataIndex,u=r.dataType,h=s.getData(u),c=this._renderMode,p=t.positionDefault,d=MT([h.getItemModel(l),s,a&&(a.coordinateSystem||{}).model],this._tooltipModel,p?{position:p}:null),f=d.get("trigger");if(null==f||"item"===f){var g=s.getDataParams(l,u),v=new Sf;g.marker=v.makeTooltipMarker("item",Vc(g.color),c);var y=Nd(s.formatTooltip(l,!1,u)),m=d.get("order"),_=d.get("valueFormatter"),x=y.frag,w=x?_f(_?k({valueFormatter:_},x):x,v,c,m,i.get("useUTC"),d.get("textStyle")):y.text,b="item_"+s.name+"_"+l;this._showOrMove(d,(function(){this._showTooltipContent(d,w,g,b,t.offsetX,t.offsetY,t.position,t.target,v)})),n({type:"showTip",dataIndexInside:l,dataIndex:h.getRawIndex(l),seriesIndex:o,from:this.uid})}},e.prototype._showComponentItemTooltip=function(t,e,n){var i=Ds(e),r=i.tooltipConfig.option||{};if(Z(r)){r={content:r,formatter:r}}var o=[r],a=this._ecModel.getComponent(i.componentMainType,i.componentIndex);a&&o.push(a),o.push({formatter:r.content});var s=t.positionDefault,l=MT(o,this._tooltipModel,s?{position:s}:null),u=l.get("content"),h=Math.random()+"",c=new Sf;this._showOrMove(l,(function(){var n=I(l.get("formatterParams")||{});this._showTooltipContent(l,u,n,h,t.offsetX,t.offsetY,t.position,e,c)})),n({type:"showTip",from:this.uid})},e.prototype._showTooltipContent=function(t,e,n,i,r,o,a,s,l){if(this._ticket="",t.get("showContent")&&t.get("show")){var u=this._tooltipContent;u.setEnterable(t.get("enterable"));var h=t.get("formatter");a=a||t.get("position");var c=e,p=this._getNearestPoint([r,o],n,t.get("trigger"),t.get("borderColor")).color;if(h)if(Z(h)){var d=t.ecModel.get("useUTC"),f=G(n)?n[0]:n;c=h,f&&f.axisType&&f.axisType.indexOf("time")>=0&&(c=cc(f.axisValue,c,d)),c=zc(c,n,!0)}else if(U(h)){var g=H((function(e,i){e===this._ticket&&(u.setContent(i,l,t,p,a),this._updatePosition(t,a,r,o,u,n,s))}),this);this._ticket=i,c=h(n,i,g)}else c=h;u.setContent(c,l,t,p,a),u.show(t,p),this._updatePosition(t,a,r,o,u,n,s)}},e.prototype._getNearestPoint=function(t,e,n,i){return"axis"===n||G(e)?{color:i||("html"===this._renderMode?"#fff":"none")}:G(e)?void 0:{color:i||e.color||e.borderColor}},e.prototype._updatePosition=function(t,e,n,i,r,o,a){var s=this._api.getWidth(),l=this._api.getHeight();e=e||t.get("position");var u=r.getSize(),h=t.get("align"),c=t.get("verticalAlign"),p=a&&a.getBoundingRect().clone();if(a&&p.applyTransform(a.transform),U(e)&&(e=e([n,i],o,r.el,p,{viewSize:[s,l],contentSize:u.slice()})),G(e))n=Dr(e[0],s),i=Dr(e[1],l);else if(j(e)){var d=e;d.width=u[0],d.height=u[1];var f=Yc(d,{width:s,height:l});n=f.x,i=f.y,h=null,c=null}else if(Z(e)&&a){var g=function(t,e,n,i){var r=n[0],o=n[1],a=Math.ceil(Math.SQRT2*i)+8,s=0,l=0,u=e.width,h=e.height;switch(t){case"inside":s=e.x+u/2-r/2,l=e.y+h/2-o/2;break;case"top":s=e.x+u/2-r/2,l=e.y-o-a;break;case"bottom":s=e.x+u/2-r/2,l=e.y+h+a;break;case"left":s=e.x-r-a,l=e.y+h/2-o/2;break;case"right":s=e.x+u+a,l=e.y+h/2-o/2}return[s,l]}(e,p,u,t.get("borderWidth"));n=g[0],i=g[1]}else{g=function(t,e,n,i,r,o,a){var s=n.getSize(),l=s[0],u=s[1];null!=o&&(t+l+o+2>i?t-=l+o:t+=o);null!=a&&(e+u+a>r?e-=u+a:e+=a);return[t,e]}(n,i,r,s,l,h?null:20,c?null:20);n=g[0],i=g[1]}if(h&&(n-=IT(h)?u[0]/2:"right"===h?u[0]:0),c&&(i-=IT(c)?u[1]/2:"bottom"===c?u[1]:0),sT(t)){g=function(t,e,n,i,r){var o=n.getSize(),a=o[0],s=o[1];return t=Math.min(t+a,i)-a,e=Math.min(e+s,r)-s,t=Math.max(t,0),e=Math.max(e,0),[t,e]}(n,i,r,s,l);n=g[0],i=g[1]}r.moveTo(n,i)},e.prototype._updateContentNotChangedOnAxis=function(t,e){var n=this._lastDataByCoordSys,i=this._cbParamsList,r=!!n&&n.length===t.length;return r&&E(n,(function(n,o){var a=n.dataByAxis||[],s=(t[o]||{}).dataByAxis||[];(r=r&&a.length===s.length)&&E(a,(function(t,n){var o=s[n]||{},a=t.seriesDataIndices||[],l=o.seriesDataIndices||[];(r=r&&t.value===o.value&&t.axisType===o.axisType&&t.axisId===o.axisId&&a.length===l.length)&&E(a,(function(t,e){var n=l[e];r=r&&t.seriesIndex===n.seriesIndex&&t.dataIndex===n.dataIndex})),i&&E(t.seriesDataIndices,(function(t){var n=t.seriesIndex,o=e[n],a=i[n];o&&a&&a.data!==o.data&&(r=!1)}))}))})),this._lastDataByCoordSys=t,this._cbParamsList=e,!!r},e.prototype._hide=function(t){this._lastDataByCoordSys=null,t({type:"hideTip",from:this.uid})},e.prototype.dispose=function(t,e){!r.node&&e.getDom()&&(Kf(this,"_updatePosition"),this._tooltipContent.dispose(),vM("itemTooltip",e))},e.type="tooltip",e}(Nf);function MT(t,e,n){var i,r=e.ecModel;n?(i=new Hh(n,r,r),i=new Hh(e.option,i,r)):i=e;for(var o=t.length-1;o>=0;o--){var a=t[o];a&&(a instanceof Hh&&(a=a.get("tooltip",!0)),Z(a)&&(a={formatter:a}),a&&(i=new Hh(a,i,r)))}return i}function CT(t,e){return t.dispatchAction||H(e.dispatchAction,e)}function IT(t){return"center"===t||"middle"===t}var TT=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.layoutMode={type:"box",ignoreSize:!0},n}return n(e,t),e.type="title",e.defaultOption={z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:0,top:0,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bold",color:"#464646"},subtextStyle:{fontSize:12,color:"#6E7079"}},e}(Jc),DT=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){if(this.group.removeAll(),t.get("show")){var i=this.group,r=t.getModel("textStyle"),o=t.getModel("subtextStyle"),a=t.get("textAlign"),s=it(t.get("textBaseline"),t.get("textVerticalAlign")),l=new gs({style:bh(r,{text:t.get("text"),fill:r.getTextColor()},{disableBox:!0}),z2:10}),u=l.getBoundingRect(),h=t.get("subtext"),c=new gs({style:bh(o,{text:h,fill:o.getTextColor(),y:u.height+t.get("itemGap"),verticalAlign:"top"},{disableBox:!0}),z2:10}),p=t.get("link"),d=t.get("sublink"),f=t.get("triggerEvent",!0);l.silent=!p&&!f,c.silent=!d&&!f,p&&l.on("click",(function(){Fc(p,"_"+t.get("target"))})),d&&c.on("click",(function(){Fc(d,"_"+t.get("subtarget"))})),Ds(l).eventData=Ds(c).eventData=f?{componentType:"title",componentIndex:t.componentIndex}:null,i.add(l),h&&i.add(c);var g=i.getBoundingRect(),v=t.getBoxLayoutParams();v.width=g.width,v.height=g.height;var y=Yc(v,{width:n.getWidth(),height:n.getHeight()},t.get("padding"));a||("middle"===(a=t.get("left")||t.get("right"))&&(a="center"),"right"===a?y.x+=y.width:"center"===a&&(y.x+=y.width/2)),s||("center"===(s=t.get("top")||t.get("bottom"))&&(s="middle"),"bottom"===s?y.y+=y.height:"middle"===s&&(y.y+=y.height/2),s=s||"top"),i.x=y.x,i.y=y.y,i.markRedraw();var m={align:a,verticalAlign:s};l.setStyle(m),c.setStyle(m),g=i.getBoundingRect();var _=y.margin,x=t.getItemStyle(["color","opacity"]);x.fill=t.get("backgroundColor");var w=new ps({shape:{x:g.x-_[3],y:g.y-_[0],width:g.width+_[1]+_[3],height:g.height+_[0]+_[2],r:t.get("borderRadius")},style:x,subPixelOptimize:!0,silent:!0});i.add(w)}},e.type="title",e}(Nf);function kT(t,e){if(!t)return!1;for(var n=G(t)?t:[t],i=0;i=0&&(a[o]=+a[o].toFixed(c)),[a,h]}var ET={min:W(NT,"min"),max:W(NT,"max"),average:W(NT,"average"),median:W(NT,"median")};function zT(t,e){var n=t.getData(),i=t.coordinateSystem;if(e&&!function(t){return!isNaN(parseFloat(t.x))&&!isNaN(parseFloat(t.y))}(e)&&!G(e.coord)&&i){var r=i.dimensions,o=BT(e,n,i,t);if((e=I(e)).type&&ET[e.type]&&o.baseAxis&&o.valueAxis){var a=L(r,o.baseAxis.dim),s=L(r,o.valueAxis.dim),l=ET[e.type](n,o.baseDataDim,o.valueDataDim,a,s);e.coord=l[0],e.value=l[1]}else{for(var u=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],h=0;h<2;h++)ET[u[h]]&&(u[h]=HT(n,n.mapDimension(r[h]),u[h]));e.coord=u}}return e}function BT(t,e,n,i){var r={};return null!=t.valueIndex||null!=t.valueDim?(r.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,r.valueAxis=n.getAxis(function(t,e){var n=t.getData().getDimensionInfo(e);return n&&n.coordDim}(i,r.valueDataDim)),r.baseAxis=n.getOtherAxis(r.valueAxis),r.baseDataDim=e.mapDimension(r.baseAxis.dim)):(r.baseAxis=i.getBaseAxis(),r.valueAxis=n.getOtherAxis(r.baseAxis),r.baseDataDim=e.mapDimension(r.baseAxis.dim),r.valueDataDim=e.mapDimension(r.valueAxis.dim)),r}function VT(t,e){return!(t&&t.containData&&e.coord&&!RT(e))||t.containData(e.coord)}function FT(t,e){return t?function(t,n,i,r){return Vd(r<2?t.coord&&t.coord[r]:t.value,e[r])}:function(t,n,i,r){return Vd(t.value,e[r])}}function HT(t,e,n){if("average"===n){var i=0,r=0;return t.each(e,(function(t,e){isNaN(t)||(i+=t,r++)})),i/r}return"median"===n?t.getMedian(e):t.getDataExtent(e)["max"===n?1:0]}var WT=co(),GT=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(){this.markerGroupMap=dt()},e.prototype.render=function(t,e,n){var i=this,r=this.markerGroupMap;r.each((function(t){WT(t).keep=!1})),e.eachSeries((function(t){var r=LT.getMarkerModelFromSeries(t,i.type);r&&i.renderSeries(t,r,e,n)})),r.each((function(t){!WT(t).keep&&i.group.remove(t.group)}))},e.prototype.markKeep=function(t){WT(t).keep=!0},e.prototype.toggleBlurSeries=function(t,e){var n=this;E(t,(function(t){var i=LT.getMarkerModelFromSeries(t,n.type);i&&i.getData().eachItemGraphicEl((function(t){t&&(e?ol(t):al(t))}))}))},e.type="marker",e}(Nf);function UT(t,e,n){var i=e.coordinateSystem;t.each((function(r){var o,a=t.getItemModel(r),s=Dr(a.get("x"),n.getWidth()),l=Dr(a.get("y"),n.getHeight());if(isNaN(s)||isNaN(l)){if(e.getMarkerPosition)o=e.getMarkerPosition(t.getValues(t.dimensions,r));else if(i){var u=t.get(i.dimensions[0],r),h=t.get(i.dimensions[1],r);o=i.dataToPoint([u,h])}}else o=[s,l];isNaN(s)||(o[0]=s),isNaN(l)||(o[1]=l),t.setItemLayout(r,o)}))}var ZT=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries((function(t){var e=LT.getMarkerModelFromSeries(t,"markPoint");e&&(UT(e.getData(),t,n),this.markerGroupMap.get(t.id).updateLayout())}),this)},e.prototype.renderSeries=function(t,e,n,i){var r=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,new Ew),u=function(t,e,n){var i;i=t?z(t&&t.dimensions,(function(t){return k(k({},e.getData().getDimensionInfo(e.getData().mapDimension(t))||{}),{name:t,ordinalMeta:null})})):[{name:"value",type:"float"}];var r=new cm(i,n),o=z(n.get("data"),W(zT,e));t&&(o=V(o,W(VT,t)));var a=FT(!!t,i);return r.initData(o,null,a),r}(r,t,e);e.setData(u),UT(e.getData(),t,i),u.each((function(t){var n=u.getItemModel(t),i=n.getShallow("symbol"),r=n.getShallow("symbolSize"),o=n.getShallow("symbolRotate"),s=n.getShallow("symbolOffset"),l=n.getShallow("symbolKeepAspect");if(U(i)||U(r)||U(o)||U(s)){var h=e.getRawValue(t),c=e.getDataParams(t);U(i)&&(i=i(h,c)),U(r)&&(r=r(h,c)),U(o)&&(o=o(h,c)),U(s)&&(s=s(h,c))}var p=n.getModel("itemStyle").getItemStyle(),d=Rg(a,"color");p.fill||(p.fill=d),u.setItemVisual(t,{symbol:i,symbolSize:r,symbolRotate:o,symbolOffset:s,symbolKeepAspect:l,style:p})})),l.updateData(u),this.group.add(l.group),u.eachItemGraphicEl((function(t){t.traverse((function(t){Ds(t).dataModel=e}))})),this.markKeep(l),l.group.silent=e.get("silent")||t.get("silent")},e.type="markPoint",e}(GT);var YT=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.createMarkerModelFromSeries=function(t,n,i){return new e(t,n,i)},e.type="markLine",e.defaultOption={z:5,symbol:["circle","arrow"],symbolSize:[8,16],symbolOffset:0,precision:2,tooltip:{trigger:"item"},label:{show:!0,position:"end",distance:5},lineStyle:{type:"dashed"},emphasis:{label:{show:!0},lineStyle:{width:3}},animationEasing:"linear"},e}(LT),XT=vu.prototype,jT=xu.prototype,qT=function(){this.x1=0,this.y1=0,this.x2=0,this.y2=0,this.percent=1};!function(t){function e(){return null!==t&&t.apply(this,arguments)||this}n(e,t)}(qT);function KT(t){return isNaN(+t.cpx1)||isNaN(+t.cpy1)}var $T=function(t){function e(e){var n=t.call(this,e)||this;return n.type="ec-line",n}return n(e,t),e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new qT},e.prototype.buildPath=function(t,e){KT(e)?XT.buildPath.call(this,t,e):jT.buildPath.call(this,t,e)},e.prototype.pointAt=function(t){return KT(this.shape)?XT.pointAt.call(this,t):jT.pointAt.call(this,t)},e.prototype.tangentAt=function(t){var e=this.shape,n=KT(e)?[e.x2-e.x1,e.y2-e.y1]:jT.tangentAt.call(this,t);return At(n,n)},e}(ts),QT=["fromSymbol","toSymbol"];function JT(t){return"_"+t+"Type"}function tD(t,e,n){var i=e.getItemVisual(n,t);if(i&&"none"!==i){var r=e.getItemVisual(n,t+"Size"),o=e.getItemVisual(n,t+"Rotate"),a=e.getItemVisual(n,t+"Offset"),s=e.getItemVisual(n,t+"KeepAspect"),l=qg(r),u=Kg(a||0,l),h=jg(i,-l[0]/2+u[0],-l[1]/2+u[1],l[0],l[1],null,s);return h.__specifiedRotation=null==o||isNaN(o)?void 0:+o*Math.PI/180||0,h.name=t,h}}function eD(t,e){t.x1=e[0][0],t.y1=e[0][1],t.x2=e[1][0],t.y2=e[1][1],t.percent=1;var n=e[2];n?(t.cpx1=n[0],t.cpy1=n[1]):(t.cpx1=NaN,t.cpy1=NaN)}var nD=function(t){function e(e,n,i){var r=t.call(this)||this;return r._createLine(e,n,i),r}return n(e,t),e.prototype._createLine=function(t,e,n){var i=t.hostModel,r=function(t){var e=new $T({name:"line",subPixelOptimize:!0});return eD(e.shape,t),e}(t.getItemLayout(e));r.shape.percent=0,Bu(r,{shape:{percent:1}},i,e),this.add(r),E(QT,(function(n){var i=tD(n,t,e);this.add(i),this[JT(n)]=t.getItemVisual(e,n)}),this),this._updateCommonStl(t,e,n)},e.prototype.updateData=function(t,e,n){var i=t.hostModel,r=this.childOfName("line"),o=t.getItemLayout(e),a={shape:{}};eD(a.shape,o),zu(r,a,i,e),E(QT,(function(n){var i=t.getItemVisual(e,n),r=JT(n);if(this[r]!==i){this.remove(this.childOfName(n));var o=tD(n,t,e);this.add(o)}this[r]=i}),this),this._updateCommonStl(t,e,n)},e.prototype.getLinePath=function(){return this.childAt(0)},e.prototype._updateCommonStl=function(t,e,n){var i=t.hostModel,r=this.childOfName("line"),o=n&&n.emphasisLineStyle,a=n&&n.blurLineStyle,s=n&&n.selectLineStyle,l=n&&n.labelStatesModels,u=n&&n.emphasisDisabled,h=n&&n.focus,c=n&&n.blurScope;if(!n||t.hasItemOption){var p=t.getItemModel(e),d=p.getModel("emphasis");o=d.getModel("lineStyle").getLineStyle(),a=p.getModel(["blur","lineStyle"]).getLineStyle(),s=p.getModel(["select","lineStyle"]).getLineStyle(),u=d.get("disabled"),h=d.get("focus"),c=d.get("blurScope"),l=wh(p)}var f=t.getItemVisual(e,"style"),g=f.stroke;r.useStyle(f),r.style.fill=null,r.style.strokeNoScale=!0,r.ensureState("emphasis").style=o,r.ensureState("blur").style=a,r.ensureState("select").style=s,E(QT,(function(t){var e=this.childOfName(t);if(e){e.setColor(g),e.style.opacity=f.opacity;for(var n=0;n0&&(m[0]=-m[0],m[1]=-m[1]);var x=y[0]<0?-1:1;if("start"!==i.__position&&"end"!==i.__position){var w=-Math.atan2(y[1],y[0]);u[0].8?"left":h[0]<-.8?"right":"center",p=h[1]>.8?"top":h[1]<-.8?"bottom":"middle";break;case"start":i.x=-h[0]*f+l[0],i.y=-h[1]*g+l[1],c=h[0]>.8?"right":h[0]<-.8?"left":"center",p=h[1]>.8?"bottom":h[1]<-.8?"top":"middle";break;case"insideStartTop":case"insideStart":case"insideStartBottom":i.x=f*x+l[0],i.y=l[1]+b,c=y[0]<0?"right":"left",i.originX=-f*x,i.originY=-b;break;case"insideMiddleTop":case"insideMiddle":case"insideMiddleBottom":case"middle":i.x=_[0],i.y=_[1]+b,c="center",i.originY=-b;break;case"insideEndTop":case"insideEnd":case"insideEndBottom":i.x=-f*x+u[0],i.y=u[1]+b,c=y[0]>=0?"right":"left",i.originX=f*x,i.originY=-b}i.scaleX=i.scaleY=r,i.setStyle({verticalAlign:i.__verticalAlign||p,align:i.__align||c})}}}function S(t,e){var n=t.__specifiedRotation;if(null==n){var i=a.tangentAt(e);t.attr("rotation",(1===e?-1:1)*Math.PI/2-Math.atan2(i[1],i[0]))}else t.attr("rotation",n)}},e}(_r),iD=function(){function t(t){this.group=new _r,this._LineCtor=t||nD}return t.prototype.updateData=function(t){var e=this;this._progressiveEls=null;var n=this,i=n.group,r=n._lineData;n._lineData=t,r||i.removeAll();var o=rD(t);t.diff(r).add((function(n){e._doAdd(t,n,o)})).update((function(n,i){e._doUpdate(r,t,i,n,o)})).remove((function(t){i.remove(r.getItemGraphicEl(t))})).execute()},t.prototype.updateLayout=function(){var t=this._lineData;t&&t.eachItemGraphicEl((function(e,n){e.updateLayout(t,n)}),this)},t.prototype.incrementalPrepareUpdate=function(t){this._seriesScope=rD(t),this._lineData=null,this.group.removeAll()},t.prototype.incrementalUpdate=function(t,e){function n(t){t.isGroup||function(t){return t.animators&&t.animators.length>0}(t)||(t.incremental=!0,t.ensureState("emphasis").hoverLayer=!0)}this._progressiveEls=[];for(var i=t.start;i=0&&X(l)&&(l=+l.toFixed(Math.min(f,20))),p.coord[h]=d.coord[h]=l,r=[p,d,{type:a,valueIndex:i.valueIndex,value:l}]}else r=[]}var g=[zT(t,r[0]),zT(t,r[1]),k({},r[2])];return g[2].type=g[2].type||null,T(g[2],g[0]),T(g[2],g[1]),g};function uD(t){return!isNaN(t)&&!isFinite(t)}function hD(t,e,n,i){var r=1-t,o=i.dimensions[t];return uD(e[r])&&uD(n[r])&&e[t]===n[t]&&i.getAxis(o).containData(e[t])}function cD(t,e){if("cartesian2d"===t.type){var n=e[0].coord,i=e[1].coord;if(n&&i&&(hD(1,n,i,t)||hD(0,n,i,t)))return!0}return VT(t,e[0])&&VT(t,e[1])}function pD(t,e,n,i,r){var o,a=i.coordinateSystem,s=t.getItemModel(e),l=Dr(s.get("x"),r.getWidth()),u=Dr(s.get("y"),r.getHeight());if(isNaN(l)||isNaN(u)){if(i.getMarkerPosition)o=i.getMarkerPosition(t.getValues(t.dimensions,e));else{var h=a.dimensions,c=t.get(h[0],e),p=t.get(h[1],e);o=a.dataToPoint([c,p])}if(qw(a,"cartesian2d")){var d=a.getAxis("x"),f=a.getAxis("y");h=a.dimensions;uD(t.get(h[0],e))?o[0]=d.toGlobalCoord(d.getExtent()[n?0:1]):uD(t.get(h[1],e))&&(o[1]=f.toGlobalCoord(f.getExtent()[n?0:1]))}isNaN(l)||(o[0]=l),isNaN(u)||(o[1]=u)}else o=[l,u];t.setItemLayout(e,o)}var dD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries((function(t){var e=LT.getMarkerModelFromSeries(t,"markLine");if(e){var i=e.getData(),r=sD(e).from,o=sD(e).to;r.each((function(e){pD(r,e,!0,t,n),pD(o,e,!1,t,n)})),i.each((function(t){i.setItemLayout(t,[r.getItemLayout(t),o.getItemLayout(t)])})),this.markerGroupMap.get(t.id).updateLayout()}}),this)},e.prototype.renderSeries=function(t,e,n,i){var r=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,new iD);this.group.add(l.group);var u=function(t,e,n){var i;i=t?z(t&&t.dimensions,(function(t){return k(k({},e.getData().getDimensionInfo(e.getData().mapDimension(t))||{}),{name:t,ordinalMeta:null})})):[{name:"value",type:"float"}];var r=new cm(i,n),o=new cm(i,n),a=new cm([],n),s=z(n.get("data"),W(lD,e,t,n));t&&(s=V(s,W(cD,t)));var l=FT(!!t,i);return r.initData(z(s,(function(t){return t[0]})),null,l),o.initData(z(s,(function(t){return t[1]})),null,l),a.initData(z(s,(function(t){return t[2]}))),a.hasItemOption=!0,{from:r,to:o,line:a}}(r,t,e),h=u.from,c=u.to,p=u.line;sD(e).from=h,sD(e).to=c,e.setData(p);var d=e.get("symbol"),f=e.get("symbolSize"),g=e.get("symbolRotate"),v=e.get("symbolOffset");function y(e,n,r){var o=e.getItemModel(n);pD(e,n,r,t,i);var s=o.getModel("itemStyle").getItemStyle();null==s.fill&&(s.fill=Rg(a,"color")),e.setItemVisual(n,{symbolKeepAspect:o.get("symbolKeepAspect"),symbolOffset:it(o.get("symbolOffset",!0),v[r?0:1]),symbolRotate:it(o.get("symbolRotate",!0),g[r?0:1]),symbolSize:it(o.get("symbolSize"),f[r?0:1]),symbol:it(o.get("symbol",!0),d[r?0:1]),style:s})}G(d)||(d=[d,d]),G(f)||(f=[f,f]),G(g)||(g=[g,g]),G(v)||(v=[v,v]),u.from.each((function(t){y(h,t,!0),y(c,t,!1)})),p.each((function(t){var e=p.getItemModel(t).getModel("lineStyle").getLineStyle();p.setItemLayout(t,[h.getItemLayout(t),c.getItemLayout(t)]),null==e.stroke&&(e.stroke=h.getItemVisual(t,"style").fill),p.setItemVisual(t,{fromSymbolKeepAspect:h.getItemVisual(t,"symbolKeepAspect"),fromSymbolOffset:h.getItemVisual(t,"symbolOffset"),fromSymbolRotate:h.getItemVisual(t,"symbolRotate"),fromSymbolSize:h.getItemVisual(t,"symbolSize"),fromSymbol:h.getItemVisual(t,"symbol"),toSymbolKeepAspect:c.getItemVisual(t,"symbolKeepAspect"),toSymbolOffset:c.getItemVisual(t,"symbolOffset"),toSymbolRotate:c.getItemVisual(t,"symbolRotate"),toSymbolSize:c.getItemVisual(t,"symbolSize"),toSymbol:c.getItemVisual(t,"symbol"),style:e})})),l.updateData(p),u.line.eachItemGraphicEl((function(t){Ds(t).dataModel=e,t.traverse((function(t){Ds(t).dataModel=e}))})),this.markKeep(l),l.group.silent=e.get("silent")||t.get("silent")},e.type="markLine",e}(GT);var fD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.createMarkerModelFromSeries=function(t,n,i){return new e(t,n,i)},e.type="markArea",e.defaultOption={z:1,tooltip:{trigger:"item"},animation:!1,label:{show:!0,position:"top"},itemStyle:{borderWidth:0},emphasis:{label:{show:!0,position:"top"}}},e}(LT),gD=co(),vD=function(t,e,n,i){var r=zT(t,i[0]),o=zT(t,i[1]),a=r.coord,s=o.coord;a[0]=nt(a[0],-1/0),a[1]=nt(a[1],-1/0),s[0]=nt(s[0],1/0),s[1]=nt(s[1],1/0);var l=D([{},r,o]);return l.coord=[r.coord,o.coord],l.x0=r.x,l.y0=r.y,l.x1=o.x,l.y1=o.y,l};function yD(t){return!isNaN(t)&&!isFinite(t)}function mD(t,e,n,i){var r=1-t;return yD(e[r])&&yD(n[r])}function _D(t,e){var n=e.coord[0],i=e.coord[1],r={coord:n,x:e.x0,y:e.y0},o={coord:i,x:e.x1,y:e.y1};return qw(t,"cartesian2d")?!(!n||!i||!mD(1,n,i)&&!mD(0,n,i))||function(t,e,n){return!(t&&t.containZone&&e.coord&&n.coord&&!RT(e)&&!RT(n))||t.containZone(e.coord,n.coord)}(t,r,o):VT(t,r)||VT(t,o)}function xD(t,e,n,i,r){var o,a=i.coordinateSystem,s=t.getItemModel(e),l=Dr(s.get(n[0]),r.getWidth()),u=Dr(s.get(n[1]),r.getHeight());if(isNaN(l)||isNaN(u)){if(i.getMarkerPosition)o=i.getMarkerPosition(t.getValues(n,e));else{var h=[d=t.get(n[0],e),f=t.get(n[1],e)];a.clampData&&a.clampData(h,h),o=a.dataToPoint(h,!0)}if(qw(a,"cartesian2d")){var c=a.getAxis("x"),p=a.getAxis("y"),d=t.get(n[0],e),f=t.get(n[1],e);yD(d)?o[0]=c.toGlobalCoord(c.getExtent()["x0"===n[0]?0:1]):yD(f)&&(o[1]=p.toGlobalCoord(p.getExtent()["y0"===n[1]?0:1]))}isNaN(l)||(o[0]=l),isNaN(u)||(o[1]=u)}else o=[l,u];return o}var wD=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]],bD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries((function(t){var e=LT.getMarkerModelFromSeries(t,"markArea");if(e){var i=e.getData();i.each((function(e){var r=z(wD,(function(r){return xD(i,e,r,t,n)}));i.setItemLayout(e,r),i.getItemGraphicEl(e).setShape("points",r)}))}}),this)},e.prototype.renderSeries=function(t,e,n,i){var r=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,{group:new _r});this.group.add(l.group),this.markKeep(l);var u=function(t,e,n){var i,r,o=["x0","y0","x1","y1"];if(t){var a=z(t&&t.dimensions,(function(t){var n=e.getData();return k(k({},n.getDimensionInfo(n.mapDimension(t))||{}),{name:t,ordinalMeta:null})}));r=z(o,(function(t,e){return{name:t,type:a[e%2].type}})),i=new cm(r,n)}else i=new cm(r=[{name:"value",type:"float"}],n);var s=z(n.get("data"),W(vD,e,t,n));t&&(s=V(s,W(_D,t)));var l=t?function(t,e,n,i){return Vd(t.coord[Math.floor(i/2)][i%2],r[i])}:function(t,e,n,i){return Vd(t.value,r[i])};return i.initData(s,null,l),i.hasItemOption=!0,i}(r,t,e);e.setData(u),u.each((function(e){var n=z(wD,(function(n){return xD(u,e,n,t,i)})),o=r.getAxis("x").scale,s=r.getAxis("y").scale,l=o.getExtent(),h=s.getExtent(),c=[o.parse(u.get("x0",e)),o.parse(u.get("x1",e))],p=[s.parse(u.get("y0",e)),s.parse(u.get("y1",e))];Ar(c),Ar(p);var d=!!(l[0]>c[1]||l[1]p[1]||h[1]=0},e.prototype.getOrient=function(){return"vertical"===this.get("orient")?{index:1,name:"vertical"}:{index:0,name:"horizontal"}},e.type="legend.plain",e.dependencies=["series"],e.defaultOption={z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,symbolRotate:"inherit",symbolKeepAspect:!0,inactiveColor:"#ccc",inactiveBorderColor:"#ccc",inactiveBorderWidth:"auto",itemStyle:{color:"inherit",opacity:"inherit",borderColor:"inherit",borderWidth:"auto",borderCap:"inherit",borderJoin:"inherit",borderDashOffset:"inherit",borderMiterLimit:"inherit"},lineStyle:{width:"auto",color:"inherit",inactiveColor:"#ccc",inactiveWidth:2,opacity:"inherit",type:"inherit",cap:"inherit",join:"inherit",dashOffset:"inherit",miterLimit:"inherit"},textStyle:{color:"#333"},selectedMode:!0,selector:!1,selectorLabel:{show:!0,borderRadius:10,padding:[3,5,3,5],fontSize:12,fontFamily:"sans-serif",color:"#666",borderWidth:1,borderColor:"#666"},emphasis:{selectorLabel:{show:!0,color:"#eee",backgroundColor:"#666"}},selectorPosition:"auto",selectorItemGap:7,selectorButtonGap:10,tooltip:{show:!1}},e}(Jc),MD=W,CD=E,ID=_r,TD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.newlineDisabled=!1,n}return n(e,t),e.prototype.init=function(){this.group.add(this._contentGroup=new ID),this.group.add(this._selectorGroup=new ID),this._isFirstRender=!0},e.prototype.getContentGroup=function(){return this._contentGroup},e.prototype.getSelectorGroup=function(){return this._selectorGroup},e.prototype.render=function(t,e,n){var i=this._isFirstRender;if(this._isFirstRender=!1,this.resetInner(),t.get("show",!0)){var r=t.get("align"),o=t.get("orient");r&&"auto"!==r||(r="right"===t.get("left")&&"vertical"===o?"right":"left");var a=t.get("selector",!0),s=t.get("selectorPosition",!0);!a||s&&"auto"!==s||(s="horizontal"===o?"end":"start"),this.renderInner(r,t,e,n,a,o,s);var l=t.getBoxLayoutParams(),u={width:n.getWidth(),height:n.getHeight()},h=t.get("padding"),c=Yc(l,u,h),p=this.layoutInner(t,r,c,i,a,s),d=Yc(A({width:p.width,height:p.height},l),u,h);this.group.x=d.x-p.x,this.group.y=d.y-p.y,this.group.markRedraw(),this.group.add(this._backgroundEl=kC(p,t))}},e.prototype.resetInner=function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl),this.getSelectorGroup().removeAll()},e.prototype.renderInner=function(t,e,n,i,r,o,a){var s=this.getContentGroup(),l=dt(),u=e.get("selectedMode"),h=[];n.eachRawSeries((function(t){!t.get("legendHoverLink")&&h.push(t.id)})),CD(e.getData(),(function(r,o){var a=r.get("name");if(!this.newlineDisabled&&(""===a||"\n"===a)){var c=new ID;return c.newline=!0,void s.add(c)}var p=n.getSeriesByName(a)[0];if(!l.get(a)){if(p){var d=p.getData(),f=d.getVisual("legendLineStyle")||{},g=d.getVisual("legendIcon"),v=d.getVisual("style");this._createItem(p,a,o,r,e,t,f,v,g,u,i).on("click",MD(DD,a,null,i,h)).on("mouseover",MD(AD,p.name,null,i,h)).on("mouseout",MD(PD,p.name,null,i,h)),l.set(a,!0)}else n.eachRawSeries((function(n){if(!l.get(a)&&n.legendVisualProvider){var s=n.legendVisualProvider;if(!s.containName(a))return;var c=s.indexOfName(a),p=s.getItemVisual(c,"style"),d=s.getItemVisual(c,"legendIcon"),f=gn(p.fill);f&&0===f[3]&&(f[3]=.2,p=k(k({},p),{fill:Sn(f,"rgba")})),this._createItem(n,a,o,r,e,t,{},p,d,u,i).on("click",MD(DD,null,a,i,h)).on("mouseover",MD(AD,null,a,i,h)).on("mouseout",MD(PD,null,a,i,h)),l.set(a,!0)}}),this);0}}),this),r&&this._createSelector(r,e,i,o,a)},e.prototype._createSelector=function(t,e,n,i,r){var o=this.getSelectorGroup();CD(t,(function(t){var i=t.type,r=new gs({style:{x:0,y:0,align:"center",verticalAlign:"middle"},onclick:function(){n.dispatchAction({type:"all"===i?"legendAllSelect":"legendInverseSelect"})}});o.add(r),xh(r,{normal:e.getModel("selectorLabel"),emphasis:e.getModel(["emphasis","selectorLabel"])},{defaultText:t.title}),vl(r)}))},e.prototype._createItem=function(t,e,n,i,r,o,a,s,l,u,h){var c=t.visualDrawType,p=r.get("itemWidth"),d=r.get("itemHeight"),f=r.isSelected(e),g=i.get("symbolRotate"),v=i.get("symbolKeepAspect"),y=i.get("icon"),m=function(t,e,n,i,r,o,a){function s(t,e){"auto"===t.lineWidth&&(t.lineWidth=e.lineWidth>0?2:0),CD(t,(function(n,i){"inherit"===t[i]&&(t[i]=e[i])}))}var l=e.getModel("itemStyle"),u=l.getItemStyle(),h=0===t.lastIndexOf("empty",0)?"fill":"stroke",c=l.getShallow("decal");u.decal=c&&"inherit"!==c?wv(c,a):i.decal,"inherit"===u.fill&&(u.fill=i[r]);"inherit"===u.stroke&&(u.stroke=i[h]);"inherit"===u.opacity&&(u.opacity=("fill"===r?i:n).opacity);s(u,i);var p=e.getModel("lineStyle"),d=p.getLineStyle();if(s(d,n),"auto"===u.fill&&(u.fill=i.fill),"auto"===u.stroke&&(u.stroke=i.fill),"auto"===d.stroke&&(d.stroke=i.fill),!o){var f=e.get("inactiveBorderWidth"),g=u[h];u.lineWidth="auto"===f?i.lineWidth>0&&g?2:0:u.lineWidth,u.fill=e.get("inactiveColor"),u.stroke=e.get("inactiveBorderColor"),d.stroke=p.get("inactiveColor"),d.lineWidth=p.get("inactiveWidth")}return{itemStyle:u,lineStyle:d}}(l=y||l||"roundRect",i,a,s,c,f,h),_=new ID,x=i.getModel("textStyle");if(!U(t.getLegendIcon)||y&&"inherit"!==y){var w="inherit"===y&&t.getData().getVisual("symbol")?"inherit"===g?t.getData().getVisual("symbolRotate"):g:0;_.add(function(t){var e=t.icon||"roundRect",n=jg(e,0,0,t.itemWidth,t.itemHeight,t.itemStyle.fill,t.symbolKeepAspect);n.setStyle(t.itemStyle),n.rotation=(t.iconRotate||0)*Math.PI/180,n.setOrigin([t.itemWidth/2,t.itemHeight/2]),e.indexOf("empty")>-1&&(n.style.stroke=n.style.fill,n.style.fill="#fff",n.style.lineWidth=2);return n}({itemWidth:p,itemHeight:d,icon:l,iconRotate:w,itemStyle:m.itemStyle,lineStyle:m.lineStyle,symbolKeepAspect:v}))}else _.add(t.getLegendIcon({itemWidth:p,itemHeight:d,icon:l,iconRotate:g,itemStyle:m.itemStyle,lineStyle:m.lineStyle,symbolKeepAspect:v}));var b="left"===o?p+5:-5,S=o,M=r.get("formatter"),C=e;Z(M)&&M?C=M.replace("{name}",null!=e?e:""):U(M)&&(C=M(e));var I=i.get("inactiveColor");_.add(new gs({style:bh(x,{text:C,x:b,y:d/2,fill:f?x.getTextColor():I,align:S,verticalAlign:"middle"})}));var T=new ps({shape:_.getBoundingRect(),invisible:!0}),D=i.getModel("tooltip");return D.get("show")&&fh({el:T,componentModel:r,itemName:e,itemTooltipOption:D.option}),_.add(T),_.eachChild((function(t){t.silent=!0})),T.silent=!u,this.getContentGroup().add(_),vl(_),_.__legendDataIndex=n,_},e.prototype.layoutInner=function(t,e,n,i,r,o){var a=this.getContentGroup(),s=this.getSelectorGroup();Zc(t.get("orient"),a,t.get("itemGap"),n.width,n.height);var l=a.getBoundingRect(),u=[-l.x,-l.y];if(s.markRedraw(),a.markRedraw(),r){Zc("horizontal",s,t.get("selectorItemGap",!0));var h=s.getBoundingRect(),c=[-h.x,-h.y],p=t.get("selectorButtonGap",!0),d=t.getOrient().index,f=0===d?"width":"height",g=0===d?"height":"width",v=0===d?"y":"x";"end"===o?c[d]+=l[f]+p:u[d]+=h[f]+p,c[1-d]+=l[g]/2-h[g]/2,s.x=c[0],s.y=c[1],a.x=u[0],a.y=u[1];var y={x:0,y:0};return y[f]=l[f]+p+h[f],y[g]=Math.max(l[g],h[g]),y[v]=Math.min(0,h[v]+c[1-d]),y}return a.x=u[0],a.y=u[1],this.group.getBoundingRect()},e.prototype.remove=function(){this.getContentGroup().removeAll(),this._isFirstRender=!0},e.type="legend.plain",e}(Nf);function DD(t,e,n,i){PD(t,e,n,i),n.dispatchAction({type:"legendToggleSelect",name:null!=t?t:e}),AD(t,e,n,i)}function kD(t){for(var e,n=t.getZr().storage.getDisplayList(),i=0,r=n.length;in[r],f=[-c.x,-c.y];e||(f[i]=l[s]);var g=[0,0],v=[-p.x,-p.y],y=it(t.get("pageButtonGap",!0),t.get("itemGap",!0));d&&("end"===t.get("pageButtonPosition",!0)?v[i]+=n[r]-p[r]:g[i]+=p[r]+y);v[1-i]+=c[o]/2-p[o]/2,l.setPosition(f),u.setPosition(g),h.setPosition(v);var m={x:0,y:0};if(m[r]=d?n[r]:c[r],m[o]=Math.max(c[o],p[o]),m[a]=Math.min(0,p[a]+v[1-i]),u.__rectSize=n[r],d){var _={x:0,y:0};_[r]=Math.max(n[r]-p[r]-y,0),_[o]=m[o],u.setClipPath(new ps({shape:_})),u.__rectSize=_[r]}else h.eachChild((function(t){t.attr({invisible:!0,silent:!0})}));var x=this._getPageInfo(t);return null!=x.pageIndex&&zu(l,{x:x.contentPosition[0],y:x.contentPosition[1]},d?t:null),this._updatePageInfoView(t,x),m},e.prototype._pageGo=function(t,e,n){var i=this._getPageInfo(e)[t];null!=i&&n.dispatchAction({type:"legendScroll",scrollDataIndex:i,legendId:e.id})},e.prototype._updatePageInfoView=function(t,e){var n=this._controllerGroup;E(["pagePrev","pageNext"],(function(i){var r=null!=e[i+"DataIndex"],o=n.childOfName(i);o&&(o.setStyle("fill",r?t.get("pageIconColor",!0):t.get("pageIconInactiveColor",!0)),o.cursor=r?"pointer":"default")}));var i=n.childOfName("pageText"),r=t.get("pageFormatter"),o=e.pageIndex,a=null!=o?o+1:0,s=e.pageCount;i&&r&&i.setStyle("text",Z(r)?r.replace("{current}",null==a?"":a+"").replace("{total}",null==s?"":s+""):r({current:a,total:s}))},e.prototype._getPageInfo=function(t){var e=t.get("scrollDataIndex",!0),n=this.getContentGroup(),i=this._containerGroup.__rectSize,r=t.getOrient().index,o=BD[r],a=VD[r],s=this._findTargetItemIndex(e),l=n.children(),u=l[s],h=l.length,c=h?1:0,p={contentPosition:[n.x,n.y],pageCount:c,pageIndex:c-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!u)return p;var d=m(u);p.contentPosition[r]=-d.s;for(var f=s+1,g=d,v=d,y=null;f<=h;++f)(!(y=m(l[f]))&&v.e>g.s+i||y&&!_(y,g.s))&&(g=v.i>g.i?v:y)&&(null==p.pageNextDataIndex&&(p.pageNextDataIndex=g.i),++p.pageCount),v=y;for(f=s-1,g=d,v=d,y=null;f>=-1;--f)(y=m(l[f]))&&_(v,y.s)||!(g.i=e&&t.s<=e+i}},e.prototype._findTargetItemIndex=function(t){return this._showController?(this.getContentGroup().eachChild((function(i,r){var o=i.__legendDataIndex;null==n&&null!=o&&(n=r),o===t&&(e=r)})),null!=e?e:n):0;var e,n},e.type="legend.scroll",e}(TD);function HD(t){Vy(RD),t.registerComponentModel(ND),t.registerComponentView(FD),function(t){t.registerAction("legendScroll","legendscroll",(function(t,e){var n=t.scrollDataIndex;null!=n&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},(function(t){t.setScrollDataIndex(n)}))}))}(t)}var WD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="dataZoom.inside",e.defaultOption=Uh(uC.defaultOption,{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),e}(uC),GD=function(t){function e(e){var n=t.call(this)||this;n._zr=e;var i=H(n._mousedownHandler,n),r=H(n._mousemoveHandler,n),o=H(n._mouseupHandler,n),a=H(n._mousewheelHandler,n),s=H(n._pinchHandler,n);return n.enable=function(t,n){this.disable(),this._opt=A(I(n)||{},{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),null==t&&(t=!0),!0!==t&&"move"!==t&&"pan"!==t||(e.on("mousedown",i),e.on("mousemove",r),e.on("mouseup",o)),!0!==t&&"scale"!==t&&"zoom"!==t||(e.on("mousewheel",a),e.on("pinch",s))},n.disable=function(){e.off("mousedown",i),e.off("mousemove",r),e.off("mouseup",o),e.off("mousewheel",a),e.off("pinch",s)},n}return n(e,t),e.prototype.isDragging=function(){return this._dragging},e.prototype.isPinching=function(){return this._pinching},e.prototype.setPointerChecker=function(t){this.pointerChecker=t},e.prototype.dispose=function(){this.disable()},e.prototype._mousedownHandler=function(t){if(!(re(t)||t.target&&t.target.draggable)){var e=t.offsetX,n=t.offsetY;this.pointerChecker&&this.pointerChecker(t,e,n)&&(this._x=e,this._y=n,this._dragging=!0)}},e.prototype._mousemoveHandler=function(t){if(this._dragging&&YD("moveOnMouseMove",t,this._opt)&&"pinch"!==t.gestureEvent&&!jC(this._zr,"globalPan")){var e=t.offsetX,n=t.offsetY,i=this._x,r=this._y,o=e-i,a=n-r;this._x=e,this._y=n,this._opt.preventDefaultMouseMove&&ie(t.event),ZD(this,"pan","moveOnMouseMove",t,{dx:o,dy:a,oldX:i,oldY:r,newX:e,newY:n,isAvailableBehavior:null})}},e.prototype._mouseupHandler=function(t){re(t)||(this._dragging=!1)},e.prototype._mousewheelHandler=function(t){var e=YD("zoomOnMouseWheel",t,this._opt),n=YD("moveOnMouseWheel",t,this._opt),i=t.wheelDelta,r=Math.abs(i),o=t.offsetX,a=t.offsetY;if(0!==i&&(e||n)){if(e){var s=r>3?1.4:r>1?1.2:1.1;UD(this,"zoom","zoomOnMouseWheel",t,{scale:i>0?s:1/s,originX:o,originY:a,isAvailableBehavior:null})}if(n){var l=Math.abs(i);UD(this,"scrollMove","moveOnMouseWheel",t,{scrollDelta:(i>0?1:-1)*(l>3?.4:l>1?.15:.05),originX:o,originY:a,isAvailableBehavior:null})}}},e.prototype._pinchHandler=function(t){jC(this._zr,"globalPan")||UD(this,"zoom",null,t,{scale:t.pinchScale>1?1.1:1/1.1,originX:t.pinchX,originY:t.pinchY,isAvailableBehavior:null})},e}(Wt);function UD(t,e,n,i,r){t.pointerChecker&&t.pointerChecker(i,r.originX,r.originY)&&(ie(i.event),ZD(t,e,n,i,r))}function ZD(t,e,n,i,r){r.isAvailableBehavior=H(YD,null,n,i),t.trigger(e,r)}function YD(t,e,n){var i=n[t];return!t||i&&(!Z(i)||e.event[i+"Key"])}var XD=co();function jD(t,e,n){XD(t).coordSysRecordMap.each((function(t){var i=t.dataZoomInfoMap.get(e.uid);i&&(i.getRange=n)}))}function qD(t,e){if(e){t.removeKey(e.model.uid);var n=e.controller;n&&n.dispose()}}function KD(t,e){t.isDisposed()||t.dispatchAction({type:"dataZoom",animation:{easing:"cubicOut",duration:100},batch:e})}function $D(t,e,n,i){return t.coordinateSystem.containPoint([n,i])}function QD(t){t.registerProcessor(t.PRIORITY.PROCESSOR.FILTER,(function(t,e){var n=XD(e),i=n.coordSysRecordMap||(n.coordSysRecordMap=dt());i.each((function(t){t.dataZoomInfoMap=null})),t.eachComponent({mainType:"dataZoom",subType:"inside"},(function(t){E(sC(t).infoList,(function(n){var r=n.model.uid,o=i.get(r)||i.set(r,function(t,e){var n={model:e,containsPoint:W($D,e),dispatchAction:W(KD,t),dataZoomInfoMap:null,controller:null},i=n.controller=new GD(t.getZr());return E(["pan","zoom","scrollMove"],(function(t){i.on(t,(function(e){var i=[];n.dataZoomInfoMap.each((function(r){if(e.isAvailableBehavior(r.model.option)){var o=(r.getRange||{})[t],a=o&&o(r.dzReferCoordSysInfo,n.model.mainType,n.controller,e);!r.model.get("disabled",!0)&&a&&i.push({dataZoomId:r.model.id,start:a[0],end:a[1]})}})),i.length&&n.dispatchAction(i)}))})),n}(e,n.model));(o.dataZoomInfoMap||(o.dataZoomInfoMap=dt())).set(t.uid,{dzReferCoordSysInfo:n,model:t,getRange:null})}))})),i.each((function(t){var e,n=t.controller,r=t.dataZoomInfoMap;if(r){var o=r.keys()[0];null!=o&&(e=r.get(o))}if(e){var a=function(t){var e,n="type_",i={type_true:2,type_move:1,type_false:0,type_undefined:-1},r=!0;return t.each((function(t){var o=t.model,a=!o.get("disabled",!0)&&(!o.get("zoomLock",!0)||"move");i[n+a]>i[n+e]&&(e=a),r=r&&o.get("preventDefaultMouseMove",!0)})),{controlType:e,opt:{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!0,preventDefaultMouseMove:!!r}}}(r);n.enable(a.controlType,a.opt),n.setPointerChecker(t.containsPoint),qf(t,"dispatchAction",e.model.get("throttle",!0),"fixRate")}else qD(i,t)}))}))}var JD=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="dataZoom.inside",e}return n(e,t),e.prototype.render=function(e,n,i){t.prototype.render.apply(this,arguments),e.noTarget()?this._clear():(this.range=e.getPercentRange(),jD(i,e,{pan:H(tk.pan,this),zoom:H(tk.zoom,this),scrollMove:H(tk.scrollMove,this)}))},e.prototype.dispose=function(){this._clear(),t.prototype.dispose.apply(this,arguments)},e.prototype._clear=function(){!function(t,e){for(var n=XD(t).coordSysRecordMap,i=n.keys(),r=0;r0?s.pixelStart+s.pixelLength-s.pixel:s.pixel-s.pixelStart)/s.pixelLength*(o[1]-o[0])+o[0],u=Math.max(1/i.scale,0);o[0]=(o[0]-l)*u+l,o[1]=(o[1]-l)*u+l;var h=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();return fC(0,o,[0,100],0,h.minSpan,h.maxSpan),this.range=o,r[0]!==o[0]||r[1]!==o[1]?o:void 0}},pan:ek((function(t,e,n,i,r,o){var a=nk[i]([o.oldX,o.oldY],[o.newX,o.newY],e,r,n);return a.signal*(t[1]-t[0])*a.pixel/a.pixelLength})),scrollMove:ek((function(t,e,n,i,r,o){return nk[i]([0,0],[o.scrollDelta,o.scrollDelta],e,r,n).signal*(t[1]-t[0])*o.scrollDelta}))};function ek(t){return function(e,n,i,r){var o=this.range,a=o.slice(),s=e.axisModels[0];if(s)return fC(t(a,s,e,n,i,r),a,[0,100],"all"),this.range=a,o[0]!==a[0]||o[1]!==a[1]?a:void 0}}var nk={grid:function(t,e,n,i,r){var o=n.axis,a={},s=r.model.coordinateSystem.getRect();return t=t||[0,0],"x"===o.dim?(a.pixel=e[0]-t[0],a.pixelLength=s.width,a.pixelStart=s.x,a.signal=o.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=s.height,a.pixelStart=s.y,a.signal=o.inverse?-1:1),a},polar:function(t,e,n,i,r){var o=n.axis,a={},s=r.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),"radiusAxis"===n.mainType?(a.pixel=e[0]-t[0],a.pixelLength=l[1]-l[0],a.pixelStart=l[0],a.signal=o.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=u[1]-u[0],a.pixelStart=u[0],a.signal=o.inverse?-1:1),a},singleAxis:function(t,e,n,i,r){var o=n.axis,a=r.model.coordinateSystem.getRect(),s={};return t=t||[0,0],"horizontal"===o.orient?(s.pixel=e[0]-t[0],s.pixelLength=a.width,s.pixelStart=a.x,s.signal=o.inverse?1:-1):(s.pixel=e[1]-t[1],s.pixelLength=a.height,s.pixelStart=a.y,s.signal=o.inverse?-1:1),s}};function ik(t){bC(t),t.registerComponentModel(WD),t.registerComponentView(JD),QD(t)}var rk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="dataZoom.slider",e.layoutMode="box",e.defaultOption=Uh(uC.defaultOption,{show:!0,right:"ph",top:"ph",width:"ph",height:"ph",left:null,bottom:null,borderColor:"#d2dbee",borderRadius:3,backgroundColor:"rgba(47,69,84,0)",dataBackground:{lineStyle:{color:"#d2dbee",width:.5},areaStyle:{color:"#d2dbee",opacity:.2}},selectedDataBackground:{lineStyle:{color:"#8fb0f7",width:.5},areaStyle:{color:"#8fb0f7",opacity:.2}},fillerColor:"rgba(135,175,274,0.2)",handleIcon:"path://M-9.35,34.56V42m0-40V9.5m-2,0h4a2,2,0,0,1,2,2v21a2,2,0,0,1-2,2h-4a2,2,0,0,1-2-2v-21A2,2,0,0,1-11.35,9.5Z",handleSize:"100%",handleStyle:{color:"#fff",borderColor:"#ACB8D1"},moveHandleSize:7,moveHandleIcon:"path://M-320.9-50L-320.9-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-348-41-339-50-320.9-50z M-212.3-50L-212.3-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-239.4-41-230.4-50-212.3-50z M-103.7-50L-103.7-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-130.9-41-121.8-50-103.7-50z",moveHandleStyle:{color:"#D2DBEE",opacity:.7},showDetail:!0,showDataShadow:"auto",realtime:!0,zoomLock:!1,textStyle:{color:"#6E7079"},brushSelect:!0,brushStyle:{color:"rgba(135,175,274,0.15)"},emphasis:{handleStyle:{borderColor:"#8FB0F7"},moveHandleStyle:{color:"#8FB0F7"}}}),e}(uC),ok=ps,ak="horizontal",sk="vertical",lk=["line","bar","candlestick","scatter"],uk={easing:"cubicOut",duration:100,delay:0},hk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._displayables={},n}return n(e,t),e.prototype.init=function(t,e){this.api=e,this._onBrush=H(this._onBrush,this),this._onBrushEnd=H(this._onBrushEnd,this)},e.prototype.render=function(e,n,i,r){if(t.prototype.render.apply(this,arguments),qf(this,"_dispatchZoomAction",e.get("throttle"),"fixRate"),this._orient=e.getOrient(),!1!==e.get("show")){if(e.noTarget())return this._clear(),void this.group.removeAll();r&&"dataZoom"===r.type&&r.from===this.uid||this._buildView(),this._updateView()}else this.group.removeAll()},e.prototype.dispose=function(){this._clear(),t.prototype.dispose.apply(this,arguments)},e.prototype._clear=function(){Kf(this,"_dispatchZoomAction");var t=this.api.getZr();t.off("mousemove",this._onBrush),t.off("mouseup",this._onBrushEnd)},e.prototype._buildView=function(){var t=this.group;t.removeAll(),this._brushing=!1,this._displayables.brushRect=null,this._resetLocation(),this._resetInterval();var e=this._displayables.sliderGroup=new _r;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(e),this._positionGroup()},e.prototype._resetLocation=function(){var t=this.dataZoomModel,e=this.api,n=t.get("brushSelect")?7:0,i=this._findCoordRect(),r={width:e.getWidth(),height:e.getHeight()},o=this._orient===ak?{right:r.width-i.x-i.width,top:r.height-30-7-n,width:i.width,height:30}:{right:7,top:i.y,width:30,height:i.height},a=Kc(t.option);E(["right","top","width","height"],(function(t){"ph"===a[t]&&(a[t]=o[t])}));var s=Yc(a,r);this._location={x:s.x,y:s.y},this._size=[s.width,s.height],this._orient===sk&&this._size.reverse()},e.prototype._positionGroup=function(){var t=this.group,e=this._location,n=this._orient,i=this.dataZoomModel.getFirstTargetAxisModel(),r=i&&i.get("inverse"),o=this._displayables.sliderGroup,a=(this._dataShadowInfo||{}).otherAxisInverse;o.attr(n!==ak||r?n===ak&&r?{scaleY:a?1:-1,scaleX:-1}:n!==sk||r?{scaleY:a?-1:1,scaleX:-1,rotation:Math.PI/2}:{scaleY:a?-1:1,scaleX:1,rotation:Math.PI/2}:{scaleY:a?1:-1,scaleX:1});var s=t.getBoundingRect([o]);t.x=e.x-s.x,t.y=e.y-s.y,t.markRedraw()},e.prototype._getViewExtent=function(){return[0,this._size[0]]},e.prototype._renderBackground=function(){var t=this.dataZoomModel,e=this._size,n=this._displayables.sliderGroup,i=t.get("brushSelect");n.add(new ok({silent:!0,shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:t.get("backgroundColor")},z2:-40}));var r=new ok({shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:"transparent"},z2:0,onclick:H(this._onClickPanel,this)}),o=this.api.getZr();i?(r.on("mousedown",this._onBrushStart,this),r.cursor="crosshair",o.on("mousemove",this._onBrush),o.on("mouseup",this._onBrushEnd)):(o.off("mousemove",this._onBrush),o.off("mouseup",this._onBrushEnd)),n.add(r)},e.prototype._renderDataShadow=function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(this._displayables.dataShadowSegs=[],t){var e=this._size,n=this._shadowSize||[],i=t.series,r=i.getRawData(),o=i.getShadowDim?i.getShadowDim():t.otherDim;if(null!=o){var a=this._shadowPolygonPts,s=this._shadowPolylinePts;if(r!==this._shadowData||o!==this._shadowDim||e[0]!==n[0]||e[1]!==n[1]){var l=r.getDataExtent(o),u=.3*(l[1]-l[0]);l=[l[0]-u,l[1]+u];var h,c=[0,e[1]],p=[0,e[0]],d=[[e[0],0],[0,0]],f=[],g=p[1]/(r.count()-1),v=0,y=Math.round(r.count()/e[0]);r.each([o],(function(t,e){if(y>0&&e%y)v+=g;else{var n=null==t||isNaN(t)||""===t,i=n?0:Tr(t,l,c,!0);n&&!h&&e?(d.push([d[d.length-1][0],0]),f.push([f[f.length-1][0],0])):!n&&h&&(d.push([v,0]),f.push([v,0])),d.push([v,i]),f.push([v,i]),v+=g,h=n}})),a=this._shadowPolygonPts=d,s=this._shadowPolylinePts=f}this._shadowData=r,this._shadowDim=o,this._shadowSize=[e[0],e[1]];for(var m=this.dataZoomModel,_=0;_<3;_++){var x=w(1===_);this._displayables.sliderGroup.add(x),this._displayables.dataShadowSegs.push(x)}}}function w(t){var e=m.getModel(t?"selectedDataBackground":"dataBackground"),n=new _r,i=new cu({shape:{points:a},segmentIgnoreThreshold:1,style:e.getModel("areaStyle").getAreaStyle(),silent:!0,z2:-20}),r=new du({shape:{points:s},segmentIgnoreThreshold:1,style:e.getModel("lineStyle").getLineStyle(),silent:!0,z2:-19});return n.add(i),n.add(r),n}},e.prototype._prepareDataShadowInfo=function(){var t=this.dataZoomModel,e=t.get("showDataShadow");if(!1!==e){var n,i=this.ecModel;return t.eachTargetAxis((function(r,o){E(t.getAxisProxy(r,o).getTargetSeriesModels(),(function(t){if(!(n||!0!==e&&L(lk,t.get("type"))<0)){var a,s=i.getComponent(oC(r),o).axis,l={x:"y",y:"x",radius:"angle",angle:"radius"}[r],u=t.coordinateSystem;null!=l&&u.getOtherAxis&&(a=u.getOtherAxis(s).inverse),l=t.getData().mapDimension(l),n={thisAxis:s,series:t,thisDim:r,otherDim:l,otherAxisInverse:a}}}),this)}),this),n}},e.prototype._renderHandle=function(){var t=this.group,e=this._displayables,n=e.handles=[null,null],i=e.handleLabels=[null,null],r=this._displayables.sliderGroup,o=this._size,a=this.dataZoomModel,s=this.api,l=a.get("borderRadius")||0,u=a.get("brushSelect"),h=e.filler=new ok({silent:u,style:{fill:a.get("fillerColor")},textConfig:{position:"inside"}});r.add(h),r.add(new ok({silent:!0,subPixelOptimize:!0,shape:{x:0,y:0,width:o[0],height:o[1],r:l},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:1,fill:"rgba(0,0,0,0)"}})),E([0,1],(function(e){var o=a.get("handleIcon");!Zg[o]&&o.indexOf("path://")<0&&o.indexOf("image://")<0&&(o="path://"+o);var s=jg(o,-1,0,2,2,null,!0);s.attr({cursor:ck(this._orient),draggable:!0,drift:H(this._onDragMove,this,e),ondragend:H(this._onDragEnd,this),onmouseover:H(this._showDataInfo,this,!0),onmouseout:H(this._showDataInfo,this,!1),z2:5});var l=s.getBoundingRect(),u=a.get("handleSize");this._handleHeight=Dr(u,this._size[1]),this._handleWidth=l.width/l.height*this._handleHeight,s.setStyle(a.getModel("handleStyle").getItemStyle()),s.style.strokeNoScale=!0,s.rectHover=!0,s.ensureState("emphasis").style=a.getModel(["emphasis","handleStyle"]).getItemStyle(),vl(s);var h=a.get("handleColor");null!=h&&(s.style.fill=h),r.add(n[e]=s);var c=a.getModel("textStyle");t.add(i[e]=new gs({silent:!0,invisible:!0,style:bh(c,{x:0,y:0,text:"",verticalAlign:"middle",align:"center",fill:c.getTextColor(),font:c.getFont()}),z2:10}))}),this);var c=h;if(u){var p=Dr(a.get("moveHandleSize"),o[1]),d=e.moveHandle=new ps({style:a.getModel("moveHandleStyle").getItemStyle(),silent:!0,shape:{r:[0,0,2,2],y:o[1]-.5,height:p}}),f=.8*p,g=e.moveHandleIcon=jg(a.get("moveHandleIcon"),-f/2,-f/2,f,f,"#fff",!0);g.silent=!0,g.y=o[1]+p/2-.5,d.ensureState("emphasis").style=a.getModel(["emphasis","moveHandleStyle"]).getItemStyle();var v=Math.min(o[1]/2,Math.max(p,10));(c=e.moveZone=new ps({invisible:!0,shape:{y:o[1]-v,height:p+v}})).on("mouseover",(function(){s.enterEmphasis(d)})).on("mouseout",(function(){s.leaveEmphasis(d)})),r.add(d),r.add(g),r.add(c)}c.attr({draggable:!0,cursor:ck(this._orient),drift:H(this._onDragMove,this,"all"),ondragstart:H(this._showDataInfo,this,!0),ondragend:H(this._onDragEnd,this),onmouseover:H(this._showDataInfo,this,!0),onmouseout:H(this._showDataInfo,this,!1)})},e.prototype._resetInterval=function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[Tr(t[0],[0,100],e,!0),Tr(t[1],[0,100],e,!0)]},e.prototype._updateInterval=function(t,e){var n=this.dataZoomModel,i=this._handleEnds,r=this._getViewExtent(),o=n.findRepresentativeAxisProxy().getMinMaxSpan(),a=[0,100];fC(e,i,r,n.get("zoomLock")?"all":t,null!=o.minSpan?Tr(o.minSpan,a,r,!0):null,null!=o.maxSpan?Tr(o.maxSpan,a,r,!0):null);var s=this._range,l=this._range=Ar([Tr(i[0],r,a,!0),Tr(i[1],r,a,!0)]);return!s||s[0]!==l[0]||s[1]!==l[1]},e.prototype._updateView=function(t){var e=this._displayables,n=this._handleEnds,i=Ar(n.slice()),r=this._size;E([0,1],(function(t){var i=e.handles[t],o=this._handleHeight;i.attr({scaleX:o/2,scaleY:o/2,x:n[t]+(t?-1:1),y:r[1]/2-o/2})}),this),e.filler.setShape({x:i[0],y:0,width:i[1]-i[0],height:r[1]});var o={x:i[0],width:i[1]-i[0]};e.moveHandle&&(e.moveHandle.setShape(o),e.moveZone.setShape(o),e.moveZone.getBoundingRect(),e.moveHandleIcon&&e.moveHandleIcon.attr("x",o.x+o.width/2));for(var a=e.dataShadowSegs,s=[0,i[0],i[1],r[0]],l=0;le[0]||n[1]<0||n[1]>e[1])){var i=this._handleEnds,r=(i[0]+i[1])/2,o=this._updateInterval("all",n[0]-r);this._updateView(),o&&this._dispatchZoomAction(!1)}},e.prototype._onBrushStart=function(t){var e=t.offsetX,n=t.offsetY;this._brushStart=new Ui(e,n),this._brushing=!0,this._brushStartTime=+new Date},e.prototype._onBrushEnd=function(t){if(this._brushing){var e=this._displayables.brushRect;if(this._brushing=!1,e){e.attr("ignore",!0);var n=e.shape;if(!(+new Date-this._brushStartTime<200&&Math.abs(n.width)<5)){var i=this._getViewExtent(),r=[0,100];this._range=Ar([Tr(n.x,i,r,!0),Tr(n.x+n.width,i,r,!0)]),this._handleEnds=[n.x,n.x+n.width],this._updateView(),this._dispatchZoomAction(!1)}}}},e.prototype._onBrush=function(t){this._brushing&&(ie(t.event),this._updateBrushRect(t.offsetX,t.offsetY))},e.prototype._updateBrushRect=function(t,e){var n=this._displayables,i=this.dataZoomModel,r=n.brushRect;r||(r=n.brushRect=new ok({silent:!0,style:i.getModel("brushStyle").getItemStyle()}),n.sliderGroup.add(r)),r.attr("ignore",!1);var o=this._brushStart,a=this._displayables.sliderGroup,s=a.transformCoordToLocal(t,e),l=a.transformCoordToLocal(o.x,o.y),u=this._size;s[0]=Math.max(Math.min(u[0],s[0]),0),r.setShape({x:l[0],y:0,width:s[0]-l[0],height:u[1]})},e.prototype._dispatchZoomAction=function(t){var e=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,animation:t?uk:null,start:e[0],end:e[1]})},e.prototype._findCoordRect=function(){var t,e=sC(this.dataZoomModel).infoList;if(!t&&e.length){var n=e[0].model.coordinateSystem;t=n.getRect&&n.getRect()}if(!t){var i=this.api.getWidth(),r=this.api.getHeight();t={x:.2*i,y:.2*r,width:.6*i,height:.6*r}}return t},e.type="dataZoom.slider",e}(pC);function ck(t){return"vertical"===t?"ns-resize":"ew-resize"}function pk(t){t.registerComponentModel(rk),t.registerComponentView(hk),bC(t)}var dk={label:{enabled:!0},decal:{show:!1}},fk=co(),gk={};function vk(t,e){var n=t.getModel("aria");if(n.get("enabled")){var i=I(dk);T(i.label,t.getLocaleModel().get("aria"),!1),T(n.option,i,!1),function(){if(n.getModel("decal").get("show")){var e=dt();t.eachSeries((function(t){if(!t.isColorBySeries()){var n=e.get(t.type);n||(n={},e.set(t.type,n)),fk(t).scope=n}})),t.eachRawSeries((function(e){if(!t.isSeriesFiltered(e))if(U(e.enableAriaDecal))e.enableAriaDecal();else{var n=e.getData();if(e.isColorBySeries()){var i=Dp(e.ecModel,e.name,gk,t.getSeriesCount()),r=n.getVisual("decal");n.setVisual("decal",u(r,i))}else{var o=e.getRawData(),a={},s=fk(e).scope;n.each((function(t){var e=n.getRawIndex(t);a[e]=t}));var l=o.count();o.each((function(t){var i=a[t],r=o.getName(t)||t+"",h=Dp(e.ecModel,r,s,l),c=n.getItemVisual(i,"decal");n.setItemVisual(i,"decal",u(c,h))}))}}function u(t,e){var n=t?k(k({},e),t):e;return n.dirty=!0,n}}))}}(),function(){var i=t.getLocaleModel().get("aria"),o=n.getModel("label");if(o.option=A(o.option,i),!o.get("enabled"))return;var a=e.getZr().dom;if(o.get("description"))return void a.setAttribute("aria-label",o.get("description"));var s,l=t.getSeriesCount(),u=o.get(["data","maxCount"])||10,h=o.get(["series","maxCount"])||10,c=Math.min(l,h);if(l<1)return;var p=function(){var e=t.get("title");e&&e.length&&(e=e[0]);return e&&e.text}();if(p){var d=o.get(["general","withTitle"]);s=r(d,{title:p})}else s=o.get(["general","withoutTitle"]);var f=[],g=l>1?o.get(["series","multiple","prefix"]):o.get(["series","single","prefix"]);s+=r(g,{seriesCount:l}),t.eachSeries((function(e,n){if(n1?o.get(["series","multiple",a]):o.get(["series","single",a]),{seriesId:e.seriesIndex,seriesName:e.get("name"),seriesType:(_=e.subType,t.getLocaleModel().get(["series","typeNames"])[_]||"č‡Ē厚䚉回")});var s=e.getData();if(s.count()>u)i+=r(o.get(["data","partialData"]),{displayCnt:u});else i+=o.get(["data","allData"]);for(var h=o.get(["data","separator","middle"]),p=o.get(["data","separator","end"]),d=[],g=0;g0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},t.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},t.prototype.wakeUp=function(){this._disposed||(this.animation.start(),this._stillFrameAccum=0)},t.prototype.refreshHover=function(){this._needsRefreshHover=!0},t.prototype.refreshHoverImmediately=function(){this._disposed||(this._needsRefreshHover=!1,this.painter.refreshHover&&"canvas"===this.painter.getType()&&this.painter.refreshHover())},t.prototype.resize=function(t){this._disposed||(t=t||{},this.painter.resize(t.width,t.height),this.handler.resize())},t.prototype.clearAnimation=function(){this._disposed||this.animation.clear()},t.prototype.getWidth=function(){if(!this._disposed)return this.painter.getWidth()},t.prototype.getHeight=function(){if(!this._disposed)return this.painter.getHeight()},t.prototype.setCursorStyle=function(t){this._disposed||this.handler.setCursorStyle(t)},t.prototype.findHover=function(t,e){if(!this._disposed)return this.handler.findHover(t,e)},t.prototype.on=function(t,e,n){return this._disposed||this.handler.on(t,e,n),this},t.prototype.off=function(t,e){this._disposed||this.handler.off(t,e)},t.prototype.trigger=function(t,e){this._disposed||this.handler.trigger(t,e)},t.prototype.clear=function(){if(!this._disposed){for(var t=this.storage.getRoots(),e=0;e0){if(t<=r)return a;if(t>=o)return s}else{if(t>=r)return a;if(t<=o)return s}else{if(t===r)return a;if(t===o)return s}return(t-r)/l*u+a}function Gr(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return Z(t)?(n=t,n.replace(/^\s+|\s+$/g,"")).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t;var n}function Ur(t,e,n){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),n?t:+t}function Zr(t){return t.sort((function(t,e){return t-e})),t}function Yr(t){if(t=+t,isNaN(t))return 0;if(t>1e-14)for(var e=1,n=0;n<15;n++,e*=10)if(Math.round(t*e)/e===t)return n;return Xr(t)}function Xr(t){var e=t.toString().toLowerCase(),n=e.indexOf("e"),i=n>0?+e.slice(n+1):0,r=n>0?n:e.length,o=e.indexOf("."),a=o<0?0:r-1-o;return Math.max(0,a-i)}function jr(t,e){var n=Math.log,i=Math.LN10,r=Math.floor(n(t[1]-t[0])/i),o=Math.round(n(Math.abs(e[1]-e[0]))/i),a=Math.min(Math.max(-r+o,0),20);return isFinite(a)?a:20}function qr(t,e){var n=B(t,(function(t,e){return t+(isNaN(e)?0:e)}),0);if(0===n)return[];for(var i=Math.pow(10,e),r=E(t,(function(t){return(isNaN(t)?0:t)/n*i*100})),o=100*i,a=E(r,(function(t){return Math.floor(t)})),s=B(a,(function(t,e){return t+e}),0),l=E(r,(function(t,e){return t-a[e]}));su&&(u=l[c],h=c);++a[h],l[h]=0,++s}return E(a,(function(t){return t/i}))}function Kr(t,e){var n=Math.max(Yr(t),Yr(e)),i=t+e;return n>20?i:Ur(i,n)}function $r(t){var e=2*Math.PI;return(t%e+e)%e}function Qr(t){return t>-1e-4&&t=10&&e++,e}function io(t,e){var n=no(t),i=Math.pow(10,n),r=t/i;return t=(e?r<1.5?1:r<2.5?2:r<4?3:r<7?5:10:r<1?1:r<2?2:r<3?3:r<5?5:10)*i,n>=-20?+t.toFixed(n<0?-n:0):t}function ro(t){var e=parseFloat(t);return e==t&&(0!==e||!Z(t)||t.indexOf("x")<=0)?e:NaN}function oo(t){return!isNaN(ro(t))}function ao(){return Math.round(9*Math.random())}function so(t,e){return 0===e?t:so(e,t%e)}function lo(t,e){return null==t?e:null==e?t:t*e/so(t,e)}"undefined"!=typeof console&&console.warn&&console.log;function uo(t){0}function ho(t){throw new Error(t)}function co(t,e,n){return(e-t)*n+t}var po="series\0",fo="\0_ec_\0";function go(t){return t instanceof Array?t:null==t?[]:[t]}function vo(t,e,n){if(t){t[e]=t[e]||{},t.emphasis=t.emphasis||{},t.emphasis[e]=t.emphasis[e]||{};for(var i=0,r=n.length;i=0||r&&L(r,s)<0)){var l=n.getShallow(s,e);null!=l&&(o[t[a][0]]=l)}}return o}}var Zo=Uo([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]]),Yo=function(){function t(){}return t.prototype.getAreaStyle=function(t,e){return Zo(this,t,e)},t}(),Xo=new kn(50);function jo(t){if("string"==typeof t){var e=Xo.get(t);return e&&e.image}return t}function qo(t,e,n,i,r){if(t){if("string"==typeof t){if(e&&e.__zrImageSrc===t||!n)return e;var o=Xo.get(t),a={hostEl:n,cb:i,cbPayload:r};return o?!$o(e=o.image)&&o.pending.push(a):((e=h.loadImage(t,Ko,Ko)).__zrImageSrc=t,Xo.put(t,e.__cachedImgObj={image:e,pending:[a]})),e}return t}return e}function Ko(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;e=a;l++)s-=a;var u=dr(n,e);return u>s&&(n="",u=0),s=t-u,r.ellipsis=n,r.ellipsisWidth=u,r.contentWidth=s,r.containerWidth=t,r}function ea(t,e){var n=e.containerWidth,i=e.font,r=e.contentWidth;if(!n)return"";var o=dr(t,i);if(o<=n)return t;for(var a=0;;a++){if(o<=r||a>=e.maxIterations){t+=e.ellipsis;break}var s=0===a?na(t,r,e.ascCharWidth,e.cnCharWidth):o>0?Math.floor(t.length*r/o):0;o=dr(t=t.substr(0,s),i)}return""===t&&(t=e.placeholder),t}function na(t,e,n,i){for(var r=0,o=0,a=t.length;o0&&f+i.accumWidth>i.width&&(o=e.split("\n"),c=!0),i.accumWidth=f}else{var g=ua(e,h,i.width,i.breakAll,i.accumWidth);i.accumWidth=g.accumWidth+d,a=g.linesWidths,o=g.lines}}else o=e.split("\n");for(var v=0;v=32&&e<=591||e>=880&&e<=4351||e>=4608&&e<=5119||e>=7680&&e<=8303}(t)||!!sa[t]}function ua(t,e,n,i,r){for(var o=[],a=[],s="",l="",u=0,h=0,c=0;cn:r+h+d>n)?h?(s||l)&&(f?(s||(s=l,l="",h=u=0),o.push(s),a.push(h-u),l+=p,s="",h=u+=d):(l&&(s+=l,l="",u=0),o.push(s),a.push(h),s=p,h=d)):f?(o.push(l),a.push(u),l=p,u=d):(o.push(p),a.push(d)):(h+=d,f?(l+=p,u+=d):(l&&(s+=l,l="",u=0),s+=p))}else l&&(s+=l,h+=u),o.push(s),a.push(h),s="",l="",u=0,h=0}return o.length||s||(s=t,l="",u=0),l&&(s+=l),s&&(o.push(s),a.push(h)),1===o.length&&(h+=r),{accumWidth:h,lines:o,linesWidths:a}}var ha="__zr_style_"+Math.round(10*Math.random()),ca={shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"#000",opacity:1,blend:"source-over"},pa={style:{shadowBlur:!0,shadowOffsetX:!0,shadowOffsetY:!0,shadowColor:!0,opacity:!0}};ca[ha]=!0;var da=["z","z2","invisible"],fa=["invisible"],ga=function(t){function e(e){return t.call(this,e)||this}var i;return n(e,t),e.prototype._init=function(e){for(var n=F(e),i=0;i1e-4)return s[0]=t-n,s[1]=e-i,l[0]=t+n,void(l[1]=e+i);if(Sa[0]=wa(r)*n+t,Sa[1]=xa(r)*i+e,Ma[0]=wa(o)*n+t,Ma[1]=xa(o)*i+e,u(s,Sa,Ma),h(l,Sa,Ma),(r%=ba)<0&&(r+=ba),(o%=ba)<0&&(o+=ba),r>o&&!a?o+=ba:rr&&(Ca[0]=wa(d)*n+t,Ca[1]=xa(d)*i+e,u(s,Ca,s),h(l,Ca,l))}var La={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},Oa=[],Ra=[],Na=[],za=[],Ea=[],Ba=[],Va=Math.min,Fa=Math.max,Ha=Math.cos,Wa=Math.sin,Ga=Math.abs,Ua=Math.PI,Za=2*Ua,Ya="undefined"!=typeof Float32Array,Xa=[];function ja(t){return Math.round(t/Ua*1e8)/1e8%2*Ua}function qa(t,e){var n=ja(t[0]);n<0&&(n+=Za);var i=n-t[0],r=t[1];r+=i,!e&&r-n>=Za?r=n+Za:e&&n-r>=Za?r=n-Za:!e&&n>r?r=n+(Za-ja(n-r)):e&&n0&&(this._ux=Ga(n/Ji/t)||0,this._uy=Ga(n/Ji/e)||0)},t.prototype.setDPR=function(t){this.dpr=t},t.prototype.setContext=function(t){this._ctx=t},t.prototype.getContext=function(){return this._ctx},t.prototype.beginPath=function(){return this._ctx&&this._ctx.beginPath(),this.reset(),this},t.prototype.reset=function(){this._saveData&&(this._len=0),this._pathSegLen&&(this._pathSegLen=null,this._pathLen=0),this._version++},t.prototype.moveTo=function(t,e){return this._drawPendingPt(),this.addData(La.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},t.prototype.lineTo=function(t,e){var n=Ga(t-this._xi),i=Ga(e-this._yi),r=n>this._ux||i>this._uy;if(this.addData(La.L,t,e),this._ctx&&r&&this._ctx.lineTo(t,e),r)this._xi=t,this._yi=e,this._pendingPtDist=0;else{var o=n*n+i*i;o>this._pendingPtDist&&(this._pendingPtX=t,this._pendingPtY=e,this._pendingPtDist=o)}return this},t.prototype.bezierCurveTo=function(t,e,n,i,r,o){return this._drawPendingPt(),this.addData(La.C,t,e,n,i,r,o),this._ctx&&this._ctx.bezierCurveTo(t,e,n,i,r,o),this._xi=r,this._yi=o,this},t.prototype.quadraticCurveTo=function(t,e,n,i){return this._drawPendingPt(),this.addData(La.Q,t,e,n,i),this._ctx&&this._ctx.quadraticCurveTo(t,e,n,i),this._xi=n,this._yi=i,this},t.prototype.arc=function(t,e,n,i,r,o){this._drawPendingPt(),Xa[0]=i,Xa[1]=r,qa(Xa,o),i=Xa[0];var a=(r=Xa[1])-i;return this.addData(La.A,t,e,n,n,i,a,0,o?0:1),this._ctx&&this._ctx.arc(t,e,n,i,r,o),this._xi=Ha(r)*n+t,this._yi=Wa(r)*n+e,this},t.prototype.arcTo=function(t,e,n,i,r){return this._drawPendingPt(),this._ctx&&this._ctx.arcTo(t,e,n,i,r),this},t.prototype.rect=function(t,e,n,i){return this._drawPendingPt(),this._ctx&&this._ctx.rect(t,e,n,i),this.addData(La.R,t,e,n,i),this},t.prototype.closePath=function(){this._drawPendingPt(),this.addData(La.Z);var t=this._ctx,e=this._x0,n=this._y0;return t&&t.closePath(),this._xi=e,this._yi=n,this},t.prototype.fill=function(t){t&&t.fill(),this.toStatic()},t.prototype.stroke=function(t){t&&t.stroke(),this.toStatic()},t.prototype.len=function(){return this._len},t.prototype.setData=function(t){var e=t.length;this.data&&this.data.length===e||!Ya||(this.data=new Float32Array(e));for(var n=0;nu.length&&(this._expandData(),u=this.data);for(var h=0;h0&&(this._ctx&&this._ctx.lineTo(this._pendingPtX,this._pendingPtY),this._pendingPtDist=0)},t.prototype._expandData=function(){if(!(this.data instanceof Array)){for(var t=[],e=0;e11&&(this.data=new Float32Array(t)))}},t.prototype.getBoundingRect=function(){Na[0]=Na[1]=Ea[0]=Ea[1]=Number.MAX_VALUE,za[0]=za[1]=Ba[0]=Ba[1]=-Number.MAX_VALUE;var t,e=this.data,n=0,i=0,r=0,o=0;for(t=0;tn||Ga(v)>i||c===e-1)&&(f=Math.sqrt(k*k+v*v),r=g,o=_);break;case La.C:var y=t[c++],m=t[c++],_=(g=t[c++],t[c++]),x=t[c++],w=t[c++];f=mn(r,o,y,m,g,_,x,w,10),r=x,o=w;break;case La.Q:f=Sn(r,o,y=t[c++],m=t[c++],g=t[c++],_=t[c++],10),r=g,o=_;break;case La.A:var b=t[c++],S=t[c++],M=t[c++],C=t[c++],T=t[c++],I=t[c++],D=I+T;c+=1,d&&(a=Ha(T)*M+b,s=Wa(T)*C+S),f=Fa(M,C)*Va(Za,Math.abs(I)),r=Ha(D)*M+b,o=Wa(D)*C+S;break;case La.R:a=r=t[c++],s=o=t[c++],f=2*t[c++]+2*t[c++];break;case La.Z:var k=a-r;v=s-o;f=Math.sqrt(k*k+v*v),r=a,o=s}f>=0&&(l[h++]=f,u+=f)}return this._pathLen=u,u},t.prototype.rebuildPath=function(t,e){var n,i,r,o,a,s,l,u,h,c,p=this.data,d=this._ux,f=this._uy,g=this._len,v=e<1,y=0,m=0,_=0;if(!v||(this._pathSegLen||this._calculateLength(),l=this._pathSegLen,u=e*this._pathLen))t:for(var x=0;x0&&(t.lineTo(h,c),_=0),w){case La.M:n=r=p[x++],i=o=p[x++],t.moveTo(r,o);break;case La.L:a=p[x++],s=p[x++];var S=Ga(a-r),M=Ga(s-o);if(S>d||M>f){if(v){if(y+(j=l[m++])>u){var C=(u-y)/j;t.lineTo(r*(1-C)+a*C,o*(1-C)+s*C);break t}y+=j}t.lineTo(a,s),r=a,o=s,_=0}else{var T=S*S+M*M;T>_&&(h=a,c=s,_=T)}break;case La.C:var I=p[x++],D=p[x++],k=p[x++],A=p[x++],P=p[x++],L=p[x++];if(v){if(y+(j=l[m++])>u){yn(r,I,k,P,C=(u-y)/j,Oa),yn(o,D,A,L,C,Ra),t.bezierCurveTo(Oa[1],Ra[1],Oa[2],Ra[2],Oa[3],Ra[3]);break t}y+=j}t.bezierCurveTo(I,D,k,A,P,L),r=P,o=L;break;case La.Q:I=p[x++],D=p[x++],k=p[x++],A=p[x++];if(v){if(y+(j=l[m++])>u){bn(r,I,k,C=(u-y)/j,Oa),bn(o,D,A,C,Ra),t.quadraticCurveTo(Oa[1],Ra[1],Oa[2],Ra[2]);break t}y+=j}t.quadraticCurveTo(I,D,k,A),r=k,o=A;break;case La.A:var O=p[x++],R=p[x++],N=p[x++],z=p[x++],E=p[x++],B=p[x++],V=p[x++],F=!p[x++],H=N>z?N:z,W=Ga(N-z)>.001,G=E+B,U=!1;if(v)y+(j=l[m++])>u&&(G=E+B*(u-y)/j,U=!0),y+=j;if(W&&t.ellipse?t.ellipse(O,R,N,z,V,E,G,F):t.arc(O,R,H,E,G,F),U)break t;b&&(n=Ha(E)*N+O,i=Wa(E)*z+R),r=Ha(G)*N+O,o=Wa(G)*z+R;break;case La.R:n=r=p[x],i=o=p[x+1],a=p[x++],s=p[x++];var Z=p[x++],Y=p[x++];if(v){if(y+(j=l[m++])>u){var X=u-y;t.moveTo(a,s),t.lineTo(a+Va(X,Z),s),(X-=Z)>0&&t.lineTo(a+Z,s+Va(X,Y)),(X-=Y)>0&&t.lineTo(a+Fa(Z-X,0),s+Y),(X-=Z)>0&&t.lineTo(a,s+Fa(Y-X,0));break t}y+=j}t.rect(a,s,Z,Y);break;case La.Z:if(v){var j;if(y+(j=l[m++])>u){C=(u-y)/j;t.lineTo(r*(1-C)+n*C,o*(1-C)+i*C);break t}y+=j}t.closePath(),r=n,o=i}}},t.prototype.clone=function(){var e=new t,n=this.data;return e.data=n.slice?n.slice():Array.prototype.slice.call(n),e._len=this._len,e},t.CMD=La,t.initDefaultProps=function(){var e=t.prototype;e._saveData=!0,e._ux=0,e._uy=0,e._pendingPtDist=0,e._version=0}(),t}();function $a(t,e,n,i,r,o,a){if(0===r)return!1;var s=r,l=0;if(a>e+s&&a>i+s||at+s&&o>n+s||oe+c&&h>i+c&&h>o+c&&h>s+c||ht+c&&u>n+c&&u>r+c&&u>a+c||u=0&&fe+u&&l>i+u&&l>o+u||lt+u&&s>n+u&&s>r+u||s=0&&vn||h+ur&&(r+=ns);var p=Math.atan2(l,s);return p<0&&(p+=ns),p>=i&&p<=r||p+ns>=i&&p+ns<=r}function rs(t,e,n,i,r,o){if(o>e&&o>i||or?s:0}var os=Ka.CMD,as=2*Math.PI;var ss=[-1,-1,-1],ls=[-1,-1];function us(t,e,n,i,r,o,a,s,l,u){if(u>e&&u>i&&u>o&&u>s||u1&&(h=void 0,h=ls[0],ls[0]=ls[1],ls[1]=h),f=dn(e,i,o,s,ls[0]),d>1&&(g=dn(e,i,o,s,ls[1]))),2===d?ye&&s>i&&s>o||s=0&&h<=1&&(r[l++]=h);else{var u=a*a-4*o*s;if(cn(u))(h=-a/(2*o))>=0&&h<=1&&(r[l++]=h);else if(u>0){var h,c=nn(u),p=(-a-c)/(2*o);(h=(-a+c)/(2*o))>=0&&h<=1&&(r[l++]=h),p>=0&&p<=1&&(r[l++]=p)}}return l}(e,i,o,s,ss);if(0===l)return 0;var u=wn(e,i,o);if(u>=0&&u<=1){for(var h=0,c=_n(e,i,o,u),p=0;pn||s<-n)return 0;var l=Math.sqrt(n*n-s*s);ss[0]=-l,ss[1]=l;var u=Math.abs(i-r);if(u<1e-4)return 0;if(u>=as-1e-4){i=0,r=as;var h=o?1:-1;return a>=ss[0]+t&&a<=ss[1]+t?h:0}if(i>r){var c=i;i=r,r=c}i<0&&(i+=as,r+=as);for(var p=0,d=0;d<2;d++){var f=ss[d];if(f+t>a){var g=Math.atan2(s,f);h=o?1:-1;g<0&&(g=as+g),(g>=i&&g<=r||g+as>=i&&g+as<=r)&&(g>Math.PI/2&&g<1.5*Math.PI&&(h=-h),p+=h)}}return p}function ps(t,e,n,i,r){for(var o,a,s,l,u=t.data,h=t.len(),c=0,p=0,d=0,f=0,g=0,v=0;v1&&(n||(c+=rs(p,d,f,g,i,r))),m&&(f=p=u[v],g=d=u[v+1]),y){case os.M:p=f=u[v++],d=g=u[v++];break;case os.L:if(n){if($a(p,d,u[v],u[v+1],e,i,r))return!0}else c+=rs(p,d,u[v],u[v+1],i,r)||0;p=u[v++],d=u[v++];break;case os.C:if(n){if(Qa(p,d,u[v++],u[v++],u[v++],u[v++],u[v],u[v+1],e,i,r))return!0}else c+=us(p,d,u[v++],u[v++],u[v++],u[v++],u[v],u[v+1],i,r)||0;p=u[v++],d=u[v++];break;case os.Q:if(n){if(Ja(p,d,u[v++],u[v++],u[v],u[v+1],e,i,r))return!0}else c+=hs(p,d,u[v++],u[v++],u[v],u[v+1],i,r)||0;p=u[v++],d=u[v++];break;case os.A:var _=u[v++],x=u[v++],w=u[v++],b=u[v++],S=u[v++],M=u[v++];v+=1;var C=!!(1-u[v++]);o=Math.cos(S)*w+_,a=Math.sin(S)*b+x,m?(f=o,g=a):c+=rs(p,d,o,a,i,r);var T=(i-_)*b/w+_;if(n){if(is(_,x,b,S,S+M,C,e,T,r))return!0}else c+=cs(_,x,b,S,S+M,C,T,r);p=Math.cos(S+M)*w+_,d=Math.sin(S+M)*b+x;break;case os.R:if(f=p=u[v++],g=d=u[v++],o=f+u[v++],a=g+u[v++],n){if($a(f,g,o,g,e,i,r)||$a(o,g,o,a,e,i,r)||$a(o,a,f,a,e,i,r)||$a(f,a,f,g,e,i,r))return!0}else c+=rs(o,g,o,a,i,r),c+=rs(f,a,f,g,i,r);break;case os.Z:if(n){if($a(p,d,f,g,e,i,r))return!0}else c+=rs(p,d,f,g,i,r);p=f,d=g}}return n||(s=d,l=g,Math.abs(s-l)<1e-4)||(c+=rs(p,d,f,g,i,r)||0),0!==c}var ds=A({fill:"#000",stroke:null,strokePercent:1,fillOpacity:1,strokeOpacity:1,lineDashOffset:0,lineWidth:1,lineCap:"butt",miterLimit:10,strokeNoScale:!1,strokeFirst:!1},ca),fs={style:A({fill:!0,stroke:!0,strokePercent:!0,fillOpacity:!0,strokeOpacity:!0,lineDashOffset:!0,lineWidth:!0,miterLimit:!0},pa.style)},gs=hr.concat(["invisible","culling","z","z2","zlevel","parent"]),vs=function(t){function e(e){return t.call(this,e)||this}var i;return n(e,t),e.prototype.update=function(){var n=this;t.prototype.update.call(this);var i=this.style;if(i.decal){var r=this._decalEl=this._decalEl||new e;r.buildPath===e.prototype.buildPath&&(r.buildPath=function(t){n.buildPath(t,n.shape)}),r.silent=!0;var o=r.style;for(var a in i)o[a]!==i[a]&&(o[a]=i[a]);o.fill=i.fill?i.decal:null,o.decal=null,o.shadowColor=null,i.strokeFirst&&(o.stroke=null);for(var s=0;s.5?tr:e>.2?"#eee":er}if(t)return er}return tr},e.prototype.getInsideTextStroke=function(t){var e=this.style.fill;if(Z(e)){var n=this.__zr;if(!(!n||!n.isDarkMode())===$n(t,0)<.4)return e}},e.prototype.buildPath=function(t,e,n){},e.prototype.pathUpdated=function(){this.__dirty&=-5},e.prototype.getUpdatedPathProxy=function(t){return!this.path&&this.createPathProxy(),this.path.beginPath(),this.buildPath(this.path,this.shape,t),this.path},e.prototype.createPathProxy=function(){this.path=new Ka(!1)},e.prototype.hasStroke=function(){var t=this.style,e=t.stroke;return!(null==e||"none"===e||!(t.lineWidth>0))},e.prototype.hasFill=function(){var t=this.style.fill;return null!=t&&"none"!==t},e.prototype.getBoundingRect=function(){var t=this._rect,e=this.style,n=!t;if(n){var i=!1;this.path||(i=!0,this.createPathProxy());var r=this.path;(i||4&this.__dirty)&&(r.beginPath(),this.buildPath(r,this.shape,!1),this.pathUpdated()),t=r.getBoundingRect()}if(this._rect=t,this.hasStroke()&&this.path&&this.path.len()>0){var o=this._rectStroke||(this._rectStroke=t.clone());if(this.__dirty||n){o.copy(t);var a=e.strokeNoScale?this.getLineScale():1,s=e.lineWidth;if(!this.hasFill()){var l=this.strokeContainThreshold;s=Math.max(s,null==l?4:l)}a>1e-10&&(o.width+=s/a,o.height+=s/a,o.x-=s/a/2,o.y-=s/a/2)}return o}return t},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect(),r=this.style;if(t=n[0],e=n[1],i.contain(t,e)){var o=this.path;if(this.hasStroke()){var a=r.lineWidth,s=r.strokeNoScale?this.getLineScale():1;if(s>1e-10&&(this.hasFill()||(a=Math.max(a,this.strokeContainThreshold)),function(t,e,n,i){return ps(t,e,!0,n,i)}(o,a/s,t,e)))return!0}if(this.hasFill())return function(t,e,n){return ps(t,0,!1,e,n)}(o,t,e)}return!1},e.prototype.dirtyShape=function(){this.__dirty|=4,this._rect&&(this._rect=null),this._decalEl&&this._decalEl.dirtyShape(),this.markRedraw()},e.prototype.dirty=function(){this.dirtyStyle(),this.dirtyShape()},e.prototype.animateShape=function(t){return this.animate("shape",t)},e.prototype.updateDuringAnimation=function(t){"style"===t?this.dirtyStyle():"shape"===t?this.dirtyShape():this.markRedraw()},e.prototype.attrKV=function(e,n){"shape"===e?this.setShape(n):t.prototype.attrKV.call(this,e,n)},e.prototype.setShape=function(t,e){var n=this.shape;return n||(n=this.shape={}),"string"==typeof t?n[t]=e:k(n,t),this.dirtyShape(),this},e.prototype.shapeChanged=function(){return!!(4&this.__dirty)},e.prototype.createStyle=function(t){return yt(ds,t)},e.prototype._innerSaveToNormal=function(e){t.prototype._innerSaveToNormal.call(this,e);var n=this._normalState;e.shape&&!n.shape&&(n.shape=k({},this.shape))},e.prototype._applyStateObj=function(e,n,i,r,o,a){t.prototype._applyStateObj.call(this,e,n,i,r,o,a);var s,l=!(n&&r);if(n&&n.shape?o?r?s=n.shape:(s=k({},i.shape),k(s,n.shape)):(s=k({},r?this.shape:i.shape),k(s,n.shape)):l&&(s=i.shape),s)if(o){this.shape=k({},this.shape);for(var u={},h=F(s),c=0;c0},e.prototype.hasFill=function(){var t=this.style.fill;return null!=t&&"none"!==t},e.prototype.createStyle=function(t){return yt(ys,t)},e.prototype.setBoundingRect=function(t){this._rect=t},e.prototype.getBoundingRect=function(){var t=this.style;if(!this._rect){var e=t.text;null!=e?e+="":e="";var n=gr(e,t.font,t.textAlign,t.textBaseline);if(n.x+=t.x||0,n.y+=t.y||0,this.hasStroke()){var i=t.lineWidth;n.x-=i/2,n.y-=i/2,n.width+=i,n.height+=i}this._rect=n}return this._rect},e.initDefaultProps=void(e.prototype.dirtyRectTolerance=10),e}(ga);ms.prototype.type="tspan";var _s=A({x:0,y:0},ca),xs={style:A({x:!0,y:!0,width:!0,height:!0,sx:!0,sy:!0,sWidth:!0,sHeight:!0},pa.style)};var ws=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.createStyle=function(t){return yt(_s,t)},e.prototype._getSize=function(t){var e=this.style,n=e[t];if(null!=n)return n;var i,r=(i=e.image)&&"string"!=typeof i&&i.width&&i.height?e.image:this.__image;if(!r)return 0;var o="width"===t?"height":"width",a=e[o];return null==a?r[t]:r[t]/r[o]*a},e.prototype.getWidth=function(){return this._getSize("width")},e.prototype.getHeight=function(){return this._getSize("height")},e.prototype.getAnimationStyleProps=function(){return xs},e.prototype.getBoundingRect=function(){var t=this.style;return this._rect||(this._rect=new Le(t.x||0,t.y||0,this.getWidth(),this.getHeight())),this._rect},e}(ga);ws.prototype.type="image";var bs=Math.round;function Ss(t,e,n){if(e){var i=e.x1,r=e.x2,o=e.y1,a=e.y2;t.x1=i,t.x2=r,t.y1=o,t.y2=a;var s=n&&n.lineWidth;return s?(bs(2*i)===bs(2*r)&&(t.x1=t.x2=Cs(i,s,!0)),bs(2*o)===bs(2*a)&&(t.y1=t.y2=Cs(o,s,!0)),t):t}}function Ms(t,e,n){if(e){var i=e.x,r=e.y,o=e.width,a=e.height;t.x=i,t.y=r,t.width=o,t.height=a;var s=n&&n.lineWidth;return s?(t.x=Cs(i,s,!0),t.y=Cs(r,s,!0),t.width=Math.max(Cs(i+o,s,!1)-t.x,0===o?0:1),t.height=Math.max(Cs(r+a,s,!1)-t.y,0===a?0:1),t):t}}function Cs(t,e,n){if(!e)return t;var i=bs(2*t);return(i+bs(e))%2==0?i/2:(i+(n?1:-1))/2}var Ts=function(){this.x=0,this.y=0,this.width=0,this.height=0},Is={},Ds=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new Ts},e.prototype.buildPath=function(t,e){var n,i,r,o;if(this.subPixelOptimize){var a=Ms(Is,e,this.style);n=a.x,i=a.y,r=a.width,o=a.height,a.r=e.r,e=a}else n=e.x,i=e.y,r=e.width,o=e.height;e.r?function(t,e){var n,i,r,o,a,s=e.x,l=e.y,u=e.width,h=e.height,c=e.r;u<0&&(s+=u,u=-u),h<0&&(l+=h,h=-h),"number"==typeof c?n=i=r=o=c:c instanceof Array?1===c.length?n=i=r=o=c[0]:2===c.length?(n=r=c[0],i=o=c[1]):3===c.length?(n=c[0],i=o=c[1],r=c[2]):(n=c[0],i=c[1],r=c[2],o=c[3]):n=i=r=o=0,n+i>u&&(n*=u/(a=n+i),i*=u/a),r+o>u&&(r*=u/(a=r+o),o*=u/a),i+r>h&&(i*=h/(a=i+r),r*=h/a),n+o>h&&(n*=h/(a=n+o),o*=h/a),t.moveTo(s+n,l),t.lineTo(s+u-i,l),0!==i&&t.arc(s+u-i,l+i,i,-Math.PI/2,0),t.lineTo(s+u,l+h-r),0!==r&&t.arc(s+u-r,l+h-r,r,0,Math.PI/2),t.lineTo(s+o,l+h),0!==o&&t.arc(s+o,l+h-o,o,Math.PI/2,Math.PI),t.lineTo(s,l+n),0!==n&&t.arc(s+n,l+n,n,Math.PI,1.5*Math.PI)}(t,e):t.rect(n,i,r,o)},e.prototype.isZeroArea=function(){return!this.shape.width||!this.shape.height},e}(vs);Ds.prototype.type="rect";var ks={fill:"#000"},As={style:A({fill:!0,stroke:!0,fillOpacity:!0,strokeOpacity:!0,lineWidth:!0,fontSize:!0,lineHeight:!0,width:!0,height:!0,textShadowColor:!0,textShadowBlur:!0,textShadowOffsetX:!0,textShadowOffsetY:!0,backgroundColor:!0,padding:!0,borderColor:!0,borderWidth:!0,borderRadius:!0},pa.style)},Ps=function(t){function e(e){var n=t.call(this)||this;return n.type="text",n._children=[],n._defaultStyle=ks,n.attr(e),n}return n(e,t),e.prototype.childrenRef=function(){return this._children},e.prototype.update=function(){t.prototype.update.call(this),this.styleChanged()&&this._updateSubTexts();for(var e=0;ed&&h){var f=Math.floor(d/l);n=n.slice(0,f)}if(t&&a&&null!=c)for(var g=ta(c,o,e.ellipsis,{minChar:e.truncateMinChar,placeholder:e.placeholder}),v=0;v0,T=null!=t.width&&("truncate"===t.overflow||"break"===t.overflow||"breakAll"===t.overflow),I=i.calculatedLineHeight,D=0;Dl&&aa(n,t.substring(l,u),e,s),aa(n,i[2],e,s,i[1]),l=Qo.lastIndex}lo){w>0?(m.tokens=m.tokens.slice(0,w),v(m,x,_),n.lines=n.lines.slice(0,y+1)):n.lines=n.lines.slice(0,y);break t}var I=b.width,D=null==I||"auto"===I;if("string"==typeof I&&"%"===I.charAt(I.length-1))L.percentWidth=I,h.push(L),L.contentWidth=dr(L.text,C);else{if(D){var k=b.backgroundColor,A=k&&k.image;A&&$o(A=jo(A))&&(L.width=Math.max(L.width,A.width*T/A.height))}var P=f&&null!=r?r-x:null;null!=P&&P=0&&"right"===(I=_[T]).align;)this._placeToken(I,t,w,f,C,"right",v),b-=I.width,C-=I.width,T--;for(M+=(n-(M-d)-(g-C)-b)/2;S<=T;)I=_[S],this._placeToken(I,t,w,f,M+I.width/2,"center",v),M+=I.width,S++;f+=w}},e.prototype._placeToken=function(t,e,n,i,r,o,s){var l=e.rich[t.styleName]||{};l.text=t.text;var u=t.verticalAlign,h=i+n/2;"top"===u?h=i+t.height/2:"bottom"===u&&(h=i+n-t.height/2),!t.isLineHolder&&Gs(l)&&this._renderBackground(l,e,"right"===o?r-t.width:"center"===o?r-t.width/2:r,h-t.height/2,t.width,t.height);var c=!!l.backgroundColor,p=t.textPadding;p&&(r=Hs(r,o,p),h-=t.height/2-p[0]-t.innerHeight/2);var d=this._getOrCreateChild(ms),f=d.createStyle();d.useStyle(f);var g=this._defaultStyle,v=!1,y=0,m=Fs("fill"in l?l.fill:"fill"in e?e.fill:(v=!0,g.fill)),_=Vs("stroke"in l?l.stroke:"stroke"in e?e.stroke:c||s||g.autoStroke&&!v?null:(y=2,g.stroke)),x=l.textShadowBlur>0||e.textShadowBlur>0;f.text=t.text,f.x=r,f.y=h,x&&(f.shadowBlur=l.textShadowBlur||e.textShadowBlur||0,f.shadowColor=l.textShadowColor||e.textShadowColor||"transparent",f.shadowOffsetX=l.textShadowOffsetX||e.textShadowOffsetX||0,f.shadowOffsetY=l.textShadowOffsetY||e.textShadowOffsetY||0),f.textAlign=o,f.textBaseline="middle",f.font=t.font||a,f.opacity=rt(l.opacity,e.opacity,1),zs(f,l),_&&(f.lineWidth=rt(l.lineWidth,e.lineWidth,y),f.lineDash=it(l.lineDash,e.lineDash),f.lineDashOffset=e.lineDashOffset||0,f.stroke=_),m&&(f.fill=m);var w=t.contentWidth,b=t.contentHeight;d.setBoundingRect(new Le(vr(f.x,w,f.textAlign),yr(f.y,b,f.textBaseline),w,b))},e.prototype._renderBackground=function(t,e,n,i,r,o){var a,s,l,u=t.backgroundColor,h=t.borderWidth,c=t.borderColor,p=u&&u.image,d=u&&!p,f=t.borderRadius,g=this;if(d||t.lineHeight||h&&c){(a=this._getOrCreateChild(Ds)).useStyle(a.createStyle()),a.style.fill=null;var v=a.shape;v.x=n,v.y=i,v.width=r,v.height=o,v.r=f,a.dirtyShape()}if(d)(l=a.style).fill=u||null,l.fillOpacity=it(t.fillOpacity,1);else if(p){(s=this._getOrCreateChild(ws)).onload=function(){g.dirtyStyle()};var y=s.style;y.image=u.image,y.x=n,y.y=i,y.width=r,y.height=o}h&&c&&((l=a.style).lineWidth=h,l.stroke=c,l.strokeOpacity=it(t.strokeOpacity,1),l.lineDash=t.borderDash,l.lineDashOffset=t.borderDashOffset||0,a.strokeContainThreshold=0,a.hasFill()&&a.hasStroke()&&(l.strokeFirst=!0,l.lineWidth*=2));var m=(a||s).style;m.shadowBlur=t.shadowBlur||0,m.shadowColor=t.shadowColor||"transparent",m.shadowOffsetX=t.shadowOffsetX||0,m.shadowOffsetY=t.shadowOffsetY||0,m.opacity=rt(t.opacity,e.opacity,1)},e.makeFont=function(t){var e="";return Es(t)&&(e=[t.fontStyle,t.fontWeight,Ns(t.fontSize),t.fontFamily||"sans-serif"].join(" ")),e&<(e)||t.textFont||t.font},e}(ga),Ls={left:!0,right:1,center:1},Os={top:1,bottom:1,middle:1},Rs=["fontStyle","fontWeight","fontSize","fontFamily"];function Ns(t){return"string"!=typeof t||-1===t.indexOf("px")&&-1===t.indexOf("rem")&&-1===t.indexOf("em")?isNaN(+t)?"12px":t+"px":t}function zs(t,e){for(var n=0;n=0,o=!1;if(t instanceof vs){var a=Xs(t),s=r&&a.selectFill||a.normalFill,l=r&&a.selectStroke||a.normalStroke;if(nl(s)||nl(l)){var u=(i=i||{}).style||{};"inherit"===u.fill?(o=!0,i=k({},i),(u=k({},u)).fill=s):!nl(u.fill)&&nl(s)?(o=!0,i=k({},i),(u=k({},u)).fill=Jn(s)):!nl(u.stroke)&&nl(l)&&(o||(i=k({},i),u=k({},u)),u.stroke=Jn(l)),i.style=u}}if(i&&null==i.z2){o||(i=k({},i));var h=t.z2EmphasisLift;i.z2=t.z2+(null!=h?h:10)}return i}(this,0,e,n);if("blur"===t)return function(t,e,n){var i=L(t.currentStates,e)>=0,r=t.style.opacity,o=i?null:function(t,e,n,i){for(var r=t.style,o={},a=0;a0){var o={dataIndex:r,seriesIndex:t.seriesIndex};null!=i&&(o.dataType=i),e.push(o)}}))})),e}function Al(t,e,n){Nl(t,!0),cl(t,fl),function(t,e,n){var i=Us(t);null!=e?(i.focus=e,i.blurScope=n):i.focus&&(i.focus=null)}(t,e,n)}function Pl(t,e,n,i){i?function(t){Nl(t,!1)}(t):Al(t,e,n)}var Ll=["emphasis","blur","select"],Ol={itemStyle:"getItemStyle",lineStyle:"getLineStyle",areaStyle:"getAreaStyle"};function Rl(t,e,n,i){n=n||"itemStyle";for(var r=0;r1&&(a*=Gl(f),s*=Gl(f));var g=(r===o?-1:1)*Gl((a*a*(s*s)-a*a*(d*d)-s*s*(p*p))/(a*a*(d*d)+s*s*(p*p)))||0,v=g*a*d/s,y=g*-s*p/a,m=(t+n)/2+Zl(c)*v-Ul(c)*y,_=(e+i)/2+Ul(c)*v+Zl(c)*y,x=ql([1,0],[(p-v)/a,(d-y)/s]),w=[(p-v)/a,(d-y)/s],b=[(-1*p-v)/a,(-1*d-y)/s],S=ql(w,b);if(jl(w,b)<=-1&&(S=Yl),jl(w,b)>=1&&(S=0),S<0){var M=Math.round(S/Yl*1e6)/1e6;S=2*Yl+M%2*Yl}h.addData(u,m,_,a,s,x,S,c,o)}var $l=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi,Ql=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;var Jl=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.applyTransform=function(t){},e}(vs);function tu(t){return null!=t.setData}function eu(t,e){var n=function(t){var e=new Ka;if(!t)return e;var n,i=0,r=0,o=i,a=r,s=Ka.CMD,l=t.match($l);if(!l)return e;for(var u=0;uA*A+P*P&&(M=T,C=I),{cx:M,cy:C,x0:-h,y0:-c,x1:M*(r/w-1),y1:C*(r/w-1)}}function mu(t,e){var n,i=fu(e.r,0),r=fu(e.r0||0,0),o=i>0;if(o||r>0){if(o||(i=r,r=0),r>i){var a=i;i=r,r=a}var s=e.startAngle,l=e.endAngle;if(!isNaN(s)&&!isNaN(l)){var u=e.cx,h=e.cy,c=!!e.clockwise,p=pu(l-s),d=p>su&&p%su;if(d>vu&&(p=d),i>vu)if(p>su-vu)t.moveTo(u+i*uu(s),h+i*lu(s)),t.arc(u,h,i,s,l,!c),r>vu&&(t.moveTo(u+r*uu(l),h+r*lu(l)),t.arc(u,h,r,l,s,c));else{var f=void 0,g=void 0,v=void 0,y=void 0,m=void 0,_=void 0,x=void 0,w=void 0,b=void 0,S=void 0,M=void 0,C=void 0,T=void 0,I=void 0,D=void 0,k=void 0,A=i*uu(s),P=i*lu(s),L=r*uu(l),O=r*lu(l),R=p>vu;if(R){var N=e.cornerRadius;N&&(n=function(t){var e;if(G(t)){var n=t.length;if(!n)return t;e=1===n?[t[0],t[0],0,0]:2===n?[t[0],t[0],t[1],t[1]]:3===n?t.concat(t[2]):t}else e=[t,t,t,t];return e}(N),f=n[0],g=n[1],v=n[2],y=n[3]);var z=pu(i-r)/2;if(m=gu(z,v),_=gu(z,y),x=gu(z,f),w=gu(z,g),M=b=fu(m,_),C=S=fu(x,w),(b>vu||S>vu)&&(T=i*uu(l),I=i*lu(l),D=r*uu(s),k=r*lu(s),pvu){var Z=gu(v,M),Y=gu(y,M),X=yu(D,k,A,P,i,Z,c),j=yu(T,I,L,O,i,Y,c);t.moveTo(u+X.cx+X.x0,h+X.cy+X.y0),M0&&t.arc(u+X.cx,h+X.cy,Z,cu(X.y0,X.x0),cu(X.y1,X.x1),!c),t.arc(u,h,i,cu(X.cy+X.y1,X.cx+X.x1),cu(j.cy+j.y1,j.cx+j.x1),!c),Y>0&&t.arc(u+j.cx,h+j.cy,Y,cu(j.y1,j.x1),cu(j.y0,j.x0),!c))}else t.moveTo(u+A,h+P),t.arc(u,h,i,s,l,!c);else t.moveTo(u+A,h+P);if(r>vu&&R)if(C>vu){Z=gu(f,C),X=yu(L,O,T,I,r,-(Y=gu(g,C)),c),j=yu(A,P,D,k,r,-Z,c);t.lineTo(u+X.cx+X.x0,h+X.cy+X.y0),C0&&t.arc(u+X.cx,h+X.cy,Y,cu(X.y0,X.x0),cu(X.y1,X.x1),!c),t.arc(u,h,r,cu(X.cy+X.y1,X.cx+X.x1),cu(j.cy+j.y1,j.cx+j.x1),c),Z>0&&t.arc(u+j.cx,h+j.cy,Z,cu(j.y1,j.x1),cu(j.y0,j.x0),!c))}else t.lineTo(u+L,h+O),t.arc(u,h,r,l,s,c);else t.lineTo(u+L,h+O)}else t.moveTo(u,h);t.closePath()}}}var _u=function(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=2*Math.PI,this.clockwise=!0,this.cornerRadius=0},xu=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new _u},e.prototype.buildPath=function(t,e){mu(t,e)},e.prototype.isZeroArea=function(){return this.shape.startAngle===this.shape.endAngle||this.shape.r===this.shape.r0},e}(vs);xu.prototype.type="sector";var wu=function(){this.cx=0,this.cy=0,this.r=0,this.r0=0},bu=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new wu},e.prototype.buildPath=function(t,e){var n=e.cx,i=e.cy,r=2*Math.PI;t.moveTo(n+e.r,i),t.arc(n,i,e.r,0,r,!1),t.moveTo(n+e.r0,i),t.arc(n,i,e.r0,0,r,!0)},e}(vs);function Su(t,e,n){var i=e.smooth,r=e.points;if(r&&r.length>=2){if(i){var o=function(t,e,n,i){var r,o,a,s,l=[],u=[],h=[],c=[];if(i){a=[1/0,1/0],s=[-1/0,-1/0];for(var p=0,d=t.length;pWu[1]){if(a=!1,r)return a;var u=Math.abs(Wu[0]-Hu[1]),h=Math.abs(Hu[0]-Wu[1]);Math.min(u,h)>i.len()&&(u0){var c={duration:h.duration,delay:h.delay||0,easing:h.easing,done:o,force:!!o||!!a,setToFinal:!u,scope:t,during:a};l?e.animateFrom(n,c):e.animateTo(n,c)}else e.stopAnimation(),!l&&e.attr(n),a&&a(1),o&&o()}function $u(t,e,n,i,r,o){Ku("update",t,e,n,i,r,o)}function Qu(t,e,n,i,r,o){Ku("enter",t,e,n,i,r,o)}function Ju(t){if(!t.__zr)return!0;for(var e=0;eMath.abs(o[1])?o[0]>0?"right":"left":o[1]>0?"bottom":"top"}function bh(t){return!t.isGroup}function Sh(t,e,n){if(t&&e){var i,r=(i={},t.traverse((function(t){bh(t)&&t.anid&&(i[t.anid]=t)})),i);e.traverse((function(t){if(bh(t)&&t.anid){var e=r[t.anid];if(e){var i=o(t);t.attr(o(e)),$u(t,i,n,Us(t).dataIndex)}}}))}function o(t){var e={x:t.x,y:t.y,rotation:t.rotation};return function(t){return null!=t.shape}(t)&&(e.shape=k({},t.shape)),e}}function Mh(t,e){return E(t,(function(t){var n=t[0];n=rh(n,e.x),n=oh(n,e.x+e.width);var i=t[1];return i=rh(i,e.y),[n,i=oh(i,e.y+e.height)]}))}function Ch(t,e){var n=rh(t.x,e.x),i=oh(t.x+t.width,e.x+e.width),r=rh(t.y,e.y),o=oh(t.y+t.height,e.y+e.height);if(i>=n&&o>=r)return{x:n,y:r,width:i-n,height:o-r}}function Th(t,e,n){var i=k({rectHover:!0},e),r=i.style={strokeNoScale:!0};if(n=n||{x:-1,y:-1,width:2,height:2},t)return 0===t.indexOf("image://")?(r.image=t.slice(8),A(r,n),new ws(i)):ph(t.replace("path://",""),i,n,"center")}function Ih(t,e,n,i,r,o,a,s){var l,u=n-t,h=i-e,c=a-r,p=s-o,d=Dh(c,p,u,h);if((l=d)<=1e-6&&l>=-1e-6)return!1;var f=t-r,g=e-o,v=Dh(f,g,u,h)/d;if(v<0||v>1)return!1;var y=Dh(f,g,c,p)/d;return!(y<0||y>1)}function Dh(t,e,n,i){return t*i-n*e}function kh(t){var e=t.itemTooltipOption,n=t.componentModel,i=t.itemName,r=Z(e)?{formatter:e}:e,o=n.mainType,a=n.componentIndex,s={componentType:o,name:i,$vars:["name"]};s[o+"Index"]=a;var l=t.formatterParamsExtra;l&&z(F(l),(function(t){_t(s,t)||(s[t]=l[t],s.$vars.push(t))}));var u=Us(t.el);u.componentMainType=o,u.componentIndex=a,u.tooltipConfig={name:i,option:A({content:i,encodeHTMLContent:!0,formatterParams:s},r)}}function Ah(t,e){var n;t.isGroup&&(n=e(t)),n||t.traverse(e)}function Ph(t,e){if(t)if(G(t))for(var n=0;n-1?sc:uc;function dc(t,e){t=t.toUpperCase(),cc[t]=new ic(e),hc[t]=e}dc(lc,{time:{month:["January","February","March","April","May","June","July","August","September","October","November","December"],monthAbbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayOfWeekAbbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},legend:{selector:{all:"All",inverse:"Inv"}},toolbox:{brush:{title:{rect:"Box Select",polygon:"Lasso Select",lineX:"Horizontally Select",lineY:"Vertically Select",keep:"Keep Selections",clear:"Clear Selections"}},dataView:{title:"Data View",lang:["Data View","Close","Refresh"]},dataZoom:{title:{zoom:"Zoom",back:"Zoom Reset"}},magicType:{title:{line:"Switch to Line Chart",bar:"Switch to Bar Chart",stack:"Stack",tiled:"Tile"}},restore:{title:"Restore"},saveAsImage:{title:"Save as Image",lang:["Right Click to Save Image"]}},series:{typeNames:{pie:"Pie chart",bar:"Bar chart",line:"Line chart",scatter:"Scatter plot",effectScatter:"Ripple scatter plot",radar:"Radar chart",tree:"Tree",treemap:"Treemap",boxplot:"Boxplot",candlestick:"Candlestick",k:"K line chart",heatmap:"Heat map",map:"Map",parallel:"Parallel coordinate map",lines:"Line graph",graph:"Relationship graph",sankey:"Sankey diagram",funnel:"Funnel chart",gauge:"Gauge",pictorialBar:"Pictorial bar",themeRiver:"Theme River Map",sunburst:"Sunburst",custom:"Custom chart",chart:"Chart"}},aria:{general:{withTitle:'This is a chart about "{title}"',withoutTitle:"This is a chart"},series:{single:{prefix:"",withName:" with type {seriesType} named {seriesName}.",withoutName:" with type {seriesType}."},multiple:{prefix:". It consists of {seriesCount} series count.",withName:" The {seriesId} series is a {seriesType} representing {seriesName}.",withoutName:" The {seriesId} series is a {seriesType}.",separator:{middle:"",end:""}}},data:{allData:"The data is as follows: ",partialData:"The first {displayCnt} items are: ",withName:"the data for {name} is {value}",withoutName:"{value}",separator:{middle:", ",end:". "}}}}),dc(sc,{time:{month:["一月","ä猿œˆ","三月","四月","ä甿œˆ","六月","七月","å…Ģ月","䚝月","十月","十一月","十ä猿œˆ"],monthAbbr:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeek:["星期æ—Ĩ","星期一","星期äēŒ","星期三","星期四","星期äē”","星期六"],dayOfWeekAbbr:["æ—Ĩ","一","äēŒ","三","四","äē”","六"]},legend:{selector:{all:"全选",inverse:"反选"}},toolbox:{brush:{title:{rect:"įŸŠåŊĸ选拊",polygon:"圈选",lineX:"æ¨Ē向选拊",lineY:"įēĩ向选拊",keep:"äŋæŒé€‰æ‹Š",clear:"清除选拊"}},dataView:{title:"æ•°æŽč§†å›ž",lang:["æ•°æŽč§†å›ž","å…ŗé—­","åˆˇæ–°"]},dataZoom:{title:{zoom:"åŒē域įŧŠæ”ž",back:"åŒē域įŧŠæ”žčŋ˜åŽŸ"}},magicType:{title:{line:"切æĸä¸ē折įēŋ回",bar:"切æĸä¸ēæŸąįŠļ回",stack:"切æĸä¸ē堆叠",tiled:"切æĸä¸ēåšŗé“ē"}},restore:{title:"čŋ˜åŽŸ"},saveAsImage:{title:"äŋå­˜ä¸ēå›žį‰‡",lang:["åŗé”ŽåĻ存ä¸ēå›žį‰‡"]}},series:{typeNames:{pie:"éĨŧ回",bar:"æŸąįŠļ回",line:"折įēŋ回",scatter:"æ•Ŗį‚šå›ž",effectScatter:"æļŸæŧĒæ•Ŗį‚šå›ž",radar:"é›ˇčžžå›ž",tree:"树回",treemap:"įŸŠåŊĸ树回",boxplot:"įŽąåž‹å›ž",candlestick:"Kįēŋ回",k:"Kįēŋ回",heatmap:"įƒ­åŠ›å›ž",map:"地回",parallel:"åšŗčĄŒåæ ‡å›ž",lines:"įēŋ回",graph:"å…ŗįŗģ回",sankey:"æĄ‘åŸē回",funnel:"æŧæ–—回",gauge:"äģĒčĄ¨į›˜å›ž",pictorialBar:"蹥åŊĸæŸąå›ž",themeRiver:"ä¸ģéĸ˜æ˛ŗæĩå›ž",sunburst:"旭æ—Ĩ回",custom:"č‡ĒåŽšäš‰å›žčĄ¨",chart:"å›žčĄ¨"}},aria:{general:{withTitle:"čŋ™æ˜¯ä¸€ä¸Ēå…ŗäēŽâ€œ{title}â€įš„å›žčĄ¨ã€‚",withoutTitle:"čŋ™æ˜¯ä¸€ä¸Ēå›žčĄ¨īŧŒ"},series:{single:{prefix:"",withName:"å›žčĄ¨įąģ型是{seriesType}īŧŒčĄ¨į¤ē{seriesName}。",withoutName:"å›žčĄ¨įąģ型是{seriesType}。"},multiple:{prefix:"åŽƒį”ą{seriesCount}ä¸Ēå›žčĄ¨įŗģ列į섿ˆã€‚",withName:"įŦŦ{seriesId}ä¸Ēįŗģ列是一ä¸Ē襨į¤ē{seriesName}įš„{seriesType}īŧŒ",withoutName:"įŦŦ{seriesId}ä¸Ēįŗģ列是一ä¸Ē{seriesType}īŧŒ",separator:{middle:"īŧ›",end:"。"}}},data:{allData:"å…ļ数捎是——",partialData:"å…ļ中īŧŒå‰{displayCnt}éĄšæ˜¯â€”â€”",withName:"{name}įš„æ•°æŽæ˜¯{value}",withoutName:"{value}",separator:{middle:"īŧŒ",end:""}}}});var fc=1e3,gc=6e4,vc=36e5,yc=864e5,mc=31536e6,_c={year:"{yyyy}",month:"{MMM}",day:"{d}",hour:"{HH}:{mm}",minute:"{HH}:{mm}",second:"{HH}:{mm}:{ss}",millisecond:"{HH}:{mm}:{ss} {SSS}",none:"{yyyy}-{MM}-{dd} {HH}:{mm}:{ss} {SSS}"},xc="{yyyy}-{MM}-{dd}",wc={year:"{yyyy}",month:"{yyyy}-{MM}",day:xc,hour:xc+" "+_c.hour,minute:xc+" "+_c.minute,second:xc+" "+_c.second,millisecond:_c.none},bc=["year","month","day","hour","minute","second","millisecond"],Sc=["year","half-year","quarter","month","week","half-week","day","half-day","quarter-day","hour","minute","second","millisecond"];function Mc(t,e){return"0000".substr(0,e-(t+="").length)+t}function Cc(t){switch(t){case"half-year":case"quarter":return"month";case"week":case"half-week":return"day";case"half-day":case"quarter-day":return"hour";default:return t}}function Tc(t){return t===Cc(t)}function Ic(t,e,n,i){var r=to(t),o=r[Ac(n)](),a=r[Pc(n)]()+1,s=Math.floor((a-1)/3)+1,l=r[Lc(n)](),u=r["get"+(n?"UTC":"")+"Day"](),h=r[Oc(n)](),c=(h-1)%12+1,p=r[Rc(n)](),d=r[Nc(n)](),f=r[zc(n)](),g=h>=12?"pm":"am",v=g.toUpperCase(),y=i instanceof ic?i:function(t){return cc[t]}(i||pc)||cc[uc],m=y.getModel("time"),_=m.get("month"),x=m.get("monthAbbr"),w=m.get("dayOfWeek"),b=m.get("dayOfWeekAbbr");return(e||"").replace(/{a}/g,g+"").replace(/{A}/g,v+"").replace(/{yyyy}/g,o+"").replace(/{yy}/g,Mc(o%100+"",2)).replace(/{Q}/g,s+"").replace(/{MMMM}/g,_[a-1]).replace(/{MMM}/g,x[a-1]).replace(/{MM}/g,Mc(a,2)).replace(/{M}/g,a+"").replace(/{dd}/g,Mc(l,2)).replace(/{d}/g,l+"").replace(/{eeee}/g,w[u]).replace(/{ee}/g,b[u]).replace(/{e}/g,u+"").replace(/{HH}/g,Mc(h,2)).replace(/{H}/g,h+"").replace(/{hh}/g,Mc(c+"",2)).replace(/{h}/g,c+"").replace(/{mm}/g,Mc(p,2)).replace(/{m}/g,p+"").replace(/{ss}/g,Mc(d,2)).replace(/{s}/g,d+"").replace(/{SSS}/g,Mc(f,3)).replace(/{S}/g,f+"")}function Dc(t,e){var n=to(t),i=n[Pc(e)]()+1,r=n[Lc(e)](),o=n[Oc(e)](),a=n[Rc(e)](),s=n[Nc(e)](),l=0===n[zc(e)](),u=l&&0===s,h=u&&0===a,c=h&&0===o,p=c&&1===r;return p&&1===i?"year":p?"month":c?"day":h?"hour":u?"minute":l?"second":"millisecond"}function kc(t,e,n){var i=X(t)?to(t):t;switch(e=e||Dc(t,n)){case"year":return i[Ac(n)]();case"half-year":return i[Pc(n)]()>=6?1:0;case"quarter":return Math.floor((i[Pc(n)]()+1)/4);case"month":return i[Pc(n)]();case"day":return i[Lc(n)]();case"half-day":return i[Oc(n)]()/24;case"hour":return i[Oc(n)]();case"minute":return i[Rc(n)]();case"second":return i[Nc(n)]();case"millisecond":return i[zc(n)]()}}function Ac(t){return t?"getUTCFullYear":"getFullYear"}function Pc(t){return t?"getUTCMonth":"getMonth"}function Lc(t){return t?"getUTCDate":"getDate"}function Oc(t){return t?"getUTCHours":"getHours"}function Rc(t){return t?"getUTCMinutes":"getMinutes"}function Nc(t){return t?"getUTCSeconds":"getSeconds"}function zc(t){return t?"getUTCMilliseconds":"getMilliseconds"}function Ec(t){return t?"setUTCFullYear":"setFullYear"}function Bc(t){return t?"setUTCMonth":"setMonth"}function Vc(t){return t?"setUTCDate":"setDate"}function Fc(t){return t?"setUTCHours":"setHours"}function Hc(t){return t?"setUTCMinutes":"setMinutes"}function Wc(t){return t?"setUTCSeconds":"setSeconds"}function Gc(t){return t?"setUTCMilliseconds":"setMilliseconds"}function Uc(t){if(!oo(t))return Z(t)?t:"-";var e=(t+"").split(".");return e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:"")}function Zc(t,e){return t=(t||"").toLowerCase().replace(/-(.)/g,(function(t,e){return e.toUpperCase()})),e&&t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}var Yc=at;function Xc(t,e,n){function i(t){return t&<(t)?t:"-"}function r(t){return!(null==t||isNaN(t)||!isFinite(t))}var o="time"===e,a=t instanceof Date;if(o||a){var s=o?to(t):t;if(!isNaN(+s))return Ic(s,"{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}",n);if(a)return"-"}if("ordinal"===e)return Y(t)?i(t):X(t)&&r(t)?t+"":"-";var l=ro(t);return r(l)?Uc(l):Y(t)?i(t):"boolean"==typeof t?t+"":"-"}var jc=["a","b","c","d","e","f","g"],qc=function(t,e){return"{"+t+(null==e?"":e)+"}"};function Kc(t,e,n){G(e)||(e=[e]);var i=e.length;if(!i)return"";for(var r=e[0].$vars||[],o=0;o':'':{renderMode:o,content:"{"+(n.markerId||"markerX")+"|} ",style:"subItem"===r?{width:4,height:4,borderRadius:2,backgroundColor:i}:{width:10,height:10,borderRadius:5,backgroundColor:i}}:""}function Qc(t,e){return e=e||"transparent",Z(t)?t:j(t)&&t.colorStops&&(t.colorStops[0]||{}).color||e}function Jc(t,e){if("_blank"===e||"blank"===e){var n=window.open();n.opener=null,n.location.href=t}else window.open(t,e)}var tp=z,ep=["left","right","top","bottom","width","height"],np=[["width","left","right"],["height","top","bottom"]];function ip(t,e,n,i,r){var o=0,a=0;null==i&&(i=1/0),null==r&&(r=1/0);var s=0;e.eachChild((function(l,u){var h,c,p=l.getBoundingRect(),d=e.childAt(u+1),f=d&&d.getBoundingRect();if("horizontal"===t){var g=p.width+(f?-f.x+p.x:0);(h=o+g)>i||l.newline?(o=0,h=g,a+=s+n,s=p.height):s=Math.max(s,p.height)}else{var v=p.height+(f?-f.y+p.y:0);(c=a+v)>r||l.newline?(o+=s+n,a=0,c=v,s=p.width):s=Math.max(s,p.width)}l.newline||(l.x=o,l.y=a,l.markRedraw(),"horizontal"===t?o=h+n:a=c+n)}))}var rp=ip;W(ip,"vertical"),W(ip,"horizontal");function op(t,e,n){n=Yc(n||0);var i=e.width,r=e.height,o=Gr(t.left,i),a=Gr(t.top,r),s=Gr(t.right,i),l=Gr(t.bottom,r),u=Gr(t.width,i),h=Gr(t.height,r),c=n[2]+n[0],p=n[1]+n[3],d=t.aspect;switch(isNaN(u)&&(u=i-s-p-o),isNaN(h)&&(h=r-l-c-a),null!=d&&(isNaN(u)&&isNaN(h)&&(d>i/r?u=.8*i:h=.8*r),isNaN(u)&&(u=d*h),isNaN(h)&&(h=u/d)),isNaN(o)&&(o=i-s-u-p),isNaN(a)&&(a=r-l-h-c),t.left||t.right){case"center":o=i/2-u/2-n[3];break;case"right":o=i-u-p}switch(t.top||t.bottom){case"middle":case"center":a=r/2-h/2-n[0];break;case"bottom":a=r-h-c}o=o||0,a=a||0,isNaN(u)&&(u=i-p-o-(s||0)),isNaN(h)&&(h=r-c-a-(l||0));var f=new Le(o+n[3],a+n[0],u,h);return f.margin=n,f}function ap(t,e,n,i,r,o){var a,s=!r||!r.hv||r.hv[0],l=!r||!r.hv||r.hv[1],u=r&&r.boundingMode||"all";if((o=o||t).x=t.x,o.y=t.y,!s&&!l)return!1;if("raw"===u)a="group"===t.type?new Le(0,0,+e.width||0,+e.height||0):t.getBoundingRect();else if(a=t.getBoundingRect(),t.needLocalTransform()){var h=t.getLocalTransform();(a=a.clone()).applyTransform(h)}var c=op(A({width:a.width,height:a.height},e),n,i),p=s?c.x-a.x:0,d=l?c.y-a.y:0;return"raw"===u?(o.x=p,o.y=d):(o.x+=p,o.y+=d),o===t&&t.markRedraw(),!0}function sp(t){var e=t.layoutMode||t.constructor.layoutMode;return j(e)?e:e?{type:e}:null}function lp(t,e,n){var i=n&&n.ignoreSize;!G(i)&&(i=[i,i]);var r=a(np[0],0),o=a(np[1],1);function a(n,r){var o={},a=0,u={},h=0;if(tp(n,(function(e){u[e]=t[e]})),tp(n,(function(t){s(e,t)&&(o[t]=u[t]=e[t]),l(o,t)&&a++,l(u,t)&&h++})),i[r])return l(e,n[1])?u[n[2]]=null:l(e,n[2])&&(u[n[1]]=null),u;if(2!==h&&a){if(a>=2)return o;for(var c=0;c=0;a--)o=I(o,n[a],!0);e.defaultOption=o}return e.defaultOption},e.prototype.getReferringComponents=function(t,e){var n=t+"Index",i=t+"Id";return Oo(this.ecModel,t,{index:this.get(n,!0),id:this.get(i,!0)},e)},e.prototype.getBoxLayoutParams=function(){var t=this;return{left:t.get("left"),top:t.get("top"),right:t.get("right"),bottom:t.get("bottom"),width:t.get("width"),height:t.get("height")}},e.prototype.getZLevelKey=function(){return""},e.prototype.setZLevel=function(t){this.option.zlevel=t},e.protoInitialize=function(){var t=e.prototype;t.type="component",t.id="",t.name="",t.mainType="",t.subType="",t.componentIndex=0}(),e}(ic);Vo(pp,ic),Go(pp),function(t){var e={};t.registerSubTypeDefaulter=function(t,n){var i=Eo(t);e[i.main]=n},t.determineSubType=function(n,i){var r=i.type;if(!r){var o=Eo(n).main;t.hasSubTypes(n)&&e[o]&&(r=e[o](i))}return r}}(pp),function(t,e){function n(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}t.topologicalTravel=function(t,i,r,o){if(t.length){var a=function(t){var i={},r=[];return z(t,(function(o){var a=n(i,o),s=function(t,e){var n=[];return z(t,(function(t){L(e,t)>=0&&n.push(t)})),n}(a.originalDeps=e(o),t);a.entryCount=s.length,0===a.entryCount&&r.push(o),z(s,(function(t){L(a.predecessor,t)<0&&a.predecessor.push(t);var e=n(i,t);L(e.successor,t)<0&&e.successor.push(o)}))})),{graph:i,noEntryList:r}}(i),s=a.graph,l=a.noEntryList,u={};for(z(t,(function(t){u[t]=!0}));l.length;){var h=l.pop(),c=s[h],p=!!u[h];p&&(r.call(o,h,c.originalDeps.slice()),delete u[h]),z(c.successor,p?f:d)}z(u,(function(){var t="";throw new Error(t)}))}function d(t){s[t].entryCount--,0===s[t].entryCount&&l.push(t)}function f(t){u[t]=!0,d(t)}}}(pp,(function(t){var e=[];z(pp.getClassesByMainType(t),(function(t){e=e.concat(t.dependencies||t.prototype.dependencies||[])})),e=E(e,(function(t){return Eo(t).main})),"dataset"!==t&&L(e,"dataset")<=0&&e.unshift("dataset");return e}));var dp="";"undefined"!=typeof navigator&&(dp=navigator.platform||"");var fp="rgba(0, 0, 0, 0.2)",gp={darkMode:"auto",colorBy:"series",color:["#5470c6","#91cc75","#fac858","#ee6666","#73c0de","#3ba272","#fc8452","#9a60b4","#ea7ccc"],gradientColor:["#f6efa6","#d88273","#bf444c"],aria:{decal:{decals:[{color:fp,dashArrayX:[1,0],dashArrayY:[2,5],symbolSize:1,rotation:Math.PI/6},{color:fp,symbol:"circle",dashArrayX:[[8,8],[0,8,8,0]],dashArrayY:[6,0],symbolSize:.8},{color:fp,dashArrayX:[1,0],dashArrayY:[4,3],rotation:-Math.PI/4},{color:fp,dashArrayX:[[6,6],[0,6,6,0]],dashArrayY:[6,0]},{color:fp,dashArrayX:[[1,0],[1,6]],dashArrayY:[1,0,6,0],rotation:Math.PI/4},{color:fp,symbol:"triangle",dashArrayX:[[9,9],[0,9,9,0]],dashArrayY:[7,2],symbolSize:.75}]}},textStyle:{fontFamily:dp.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,stateAnimation:{duration:300,easing:"cubicOut"},animation:"auto",animationDuration:1e3,animationDurationUpdate:500,animationEasing:"cubicInOut",animationEasingUpdate:"cubicInOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1},vp=gt(["tooltip","label","itemName","itemId","itemGroupId","itemChildGroupId","seriesName"]),yp="original",mp="arrayRows",_p="objectRows",xp="keyedColumns",wp="typedArray",bp="unknown",Sp="column",Mp="row",Cp=1,Tp=2,Ip=3,Dp=Io();function kp(t,e,n){var i={},r=Pp(e);if(!r||!t)return i;var o,a,s=[],l=[],u=e.ecModel,h=Dp(u).datasetMap,c=r.uid+"_"+n.seriesLayoutBy;z(t=t.slice(),(function(e,n){var r=j(e)?e:t[n]={name:e};"ordinal"===r.type&&null==o&&(o=n,a=f(r)),i[r.name]=[]}));var p=h.get(c)||h.set(c,{categoryWayDim:a,valueWayDim:0});function d(t,e,n){for(var i=0;ie)return t[i];return t[n-1]}(i,a):n;if((h=h||n)&&h.length){var c=h[l];return r&&(u[r]=c),s.paletteIdx=(l+1)%h.length,c}}var Gp="\0_ec_inner";var Up=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.init=function(t,e,n,i,r,o){i=i||{},this.option=null,this._theme=new ic(i),this._locale=new ic(r),this._optionManager=o},e.prototype.setOption=function(t,e,n){var i=Xp(e);this._optionManager.setOption(t,n,i),this._resetOption(null,i)},e.prototype.resetOption=function(t,e){return this._resetOption(t,Xp(e))},e.prototype._resetOption=function(t,e){var n=!1,i=this._optionManager;if(!t||"recreate"===t){var r=i.mountOption("recreate"===t);0,this.option&&"recreate"!==t?(this.restoreData(),this._mergeOption(r,e)):Ep(this,r),n=!0}if("timeline"!==t&&"media"!==t||this.restoreData(),!t||"recreate"===t||"timeline"===t){var o=i.getTimelineOption(this);o&&(n=!0,this._mergeOption(o,e))}if(!t||"recreate"===t||"media"===t){var a=i.getMediaOption(this);a.length&&z(a,(function(t){n=!0,this._mergeOption(t,e)}),this)}return n},e.prototype.mergeOption=function(t){this._mergeOption(t,null)},e.prototype._mergeOption=function(t,e){var n=this.option,i=this._componentsMap,r=this._componentsCount,o=[],a=gt(),s=e&&e.replaceMergeMainTypeMap;Dp(this).datasetMap=gt(),z(t,(function(t,e){null!=t&&(pp.hasClass(e)?e&&(o.push(e),a.set(e,!0)):n[e]=null==n[e]?T(t):I(n[e],t,!0))})),s&&s.each((function(t,e){pp.hasClass(e)&&!a.get(e)&&(o.push(e),a.set(e,!0))})),pp.topologicalTravel(o,pp.getAllClassMainTypes(),(function(e){var o=function(t,e,n){var i=Rp.get(e);if(!i)return n;var r=i(t);return r?n.concat(r):n}(this,e,go(t[e])),a=i.get(e),l=a?s&&s.get(e)?"replaceMerge":"normalMerge":"replaceAll",u=xo(a,o,l);(function(t,e,n){z(t,(function(t){var i=t.newOption;j(i)&&(t.keyInfo.mainType=e,t.keyInfo.subType=function(t,e,n,i){return e.type?e.type:n?n.subType:i.determineSubType(t,e)}(e,i,t.existing,n))}))})(u,e,pp),n[e]=null,i.set(e,null),r.set(e,0);var h,c=[],p=[],d=0;z(u,(function(t,n){var i=t.existing,r=t.newOption;if(r){var o="series"===e,a=pp.getClass(e,t.keyInfo.subType,!o);if(!a)return;if("tooltip"===e){if(h)return void 0;h=!0}if(i&&i.constructor===a)i.name=t.keyInfo.name,i.mergeOption(r,this),i.optionUpdated(r,!1);else{var s=k({componentIndex:n},t.keyInfo);k(i=new a(r,this,this,s),s),t.brandNew&&(i.__requireNewView=!0),i.init(r,this,this),i.optionUpdated(null,!0)}}else i&&(i.mergeOption({},this),i.optionUpdated({},!1));i?(c.push(i.option),p.push(i),d++):(c.push(void 0),p.push(void 0))}),this),n[e]=c,i.set(e,p),r.set(e,d),"series"===e&&Np(this)}),this),this._seriesIndices||Np(this)},e.prototype.getOption=function(){var t=T(this.option);return z(t,(function(e,n){if(pp.hasClass(n)){for(var i=go(e),r=i.length,o=!1,a=r-1;a>=0;a--)i[a]&&!Co(i[a])?o=!0:(i[a]=null,!o&&r--);i.length=r,t[n]=i}})),delete t[Gp],t},e.prototype.getTheme=function(){return this._theme},e.prototype.getLocaleModel=function(){return this._locale},e.prototype.setUpdatePayload=function(t){this._payload=t},e.prototype.getUpdatePayload=function(){return this._payload},e.prototype.getComponent=function(t,e){var n=this._componentsMap.get(t);if(n){var i=n[e||0];if(i)return i;if(null==e)for(var r=0;r=e:"max"===n?t<=e:t===e})(i[a],t,o)||(r=!1)}})),r}var ed=z,nd=j,id=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"];function rd(t){var e=t&&t.itemStyle;if(e)for(var n=0,i=id.length;n=0;g--){var v=t[g];if(s||(p=v.data.rawIndexOf(v.stackedByDimension,c)),p>=0){var y=v.data.getByRawIndex(v.stackResultDimension,p);if("all"===l||"positive"===l&&y>0||"negative"===l&&y<0||"samesign"===l&&d>=0&&y>0||"samesign"===l&&d<=0&&y<0){d=Kr(d,y),f=y;break}}}return i[0]=d,i[1]=f,i}))}))}var bd,Sd,Md,Cd,Td,Id=function(t){this.data=t.data||(t.sourceFormat===xp?{}:[]),this.sourceFormat=t.sourceFormat||bp,this.seriesLayoutBy=t.seriesLayoutBy||Sp,this.startIndex=t.startIndex||0,this.dimensionsDetectedCount=t.dimensionsDetectedCount,this.metaRawOption=t.metaRawOption;var e=this.dimensionsDefine=t.dimensionsDefine;if(e)for(var n=0;nu&&(u=d)}s[0]=l,s[1]=u}},i=function(){return this._data?this._data.length/this._dimSize:0};function r(t){for(var e=0;e=0&&(s=o.interpolatedValue[l])}return null!=s?s+"":""})):void 0},t.prototype.getRawValue=function(t,e){return Yd(this.getData(e),t)},t.prototype.formatTooltip=function(t,e,n){},t}();function qd(t){var e,n;return j(t)?t.type&&(n=t):e=t,{text:e,frag:n}}function Kd(t){return new $d(t)}var $d=function(){function t(t){t=t||{},this._reset=t.reset,this._plan=t.plan,this._count=t.count,this._onDirty=t.onDirty,this._dirty=!0}return t.prototype.perform=function(t){var e,n=this._upstream,i=t&&t.skip;if(this._dirty&&n){var r=this.context;r.data=r.outputData=n.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this),this._plan&&!i&&(e=this._plan(this.context));var o,a=h(this._modBy),s=this._modDataCount||0,l=h(t&&t.modBy),u=t&&t.modDataCount||0;function h(t){return!(t>=1)&&(t=1),t}a===l&&s===u||(e="reset"),(this._dirty||"reset"===e)&&(this._dirty=!1,o=this._doReset(i)),this._modBy=l,this._modDataCount=u;var c=t&&t.step;if(this._dueEnd=n?n._outputDueEnd:this._count?this._count(this.context):1/0,this._progress){var p=this._dueIndex,d=Math.min(null!=c?this._dueIndex+c:1/0,this._dueEnd);if(!i&&(o||p1&&i>0?s:a}};return o;function a(){return e=t?null:oi?-this._resultLT:0},t}(),ef=function(){function t(){}return t.prototype.getRawData=function(){throw new Error("not supported")},t.prototype.getRawDataItem=function(t){throw new Error("not supported")},t.prototype.cloneRawData=function(){},t.prototype.getDimensionInfo=function(t){},t.prototype.cloneAllDimensionInfo=function(){},t.prototype.count=function(){},t.prototype.retrieveValue=function(t,e){},t.prototype.retrieveValueFromItem=function(t,e){},t.prototype.convertValue=function(t,e){return Jd(t,e)},t}();function nf(t){var e=t.sourceFormat;if(!uf(e)){var n="";0,ho(n)}return t.data}function rf(t){var e=t.sourceFormat,n=t.data;if(!uf(e)){var i="";0,ho(i)}if(e===mp){for(var r=[],o=0,a=n.length;o65535?pf:df}function mf(t,e,n,i,r){var o=vf[n||"float"];if(r){var a=t[e],s=a&&a.length;if(s!==i){for(var l=new o(i),u=0;ug[1]&&(g[1]=f)}return this._rawCount=this._count=s,{start:a,end:s}},t.prototype._initDataFromProvider=function(t,e,n){for(var i=this._provider,r=this._chunks,o=this._dimensions,a=o.length,s=this._rawExtent,l=E(o,(function(t){return t.property})),u=0;uv[1]&&(v[1]=g)}}!i.persistent&&i.clean&&i.clean(),this._rawCount=this._count=e,this._extent=[]},t.prototype.count=function(){return this._count},t.prototype.get=function(t,e){if(!(e>=0&&e=0&&e=this._rawCount||t<0)return-1;if(!this._indices)return t;var e=this._indices,n=e[t];if(null!=n&&nt))return o;r=o-1}}return-1},t.prototype.indicesOfNearest=function(t,e,n){var i=this._chunks[t],r=[];if(!i)return r;null==n&&(n=1/0);for(var o=1/0,a=-1,s=0,l=0,u=this.count();l=0&&a<0)&&(o=c,a=h,s=0),h===a&&(r[s++]=l))}return r.length=s,r},t.prototype.getIndices=function(){var t,e=this._indices;if(e){var n=e.constructor,i=this._count;if(n===Array){t=new n(i);for(var r=0;r=u&&_<=h||isNaN(_))&&(a[s++]=d),d++}p=!0}else if(2===r){f=c[i[0]];var v=c[i[1]],y=t[i[1]][0],m=t[i[1]][1];for(g=0;g=u&&_<=h||isNaN(_))&&(x>=y&&x<=m||isNaN(x))&&(a[s++]=d),d++}p=!0}}if(!p)if(1===r)for(g=0;g=u&&_<=h||isNaN(_))&&(a[s++]=w)}else for(g=0;gt[M][1])&&(b=!1)}b&&(a[s++]=e.getRawIndex(g))}return sv[1]&&(v[1]=g)}}}},t.prototype.lttbDownSample=function(t,e){var n,i,r,o=this.clone([t],!0),a=o._chunks[t],s=this.count(),l=0,u=Math.floor(1/e),h=this.getRawIndex(0),c=new(yf(this._rawCount))(Math.min(2*(Math.ceil(s/u)+2),s));c[l++]=h;for(var p=1;pn&&(n=i,r=C)}M>0&&Mu-d&&(s=u-d,a.length=s);for(var f=0;fh[1]&&(h[1]=v),c[p++]=y}return r._count=p,r._indices=c,r._updateGetRawIdx(),r},t.prototype.each=function(t,e){if(this._count)for(var n=t.length,i=this._chunks,r=0,o=this.count();ra&&(a=l)}return i=[o,a],this._extent[t]=i,i},t.prototype.getRawDataItem=function(t){var e=this.getRawIndex(t);if(this._provider.persistent)return this._provider.getItem(e);for(var n=[],i=this._chunks,r=0;r=0?this._indices[t]:-1},t.prototype._updateGetRawIdx=function(){this.getRawIndex=this._indices?this._getRawIdx:this._getRawIdxIdentity},t.internalField=function(){function t(t,e,n,i){return Jd(t[i],this._dimensions[i])}hf={arrayRows:t,objectRows:function(t,e,n,i){return Jd(t[e],this._dimensions[i])},keyedColumns:t,original:function(t,e,n,i){var r=t&&(null==t.value?t:t.value);return Jd(r instanceof Array?r[i]:r,this._dimensions[i])},typedArray:function(t,e,n,i){return t[i]}}}(),t}(),xf=function(){function t(t){this._sourceList=[],this._storeList=[],this._upstreamSignList=[],this._versionSignBase=0,this._dirty=!0,this._sourceHost=t}return t.prototype.dirty=function(){this._setLocalSource([],[]),this._storeList=[],this._dirty=!0},t.prototype._setLocalSource=function(t,e){this._sourceList=t,this._upstreamSignList=e,this._versionSignBase++,this._versionSignBase>9e10&&(this._versionSignBase=0)},t.prototype._getVersionSign=function(){return this._sourceHost.uid+"_"+this._versionSignBase},t.prototype.prepareSource=function(){this._isDirty()&&(this._createSource(),this._dirty=!1)},t.prototype._createSource=function(){this._setLocalSource([],[]);var t,e,n=this._sourceHost,i=this._getUpstreamSourceManagers(),r=!!i.length;if(bf(n)){var o=n,a=void 0,s=void 0,l=void 0;if(r){var u=i[0];u.prepareSource(),a=(l=u.getSource()).data,s=l.sourceFormat,e=[u._getVersionSign()]}else s=K(a=o.get("data",!0))?wp:yp,e=[];var h=this._getSourceMetaRawOption()||{},c=l&&l.metaRawOption||{},p=it(h.seriesLayoutBy,c.seriesLayoutBy)||null,d=it(h.sourceHeader,c.sourceHeader),f=it(h.dimensions,c.dimensions);t=p!==c.seriesLayoutBy||!!d!=!!c.sourceHeader||f?[kd(a,{seriesLayoutBy:p,sourceHeader:d,dimensions:f},s)]:[]}else{var g=n;if(r){var v=this._applyTransform(i);t=v.sourceList,e=v.upstreamSignList}else{t=[kd(g.get("source",!0),this._getSourceMetaRawOption(),null)],e=[]}}this._setLocalSource(t,e)},t.prototype._applyTransform=function(t){var e,n=this._sourceHost,i=n.get("transform",!0),r=n.get("fromTransformResult",!0);if(null!=r){var o="";1!==t.length&&Sf(o)}var a,s=[],l=[];return z(t,(function(t){t.prepareSource();var e=t.getSource(r||0),n="";null==r||e||Sf(n),s.push(e),l.push(t._getVersionSign())})),i?e=function(t,e,n){var i=go(t),r=i.length,o="";r||ho(o);for(var a=0,s=r;a1||n>0&&!t.noHeader;return z(t.blocks,(function(t){var n=Pf(t);n>=e&&(e=n+ +(i&&(!n||kf(t)&&!t.noHeader)))})),e}return 0}function Lf(t,e,n,i){var r,o=e.noHeader,a=(r=Pf(e),{html:Tf[r],richText:If[r]}),s=[],l=e.blocks||[];st(!l||G(l)),l=l||[];var u=t.orderMode;if(e.sortBlocks&&u){l=l.slice();var h={valueAsc:"asc",valueDesc:"desc"};if(_t(h,u)){var c=new tf(h[u],null);l.sort((function(t,e){return c.evaluate(t.sortParam,e.sortParam)}))}else"seriesDesc"===u&&l.reverse()}z(l,(function(n,r){var o=e.valueFormatter,l=Af(n)(o?k(k({},t),{valueFormatter:o}):t,n,r>0?a.html:0,i);null!=l&&s.push(l)}));var p="richText"===t.renderMode?s.join(a.richText):Nf(s.join(""),o?n:a.html);if(o)return p;var d=Xc(e.header,"ordinal",t.useUTC),f=Cf(i,t.renderMode).nameStyle;return"richText"===t.renderMode?zf(t,d,f)+a.richText+p:Nf('
'+te(d)+"
"+p,n)}function Of(t,e,n,i){var r=t.renderMode,o=e.noName,a=e.noValue,s=!e.markerType,l=e.name,u=t.useUTC,h=e.valueFormatter||t.valueFormatter||function(t){return E(t=G(t)?t:[t],(function(t,e){return Xc(t,G(d)?d[e]:d,u)}))};if(!o||!a){var c=s?"":t.markupStyleCreator.makeTooltipMarker(e.markerType,e.markerColor||"#333",r),p=o?"":Xc(l,"ordinal",u),d=e.valueType,f=a?[]:h(e.value,e.dataIndex),g=!s||!o,v=!s&&o,y=Cf(i,r),m=y.nameStyle,_=y.valueStyle;return"richText"===r?(s?"":c)+(o?"":zf(t,p,m))+(a?"":function(t,e,n,i,r){var o=[r],a=i?10:20;return n&&o.push({padding:[0,0,0,a],align:"right"}),t.markupStyleCreator.wrapRichTextStyle(G(e)?e.join(" "):e,o)}(t,f,g,v,_)):Nf((s?"":c)+(o?"":function(t,e,n){return''+te(t)+""}(p,!s,m))+(a?"":function(t,e,n,i){var r=n?"10px":"20px",o=e?"float:right;margin-left:"+r:"";return t=G(t)?t:[t],''+E(t,(function(t){return te(t)})).join("  ")+""}(f,g,v,_)),n)}}function Rf(t,e,n,i,r,o){if(t)return Af(t)({useUTC:r,renderMode:n,orderMode:i,markupStyleCreator:e,valueFormatter:t.valueFormatter},t,0,o)}function Nf(t,e){return'
'+t+'
'}function zf(t,e,n){return t.markupStyleCreator.wrapRichTextStyle(e,n)}function Ef(t,e){var n=t.get("padding");return null!=n?n:"richText"===e?[8,10]:10}var Bf=function(){function t(){this.richTextStyles={},this._nextStyleNameId=ao()}return t.prototype._generateStyleName=function(){return"__EC_aUTo_"+this._nextStyleNameId++},t.prototype.makeTooltipMarker=function(t,e,n){var i="richText"===n?this._generateStyleName():null,r=$c({color:e,type:t,renderMode:n,markerId:i});return Z(r)?r:(this.richTextStyles[i]=r.style,r.content)},t.prototype.wrapRichTextStyle=function(t,e){var n={};G(e)?z(e,(function(t){return k(n,t)})):k(n,e);var i=this._generateStyleName();return this.richTextStyles[i]=n,"{"+i+"|"+t+"}"},t}();function Vf(t){var e,n,i,r,o=t.series,a=t.dataIndex,s=t.multipleSeries,l=o.getData(),u=l.mapDimensionsAll("defaultedTooltip"),h=u.length,c=o.getRawValue(a),p=G(c),d=function(t,e){return Qc(t.getData().getItemVisual(e,"style")[t.visualDrawType])}(o,a);if(h>1||p&&!h){var f=function(t,e,n,i,r){var o=e.getData(),a=B(t,(function(t,e,n){var i=o.getDimensionInfo(n);return t||i&&!1!==i.tooltip&&null!=i.displayName}),!1),s=[],l=[],u=[];function h(t,e){var n=o.getDimensionInfo(e);n&&!1!==n.otherDims.tooltip&&(a?u.push(Df("nameValue",{markerType:"subItem",markerColor:r,name:n.displayName,value:t,valueType:n.type})):(s.push(t),l.push(n.type)))}return i.length?z(i,(function(t){h(Yd(o,n,t),t)})):z(t,h),{inlineValues:s,inlineValueTypes:l,blocks:u}}(c,o,a,u,d);e=f.inlineValues,n=f.inlineValueTypes,i=f.blocks,r=f.inlineValues[0]}else if(h){var g=l.getDimensionInfo(u[0]);r=e=Yd(l,a,u[0]),n=g.type}else r=e=p?c[0]:c;var v=Mo(o),y=v&&o.name||"",m=l.getName(a),_=s?y:m;return Df("section",{header:y,noHeader:s||!v,sortParam:r,blocks:[Df("nameValue",{markerType:"item",markerColor:d,name:_,noName:!lt(_),value:e,valueType:n,dataIndex:a})].concat(i||[])})}var Ff=Io();function Hf(t,e){return t.getName(e)||t.getId(e)}var Wf=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._selectedDataIndicesMap={},e}return n(e,t),e.prototype.init=function(t,e,n){this.seriesIndex=this.componentIndex,this.dataTask=Kd({count:Uf,reset:Zf}),this.dataTask.context={model:this},this.mergeDefaultAndTheme(t,n),(Ff(this).sourceManager=new xf(this)).prepareSource();var i=this.getInitialData(t,n);Xf(i,this),this.dataTask.context.data=i,Ff(this).dataBeforeProcessed=i,Gf(this),this._initSelectedMapFromData(i)},e.prototype.mergeDefaultAndTheme=function(t,e){var n=sp(this),i=n?up(t):{},r=this.subType;pp.hasClass(r)&&(r+="Series"),I(t,e.getTheme().get(this.subType)),I(t,this.getDefaultOption()),vo(t,"label",["show"]),this.fillDataTextStyle(t.data),n&&lp(t,i,n)},e.prototype.mergeOption=function(t,e){t=I(this.option,t,!0),this.fillDataTextStyle(t.data);var n=sp(this);n&&lp(this.option,t,n);var i=Ff(this).sourceManager;i.dirty(),i.prepareSource();var r=this.getInitialData(t,e);Xf(r,this),this.dataTask.dirty(),this.dataTask.context.data=r,Ff(this).dataBeforeProcessed=r,Gf(this),this._initSelectedMapFromData(r)},e.prototype.fillDataTextStyle=function(t){if(t&&!K(t))for(var e=["show"],n=0;nthis.getShallow("animationThreshold")&&(e=!1),!!e},e.prototype.restoreData=function(){this.dataTask.dirty()},e.prototype.getColorFromPalette=function(t,e,n){var i=this.ecModel,r=Fp.prototype.getColorFromPalette.call(this,t,e,n);return r||(r=i.getColorFromPalette(t,e,n)),r},e.prototype.coordDimToDataDim=function(t){return this.getRawData().mapDimensionsAll(t)},e.prototype.getProgressive=function(){return this.get("progressive")},e.prototype.getProgressiveThreshold=function(){return this.get("progressiveThreshold")},e.prototype.select=function(t,e){this._innerSelect(this.getData(e),t)},e.prototype.unselect=function(t,e){var n=this.option.selectedMap;if(n){var i=this.option.selectedMode,r=this.getData(e);if("series"===i||"all"===n)return this.option.selectedMap={},void(this._selectedDataIndicesMap={});for(var o=0;o=0&&n.push(r)}return n},e.prototype.isSelected=function(t,e){var n=this.option.selectedMap;if(!n)return!1;var i=this.getData(e);return("all"===n||n[Hf(i,t)])&&!i.getItemModel(t).get(["select","disabled"])},e.prototype.isUniversalTransitionEnabled=function(){if(this.__universalTransitionEnabled)return!0;var t=this.option.universalTransition;return!!t&&(!0===t||t&&t.enabled)},e.prototype._innerSelect=function(t,e){var n,i,r=this.option,o=r.selectedMode,a=e.length;if(o&&a)if("series"===o)r.selectedMap="all";else if("multiple"===o){j(r.selectedMap)||(r.selectedMap={});for(var s=r.selectedMap,l=0;l0&&this._innerSelect(t,e)}},e.registerClass=function(t){return pp.registerClass(t)},e.protoInitialize=function(){var t=e.prototype;t.type="series.__base__",t.seriesIndex=0,t.ignoreStyleOnData=!1,t.hasSymbolVisual=!1,t.defaultSymbol="circle",t.visualStyleAccessPath="itemStyle",t.visualDrawType="fill"}(),e}(pp);function Gf(t){var e=t.name;Mo(t)||(t.name=function(t){var e=t.getRawData(),n=e.mapDimensionsAll("seriesName"),i=[];return z(n,(function(t){var n=e.getDimensionInfo(t);n.displayName&&i.push(n.displayName)})),i.join(" ")}(t)||e)}function Uf(t){return t.model.getRawData().count()}function Zf(t){var e=t.model;return e.setData(e.getRawData().cloneShallow()),Yf}function Yf(t,e){e.outputData&&t.end>e.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function Xf(t,e){z(vt(t.CHANGABLE_METHODS,t.DOWNSAMPLE_METHODS),(function(n){t.wrapMethod(n,W(jf,e))}))}function jf(t,e){var n=qf(t);return n&&n.setOutputEnd((e||this).count()),e}function qf(t){var e=(t.ecModel||{}).scheduler,n=e&&e.getPipeline(t.uid);if(n){var i=n.currentTask;if(i){var r=i.agentStubMap;r&&(i=r.get(t.uid))}return i}}R(Wf,jd),R(Wf,Fp),Vo(Wf,pp);var Kf=function(){function t(){this.group=new Pr,this.uid=oc("viewComponent")}return t.prototype.init=function(t,e){},t.prototype.render=function(t,e,n,i){},t.prototype.dispose=function(t,e){},t.prototype.updateView=function(t,e,n,i){},t.prototype.updateLayout=function(t,e,n,i){},t.prototype.updateVisual=function(t,e,n,i){},t.prototype.toggleBlurSeries=function(t,e,n){},t.prototype.eachRendered=function(t){var e=this.group;e&&e.traverse(t)},t}();function $f(){var t=Io();return function(e){var n=t(e),i=e.pipelineContext,r=!!n.large,o=!!n.progressiveRender,a=n.large=!(!i||!i.large),s=n.progressiveRender=!(!i||!i.progressiveRender);return!(r===a&&o===s)&&"reset"}}Bo(Kf),Go(Kf);var Qf=Io(),Jf=$f(),tg=function(){function t(){this.group=new Pr,this.uid=oc("viewChart"),this.renderTask=Kd({plan:ig,reset:rg}),this.renderTask.context={view:this}}return t.prototype.init=function(t,e){},t.prototype.render=function(t,e,n,i){0},t.prototype.highlight=function(t,e,n,i){var r=t.getData(i&&i.dataType);r&&ng(r,i,"emphasis")},t.prototype.downplay=function(t,e,n,i){var r=t.getData(i&&i.dataType);r&&ng(r,i,"normal")},t.prototype.remove=function(t,e){this.group.removeAll()},t.prototype.dispose=function(t,e){},t.prototype.updateView=function(t,e,n,i){this.render(t,e,n,i)},t.prototype.updateLayout=function(t,e,n,i){this.render(t,e,n,i)},t.prototype.updateVisual=function(t,e,n,i){this.render(t,e,n,i)},t.prototype.eachRendered=function(t){Ph(this.group,t)},t.markUpdateMethod=function(t,e){Qf(t).updateMethod=e},t.protoInitialize=void(t.prototype.type="chart"),t}();function eg(t,e,n){t&&zl(t)&&("emphasis"===e?yl:ml)(t,n)}function ng(t,e,n){var i=To(t,e),r=e&&null!=e.highlightKey?function(t){var e=Ys[t];return null==e&&Zs<=32&&(e=Ys[t]=Zs++),e}(e.highlightKey):null;null!=i?z(go(i),(function(e){eg(t.getItemGraphicEl(e),n,r)})):t.eachItemGraphicEl((function(t){eg(t,n,r)}))}function ig(t){return Jf(t.model)}function rg(t){var e=t.model,n=t.ecModel,i=t.api,r=t.payload,o=e.pipelineContext.progressiveRender,a=t.view,s=r&&Qf(r).updateMethod,l=o?"incrementalPrepareRender":s&&a[s]?s:"render";return"render"!==l&&a[l](e,n,i,r),og[l]}Bo(tg),Go(tg);var og={incrementalPrepareRender:{progress:function(t,e){e.view.incrementalRender(t,e.model,e.ecModel,e.api,e.payload)}},render:{forceFirstProgress:!0,progress:function(t,e){e.view.render(e.model,e.ecModel,e.api,e.payload)}}},ag="\0__throttleOriginMethod",sg="\0__throttleRate",lg="\0__throttleType";function ug(t,e,n){var i,r,o,a,s,l=0,u=0,h=null;function c(){u=(new Date).getTime(),h=null,t.apply(o,a||[])}e=e||0;var p=function(){for(var t=[],p=0;p=0?c():h=setTimeout(c,-r),l=i};return p.clear=function(){h&&(clearTimeout(h),h=null)},p.debounceNextCall=function(t){s=t},p}function hg(t,e,n,i){var r=t[e];if(r){var o=r[ag]||r,a=r[lg];if(r[sg]!==n||a!==i){if(null==n||!i)return t[e]=o;(r=t[e]=ug(o,n,"debounce"===i))[ag]=o,r[lg]=i,r[sg]=n}return r}}function cg(t,e){var n=t[e];n&&n[ag]&&(n.clear&&n.clear(),t[e]=n[ag])}var pg=Io(),dg={itemStyle:Uo(tc,!0),lineStyle:Uo($h,!0)},fg={lineStyle:"stroke",itemStyle:"fill"};function gg(t,e){var n=t.visualStyleMapper||dg[e];return n||(console.warn("Unknown style type '"+e+"'."),dg.itemStyle)}function vg(t,e){var n=t.visualDrawType||fg[e];return n||(console.warn("Unknown style type '"+e+"'."),"fill")}var yg={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var n=t.getData(),i=t.visualStyleAccessPath||"itemStyle",r=t.getModel(i),o=gg(t,i)(r),a=r.getShallow("decal");a&&(n.setVisual("decal",a),a.dirty=!0);var s=vg(t,i),l=o[s],u=U(l)?l:null,h="auto"===o.fill||"auto"===o.stroke;if(!o[s]||u||h){var c=t.getColorFromPalette(t.name,null,e.getSeriesCount());o[s]||(o[s]=c,n.setVisual("colorFromPalette",!0)),o.fill="auto"===o.fill||U(o.fill)?c:o.fill,o.stroke="auto"===o.stroke||U(o.stroke)?c:o.stroke}if(n.setVisual("style",o),n.setVisual("drawType",s),!e.isSeriesFiltered(t)&&u)return n.setVisual("colorFromPalette",!1),{dataEach:function(e,n){var i=t.getDataParams(n),r=k({},o);r[s]=u(i),e.setItemVisual(n,"style",r)}}}},mg=new ic,_g={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){if(!t.ignoreStyleOnData&&!e.isSeriesFiltered(t)){var n=t.getData(),i=t.visualStyleAccessPath||"itemStyle",r=gg(t,i),o=n.getVisual("drawType");return{dataEach:n.hasItemOption?function(t,e){var n=t.getRawDataItem(e);if(n&&n[i]){mg.option=n[i];var a=r(mg);k(t.ensureUniqueItemVisual(e,"style"),a),mg.option.decal&&(t.setItemVisual(e,"decal",mg.option.decal),mg.option.decal.dirty=!0),o in a&&t.setItemVisual(e,"colorFromPalette",!1)}}:null}}}},xg={performRawSeries:!0,overallReset:function(t){var e=gt();t.eachSeries((function(t){var n=t.getColorBy();if(!t.isColorBySeries()){var i=t.type+"-"+n,r=e.get(i);r||(r={},e.set(i,r)),pg(t).scope=r}})),t.eachSeries((function(e){if(!e.isColorBySeries()&&!t.isSeriesFiltered(e)){var n=e.getRawData(),i={},r=e.getData(),o=pg(e).scope,a=e.visualStyleAccessPath||"itemStyle",s=vg(e,a);r.each((function(t){var e=r.getRawIndex(t);i[e]=t})),n.each((function(t){var a=i[t];if(r.getItemVisual(a,"colorFromPalette")){var l=r.ensureUniqueItemVisual(a,"style"),u=n.getName(t)||t+"",h=n.count();l[s]=e.getColorFromPalette(u,o,h)}}))}}))}},wg=Math.PI;var bg=function(){function t(t,e,n,i){this._stageTaskMap=gt(),this.ecInstance=t,this.api=e,n=this._dataProcessorHandlers=n.slice(),i=this._visualHandlers=i.slice(),this._allHandlers=n.concat(i)}return t.prototype.restoreData=function(t,e){t.restoreData(e),this._stageTaskMap.each((function(t){var e=t.overallTask;e&&e.dirty()}))},t.prototype.getPerformArgs=function(t,e){if(t.__pipeline){var n=this._pipelineMap.get(t.__pipeline.id),i=n.context,r=!e&&n.progressiveEnabled&&(!i||i.progressiveRender)&&t.__idxInPipeline>n.blockIndex?n.step:null,o=i&&i.modDataCount;return{step:r,modBy:null!=o?Math.ceil(o/r):null,modDataCount:o}}},t.prototype.getPipeline=function(t){return this._pipelineMap.get(t)},t.prototype.updateStreamModes=function(t,e){var n=this._pipelineMap.get(t.uid),i=t.getData().count(),r=n.progressiveEnabled&&e.incrementalPrepareRender&&i>=n.threshold,o=t.get("large")&&i>=t.get("largeThreshold"),a="mod"===t.get("progressiveChunkMode")?i:null;t.pipelineContext=n.context={progressiveRender:r,modDataCount:a,large:o}},t.prototype.restorePipelines=function(t){var e=this,n=e._pipelineMap=gt();t.eachSeries((function(t){var i=t.getProgressive(),r=t.uid;n.set(r,{id:r,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:i&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(i||700),count:0}),e._pipe(t,t.dataTask)}))},t.prototype.prepareStageTasks=function(){var t=this._stageTaskMap,e=this.api.getModel(),n=this.api;z(this._allHandlers,(function(i){var r=t.get(i.uid)||t.set(i.uid,{}),o="";st(!(i.reset&&i.overallReset),o),i.reset&&this._createSeriesStageTask(i,r,e,n),i.overallReset&&this._createOverallStageTask(i,r,e,n)}),this)},t.prototype.prepareView=function(t,e,n,i){var r=t.renderTask,o=r.context;o.model=e,o.ecModel=n,o.api=i,r.__block=!t.incrementalPrepareRender,this._pipe(e,r)},t.prototype.performDataProcessorTasks=function(t,e){this._performStageTasks(this._dataProcessorHandlers,t,e,{block:!0})},t.prototype.performVisualTasks=function(t,e,n){this._performStageTasks(this._visualHandlers,t,e,n)},t.prototype._performStageTasks=function(t,e,n,i){i=i||{};var r=!1,o=this;function a(t,e){return t.setDirty&&(!t.dirtyMap||t.dirtyMap.get(e.__pipeline.id))}z(t,(function(t,s){if(!i.visualType||i.visualType===t.visualType){var l=o._stageTaskMap.get(t.uid),u=l.seriesTaskMap,h=l.overallTask;if(h){var c,p=h.agentStubMap;p.each((function(t){a(i,t)&&(t.dirty(),c=!0)})),c&&h.dirty(),o.updatePayload(h,n);var d=o.getPerformArgs(h,i.block);p.each((function(t){t.perform(d)})),h.perform(d)&&(r=!0)}else u&&u.each((function(s,l){a(i,s)&&s.dirty();var u=o.getPerformArgs(s,i.block);u.skip=!t.performRawSeries&&e.isSeriesFiltered(s.context.model),o.updatePayload(s,n),s.perform(u)&&(r=!0)}))}})),this.unfinished=r||this.unfinished},t.prototype.performSeriesTasks=function(t){var e;t.eachSeries((function(t){e=t.dataTask.perform()||e})),this.unfinished=e||this.unfinished},t.prototype.plan=function(){this._pipelineMap.each((function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)}))},t.prototype.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)},t.prototype._createSeriesStageTask=function(t,e,n,i){var r=this,o=e.seriesTaskMap,a=e.seriesTaskMap=gt(),s=t.seriesType,l=t.getTargetSeries;function u(e){var s=e.uid,l=a.set(s,o&&o.get(s)||Kd({plan:Ig,reset:Dg,count:Pg}));l.context={model:e,ecModel:n,api:i,useClearVisual:t.isVisual&&!t.isLayout,plan:t.plan,reset:t.reset,scheduler:r},r._pipe(e,l)}t.createOnAllSeries?n.eachRawSeries(u):s?n.eachRawSeriesByType(s,u):l&&l(n,i).each(u)},t.prototype._createOverallStageTask=function(t,e,n,i){var r=this,o=e.overallTask=e.overallTask||Kd({reset:Sg});o.context={ecModel:n,api:i,overallReset:t.overallReset,scheduler:r};var a=o.agentStubMap,s=o.agentStubMap=gt(),l=t.seriesType,u=t.getTargetSeries,h=!0,c=!1,p="";function d(t){var e=t.uid,n=s.set(e,a&&a.get(e)||(c=!0,Kd({reset:Mg,onDirty:Tg})));n.context={model:t,overallProgress:h},n.agent=o,n.__block=h,r._pipe(t,n)}st(!t.createOnAllSeries,p),l?n.eachRawSeriesByType(l,d):u?u(n,i).each(d):(h=!1,z(n.getSeries(),d)),c&&o.dirty()},t.prototype._pipe=function(t,e){var n=t.uid,i=this._pipelineMap.get(n);!i.head&&(i.head=e),i.tail&&i.tail.pipe(e),i.tail=e,e.__idxInPipeline=i.count++,e.__pipeline=i},t.wrapStageHandler=function(t,e){return U(t)&&(t={overallReset:t,seriesType:Lg(t)}),t.uid=oc("stageHandler"),e&&(t.visualType=e),t},t}();function Sg(t){t.overallReset(t.ecModel,t.api,t.payload)}function Mg(t){return t.overallProgress&&Cg}function Cg(){this.agent.dirty(),this.getDownstream().dirty()}function Tg(){this.agent&&this.agent.dirty()}function Ig(t){return t.plan?t.plan(t.model,t.ecModel,t.api,t.payload):null}function Dg(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=go(t.reset(t.model,t.ecModel,t.api,t.payload));return e.length>1?E(e,(function(t,e){return Ag(e)})):kg}var kg=Ag(0);function Ag(t){return function(e,n){var i=n.data,r=n.resetDefines[t];if(r&&r.dataEach)for(var o=e.start;o0&&h===r.length-u.length){var c=r.slice(0,h);"data"!==c&&(e.mainType=c,e[u.toLowerCase()]=t,s=!0)}}a.hasOwnProperty(r)&&(n[r]=t,s=!0),s||(i[r]=t)}))}return{cptQuery:e,dataQuery:n,otherQuery:i}},t.prototype.filter=function(t,e){var n=this.eventInfo;if(!n)return!0;var i=n.targetEl,r=n.packedEvent,o=n.model,a=n.view;if(!o||!a)return!0;var s=e.cptQuery,l=e.dataQuery;return u(s,o,"mainType")&&u(s,o,"subType")&&u(s,o,"index","componentIndex")&&u(s,o,"name")&&u(s,o,"id")&&u(l,r,"name")&&u(l,r,"dataIndex")&&u(l,r,"dataType")&&(!a.filterForExposedEvent||a.filterForExposedEvent(t,e.otherQuery,i,r));function u(t,e,n,i){return null==t[n]||e[i||n]===t[n]}},t.prototype.afterTrigger=function(){this.eventInfo=null},t}(),Zg=["symbol","symbolSize","symbolRotate","symbolOffset"],Yg=Zg.concat(["symbolKeepAspect"]),Xg={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var n=t.getData();if(t.legendIcon&&n.setVisual("legendIcon",t.legendIcon),t.hasSymbolVisual){for(var i={},r={},o=!1,a=0;a=0&&pv(l)?l:.5,t.createRadialGradient(a,s,0,a,s,l)}(t,e,n):function(t,e,n){var i=null==e.x?0:e.x,r=null==e.x2?1:e.x2,o=null==e.y?0:e.y,a=null==e.y2?0:e.y2;return e.global||(i=i*n.width+n.x,r=r*n.width+n.x,o=o*n.height+n.y,a=a*n.height+n.y),i=pv(i)?i:0,r=pv(r)?r:1,o=pv(o)?o:0,a=pv(a)?a:0,t.createLinearGradient(i,o,r,a)}(t,e,n),r=e.colorStops,o=0;o0&&(e=i.lineDash,n=i.lineWidth,e&&"solid"!==e&&n>0?"dashed"===e?[4*n,2*n]:"dotted"===e?[n]:X(e)?[e]:G(e)?e:null:null),o=i.lineDashOffset;if(r){var a=i.strokeNoScale&&t.getLineScale?t.getLineScale():1;a&&1!==a&&(r=E(r,(function(t){return t/a})),o/=a)}return[r,o]}var yv=new Ka(!0);function mv(t){var e=t.stroke;return!(null==e||"none"===e||!(t.lineWidth>0))}function _v(t){return"string"==typeof t&&"none"!==t}function xv(t){var e=t.fill;return null!=e&&"none"!==e}function wv(t,e){if(null!=e.fillOpacity&&1!==e.fillOpacity){var n=t.globalAlpha;t.globalAlpha=e.fillOpacity*e.opacity,t.fill(),t.globalAlpha=n}else t.fill()}function bv(t,e){if(null!=e.strokeOpacity&&1!==e.strokeOpacity){var n=t.globalAlpha;t.globalAlpha=e.strokeOpacity*e.opacity,t.stroke(),t.globalAlpha=n}else t.stroke()}function Sv(t,e,n){var i=qo(e.image,e.__image,n);if($o(i)){var r=t.createPattern(i,e.repeat||"repeat");if("function"==typeof DOMMatrix&&r&&r.setTransform){var o=new DOMMatrix;o.translateSelf(e.x||0,e.y||0),o.rotateSelf(0,0,(e.rotation||0)*wt),o.scaleSelf(e.scaleX||1,e.scaleY||1),r.setTransform(o)}return r}}var Mv=["shadowBlur","shadowOffsetX","shadowOffsetY"],Cv=[["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]];function Tv(t,e,n,i,r){var o=!1;if(!i&&e===(n=n||{}))return!1;if(i||e.opacity!==n.opacity){kv(t,r),o=!0;var a=Math.max(Math.min(e.opacity,1),0);t.globalAlpha=isNaN(a)?ca.opacity:a}(i||e.blend!==n.blend)&&(o||(kv(t,r),o=!0),t.globalCompositeOperation=e.blend||ca.blend);for(var s=0;s0&&t.unfinished);t.unfinished||this._zr.flush()}}},e.prototype.getDom=function(){return this._dom},e.prototype.getId=function(){return this.id},e.prototype.getZr=function(){return this._zr},e.prototype.isSSR=function(){return this._ssr},e.prototype.setOption=function(t,e,n){if(!this[Yv])if(this._disposed)Sy(this.id);else{var i,r,o;if(j(e)&&(n=e.lazyUpdate,i=e.silent,r=e.replaceMerge,o=e.transition,e=e.notMerge),this[Yv]=!0,!this._model||e){var a=new Jp(this._api),s=this._theme,l=this._model=new Up;l.scheduler=this._scheduler,l.ssr=this._ssr,l.init(null,null,null,s,this._locale,a)}this._model.setOption(t,{replaceMerge:r},Iy);var u={seriesTransition:o,optionChanged:!0};if(n)this[Xv]={silent:i,updateParams:u},this[Yv]=!1,this.getZr().wakeUp();else{try{ty(this),iy.update.call(this,null,u)}catch(t){throw this[Xv]=null,this[Yv]=!1,t}this._ssr||this._zr.flush(),this[Xv]=null,this[Yv]=!1,sy.call(this,i),ly.call(this,i)}}},e.prototype.setTheme=function(){uo()},e.prototype.getModel=function(){return this._model},e.prototype.getOption=function(){return this._model&&this._model.getOption()},e.prototype.getWidth=function(){return this._zr.getWidth()},e.prototype.getHeight=function(){return this._zr.getHeight()},e.prototype.getDevicePixelRatio=function(){return this._zr.painter.dpr||r.hasGlobalWindow&&window.devicePixelRatio||1},e.prototype.getRenderedCanvas=function(t){return this.renderToCanvas(t)},e.prototype.renderToCanvas=function(t){t=t||{};var e=this._zr.painter;return e.getRenderedCanvas({backgroundColor:t.backgroundColor||this._model.get("backgroundColor"),pixelRatio:t.pixelRatio||this.getDevicePixelRatio()})},e.prototype.renderToSVGString=function(t){t=t||{};var e=this._zr.painter;return e.renderToString({useViewBox:t.useViewBox})},e.prototype.getSvgDataURL=function(){if(r.svgSupported){var t=this._zr;return z(t.storage.getDisplayList(),(function(t){t.stopAnimation(null,!0)})),t.painter.toDataURL()}},e.prototype.getDataURL=function(t){if(!this._disposed){var e=(t=t||{}).excludeComponents,n=this._model,i=[],r=this;z(e,(function(t){n.eachComponent({mainType:t},(function(t){var e=r._componentsMap[t.__viewId];e.group.ignore||(i.push(e),e.group.ignore=!0)}))}));var o="svg"===this._zr.painter.getType()?this.getSvgDataURL():this.renderToCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return z(i,(function(t){t.group.ignore=!1})),o}Sy(this.id)},e.prototype.getConnectedDataURL=function(t){if(!this._disposed){var e="svg"===t.type,n=this.group,i=Math.min,r=Math.max,o=1/0;if(Ly[n]){var a=o,s=o,l=-1/0,u=-1/0,c=[],p=t&&t.pixelRatio||this.getDevicePixelRatio();z(Py,(function(o,h){if(o.group===n){var p=e?o.getZr().painter.getSvgDom().innerHTML:o.renderToCanvas(T(t)),d=o.getDom().getBoundingClientRect();a=i(d.left,a),s=i(d.top,s),l=r(d.right,l),u=r(d.bottom,u),c.push({dom:p,left:d.left,top:d.top})}}));var d=(l*=p)-(a*=p),f=(u*=p)-(s*=p),g=h.createCanvas(),v=zr(g,{renderer:e?"svg":"canvas"});if(v.resize({width:d,height:f}),e){var y="";return z(c,(function(t){var e=t.left-a,n=t.top-s;y+=''+t.dom+""})),v.painter.getSvgRoot().innerHTML=y,t.connectedBackgroundColor&&v.painter.setBackgroundColor(t.connectedBackgroundColor),v.refreshImmediately(),v.painter.toDataURL()}return t.connectedBackgroundColor&&v.add(new Ds({shape:{x:0,y:0,width:d,height:f},style:{fill:t.connectedBackgroundColor}})),z(c,(function(t){var e=new ws({style:{x:t.left*p-a,y:t.top*p-s,image:t.dom}});v.add(e)})),v.refreshImmediately(),g.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}Sy(this.id)},e.prototype.convertToPixel=function(t,e){return ry(this,"convertToPixel",t,e)},e.prototype.convertFromPixel=function(t,e){return ry(this,"convertFromPixel",t,e)},e.prototype.containPixel=function(t,e){var n;if(!this._disposed)return z(ko(this._model,t),(function(t,i){i.indexOf("Models")>=0&&z(t,(function(t){var r=t.coordinateSystem;if(r&&r.containPoint)n=n||!!r.containPoint(e);else if("seriesModels"===i){var o=this._chartsMap[t.__viewId];o&&o.containPoint&&(n=n||o.containPoint(e,t))}else 0}),this)}),this),!!n;Sy(this.id)},e.prototype.getVisual=function(t,e){var n=ko(this._model,t,{defaultMainType:"series"}),i=n.seriesModel;var r=i.getData(),o=n.hasOwnProperty("dataIndexInside")?n.dataIndexInside:n.hasOwnProperty("dataIndex")?r.indexOfRawIndex(n.dataIndex):null;return null!=o?function(t,e,n){switch(n){case"color":return t.getItemVisual(e,"style")[t.getVisual("drawType")];case"opacity":return t.getItemVisual(e,"style").opacity;case"symbol":case"symbolSize":case"liftZ":return t.getItemVisual(e,n)}}(r,o,e):qg(r,e)},e.prototype.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},e.prototype.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]},e.prototype._initEvents=function(){var t,e,n,i=this;z(by,(function(t){var e=function(e){var n,r=i.getModel(),o=e.target,a="globalout"===t;if(a?n={}:o&&$g(o,(function(t){var e=Us(t);if(e&&null!=e.dataIndex){var i=e.dataModel||r.getSeriesByIndex(e.seriesIndex);return n=i&&i.getDataParams(e.dataIndex,e.dataType,o)||{},!0}if(e.eventData)return n=k({},e.eventData),!0}),!0),n){var s=n.componentType,l=n.componentIndex;"markLine"!==s&&"markPoint"!==s&&"markArea"!==s||(s="series",l=n.seriesIndex);var u=s&&null!=l&&r.getComponent(s,l),h=u&&i["series"===u.mainType?"_chartsMap":"_componentsMap"][u.__viewId];0,n.event=e,n.type=t,i._$eventProcessor.eventInfo={targetEl:o,packedEvent:n,model:u,view:h},i.trigger(t,n)}};e.zrEventfulCallAtLast=!0,i._zr.on(t,e,i)})),z(Cy,(function(t,e){i._messageCenter.on(e,(function(t){this.trigger(e,t)}),i)})),z(["selectchanged"],(function(t){i._messageCenter.on(t,(function(e){this.trigger(t,e)}),i)})),t=this._messageCenter,e=this,n=this._api,t.on("selectchanged",(function(t){var i=n.getModel();t.isFromClick?(Kg("map","selectchanged",e,i,t),Kg("pie","selectchanged",e,i,t)):"select"===t.fromAction?(Kg("map","selected",e,i,t),Kg("pie","selected",e,i,t)):"unselect"===t.fromAction&&(Kg("map","unselected",e,i,t),Kg("pie","unselected",e,i,t))}))},e.prototype.isDisposed=function(){return this._disposed},e.prototype.clear=function(){this._disposed?Sy(this.id):this.setOption({series:[]},!0)},e.prototype.dispose=function(){if(this._disposed)Sy(this.id);else{this._disposed=!0,this.getDom()&&Ro(this.getDom(),Ny,"");var t=this,e=t._api,n=t._model;z(t._componentsViews,(function(t){t.dispose(n,e)})),z(t._chartsViews,(function(t){t.dispose(n,e)})),t._zr.dispose(),t._dom=t._model=t._chartsMap=t._componentsMap=t._chartsViews=t._componentsViews=t._scheduler=t._api=t._zr=t._throttledZrFlush=t._theme=t._coordSysMgr=t._messageCenter=null,delete Py[t.id]}},e.prototype.resize=function(t){if(!this[Yv])if(this._disposed)Sy(this.id);else{this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var n=e.resetOption("media"),i=t&&t.silent;this[Xv]&&(null==i&&(i=this[Xv].silent),n=!0,this[Xv]=null),this[Yv]=!0;try{n&&ty(this),iy.update.call(this,{type:"resize",animation:k({duration:0},t&&t.animation)})}catch(t){throw this[Yv]=!1,t}this[Yv]=!1,sy.call(this,i),ly.call(this,i)}}},e.prototype.showLoading=function(t,e){if(this._disposed)Sy(this.id);else if(j(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),Ay[t]){var n=Ay[t](this._api,e),i=this._zr;this._loadingFX=n,i.add(n)}},e.prototype.hideLoading=function(){this._disposed?Sy(this.id):(this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null)},e.prototype.makeActionFromEvent=function(t){var e=k({},t);return e.type=Cy[t.type],e},e.prototype.dispatchAction=function(t,e){if(this._disposed)Sy(this.id);else if(j(e)||(e={silent:!!e}),My[t.type]&&this._model)if(this[Yv])this._pendingActions.push(t);else{var n=e.silent;ay.call(this,t,n);var i=e.flush;i?this._zr.flush():!1!==i&&r.browser.weChat&&this._throttledZrFlush(),sy.call(this,n),ly.call(this,n)}},e.prototype.updateLabelLayout=function(){Fv.trigger("series:layoutlabels",this._model,this._api,{updatedSeries:[]})},e.prototype.appendData=function(t){if(this._disposed)Sy(this.id);else{var e=t.seriesIndex,n=this.getModel().getSeriesByIndex(e);0,n.appendData(t),this._scheduler.unfinished=!0,this.getZr().wakeUp()}},e.internalField=function(){function t(t){t.clearColorPalette(),t.eachSeries((function(t){t.clearColorPalette()}))}function e(t){for(var e=[],n=t.currentStates,i=0;i0?{duration:o,delay:i.get("delay"),easing:i.get("easing")}:null;n.eachRendered((function(t){if(t.states&&t.states.emphasis){if(Ju(t))return;if(t instanceof vs&&function(t){var e=Xs(t);e.normalFill=t.style.fill,e.normalStroke=t.style.stroke;var n=t.states.select||{};e.selectFill=n.style&&n.style.fill||null,e.selectStroke=n.style&&n.style.stroke||null}(t),t.__dirty){var n=t.prevStates;n&&t.useStates(n)}if(r){t.stateTransition=a;var i=t.getTextContent(),o=t.getTextGuideLine();i&&(i.stateTransition=a),o&&(o.stateTransition=a)}t.__dirty&&e(t)}}))}ty=function(t){var e=t._scheduler;e.restorePipelines(t._model),e.prepareStageTasks(),ey(t,!0),ey(t,!1),e.plan()},ey=function(t,e){for(var n=t._model,i=t._scheduler,r=e?t._componentsViews:t._chartsViews,o=e?t._componentsMap:t._chartsMap,a=t._zr,s=t._api,l=0;le.get("hoverLayerThreshold")&&!r.node&&!r.worker&&e.eachSeries((function(e){if(!e.preventUsingHoverLayer){var n=t._chartsMap[e.__viewId];n.__alive&&n.eachRendered((function(t){t.states.emphasis&&(t.states.emphasis.hoverLayer=!0)}))}}))}(t,e),Fv.trigger("series:afterupdate",e,n,l)},vy=function(t){t[jv]=!0,t.getZr().wakeUp()},yy=function(t){t[jv]&&(t.getZr().storage.traverse((function(t){Ju(t)||e(t)})),t[jv]=!1)},fy=function(t){return new(function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return n(i,e),i.prototype.getCoordinateSystems=function(){return t._coordSysMgr.getCoordinateSystems()},i.prototype.getComponentByElement=function(e){for(;e;){var n=e.__ecComponentInfo;if(null!=n)return t._model.getComponent(n.mainType,n.index);e=e.parent}},i.prototype.enterEmphasis=function(e,n){yl(e,n),vy(t)},i.prototype.leaveEmphasis=function(e,n){ml(e,n),vy(t)},i.prototype.enterBlur=function(e){_l(e),vy(t)},i.prototype.leaveBlur=function(e){xl(e),vy(t)},i.prototype.enterSelect=function(e){wl(e),vy(t)},i.prototype.leaveSelect=function(e){bl(e),vy(t)},i.prototype.getModel=function(){return t.getModel()},i.prototype.getViewOfComponentModel=function(e){return t.getViewOfComponentModel(e)},i.prototype.getViewOfSeriesModel=function(e){return t.getViewOfSeriesModel(e)},i}(qp))(t)},gy=function(t){function e(t,e){for(var n=0;n=0)){qy.push(n);var o=bg.wrapStageHandler(n,r);o.__prio=e,o.__raw=n,t.push(o)}}function $y(t,e){Ay[t]=e}function Qy(t,e,n){var i=Wv("registerMap");i&&i(t,e,n)}var Jy=function(t){var e=(t=T(t)).type,n="";e||ho(n);var i=e.split(":");2!==i.length&&ho(n);var r=!1;"echarts"===i[0]&&(e=i[1],r=!0),t.__isBuiltIn=r,sf.set(e,t)};jy(Gv,yg),jy(Uv,_g),jy(Uv,xg),jy(Gv,Xg),jy(Uv,jg),jy(7e3,(function(t,e){t.eachRawSeries((function(n){if(!t.isSeriesFiltered(n)){var i=n.getData();i.hasItemVisual()&&i.each((function(t){var n=i.getItemVisual(t,"decal");n&&(i.ensureUniqueItemVisual(t,"style").decal=zv(n,e))}));var r=i.getVisual("decal");if(r)i.getVisual("style").decal=zv(r,e)}}))})),Fy(xd),Hy(900,(function(t){var e=gt();t.eachSeries((function(t){var n=t.get("stack");if(n){var i=e.get(n)||e.set(n,[]),r=t.getData(),o={stackResultDimension:r.getCalculationInfo("stackResultDimension"),stackedOverDimension:r.getCalculationInfo("stackedOverDimension"),stackedDimension:r.getCalculationInfo("stackedDimension"),stackedByDimension:r.getCalculationInfo("stackedByDimension"),isStackedByIndex:r.getCalculationInfo("isStackedByIndex"),data:r,seriesModel:t};if(!o.stackedDimension||!o.isStackedByIndex&&!o.stackedByDimension)return;i.length&&r.setCalculationInfo("stackedOnSeries",i[i.length-1].seriesModel),i.push(o)}})),e.each(wd)})),$y("default",(function(t,e){A(e=e||{},{text:"loading",textColor:"#000",fontSize:12,fontWeight:"normal",fontStyle:"normal",fontFamily:"sans-serif",maskColor:"rgba(255, 255, 255, 0.8)",showSpinner:!0,color:"#5470c6",spinnerRadius:10,lineWidth:5,zlevel:0});var n=new Pr,i=new Ds({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4});n.add(i);var r,o=new Ps({style:{text:e.text,fill:e.textColor,fontSize:e.fontSize,fontWeight:e.fontWeight,fontStyle:e.fontStyle,fontFamily:e.fontFamily},zlevel:e.zlevel,z:10001}),a=new Ds({style:{fill:"none"},textContent:o,textConfig:{position:"right",distance:10},zlevel:e.zlevel,z:10001});return n.add(a),e.showSpinner&&((r=new zu({shape:{startAngle:-wg/2,endAngle:-wg/2+.1,r:e.spinnerRadius},style:{stroke:e.color,lineCap:"round",lineWidth:e.lineWidth},zlevel:e.zlevel,z:10001})).animateShape(!0).when(1e3,{endAngle:3*wg/2}).start("circularInOut"),r.animateShape(!0).when(1e3,{startAngle:3*wg/2}).delay(300).start("circularInOut"),n.add(r)),n.resize=function(){var n=o.getBoundingRect().width,s=e.showSpinner?e.spinnerRadius:0,l=(t.getWidth()-2*s-(e.showSpinner&&n?10:0)-n)/2-(e.showSpinner&&n?0:5+n/2)+(e.showSpinner?0:n/2)+(n?0:s),u=t.getHeight()/2;e.showSpinner&&r.setShape({cx:l,cy:u}),a.setShape({x:l-s,y:u-s,width:2*s,height:2*s}),i.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},n.resize(),n})),Zy({type:$s,event:$s,update:$s},xt),Zy({type:Qs,event:Qs,update:Qs},xt),Zy({type:Js,event:Js,update:Js},xt),Zy({type:tl,event:tl,update:tl},xt),Zy({type:el,event:el,update:el},xt),Vy("light",Bg),Vy("dark",Gg);var tm=[],em={registerPreprocessor:Fy,registerProcessor:Hy,registerPostInit:Wy,registerPostUpdate:Gy,registerUpdateLifecycle:Uy,registerAction:Zy,registerCoordinateSystem:Yy,registerLayout:Xy,registerVisual:jy,registerTransform:Jy,registerLoading:$y,registerMap:Qy,registerImpl:function(t,e){Hv[t]=e},PRIORITY:Zv,ComponentModel:pp,ComponentView:Kf,SeriesModel:Wf,ChartView:tg,registerComponentModel:function(t){pp.registerClass(t)},registerComponentView:function(t){Kf.registerClass(t)},registerSeriesModel:function(t){Wf.registerClass(t)},registerChartView:function(t){tg.registerClass(t)},registerSubTypeDefaulter:function(t,e){pp.registerSubTypeDefaulter(t,e)},registerPainter:function(t,e){Er(t,e)}};function nm(t){G(t)?z(t,(function(t){nm(t)})):L(tm,t)>=0||(tm.push(t),U(t)&&(t={install:t}),t.install(em))}function im(t){return null==t?0:t.length||1}function rm(t){return t}var om=function(){function t(t,e,n,i,r,o){this._old=t,this._new=e,this._oldKeyGetter=n||rm,this._newKeyGetter=i||rm,this.context=r,this._diffModeMultiple="multiple"===o}return t.prototype.add=function(t){return this._add=t,this},t.prototype.update=function(t){return this._update=t,this},t.prototype.updateManyToOne=function(t){return this._updateManyToOne=t,this},t.prototype.updateOneToMany=function(t){return this._updateOneToMany=t,this},t.prototype.updateManyToMany=function(t){return this._updateManyToMany=t,this},t.prototype.remove=function(t){return this._remove=t,this},t.prototype.execute=function(){this[this._diffModeMultiple?"_executeMultiple":"_executeOneToOne"]()},t.prototype._executeOneToOne=function(){var t=this._old,e=this._new,n={},i=new Array(t.length),r=new Array(e.length);this._initIndexMap(t,null,i,"_oldKeyGetter"),this._initIndexMap(e,n,r,"_newKeyGetter");for(var o=0;o1){var u=s.shift();1===s.length&&(n[a]=s[0]),this._update&&this._update(u,o)}else 1===l?(n[a]=null,this._update&&this._update(s,o)):this._remove&&this._remove(o)}this._performRestAdd(r,n)},t.prototype._executeMultiple=function(){var t=this._old,e=this._new,n={},i={},r=[],o=[];this._initIndexMap(t,n,r,"_oldKeyGetter"),this._initIndexMap(e,i,o,"_newKeyGetter");for(var a=0;a1&&1===c)this._updateManyToOne&&this._updateManyToOne(u,l),i[s]=null;else if(1===h&&c>1)this._updateOneToMany&&this._updateOneToMany(u,l),i[s]=null;else if(1===h&&1===c)this._update&&this._update(u,l),i[s]=null;else if(h>1&&c>1)this._updateManyToMany&&this._updateManyToMany(u,l),i[s]=null;else if(h>1)for(var p=0;p1)for(var a=0;a30}var vm,ym,mm,_m,xm,wm,bm,Sm=j,Mm=E,Cm="undefined"==typeof Int32Array?Array:Int32Array,Tm=["hasItemOption","_nameList","_idList","_invertedIndicesMap","_dimSummary","userOutput","_rawData","_dimValueGetter","_nameDimIdx","_idDimIdx","_nameRepeatCount"],Im=["_approximateExtent"],Dm=function(){function t(t,e){var n;this.type="list",this._dimOmitted=!1,this._nameList=[],this._idList=[],this._visual={},this._layout={},this._itemVisuals=[],this._itemLayouts=[],this._graphicEls=[],this._approximateExtent={},this._calculationInfo={},this.hasItemOption=!1,this.TRANSFERABLE_METHODS=["cloneShallow","downSample","lttbDownSample","map"],this.CHANGABLE_METHODS=["filterSelf","selectRange"],this.DOWNSAMPLE_METHODS=["downSample","lttbDownSample"];var i=!1;pm(t)?(n=t.dimensions,this._dimOmitted=t.isDimensionOmitted(),this._schema=t):(i=!0,n=t),n=n||["x","y"];for(var r={},o=[],a={},s=!1,l={},u=0;u=e)){var n=this._store.getProvider();this._updateOrdinalMeta();var i=this._nameList,r=this._idList;if(n.getSource().sourceFormat===yp&&!n.pure)for(var o=[],a=t;a0},t.prototype.ensureUniqueItemVisual=function(t,e){var n=this._itemVisuals,i=n[t];i||(i=n[t]={});var r=i[e];return null==r&&(G(r=this.getVisual(e))?r=r.slice():Sm(r)&&(r=k({},r)),i[e]=r),r},t.prototype.setItemVisual=function(t,e,n){var i=this._itemVisuals[t]||{};this._itemVisuals[t]=i,Sm(e)?k(i,e):i[e]=n},t.prototype.clearAllVisual=function(){this._visual={},this._itemVisuals=[]},t.prototype.setLayout=function(t,e){Sm(t)?k(this._layout,t):this._layout[t]=e},t.prototype.getLayout=function(t){return this._layout[t]},t.prototype.getItemLayout=function(t){return this._itemLayouts[t]},t.prototype.setItemLayout=function(t,e,n){this._itemLayouts[t]=n?k(this._itemLayouts[t]||{},e):e},t.prototype.clearItemLayouts=function(){this._itemLayouts.length=0},t.prototype.setItemGraphicEl=function(t,e){!function(t,e,n,i){if(i){var r=Us(i);r.dataIndex=n,r.dataType=e,r.seriesIndex=t,r.ssrType="chart","group"===i.type&&i.traverse((function(i){var r=Us(i);r.seriesIndex=t,r.dataIndex=n,r.dataType=e,r.ssrType="chart"}))}}(this.hostModel&&this.hostModel.seriesIndex,this.dataType,t,e),this._graphicEls[t]=e},t.prototype.getItemGraphicEl=function(t){return this._graphicEls[t]},t.prototype.eachItemGraphicEl=function(t,e){z(this._graphicEls,(function(n,i){n&&t&&t.call(e,n,i)}))},t.prototype.cloneShallow=function(e){return e||(e=new t(this._schema?this._schema:Mm(this.dimensions,this._getDimInfo,this),this.hostModel)),xm(e,this),e._store=this._store,e},t.prototype.wrapMethod=function(t,e){var n=this[t];U(n)&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var t=n.apply(this,arguments);return e.apply(this,[t].concat(ot(arguments)))})},t.internalField=(vm=function(t){var e=t._invertedIndicesMap;z(e,(function(n,i){var r=t._dimInfos[i],o=r.ordinalMeta,a=t._store;if(o){n=e[i]=new Cm(o.categories.length);for(var s=0;s1&&(s+="__ec__"+u),i[e]=s}})),t}();function km(t,e){Dd(t)||(t=Ad(t));var n=(e=e||{}).coordDimensions||[],i=e.dimensionsDefine||t.dimensionsDefine||[],r=gt(),o=[],a=function(t,e,n,i){var r=Math.max(t.dimensionsDetectedCount||1,e.length,n.length,i||0);return z(e,(function(t){var e;j(t)&&(e=t.dimsDef)&&(r=Math.max(r,e.length))})),r}(t,n,i,e.dimensionsCount),s=e.canOmitUnusedDimensions&&gm(a),l=i===t.dimensionsDefine,u=l?fm(t):dm(i),h=e.encodeDefine;!h&&e.encodeDefaulter&&(h=e.encodeDefaulter(t,a));for(var c=gt(h),p=new ff(a),d=0;d0&&(i.name=r+(o-1)),o++,e.set(r,o)}}(o),new cm({source:t,dimensions:o,fullDimensionCount:a,dimensionOmitted:s})}function Am(t,e,n){if(n||e.hasKey(t)){for(var i=0;e.hasKey(t+i);)i++;t+=i}return e.set(t,!0),t}var Pm=function(t){this.coordSysDims=[],this.axisMap=gt(),this.categoryAxisMap=gt(),this.coordSysName=t};var Lm={cartesian2d:function(t,e,n,i){var r=t.getReferringComponents("xAxis",Po).models[0],o=t.getReferringComponents("yAxis",Po).models[0];e.coordSysDims=["x","y"],n.set("x",r),n.set("y",o),Om(r)&&(i.set("x",r),e.firstCategoryDimIndex=0),Om(o)&&(i.set("y",o),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=1))},singleAxis:function(t,e,n,i){var r=t.getReferringComponents("singleAxis",Po).models[0];e.coordSysDims=["single"],n.set("single",r),Om(r)&&(i.set("single",r),e.firstCategoryDimIndex=0)},polar:function(t,e,n,i){var r=t.getReferringComponents("polar",Po).models[0],o=r.findAxisModel("radiusAxis"),a=r.findAxisModel("angleAxis");e.coordSysDims=["radius","angle"],n.set("radius",o),n.set("angle",a),Om(o)&&(i.set("radius",o),e.firstCategoryDimIndex=0),Om(a)&&(i.set("angle",a),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=1))},geo:function(t,e,n,i){e.coordSysDims=["lng","lat"]},parallel:function(t,e,n,i){var r=t.ecModel,o=r.getComponent("parallel",t.get("parallelIndex")),a=e.coordSysDims=o.dimensions.slice();z(o.parallelAxisIndex,(function(t,o){var s=r.getComponent("parallelAxis",t),l=a[o];n.set(l,s),Om(s)&&(i.set(l,s),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=o))}))}};function Om(t){return"category"===t.get("type")}function Rm(t,e,n){var i,r,o,a=(n=n||{}).byIndex,s=n.stackedCoordDimension;!function(t){return!pm(t.schema)}(e)?(r=e.schema,i=r.dimensions,o=e.store):i=e;var l,u,h,c,p=!(!t||!t.get("stack"));if(z(i,(function(t,e){Z(t)&&(i[e]=t={name:t}),p&&!t.isExtraCoord&&(a||l||!t.ordinalMeta||(l=t),u||"ordinal"===t.type||"time"===t.type||s&&s!==t.coordDim||(u=t))})),!u||a||l||(a=!0),u){h="__\0ecstackresult_"+t.id,c="__\0ecstackedover_"+t.id,l&&(l.createInvertedIndices=!0);var d=u.coordDim,f=u.type,g=0;z(i,(function(t){t.coordDim===d&&g++}));var v={name:h,coordDim:d,coordDimIndex:g,type:f,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:i.length},y={name:c,coordDim:c,coordDimIndex:g+1,type:f,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:i.length+1};r?(o&&(v.storeDimIndex=o.ensureCalculationDimension(c,f),y.storeDimIndex=o.ensureCalculationDimension(h,f)),r.appendCalculationDimension(v),r.appendCalculationDimension(y)):(i.push(v),i.push(y))}return{stackedDimension:u&&u.name,stackedByDimension:l&&l.name,isStackedByIndex:a,stackedOverDimension:c,stackResultDimension:h}}function Nm(t,e){return!!e&&e===t.getCalculationInfo("stackedDimension")}function zm(t,e){return Nm(t,e)?t.getCalculationInfo("stackResultDimension"):e}function Em(t,e,n){n=n||{};var i,r=e.getSourceManager(),o=!1;t?(o=!0,i=Ad(t)):o=(i=r.getSource()).sourceFormat===yp;var a=function(t){var e=t.get("coordinateSystem"),n=new Pm(e),i=Lm[e];if(i)return i(t,n,n.axisMap,n.categoryAxisMap),n}(e),s=function(t,e){var n,i=t.get("coordinateSystem"),r=$p.get(i);return e&&e.coordSysDims&&(n=E(e.coordSysDims,(function(t){var n={name:t},i=e.axisMap.get(t);if(i){var r=i.get("type");n.type=function(t){return"category"===t?"ordinal":"time"===t?"time":"float"}(r)}return n}))),n||(n=r&&(r.getDimensionsInfo?r.getDimensionsInfo():r.dimensions.slice())||["x","y"]),n}(e,a),l=n.useEncodeDefaulter,u=U(l)?l:l?W(kp,s,e):null,h=km(i,{coordDimensions:s,generateCoord:n.generateCoord,encodeDefine:e.getEncode(),encodeDefaulter:u,canOmitUnusedDimensions:!o}),c=function(t,e,n){var i,r;return n&&z(t,(function(t,o){var a=t.coordDim,s=n.categoryAxisMap.get(a);s&&(null==i&&(i=o),t.ordinalMeta=s.getOrdinalMeta(),e&&(t.createInvertedIndices=!0)),null!=t.otherDims.itemName&&(r=!0)})),r||null==i||(t[i].otherDims.itemName=0),i}(h.dimensions,n.createInvertedIndices,a),p=o?null:r.getSharedDataStore(h),d=Rm(e,{schema:h,store:p}),f=new Dm(h,e);f.setCalculationInfo(d);var g=null!=c&&function(t){if(t.sourceFormat===yp){return!G(mo(function(t){var e=0;for(;ee[1]&&(e[1]=t[1])},t.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},t.prototype.getExtent=function(){return this._extent.slice()},t.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=t),isNaN(e)||(n[1]=e)},t.prototype.isInExtentRange=function(t){return this._extent[0]<=t&&this._extent[1]>=t},t.prototype.isBlank=function(){return this._isBlank},t.prototype.setBlank=function(t){this._isBlank=t},t}();Go(Bm);var Vm=0,Fm=function(){function t(t){this.categories=t.categories||[],this._needCollect=t.needCollect,this._deduplication=t.deduplication,this.uid=++Vm}return t.createByAxisModel=function(e){var n=e.option,i=n.data,r=i&&E(i,Hm);return new t({categories:r,needCollect:!r,deduplication:!1!==n.dedplication})},t.prototype.getOrdinal=function(t){return this._getOrCreateMap().get(t)},t.prototype.parseAndCollect=function(t){var e,n=this._needCollect;if(!Z(t)&&!n)return t;if(n&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,e;var i=this._getOrCreateMap();return null==(e=i.get(t))&&(n?(e=this.categories.length,this.categories[e]=t,i.set(t,e)):e=NaN),e},t.prototype._getOrCreateMap=function(){return this._map||(this._map=gt(this.categories))},t}();function Hm(t){return j(t)&&null!=t.value?t.value:t+""}function Wm(t){return"interval"===t.type||"log"===t.type}function Gm(t,e,n,i){var r={},o=t[1]-t[0],a=r.interval=io(o/e,!0);null!=n&&ai&&(a=r.interval=i);var s=r.intervalPrecision=Zm(a);return function(t,e){!isFinite(t[0])&&(t[0]=e[0]),!isFinite(t[1])&&(t[1]=e[1]),Ym(t,0,e),Ym(t,1,e),t[0]>t[1]&&(t[0]=t[1])}(r.niceTickExtent=[Ur(Math.ceil(t[0]/a)*a,s),Ur(Math.floor(t[1]/a)*a,s)],t),r}function Um(t){var e=Math.pow(10,no(t)),n=t/e;return n?2===n?n=3:3===n?n=5:n*=2:n=1,Ur(n*e)}function Zm(t){return Yr(t)+2}function Ym(t,e,n){t[e]=Math.max(Math.min(t[e],n[1]),n[0])}function Xm(t,e){return t>=e[0]&&t<=e[1]}function jm(t,e){return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])}function qm(t,e){return t*(e[1]-e[0])+e[0]}var Km=function(t){function e(e){var n=t.call(this,e)||this;n.type="ordinal";var i=n.getSetting("ordinalMeta");return i||(i=new Fm({})),G(i)&&(i=new Fm({categories:E(i,(function(t){return j(t)?t.value:t}))})),n._ordinalMeta=i,n._extent=n.getSetting("extent")||[0,i.categories.length-1],n}return n(e,t),e.prototype.parse=function(t){return null==t?NaN:Z(t)?this._ordinalMeta.getOrdinal(t):Math.round(t)},e.prototype.contain=function(t){return Xm(t=this.parse(t),this._extent)&&null!=this._ordinalMeta.categories[t]},e.prototype.normalize=function(t){return jm(t=this._getTickNumber(this.parse(t)),this._extent)},e.prototype.scale=function(t){return t=Math.round(qm(t,this._extent)),this.getRawOrdinalNumber(t)},e.prototype.getTicks=function(){for(var t=[],e=this._extent,n=e[0];n<=e[1];)t.push({value:n}),n++;return t},e.prototype.getMinorTicks=function(t){},e.prototype.setSortInfo=function(t){if(null!=t){for(var e=t.ordinalNumbers,n=this._ordinalNumbersByTick=[],i=this._ticksByOrdinalNumber=[],r=0,o=this._ordinalMeta.categories.length,a=Math.min(o,e.length);r=0&&t=0&&t=t},e.prototype.getOrdinalMeta=function(){return this._ordinalMeta},e.prototype.calcNiceTicks=function(){},e.prototype.calcNiceExtent=function(){},e.type="ordinal",e}(Bm);Bm.registerClass(Km);var $m=Ur,Qm=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="interval",e._interval=0,e._intervalPrecision=2,e}return n(e,t),e.prototype.parse=function(t){return t},e.prototype.contain=function(t){return Xm(t,this._extent)},e.prototype.normalize=function(t){return jm(t,this._extent)},e.prototype.scale=function(t){return qm(t,this._extent)},e.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=parseFloat(t)),isNaN(e)||(n[1]=parseFloat(e))},e.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1]),this.setExtent(e[0],e[1])},e.prototype.getInterval=function(){return this._interval},e.prototype.setInterval=function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=Zm(t)},e.prototype.getTicks=function(t){var e=this._interval,n=this._extent,i=this._niceExtent,r=this._intervalPrecision,o=[];if(!e)return o;n[0]1e4)return[];var s=o.length?o[o.length-1].value:i[1];return n[1]>s&&(t?o.push({value:$m(s+e,r)}):o.push({value:n[1]})),o},e.prototype.getMinorTicks=function(t){for(var e=this.getTicks(!0),n=[],i=this.getExtent(),r=1;ri[0]&&h0&&(o=null===o?s:Math.min(o,s))}n[i]=o}}return n}(t),n=[];return z(t,(function(t){var i,r=t.coordinateSystem.getBaseAxis(),o=r.getExtent();if("category"===r.type)i=r.getBandWidth();else if("value"===r.type||"time"===r.type){var a=r.dim+"_"+r.index,s=e[a],l=Math.abs(o[1]-o[0]),u=r.scale.getExtent(),h=Math.abs(u[1]-u[0]);i=s?l/h*s:l}else{var c=t.getData();i=Math.abs(o[1]-o[0])/c.count()}var p=Gr(t.get("barWidth"),i),d=Gr(t.get("barMaxWidth"),i),f=Gr(t.get("barMinWidth")||(l_(t)?.5:1),i),g=t.get("barGap"),v=t.get("barCategoryGap");n.push({bandWidth:i,barWidth:p,barMaxWidth:d,barMinWidth:f,barGap:g,barCategoryGap:v,axisKey:i_(r),stackId:n_(t)})})),function(t){var e={};z(t,(function(t,n){var i=t.axisKey,r=t.bandWidth,o=e[i]||{bandWidth:r,remainedWidth:r,autoWidthCount:0,categoryGap:null,gap:"20%",stacks:{}},a=o.stacks;e[i]=o;var s=t.stackId;a[s]||o.autoWidthCount++,a[s]=a[s]||{width:0,maxWidth:0};var l=t.barWidth;l&&!a[s].width&&(a[s].width=l,l=Math.min(o.remainedWidth,l),o.remainedWidth-=l);var u=t.barMaxWidth;u&&(a[s].maxWidth=u);var h=t.barMinWidth;h&&(a[s].minWidth=h);var c=t.barGap;null!=c&&(o.gap=c);var p=t.barCategoryGap;null!=p&&(o.categoryGap=p)}));var n={};return z(e,(function(t,e){n[e]={};var i=t.stacks,r=t.bandWidth,o=t.categoryGap;if(null==o){var a=F(i).length;o=Math.max(35-4*a,15)+"%"}var s=Gr(o,r),l=Gr(t.gap,1),u=t.remainedWidth,h=t.autoWidthCount,c=(u-s)/(h+(h-1)*l);c=Math.max(c,0),z(i,(function(t){var e=t.maxWidth,n=t.minWidth;if(t.width){i=t.width;e&&(i=Math.min(i,e)),n&&(i=Math.max(i,n)),t.width=i,u-=i+l*i,h--}else{var i=c;e&&ei&&(i=n),i!==c&&(t.width=i,u-=i+l*i,h--)}})),c=(u-s)/(h+(h-1)*l),c=Math.max(c,0);var p,d=0;z(i,(function(t,e){t.width||(t.width=c),p=t,d+=t.width*(1+l)})),p&&(d-=p.width*l);var f=-d/2;z(i,(function(t,i){n[e][i]=n[e][i]||{bandWidth:r,offset:f,width:t.width},f+=t.width*(1+l)}))})),n}(n)}function a_(t,e){var n=r_(t,e),i=o_(n);z(n,(function(t){var e=t.getData(),n=t.coordinateSystem.getBaseAxis(),r=n_(t),o=i[i_(n)][r],a=o.offset,s=o.width;e.setLayout({bandWidth:o.bandWidth,offset:a,size:s})}))}function s_(t){return t.coordinateSystem&&"cartesian2d"===t.coordinateSystem.type}function l_(t){return t.pipelineContext&&t.pipelineContext.large}var u_=function(t){function e(e){var n=t.call(this,e)||this;return n.type="time",n}return n(e,t),e.prototype.getLabel=function(t){var e=this.getSetting("useUTC");return Ic(t.value,wc[function(t){switch(t){case"year":case"month":return"day";case"millisecond":return"millisecond";default:return"second"}}(Cc(this._minLevelUnit))]||wc.second,e,this.getSetting("locale"))},e.prototype.getFormattedLabel=function(t,e,n){var i=this.getSetting("useUTC");return function(t,e,n,i,r){var o=null;if(Z(n))o=n;else if(U(n))o=n(t.value,e,{level:t.level});else{var a=k({},_c);if(t.level>0)for(var s=0;s=0;--s)if(l[u]){o=l[u];break}o=o||a.none}if(G(o)){var h=null==t.level?0:t.level>=0?t.level:o.length+t.level;o=o[h=Math.min(h,o.length-1)]}}return Ic(new Date(t.value),o,r,i)}(t,e,n,this.getSetting("locale"),i)},e.prototype.getTicks=function(){var t=this._interval,e=this._extent,n=[];if(!t)return n;n.push({value:e[0],level:0});var i=this.getSetting("useUTC"),r=function(t,e,n,i){var r=1e4,o=Sc,a=0;function s(t,e,n,r,o,a,s){for(var l=new Date(e),u=e,h=l[r]();u1&&0===u&&o.unshift({value:o[0].value-p})}}for(u=0;u=i[0]&&y<=i[1]&&c++)}var m=(i[1]-i[0])/e;if(c>1.5*m&&p>m/1.5)break;if(u.push(g),c>m||t===o[d])break}h=[]}}0;var _=V(E(u,(function(t){return V(t,(function(t){return t.value>=i[0]&&t.value<=i[1]&&!t.notAdd}))})),(function(t){return t.length>0})),x=[],w=_.length-1;for(d=0;d<_.length;++d)for(var b=_[d],S=0;Sn&&(this._approxInterval=n);var o=h_.length,a=Math.min(function(t,e,n,i){for(;n>>1;t[r][1]16?16:t>7.5?7:t>3.5?4:t>1.5?2:1}function p_(t){return(t/=2592e6)>6?6:t>3?3:t>2?2:1}function d_(t){return(t/=vc)>12?12:t>6?6:t>3.5?4:t>2?2:1}function f_(t,e){return(t/=e?gc:fc)>30?30:t>20?20:t>15?15:t>10?10:t>5?5:t>2?2:1}function g_(t){return io(t,!0)}function v_(t,e,n){var i=new Date(t);switch(Cc(e)){case"year":case"month":i[Bc(n)](0);case"day":i[Vc(n)](1);case"hour":i[Fc(n)](0);case"minute":i[Hc(n)](0);case"second":i[Wc(n)](0),i[Gc(n)](0)}return i.getTime()}Bm.registerClass(u_);var y_=Bm.prototype,m_=Qm.prototype,__=Ur,x_=Math.floor,w_=Math.ceil,b_=Math.pow,S_=Math.log,M_=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="log",e.base=10,e._originalScale=new Qm,e._interval=0,e}return n(e,t),e.prototype.getTicks=function(t){var e=this._originalScale,n=this._extent,i=e.getExtent();return E(m_.getTicks.call(this,t),(function(t){var e=t.value,r=Ur(b_(this.base,e));return r=e===n[0]&&this._fixMin?T_(r,i[0]):r,{value:r=e===n[1]&&this._fixMax?T_(r,i[1]):r}}),this)},e.prototype.setExtent=function(t,e){var n=S_(this.base);t=S_(Math.max(0,t))/n,e=S_(Math.max(0,e))/n,m_.setExtent.call(this,t,e)},e.prototype.getExtent=function(){var t=this.base,e=y_.getExtent.call(this);e[0]=b_(t,e[0]),e[1]=b_(t,e[1]);var n=this._originalScale.getExtent();return this._fixMin&&(e[0]=T_(e[0],n[0])),this._fixMax&&(e[1]=T_(e[1],n[1])),e},e.prototype.unionExtent=function(t){this._originalScale.unionExtent(t);var e=this.base;t[0]=S_(t[0])/S_(e),t[1]=S_(t[1])/S_(e),y_.unionExtent.call(this,t)},e.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},e.prototype.calcNiceTicks=function(t){t=t||10;var e=this._extent,n=e[1]-e[0];if(!(n===1/0||n<=0)){var i=eo(n);for(t/n*i<=.5&&(i*=10);!isNaN(i)&&Math.abs(i)<1&&Math.abs(i)>0;)i*=10;var r=[Ur(w_(e[0]/i)*i),Ur(x_(e[1]/i)*i)];this._interval=i,this._niceExtent=r}},e.prototype.calcNiceExtent=function(t){m_.calcNiceExtent.call(this,t),this._fixMin=t.fixMin,this._fixMax=t.fixMax},e.prototype.parse=function(t){return t},e.prototype.contain=function(t){return Xm(t=S_(t)/S_(this.base),this._extent)},e.prototype.normalize=function(t){return jm(t=S_(t)/S_(this.base),this._extent)},e.prototype.scale=function(t){return t=qm(t,this._extent),b_(this.base,t)},e.type="log",e}(Bm),C_=M_.prototype;function T_(t,e){return __(t,Yr(e))}C_.getMinorTicks=m_.getMinorTicks,C_.getLabel=m_.getLabel,Bm.registerClass(M_);var I_=function(){function t(t,e,n){this._prepareParams(t,e,n)}return t.prototype._prepareParams=function(t,e,n){n[1]0&&s>0&&!l&&(a=0),a<0&&s<0&&!u&&(s=0));var c=this._determinedMin,p=this._determinedMax;return null!=c&&(a=c,l=!0),null!=p&&(s=p,u=!0),{min:a,max:s,minFixed:l,maxFixed:u,isBlank:h}},t.prototype.modifyDataMinMax=function(t,e){this[k_[t]]=e},t.prototype.setDeterminedMinMax=function(t,e){var n=D_[t];this[n]=e},t.prototype.freeze=function(){this.frozen=!0},t}(),D_={min:"_determinedMin",max:"_determinedMax"},k_={min:"_dataMin",max:"_dataMax"};function A_(t,e,n){var i=t.rawExtentInfo;return i||(i=new I_(t,e,n),t.rawExtentInfo=i,i)}function P_(t,e){return null==e?null:et(e)?NaN:t.parse(e)}function L_(t,e){var n=t.type,i=A_(t,e,t.getExtent()).calculate();t.setBlank(i.isBlank);var r=i.min,o=i.max,a=e.ecModel;if(a&&"time"===n){var s=r_("bar",a),l=!1;if(z(s,(function(t){l=l||t.getBaseAxis()===e.axis})),l){var u=o_(s),h=function(t,e,n,i){var r=n.axis.getExtent(),o=r[1]-r[0],a=function(t,e,n){if(t&&e){var i=t[i_(e)];return null!=i&&null!=n?i[n_(n)]:i}}(i,n.axis);if(void 0===a)return{min:t,max:e};var s=1/0;z(a,(function(t){s=Math.min(t.offset,s)}));var l=-1/0;z(a,(function(t){l=Math.max(t.offset+t.width,l)})),s=Math.abs(s),l=Math.abs(l);var u=s+l,h=e-t,c=h/(1-(s+l)/o)-h;return e+=c*(l/u),t-=c*(s/u),{min:t,max:e}}(r,o,e,u);r=h.min,o=h.max}}return{extent:[r,o],fixMin:i.minFixed,fixMax:i.maxFixed}}function O_(t,e){var n=e,i=L_(t,n),r=i.extent,o=n.get("splitNumber");t instanceof M_&&(t.base=n.get("logBase"));var a=t.type,s=n.get("interval"),l="interval"===a||"time"===a;t.setExtent(r[0],r[1]),t.calcNiceExtent({splitNumber:o,fixMin:i.fixMin,fixMax:i.fixMax,minInterval:l?n.get("minInterval"):null,maxInterval:l?n.get("maxInterval"):null}),null!=s&&t.setInterval&&t.setInterval(s)}function R_(t,e){if(e=e||t.get("type"))switch(e){case"category":return new Km({ordinalMeta:t.getOrdinalMeta?t.getOrdinalMeta():t.getCategories(),extent:[1/0,-1/0]});case"time":return new u_({locale:t.ecModel.getLocaleModel(),useUTC:t.ecModel.get("useUTC")});default:return new(Bm.getClass(e)||Qm)}}function N_(t){var e,n,i=t.getLabelModel().get("formatter"),r="category"===t.type?t.scale.getExtent()[0]:null;return"time"===t.scale.type?(n=i,function(e,i){return t.scale.getFormattedLabel(e,i,n)}):Z(i)?function(e){return function(n){var i=t.scale.getLabel(n);return e.replace("{value}",null!=i?i:"")}}(i):U(i)?(e=i,function(n,i){return null!=r&&(i=n.value-r),e(z_(t,n),i,null!=n.level?{level:n.level}:null)}):function(e){return t.scale.getLabel(e)}}function z_(t,e){return"category"===t.type?t.scale.getLabel(e):e.value}function E_(t,e){var n=e*Math.PI/180,i=t.width,r=t.height,o=i*Math.abs(Math.cos(n))+Math.abs(r*Math.sin(n)),a=i*Math.abs(Math.sin(n))+Math.abs(r*Math.cos(n));return new Le(t.x,t.y,o,a)}function B_(t){var e=t.get("interval");return null==e?"auto":e}function V_(t){return"category"===t.type&&0===B_(t.getLabelModel())}function F_(t,e){var n={};return z(t.mapDimensionsAll(e),(function(e){n[zm(t,e)]=!0})),F(n)}var H_=function(){function t(){}return t.prototype.getNeedCrossZero=function(){return!this.option.scale},t.prototype.getCoordSysModel=function(){},t}();var W_={isDimensionStacked:Nm,enableDataStack:Rm,getStackedDimension:zm};var G_=Object.freeze({__proto__:null,createList:function(t){return Em(null,t)},getLayoutRect:op,dataStack:W_,createScale:function(t,e){var n=e;e instanceof ic||(n=new ic(e));var i=R_(n);return i.setExtent(t[0],t[1]),O_(i,n),i},mixinAxisModelCommonMethods:function(t){R(t,H_)},getECData:Us,createTextStyle:function(t,e){return Eh(t,null,null,"normal"!==(e=e||{}).state)},createDimensions:function(t,e){return km(t,e).dimensions},createSymbol:uv,enableHoverEmphasis:Al});function U_(t,e){return Math.abs(t-e)<1e-8}function Z_(t,e,n){var i=0,r=t[0];if(!r)return!1;for(var o=1;on&&(t=r,n=a)}if(t)return function(t){for(var e=0,n=0,i=0,r=t.length,o=t[r-1][0],a=t[r-1][1],s=0;s>1^-(1&s),l=l>>1^-(1&l),r=s+=r,o=l+=o,i.push([s/n,l/n])}return i}function ex(t,e){return E(V((t=function(t){if(!t.UTF8Encoding)return t;var e=t,n=e.UTF8Scale;return null==n&&(n=1024),z(e.features,(function(t){var e=t.geometry,i=e.encodeOffsets,r=e.coordinates;if(i)switch(e.type){case"LineString":e.coordinates=tx(r,i,n);break;case"Polygon":case"MultiLineString":J_(r,i,n);break;case"MultiPolygon":z(r,(function(t,e){return J_(t,i[e],n)}))}})),e.UTF8Encoding=!1,e}(t)).features,(function(t){return t.geometry&&t.properties&&t.geometry.coordinates.length>0})),(function(t){var n=t.properties,i=t.geometry,r=[];switch(i.type){case"Polygon":var o=i.coordinates;r.push(new K_(o[0],o.slice(1)));break;case"MultiPolygon":z(i.coordinates,(function(t){t[0]&&r.push(new K_(t[0],t.slice(1)))}));break;case"LineString":r.push(new $_([i.coordinates]));break;case"MultiLineString":r.push(new $_(i.coordinates))}var a=new Q_(n[e||"name"],r,n.cp);return a.properties=n,a}))}var nx=Object.freeze({__proto__:null,linearMap:Wr,round:Ur,asc:Zr,getPrecision:Yr,getPrecisionSafe:Xr,getPixelPrecision:jr,getPercentWithPrecision:function(t,e,n){return t[e]&&qr(t,n)[e]||0},MAX_SAFE_INTEGER:9007199254740991,remRadian:$r,isRadianAroundZero:Qr,parseDate:to,quantity:eo,quantityExponent:no,nice:io,quantile:function(t,e){var n=(t.length-1)*e+1,i=Math.floor(n),r=+t[i-1],o=n-i;return o?r+o*(t[i]-r):r},reformIntervals:function(t){t.sort((function(t,e){return s(t,e,0)?-1:1}));for(var e=-1/0,n=1,i=0;i0&&(n.sort(),n.unshift(n[0]),n.push(n[n.length-1])),n}function ux(t){var e=t.getLabelModel().get("customValues");if(e){var n=N_(t);return{labels:lx(t,e).map((function(e){var i={value:e};return{formattedLabel:n(i),rawLabel:t.scale.getLabel(i),tickValue:e}}))}}return"category"===t.type?function(t){var e=t.getLabelModel(),n=cx(t,e);return!e.get("show")||t.scale.isBlank()?{labels:[],labelCategoryInterval:n.labelCategoryInterval}:n}(t):function(t){var e=t.scale.getTicks(),n=N_(t);return{labels:E(e,(function(e,i){return{level:e.level,formattedLabel:n(e,i),rawLabel:t.scale.getLabel(e),tickValue:e.value}}))}}(t)}function hx(t,e){var n=t.getTickModel().get("customValues");return n?{ticks:lx(t,n)}:"category"===t.type?function(t,e){var n,i,r=px(t,"ticks"),o=B_(e),a=dx(r,o);if(a)return a;e.get("show")&&!t.scale.isBlank()||(n=[]);if(U(o))n=vx(t,o,!0);else if("auto"===o){var s=cx(t,t.getLabelModel());i=s.labelCategoryInterval,n=E(s.labels,(function(t){return t.tickValue}))}else n=gx(t,i=o,!0);return fx(r,o,{ticks:n,tickCategoryInterval:i})}(t,e):{ticks:E(t.scale.getTicks(),(function(t){return t.value}))}}function cx(t,e){var n,i,r=px(t,"labels"),o=B_(e),a=dx(r,o);return a||(U(o)?n=vx(t,o):(i="auto"===o?function(t){var e=sx(t).autoInterval;return null!=e?e:sx(t).autoInterval=t.calculateCategoryInterval()}(t):o,n=gx(t,i)),fx(r,o,{labels:n,labelCategoryInterval:i}))}function px(t,e){return sx(t)[e]||(sx(t)[e]=[])}function dx(t,e){for(var n=0;n1&&h/l>2&&(u=Math.round(Math.ceil(u/l)*l));var c=V_(t),p=a.get("showMinLabel")||c,d=a.get("showMaxLabel")||c;p&&u!==o[0]&&g(o[0]);for(var f=u;f<=o[1];f+=l)g(f);function g(t){var e={value:t};s.push(n?t:{formattedLabel:i(e),rawLabel:r.getLabel(e),tickValue:t})}return d&&f-l!==o[1]&&g(o[1]),s}function vx(t,e,n){var i=t.scale,r=N_(t),o=[];return z(i.getTicks(),(function(t){var a=i.getLabel(t),s=t.value;e(t.value,a)&&o.push(n?s:{formattedLabel:r(t),rawLabel:a,tickValue:s})})),o}var yx=[0,1],mx=function(){function t(t,e,n){this.onBand=!1,this.inverse=!1,this.dim=t,this.scale=e,this._extent=n||[0,0]}return t.prototype.contain=function(t){var e=this._extent,n=Math.min(e[0],e[1]),i=Math.max(e[0],e[1]);return t>=n&&t<=i},t.prototype.containData=function(t){return this.scale.contain(t)},t.prototype.getExtent=function(){return this._extent.slice()},t.prototype.getPixelPrecision=function(t){return jr(t||this.scale.getExtent(),this._extent)},t.prototype.setExtent=function(t,e){var n=this._extent;n[0]=t,n[1]=e},t.prototype.dataToCoord=function(t,e){var n=this._extent,i=this.scale;return t=i.normalize(t),this.onBand&&"ordinal"===i.type&&_x(n=n.slice(),i.count()),Wr(t,yx,n,e)},t.prototype.coordToData=function(t,e){var n=this._extent,i=this.scale;this.onBand&&"ordinal"===i.type&&_x(n=n.slice(),i.count());var r=Wr(t,n,yx,e);return this.scale.scale(r)},t.prototype.pointToData=function(t,e){},t.prototype.getTicksCoords=function(t){var e=(t=t||{}).tickModel||this.getTickModel(),n=E(hx(this,e).ticks,(function(t){return{coord:this.dataToCoord("ordinal"===this.scale.type?this.scale.getRawOrdinalNumber(t):t),tickValue:t}}),this);return function(t,e,n,i){var r=e.length;if(!t.onBand||n||!r)return;var o,a,s=t.getExtent();if(1===r)e[0].coord=s[0],o=e[1]={coord:s[1]};else{var l=e[r-1].tickValue-e[0].tickValue,u=(e[r-1].coord-e[0].coord)/l;z(e,(function(t){t.coord-=u/2})),a=1+t.scale.getExtent()[1]-e[r-1].tickValue,o={coord:e[r-1].coord+u*a},e.push(o)}var h=s[0]>s[1];c(e[0].coord,s[0])&&(i?e[0].coord=s[0]:e.shift());i&&c(s[0],e[0].coord)&&e.unshift({coord:s[0]});c(s[1],o.coord)&&(i?o.coord=s[1]:e.pop());i&&c(o.coord,s[1])&&e.push({coord:s[1]});function c(t,e){return t=Ur(t),e=Ur(e),h?t>e:t0&&t<100||(t=5),E(this.scale.getMinorTicks(t),(function(t){return E(t,(function(t){return{coord:this.dataToCoord(t),tickValue:t}}),this)}),this)},t.prototype.getViewLabels=function(){return ux(this).labels},t.prototype.getLabelModel=function(){return this.model.getModel("axisLabel")},t.prototype.getTickModel=function(){return this.model.getModel("axisTick")},t.prototype.getBandWidth=function(){var t=this._extent,e=this.scale.getExtent(),n=e[1]-e[0]+(this.onBand?1:0);0===n&&(n=1);var i=Math.abs(t[1]-t[0]);return Math.abs(i)/n},t.prototype.calculateCategoryInterval=function(){return function(t){var e=function(t){var e=t.getLabelModel();return{axisRotate:t.getRotate?t.getRotate():t.isHorizontal&&!t.isHorizontal()?90:0,labelRotate:e.get("rotate")||0,font:e.getFont()}}(t),n=N_(t),i=(e.axisRotate-e.labelRotate)/180*Math.PI,r=t.scale,o=r.getExtent(),a=r.count();if(o[1]-o[0]<1)return 0;var s=1;a>40&&(s=Math.max(1,Math.floor(a/40)));for(var l=o[0],u=t.dataToCoord(l+1)-t.dataToCoord(l),h=Math.abs(u*Math.cos(i)),c=Math.abs(u*Math.sin(i)),p=0,d=0;l<=o[1];l+=s){var f,g,v=gr(n({value:l}),e.font,"center","top");f=1.3*v.width,g=1.3*v.height,p=Math.max(p,f,7),d=Math.max(d,g,7)}var y=p/h,m=d/c;isNaN(y)&&(y=1/0),isNaN(m)&&(m=1/0);var _=Math.max(0,Math.floor(Math.min(y,m))),x=sx(t.model),w=t.getExtent(),b=x.lastAutoInterval,S=x.lastTickCount;return null!=b&&null!=S&&Math.abs(b-_)<=1&&Math.abs(S-a)<=1&&b>_&&x.axisExtent0===w[0]&&x.axisExtent1===w[1]?_=b:(x.lastTickCount=a,x.lastAutoInterval=_,x.axisExtent0=w[0],x.axisExtent1=w[1]),_}(this)},t}();function _x(t,e){var n=(t[1]-t[0])/e/2;t[0]+=n,t[1]-=n}function xx(t,e,n,i,r,o,a,s){var l=r-t,u=o-e,h=n-t,c=i-e,p=Math.sqrt(h*h+c*c),d=(l*(h/=p)+u*(c/=p))/p;s&&(d=Math.min(Math.max(d,0),1)),d*=p;var f=a[0]=t+d*h,g=a[1]=e+d*c;return Math.sqrt((f-r)*(f-r)+(g-o)*(g-o))}var bx=new Se,Sx=new Se,Mx=new Se,Cx=new Se,Tx=new Se,Ix=[],Dx=new Se;function kx(t,e){if(e<=180&&e>0){e=e/180*Math.PI,bx.fromArray(t[0]),Sx.fromArray(t[1]),Mx.fromArray(t[2]),Se.sub(Cx,bx,Sx),Se.sub(Tx,Mx,Sx);var n=Cx.len(),i=Tx.len();if(!(n<.001||i<.001)){Cx.scale(1/n),Tx.scale(1/i);var r=Cx.dot(Tx);if(Math.cos(e)1&&Se.copy(Dx,Mx),Dx.toArray(t[1])}}}}function Ax(t,e,n){if(n<=180&&n>0){n=n/180*Math.PI,bx.fromArray(t[0]),Sx.fromArray(t[1]),Mx.fromArray(t[2]),Se.sub(Cx,Sx,bx),Se.sub(Tx,Mx,Sx);var i=Cx.len(),r=Tx.len();if(!(i<.001||r<.001))if(Cx.scale(1/i),Tx.scale(1/r),Cx.dot(e)=a)Se.copy(Dx,Mx);else{Dx.scaleAndAdd(Tx,o/Math.tan(Math.PI/2-s));var l=Mx.x!==Sx.x?(Dx.x-Sx.x)/(Mx.x-Sx.x):(Dx.y-Sx.y)/(Mx.y-Sx.y);if(isNaN(l))return;l<0?Se.copy(Dx,Sx):l>1&&Se.copy(Dx,Mx)}Dx.toArray(t[1])}}}function Px(t,e,n,i){var r="normal"===n,o=r?t:t.ensureState(n);o.ignore=e;var a=i.get("smooth");a&&!0===a&&(a=.3),o.shape=o.shape||{},a>0&&(o.shape.smooth=a);var s=i.getModel("lineStyle").getLineStyle();r?t.useStyle(s):o.style=s}function Lx(t,e){var n=e.smooth,i=e.points;if(i)if(t.moveTo(i[0][0],i[0][1]),n>0&&i.length>=3){var r=Rt(i[0],i[1]),o=Rt(i[1],i[2]);if(!r||!o)return t.lineTo(i[1][0],i[1][1]),void t.lineTo(i[2][0],i[2][1]);var a=Math.min(r,o)*n,s=Et([],i[1],i[0],a/r),l=Et([],i[1],i[2],a/o),u=Et([],s,l,.5);t.bezierCurveTo(s[0],s[1],s[0],s[1],u[0],u[1]),t.bezierCurveTo(l[0],l[1],l[0],l[1],i[2][0],i[2][1])}else for(var h=1;h0&&o&&x(-h/a,0,a);var f,g,v=t[0],y=t[a-1];return m(),f<0&&w(-f,.8),g<0&&w(g,.8),m(),_(f,g,1),_(g,f,-1),m(),f<0&&b(-f),g<0&&b(g),u}function m(){f=v.rect[e]-i,g=r-y.rect[e]-y.rect[n]}function _(t,e,n){if(t<0){var i=Math.min(e,-t);if(i>0){x(i*n,0,a);var r=i+t;r<0&&w(-r*n,1)}else w(-t*n,1)}}function x(n,i,r){0!==n&&(u=!0);for(var o=i;o0)for(l=0;l0;l--)x(-o[l-1]*c,l,a)}}function b(t){var e=t<0?-1:1;t=Math.abs(t);for(var n=Math.ceil(t/(a-1)),i=0;i0?x(n,0,i+1):x(-n,a-i-1,a),(t-=n)<=0)return}}(t,"y","height",e,n,i)}var Rx=Math.sin,Nx=Math.cos,zx=Math.PI,Ex=2*Math.PI,Bx=180/zx,Vx=function(){function t(){}return t.prototype.reset=function(t){this._start=!0,this._d=[],this._str="",this._p=Math.pow(10,t||4)},t.prototype.moveTo=function(t,e){this._add("M",t,e)},t.prototype.lineTo=function(t,e){this._add("L",t,e)},t.prototype.bezierCurveTo=function(t,e,n,i,r,o){this._add("C",t,e,n,i,r,o)},t.prototype.quadraticCurveTo=function(t,e,n,i){this._add("Q",t,e,n,i)},t.prototype.arc=function(t,e,n,i,r,o){this.ellipse(t,e,n,n,0,i,r,o)},t.prototype.ellipse=function(t,e,n,i,r,o,a,s){var l=a-o,u=!s,h=Math.abs(l),c=ri(h-Ex)||(u?l>=Ex:-l>=Ex),p=l>0?l%Ex:l%Ex+Ex,d=!1;d=!!c||!ri(h)&&p>=zx==!!u;var f=t+n*Nx(o),g=e+i*Rx(o);this._start&&this._add("M",f,g);var v=Math.round(r*Bx);if(c){var y=1/this._p,m=(u?1:-1)*(Ex-y);this._add("A",n,i,v,1,+u,t+n*Nx(o+m),e+i*Rx(o+m)),y>.01&&this._add("A",n,i,v,0,+u,f,g)}else{var _=t+n*Nx(a),x=e+i*Rx(a);this._add("A",n,i,v,+d,+u,_,x)}},t.prototype.rect=function(t,e,n,i){this._add("M",t,e),this._add("l",n,0),this._add("l",0,i),this._add("l",-n,0),this._add("Z")},t.prototype.closePath=function(){this._d.length>0&&this._add("Z")},t.prototype._add=function(t,e,n,i,r,o,a,s,l){for(var u=[],h=this._p,c=1;c"}(r,o)+("style"!==r?te(a):a||"")+(i?""+n+E(i,(function(e){return t(e)})).join(n)+n:"")+("")}(t)}function $x(t){return{zrId:t,shadowCache:{},patternCache:{},gradientCache:{},clipPathCache:{},defs:{},cssNodes:{},cssAnims:{},cssStyleCache:{},cssAnimIdx:0,shadowIdx:0,gradientIdx:0,patternIdx:0,clipPathIdx:0}}function Qx(t,e,n,i){return qx("svg","root",{width:t,height:e,xmlns:Zx,"xmlns:xlink":Yx,version:"1.1",baseProfile:"full",viewBox:!!i&&"0 0 "+t+" "+e},n)}var Jx=0;function tw(){return Jx++}var ew={cubicIn:"0.32,0,0.67,0",cubicOut:"0.33,1,0.68,1",cubicInOut:"0.65,0,0.35,1",quadraticIn:"0.11,0,0.5,0",quadraticOut:"0.5,1,0.89,1",quadraticInOut:"0.45,0,0.55,1",quarticIn:"0.5,0,0.75,0",quarticOut:"0.25,1,0.5,1",quarticInOut:"0.76,0,0.24,1",quinticIn:"0.64,0,0.78,0",quinticOut:"0.22,1,0.36,1",quinticInOut:"0.83,0,0.17,1",sinusoidalIn:"0.12,0,0.39,0",sinusoidalOut:"0.61,1,0.88,1",sinusoidalInOut:"0.37,0,0.63,1",exponentialIn:"0.7,0,0.84,0",exponentialOut:"0.16,1,0.3,1",exponentialInOut:"0.87,0,0.13,1",circularIn:"0.55,0,1,0.45",circularOut:"0,0.55,0.45,1",circularInOut:"0.85,0,0.15,1"},nw="transform-origin";function iw(t,e,n){var i=k({},t.shape);k(i,e),t.buildPath(n,i);var r=new Vx;return r.reset(fi(t)),n.rebuildPath(r,1),r.generateStr(),r.getStr()}function rw(t,e){var n=e.originX,i=e.originY;(n||i)&&(t[nw]=n+"px "+i+"px")}var ow={fill:"fill",opacity:"opacity",lineWidth:"stroke-width",lineDashOffset:"stroke-dashoffset"};function aw(t,e){var n=e.zrId+"-ani-"+e.cssAnimIdx++;return e.cssAnims[n]=t,n}function sw(t){return Z(t)?ew[t]?"cubic-bezier("+ew[t]+")":Cn(t)?t:"":""}function lw(t,e,n,i){var r=t.animators,o=r.length,a=[];if(t instanceof Eu){var s=function(t,e,n){var i,r,o=t.shape.paths,a={};if(z(o,(function(t){var e=$x(n.zrId);e.animation=!0,lw(t,{},e,!0);var o=e.cssAnims,s=e.cssNodes,l=F(o),u=l.length;if(u){var h=o[r=l[u-1]];for(var c in h){var p=h[c];a[c]=a[c]||{d:""},a[c].d+=p.d||""}for(var d in s){var f=s[d].animation;f.indexOf(r)>=0&&(i=f)}}})),i){e.d=!1;var s=aw(a,n);return i.replace(r,s)}}(t,e,n);if(s)a.push(s);else if(!o)return}else if(!o)return;for(var l={},u=0;u0})).length)return aw(h,n)+" "+r[0]+" both"}for(var v in l){(s=g(l[v]))&&a.push(s)}if(a.length){var y=n.zrId+"-cls-"+tw();n.cssNodes["."+y]={animation:a.join(",")},e.class=y}}function uw(t,e,n,i){var r=JSON.stringify(t),o=n.cssStyleCache[r];o||(o=n.zrId+"-cls-"+tw(),n.cssStyleCache[r]=o,n.cssNodes["."+o+(i?":hover":"")]=t),e.class=e.class?e.class+" "+o:o}var hw=Math.round;function cw(t){return t&&Z(t.src)}function pw(t){return t&&U(t.toDataURL)}function dw(t,e,n,i){Ux((function(r,o){var a="fill"===r||"stroke"===r;a&&pi(o)?Mw(e,t,r,i):a&&ui(o)?Cw(n,t,r,i):t[r]=a&&"none"===o?"transparent":o}),e,n,!1),function(t,e,n){var i=t.style;if(function(t){return t&&(t.shadowBlur||t.shadowOffsetX||t.shadowOffsetY)}(i)){var r=function(t){var e=t.style,n=t.getGlobalScale();return[e.shadowColor,(e.shadowBlur||0).toFixed(2),(e.shadowOffsetX||0).toFixed(2),(e.shadowOffsetY||0).toFixed(2),n[0],n[1]].join(",")}(t),o=n.shadowCache,a=o[r];if(!a){var s=t.getGlobalScale(),l=s[0],u=s[1];if(!l||!u)return;var h=i.shadowOffsetX||0,c=i.shadowOffsetY||0,p=i.shadowBlur,d=ni(i.shadowColor),f=d.opacity,g=d.color,v=p/2/l+" "+p/2/u;a=n.zrId+"-s"+n.shadowIdx++,n.defs[a]=qx("filter",a,{id:a,x:"-100%",y:"-100%",width:"300%",height:"300%"},[qx("feDropShadow","",{dx:h/l,dy:c/u,stdDeviation:v,"flood-color":g,"flood-opacity":f})]),o[r]=a}e.filter=di(a)}}(n,t,i)}function fw(t,e){var n=Br(e);n&&(n.each((function(e,n){null!=e&&(t[(Xx+n).toLowerCase()]=e+"")})),e.isSilent()&&(t[Xx+"silent"]="true"))}function gw(t){return ri(t[0]-1)&&ri(t[1])&&ri(t[2])&&ri(t[3]-1)}function vw(t,e,n){if(e&&(!function(t){return ri(t[4])&&ri(t[5])}(e)||!gw(e))){var i=n?10:1e4;t.transform=gw(e)?"translate("+hw(e[4]*i)/i+" "+hw(e[5]*i)/i+")":function(t){return"matrix("+oi(t[0])+","+oi(t[1])+","+oi(t[2])+","+oi(t[3])+","+ai(t[4])+","+ai(t[5])+")"}(e)}}function yw(t,e,n){for(var i=t.points,r=[],o=0;o=0&&a||o;s&&(r=Jn(s))}var l=i.lineWidth;l&&(l/=!i.strokeNoScale&&t.transform?t.transform[0]:1);var u={cursor:"pointer"};r&&(u.fill=r),i.stroke&&(u.stroke=i.stroke),l&&(u["stroke-width"]=l),uw(u,e,n,!0)}}(t,o,e),qx(s,t.id+"",o)}function Sw(t,e){return t instanceof vs?bw(t,e):t instanceof ws?function(t,e){var n=t.style,i=n.image;if(i&&!Z(i)&&(cw(i)?i=i.src:pw(i)&&(i=i.toDataURL())),i){var r=n.x||0,o=n.y||0,a={href:i,width:n.width,height:n.height};return r&&(a.x=r),o&&(a.y=o),vw(a,t.transform),dw(a,n,t,e),fw(a,t),e.animation&&lw(t,a,e),qx("image",t.id+"",a)}}(t,e):t instanceof ms?function(t,e){var n=t.style,i=n.text;if(null!=i&&(i+=""),i&&!isNaN(n.x)&&!isNaN(n.y)){var r=n.font||a,s=n.x||0,l=function(t,e,n){return"top"===n?t+=e/2:"bottom"===n&&(t-=e/2),t}(n.y||0,mr(r),n.textBaseline),u={"dominant-baseline":"central","text-anchor":si[n.textAlign]||n.textAlign};if(Es(n)){var h="",c=n.fontStyle,p=Ns(n.fontSize);if(!parseFloat(p))return;var d=n.fontFamily||o,f=n.fontWeight;h+="font-size:"+p+";font-family:"+d+";",c&&"normal"!==c&&(h+="font-style:"+c+";"),f&&"normal"!==f&&(h+="font-weight:"+f+";"),u.style=h}else u.style="font: "+r;return i.match(/\s/)&&(u["xml:space"]="preserve"),s&&(u.x=s),l&&(u.y=l),vw(u,t.transform),dw(u,n,t,e),fw(u,t),e.animation&&lw(t,u,e),qx("text",t.id+"",u,void 0,i)}}(t,e):void 0}function Mw(t,e,n,i){var r,o=t[n],a={gradientUnits:o.global?"userSpaceOnUse":"objectBoundingBox"};if(hi(o))r="linearGradient",a.x1=o.x,a.y1=o.y,a.x2=o.x2,a.y2=o.y2;else{if(!ci(o))return void 0;r="radialGradient",a.cx=it(o.x,.5),a.cy=it(o.y,.5),a.r=it(o.r,.5)}for(var s=o.colorStops,l=[],u=0,h=s.length;ul?Fw(t,null==n[c+1]?null:n[c+1].elm,n,s,c):Hw(t,e,a,l))}(n,i,r):zw(r)?(zw(t.text)&&Ow(n,""),Fw(n,null,r,0,r.length-1)):zw(i)?Hw(n,i,0,i.length-1):zw(t.text)&&Ow(n,""):t.text!==e.text&&(zw(i)&&Hw(n,i,0,i.length-1),Ow(n,e.text)))}var Uw=0,Zw=function(){function t(t,e,n){if(this.type="svg",this.refreshHover=Yw("refreshHover"),this.configLayer=Yw("configLayer"),this.storage=e,this._opts=n=k({},n),this.root=t,this._id="zr"+Uw++,this._oldVNode=Qx(n.width,n.height),t&&!n.ssr){var i=this._viewport=document.createElement("div");i.style.cssText="position:relative;overflow:hidden";var r=this._svgDom=this._oldVNode.elm=jx("svg");Ww(null,this._oldVNode),i.appendChild(r),t.appendChild(i)}this.resize(n.width,n.height)}return t.prototype.getType=function(){return this.type},t.prototype.getViewportRoot=function(){return this._viewport},t.prototype.getViewportRootOffset=function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},t.prototype.getSvgDom=function(){return this._svgDom},t.prototype.refresh=function(){if(this.root){var t=this.renderToVNode({willUpdate:!0});t.attrs.style="position:absolute;left:0;top:0;user-select:none",function(t,e){if(Bw(t,e))Gw(t,e);else{var n=t.elm,i=Pw(n);Vw(e),null!==i&&(Dw(i,e.elm,Lw(n)),Hw(i,[t],0,0))}}(this._oldVNode,t),this._oldVNode=t}},t.prototype.renderOneToVNode=function(t){return Sw(t,$x(this._id))},t.prototype.renderToVNode=function(t){t=t||{};var e=this.storage.getDisplayList(!0),n=this._width,i=this._height,r=$x(this._id);r.animation=t.animation,r.willUpdate=t.willUpdate,r.compress=t.compress,r.emphasis=t.emphasis;var o=[],a=this._bgVNode=function(t,e,n,i){var r;if(n&&"none"!==n)if(r=qx("rect","bg",{width:t,height:e,x:"0",y:"0"}),pi(n))Mw({fill:n},r.attrs,"fill",i);else if(ui(n))Cw({style:{fill:n},dirty:xt,getBoundingRect:function(){return{width:t,height:e}}},r.attrs,"fill",i);else{var o=ni(n),a=o.color,s=o.opacity;r.attrs.fill=a,s<1&&(r.attrs["fill-opacity"]=s)}return r}(n,i,this._backgroundColor,r);a&&o.push(a);var s=t.compress?null:this._mainVNode=qx("g","main",{},[]);this._paintList(e,r,s?s.children:o),s&&o.push(s);var l=E(F(r.defs),(function(t){return r.defs[t]}));if(l.length&&o.push(qx("defs","defs",{},l)),t.animation){var u=function(t,e,n){var i=(n=n||{}).newline?"\n":"",r=" {"+i,o=i+"}",a=E(F(t),(function(e){return e+r+E(F(t[e]),(function(n){return n+":"+t[e][n]+";"})).join(i)+o})).join(i),s=E(F(e),(function(t){return"@keyframes "+t+r+E(F(e[t]),(function(n){return n+r+E(F(e[t][n]),(function(i){var r=e[t][n][i];return"d"===i&&(r='path("'+r+'")'),i+":"+r+";"})).join(i)+o})).join(i)+o})).join(i);return a||s?[""].join(i):""}(r.cssNodes,r.cssAnims,{newline:!0});if(u){var h=qx("style","stl",{},[],u);o.push(h)}}return Qx(n,i,o,t.useViewBox)},t.prototype.renderToString=function(t){return t=t||{},Kx(this.renderToVNode({animation:it(t.cssAnimation,!0),emphasis:it(t.cssEmphasis,!0),willUpdate:!1,compress:!0,useViewBox:it(t.useViewBox,!0)}),{newline:!0})},t.prototype.setBackgroundColor=function(t){this._backgroundColor=t},t.prototype.getSvgRoot=function(){return this._mainVNode&&this._mainVNode.elm},t.prototype._paintList=function(t,e,n){for(var i,r,o=t.length,a=[],s=0,l=0,u=0;u=0&&(!c||!r||c[f]!==r[f]);f--);for(var g=d-1;g>f;g--)i=a[--s-1];for(var v=f+1;v=a)}}for(var h=this.__startIndex;h15)break}n.prevElClipPaths&&u.restore()};if(p)if(0===p.length)s=l.__endIndex;else for(var x=d.dpr,w=0;w0&&t>i[0]){for(s=0;st);s++);a=n[i[s]]}if(i.splice(s+1,0,t),n[t]=e,!e.virtual)if(a){var l=a.dom;l.nextSibling?o.insertBefore(e.dom,l.nextSibling):o.appendChild(e.dom)}else o.firstChild?o.insertBefore(e.dom,o.firstChild):o.appendChild(e.dom);e.painter||(e.painter=this)}},t.prototype.eachLayer=function(t,e){for(var n=this._zlevelList,i=0;i0?$w:0),this._needsManuallyCompositing),u.__builtin__||C("ZLevel "+l+" has been used by unkown layer "+u.id),u!==o&&(u.__used=!0,u.__startIndex!==r&&(u.__dirty=!0),u.__startIndex=r,u.incremental?u.__drawIndex=-1:u.__drawIndex=r,e(r),o=u),1&s.__dirty&&!s.__inHover&&(u.__dirty=!0,u.incremental&&u.__drawIndex<0&&(u.__drawIndex=r))}e(r),this.eachBuiltinLayer((function(t,e){!t.__used&&t.getElementCount()>0&&(t.__dirty=!0,t.__startIndex=t.__endIndex=t.__drawIndex=0),t.__dirty&&t.__drawIndex<0&&(t.__drawIndex=t.__startIndex)}))},t.prototype.clear=function(){return this.eachBuiltinLayer(this._clearLayer),this},t.prototype._clearLayer=function(t){t.clear()},t.prototype.setBackgroundColor=function(t){this._backgroundColor=t,z(this._layers,(function(t){t.setUnpainted()}))},t.prototype.configLayer=function(t,e){if(e){var n=this._layerConfig;n[t]?I(n[t],e,!0):n[t]=e;for(var i=0;i-1&&(s.style.stroke=s.style.fill,s.style.fill="#fff",s.style.lineWidth=2),e},e.type="series.line",e.dependencies=["grid","polar"],e.defaultOption={z:3,coordinateSystem:"cartesian2d",legendHoverLink:!0,clip:!0,label:{position:"top"},endLabel:{show:!1,valueAnimation:!0,distance:8},lineStyle:{width:2,type:"solid"},emphasis:{scale:!0},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0,universalTransition:{divideShape:"clone"},triggerLineEvent:!1},e}(Wf);function tb(t,e){var n=t.mapDimensionsAll("defaultedLabel"),i=n.length;if(1===i){var r=Yd(t,e,n[0]);return null!=r?r+"":null}if(i){for(var o=[],a=0;a=0&&i.push(e[o])}return i.join(" ")}var nb=function(t){function e(e,n,i,r){var o=t.call(this)||this;return o.updateData(e,n,i,r),o}return n(e,t),e.prototype._createSymbol=function(t,e,n,i,r){this.removeAll();var o=uv(t,-1,-1,2,2,null,r);o.attr({z2:100,culling:!0,scaleX:i[0]/2,scaleY:i[1]/2}),o.drift=ib,this._symbolType=t,this.add(o)},e.prototype.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(null,t)},e.prototype.getSymbolType=function(){return this._symbolType},e.prototype.getSymbolPath=function(){return this.childAt(0)},e.prototype.highlight=function(){yl(this.childAt(0))},e.prototype.downplay=function(){ml(this.childAt(0))},e.prototype.setZ=function(t,e){var n=this.childAt(0);n.zlevel=t,n.z=e},e.prototype.setDraggable=function(t,e){var n=this.childAt(0);n.draggable=t,n.cursor=!e&&t?"move":n.cursor},e.prototype.updateData=function(t,n,i,r){this.silent=!1;var o=t.getItemVisual(n,"symbol")||"circle",a=t.hostModel,s=e.getSymbolSize(t,n),l=o!==this._symbolType,u=r&&r.disableAnimation;if(l){var h=t.getItemVisual(n,"symbolKeepAspect");this._createSymbol(o,t,n,s,h)}else{(p=this.childAt(0)).silent=!1;var c={scaleX:s[0]/2,scaleY:s[1]/2};u?p.attr(c):$u(p,c,a,n),ih(p)}if(this._updateCommon(t,n,s,i,r),l){var p=this.childAt(0);if(!u){c={scaleX:this._sizeX,scaleY:this._sizeY,style:{opacity:p.style.opacity}};p.scaleX=p.scaleY=0,p.style.opacity=0,Qu(p,c,a,n)}}u&&this.childAt(0).stopAnimation("leave")},e.prototype._updateCommon=function(t,e,n,i,r){var o,a,s,l,u,h,c,p,d,f=this.childAt(0),g=t.hostModel;if(i&&(o=i.emphasisItemStyle,a=i.blurItemStyle,s=i.selectItemStyle,l=i.focus,u=i.blurScope,c=i.labelStatesModels,p=i.hoverScale,d=i.cursorStyle,h=i.emphasisDisabled),!i||t.hasItemOption){var v=i&&i.itemModel?i.itemModel:t.getItemModel(e),y=v.getModel("emphasis");o=y.getModel("itemStyle").getItemStyle(),s=v.getModel(["select","itemStyle"]).getItemStyle(),a=v.getModel(["blur","itemStyle"]).getItemStyle(),l=y.get("focus"),u=y.get("blurScope"),h=y.get("disabled"),c=zh(v),p=y.getShallow("scale"),d=v.getShallow("cursor")}var m=t.getItemVisual(e,"symbolRotate");f.attr("rotation",(m||0)*Math.PI/180||0);var _=cv(t.getItemVisual(e,"symbolOffset"),n);_&&(f.x=_[0],f.y=_[1]),d&&f.attr("cursor",d);var x=t.getItemVisual(e,"style"),w=x.fill;if(f instanceof ws){var b=f.style;f.useStyle(k({image:b.image,x:b.x,y:b.y,width:b.width,height:b.height},x))}else f.__isEmptyBrush?f.useStyle(k({},x)):f.useStyle(x),f.style.decal=null,f.setColor(w,r&&r.symbolInnerColor),f.style.strokeNoScale=!0;var S=t.getItemVisual(e,"liftZ"),M=this._z2;null!=S?null==M&&(this._z2=f.z2,f.z2+=S):null!=M&&(f.z2=M,this._z2=null);var C=r&&r.useNameLabel;Nh(f,c,{labelFetcher:g,labelDataIndex:e,defaultText:function(e){return C?t.getName(e):tb(t,e)},inheritColor:w,defaultOpacity:x.opacity}),this._sizeX=n[0]/2,this._sizeY=n[1]/2;var T=f.ensureState("emphasis");T.style=o,f.ensureState("select").style=s,f.ensureState("blur").style=a;var I=null==p||!0===p?Math.max(1.1,3/this._sizeY):isFinite(p)&&p>0?+p:1;T.scaleX=this._sizeX*I,T.scaleY=this._sizeY*I,this.setSymbolScale(1),Pl(this,l,u,h)},e.prototype.setSymbolScale=function(t){this.scaleX=this.scaleY=t},e.prototype.fadeOut=function(t,e,n){var i=this.childAt(0),r=Us(this).dataIndex,o=n&&n.animation;if(this.silent=i.silent=!0,n&&n.fadeLabel){var a=i.getTextContent();a&&th(a,{style:{opacity:0}},e,{dataIndex:r,removeOpt:o,cb:function(){i.removeTextContent()}})}else i.removeTextContent();th(i,{style:{opacity:0},scaleX:0,scaleY:0},e,{dataIndex:r,cb:t,removeOpt:o})},e.getSymbolSize=function(t,e){return hv(t.getItemVisual(e,"symbolSize"))},e}(Pr);function ib(t,e){this.parent.drift(t,e)}function rb(t,e,n,i){return e&&!isNaN(e[0])&&!isNaN(e[1])&&!(i.isIgnore&&i.isIgnore(n))&&!(i.clipShape&&!i.clipShape.contain(e[0],e[1]))&&"none"!==t.getItemVisual(n,"symbol")}function ob(t){return null==t||j(t)||(t={isIgnore:t}),t||{}}function ab(t){var e=t.hostModel,n=e.getModel("emphasis");return{emphasisItemStyle:n.getModel("itemStyle").getItemStyle(),blurItemStyle:e.getModel(["blur","itemStyle"]).getItemStyle(),selectItemStyle:e.getModel(["select","itemStyle"]).getItemStyle(),focus:n.get("focus"),blurScope:n.get("blurScope"),emphasisDisabled:n.get("disabled"),hoverScale:n.get("scale"),labelStatesModels:zh(e),cursorStyle:e.get("cursor")}}var sb=function(){function t(t){this.group=new Pr,this._SymbolCtor=t||nb}return t.prototype.updateData=function(t,e){this._progressiveEls=null,e=ob(e);var n=this.group,i=t.hostModel,r=this._data,o=this._SymbolCtor,a=e.disableAnimation,s=ab(t),l={disableAnimation:a},u=e.getSymbolPoint||function(e){return t.getItemLayout(e)};r||n.removeAll(),t.diff(r).add((function(i){var r=u(i);if(rb(t,r,i,e)){var a=new o(t,i,s,l);a.setPosition(r),t.setItemGraphicEl(i,a),n.add(a)}})).update((function(h,c){var p=r.getItemGraphicEl(c),d=u(h);if(rb(t,d,h,e)){var f=t.getItemVisual(h,"symbol")||"circle",g=p&&p.getSymbolType&&p.getSymbolType();if(!p||g&&g!==f)n.remove(p),(p=new o(t,h,s,l)).setPosition(d);else{p.updateData(t,h,s,l);var v={x:d[0],y:d[1]};a?p.attr(v):$u(p,v,i)}n.add(p),t.setItemGraphicEl(h,p)}else n.remove(p)})).remove((function(t){var e=r.getItemGraphicEl(t);e&&e.fadeOut((function(){n.remove(e)}),i)})).execute(),this._getSymbolPoint=u,this._data=t},t.prototype.updateLayout=function(){var t=this,e=this._data;e&&e.eachItemGraphicEl((function(e,n){var i=t._getSymbolPoint(n);e.setPosition(i),e.markRedraw()}))},t.prototype.incrementalPrepareUpdate=function(t){this._seriesScope=ab(t),this._data=null,this.group.removeAll()},t.prototype.incrementalUpdate=function(t,e,n){function i(t){t.isGroup||(t.incremental=!0,t.ensureState("emphasis").hoverLayer=!0)}this._progressiveEls=[],n=ob(n);for(var r=t.start;r0?n=i[0]:i[1]<0&&(n=i[1]);return n}(r,n),a=i.dim,s=r.dim,l=e.mapDimension(s),u=e.mapDimension(a),h="x"===s||"radius"===s?1:0,c=E(t.dimensions,(function(t){return e.mapDimension(t)})),p=!1,d=e.getCalculationInfo("stackResultDimension");return Nm(e,c[0])&&(p=!0,c[0]=d),Nm(e,c[1])&&(p=!0,c[1]=d),{dataDimsForPoint:c,valueStart:o,valueAxisDim:s,baseAxisDim:a,stacked:!!p,valueDim:l,baseDim:u,baseDataOffset:h,stackedOverDimension:e.getCalculationInfo("stackedOverDimension")}}function ub(t,e,n,i){var r=NaN;t.stacked&&(r=n.get(n.getCalculationInfo("stackedOverDimension"),i)),isNaN(r)&&(r=t.valueStart);var o=t.baseDataOffset,a=[];return a[o]=n.get(t.baseDim,i),a[1-o]=r,e.dataToPoint(a)}var hb=Math.min,cb=Math.max;function pb(t,e){return isNaN(t)||isNaN(e)}function db(t,e,n,i,r,o,a,s,l){for(var u,h,c,p,d,f,g=n,v=0;v=r||g<0)break;if(pb(y,m)){if(l){g+=o;continue}break}if(g===n)t[o>0?"moveTo":"lineTo"](y,m),c=y,p=m;else{var _=y-u,x=m-h;if(_*_+x*x<.5){g+=o;continue}if(a>0){for(var w=g+o,b=e[2*w],S=e[2*w+1];b===y&&S===m&&v=i||pb(b,S))d=y,f=m;else{T=b-u,I=S-h;var A=y-u,P=b-y,L=m-h,O=S-m,R=void 0,N=void 0;if("x"===s){var z=T>0?1:-1;d=y-z*(R=Math.abs(A))*a,f=m,D=y+z*(N=Math.abs(P))*a,k=m}else if("y"===s){var E=I>0?1:-1;d=y,f=m-E*(R=Math.abs(L))*a,D=y,k=m+E*(N=Math.abs(O))*a}else R=Math.sqrt(A*A+L*L),d=y-T*a*(1-(C=(N=Math.sqrt(P*P+O*O))/(N+R))),f=m-I*a*(1-C),k=m+I*a*C,D=hb(D=y+T*a*C,cb(b,y)),k=hb(k,cb(S,m)),D=cb(D,hb(b,y)),f=m-(I=(k=cb(k,hb(S,m)))-m)*R/N,d=hb(d=y-(T=D-y)*R/N,cb(u,y)),f=hb(f,cb(h,m)),D=y+(T=y-(d=cb(d,hb(u,y))))*N/R,k=m+(I=m-(f=cb(f,hb(h,m))))*N/R}t.bezierCurveTo(c,p,d,f,y,m),c=D,p=k}else t.lineTo(y,m)}u=y,h=m,g+=o}return v}var fb=function(){this.smooth=0,this.smoothConstraint=!0},gb=function(t){function e(e){var n=t.call(this,e)||this;return n.type="ec-polyline",n}return n(e,t),e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new fb},e.prototype.buildPath=function(t,e){var n=e.points,i=0,r=n.length/2;if(e.connectNulls){for(;r>0&&pb(n[2*r-2],n[2*r-1]);r--);for(;i=0){var v=a?(h-i)*g+i:(u-n)*g+n;return a?[t,v]:[v,t]}n=u,i=h;break;case o.C:u=r[l++],h=r[l++],c=r[l++],p=r[l++],d=r[l++],f=r[l++];var y=a?gn(n,u,c,d,t,s):gn(i,h,p,f,t,s);if(y>0)for(var m=0;m=0){v=a?dn(i,h,p,f,_):dn(n,u,c,d,_);return a?[t,v]:[v,t]}}n=d,i=f}}},e}(vs),vb=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e}(fb),yb=function(t){function e(e){var n=t.call(this,e)||this;return n.type="ec-polygon",n}return n(e,t),e.prototype.getDefaultShape=function(){return new vb},e.prototype.buildPath=function(t,e){var n=e.points,i=e.stackedOnPoints,r=0,o=n.length/2,a=e.smoothMonotone;if(e.connectNulls){for(;o>0&&pb(n[2*o-2],n[2*o-1]);o--);for(;r=0;a--){var s=t.getDimensionInfo(i[a].dimension);if("x"===(r=s&&s.coordDim)||"y"===r){o=i[a];break}}if(o){var l=e.getAxis(r),u=E(o.stops,(function(t){return{coord:l.toGlobalCoord(l.dataToCoord(t.value)),color:t.color}})),h=u.length,c=o.outerColors.slice();h&&u[0].coord>u[h-1].coord&&(u.reverse(),c.reverse());var p=function(t,e){var n,i,r=[],o=t.length;function a(t,e,n){var i=t.coord;return{coord:n,color:Xn((n-i)/(e.coord-i),[t.color,e.color])}}for(var s=0;se){i?r.push(a(i,l,e)):n&&r.push(a(n,l,0),a(n,l,e));break}n&&(r.push(a(n,l,0)),n=null),r.push(l),i=l}}return r}(u,"x"===r?n.getWidth():n.getHeight()),d=p.length;if(!d&&h)return u[0].coord<0?c[1]?c[1]:u[h-1].color:c[0]?c[0]:u[0].color;var f=p[0].coord-10,g=p[d-1].coord+10,v=g-f;if(v<.001)return"transparent";z(p,(function(t){t.offset=(t.coord-f)/v})),p.push({offset:d?p[d-1].offset:.5,color:c[1]||"transparent"}),p.unshift({offset:d?p[0].offset:.5,color:c[0]||"transparent"});var y=new Vu(0,0,0,0,p,!0);return y[r]=f,y[r+"2"]=g,y}}}function Ib(t,e,n){var i=t.get("showAllSymbol"),r="auto"===i;if(!i||r){var o=n.getAxesByScale("ordinal")[0];if(o&&(!r||!function(t,e){var n=t.getExtent(),i=Math.abs(n[1]-n[0])/t.scale.count();isNaN(i)&&(i=0);for(var r=e.count(),o=Math.max(1,Math.round(r/5)),a=0;ai)return!1;return!0}(o,e))){var a=e.mapDimension(o.dim),s={};return z(o.getViewLabels(),(function(t){var e=o.scale.getRawOrdinalNumber(t.tickValue);s[e]=1})),function(t){return!s.hasOwnProperty(e.get(a,t))}}}}function Db(t,e){return[t[2*e],t[2*e+1]]}function kb(t){if(t.get(["endLabel","show"]))return!0;for(var e=0;e0&&"bolder"===t.get(["emphasis","lineStyle","width"]))&&(d.getState("emphasis").style.lineWidth=+d.style.lineWidth+1);Us(d).seriesIndex=t.seriesIndex,Pl(d,P,L,O);var R=Mb(t.get("smooth")),N=t.get("smoothMonotone");if(d.setShape({smooth:R,smoothMonotone:N,connectNulls:b}),f){var z=a.getCalculationInfo("stackedOnSeries"),E=0;f.useStyle(A(l.getAreaStyle(),{fill:I,opacity:.7,lineJoin:"bevel",decal:a.getVisual("style").decal})),z&&(E=Mb(z.get("smooth"))),f.setShape({smooth:R,stackedOnSmooth:E,smoothMonotone:N,connectNulls:b}),Rl(f,t,"areaStyle"),Us(f).seriesIndex=t.seriesIndex,Pl(f,P,L,O)}var B=function(t){i._changePolyState(t)};a.eachItemGraphicEl((function(t){t&&(t.onHoverStateChange=B)})),this._polyline.onHoverStateChange=B,this._data=a,this._coordSys=r,this._stackedOnPoints=x,this._points=u,this._step=T,this._valueOrigin=m,t.get("triggerLineEvent")&&(this.packEventData(t,d),f&&this.packEventData(t,f))},e.prototype.packEventData=function(t,e){Us(e).eventData={componentType:"series",componentSubType:"line",componentIndex:t.componentIndex,seriesIndex:t.seriesIndex,seriesName:t.name,seriesType:"line"}},e.prototype.highlight=function(t,e,n,i){var r=t.getData(),o=To(r,i);if(this._changePolyState("emphasis"),!(o instanceof Array)&&null!=o&&o>=0){var a=r.getLayout("points"),s=r.getItemGraphicEl(o);if(!s){var l=a[2*o],u=a[2*o+1];if(isNaN(l)||isNaN(u))return;if(this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(l,u))return;var h=t.get("zlevel")||0,c=t.get("z")||0;(s=new nb(r,o)).x=l,s.y=u,s.setZ(h,c);var p=s.getSymbolPath().getTextContent();p&&(p.zlevel=h,p.z=c,p.z2=this._polyline.z2+1),s.__temp=!0,r.setItemGraphicEl(o,s),s.stopSymbolAnimation(!0),this.group.add(s)}s.highlight()}else tg.prototype.highlight.call(this,t,e,n,i)},e.prototype.downplay=function(t,e,n,i){var r=t.getData(),o=To(r,i);if(this._changePolyState("normal"),null!=o&&o>=0){var a=r.getItemGraphicEl(o);a&&(a.__temp?(r.setItemGraphicEl(o,null),this.group.remove(a)):a.downplay())}else tg.prototype.downplay.call(this,t,e,n,i)},e.prototype._changePolyState=function(t){var e=this._polygon;pl(this._polyline,t),e&&pl(e,t)},e.prototype._newPolyline=function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new gb({shape:{points:t},segmentIgnoreThreshold:2,z2:10}),this._lineGroup.add(e),this._polyline=e,e},e.prototype._newPolygon=function(t,e){var n=this._polygon;return n&&this._lineGroup.remove(n),n=new yb({shape:{points:t,stackedOnPoints:e},segmentIgnoreThreshold:2}),this._lineGroup.add(n),this._polygon=n,n},e.prototype._initSymbolLabelAnimation=function(t,e,n){var i,r,o=e.getBaseAxis(),a=o.inverse;"cartesian2d"===e.type?(i=o.isHorizontal(),r=!1):"polar"===e.type&&(i="angle"===o.dim,r=!0);var s=t.hostModel,l=s.get("animationDuration");U(l)&&(l=l(null));var u=s.get("animationDelay")||0,h=U(u)?u(null):u;t.eachItemGraphicEl((function(t,o){var s=t;if(s){var c=[t.x,t.y],p=void 0,d=void 0,f=void 0;if(n)if(r){var g=n,v=e.pointToCoord(c);i?(p=g.startAngle,d=g.endAngle,f=-v[1]/180*Math.PI):(p=g.r0,d=g.r,f=v[0])}else{var y=n;i?(p=y.x,d=y.x+y.width,f=t.x):(p=y.y+y.height,d=y.y,f=t.y)}var m=d===p?0:(f-p)/(d-p);a&&(m=1-m);var _=U(u)?u(o):l*m+h,x=s.getSymbolPath(),w=x.getTextContent();s.attr({scaleX:0,scaleY:0}),s.animateTo({scaleX:1,scaleY:1},{duration:200,setToFinal:!0,delay:_}),w&&w.animateFrom({style:{opacity:0}},{duration:300,delay:_}),x.disableLabelAnimation=!0}}))},e.prototype._initOrUpdateEndLabel=function(t,e,n){var i=t.getModel("endLabel");if(kb(t)){var r=t.getData(),o=this._polyline,a=r.getLayout("points");if(!a)return o.removeTextContent(),void(this._endLabel=null);var s=this._endLabel;s||((s=this._endLabel=new Ps({z2:200})).ignoreClip=!0,o.setTextContent(this._endLabel),o.disableLabelAnimation=!0);var l=function(t){for(var e,n,i=t.length/2;i>0&&(e=t[2*i-2],n=t[2*i-1],isNaN(e)||isNaN(n));i--);return i-1}(a);l>=0&&(Nh(o,zh(t,"endLabel"),{inheritColor:n,labelFetcher:t,labelDataIndex:l,defaultText:function(t,e,n){return null!=n?eb(r,n):tb(r,t)},enableTextSetter:!0},function(t,e){var n=e.getBaseAxis(),i=n.isHorizontal(),r=n.inverse,o=i?r?"right":"left":"center",a=i?"middle":r?"top":"bottom";return{normal:{align:t.get("align")||o,verticalAlign:t.get("verticalAlign")||a}}}(i,e)),o.textConfig.position=null)}else this._endLabel&&(this._polyline.removeTextContent(),this._endLabel=null)},e.prototype._endLabelOnDuring=function(t,e,n,i,r,o,a){var s=this._endLabel,l=this._polyline;if(s){t<1&&null==i.originalX&&(i.originalX=s.x,i.originalY=s.y);var u=n.getLayout("points"),h=n.hostModel,c=h.get("connectNulls"),p=o.get("precision"),d=o.get("distance")||0,f=a.getBaseAxis(),g=f.isHorizontal(),v=f.inverse,y=e.shape,m=v?g?y.x:y.y+y.height:g?y.x+y.width:y.y,_=(g?d:0)*(v?-1:1),x=(g?0:-d)*(v?-1:1),w=g?"x":"y",b=function(t,e,n){for(var i,r,o=t.length/2,a="x"===n?0:1,s=0,l=-1,u=0;u=e||i>=e&&r<=e){l=u;break}s=u,i=r}else i=r;return{range:[s,l],t:(e-i)/(r-i)}}(u,m,w),S=b.range,M=S[1]-S[0],C=void 0;if(M>=1){if(M>1&&!c){var T=Db(u,S[0]);s.attr({x:T[0]+_,y:T[1]+x}),r&&(C=h.getRawValue(S[0]))}else{(T=l.getPointOn(m,w))&&s.attr({x:T[0]+_,y:T[1]+x});var I=h.getRawValue(S[0]),D=h.getRawValue(S[1]);r&&(C=function(t,e,n,i,r){var o=null==e||"auto"===e;if(null==i)return i;if(X(i))return Ur(f=co(n||0,i,r),o?Math.max(Yr(n||0),Yr(i)):e);if(Z(i))return r<1?n:i;for(var a=[],s=n,l=i,u=Math.max(s?s.length:0,l.length),h=0;h0?S[0]:0;T=Db(u,k);r&&(C=h.getRawValue(k)),s.attr({x:T[0]+_,y:T[1]+x})}if(r){var A=Uh(s);"function"==typeof A.setLabelText&&A.setLabelText(C)}}},e.prototype._doUpdateAnimation=function(t,e,n,i,r,o,a){var s=this._polyline,l=this._polygon,u=t.hostModel,h=function(t,e,n,i,r,o,a,s){for(var l=function(t,e){var n=[];return e.diff(t).add((function(t){n.push({cmd:"+",idx:t})})).update((function(t,e){n.push({cmd:"=",idx:e,idx1:t})})).remove((function(t){n.push({cmd:"-",idx:t})})).execute(),n}(t,e),u=[],h=[],c=[],p=[],d=[],f=[],g=[],v=lb(r,e,a),y=t.getLayout("points")||[],m=e.getLayout("points")||[],_=0;_3e3||l&&Sb(p,f)>3e3)return s.stopAnimation(),s.setShape({points:d}),void(l&&(l.stopAnimation(),l.setShape({points:d,stackedOnPoints:f})));s.shape.__points=h.current,s.shape.points=c;var g={shape:{points:d}};h.current!==c&&(g.shape.__points=h.next),s.stopAnimation(),$u(s,g,u),l&&(l.setShape({points:c,stackedOnPoints:p}),l.stopAnimation(),$u(l,{shape:{stackedOnPoints:f}},u),s.shape.points!==l.shape.points&&(l.shape.points=s.shape.points));for(var v=[],y=h.status,m=0;me&&(e=t[n]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,n=0;ne&&(e=o,n=r)}return isFinite(n)?n:NaN},nearest:function(t){return t[0]}},Rb=function(t){return Math.round(t.length/2)};function Nb(t){return{seriesType:t,reset:function(t,e,n){var i=t.getData(),r=t.get("sampling"),o=t.coordinateSystem,a=i.count();if(a>10&&"cartesian2d"===o.type&&r){var s=o.getBaseAxis(),l=o.getOtherAxis(s),u=s.getExtent(),h=n.getDevicePixelRatio(),c=Math.abs(u[1]-u[0])*(h||1),p=Math.round(a/c);if(isFinite(p)&&p>1){"lttb"===r&&t.setData(i.lttbDownSample(i.mapDimension(l.dim),1/p));var d=void 0;Z(r)?d=Ob[r]:U(r)&&(d=r),d&&t.setData(i.downSample(i.mapDimension(l.dim),1/p,d,Rb))}}}}}var zb=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.getInitialData=function(t,e){return Em(null,this,{useEncodeDefaulter:!0})},e.prototype.getMarkerPosition=function(t,e,n){var i=this.coordinateSystem;if(i&&i.clampData){var r=i.clampData(t),o=i.dataToPoint(r);if(n)z(i.getAxes(),(function(t,n){if("category"===t.type&&null!=e){var i=t.getTicksCoords(),a=t.getTickModel().get("alignWithLabel"),s=r[n],l="x1"===e[n]||"y1"===e[n];if(l&&!a&&(s+=1),i.length<2)return;if(2===i.length)return void(o[n]=t.toGlobalCoord(t.getExtent()[l?1:0]));for(var u=void 0,h=void 0,c=1,p=0;ps){h=(d+u)/2;break}1===p&&(c=f-i[0].tickValue)}null==h&&(u?u&&(h=i[i.length-1].coord):h=i[0].coord),o[n]=t.toGlobalCoord(h)}}));else{var a=this.getData(),s=a.getLayout("offset"),l=a.getLayout("size"),u=i.getBaseAxis().isHorizontal()?0:1;o[u]+=s+l/2}return o}return[NaN,NaN]},e.type="series.__base_bar__",e.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod"},e}(Wf);Wf.registerClass(zb);var Eb=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.getInitialData=function(){return Em(null,this,{useEncodeDefaulter:!0,createInvertedIndices:!!this.get("realtimeSort",!0)||null})},e.prototype.getProgressive=function(){return!!this.get("large")&&this.get("progressive")},e.prototype.getProgressiveThreshold=function(){var t=this.get("progressiveThreshold"),e=this.get("largeThreshold");return e>t&&(t=e),t},e.prototype.brushSelector=function(t,e,n){return n.rect(e.getItemLayout(t))},e.type="series.bar",e.dependencies=["grid","polar"],e.defaultOption=ac(zb.defaultOption,{clip:!0,roundCap:!1,showBackground:!1,backgroundStyle:{color:"rgba(180, 180, 180, 0.2)",borderColor:null,borderWidth:0,borderType:"solid",borderRadius:0,shadowBlur:0,shadowColor:null,shadowOffsetX:0,shadowOffsetY:0,opacity:1},select:{itemStyle:{borderColor:"#212121"}},realtimeSort:!1}),e}(zb),Bb=function(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=2*Math.PI,this.clockwise=!0},Vb=function(t){function e(e){var n=t.call(this,e)||this;return n.type="sausage",n}return n(e,t),e.prototype.getDefaultShape=function(){return new Bb},e.prototype.buildPath=function(t,e){var n=e.cx,i=e.cy,r=Math.max(e.r0||0,0),o=Math.max(e.r,0),a=.5*(o-r),s=r+a,l=e.startAngle,u=e.endAngle,h=e.clockwise,c=2*Math.PI,p=h?u-lo)return!0;o=u}return!1},e.prototype._isOrderDifferentInView=function(t,e){for(var n=e.scale,i=n.getExtent(),r=Math.max(0,i[0]),o=Math.min(i[1],n.getOrdinalMeta().categories.length-1);r<=o;++r)if(t.ordinalNumbers[r]!==n.getRawOrdinalNumber(r))return!0},e.prototype._updateSortWithinSameData=function(t,e,n,i){if(this._isOrderChangedWithinSameData(t,e,n)){var r=this._dataSort(t,n,e);this._isOrderDifferentInView(r,n)&&(this._removeOnRenderedListener(i),i.dispatchAction({type:"changeAxisOrder",componentType:n.dim+"Axis",axisId:n.index,sortInfo:r}))}},e.prototype._dispatchInitSort=function(t,e,n){var i=e.baseAxis,r=this._dataSort(t,i,(function(n){return t.get(t.mapDimension(e.otherAxis.dim),n)}));n.dispatchAction({type:"changeAxisOrder",componentType:i.dim+"Axis",isInitSort:!0,axisId:i.index,sortInfo:r})},e.prototype.remove=function(t,e){this._clear(this._model),this._removeOnRenderedListener(e)},e.prototype.dispose=function(t,e){this._removeOnRenderedListener(e)},e.prototype._removeOnRenderedListener=function(t){this._onRendered&&(t.getZr().off("rendered",this._onRendered),this._onRendered=null)},e.prototype._clear=function(t){var e=this.group,n=this._data;t&&t.isAnimationEnabled()&&n&&!this._isLargeDraw?(this._removeBackground(),this._backgroundEls=[],n.eachItemGraphicEl((function(e){nh(e,t,Us(e).dataIndex)}))):e.removeAll(),this._data=null,this._isFirstFrame=!0},e.prototype._removeBackground=function(){this.group.remove(this._backgroundGroup),this._backgroundGroup=null},e.type="bar",e}(tg),Yb={cartesian2d:function(t,e){var n=e.width<0?-1:1,i=e.height<0?-1:1;n<0&&(e.x+=e.width,e.width=-e.width),i<0&&(e.y+=e.height,e.height=-e.height);var r=t.x+t.width,o=t.y+t.height,a=Gb(e.x,t.x),s=Ub(e.x+e.width,r),l=Gb(e.y,t.y),u=Ub(e.y+e.height,o),h=sr?s:a,e.y=c&&l>o?u:l,e.width=h?0:s-a,e.height=c?0:u-l,n<0&&(e.x+=e.width,e.width=-e.width),i<0&&(e.y+=e.height,e.height=-e.height),h||c},polar:function(t,e){var n=e.r0<=e.r?1:-1;if(n<0){var i=e.r;e.r=e.r0,e.r0=i}var r=Ub(e.r,t.r),o=Gb(e.r0,t.r0);e.r=r,e.r0=o;var a=r-o<0;if(n<0){i=e.r;e.r=e.r0,e.r0=i}return a}},Xb={cartesian2d:function(t,e,n,i,r,o,a,s,l){var u=new Ds({shape:k({},i),z2:1});(u.__dataIndex=n,u.name="item",o)&&(u.shape[r?"height":"width"]=0);return u},polar:function(t,e,n,i,r,o,a,s,l){var u=!r&&l?Vb:xu,h=new u({shape:i,z2:1});h.name="item";var c,p,d=tS(r);if(h.calculateTextPosition=(c=d,p=({isRoundCap:u===Vb}||{}).isRoundCap,function(t,e,n){var i=e.position;if(!i||i instanceof Array)return xr(t,e,n);var r=c(i),o=null!=e.distance?e.distance:5,a=this.shape,s=a.cx,l=a.cy,u=a.r,h=a.r0,d=(u+h)/2,f=a.startAngle,g=a.endAngle,v=(f+g)/2,y=p?Math.abs(u-h)/2:0,m=Math.cos,_=Math.sin,x=s+u*m(f),w=l+u*_(f),b="left",S="top";switch(r){case"startArc":x=s+(h-o)*m(v),w=l+(h-o)*_(v),b="center",S="top";break;case"insideStartArc":x=s+(h+o)*m(v),w=l+(h+o)*_(v),b="center",S="bottom";break;case"startAngle":x=s+d*m(f)+Fb(f,o+y,!1),w=l+d*_(f)+Hb(f,o+y,!1),b="right",S="middle";break;case"insideStartAngle":x=s+d*m(f)+Fb(f,-o+y,!1),w=l+d*_(f)+Hb(f,-o+y,!1),b="left",S="middle";break;case"middle":x=s+d*m(v),w=l+d*_(v),b="center",S="middle";break;case"endArc":x=s+(u+o)*m(v),w=l+(u+o)*_(v),b="center",S="bottom";break;case"insideEndArc":x=s+(u-o)*m(v),w=l+(u-o)*_(v),b="center",S="top";break;case"endAngle":x=s+d*m(g)+Fb(g,o+y,!0),w=l+d*_(g)+Hb(g,o+y,!0),b="left",S="middle";break;case"insideEndAngle":x=s+d*m(g)+Fb(g,-o+y,!0),w=l+d*_(g)+Hb(g,-o+y,!0),b="right",S="middle";break;default:return xr(t,e,n)}return(t=t||{}).x=x,t.y=w,t.align=b,t.verticalAlign=S,t}),o){var f=r?"r":"endAngle",g={};h.shape[f]=r?i.r0:i.startAngle,g[f]=i[f],(s?$u:Qu)(h,{shape:g},o)}return h}};function jb(t,e,n,i,r,o,a,s){var l,u;o?(u={x:i.x,width:i.width},l={y:i.y,height:i.height}):(u={y:i.y,height:i.height},l={x:i.x,width:i.width}),s||(a?$u:Qu)(n,{shape:l},e,r,null),(a?$u:Qu)(n,{shape:u},e?t.baseAxis.model:null,r)}function qb(t,e){for(var n=0;n0?1:-1,a=i.height>0?1:-1;return{x:i.x+o*r/2,y:i.y+a*r/2,width:i.width-o*r,height:i.height-a*r}},polar:function(t,e,n){var i=t.getItemLayout(e);return{cx:i.cx,cy:i.cy,r0:i.r0,r:i.r,startAngle:i.startAngle,endAngle:i.endAngle,clockwise:i.clockwise}}};function tS(t){return function(t){var e=t?"Arc":"Angle";return function(t){switch(t){case"start":case"insideStart":case"end":case"insideEnd":return t+e;default:return t}}}(t)}function eS(t,e,n,i,r,o,a,s){var l=e.getItemVisual(n,"style");if(s){if(!o.get("roundCap")){var u=t.shape;k(u,Wb(i.getModel("itemStyle"),u,!0)),t.setShape(u)}}else{var h=i.get(["itemStyle","borderRadius"])||0;t.setShape("r",h)}t.useStyle(l);var c=i.getShallow("cursor");c&&t.attr("cursor",c);var p=s?a?r.r>=r.r0?"endArc":"startArc":r.endAngle>=r.startAngle?"endAngle":"startAngle":a?r.height>=0?"bottom":"top":r.width>=0?"right":"left",d=zh(i);Nh(t,d,{labelFetcher:o,labelDataIndex:n,defaultText:tb(o.getData(),n),inheritColor:l.fill,defaultOpacity:l.opacity,defaultOutsidePosition:p});var f=t.getTextContent();if(s&&f){var g=i.get(["label","position"]);t.textConfig.inside="middle"===g||null,function(t,e,n,i){if(X(i))t.setTextConfig({rotation:i});else if(G(e))t.setTextConfig({rotation:0});else{var r,o=t.shape,a=o.clockwise?o.startAngle:o.endAngle,s=o.clockwise?o.endAngle:o.startAngle,l=(a+s)/2,u=n(e);switch(u){case"startArc":case"insideStartArc":case"middle":case"insideEndArc":case"endArc":r=l;break;case"startAngle":case"insideStartAngle":r=a;break;case"endAngle":case"insideEndAngle":r=s;break;default:return void t.setTextConfig({rotation:0})}var h=1.5*Math.PI-r;"middle"===u&&h>Math.PI/2&&h<1.5*Math.PI&&(h-=Math.PI),t.setTextConfig({rotation:h})}}(t,"outside"===g?p:g,tS(a),i.get(["label","rotate"]))}!function(t,e,n,i){if(t){var r=Uh(t);r.prevValue=r.value,r.value=n;var o=e.normal;r.valueAnimation=o.get("valueAnimation"),r.valueAnimation&&(r.precision=o.get("precision"),r.defaultInterpolatedText=i,r.statesModels=e)}}(f,d,o.getRawValue(n),(function(t){return eb(e,t)}));var v=i.getModel(["emphasis"]);Pl(t,v.get("focus"),v.get("blurScope"),v.get("disabled")),Rl(t,i),function(t){return null!=t.startAngle&&null!=t.endAngle&&t.startAngle===t.endAngle}(r)&&(t.style.fill="none",t.style.stroke="none",z(t.states,(function(t){t.style&&(t.style.fill=t.style.stroke="none")})))}var nS=function(){},iS=function(t){function e(e){var n=t.call(this,e)||this;return n.type="largeBar",n}return n(e,t),e.prototype.getDefaultShape=function(){return new nS},e.prototype.buildPath=function(t,e){for(var n=e.points,i=this.baseDimIdx,r=1-this.baseDimIdx,o=[],a=[],s=this.barWidth,l=0;l=s[0]&&e<=s[0]+l[0]&&n>=s[1]&&n<=s[1]+l[1])return a[h]}return-1}(this,t.offsetX,t.offsetY);Us(this).dataIndex=e>=0?e:null}),30,!1);function aS(t,e,n){if(xb(n,"cartesian2d")){var i=e,r=n.getArea();return{x:t?i.x:r.x,y:t?r.y:i.y,width:t?i.width:r.width,height:t?r.height:i.height}}var o=e;return{cx:(r=n.getArea()).cx,cy:r.cy,r0:t?r.r0:o.r0,r:t?r.r:o.r,startAngle:t?o.startAngle:0,endAngle:t?o.endAngle:2*Math.PI}}var sS=2*Math.PI,lS=Math.PI/180;function uS(t,e){return op(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function hS(t,e){var n=uS(t,e),i=t.get("center"),r=t.get("radius");G(r)||(r=[0,r]);var o,a,s=Gr(n.width,e.getWidth()),l=Gr(n.height,e.getHeight()),u=Math.min(s,l),h=Gr(r[0],u/2),c=Gr(r[1],u/2),p=t.coordinateSystem;if(p){var d=p.dataToPoint(i);o=d[0]||0,a=d[1]||0}else G(i)||(i=[i,i]),o=Gr(i[0],s)+n.x,a=Gr(i[1],l)+n.y;return{cx:o,cy:a,r0:h,r:c}}function cS(t,e,n){e.eachSeriesByType(t,(function(t){var e=t.getData(),i=e.mapDimension("value"),r=uS(t,n),o=hS(t,n),a=o.cx,s=o.cy,l=o.r,u=o.r0,h=-t.get("startAngle")*lS,c=t.get("endAngle"),p=t.get("padAngle")*lS;c="auto"===c?h-sS:-c*lS;var d=t.get("minAngle")*lS+p,f=0;e.each(i,(function(t){!isNaN(t)&&f++}));var g=e.getSum(i),v=Math.PI/(g||f)*2,y=t.get("clockwise"),m=t.get("roseType"),_=t.get("stillShowZeroSum"),x=e.getDataExtent(i);x[0]=0;var w=y?1:-1,b=[h,c],S=w*p/2;qa(b,!y),h=b[0],c=b[1];var M=pS(t);M.startAngle=h,M.endAngle=c,M.clockwise=y;var C=Math.abs(c-h),T=C,I=0,D=h;if(e.setLayout({viewRect:r,r:l}),e.each(i,(function(t,n){var i;if(isNaN(t))e.setItemLayout(n,{angle:NaN,startAngle:NaN,endAngle:NaN,clockwise:y,cx:a,cy:s,r0:u,r:m?NaN:l});else{(i="area"!==m?0===g&&_?v:t*v:C/f)i?h=o=D+w*i/2:(o=D+S,h=r-S),e.setItemLayout(n,{angle:i,startAngle:o,endAngle:h,clockwise:y,cx:a,cy:s,r0:u,r:m?Wr(t,x,[u,l]):l}),D=r}})),Tn?a:o,h=Math.abs(l.label.y-n);if(h>=u.maxY){var c=l.label.x-e-l.len2*r,p=i+l.len,f=Math.abs(c)t.unconstrainedWidth?null:d:null;i.setStyle("width",f)}var g=i.getBoundingRect();o.width=g.width;var v=(i.style.margin||0)+2.1;o.height=g.height+v,o.y-=(o.height-c)/2}}}function vS(t){return"center"===t.position}function yS(t){var e,n,i=t.getData(),r=[],o=!1,a=(t.get("minShowLabelAngle")||0)*dS,s=i.getLayout("viewRect"),l=i.getLayout("r"),u=s.width,h=s.x,c=s.y,p=s.height;function d(t){t.ignore=!0}i.each((function(t){var s=i.getItemGraphicEl(t),c=s.shape,p=s.getTextContent(),f=s.getTextGuideLine(),g=i.getItemModel(t),v=g.getModel("label"),y=v.get("position")||g.get(["emphasis","label","position"]),m=v.get("distanceToLabelLine"),_=v.get("alignTo"),x=Gr(v.get("edgeDistance"),u),w=v.get("bleedMargin"),b=g.getModel("labelLine"),S=b.get("length");S=Gr(S,u);var M=b.get("length2");if(M=Gr(M,u),Math.abs(c.endAngle-c.startAngle)0?"right":"left":A>0?"left":"right"}var V=Math.PI,F=0,H=v.get("rotate");if(X(H))F=H*(V/180);else if("center"===y)F=0;else if("radial"===H||!0===H){F=A<0?-k+V:-k}else if("tangential"===H&&"outside"!==y&&"outer"!==y){var W=Math.atan2(A,P);W<0&&(W=2*V+W),P>0&&(W=V+W),F=W-V}if(o=!!F,p.x=C,p.y=T,p.rotation=F,p.setStyle({verticalAlign:"middle"}),L){p.setStyle({align:D});var G=p.states.select;G&&(G.x+=p.x,G.y+=p.y)}else{var U=p.getBoundingRect().clone();U.applyTransform(p.getComputedTransform());var Z=(p.style.margin||0)+2.1;U.y-=Z/2,U.height+=Z,r.push({label:p,labelLine:f,position:y,len:S,len2:M,minTurnAngle:b.get("minTurnAngle"),maxSurfaceAngle:b.get("maxSurfaceAngle"),surfaceNormal:new Se(A,P),linePoints:I,textAlign:D,labelDistance:m,labelAlignTo:_,edgeDistance:x,bleedMargin:w,rect:U,unconstrainedWidth:U.width,labelStyleWidth:p.style.width})}s.setTextConfig({inside:L})}})),!o&&t.get("avoidLabelOverlap")&&function(t,e,n,i,r,o,a,s){for(var l=[],u=[],h=Number.MAX_VALUE,c=-Number.MAX_VALUE,p=0;p0){for(var l=o.getItemLayout(0),u=1;isNaN(l&&l.startAngle)&&u=n.r0}},e.type="pie",e}(tg);var xS=function(){function t(t,e){this._getDataWithEncodedVisual=t,this._getRawData=e}return t.prototype.getAllNames=function(){var t=this._getRawData();return t.mapArray(t.getName)},t.prototype.containName=function(t){return this._getRawData().indexOfName(t)>=0},t.prototype.indexOfName=function(t){return this._getDataWithEncodedVisual().indexOfName(t)},t.prototype.getItemVisual=function(t,e){return this._getDataWithEncodedVisual().getItemVisual(t,e)},t}(),wS=Io(),bS=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.init=function(e){t.prototype.init.apply(this,arguments),this.legendVisualProvider=new xS(H(this.getData,this),H(this.getRawData,this)),this._defaultLabelLine(e)},e.prototype.mergeOption=function(){t.prototype.mergeOption.apply(this,arguments)},e.prototype.getInitialData=function(){return function(t,e,n){e=G(e)&&{coordDimensions:e}||k({encodeDefine:t.getEncode()},e);var i=t.getSource(),r=km(i,e).dimensions,o=new Dm(r,t);return o.initData(i,n),o}(this,{coordDimensions:["value"],encodeDefaulter:W(Ap,this)})},e.prototype.getDataParams=function(e){var n=this.getData(),i=wS(n),r=i.seats;if(!r){var o=[];n.each(n.mapDimension("value"),(function(t){o.push(t)})),r=i.seats=qr(o,n.hostModel.get("percentPrecision"))}var a=t.prototype.getDataParams.call(this,e);return a.percent=r[e]||0,a.$vars.push("percent"),a},e.prototype._defaultLabelLine=function(t){vo(t,"labelLine",["show"]);var e=t.labelLine,n=t.emphasis.labelLine;e.show=e.show&&t.label.show,n.show=n.show&&t.emphasis.label.show},e.type="series.pie",e.defaultOption={z:2,legendHoverLink:!0,colorBy:"data",center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,endAngle:"auto",padAngle:0,minAngle:0,minShowLabelAngle:0,selectedOffset:10,percentPrecision:2,stillShowZeroSum:!0,left:0,top:0,right:0,bottom:0,width:null,height:null,label:{rotate:0,show:!0,overflow:"truncate",position:"outer",alignTo:"none",edgeDistance:"25%",bleedMargin:10,distanceToLabelLine:5},labelLine:{show:!0,length:15,length2:15,smooth:!1,minTurnAngle:90,maxSurfaceAngle:90,lineStyle:{width:1,type:"solid"}},itemStyle:{borderWidth:1,borderJoin:"round"},showEmptyCircle:!0,emptyCircleStyle:{color:"lightgray",opacity:1},labelLayout:{hideOverlap:!0},emphasis:{scale:!0,scaleSize:5},avoidLabelOverlap:!0,animationType:"expansion",animationDuration:1e3,animationTypeUpdate:"transition",animationEasingUpdate:"cubicInOut",animationDurationUpdate:500,animationEasing:"cubicInOut"},e}(Wf);var SS=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.hasSymbolVisual=!0,n}return n(e,t),e.prototype.getInitialData=function(t,e){return Em(null,this,{useEncodeDefaulter:!0})},e.prototype.getProgressive=function(){var t=this.option.progressive;return null==t?this.option.large?5e3:this.get("progressive"):t},e.prototype.getProgressiveThreshold=function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?1e4:this.get("progressiveThreshold"):t},e.prototype.brushSelector=function(t,e,n){return n.point(e.getItemLayout(t))},e.prototype.getZLevelKey=function(){return this.getData().count()>this.getProgressiveThreshold()?this.id:""},e.type="series.scatter",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={coordinateSystem:"cartesian2d",z:2,legendHoverLink:!0,symbolSize:10,large:!1,largeThreshold:2e3,itemStyle:{opacity:.8},emphasis:{scale:!0},clip:!0,select:{itemStyle:{borderColor:"#212121"}},universalTransition:{divideShape:"clone"}},e}(Wf),MS=function(){},CS=function(t){function e(e){var n=t.call(this,e)||this;return n._off=0,n.hoverDataIdx=-1,n}return n(e,t),e.prototype.getDefaultShape=function(){return new MS},e.prototype.reset=function(){this.notClear=!1,this._off=0},e.prototype.buildPath=function(t,e){var n,i=e.points,r=e.size,o=this.symbolProxy,a=o.shape,s=t.getContext?t.getContext():t,l=s&&r[0]<4,u=this.softClipShape;if(l)this._ctx=s;else{for(this._ctx=null,n=this._off;n=0;s--){var l=2*s,u=i[l]-o/2,h=i[l+1]-a/2;if(t>=u&&e>=h&&t<=u+o&&e<=h+a)return s}return-1},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect();return t=n[0],e=n[1],i.contain(t,e)?(this.hoverDataIdx=this.findDataIndex(t,e))>=0:(this.hoverDataIdx=-1,!1)},e.prototype.getBoundingRect=function(){var t=this._rect;if(!t){for(var e=this.shape,n=e.points,i=e.size,r=i[0],o=i[1],a=1/0,s=1/0,l=-1/0,u=-1/0,h=0;h=0&&(l.dataIndex=n+(t.startIndex||0))}))},t.prototype.remove=function(){this._clear()},t.prototype._clear=function(){this._newAdded=[],this.group.removeAll()},t}(),IS=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=t.getData();this._updateSymbolDraw(i,t).updateData(i,{clipShape:this._getClipShape(t)}),this._finished=!0},e.prototype.incrementalPrepareRender=function(t,e,n){var i=t.getData();this._updateSymbolDraw(i,t).incrementalPrepareUpdate(i),this._finished=!1},e.prototype.incrementalRender=function(t,e,n){this._symbolDraw.incrementalUpdate(t,e.getData(),{clipShape:this._getClipShape(e)}),this._finished=t.end===e.getData().count()},e.prototype.updateTransform=function(t,e,n){var i=t.getData();if(this.group.dirty(),!this._finished||i.count()>1e4)return{update:!0};var r=Lb("").reset(t,e,n);r.progress&&r.progress({start:0,end:i.count(),count:i.count()},i),this._symbolDraw.updateLayout(i)},e.prototype.eachRendered=function(t){this._symbolDraw&&this._symbolDraw.eachRendered(t)},e.prototype._getClipShape=function(t){if(t.get("clip",!0)){var e=t.coordinateSystem;return e&&e.getArea&&e.getArea(.1)}},e.prototype._updateSymbolDraw=function(t,e){var n=this._symbolDraw,i=e.pipelineContext.large;return n&&i===this._isLargeDraw||(n&&n.remove(),n=this._symbolDraw=i?new TS:new sb,this._isLargeDraw=i,this.group.removeAll()),this.group.add(n.group),n},e.prototype.remove=function(t,e){this._symbolDraw&&this._symbolDraw.remove(!0),this._symbolDraw=null},e.prototype.dispose=function(){},e.type="scatter",e}(tg),DS=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.type="grid",e.dependencies=["xAxis","yAxis"],e.layoutMode="box",e.defaultOption={show:!1,z:0,left:"10%",top:60,right:"10%",bottom:70,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"},e}(pp),kS=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getCoordSysModel=function(){return this.getReferringComponents("grid",Po).models[0]},e.type="cartesian2dAxis",e}(pp);R(kS,H_);var AS={show:!0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#6E7079",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#E0E6F1"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(210,219,238,0.2)"]}}},PS=I({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},AS),LS=I({boundaryGap:[0,0],axisLine:{show:"auto"},axisTick:{show:"auto"},splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:"#F4F7FD",width:1}}},AS),OS={category:PS,value:LS,time:I({splitNumber:6,axisLabel:{showMinLabel:!1,showMaxLabel:!1,rich:{primary:{fontWeight:"bold"}}},splitLine:{show:!1}},LS),log:A({logBase:10},LS)},RS={value:1,category:1,time:1,log:1};function NS(t,e,i,r){z(RS,(function(o,a){var s=I(I({},OS[a],!0),r,!0),l=function(t){function i(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e+"Axis."+a,n}return n(i,t),i.prototype.mergeDefaultAndTheme=function(t,e){var n=sp(this),i=n?up(t):{};I(t,e.getTheme().get(a+"Axis")),I(t,this.getDefaultOption()),t.type=zS(t),n&&lp(t,i,n)},i.prototype.optionUpdated=function(){"category"===this.option.type&&(this.__ordinalMeta=Fm.createByAxisModel(this))},i.prototype.getCategories=function(t){var e=this.option;if("category"===e.type)return t?e.data:this.__ordinalMeta.categories},i.prototype.getOrdinalMeta=function(){return this.__ordinalMeta},i.type=e+"Axis."+a,i.defaultOption=s,i}(i);t.registerComponentModel(l)})),t.registerSubTypeDefaulter(e+"Axis",zS)}function zS(t){return t.type||(t.data?"category":"value")}var ES=function(){function t(t){this.type="cartesian",this._dimList=[],this._axes={},this.name=t||""}return t.prototype.getAxis=function(t){return this._axes[t]},t.prototype.getAxes=function(){return E(this._dimList,(function(t){return this._axes[t]}),this)},t.prototype.getAxesByScale=function(t){return t=t.toLowerCase(),V(this.getAxes(),(function(e){return e.scale.type===t}))},t.prototype.addAxis=function(t){var e=t.dim;this._axes[e]=t,this._dimList.push(e)},t}(),BS=["x","y"];function VS(t){return"interval"===t.type||"time"===t.type}var FS=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="cartesian2d",e.dimensions=BS,e}return n(e,t),e.prototype.calcAffineTransform=function(){this._transform=this._invTransform=null;var t=this.getAxis("x").scale,e=this.getAxis("y").scale;if(VS(t)&&VS(e)){var n=t.getExtent(),i=e.getExtent(),r=this.dataToPoint([n[0],i[0]]),o=this.dataToPoint([n[1],i[1]]),a=n[1]-n[0],s=i[1]-i[0];if(a&&s){var l=(o[0]-r[0])/a,u=(o[1]-r[1])/s,h=r[0]-n[0]*l,c=r[1]-i[0]*u,p=this._transform=[l,0,0,u,h,c];this._invTransform=we([],p)}}},e.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAxis("x")},e.prototype.containPoint=function(t){var e=this.getAxis("x"),n=this.getAxis("y");return e.contain(e.toLocalCoord(t[0]))&&n.contain(n.toLocalCoord(t[1]))},e.prototype.containData=function(t){return this.getAxis("x").containData(t[0])&&this.getAxis("y").containData(t[1])},e.prototype.containZone=function(t,e){var n=this.dataToPoint(t),i=this.dataToPoint(e),r=this.getArea(),o=new Le(n[0],n[1],i[0]-n[0],i[1]-n[1]);return r.intersect(o)},e.prototype.dataToPoint=function(t,e,n){n=n||[];var i=t[0],r=t[1];if(this._transform&&null!=i&&isFinite(i)&&null!=r&&isFinite(r))return Bt(n,t,this._transform);var o=this.getAxis("x"),a=this.getAxis("y");return n[0]=o.toGlobalCoord(o.dataToCoord(i,e)),n[1]=a.toGlobalCoord(a.dataToCoord(r,e)),n},e.prototype.clampData=function(t,e){var n=this.getAxis("x").scale,i=this.getAxis("y").scale,r=n.getExtent(),o=i.getExtent(),a=n.parse(t[0]),s=i.parse(t[1]);return(e=e||[])[0]=Math.min(Math.max(Math.min(r[0],r[1]),a),Math.max(r[0],r[1])),e[1]=Math.min(Math.max(Math.min(o[0],o[1]),s),Math.max(o[0],o[1])),e},e.prototype.pointToData=function(t,e){var n=[];if(this._invTransform)return Bt(n,t,this._invTransform);var i=this.getAxis("x"),r=this.getAxis("y");return n[0]=i.coordToData(i.toLocalCoord(t[0]),e),n[1]=r.coordToData(r.toLocalCoord(t[1]),e),n},e.prototype.getOtherAxis=function(t){return this.getAxis("x"===t.dim?"y":"x")},e.prototype.getArea=function(t){t=t||0;var e=this.getAxis("x").getGlobalExtent(),n=this.getAxis("y").getGlobalExtent(),i=Math.min(e[0],e[1])-t,r=Math.min(n[0],n[1])-t,o=Math.max(e[0],e[1])-i+t,a=Math.max(n[0],n[1])-r+t;return new Le(i,r,o,a)},e}(ES),HS=function(t){function e(e,n,i,r,o){var a=t.call(this,e,n,i)||this;return a.index=0,a.type=r||"value",a.position=o||"bottom",a}return n(e,t),e.prototype.isHorizontal=function(){var t=this.position;return"top"===t||"bottom"===t},e.prototype.getGlobalExtent=function(t){var e=this.getExtent();return e[0]=this.toGlobalCoord(e[0]),e[1]=this.toGlobalCoord(e[1]),t&&e[0]>e[1]&&e.reverse(),e},e.prototype.pointToData=function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},e.prototype.setCategorySortInfo=function(t){if("category"!==this.type)return!1;this.model.option.categorySortInfo=t,this.scale.setSortInfo(t)},e}(mx);function WS(t,e,n){n=n||{};var i=t.coordinateSystem,r=e.axis,o={},a=r.getAxesOnZeroOf()[0],s=r.position,l=a?"onZero":s,u=r.dim,h=i.getRect(),c=[h.x,h.x+h.width,h.y,h.y+h.height],p={left:0,right:1,top:0,bottom:1,onZero:2},d=e.get("offset")||0,f="x"===u?[c[2]-d,c[3]+d]:[c[0]-d,c[1]+d];if(a){var g=a.toGlobalCoord(a.dataToCoord(0));f[p.onZero]=Math.max(Math.min(g,f[1]),f[0])}o.position=["y"===u?f[p[l]]:c[0],"x"===u?f[p[l]]:c[3]],o.rotation=Math.PI/2*("x"===u?0:1);o.labelDirection=o.tickDirection=o.nameDirection={top:-1,bottom:1,left:-1,right:1}[s],o.labelOffset=a?f[p[s]]-f[p.onZero]:0,e.get(["axisTick","inside"])&&(o.tickDirection=-o.tickDirection),nt(n.labelInside,e.get(["axisLabel","inside"]))&&(o.labelDirection=-o.labelDirection);var v=e.get(["axisLabel","rotate"]);return o.labelRotate="top"===l?-v:v,o.z2=1,o}function GS(t){return"cartesian2d"===t.get("coordinateSystem")}function US(t){var e={xAxisModel:null,yAxisModel:null};return z(e,(function(n,i){var r=i.replace(/Model$/,""),o=t.getReferringComponents(r,Po).models[0];e[i]=o})),e}var ZS=Math.log;function YS(t,e,n){var i=Qm.prototype,r=i.getTicks.call(n),o=i.getTicks.call(n,!0),a=r.length-1,s=i.getInterval.call(n),l=L_(t,e),u=l.extent,h=l.fixMin,c=l.fixMax;if("log"===t.type){var p=ZS(t.base);u=[ZS(u[0])/p,ZS(u[1])/p]}t.setExtent(u[0],u[1]),t.calcNiceExtent({splitNumber:a,fixMin:h,fixMax:c});var d=i.getExtent.call(t);h&&(u[0]=d[0]),c&&(u[1]=d[1]);var f=i.getInterval.call(t),g=u[0],v=u[1];if(h&&c)f=(v-g)/a;else if(h)for(v=u[0]+f*a;vu[0]&&isFinite(g)&&isFinite(u[0]);)f=Um(f),g=u[1]-f*a;else{t.getTicks().length-1>a&&(f=Um(f));var y=f*a;(g=Ur((v=Math.ceil(u[1]/f)*f)-y))<0&&u[0]>=0?(g=0,v=Ur(y)):v>0&&u[1]<=0&&(v=0,g=-Ur(y))}var m=(r[0].value-o[0].value)/s,_=(r[a].value-o[a].value)/s;i.setExtent.call(t,g+f*m,v+f*_),i.setInterval.call(t,f),(m||_)&&i.setNiceExtent.call(t,g+f,v-f)}var XS=function(){function t(t,e,n){this.type="grid",this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this.axisPointerEnabled=!0,this.dimensions=BS,this._initCartesian(t,e,n),this.model=t}return t.prototype.getRect=function(){return this._rect},t.prototype.update=function(t,e){var n=this._axesMap;function i(t){var e,n=F(t),i=n.length;if(i){for(var r=[],o=i-1;o>=0;o--){var a=t[+n[o]],s=a.model,l=a.scale;Wm(l)&&s.get("alignTicks")&&null==s.get("interval")?r.push(a):(O_(l,s),Wm(l)&&(e=a))}r.length&&(e||O_((e=r.pop()).scale,e.model),z(r,(function(t){YS(t.scale,t.model,e.scale)})))}}this._updateScale(t,this.model),i(n.x),i(n.y);var r={};z(n.x,(function(t){qS(n,"y",t,r)})),z(n.y,(function(t){qS(n,"x",t,r)})),this.resize(this.model,e)},t.prototype.resize=function(t,e,n){var i=t.getBoxLayoutParams(),r=!n&&t.get("containLabel"),o=op(i,{width:e.getWidth(),height:e.getHeight()});this._rect=o;var a=this._axesList;function s(){z(a,(function(t){var e=t.isHorizontal(),n=e?[0,o.width]:[0,o.height],i=t.inverse?1:0;t.setExtent(n[i],n[1-i]),function(t,e){var n=t.getExtent(),i=n[0]+n[1];t.toGlobalCoord="x"===t.dim?function(t){return t+e}:function(t){return i-t+e},t.toLocalCoord="x"===t.dim?function(t){return t-e}:function(t){return i-t+e}}(t,e?o.x:o.y)}))}s(),r&&(z(a,(function(t){if(!t.model.get(["axisLabel","inside"])){var e=function(t){var e=t.model,n=t.scale;if(e.get(["axisLabel","show"])&&!n.isBlank()){var i,r,o=n.getExtent();r=n instanceof Km?n.count():(i=n.getTicks()).length;var a,s=t.getLabelModel(),l=N_(t),u=1;r>40&&(u=Math.ceil(r/40));for(var h=0;h0&&i>0||n<0&&i<0)}(t)}var $S=Math.PI,QS=function(){function t(t,e){this.group=new Pr,this.opt=e,this.axisModel=t,A(e,{labelOffset:0,nameDirection:1,tickDirection:1,labelDirection:1,silent:!0,handleAutoShown:function(){return!0}});var n=new Pr({x:e.position[0],y:e.position[1],rotation:e.rotation});n.updateTransform(),this._transformGroup=n}return t.prototype.hasBuilder=function(t){return!!JS[t]},t.prototype.add=function(t){JS[t](this.opt,this.axisModel,this.group,this._transformGroup)},t.prototype.getGroup=function(){return this.group},t.innerTextLayout=function(t,e,n){var i,r,o=$r(e-t);return Qr(o)?(r=n>0?"top":"bottom",i="center"):Qr(o-$S)?(r=n>0?"bottom":"top",i="center"):(r="middle",i=o>0&&o<$S?n>0?"right":"left":n>0?"left":"right"),{rotation:o,textAlign:i,textVerticalAlign:r}},t.makeAxisEventDataBase=function(t){var e={componentType:t.mainType,componentIndex:t.componentIndex};return e[t.mainType+"Index"]=t.componentIndex,e},t.isLabelSilent=function(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)},t}(),JS={axisLine:function(t,e,n,i){var r=e.get(["axisLine","show"]);if("auto"===r&&t.handleAutoShown&&(r=t.handleAutoShown("axisLine")),r){var o=e.axis.getExtent(),a=i.transform,s=[o[0],0],l=[o[1],0],u=s[0]>l[0];a&&(Bt(s,s,a),Bt(l,l,a));var h=k({lineCap:"round"},e.getModel(["axisLine","lineStyle"]).getLineStyle()),c=new Au({shape:{x1:s[0],y1:s[1],x2:l[0],y2:l[1]},style:h,strokeContainThreshold:t.strokeContainThreshold||5,silent:!0,z2:1});yh(c.shape,c.style.lineWidth),c.anid="line",n.add(c);var p=e.get(["axisLine","symbol"]);if(null!=p){var d=e.get(["axisLine","symbolSize"]);Z(p)&&(p=[p,p]),(Z(d)||X(d))&&(d=[d,d]);var f=cv(e.get(["axisLine","symbolOffset"])||0,d),g=d[0],v=d[1];z([{rotate:t.rotation+Math.PI/2,offset:f[0],r:0},{rotate:t.rotation-Math.PI/2,offset:f[1],r:Math.sqrt((s[0]-l[0])*(s[0]-l[0])+(s[1]-l[1])*(s[1]-l[1]))}],(function(e,i){if("none"!==p[i]&&null!=p[i]){var r=uv(p[i],-g/2,-v/2,g,v,h.stroke,!0),o=e.r+e.offset,a=u?l:s;r.attr({rotation:e.rotate,x:a[0]+o*Math.cos(t.rotation),y:a[1]-o*Math.sin(t.rotation),silent:!0,z2:11}),n.add(r)}}))}}},axisTickLabel:function(t,e,n,i){var r=function(t,e,n,i){var r=n.axis,o=n.getModel("axisTick"),a=o.get("show");"auto"===a&&i.handleAutoShown&&(a=i.handleAutoShown("axisTick"));if(!a||r.scale.isBlank())return;for(var s=o.getModel("lineStyle"),l=i.tickDirection*o.get("length"),u=iM(r.getTicksCoords(),e.transform,l,A(s.getLineStyle(),{stroke:n.get(["axisLine","lineStyle","color"])}),"ticks"),h=0;hc[1]?-1:1,d=["start"===s?c[0]-p*h:"end"===s?c[1]+p*h:(c[0]+c[1])/2,nM(s)?t.labelOffset+l*h:0],f=e.get("nameRotate");null!=f&&(f=f*$S/180),nM(s)?o=QS.innerTextLayout(t.rotation,null!=f?f:t.rotation,l):(o=function(t,e,n,i){var r,o,a=$r(n-t),s=i[0]>i[1],l="start"===e&&!s||"start"!==e&&s;Qr(a-$S/2)?(o=l?"bottom":"top",r="center"):Qr(a-1.5*$S)?(o=l?"top":"bottom",r="center"):(o="middle",r=a<1.5*$S&&a>$S/2?l?"left":"right":l?"right":"left");return{rotation:a,textAlign:r,textVerticalAlign:o}}(t.rotation,s,f||0,c),null!=(a=t.axisNameAvailableWidth)&&(a=Math.abs(a/Math.sin(o.rotation)),!isFinite(a)&&(a=null)));var g=u.getFont(),v=e.get("nameTruncate",!0)||{},y=v.ellipsis,m=nt(t.nameTruncateMaxWidth,v.maxWidth,a),_=new Ps({x:d[0],y:d[1],rotation:o.rotation,silent:QS.isLabelSilent(e),style:Eh(u,{text:r,font:g,overflow:"truncate",width:m,ellipsis:y,fill:u.getTextColor()||e.get(["axisLine","lineStyle","color"]),align:u.get("align")||o.textAlign,verticalAlign:u.get("verticalAlign")||o.textVerticalAlign}),z2:1});if(kh({el:_,componentModel:e,itemName:r}),_.__fullText=r,_.anid="name",e.get("triggerEvent")){var x=QS.makeAxisEventDataBase(e);x.targetType="axisName",x.name=r,Us(_).eventData=x}i.add(_),_.updateTransform(),n.add(_),_.decomposeTransform()}}};function tM(t){t&&(t.ignore=!0)}function eM(t,e){var n=t&&t.getBoundingRect().clone(),i=e&&e.getBoundingRect().clone();if(n&&i){var r=ge([]);return _e(r,r,-t.rotation),n.applyTransform(ye([],r,t.getLocalTransform())),i.applyTransform(ye([],r,e.getLocalTransform())),n.intersect(i)}}function nM(t){return"middle"===t||"center"===t}function iM(t,e,n,i,r){for(var o=[],a=[],s=[],l=0;l=0||t===e}function aM(t){var e=sM(t);if(e){var n=e.axisPointerModel,i=e.axis.scale,r=n.option,o=n.get("status"),a=n.get("value");null!=a&&(a=i.parse(a));var s=lM(n);null==o&&(r.status=s?"show":"hide");var l=i.getExtent().slice();l[0]>l[1]&&l.reverse(),(null==a||a>l[1])&&(a=l[1]),aa)return!0;if(o){var s=sM(t).seriesDataCount,l=i.getExtent();return Math.abs(l[0]-l[1])/s>a}return!1}return!0===n},t.prototype.makeElOption=function(t,e,n,i,r){},t.prototype.createPointerEl=function(t,e,n,i){var r=e.pointer;if(r){var o=bM(t).pointerEl=new Lh[r.type](SM(e.pointer));t.add(o)}},t.prototype.createLabelEl=function(t,e,n,i){if(e.label){var r=bM(t).labelEl=new Ps(SM(e.label));t.add(r),DM(r,i)}},t.prototype.updatePointerEl=function(t,e,n){var i=bM(t).pointerEl;i&&e.pointer&&(i.setStyle(e.pointer.style),n(i,{shape:e.pointer.shape}))},t.prototype.updateLabelEl=function(t,e,n,i){var r=bM(t).labelEl;r&&(r.setStyle(e.label.style),n(r,{x:e.label.x,y:e.label.y}),DM(r,i))},t.prototype._renderHandle=function(t){if(!this._dragging&&this.updateHandleTransform){var e,n=this._axisPointerModel,i=this._api.getZr(),r=this._handle,o=n.getModel("handle"),a=n.get("status");if(!o.get("show")||!a||"hide"===a)return r&&i.remove(r),void(this._handle=null);this._handle||(e=!0,r=this._handle=Th(o.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){ue(t.event)},onmousedown:MM(this._onHandleDragMove,this,0,0),drift:MM(this._onHandleDragMove,this),ondragend:MM(this._onHandleDragEnd,this)}),i.add(r)),AM(r,n,!1),r.setStyle(o.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var s=o.get("size");G(s)||(s=[s,s]),r.scaleX=s[0]/2,r.scaleY=s[1]/2,hg(this,"_doDispatchAxisPointer",o.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,e)}},t.prototype._moveHandleToValue=function(t,e){TM(this._axisPointerModel,!e&&this._moveAnimation,this._handle,kM(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},t.prototype._onHandleDragMove=function(t,e){var n=this._handle;if(n){this._dragging=!0;var i=this.updateHandleTransform(kM(n),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=i,n.stopAnimation(),n.attr(kM(i)),bM(n).lastProp=null,this._doDispatchAxisPointer()}},t.prototype._doDispatchAxisPointer=function(){if(this._handle){var t=this._payloadInfo,e=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]})}},t.prototype._onHandleDragEnd=function(){if(this._dragging=!1,this._handle){var t=this._axisPointerModel.get("value");this._moveHandleToValue(t),this._api.dispatchAction({type:"hideTip"})}},t.prototype.clear=function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),n=this._group,i=this._handle;e&&n&&(this._lastGraphicKey=null,n&&e.remove(n),i&&e.remove(i),this._group=null,this._handle=null,this._payloadInfo=null),cg(this,"_doDispatchAxisPointer")},t.prototype.doClear=function(){},t.prototype.buildLabel=function(t,e,n){return{x:t[n=n||0],y:t[1-n],width:e[n],height:e[1-n]}},t}();function TM(t,e,n,i){IM(bM(n).lastProp,i)||(bM(n).lastProp=i,e?$u(n,i,t):(n.stopAnimation(),n.attr(i)))}function IM(t,e){if(j(t)&&j(e)){var n=!0;return z(e,(function(e,i){n=n&&IM(t[i],e)})),!!n}return t===e}function DM(t,e){t[e.get(["label","show"])?"show":"hide"]()}function kM(t){return{x:t.x||0,y:t.y||0,rotation:t.rotation||0}}function AM(t,e,n){var i=e.get("z"),r=e.get("zlevel");t&&t.traverse((function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=r&&(t.zlevel=r),t.silent=n)}))}function PM(t,e,n,i,r){var o=LM(n.get("value"),e.axis,e.ecModel,n.get("seriesDataIndices"),{precision:n.get(["label","precision"]),formatter:n.get(["label","formatter"])}),a=n.getModel("label"),s=Yc(a.get("padding")||0),l=a.getFont(),u=gr(o,l),h=r.position,c=u.width+s[1]+s[3],p=u.height+s[0]+s[2],d=r.align;"right"===d&&(h[0]-=c),"center"===d&&(h[0]-=c/2);var f=r.verticalAlign;"bottom"===f&&(h[1]-=p),"middle"===f&&(h[1]-=p/2),function(t,e,n,i){var r=i.getWidth(),o=i.getHeight();t[0]=Math.min(t[0]+e,r)-e,t[1]=Math.min(t[1]+n,o)-n,t[0]=Math.max(t[0],0),t[1]=Math.max(t[1],0)}(h,c,p,i);var g=a.get("backgroundColor");g&&"auto"!==g||(g=e.get(["axisLine","lineStyle","color"])),t.label={x:h[0],y:h[1],style:Eh(a,{text:o,font:l,fill:a.getTextColor(),padding:s,backgroundColor:g}),z2:10}}function LM(t,e,n,i,r){t=e.scale.parse(t);var o=e.scale.getLabel({value:t},{precision:r.precision}),a=r.formatter;if(a){var s={value:z_(e,{value:t}),axisDimension:e.dim,axisIndex:e.index,seriesData:[]};z(i,(function(t){var e=n.getSeriesByIndex(t.seriesIndex),i=t.dataIndexInside,r=e&&e.getDataParams(i);r&&s.seriesData.push(r)})),Z(a)?o=a.replace("{value}",o):U(a)&&(o=a(s))}return o}function OM(t,e,n){var i=[1,0,0,1,0,0];return _e(i,i,n.rotation),me(i,i,n.position),xh([t.dataToCoord(e),(n.labelOffset||0)+(n.labelDirection||1)*(n.labelMargin||0)],i)}var RM=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.makeElOption=function(t,e,n,i,r){var o=n.axis,a=o.grid,s=i.get("type"),l=NM(a,o).getOtherAxis(o).getGlobalExtent(),u=o.toGlobalCoord(o.dataToCoord(e,!0));if(s&&"none"!==s){var h=function(t){var e,n=t.get("type"),i=t.getModel(n+"Style");return"line"===n?(e=i.getLineStyle()).fill=null:"shadow"===n&&((e=i.getAreaStyle()).stroke=null),e}(i),c=zM[s](o,u,l);c.style=h,t.graphicKey=c.type,t.pointer=c}!function(t,e,n,i,r,o){var a=QS.innerTextLayout(n.rotation,0,n.labelDirection);n.labelMargin=r.get(["label","margin"]),PM(e,i,r,o,{position:OM(i.axis,t,n),align:a.textAlign,verticalAlign:a.textVerticalAlign})}(e,t,WS(a.model,n),n,i,r)},e.prototype.getHandleTransform=function(t,e,n){var i=WS(e.axis.grid.model,e,{labelInside:!1});i.labelMargin=n.get(["handle","margin"]);var r=OM(e.axis,t,i);return{x:r[0],y:r[1],rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},e.prototype.updateHandleTransform=function(t,e,n,i){var r=n.axis,o=r.grid,a=r.getGlobalExtent(!0),s=NM(o,r).getOtherAxis(r).getGlobalExtent(),l="x"===r.dim?0:1,u=[t.x,t.y];u[l]+=e[l],u[l]=Math.min(a[1],u[l]),u[l]=Math.max(a[0],u[l]);var h=(s[1]+s[0])/2,c=[h,h];c[l]=u[l];return{x:u[0],y:u[1],rotation:t.rotation,cursorPoint:c,tooltipOption:[{verticalAlign:"middle"},{align:"center"}][l]}},e}(CM);function NM(t,e){var n={};return n[e.dim+"AxisIndex"]=e.index,t.getCartesian(n)}var zM={line:function(t,e,n){var i,r,o;return{type:"Line",subPixelOptimize:!0,shape:(i=[e,n[0]],r=[e,n[1]],o=EM(t),{x1:i[o=o||0],y1:i[1-o],x2:r[o],y2:r[1-o]})}},shadow:function(t,e,n){var i,r,o,a=Math.max(1,t.getBandWidth()),s=n[1]-n[0];return{type:"Rect",shape:(i=[e-a/2,n[0]],r=[a,s],o=EM(t),{x:i[o=o||0],y:i[1-o],width:r[o],height:r[1-o]})}}};function EM(t){return"x"===t.dim?0:1}var BM=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="axisPointer",e.defaultOption={show:"auto",z:50,type:"line",snap:!1,triggerTooltip:!0,triggerEmphasis:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:"#B9BEC9",width:1,type:"dashed"},shadowStyle:{color:"rgba(210,219,238,0.2)"},label:{show:!0,formatter:null,precision:"auto",margin:3,color:"#fff",padding:[5,7,5,7],backgroundColor:"auto",borderColor:null,borderWidth:0,borderRadius:3},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:"#333",shadowBlur:3,shadowColor:"#aaa",shadowOffsetX:0,shadowOffsetY:2,throttle:40}},e}(pp),VM=Io(),FM=z;function HM(t,e,n){if(!r.node){var i=e.getZr();VM(i).records||(VM(i).records={}),function(t,e){if(VM(t).initialized)return;function n(n,i){t.on(n,(function(n){var r=function(t){var e={showTip:[],hideTip:[]},n=function(i){var r=e[i.type];r?r.push(i):(i.dispatchAction=n,t.dispatchAction(i))};return{dispatchAction:n,pendings:e}}(e);FM(VM(t).records,(function(t){t&&i(t,n,r.dispatchAction)})),function(t,e){var n,i=t.showTip.length,r=t.hideTip.length;i?n=t.showTip[i-1]:r&&(n=t.hideTip[r-1]);n&&(n.dispatchAction=null,e.dispatchAction(n))}(r.pendings,e)}))}VM(t).initialized=!0,n("click",W(GM,"click")),n("mousemove",W(GM,"mousemove")),n("globalout",WM)}(i,e),(VM(i).records[t]||(VM(i).records[t]={})).handler=n}}function WM(t,e,n){t.handler("leave",null,n)}function GM(t,e,n,i){e.handler(t,n,i)}function UM(t,e){if(!r.node){var n=e.getZr();(VM(n).records||{})[t]&&(VM(n).records[t]=null)}}var ZM=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=e.getComponent("tooltip"),r=t.get("triggerOn")||i&&i.get("triggerOn")||"mousemove|click";HM("axisPointer",n,(function(t,e,n){"none"!==r&&("leave"===t||r.indexOf(t)>=0)&&n({type:"updateAxisPointer",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})}))},e.prototype.remove=function(t,e){UM("axisPointer",e)},e.prototype.dispose=function(t,e){UM("axisPointer",e)},e.type="axisPointer",e}(Kf);function YM(t,e){var n,i=[],r=t.seriesIndex;if(null==r||!(n=e.getSeriesByIndex(r)))return{point:[]};var o=n.getData(),a=To(o,t);if(null==a||a<0||G(a))return{point:[]};var s=o.getItemGraphicEl(a),l=n.coordinateSystem;if(n.getTooltipPosition)i=n.getTooltipPosition(a)||[];else if(l&&l.dataToPoint)if(t.isStacked){var u=l.getBaseAxis(),h=l.getOtherAxis(u).dim,c=u.dim,p="x"===h||"radius"===h?1:0,d=o.mapDimension(c),f=[];f[p]=o.get(d,a),f[1-p]=o.get(o.getCalculationInfo("stackResultDimension"),a),i=l.dataToPoint(f)||[]}else i=l.dataToPoint(o.getValues(E(l.dimensions,(function(t){return o.mapDimension(t)})),a))||[];else if(s){var g=s.getBoundingRect().clone();g.applyTransform(s.transform),i=[g.x+g.width/2,g.y+g.height/2]}return{point:i,el:s}}var XM=Io();function jM(t,e,n){var i=t.currTrigger,r=[t.x,t.y],o=t,a=t.dispatchAction||H(n.dispatchAction,n),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){JM(r)&&(r=YM({seriesIndex:o.seriesIndex,dataIndex:o.dataIndex},e).point);var l=JM(r),u=o.axesInfo,h=s.axesInfo,c="leave"===i||JM(r),p={},d={},f={list:[],map:{}},g={showPointer:W(KM,d),showTooltip:W($M,f)};z(s.coordSysMap,(function(t,e){var n=l||t.containPoint(r);z(s.coordSysAxesInfo[e],(function(t,e){var i=t.axis,o=function(t,e){for(var n=0;n<(t||[]).length;n++){var i=t[n];if(e.axis.dim===i.axisDim&&e.axis.model.componentIndex===i.axisIndex)return i}}(u,t);if(!c&&n&&(!u||o)){var a=o&&o.value;null!=a||l||(a=i.pointToData(r)),null!=a&&qM(t,a,g,!1,p)}}))}));var v={};return z(h,(function(t,e){var n=t.linkGroup;n&&!d[e]&&z(n.axesInfo,(function(e,i){var r=d[i];if(e!==t&&r){var o=r.value;n.mapper&&(o=t.axis.scale.parse(n.mapper(o,QM(e),QM(t)))),v[t.key]=o}}))})),z(v,(function(t,e){qM(h[e],t,g,!0,p)})),function(t,e,n){var i=n.axesInfo=[];z(e,(function(e,n){var r=e.axisPointerModel.option,o=t[n];o?(!e.useHandle&&(r.status="show"),r.value=o.value,r.seriesDataIndices=(o.payloadBatch||[]).slice()):!e.useHandle&&(r.status="hide"),"show"===r.status&&i.push({axisDim:e.axis.dim,axisIndex:e.axis.model.componentIndex,value:r.value})}))}(d,h,p),function(t,e,n,i){if(JM(e)||!t.list.length)return void i({type:"hideTip"});var r=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};i({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:n.tooltipOption,position:n.position,dataIndexInside:r.dataIndexInside,dataIndex:r.dataIndex,seriesIndex:r.seriesIndex,dataByCoordSys:t.list})}(f,r,t,a),function(t,e,n){var i=n.getZr(),r="axisPointerLastHighlights",o=XM(i)[r]||{},a=XM(i)[r]={};z(t,(function(t,e){var n=t.axisPointerModel.option;"show"===n.status&&t.triggerEmphasis&&z(n.seriesDataIndices,(function(t){var e=t.seriesIndex+" | "+t.dataIndex;a[e]=t}))}));var s=[],l=[];z(o,(function(t,e){!a[e]&&l.push(t)})),z(a,(function(t,e){!o[e]&&s.push(t)})),l.length&&n.dispatchAction({type:"downplay",escapeConnect:!0,notBlur:!0,batch:l}),s.length&&n.dispatchAction({type:"highlight",escapeConnect:!0,notBlur:!0,batch:s})}(h,0,n),p}}function qM(t,e,n,i,r){var o=t.axis;if(!o.scale.isBlank()&&o.containData(e))if(t.involveSeries){var a=function(t,e){var n=e.axis,i=n.dim,r=t,o=[],a=Number.MAX_VALUE,s=-1;return z(e.seriesModels,(function(e,l){var u,h,c=e.getData().mapDimensionsAll(i);if(e.getAxisTooltipData){var p=e.getAxisTooltipData(c,t,n);h=p.dataIndices,u=p.nestestValue}else{if(!(h=e.getData().indicesOfNearest(c[0],t,"category"===n.type?.5:null)).length)return;u=e.getData().get(c[0],h[0])}if(null!=u&&isFinite(u)){var d=t-u,f=Math.abs(d);f<=a&&((f=0&&s<0)&&(a=f,s=d,r=u,o.length=0),z(h,(function(t){o.push({seriesIndex:e.seriesIndex,dataIndexInside:t,dataIndex:e.getData().getRawIndex(t)})})))}})),{payloadBatch:o,snapToValue:r}}(e,t),s=a.payloadBatch,l=a.snapToValue;s[0]&&null==r.seriesIndex&&k(r,s[0]),!i&&t.snap&&o.containData(l)&&null!=l&&(e=l),n.showPointer(t,e,s),n.showTooltip(t,a,l)}else n.showPointer(t,e)}function KM(t,e,n,i){t[e.key]={value:n,payloadBatch:i}}function $M(t,e,n,i){var r=n.payloadBatch,o=e.axis,a=o.model,s=e.axisPointerModel;if(e.triggerTooltip&&r.length){var l=e.coordSys.model,u=uM(l),h=t.map[u];h||(h=t.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},t.list.push(h)),h.dataByAxis.push({axisDim:o.dim,axisIndex:a.componentIndex,axisType:a.type,axisId:a.id,value:i,valueLabelOpt:{precision:s.get(["label","precision"]),formatter:s.get(["label","formatter"])},seriesDataIndices:r.slice()})}}function QM(t){var e=t.axis.model,n={},i=n.axisDim=t.axis.dim;return n.axisIndex=n[i+"AxisIndex"]=e.componentIndex,n.axisName=n[i+"AxisName"]=e.name,n.axisId=n[i+"AxisId"]=e.id,n}function JM(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}function tC(t){cM.registerAxisPointerClass("CartesianAxisPointer",RM),t.registerComponentModel(BM),t.registerComponentView(ZM),t.registerPreprocessor((function(t){if(t){(!t.axisPointer||0===t.axisPointer.length)&&(t.axisPointer={});var e=t.axisPointer.link;e&&!G(e)&&(t.axisPointer.link=[e])}})),t.registerProcessor(t.PRIORITY.PROCESSOR.STATISTIC,(function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=rM(t,e)})),t.registerAction({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},jM)}function eC(t,e){var n;return z(e,(function(e){null!=t[e]&&"auto"!==t[e]&&(n=!0)})),n}var nC=["transition","enterFrom","leaveTo"],iC=nC.concat(["enterAnimation","updateAnimation","leaveAnimation"]);function rC(t,e,n){if(n&&(!t[n]&&e[n]&&(t[n]={}),t=t[n],e=e[n]),t&&e)for(var i=n?nC:iC,r=0;r0&&(a.during=s?H(yC,{el:e,userDuring:s}):null,a.setToFinal=!0,a.scope=t),k(a,n[o]),a}function pC(t,e,n,i){var r=(i=i||{}).dataIndex,o=i.isInit,a=i.clearStyle,s=n.isAnimationEnabled(),l=hC(t),u=e.style;l.userDuring=e.during;var h={},c={};if(function(t,e,n){for(var i=0;i=0)){var c=t.getAnimationStyleProps(),p=c?c.style:null;if(p){!r&&(r=i.style={});var d=F(n);for(u=0;u0&&t.animateFrom(p,d)}else!function(t,e,n,i,r){if(r){var o=cC("update",t,e,i,n);o.duration>0&&t.animateFrom(r,o)}}(t,e,r||0,n,h);dC(t,e),u?t.dirty():t.markRedraw()}function dC(t,e){for(var n=hC(t).leaveToProps,i=0;i=0){!o&&(o=i[t]={});var p=F(a);for(h=0;h=0;l--){var p,d,f;if(f=null!=(d=So((p=n[l]).id,null))?r.get(d):null){var g=f.parent,v=(c=CC(g),{}),y=ap(f,p,g===i?{width:o,height:a}:{width:c.width,height:c.height},null,{hv:p.hv,boundingMode:p.bounding},v);if(!CC(f).isNew&&y){for(var m=p.transition,_={},x=0;x=0)?_[w]=b:f[w]=b}$u(f,_,t,0)}else f.attr(v)}}},e.prototype._clear=function(){var t=this,e=this._elMap;e.each((function(n){kC(n,CC(n).option,e,t._lastGraphicModel)})),this._elMap=gt()},e.prototype.dispose=function(){this._clear()},e.type="graphic",e}(Kf);function IC(t){var e=_t(MC,t)?MC[t]:ch(t);var n=new e({});return CC(n).type=t,n}function DC(t,e,n,i){var r=IC(n);return e.add(r),i.set(t,r),CC(r).id=t,CC(r).isNew=!0,r}function kC(t,e,n,i){t&&t.parent&&("group"===t.type&&t.traverse((function(t){kC(t,e,n,i)})),function(t,e,n,i){if(t){var r=t.parent,o=hC(t).leaveToProps;if(o){var a=cC("update",t,e,n,0);a.done=function(){r.remove(t),i&&i()},t.animateTo(o,a)}else r.remove(t),i&&i()}}(t,e,i),n.removeKey(CC(t).id))}function AC(t,e,n,i){t.isGroup||z([["cursor",ga.prototype.cursor],["zlevel",i||0],["z",n||0],["z2",0]],(function(n){var i=n[0];_t(e,i)?t[i]=it(e[i],n[1]):null==t[i]&&(t[i]=n[1])})),z(F(e),(function(n){if(0===n.indexOf("on")){var i=e[n];t[n]=U(i)?i:null}})),_t(e,"draggable")&&(t.draggable=e.draggable),null!=e.name&&(t.name=e.name),null!=e.id&&(t.id=e.id)}var PC=["x","y","radius","angle","single"],LC=["cartesian2d","polar","singleAxis"];function OC(t){return t+"Axis"}function RC(t,e){var n,i=gt(),r=[],o=gt();t.eachComponent({mainType:"dataZoom",query:e},(function(t){o.get(t.uid)||s(t)}));do{n=!1,t.eachComponent("dataZoom",a)}while(n);function a(t){!o.get(t.uid)&&function(t){var e=!1;return t.eachTargetAxis((function(t,n){var r=i.get(t);r&&r[n]&&(e=!0)})),e}(t)&&(s(t),n=!0)}function s(t){o.set(t.uid,!0),r.push(t),t.eachTargetAxis((function(t,e){(i.get(t)||i.set(t,[]))[e]=!0}))}return r}function NC(t){var e=t.ecModel,n={infoList:[],infoMap:gt()};return t.eachTargetAxis((function(t,i){var r=e.getComponent(OC(t),i);if(r){var o=r.getCoordSysModel();if(o){var a=o.uid,s=n.infoMap.get(a);s||(s={model:o,axisModels:[]},n.infoList.push(s),n.infoMap.set(a,s)),s.axisModels.push(r)}}})),n}var zC=function(){function t(){this.indexList=[],this.indexMap=[]}return t.prototype.add=function(t){this.indexMap[t]||(this.indexList.push(t),this.indexMap[t]=!0)},t}(),EC=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._autoThrottle=!0,n._noTarget=!0,n._rangePropMode=["percent","percent"],n}return n(e,t),e.prototype.init=function(t,e,n){var i=BC(t);this.settledOption=i,this.mergeDefaultAndTheme(t,n),this._doInit(i)},e.prototype.mergeOption=function(t){var e=BC(t);I(this.option,t,!0),I(this.settledOption,e,!0),this._doInit(e)},e.prototype._doInit=function(t){var e=this.option;this._setDefaultThrottle(t),this._updateRangeUse(t);var n=this.settledOption;z([["start","startValue"],["end","endValue"]],(function(t,i){"value"===this._rangePropMode[i]&&(e[t[0]]=n[t[0]]=null)}),this),this._resetTarget()},e.prototype._resetTarget=function(){var t=this.get("orient",!0),e=this._targetAxisInfoMap=gt();this._fillSpecifiedTargetAxis(e)?this._orient=t||this._makeAutoOrientByTargetAxis():(this._orient=t||"horizontal",this._fillAutoTargetAxisByOrient(e,this._orient)),this._noTarget=!0,e.each((function(t){t.indexList.length&&(this._noTarget=!1)}),this)},e.prototype._fillSpecifiedTargetAxis=function(t){var e=!1;return z(PC,(function(n){var i=this.getReferringComponents(OC(n),Lo);if(i.specified){e=!0;var r=new zC;z(i.models,(function(t){r.add(t.componentIndex)})),t.set(n,r)}}),this),e},e.prototype._fillAutoTargetAxisByOrient=function(t,e){var n=this.ecModel,i=!0;if(i){var r="vertical"===e?"y":"x";o(n.findComponents({mainType:r+"Axis"}),r)}i&&o(n.findComponents({mainType:"singleAxis",filter:function(t){return t.get("orient",!0)===e}}),"single");function o(e,n){var r=e[0];if(r){var o=new zC;if(o.add(r.componentIndex),t.set(n,o),i=!1,"x"===n||"y"===n){var a=r.getReferringComponents("grid",Po).models[0];a&&z(e,(function(t){r.componentIndex!==t.componentIndex&&a===t.getReferringComponents("grid",Po).models[0]&&o.add(t.componentIndex)}))}}}i&&z(PC,(function(e){if(i){var r=n.findComponents({mainType:OC(e),filter:function(t){return"category"===t.get("type",!0)}});if(r[0]){var o=new zC;o.add(r[0].componentIndex),t.set(e,o),i=!1}}}),this)},e.prototype._makeAutoOrientByTargetAxis=function(){var t;return this.eachTargetAxis((function(e){!t&&(t=e)}),this),"y"===t?"vertical":"horizontal"},e.prototype._setDefaultThrottle=function(t){if(t.hasOwnProperty("throttle")&&(this._autoThrottle=!1),this._autoThrottle){var e=this.ecModel.option;this.option.throttle=e.animation&&e.animationDurationUpdate>0?100:20}},e.prototype._updateRangeUse=function(t){var e=this._rangePropMode,n=this.get("rangeMode");z([["start","startValue"],["end","endValue"]],(function(i,r){var o=null!=t[i[0]],a=null!=t[i[1]];o&&!a?e[r]="percent":!o&&a?e[r]="value":n?e[r]=n[r]:o&&(e[r]="percent")}))},e.prototype.noTarget=function(){return this._noTarget},e.prototype.getFirstTargetAxisModel=function(){var t;return this.eachTargetAxis((function(e,n){null==t&&(t=this.ecModel.getComponent(OC(e),n))}),this),t},e.prototype.eachTargetAxis=function(t,e){this._targetAxisInfoMap.each((function(n,i){z(n.indexList,(function(n){t.call(e,i,n)}))}))},e.prototype.getAxisProxy=function(t,e){var n=this.getAxisModel(t,e);if(n)return n.__dzAxisProxy},e.prototype.getAxisModel=function(t,e){var n=this._targetAxisInfoMap.get(t);if(n&&n.indexMap[e])return this.ecModel.getComponent(OC(t),e)},e.prototype.setRawRange=function(t){var e=this.option,n=this.settledOption;z([["start","startValue"],["end","endValue"]],(function(i){null==t[i[0]]&&null==t[i[1]]||(e[i[0]]=n[i[0]]=t[i[0]],e[i[1]]=n[i[1]]=t[i[1]])}),this),this._updateRangeUse(t)},e.prototype.setCalculatedRange=function(t){var e=this.option;z(["start","startValue","end","endValue"],(function(n){e[n]=t[n]}))},e.prototype.getPercentRange=function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getDataPercentWindow()},e.prototype.getValueRange=function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getDataValueWindow();var n=this.findRepresentativeAxisProxy();return n?n.getDataValueWindow():void 0},e.prototype.findRepresentativeAxisProxy=function(t){if(t)return t.__dzAxisProxy;for(var e,n=this._targetAxisInfoMap.keys(),i=0;io&&(e[1-i]=e[i]+u.sign*o),e}function GC(t,e){var n=t[e]-t[1-e];return{span:Math.abs(n),sign:n>0?-1:n<0?1:e?-1:1}}function UC(t,e){return Math.min(null!=e[1]?e[1]:1/0,Math.max(null!=e[0]?e[0]:-1/0,t))}var ZC=z,YC=Zr,XC=function(){function t(t,e,n,i){this._dimName=t,this._axisIndex=e,this.ecModel=i,this._dataZoomModel=n}return t.prototype.hostedBy=function(t){return this._dataZoomModel===t},t.prototype.getDataValueWindow=function(){return this._valueWindow.slice()},t.prototype.getDataPercentWindow=function(){return this._percentWindow.slice()},t.prototype.getTargetSeriesModels=function(){var t=[];return this.ecModel.eachSeries((function(e){if(function(t){var e=t.get("coordinateSystem");return L(LC,e)>=0}(e)){var n=OC(this._dimName),i=e.getReferringComponents(n,Po).models[0];i&&this._axisIndex===i.componentIndex&&t.push(e)}}),this),t},t.prototype.getAxisModel=function(){return this.ecModel.getComponent(this._dimName+"Axis",this._axisIndex)},t.prototype.getMinMaxSpan=function(){return T(this._minMaxSpan)},t.prototype.calculateDataWindow=function(t){var e,n=this._dataExtent,i=this.getAxisModel().axis.scale,r=this._dataZoomModel.getRangePropMode(),o=[0,100],a=[],s=[];ZC(["start","end"],(function(l,u){var h=t[l],c=t[l+"Value"];"percent"===r[u]?(null==h&&(h=o[u]),c=i.parse(Wr(h,o,n))):(e=!0,h=Wr(c=null==c?n[u]:i.parse(c),n,o)),s[u]=null==c||isNaN(c)?n[u]:c,a[u]=null==h||isNaN(h)?o[u]:h})),YC(s),YC(a);var l=this._minMaxSpan;function u(t,e,n,r,o){var a=o?"Span":"ValueSpan";WC(0,t,n,"all",l["min"+a],l["max"+a]);for(var s=0;s<2;s++)e[s]=Wr(t[s],n,r,!0),o&&(e[s]=i.parse(e[s]))}return e?u(s,a,n,o,!1):u(a,s,o,n,!0),{valueWindow:s,percentWindow:a}},t.prototype.reset=function(t){if(t===this._dataZoomModel){var e=this.getTargetSeriesModels();this._dataExtent=function(t,e,n){var i=[1/0,-1/0];ZC(n,(function(t){!function(t,e,n){e&&z(F_(e,n),(function(n){var i=e.getApproximateExtent(n);i[0]t[1]&&(t[1]=i[1])}))}(i,t.getData(),e)}));var r=t.getAxisModel(),o=A_(r.axis.scale,r,i).calculate();return[o.min,o.max]}(this,this._dimName,e),this._updateMinMaxSpan();var n=this.calculateDataWindow(t.settledOption);this._valueWindow=n.valueWindow,this._percentWindow=n.percentWindow,this._setAxisModel()}},t.prototype.filterData=function(t,e){if(t===this._dataZoomModel){var n=this._dimName,i=this.getTargetSeriesModels(),r=t.get("filterMode"),o=this._valueWindow;"none"!==r&&ZC(i,(function(t){var e=t.getData(),i=e.mapDimensionsAll(n);if(i.length){if("weakFilter"===r){var a=e.getStore(),s=E(i,(function(t){return e.getDimensionIndex(t)}),e);e.filterSelf((function(t){for(var e,n,r,l=0;lo[1];if(h&&!c&&!p)return!0;h&&(r=!0),c&&(e=!0),p&&(n=!0)}return r&&e&&n}))}else ZC(i,(function(n){if("empty"===r)t.setData(e=e.map(n,(function(t){return function(t){return t>=o[0]&&t<=o[1]}(t)?t:NaN})));else{var i={};i[n]=o,e.selectRange(i)}}));ZC(i,(function(t){e.setApproximateExtent(o,t)}))}}))}},t.prototype._updateMinMaxSpan=function(){var t=this._minMaxSpan={},e=this._dataZoomModel,n=this._dataExtent;ZC(["min","max"],(function(i){var r=e.get(i+"Span"),o=e.get(i+"ValueSpan");null!=o&&(o=this.getAxisModel().axis.scale.parse(o)),null!=o?r=Wr(n[0]+o,n,[0,100],!0):null!=r&&(o=Wr(r,[0,100],n,!0)-n[0]),t[i+"Span"]=r,t[i+"ValueSpan"]=o}),this)},t.prototype._setAxisModel=function(){var t=this.getAxisModel(),e=this._percentWindow,n=this._valueWindow;if(e){var i=jr(n,[0,500]);i=Math.min(i,20);var r=t.axis.scale.rawExtentInfo;0!==e[0]&&r.setDeterminedMinMax("min",+n[0].toFixed(i)),100!==e[1]&&r.setDeterminedMinMax("max",+n[1].toFixed(i)),r.freeze()}},t}();var jC={getTargetSeries:function(t){function e(e){t.eachComponent("dataZoom",(function(n){n.eachTargetAxis((function(i,r){var o=t.getComponent(OC(i),r);e(i,r,o,n)}))}))}e((function(t,e,n,i){n.__dzAxisProxy=null}));var n=[];e((function(e,i,r,o){r.__dzAxisProxy||(r.__dzAxisProxy=new XC(e,i,o,t),n.push(r.__dzAxisProxy))}));var i=gt();return z(n,(function(t){z(t.getTargetSeriesModels(),(function(t){i.set(t.uid,t)}))})),i},overallReset:function(t,e){t.eachComponent("dataZoom",(function(t){t.eachTargetAxis((function(e,n){t.getAxisProxy(e,n).reset(t)})),t.eachTargetAxis((function(n,i){t.getAxisProxy(n,i).filterData(t,e)}))})),t.eachComponent("dataZoom",(function(t){var e=t.findRepresentativeAxisProxy();if(e){var n=e.getDataPercentWindow(),i=e.getDataValueWindow();t.setCalculatedRange({start:n[0],end:n[1],startValue:i[0],endValue:i[1]})}}))}};var qC=!1;function KC(t){qC||(qC=!0,t.registerProcessor(t.PRIORITY.PROCESSOR.FILTER,jC),function(t){t.registerAction("dataZoom",(function(t,e){z(RC(e,t),(function(e){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})}))}))}(t),t.registerSubTypeDefaulter("dataZoom",(function(){return"slider"})))}function $C(t){t.registerComponentModel(VC),t.registerComponentView(HC),KC(t)}var QC=function(){},JC={};function tT(t,e){JC[t]=e}function eT(t){return JC[t]}var nT=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.optionUpdated=function(){t.prototype.optionUpdated.apply(this,arguments);var e=this.ecModel;z(this.option.feature,(function(t,n){var i=eT(n);i&&(i.getDefaultOption&&(i.defaultOption=i.getDefaultOption(e)),I(t,i.defaultOption))}))},e.type="toolbox",e.layoutMode={type:"box",ignoreSize:!0},e.defaultOption={show:!0,z:6,orient:"horizontal",left:"right",top:"top",backgroundColor:"transparent",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemSize:15,itemGap:8,showTitle:!0,iconStyle:{borderColor:"#666",color:"none"},emphasis:{iconStyle:{borderColor:"#3E98C5"}},tooltip:{show:!1,position:"bottom"}},e}(pp);function iT(t,e){var n=Yc(e.get("padding")),i=e.getItemStyle(["color","opacity"]);return i.fill=e.get("backgroundColor"),t=new Ds({shape:{x:t.x-n[3],y:t.y-n[0],width:t.width+n[1]+n[3],height:t.height+n[0]+n[2],r:e.get("borderRadius")},style:i,silent:!0,z2:-1})}var rT=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.render=function(t,e,n,i){var r=this.group;if(r.removeAll(),t.get("show")){var o=+t.get("itemSize"),a="vertical"===t.get("orient"),s=t.get("feature")||{},l=this._features||(this._features={}),u=[];z(s,(function(t,e){u.push(e)})),new om(this._featureNames||[],u).add(h).update(h).remove(W(h,null)).execute(),this._featureNames=u,function(t,e,n){var i=e.getBoxLayoutParams(),r=e.get("padding"),o={width:n.getWidth(),height:n.getHeight()},a=op(i,o,r);rp(e.get("orient"),t,e.get("itemGap"),a.width,a.height),ap(t,i,o,r)}(r,t,n),r.add(iT(r.getBoundingRect(),t)),a||r.eachChild((function(t){var e=t.__title,i=t.ensureState("emphasis"),a=i.textConfig||(i.textConfig={}),s=t.getTextContent(),l=s&&s.ensureState("emphasis");if(l&&!U(l)&&e){var u=l.style||(l.style={}),h=gr(e,Ps.makeFont(u)),c=t.x+r.x,p=!1;t.y+r.y+o+h.height>n.getHeight()&&(a.position="top",p=!0);var d=p?-5-h.height:o+10;c+h.width/2>n.getWidth()?(a.position=["100%",d],u.align="right"):c-h.width/2<0&&(a.position=[0,d],u.align="left")}}))}function h(h,c){var p,d=u[h],f=u[c],g=s[d],v=new ic(g,t,t.ecModel);if(i&&null!=i.newTitle&&i.featureName===d&&(g.title=i.newTitle),d&&!f){if(function(t){return 0===t.indexOf("my")}(d))p={onclick:v.option.onclick,featureName:d};else{var y=eT(d);if(!y)return;p=new y}l[d]=p}else if(!(p=l[f]))return;p.uid=oc("toolbox-feature"),p.model=v,p.ecModel=e,p.api=n;var m=p instanceof QC;d||!f?!v.get("show")||m&&p.unusable?m&&p.remove&&p.remove(e,n):(!function(i,s,l){var u,h,c=i.getModel("iconStyle"),p=i.getModel(["emphasis","iconStyle"]),d=s instanceof QC&&s.getIcons?s.getIcons():i.get("icon"),f=i.get("title")||{};Z(d)?(u={})[l]=d:u=d;Z(f)?(h={})[l]=f:h=f;var g=i.iconPaths={};z(u,(function(l,u){var d=Th(l,{},{x:-o/2,y:-o/2,width:o,height:o});d.setStyle(c.getItemStyle()),d.ensureState("emphasis").style=p.getItemStyle();var f=new Ps({style:{text:h[u],align:p.get("textAlign"),borderRadius:p.get("textBorderRadius"),padding:p.get("textPadding"),fill:null,font:Gh({fontStyle:p.get("textFontStyle"),fontFamily:p.get("textFontFamily"),fontSize:p.get("textFontSize"),fontWeight:p.get("textFontWeight")},e)},ignore:!0});d.setTextContent(f),kh({el:d,componentModel:t,itemName:u,formatterParamsExtra:{title:h[u]}}),d.__title=h[u],d.on("mouseover",(function(){var e=p.getItemStyle(),i=a?null==t.get("right")&&"right"!==t.get("left")?"right":"left":null==t.get("bottom")&&"bottom"!==t.get("top")?"bottom":"top";f.setStyle({fill:p.get("textFill")||e.fill||e.stroke||"#000",backgroundColor:p.get("textBackgroundColor")}),d.setTextConfig({position:p.get("textPosition")||i}),f.ignore=!t.get("showTitle"),n.enterEmphasis(this)})).on("mouseout",(function(){"emphasis"!==i.get(["iconStatus",u])&&n.leaveEmphasis(this),f.hide()})),("emphasis"===i.get(["iconStatus",u])?yl:ml)(d),r.add(d),d.on("click",H(s.onclick,s,e,n,u)),g[u]=d}))}(v,p,d),v.setIconStatus=function(t,e){var n=this.option,i=this.iconPaths;n.iconStatus=n.iconStatus||{},n.iconStatus[t]=e,i[t]&&("emphasis"===e?yl:ml)(i[t])},p instanceof QC&&p.render&&p.render(v,e,n,i)):m&&p.dispose&&p.dispose(e,n)}},e.prototype.updateView=function(t,e,n,i){z(this._features,(function(t){t instanceof QC&&t.updateView&&t.updateView(t.model,e,n,i)}))},e.prototype.remove=function(t,e){z(this._features,(function(n){n instanceof QC&&n.remove&&n.remove(t,e)})),this.group.removeAll()},e.prototype.dispose=function(t,e){z(this._features,(function(n){n instanceof QC&&n.dispose&&n.dispose(t,e)}))},e.type="toolbox",e}(Kf);var oT=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.onclick=function(t,e){var n=this.model,i=n.get("name")||t.get("title.0.text")||"echarts",o="svg"===e.getZr().painter.getType(),a=o?"svg":n.get("type",!0)||"png",s=e.getConnectedDataURL({type:a,backgroundColor:n.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",connectedBackgroundColor:n.get("connectedBackgroundColor"),excludeComponents:n.get("excludeComponents"),pixelRatio:n.get("pixelRatio")}),l=r.browser;if("function"!=typeof MouseEvent||!l.newEdge&&(l.ie||l.edge))if(window.navigator.msSaveOrOpenBlob||o){var u=s.split(","),h=u[0].indexOf("base64")>-1,c=o?decodeURIComponent(u[1]):u[1];h&&(c=window.atob(c));var p=i+"."+a;if(window.navigator.msSaveOrOpenBlob){for(var d=c.length,f=new Uint8Array(d);d--;)f[d]=c.charCodeAt(d);var g=new Blob([f]);window.navigator.msSaveOrOpenBlob(g,p)}else{var v=document.createElement("iframe");document.body.appendChild(v);var y=v.contentWindow,m=y.document;m.open("image/svg+xml","replace"),m.write(c),m.close(),y.focus(),m.execCommand("SaveAs",!0,p),document.body.removeChild(v)}}else{var _=n.get("lang"),x='',w=window.open();w.document.write(x),w.document.title=i}else{var b=document.createElement("a");b.download=i+"."+a,b.target="_blank",b.href=s;var S=new MouseEvent("click",{view:document.defaultView,bubbles:!0,cancelable:!1});b.dispatchEvent(S)}},e.getDefaultOption=function(t){return{show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:t.getLocaleModel().get(["toolbox","saveAsImage","title"]),type:"png",connectedBackgroundColor:"#fff",name:"",excludeComponents:["toolbox"],lang:t.getLocaleModel().get(["toolbox","saveAsImage","lang"])}},e}(QC),aT="__ec_magicType_stack__",sT=[["line","bar"],["stack"]],lT=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getIcons=function(){var t=this.model,e=t.get("icon"),n={};return z(t.get("type"),(function(t){e[t]&&(n[t]=e[t])})),n},e.getDefaultOption=function(t){return{show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z"},title:t.getLocaleModel().get(["toolbox","magicType","title"]),option:{},seriesIndex:{}}},e.prototype.onclick=function(t,e,n){var i=this.model,r=i.get(["seriesIndex",n]);if(uT[n]){var o,a={series:[]};z(sT,(function(t){L(t,n)>=0&&z(t,(function(t){i.setIconStatus(t,"normal")}))})),i.setIconStatus(n,"emphasis"),t.eachComponent({mainType:"series",query:null==r?null:{seriesIndex:r}},(function(t){var e=t.subType,r=t.id,o=uT[n](e,r,t,i);o&&(A(o,t.option),a.series.push(o));var s=t.coordinateSystem;if(s&&"cartesian2d"===s.type&&("line"===n||"bar"===n)){var l=s.getAxesByScale("ordinal")[0];if(l){var u=l.dim+"Axis",h=t.getReferringComponents(u,Po).models[0].componentIndex;a[u]=a[u]||[];for(var c=0;c<=h;c++)a[u][h]=a[u][h]||{};a[u][h].boundaryGap="bar"===n}}}));var s=n;"stack"===n&&(o=I({stack:i.option.title.tiled,tiled:i.option.title.stack},i.option.title),"emphasis"!==i.get(["iconStatus",n])&&(s="tiled")),e.dispatchAction({type:"changeMagicType",currentType:s,newOption:a,newTitle:o,featureName:"magicType"})}},e}(QC),uT={line:function(t,e,n,i){if("bar"===t)return I({id:e,type:"line",data:n.get("data"),stack:n.get("stack"),markPoint:n.get("markPoint"),markLine:n.get("markLine")},i.get(["option","line"])||{},!0)},bar:function(t,e,n,i){if("line"===t)return I({id:e,type:"bar",data:n.get("data"),stack:n.get("stack"),markPoint:n.get("markPoint"),markLine:n.get("markLine")},i.get(["option","bar"])||{},!0)},stack:function(t,e,n,i){var r=n.get("stack")===aT;if("line"===t||"bar"===t)return i.setIconStatus("stack",r?"normal":"emphasis"),I({id:e,stack:r?"":aT},i.get(["option","stack"])||{},!0)}};Zy({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},(function(t,e){e.mergeOption(t.newOption)}));var hT=new Array(60).join("-"),cT="\t";function pT(t){return t.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}var dT=new RegExp("[\t]+","g");function fT(t,e){var n=t.split(new RegExp("\n*"+hT+"\n*","g")),i={series:[]};return z(n,(function(t,n){if(function(t){if(t.slice(0,t.indexOf("\n")).indexOf(cT)>=0)return!0}(t)){var r=function(t){for(var e=t.split(/\n+/g),n=[],i=E(pT(e.shift()).split(dT),(function(t){return{name:t,data:[]}})),r=0;r6}(t)||o){if(a&&!o){"single"===s.brushMode&&WT(t);var l=T(s);l.brushType=oI(l.brushType,a),l.panelId=a===MT?null:a.panelId,o=t._creatingCover=RT(t,l),t._covers.push(o)}if(o){var u=lI[oI(t._brushType,a)];o.__brushOption.range=u.getCreatingRange(eI(t,o,t._track)),i&&(NT(t,o),u.updateCommon(t,o)),zT(t,o),r={isEnd:i}}}else i&&"single"===s.brushMode&&s.removeOnClick&&FT(t,e,n)&&WT(t)&&(r={isEnd:i,removeOnClick:!0});return r}function oI(t,e){return"auto"===t?e.defaultBrushType:t}var aI={mousedown:function(t){if(this._dragging)sI(this,t);else if(!t.target||!t.target.draggable){nI(t);var e=this.group.transformCoordToLocal(t.offsetX,t.offsetY);this._creatingCover=null,(this._creatingPanel=FT(this,t,e))&&(this._dragging=!0,this._track=[e.slice()])}},mousemove:function(t){var e=t.offsetX,n=t.offsetY,i=this.group.transformCoordToLocal(e,n);if(function(t,e,n){if(t._brushType&&!function(t,e,n){var i=t._zr;return e<0||e>i.getWidth()||n<0||n>i.getHeight()}(t,e.offsetX,e.offsetY)){var i=t._zr,r=t._covers,o=FT(t,e,n);if(!t._dragging)for(var a=0;a=0)&&t(r,i._targetInfoList)}))}return t.prototype.setOutputRanges=function(t,e){return this.matchOutputRanges(t,e,(function(t,e,n){if((t.coordRanges||(t.coordRanges=[])).push(e),!t.coordRange){t.coordRange=e;var i=bI[t.brushType](0,n,e);t.__rangeOffset={offset:MI[t.brushType](i.values,t.range,[1,1]),xyMinMax:i.xyMinMax}}})),t},t.prototype.matchOutputRanges=function(t,e,n){z(t,(function(t){var i=this.findTargetInfo(t,e);i&&!0!==i&&z(i.coordSyses,(function(i){var r=bI[t.brushType](1,i,t.range,!0);n(t,r.values,i,e)}))}),this)},t.prototype.setInputRanges=function(t,e){z(t,(function(t){var n,i,r,o,a,s=this.findTargetInfo(t,e);if(t.range=t.range||[],s&&!0!==s){t.panelId=s.panelId;var l=bI[t.brushType](0,s.coordSys,t.coordRange),u=t.__rangeOffset;t.range=u?MI[t.brushType](l.values,u.offset,(n=l.xyMinMax,i=u.xyMinMax,r=TI(n),o=TI(i),a=[r[0]/o[0],r[1]/o[1]],isNaN(a[0])&&(a[0]=1),isNaN(a[1])&&(a[1]=1),a)):l.values}}),this)},t.prototype.makePanelOpts=function(t,e){return E(this._targetInfoList,(function(n){var i=n.getPanelRect();return{panelId:n.panelId,defaultBrushType:e?e(n):null,clipPath:cI(i),isTargetByCursor:dI(i,t,n.coordSysModel),getLinearBrushOtherExtent:pI(i)}}))},t.prototype.controlSeries=function(t,e,n){var i=this.findTargetInfo(t,n);return!0===i||i&&L(i.coordSyses,e.coordinateSystem)>=0},t.prototype.findTargetInfo=function(t,e){for(var n=this._targetInfoList,i=mI(e,t),r=0;rt[1]&&t.reverse(),t}function mI(t,e){return ko(t,e,{includeMainTypes:gI})}var _I={grid:function(t,e){var n=t.xAxisModels,i=t.yAxisModels,r=t.gridModels,o=gt(),a={},s={};(n||i||r)&&(z(n,(function(t){var e=t.axis.grid.model;o.set(e.id,e),a[e.id]=!0})),z(i,(function(t){var e=t.axis.grid.model;o.set(e.id,e),s[e.id]=!0})),z(r,(function(t){o.set(t.id,t),a[t.id]=!0,s[t.id]=!0})),o.each((function(t){var r=t.coordinateSystem,o=[];z(r.getCartesians(),(function(t,e){(L(n,t.getAxis("x").model)>=0||L(i,t.getAxis("y").model)>=0)&&o.push(t)})),e.push({panelId:"grid--"+t.id,gridModel:t,coordSysModel:t,coordSys:o[0],coordSyses:o,getPanelRect:wI.grid,xAxisDeclared:a[t.id],yAxisDeclared:s[t.id]})})))},geo:function(t,e){z(t.geoModels,(function(t){var n=t.coordinateSystem;e.push({panelId:"geo--"+t.id,geoModel:t,coordSysModel:t,coordSys:n,coordSyses:[n],getPanelRect:wI.geo})}))}},xI=[function(t,e){var n=t.xAxisModel,i=t.yAxisModel,r=t.gridModel;return!r&&n&&(r=n.axis.grid.model),!r&&i&&(r=i.axis.grid.model),r&&r===e.gridModel},function(t,e){var n=t.geoModel;return n&&n===e.geoModel}],wI={grid:function(){return this.coordSys.master.getRect().clone()},geo:function(){var t=this.coordSys,e=t.getBoundingRect().clone();return e.applyTransform(_h(t)),e}},bI={lineX:W(SI,0),lineY:W(SI,1),rect:function(t,e,n,i){var r=t?e.pointToData([n[0][0],n[1][0]],i):e.dataToPoint([n[0][0],n[1][0]],i),o=t?e.pointToData([n[0][1],n[1][1]],i):e.dataToPoint([n[0][1],n[1][1]],i),a=[yI([r[0],o[0]]),yI([r[1],o[1]])];return{values:a,xyMinMax:a}},polygon:function(t,e,n,i){var r=[[1/0,-1/0],[1/0,-1/0]];return{values:E(n,(function(n){var o=t?e.pointToData(n,i):e.dataToPoint(n,i);return r[0][0]=Math.min(r[0][0],o[0]),r[1][0]=Math.min(r[1][0],o[1]),r[0][1]=Math.max(r[0][1],o[0]),r[1][1]=Math.max(r[1][1],o[1]),o})),xyMinMax:r}}};function SI(t,e,n,i){var r=n.getAxis(["x","y"][t]),o=yI(E([0,1],(function(t){return e?r.coordToData(r.toLocalCoord(i[t]),!0):r.toGlobalCoord(r.dataToCoord(i[t]))}))),a=[];return a[t]=o,a[1-t]=[NaN,NaN],{values:o,xyMinMax:a}}var MI={lineX:W(CI,0),lineY:W(CI,1),rect:function(t,e,n){return[[t[0][0]-n[0]*e[0][0],t[0][1]-n[0]*e[0][1]],[t[1][0]-n[1]*e[1][0],t[1][1]-n[1]*e[1][1]]]},polygon:function(t,e,n){return E(t,(function(t,i){return[t[0]-n[0]*e[i][0],t[1]-n[1]*e[i][1]]}))}};function CI(t,e,n,i){return[e[0]-i[t]*n[0],e[1]-i[t]*n[1]]}function TI(t){return t?[t[0][1]-t[0][0],t[1][1]-t[1][0]]:[NaN,NaN]}var II,DI,kI=z,AI=fo+"toolbox-dataZoom_",PI=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.render=function(t,e,n,i){this._brushController||(this._brushController=new OT(n.getZr()),this._brushController.on("brush",H(this._onBrush,this)).mount()),function(t,e,n,i,r){var o=n._isZoomActive;i&&"takeGlobalCursor"===i.type&&(o="dataZoomSelect"===i.key&&i.dataZoomSelectActive);n._isZoomActive=o,t.setIconStatus("zoom",o?"emphasis":"normal");var a=new vI(OI(t),e,{include:["grid"]}),s=a.makePanelOpts(r,(function(t){return t.xAxisDeclared&&!t.yAxisDeclared?"lineX":!t.xAxisDeclared&&t.yAxisDeclared?"lineY":"rect"}));n._brushController.setPanels(s).enableBrush(!(!o||!s.length)&&{brushType:"auto",brushStyle:t.getModel("brushStyle").getItemStyle()})}(t,e,this,i,n),function(t,e){t.setIconStatus("back",function(t){return _T(t).length}(e)>1?"emphasis":"normal")}(t,e)},e.prototype.onclick=function(t,e,n){LI[n].call(this)},e.prototype.remove=function(t,e){this._brushController&&this._brushController.unmount()},e.prototype.dispose=function(t,e){this._brushController&&this._brushController.dispose()},e.prototype._onBrush=function(t){var e=t.areas;if(t.isEnd&&e.length){var n={},i=this.ecModel;this._brushController.updateCovers([]),new vI(OI(this.model),i,{include:["grid"]}).matchOutputRanges(e,i,(function(t,e,n){if("cartesian2d"===n.type){var i=t.brushType;"rect"===i?(r("x",n,e[0]),r("y",n,e[1])):r({lineX:"x",lineY:"y"}[i],n,e)}})),function(t,e){var n=_T(t);yT(e,(function(e,i){for(var r=n.length-1;r>=0&&!n[r][i];r--);if(r<0){var o=t.queryComponents({mainType:"dataZoom",subType:"select",id:i})[0];if(o){var a=o.getPercentRange();n[0][i]={dataZoomId:i,start:a[0],end:a[1]}}}})),n.push(e)}(i,n),this._dispatchZoomAction(n)}function r(t,e,r){var o=e.getAxis(t),a=o.model,s=function(t,e,n){var i;return n.eachComponent({mainType:"dataZoom",subType:"select"},(function(n){n.getAxisModel(t,e.componentIndex)&&(i=n)})),i}(t,a,i),l=s.findRepresentativeAxisProxy(a).getMinMaxSpan();null==l.minValueSpan&&null==l.maxValueSpan||(r=WC(0,r.slice(),o.scale.getExtent(),0,l.minValueSpan,l.maxValueSpan)),s&&(n[s.id]={dataZoomId:s.id,startValue:r[0],endValue:r[1]})}},e.prototype._dispatchZoomAction=function(t){var e=[];kI(t,(function(t,n){e.push(T(t))})),e.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:e})},e.getDefaultOption=function(t){return{show:!0,filterMode:"filter",icon:{zoom:"M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",back:"M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"},title:t.getLocaleModel().get(["toolbox","dataZoom","title"]),brushStyle:{borderWidth:0,color:"rgba(210,219,238,0.2)"}}},e}(QC),LI={zoom:function(){var t=!this._isZoomActive;this.api.dispatchAction({type:"takeGlobalCursor",key:"dataZoomSelect",dataZoomSelectActive:t})},back:function(){this._dispatchZoomAction(function(t){var e=_T(t),n=e[e.length-1];e.length>1&&e.pop();var i={};return yT(n,(function(t,n){for(var r=e.length-1;r>=0;r--)if(t=e[r][n]){i[n]=t;break}})),i}(this.ecModel))}};function OI(t){var e={xAxisIndex:t.get("xAxisIndex",!0),yAxisIndex:t.get("yAxisIndex",!0),xAxisId:t.get("xAxisId",!0),yAxisId:t.get("yAxisId",!0)};return null==e.xAxisIndex&&null==e.xAxisId&&(e.xAxisIndex="all"),null==e.yAxisIndex&&null==e.yAxisId&&(e.yAxisIndex="all"),e}II="dataZoom",DI=function(t){var e=t.getComponent("toolbox",0),n=["feature","dataZoom"];if(e&&null!=e.get(n)){var i=e.getModel(n),r=[],o=ko(t,OI(i));return kI(o.xAxisModels,(function(t){return a(t,"xAxis","xAxisIndex")})),kI(o.yAxisModels,(function(t){return a(t,"yAxis","yAxisIndex")})),r}function a(t,e,n){var o=t.componentIndex,a={type:"select",$fromToolbox:!0,filterMode:i.get("filterMode",!0)||"filter",id:AI+e+o};a[n]=o,r.push(a)}},st(null==Rp.get(II)&&DI),Rp.set(II,DI);var RI=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="tooltip",e.dependencies=["axisPointer"],e.defaultOption={z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,displayMode:"single",renderMode:"auto",confine:null,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"#fff",shadowBlur:10,shadowColor:"rgba(0, 0, 0, .2)",shadowOffsetX:1,shadowOffsetY:2,borderRadius:4,borderWidth:1,padding:null,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:"#999",width:1,type:"dashed",textStyle:{}}},textStyle:{color:"#666",fontSize:14}},e}(pp);function NI(t){var e=t.get("confine");return null!=e?!!e:"richText"===t.get("renderMode")}function zI(t){if(r.domSupported)for(var e=document.documentElement.style,n=0,i=t.length;n-1?(u+="top:50%",h+="translateY(-50%) rotate("+(a="left"===s?-225:-45)+"deg)"):(u+="left:50%",h+="translateX(-50%) rotate("+(a="top"===s?225:45)+"deg)");var c=a*Math.PI/180,p=l+r,d=p*Math.abs(Math.cos(c))+p*Math.abs(Math.sin(c)),f=e+" solid "+r+"px;";return'
'}(n,i,r)),Z(t))o.innerHTML=t+a;else if(t){o.innerHTML="",G(t)||(t=[t]);for(var s=0;s=0?this._tryShow(n,i):"leave"===e&&this._hide(i))}),this))},e.prototype._keepShow=function(){var t=this._tooltipModel,e=this._ecModel,n=this._api,i=t.get("triggerOn");if(null!=this._lastX&&null!=this._lastY&&"none"!==i&&"click"!==i){var r=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout((function(){!n.isDisposed()&&r.manuallyShowTip(t,e,n,{x:r._lastX,y:r._lastY,dataByCoordSys:r._lastDataByCoordSys})}))}},e.prototype.manuallyShowTip=function(t,e,n,i){if(i.from!==this.uid&&!r.node&&n.getDom()){var o=JI(i,n);this._ticket="";var a=i.dataByCoordSys,s=function(t,e,n){var i=Ao(t).queryOptionMap,r=i.keys()[0];if(!r||"series"===r)return;var o=Oo(e,r,i.get(r),{useDefault:!1,enableAll:!1,enableNone:!1}),a=o.models[0];if(!a)return;var s,l=n.getViewOfComponentModel(a);if(l.group.traverse((function(e){var n=Us(e).tooltipConfig;if(n&&n.name===t.name)return s=e,!0})),s)return{componentMainType:r,componentIndex:a.componentIndex,el:s}}(i,e,n);if(s){var l=s.el.getBoundingRect().clone();l.applyTransform(s.el.transform),this._tryShow({offsetX:l.x+l.width/2,offsetY:l.y+l.height/2,target:s.el,position:i.position,positionDefault:"bottom"},o)}else if(i.tooltip&&null!=i.x&&null!=i.y){var u=KI;u.x=i.x,u.y=i.y,u.update(),Us(u).tooltipConfig={name:null,option:i.tooltip},this._tryShow({offsetX:i.x,offsetY:i.y,target:u},o)}else if(a)this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,dataByCoordSys:a,tooltipOption:i.tooltipOption},o);else if(null!=i.seriesIndex){if(this._manuallyAxisShowTip(t,e,n,i))return;var h=YM(i,e),c=h.point[0],p=h.point[1];null!=c&&null!=p&&this._tryShow({offsetX:c,offsetY:p,target:h.el,position:i.position,positionDefault:"bottom"},o)}else null!=i.x&&null!=i.y&&(n.dispatchAction({type:"updateAxisPointer",x:i.x,y:i.y}),this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,target:n.getZr().findHover(i.x,i.y).target},o))}},e.prototype.manuallyHideTip=function(t,e,n,i){var r=this._tooltipContent;this._tooltipModel&&r.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=this._lastDataByCoordSys=null,i.from!==this.uid&&this._hide(JI(i,n))},e.prototype._manuallyAxisShowTip=function(t,e,n,i){var r=i.seriesIndex,o=i.dataIndex,a=e.getComponent("axisPointer").coordSysAxesInfo;if(null!=r&&null!=o&&null!=a){var s=e.getSeriesByIndex(r);if(s)if("axis"===QI([s.getData().getItemModel(o),s,(s.coordinateSystem||{}).model],this._tooltipModel).get("trigger"))return n.dispatchAction({type:"updateAxisPointer",seriesIndex:r,dataIndex:o,position:i.position}),!0}},e.prototype._tryShow=function(t,e){var n=t.target;if(this._tooltipModel){this._lastX=t.offsetX,this._lastY=t.offsetY;var i=t.dataByCoordSys;if(i&&i.length)this._showAxisTooltip(i,t);else if(n){var r,o;if("legend"===Us(n).ssrType)return;this._lastDataByCoordSys=null,$g(n,(function(t){return null!=Us(t).dataIndex?(r=t,!0):null!=Us(t).tooltipConfig?(o=t,!0):void 0}),!0),r?this._showSeriesItemTooltip(t,r,e):o?this._showComponentItemTooltip(t,o,e):this._hide(e)}else this._lastDataByCoordSys=null,this._hide(e)}},e.prototype._showOrMove=function(t,e){var n=t.get("showDelay");e=H(e,this),clearTimeout(this._showTimout),n>0?this._showTimout=setTimeout(e,n):e()},e.prototype._showAxisTooltip=function(t,e){var n=this._ecModel,i=this._tooltipModel,r=[e.offsetX,e.offsetY],o=QI([e.tooltipOption],i),a=this._renderMode,s=[],l=Df("section",{blocks:[],noHeader:!0}),u=[],h=new Bf;z(t,(function(t){z(t.dataByAxis,(function(t){var e=n.getComponent(t.axisDim+"Axis",t.axisIndex),r=t.value;if(e&&null!=r){var o=LM(r,e.axis,n,t.seriesDataIndices,t.valueLabelOpt),c=Df("section",{header:o,noHeader:!lt(o),sortBlocks:!0,blocks:[]});l.blocks.push(c),z(t.seriesDataIndices,(function(l){var p=n.getSeriesByIndex(l.seriesIndex),d=l.dataIndexInside,f=p.getDataParams(d);if(!(f.dataIndex<0)){f.axisDim=t.axisDim,f.axisIndex=t.axisIndex,f.axisType=t.axisType,f.axisId=t.axisId,f.axisValue=z_(e.axis,{value:r}),f.axisValueLabel=o,f.marker=h.makeTooltipMarker("item",Qc(f.color),a);var g=qd(p.formatTooltip(d,!0,null)),v=g.frag;if(v){var y=QI([p],i).get("valueFormatter");c.blocks.push(y?k({valueFormatter:y},v):v)}g.text&&u.push(g.text),s.push(f)}}))}}))})),l.blocks.reverse(),u.reverse();var c=e.position,p=o.get("order"),d=Rf(l,h,a,p,n.get("useUTC"),o.get("textStyle"));d&&u.unshift(d);var f="richText"===a?"\n\n":"
",g=u.join(f);this._showOrMove(o,(function(){this._updateContentNotChangedOnAxis(t,s)?this._updatePosition(o,c,r[0],r[1],this._tooltipContent,s):this._showTooltipContent(o,g,s,Math.random()+"",r[0],r[1],c,null,h)}))},e.prototype._showSeriesItemTooltip=function(t,e,n){var i=this._ecModel,r=Us(e),o=r.seriesIndex,a=i.getSeriesByIndex(o),s=r.dataModel||a,l=r.dataIndex,u=r.dataType,h=s.getData(u),c=this._renderMode,p=t.positionDefault,d=QI([h.getItemModel(l),s,a&&(a.coordinateSystem||{}).model],this._tooltipModel,p?{position:p}:null),f=d.get("trigger");if(null==f||"item"===f){var g=s.getDataParams(l,u),v=new Bf;g.marker=v.makeTooltipMarker("item",Qc(g.color),c);var y=qd(s.formatTooltip(l,!1,u)),m=d.get("order"),_=d.get("valueFormatter"),x=y.frag,w=x?Rf(_?k({valueFormatter:_},x):x,v,c,m,i.get("useUTC"),d.get("textStyle")):y.text,b="item_"+s.name+"_"+l;this._showOrMove(d,(function(){this._showTooltipContent(d,w,g,b,t.offsetX,t.offsetY,t.position,t.target,v)})),n({type:"showTip",dataIndexInside:l,dataIndex:h.getRawIndex(l),seriesIndex:o,from:this.uid})}},e.prototype._showComponentItemTooltip=function(t,e,n){var i="html"===this._renderMode,r=Us(e),o=r.tooltipConfig.option||{},a=o.encodeHTMLContent;if(Z(o)){o={content:o,formatter:o},a=!0}a&&i&&o.content&&((o=T(o)).content=te(o.content));var s=[o],l=this._ecModel.getComponent(r.componentMainType,r.componentIndex);l&&s.push(l),s.push({formatter:o.content});var u=t.positionDefault,h=QI(s,this._tooltipModel,u?{position:u}:null),c=h.get("content"),p=Math.random()+"",d=new Bf;this._showOrMove(h,(function(){var n=T(h.get("formatterParams")||{});this._showTooltipContent(h,c,n,p,t.offsetX,t.offsetY,t.position,e,d)})),n({type:"showTip",from:this.uid})},e.prototype._showTooltipContent=function(t,e,n,i,r,o,a,s,l){if(this._ticket="",t.get("showContent")&&t.get("show")){var u=this._tooltipContent;u.setEnterable(t.get("enterable"));var h=t.get("formatter");a=a||t.get("position");var c=e,p=this._getNearestPoint([r,o],n,t.get("trigger"),t.get("borderColor")).color;if(h)if(Z(h)){var d=t.ecModel.get("useUTC"),f=G(n)?n[0]:n;c=h,f&&f.axisType&&f.axisType.indexOf("time")>=0&&(c=Ic(f.axisValue,c,d)),c=Kc(c,n,!0)}else if(U(h)){var g=H((function(e,i){e===this._ticket&&(u.setContent(i,l,t,p,a),this._updatePosition(t,a,r,o,u,n,s))}),this);this._ticket=i,c=h(n,i,g)}else c=h;u.setContent(c,l,t,p,a),u.show(t,p),this._updatePosition(t,a,r,o,u,n,s)}},e.prototype._getNearestPoint=function(t,e,n,i){return"axis"===n||G(e)?{color:i||("html"===this._renderMode?"#fff":"none")}:G(e)?void 0:{color:i||e.color||e.borderColor}},e.prototype._updatePosition=function(t,e,n,i,r,o,a){var s=this._api.getWidth(),l=this._api.getHeight();e=e||t.get("position");var u=r.getSize(),h=t.get("align"),c=t.get("verticalAlign"),p=a&&a.getBoundingRect().clone();if(a&&p.applyTransform(a.transform),U(e)&&(e=e([n,i],o,r.el,p,{viewSize:[s,l],contentSize:u.slice()})),G(e))n=Gr(e[0],s),i=Gr(e[1],l);else if(j(e)){var d=e;d.width=u[0],d.height=u[1];var f=op(d,{width:s,height:l});n=f.x,i=f.y,h=null,c=null}else if(Z(e)&&a){var g=function(t,e,n,i){var r=n[0],o=n[1],a=Math.ceil(Math.SQRT2*i)+8,s=0,l=0,u=e.width,h=e.height;switch(t){case"inside":s=e.x+u/2-r/2,l=e.y+h/2-o/2;break;case"top":s=e.x+u/2-r/2,l=e.y-o-a;break;case"bottom":s=e.x+u/2-r/2,l=e.y+h+a;break;case"left":s=e.x-r-a,l=e.y+h/2-o/2;break;case"right":s=e.x+u+a,l=e.y+h/2-o/2}return[s,l]}(e,p,u,t.get("borderWidth"));n=g[0],i=g[1]}else{g=function(t,e,n,i,r,o,a){var s=n.getSize(),l=s[0],u=s[1];null!=o&&(t+l+o+2>i?t-=l+o:t+=o);null!=a&&(e+u+a>r?e-=u+a:e+=a);return[t,e]}(n,i,r,s,l,h?null:20,c?null:20);n=g[0],i=g[1]}if(h&&(n-=tD(h)?u[0]/2:"right"===h?u[0]:0),c&&(i-=tD(c)?u[1]/2:"bottom"===c?u[1]:0),NI(t)){g=function(t,e,n,i,r){var o=n.getSize(),a=o[0],s=o[1];return t=Math.min(t+a,i)-a,e=Math.min(e+s,r)-s,t=Math.max(t,0),e=Math.max(e,0),[t,e]}(n,i,r,s,l);n=g[0],i=g[1]}r.moveTo(n,i)},e.prototype._updateContentNotChangedOnAxis=function(t,e){var n=this._lastDataByCoordSys,i=this._cbParamsList,r=!!n&&n.length===t.length;return r&&z(n,(function(n,o){var a=n.dataByAxis||[],s=(t[o]||{}).dataByAxis||[];(r=r&&a.length===s.length)&&z(a,(function(t,n){var o=s[n]||{},a=t.seriesDataIndices||[],l=o.seriesDataIndices||[];(r=r&&t.value===o.value&&t.axisType===o.axisType&&t.axisId===o.axisId&&a.length===l.length)&&z(a,(function(t,e){var n=l[e];r=r&&t.seriesIndex===n.seriesIndex&&t.dataIndex===n.dataIndex})),i&&z(t.seriesDataIndices,(function(t){var n=t.seriesIndex,o=e[n],a=i[n];o&&a&&a.data!==o.data&&(r=!1)}))}))})),this._lastDataByCoordSys=t,this._cbParamsList=e,!!r},e.prototype._hide=function(t){this._lastDataByCoordSys=null,t({type:"hideTip",from:this.uid})},e.prototype.dispose=function(t,e){!r.node&&e.getDom()&&(cg(this,"_updatePosition"),this._tooltipContent.dispose(),UM("itemTooltip",e))},e.type="tooltip",e}(Kf);function QI(t,e,n){var i,r=e.ecModel;n?(i=new ic(n,r,r),i=new ic(e.option,i,r)):i=e;for(var o=t.length-1;o>=0;o--){var a=t[o];a&&(a instanceof ic&&(a=a.get("tooltip",!0)),Z(a)&&(a={formatter:a}),a&&(i=new ic(a,i,r)))}return i}function JI(t,e){return t.dispatchAction||H(e.dispatchAction,e)}function tD(t){return"center"===t||"middle"===t}var eD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.layoutMode={type:"box",ignoreSize:!0},n}return n(e,t),e.type="title",e.defaultOption={z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:0,top:0,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bold",color:"#464646"},subtextStyle:{fontSize:12,color:"#6E7079"}},e}(pp),nD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){if(this.group.removeAll(),t.get("show")){var i=this.group,r=t.getModel("textStyle"),o=t.getModel("subtextStyle"),a=t.get("textAlign"),s=it(t.get("textBaseline"),t.get("textVerticalAlign")),l=new Ps({style:Eh(r,{text:t.get("text"),fill:r.getTextColor()},{disableBox:!0}),z2:10}),u=l.getBoundingRect(),h=t.get("subtext"),c=new Ps({style:Eh(o,{text:h,fill:o.getTextColor(),y:u.height+t.get("itemGap"),verticalAlign:"top"},{disableBox:!0}),z2:10}),p=t.get("link"),d=t.get("sublink"),f=t.get("triggerEvent",!0);l.silent=!p&&!f,c.silent=!d&&!f,p&&l.on("click",(function(){Jc(p,"_"+t.get("target"))})),d&&c.on("click",(function(){Jc(d,"_"+t.get("subtarget"))})),Us(l).eventData=Us(c).eventData=f?{componentType:"title",componentIndex:t.componentIndex}:null,i.add(l),h&&i.add(c);var g=i.getBoundingRect(),v=t.getBoxLayoutParams();v.width=g.width,v.height=g.height;var y=op(v,{width:n.getWidth(),height:n.getHeight()},t.get("padding"));a||("middle"===(a=t.get("left")||t.get("right"))&&(a="center"),"right"===a?y.x+=y.width:"center"===a&&(y.x+=y.width/2)),s||("center"===(s=t.get("top")||t.get("bottom"))&&(s="middle"),"bottom"===s?y.y+=y.height:"middle"===s&&(y.y+=y.height/2),s=s||"top"),i.x=y.x,i.y=y.y,i.markRedraw();var m={align:a,verticalAlign:s};l.setStyle(m),c.setStyle(m),g=i.getBoundingRect();var _=y.margin,x=t.getItemStyle(["color","opacity"]);x.fill=t.get("backgroundColor");var w=new Ds({shape:{x:g.x-_[3],y:g.y-_[0],width:g.width+_[1]+_[3],height:g.height+_[0]+_[2],r:t.get("borderRadius")},style:x,subPixelOptimize:!0,silent:!0});i.add(w)}},e.type="title",e}(Kf);function iD(t,e){if(!t)return!1;for(var n=G(t)?t:[t],i=0;i=0&&(a[o]=+a[o].toFixed(c)),[a,h]}var hD={min:W(uD,"min"),max:W(uD,"max"),average:W(uD,"average"),median:W(uD,"median")};function cD(t,e){if(e){var n=t.getData(),i=t.coordinateSystem,r=i&&i.dimensions;if(!function(t){return!isNaN(parseFloat(t.x))&&!isNaN(parseFloat(t.y))}(e)&&!G(e.coord)&&G(r)){var o=pD(e,n,i,t);if((e=T(e)).type&&hD[e.type]&&o.baseAxis&&o.valueAxis){var a=L(r,o.baseAxis.dim),s=L(r,o.valueAxis.dim),l=hD[e.type](n,o.baseDataDim,o.valueDataDim,a,s);e.coord=l[0],e.value=l[1]}else e.coord=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis]}if(null!=e.coord&&G(r))for(var u=e.coord,h=0;h<2;h++)hD[u[h]]&&(u[h]=gD(n,n.mapDimension(r[h]),u[h]));else e.coord=[];return e}}function pD(t,e,n,i){var r={};return null!=t.valueIndex||null!=t.valueDim?(r.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,r.valueAxis=n.getAxis(function(t,e){var n=t.getData().getDimensionInfo(e);return n&&n.coordDim}(i,r.valueDataDim)),r.baseAxis=n.getOtherAxis(r.valueAxis),r.baseDataDim=e.mapDimension(r.baseAxis.dim)):(r.baseAxis=i.getBaseAxis(),r.valueAxis=n.getOtherAxis(r.baseAxis),r.baseDataDim=e.mapDimension(r.baseAxis.dim),r.valueDataDim=e.mapDimension(r.valueAxis.dim)),r}function dD(t,e){return!(t&&t.containData&&e.coord&&!lD(e))||t.containData(e.coord)}function fD(t,e){return t?function(t,n,i,r){return Jd(r<2?t.coord&&t.coord[r]:t.value,e[r])}:function(t,n,i,r){return Jd(t.value,e[r])}}function gD(t,e,n){if("average"===n){var i=0,r=0;return t.each(e,(function(t,e){isNaN(t)||(i+=t,r++)})),i/r}return"median"===n?t.getMedian(e):t.getDataExtent(e)["max"===n?1:0]}var vD=Io(),yD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(){this.markerGroupMap=gt()},e.prototype.render=function(t,e,n){var i=this,r=this.markerGroupMap;r.each((function(t){vD(t).keep=!1})),e.eachSeries((function(t){var r=aD.getMarkerModelFromSeries(t,i.type);r&&i.renderSeries(t,r,e,n)})),r.each((function(t){!vD(t).keep&&i.group.remove(t.group)}))},e.prototype.markKeep=function(t){vD(t).keep=!0},e.prototype.toggleBlurSeries=function(t,e){var n=this;z(t,(function(t){var i=aD.getMarkerModelFromSeries(t,n.type);i&&i.getData().eachItemGraphicEl((function(t){t&&(e?_l(t):xl(t))}))}))},e.type="marker",e}(Kf);function mD(t,e,n){var i=e.coordinateSystem;t.each((function(r){var o,a=t.getItemModel(r),s=Gr(a.get("x"),n.getWidth()),l=Gr(a.get("y"),n.getHeight());if(isNaN(s)||isNaN(l)){if(e.getMarkerPosition)o=e.getMarkerPosition(t.getValues(t.dimensions,r));else if(i){var u=t.get(i.dimensions[0],r),h=t.get(i.dimensions[1],r);o=i.dataToPoint([u,h])}}else o=[s,l];isNaN(s)||(o[0]=s),isNaN(l)||(o[1]=l),t.setItemLayout(r,o)}))}var _D=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries((function(t){var e=aD.getMarkerModelFromSeries(t,"markPoint");e&&(mD(e.getData(),t,n),this.markerGroupMap.get(t.id).updateLayout())}),this)},e.prototype.renderSeries=function(t,e,n,i){var r=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,new sb),u=function(t,e,n){var i;i=t?E(t&&t.dimensions,(function(t){return k(k({},e.getData().getDimensionInfo(e.getData().mapDimension(t))||{}),{name:t,ordinalMeta:null})})):[{name:"value",type:"float"}];var r=new Dm(i,n),o=E(n.get("data"),W(cD,e));t&&(o=V(o,W(dD,t)));var a=fD(!!t,i);return r.initData(o,null,a),r}(r,t,e);e.setData(u),mD(e.getData(),t,i),u.each((function(t){var n=u.getItemModel(t),i=n.getShallow("symbol"),r=n.getShallow("symbolSize"),o=n.getShallow("symbolRotate"),s=n.getShallow("symbolOffset"),l=n.getShallow("symbolKeepAspect");if(U(i)||U(r)||U(o)||U(s)){var h=e.getRawValue(t),c=e.getDataParams(t);U(i)&&(i=i(h,c)),U(r)&&(r=r(h,c)),U(o)&&(o=o(h,c)),U(s)&&(s=s(h,c))}var p=n.getModel("itemStyle").getItemStyle(),d=qg(a,"color");p.fill||(p.fill=d),u.setItemVisual(t,{symbol:i,symbolSize:r,symbolRotate:o,symbolOffset:s,symbolKeepAspect:l,style:p})})),l.updateData(u),this.group.add(l.group),u.eachItemGraphicEl((function(t){t.traverse((function(t){Us(t).dataModel=e}))})),this.markKeep(l),l.group.silent=e.get("silent")||t.get("silent")},e.type="markPoint",e}(yD);var xD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.createMarkerModelFromSeries=function(t,n,i){return new e(t,n,i)},e.type="markLine",e.defaultOption={z:5,symbol:["circle","arrow"],symbolSize:[8,16],symbolOffset:0,precision:2,tooltip:{trigger:"item"},label:{show:!0,position:"end",distance:5},lineStyle:{type:"dashed"},emphasis:{label:{show:!0},lineStyle:{width:3}},animationEasing:"linear"},e}(aD),wD=Au.prototype,bD=Ru.prototype,SD=function(){this.x1=0,this.y1=0,this.x2=0,this.y2=0,this.percent=1};!function(t){function e(){return null!==t&&t.apply(this,arguments)||this}n(e,t)}(SD);function MD(t){return isNaN(+t.cpx1)||isNaN(+t.cpy1)}var CD=function(t){function e(e){var n=t.call(this,e)||this;return n.type="ec-line",n}return n(e,t),e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new SD},e.prototype.buildPath=function(t,e){MD(e)?wD.buildPath.call(this,t,e):bD.buildPath.call(this,t,e)},e.prototype.pointAt=function(t){return MD(this.shape)?wD.pointAt.call(this,t):bD.pointAt.call(this,t)},e.prototype.tangentAt=function(t){var e=this.shape,n=MD(e)?[e.x2-e.x1,e.y2-e.y1]:bD.tangentAt.call(this,t);return Lt(n,n)},e}(vs),TD=["fromSymbol","toSymbol"];function ID(t){return"_"+t+"Type"}function DD(t,e,n){var i=e.getItemVisual(n,t);if(!i||"none"===i)return i;var r=e.getItemVisual(n,t+"Size"),o=e.getItemVisual(n,t+"Rotate"),a=e.getItemVisual(n,t+"Offset"),s=e.getItemVisual(n,t+"KeepAspect"),l=hv(r);return i+l+cv(a||0,l)+(o||"")+(s||"")}function kD(t,e,n){var i=e.getItemVisual(n,t);if(i&&"none"!==i){var r=e.getItemVisual(n,t+"Size"),o=e.getItemVisual(n,t+"Rotate"),a=e.getItemVisual(n,t+"Offset"),s=e.getItemVisual(n,t+"KeepAspect"),l=hv(r),u=cv(a||0,l),h=uv(i,-l[0]/2+u[0],-l[1]/2+u[1],l[0],l[1],null,s);return h.__specifiedRotation=null==o||isNaN(o)?void 0:+o*Math.PI/180||0,h.name=t,h}}function AD(t,e){t.x1=e[0][0],t.y1=e[0][1],t.x2=e[1][0],t.y2=e[1][1],t.percent=1;var n=e[2];n?(t.cpx1=n[0],t.cpy1=n[1]):(t.cpx1=NaN,t.cpy1=NaN)}var PD=function(t){function e(e,n,i){var r=t.call(this)||this;return r._createLine(e,n,i),r}return n(e,t),e.prototype._createLine=function(t,e,n){var i=t.hostModel,r=function(t){var e=new CD({name:"line",subPixelOptimize:!0});return AD(e.shape,t),e}(t.getItemLayout(e));r.shape.percent=0,Qu(r,{shape:{percent:1}},i,e),this.add(r),z(TD,(function(n){var i=kD(n,t,e);this.add(i),this[ID(n)]=DD(n,t,e)}),this),this._updateCommonStl(t,e,n)},e.prototype.updateData=function(t,e,n){var i=t.hostModel,r=this.childOfName("line"),o=t.getItemLayout(e),a={shape:{}};AD(a.shape,o),$u(r,a,i,e),z(TD,(function(n){var i=DD(n,t,e),r=ID(n);if(this[r]!==i){this.remove(this.childOfName(n));var o=kD(n,t,e);this.add(o)}this[r]=i}),this),this._updateCommonStl(t,e,n)},e.prototype.getLinePath=function(){return this.childAt(0)},e.prototype._updateCommonStl=function(t,e,n){var i=t.hostModel,r=this.childOfName("line"),o=n&&n.emphasisLineStyle,a=n&&n.blurLineStyle,s=n&&n.selectLineStyle,l=n&&n.labelStatesModels,u=n&&n.emphasisDisabled,h=n&&n.focus,c=n&&n.blurScope;if(!n||t.hasItemOption){var p=t.getItemModel(e),d=p.getModel("emphasis");o=d.getModel("lineStyle").getLineStyle(),a=p.getModel(["blur","lineStyle"]).getLineStyle(),s=p.getModel(["select","lineStyle"]).getLineStyle(),u=d.get("disabled"),h=d.get("focus"),c=d.get("blurScope"),l=zh(p)}var f=t.getItemVisual(e,"style"),g=f.stroke;r.useStyle(f),r.style.fill=null,r.style.strokeNoScale=!0,r.ensureState("emphasis").style=o,r.ensureState("blur").style=a,r.ensureState("select").style=s,z(TD,(function(t){var e=this.childOfName(t);if(e){e.setColor(g),e.style.opacity=f.opacity;for(var n=0;n0&&(m[0]=-m[0],m[1]=-m[1]);var x=y[0]<0?-1:1;if("start"!==i.__position&&"end"!==i.__position){var w=-Math.atan2(y[1],y[0]);u[0].8?"left":h[0]<-.8?"right":"center",p=h[1]>.8?"top":h[1]<-.8?"bottom":"middle";break;case"start":i.x=-h[0]*f+l[0],i.y=-h[1]*g+l[1],c=h[0]>.8?"right":h[0]<-.8?"left":"center",p=h[1]>.8?"bottom":h[1]<-.8?"top":"middle";break;case"insideStartTop":case"insideStart":case"insideStartBottom":i.x=f*x+l[0],i.y=l[1]+b,c=y[0]<0?"right":"left",i.originX=-f*x,i.originY=-b;break;case"insideMiddleTop":case"insideMiddle":case"insideMiddleBottom":case"middle":i.x=_[0],i.y=_[1]+b,c="center",i.originY=-b;break;case"insideEndTop":case"insideEnd":case"insideEndBottom":i.x=-f*x+u[0],i.y=u[1]+b,c=y[0]>=0?"right":"left",i.originX=f*x,i.originY=-b}i.scaleX=i.scaleY=r,i.setStyle({verticalAlign:i.__verticalAlign||p,align:i.__align||c})}}}function S(t,e){var n=t.__specifiedRotation;if(null==n){var i=a.tangentAt(e);t.attr("rotation",(1===e?-1:1)*Math.PI/2-Math.atan2(i[1],i[0]))}else t.attr("rotation",n)}},e}(Pr),LD=function(){function t(t){this.group=new Pr,this._LineCtor=t||PD}return t.prototype.updateData=function(t){var e=this;this._progressiveEls=null;var n=this,i=n.group,r=n._lineData;n._lineData=t,r||i.removeAll();var o=OD(t);t.diff(r).add((function(n){e._doAdd(t,n,o)})).update((function(n,i){e._doUpdate(r,t,i,n,o)})).remove((function(t){i.remove(r.getItemGraphicEl(t))})).execute()},t.prototype.updateLayout=function(){var t=this._lineData;t&&t.eachItemGraphicEl((function(e,n){e.updateLayout(t,n)}),this)},t.prototype.incrementalPrepareUpdate=function(t){this._seriesScope=OD(t),this._lineData=null,this.group.removeAll()},t.prototype.incrementalUpdate=function(t,e){function n(t){t.isGroup||function(t){return t.animators&&t.animators.length>0}(t)||(t.incremental=!0,t.ensureState("emphasis").hoverLayer=!0)}this._progressiveEls=[];for(var i=t.start;i=0&&X(l)&&(l=+l.toFixed(Math.min(f,20))),p.coord[h]=d.coord[h]=l,r=[p,d,{type:a,valueIndex:i.valueIndex,value:l}]}else r=[]}var g=[cD(t,r[0]),cD(t,r[1]),k({},r[2])];return g[2].type=g[2].type||null,I(g[2],g[0]),I(g[2],g[1]),g};function BD(t){return!isNaN(t)&&!isFinite(t)}function VD(t,e,n,i){var r=1-t,o=i.dimensions[t];return BD(e[r])&&BD(n[r])&&e[t]===n[t]&&i.getAxis(o).containData(e[t])}function FD(t,e){if("cartesian2d"===t.type){var n=e[0].coord,i=e[1].coord;if(n&&i&&(VD(1,n,i,t)||VD(0,n,i,t)))return!0}return dD(t,e[0])&&dD(t,e[1])}function HD(t,e,n,i,r){var o,a=i.coordinateSystem,s=t.getItemModel(e),l=Gr(s.get("x"),r.getWidth()),u=Gr(s.get("y"),r.getHeight());if(isNaN(l)||isNaN(u)){if(i.getMarkerPosition)o=i.getMarkerPosition(t.getValues(t.dimensions,e));else{var h=a.dimensions,c=t.get(h[0],e),p=t.get(h[1],e);o=a.dataToPoint([c,p])}if(xb(a,"cartesian2d")){var d=a.getAxis("x"),f=a.getAxis("y");h=a.dimensions;BD(t.get(h[0],e))?o[0]=d.toGlobalCoord(d.getExtent()[n?0:1]):BD(t.get(h[1],e))&&(o[1]=f.toGlobalCoord(f.getExtent()[n?0:1]))}isNaN(l)||(o[0]=l),isNaN(u)||(o[1]=u)}else o=[l,u];t.setItemLayout(e,o)}var WD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries((function(t){var e=aD.getMarkerModelFromSeries(t,"markLine");if(e){var i=e.getData(),r=zD(e).from,o=zD(e).to;r.each((function(e){HD(r,e,!0,t,n),HD(o,e,!1,t,n)})),i.each((function(t){i.setItemLayout(t,[r.getItemLayout(t),o.getItemLayout(t)])})),this.markerGroupMap.get(t.id).updateLayout()}}),this)},e.prototype.renderSeries=function(t,e,n,i){var r=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,new LD);this.group.add(l.group);var u=function(t,e,n){var i;i=t?E(t&&t.dimensions,(function(t){return k(k({},e.getData().getDimensionInfo(e.getData().mapDimension(t))||{}),{name:t,ordinalMeta:null})})):[{name:"value",type:"float"}];var r=new Dm(i,n),o=new Dm(i,n),a=new Dm([],n),s=E(n.get("data"),W(ED,e,t,n));t&&(s=V(s,W(FD,t)));var l=fD(!!t,i);return r.initData(E(s,(function(t){return t[0]})),null,l),o.initData(E(s,(function(t){return t[1]})),null,l),a.initData(E(s,(function(t){return t[2]}))),a.hasItemOption=!0,{from:r,to:o,line:a}}(r,t,e),h=u.from,c=u.to,p=u.line;zD(e).from=h,zD(e).to=c,e.setData(p);var d=e.get("symbol"),f=e.get("symbolSize"),g=e.get("symbolRotate"),v=e.get("symbolOffset");function y(e,n,r){var o=e.getItemModel(n);HD(e,n,r,t,i);var s=o.getModel("itemStyle").getItemStyle();null==s.fill&&(s.fill=qg(a,"color")),e.setItemVisual(n,{symbolKeepAspect:o.get("symbolKeepAspect"),symbolOffset:it(o.get("symbolOffset",!0),v[r?0:1]),symbolRotate:it(o.get("symbolRotate",!0),g[r?0:1]),symbolSize:it(o.get("symbolSize"),f[r?0:1]),symbol:it(o.get("symbol",!0),d[r?0:1]),style:s})}G(d)||(d=[d,d]),G(f)||(f=[f,f]),G(g)||(g=[g,g]),G(v)||(v=[v,v]),u.from.each((function(t){y(h,t,!0),y(c,t,!1)})),p.each((function(t){var e=p.getItemModel(t).getModel("lineStyle").getLineStyle();p.setItemLayout(t,[h.getItemLayout(t),c.getItemLayout(t)]),null==e.stroke&&(e.stroke=h.getItemVisual(t,"style").fill),p.setItemVisual(t,{fromSymbolKeepAspect:h.getItemVisual(t,"symbolKeepAspect"),fromSymbolOffset:h.getItemVisual(t,"symbolOffset"),fromSymbolRotate:h.getItemVisual(t,"symbolRotate"),fromSymbolSize:h.getItemVisual(t,"symbolSize"),fromSymbol:h.getItemVisual(t,"symbol"),toSymbolKeepAspect:c.getItemVisual(t,"symbolKeepAspect"),toSymbolOffset:c.getItemVisual(t,"symbolOffset"),toSymbolRotate:c.getItemVisual(t,"symbolRotate"),toSymbolSize:c.getItemVisual(t,"symbolSize"),toSymbol:c.getItemVisual(t,"symbol"),style:e})})),l.updateData(p),u.line.eachItemGraphicEl((function(t){Us(t).dataModel=e,t.traverse((function(t){Us(t).dataModel=e}))})),this.markKeep(l),l.group.silent=e.get("silent")||t.get("silent")},e.type="markLine",e}(yD);var GD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.createMarkerModelFromSeries=function(t,n,i){return new e(t,n,i)},e.type="markArea",e.defaultOption={z:1,tooltip:{trigger:"item"},animation:!1,label:{show:!0,position:"top"},itemStyle:{borderWidth:0},emphasis:{label:{show:!0,position:"top"}}},e}(aD),UD=Io(),ZD=function(t,e,n,i){var r=i[0],o=i[1];if(r&&o){var a=cD(t,r),s=cD(t,o),l=a.coord,u=s.coord;l[0]=nt(l[0],-1/0),l[1]=nt(l[1],-1/0),u[0]=nt(u[0],1/0),u[1]=nt(u[1],1/0);var h=D([{},a,s]);return h.coord=[a.coord,s.coord],h.x0=a.x,h.y0=a.y,h.x1=s.x,h.y1=s.y,h}};function YD(t){return!isNaN(t)&&!isFinite(t)}function XD(t,e,n,i){var r=1-t;return YD(e[r])&&YD(n[r])}function jD(t,e){var n=e.coord[0],i=e.coord[1],r={coord:n,x:e.x0,y:e.y0},o={coord:i,x:e.x1,y:e.y1};return xb(t,"cartesian2d")?!(!n||!i||!XD(1,n,i)&&!XD(0,n,i))||function(t,e,n){return!(t&&t.containZone&&e.coord&&n.coord&&!lD(e)&&!lD(n))||t.containZone(e.coord,n.coord)}(t,r,o):dD(t,r)||dD(t,o)}function qD(t,e,n,i,r){var o,a=i.coordinateSystem,s=t.getItemModel(e),l=Gr(s.get(n[0]),r.getWidth()),u=Gr(s.get(n[1]),r.getHeight());if(isNaN(l)||isNaN(u)){if(i.getMarkerPosition){var h=t.getValues(["x0","y0"],e),c=t.getValues(["x1","y1"],e),p=a.clampData(h),d=a.clampData(c),f=[];"x0"===n[0]?f[0]=p[0]>d[0]?c[0]:h[0]:f[0]=p[0]>d[0]?h[0]:c[0],"y0"===n[1]?f[1]=p[1]>d[1]?c[1]:h[1]:f[1]=p[1]>d[1]?h[1]:c[1],o=i.getMarkerPosition(f,n,!0)}else{var g=[m=t.get(n[0],e),_=t.get(n[1],e)];a.clampData&&a.clampData(g,g),o=a.dataToPoint(g,!0)}if(xb(a,"cartesian2d")){var v=a.getAxis("x"),y=a.getAxis("y"),m=t.get(n[0],e),_=t.get(n[1],e);YD(m)?o[0]=v.toGlobalCoord(v.getExtent()["x0"===n[0]?0:1]):YD(_)&&(o[1]=y.toGlobalCoord(y.getExtent()["y0"===n[1]?0:1]))}isNaN(l)||(o[0]=l),isNaN(u)||(o[1]=u)}else o=[l,u];return o}var KD=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]],$D=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries((function(t){var e=aD.getMarkerModelFromSeries(t,"markArea");if(e){var i=e.getData();i.each((function(e){var r=E(KD,(function(r){return qD(i,e,r,t,n)}));i.setItemLayout(e,r),i.getItemGraphicEl(e).setShape("points",r)}))}}),this)},e.prototype.renderSeries=function(t,e,n,i){var r=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,{group:new Pr});this.group.add(l.group),this.markKeep(l);var u=function(t,e,n){var i,r,o=["x0","y0","x1","y1"];if(t){var a=E(t&&t.dimensions,(function(t){var n=e.getData();return k(k({},n.getDimensionInfo(n.mapDimension(t))||{}),{name:t,ordinalMeta:null})}));r=E(o,(function(t,e){return{name:t,type:a[e%2].type}})),i=new Dm(r,n)}else i=new Dm(r=[{name:"value",type:"float"}],n);var s=E(n.get("data"),W(ZD,e,t,n));t&&(s=V(s,W(jD,t)));var l=t?function(t,e,n,i){return Jd(t.coord[Math.floor(i/2)][i%2],r[i])}:function(t,e,n,i){return Jd(t.value,r[i])};return i.initData(s,null,l),i.hasItemOption=!0,i}(r,t,e);e.setData(u),u.each((function(e){var n=E(KD,(function(n){return qD(u,e,n,t,i)})),o=r.getAxis("x").scale,s=r.getAxis("y").scale,l=o.getExtent(),h=s.getExtent(),c=[o.parse(u.get("x0",e)),o.parse(u.get("x1",e))],p=[s.parse(u.get("y0",e)),s.parse(u.get("y1",e))];Zr(c),Zr(p);var d=!!(l[0]>c[1]||l[1]p[1]||h[1]=0},e.prototype.getOrient=function(){return"vertical"===this.get("orient")?{index:1,name:"vertical"}:{index:0,name:"horizontal"}},e.type="legend.plain",e.dependencies=["series"],e.defaultOption={z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,symbolRotate:"inherit",symbolKeepAspect:!0,inactiveColor:"#ccc",inactiveBorderColor:"#ccc",inactiveBorderWidth:"auto",itemStyle:{color:"inherit",opacity:"inherit",borderColor:"inherit",borderWidth:"auto",borderCap:"inherit",borderJoin:"inherit",borderDashOffset:"inherit",borderMiterLimit:"inherit"},lineStyle:{width:"auto",color:"inherit",inactiveColor:"#ccc",inactiveWidth:2,opacity:"inherit",type:"inherit",cap:"inherit",join:"inherit",dashOffset:"inherit",miterLimit:"inherit"},textStyle:{color:"#333"},selectedMode:!0,selector:!1,selectorLabel:{show:!0,borderRadius:10,padding:[3,5,3,5],fontSize:12,fontFamily:"sans-serif",color:"#666",borderWidth:1,borderColor:"#666"},emphasis:{selectorLabel:{show:!0,color:"#eee",backgroundColor:"#666"}},selectorPosition:"auto",selectorItemGap:7,selectorButtonGap:10,tooltip:{show:!1}},e}(pp),JD=W,tk=z,ek=Pr,nk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.newlineDisabled=!1,n}return n(e,t),e.prototype.init=function(){this.group.add(this._contentGroup=new ek),this.group.add(this._selectorGroup=new ek),this._isFirstRender=!0},e.prototype.getContentGroup=function(){return this._contentGroup},e.prototype.getSelectorGroup=function(){return this._selectorGroup},e.prototype.render=function(t,e,n){var i=this._isFirstRender;if(this._isFirstRender=!1,this.resetInner(),t.get("show",!0)){var r=t.get("align"),o=t.get("orient");r&&"auto"!==r||(r="right"===t.get("left")&&"vertical"===o?"right":"left");var a=t.get("selector",!0),s=t.get("selectorPosition",!0);!a||s&&"auto"!==s||(s="horizontal"===o?"end":"start"),this.renderInner(r,t,e,n,a,o,s);var l=t.getBoxLayoutParams(),u={width:n.getWidth(),height:n.getHeight()},h=t.get("padding"),c=op(l,u,h),p=this.layoutInner(t,r,c,i,a,s),d=op(A({width:p.width,height:p.height},l),u,h);this.group.x=d.x-p.x,this.group.y=d.y-p.y,this.group.markRedraw(),this.group.add(this._backgroundEl=iT(p,t))}},e.prototype.resetInner=function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl),this.getSelectorGroup().removeAll()},e.prototype.renderInner=function(t,e,n,i,r,o,a){var s=this.getContentGroup(),l=gt(),u=e.get("selectedMode"),h=[];n.eachRawSeries((function(t){!t.get("legendHoverLink")&&h.push(t.id)})),tk(e.getData(),(function(r,o){var a=r.get("name");if(!this.newlineDisabled&&(""===a||"\n"===a)){var c=new ek;return c.newline=!0,void s.add(c)}var p=n.getSeriesByName(a)[0];if(!l.get(a)){if(p){var d=p.getData(),f=d.getVisual("legendLineStyle")||{},g=d.getVisual("legendIcon"),v=d.getVisual("style"),y=this._createItem(p,a,o,r,e,t,f,v,g,u,i);y.on("click",JD(ik,a,null,i,h)).on("mouseover",JD(ok,p.name,null,i,h)).on("mouseout",JD(ak,p.name,null,i,h)),n.ssr&&y.eachChild((function(t){var e=Us(t);e.seriesIndex=p.seriesIndex,e.dataIndex=o,e.ssrType="legend"})),l.set(a,!0)}else n.eachRawSeries((function(s){if(!l.get(a)&&s.legendVisualProvider){var c=s.legendVisualProvider;if(!c.containName(a))return;var p=c.indexOfName(a),d=c.getItemVisual(p,"style"),f=c.getItemVisual(p,"legendIcon"),g=Wn(d.fill);g&&0===g[3]&&(g[3]=.2,d=k(k({},d),{fill:Kn(g,"rgba")}));var v=this._createItem(s,a,o,r,e,t,{},d,f,u,i);v.on("click",JD(ik,null,a,i,h)).on("mouseover",JD(ok,null,a,i,h)).on("mouseout",JD(ak,null,a,i,h)),n.ssr&&v.eachChild((function(t){var e=Us(t);e.seriesIndex=s.seriesIndex,e.dataIndex=o,e.ssrType="legend"})),l.set(a,!0)}}),this);0}}),this),r&&this._createSelector(r,e,i,o,a)},e.prototype._createSelector=function(t,e,n,i,r){var o=this.getSelectorGroup();tk(t,(function(t){var i=t.type,r=new Ps({style:{x:0,y:0,align:"center",verticalAlign:"middle"},onclick:function(){n.dispatchAction({type:"all"===i?"legendAllSelect":"legendInverseSelect"})}});o.add(r),Nh(r,{normal:e.getModel("selectorLabel"),emphasis:e.getModel(["emphasis","selectorLabel"])},{defaultText:t.title}),Al(r)}))},e.prototype._createItem=function(t,e,n,i,r,o,a,s,l,u,h){var c=t.visualDrawType,p=r.get("itemWidth"),d=r.get("itemHeight"),f=r.isSelected(e),g=i.get("symbolRotate"),v=i.get("symbolKeepAspect"),y=i.get("icon"),m=function(t,e,n,i,r,o,a){function s(t,e){"auto"===t.lineWidth&&(t.lineWidth=e.lineWidth>0?2:0),tk(t,(function(n,i){"inherit"===t[i]&&(t[i]=e[i])}))}var l=e.getModel("itemStyle"),u=l.getItemStyle(),h=0===t.lastIndexOf("empty",0)?"fill":"stroke",c=l.getShallow("decal");u.decal=c&&"inherit"!==c?zv(c,a):i.decal,"inherit"===u.fill&&(u.fill=i[r]);"inherit"===u.stroke&&(u.stroke=i[h]);"inherit"===u.opacity&&(u.opacity=("fill"===r?i:n).opacity);s(u,i);var p=e.getModel("lineStyle"),d=p.getLineStyle();if(s(d,n),"auto"===u.fill&&(u.fill=i.fill),"auto"===u.stroke&&(u.stroke=i.fill),"auto"===d.stroke&&(d.stroke=i.fill),!o){var f=e.get("inactiveBorderWidth"),g=u[h];u.lineWidth="auto"===f?i.lineWidth>0&&g?2:0:u.lineWidth,u.fill=e.get("inactiveColor"),u.stroke=e.get("inactiveBorderColor"),d.stroke=p.get("inactiveColor"),d.lineWidth=p.get("inactiveWidth")}return{itemStyle:u,lineStyle:d}}(l=y||l||"roundRect",i,a,s,c,f,h),_=new ek,x=i.getModel("textStyle");if(!U(t.getLegendIcon)||y&&"inherit"!==y){var w="inherit"===y&&t.getData().getVisual("symbol")?"inherit"===g?t.getData().getVisual("symbolRotate"):g:0;_.add(function(t){var e=t.icon||"roundRect",n=uv(e,0,0,t.itemWidth,t.itemHeight,t.itemStyle.fill,t.symbolKeepAspect);n.setStyle(t.itemStyle),n.rotation=(t.iconRotate||0)*Math.PI/180,n.setOrigin([t.itemWidth/2,t.itemHeight/2]),e.indexOf("empty")>-1&&(n.style.stroke=n.style.fill,n.style.fill="#fff",n.style.lineWidth=2);return n}({itemWidth:p,itemHeight:d,icon:l,iconRotate:w,itemStyle:m.itemStyle,lineStyle:m.lineStyle,symbolKeepAspect:v}))}else _.add(t.getLegendIcon({itemWidth:p,itemHeight:d,icon:l,iconRotate:g,itemStyle:m.itemStyle,lineStyle:m.lineStyle,symbolKeepAspect:v}));var b="left"===o?p+5:-5,S=o,M=r.get("formatter"),C=e;Z(M)&&M?C=M.replace("{name}",null!=e?e:""):U(M)&&(C=M(e));var T=f?x.getTextColor():i.get("inactiveColor");_.add(new Ps({style:Eh(x,{text:C,x:b,y:d/2,fill:T,align:S,verticalAlign:"middle"},{inheritColor:T})}));var I=new Ds({shape:_.getBoundingRect(),style:{fill:"transparent"}}),D=i.getModel("tooltip");return D.get("show")&&kh({el:I,componentModel:r,itemName:e,itemTooltipOption:D.option}),_.add(I),_.eachChild((function(t){t.silent=!0})),I.silent=!u,this.getContentGroup().add(_),Al(_),_.__legendDataIndex=n,_},e.prototype.layoutInner=function(t,e,n,i,r,o){var a=this.getContentGroup(),s=this.getSelectorGroup();rp(t.get("orient"),a,t.get("itemGap"),n.width,n.height);var l=a.getBoundingRect(),u=[-l.x,-l.y];if(s.markRedraw(),a.markRedraw(),r){rp("horizontal",s,t.get("selectorItemGap",!0));var h=s.getBoundingRect(),c=[-h.x,-h.y],p=t.get("selectorButtonGap",!0),d=t.getOrient().index,f=0===d?"width":"height",g=0===d?"height":"width",v=0===d?"y":"x";"end"===o?c[d]+=l[f]+p:u[d]+=h[f]+p,c[1-d]+=l[g]/2-h[g]/2,s.x=c[0],s.y=c[1],a.x=u[0],a.y=u[1];var y={x:0,y:0};return y[f]=l[f]+p+h[f],y[g]=Math.max(l[g],h[g]),y[v]=Math.min(0,h[v]+c[1-d]),y}return a.x=u[0],a.y=u[1],this.group.getBoundingRect()},e.prototype.remove=function(){this.getContentGroup().removeAll(),this._isFirstRender=!0},e.type="legend.plain",e}(Kf);function ik(t,e,n,i){ak(t,e,n,i),n.dispatchAction({type:"legendToggleSelect",name:null!=t?t:e}),ok(t,e,n,i)}function rk(t){for(var e,n=t.getZr().storage.getDisplayList(),i=0,r=n.length;in[r],f=[-c.x,-c.y];e||(f[i]=l[s]);var g=[0,0],v=[-p.x,-p.y],y=it(t.get("pageButtonGap",!0),t.get("itemGap",!0));d&&("end"===t.get("pageButtonPosition",!0)?v[i]+=n[r]-p[r]:g[i]+=p[r]+y);v[1-i]+=c[o]/2-p[o]/2,l.setPosition(f),u.setPosition(g),h.setPosition(v);var m={x:0,y:0};if(m[r]=d?n[r]:c[r],m[o]=Math.max(c[o],p[o]),m[a]=Math.min(0,p[a]+v[1-i]),u.__rectSize=n[r],d){var _={x:0,y:0};_[r]=Math.max(n[r]-p[r]-y,0),_[o]=m[o],u.setClipPath(new Ds({shape:_})),u.__rectSize=_[r]}else h.eachChild((function(t){t.attr({invisible:!0,silent:!0})}));var x=this._getPageInfo(t);return null!=x.pageIndex&&$u(l,{x:x.contentPosition[0],y:x.contentPosition[1]},d?t:null),this._updatePageInfoView(t,x),m},e.prototype._pageGo=function(t,e,n){var i=this._getPageInfo(e)[t];null!=i&&n.dispatchAction({type:"legendScroll",scrollDataIndex:i,legendId:e.id})},e.prototype._updatePageInfoView=function(t,e){var n=this._controllerGroup;z(["pagePrev","pageNext"],(function(i){var r=null!=e[i+"DataIndex"],o=n.childOfName(i);o&&(o.setStyle("fill",r?t.get("pageIconColor",!0):t.get("pageIconInactiveColor",!0)),o.cursor=r?"pointer":"default")}));var i=n.childOfName("pageText"),r=t.get("pageFormatter"),o=e.pageIndex,a=null!=o?o+1:0,s=e.pageCount;i&&r&&i.setStyle("text",Z(r)?r.replace("{current}",null==a?"":a+"").replace("{total}",null==s?"":s+""):r({current:a,total:s}))},e.prototype._getPageInfo=function(t){var e=t.get("scrollDataIndex",!0),n=this.getContentGroup(),i=this._containerGroup.__rectSize,r=t.getOrient().index,o=dk[r],a=fk[r],s=this._findTargetItemIndex(e),l=n.children(),u=l[s],h=l.length,c=h?1:0,p={contentPosition:[n.x,n.y],pageCount:c,pageIndex:c-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!u)return p;var d=m(u);p.contentPosition[r]=-d.s;for(var f=s+1,g=d,v=d,y=null;f<=h;++f)(!(y=m(l[f]))&&v.e>g.s+i||y&&!_(y,g.s))&&(g=v.i>g.i?v:y)&&(null==p.pageNextDataIndex&&(p.pageNextDataIndex=g.i),++p.pageCount),v=y;for(f=s-1,g=d,v=d,y=null;f>=-1;--f)(y=m(l[f]))&&_(v,y.s)||!(g.i=e&&t.s<=e+i}},e.prototype._findTargetItemIndex=function(t){return this._showController?(this.getContentGroup().eachChild((function(i,r){var o=i.__legendDataIndex;null==n&&null!=o&&(n=r),o===t&&(e=r)})),null!=e?e:n):0;var e,n},e.type="legend.scroll",e}(nk);function vk(t){nm(uk),t.registerComponentModel(hk),t.registerComponentView(gk),function(t){t.registerAction("legendScroll","legendscroll",(function(t,e){var n=t.scrollDataIndex;null!=n&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},(function(t){t.setScrollDataIndex(n)}))}))}(t)}var yk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="dataZoom.inside",e.defaultOption=ac(EC.defaultOption,{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),e}(EC),mk=function(t){function e(e){var n=t.call(this)||this;n._zr=e;var i=H(n._mousedownHandler,n),r=H(n._mousemoveHandler,n),o=H(n._mouseupHandler,n),a=H(n._mousewheelHandler,n),s=H(n._pinchHandler,n);return n.enable=function(t,n){this.disable(),this._opt=A(T(n)||{},{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),null==t&&(t=!0),!0!==t&&"move"!==t&&"pan"!==t||(e.on("mousedown",i),e.on("mousemove",r),e.on("mouseup",o)),!0!==t&&"scale"!==t&&"zoom"!==t||(e.on("mousewheel",a),e.on("pinch",s))},n.disable=function(){e.off("mousedown",i),e.off("mousemove",r),e.off("mouseup",o),e.off("mousewheel",a),e.off("pinch",s)},n}return n(e,t),e.prototype.isDragging=function(){return this._dragging},e.prototype.isPinching=function(){return this._pinching},e.prototype.setPointerChecker=function(t){this.pointerChecker=t},e.prototype.dispose=function(){this.disable()},e.prototype._mousedownHandler=function(t){if(!he(t)){for(var e=t.target;e;){if(e.draggable)return;e=e.__hostTarget||e.parent}var n=t.offsetX,i=t.offsetY;this.pointerChecker&&this.pointerChecker(t,n,i)&&(this._x=n,this._y=i,this._dragging=!0)}},e.prototype._mousemoveHandler=function(t){if(this._dragging&&wk("moveOnMouseMove",t,this._opt)&&"pinch"!==t.gestureEvent&&!bT(this._zr,"globalPan")){var e=t.offsetX,n=t.offsetY,i=this._x,r=this._y,o=e-i,a=n-r;this._x=e,this._y=n,this._opt.preventDefaultMouseMove&&ue(t.event),xk(this,"pan","moveOnMouseMove",t,{dx:o,dy:a,oldX:i,oldY:r,newX:e,newY:n,isAvailableBehavior:null})}},e.prototype._mouseupHandler=function(t){he(t)||(this._dragging=!1)},e.prototype._mousewheelHandler=function(t){var e=wk("zoomOnMouseWheel",t,this._opt),n=wk("moveOnMouseWheel",t,this._opt),i=t.wheelDelta,r=Math.abs(i),o=t.offsetX,a=t.offsetY;if(0!==i&&(e||n)){if(e){var s=r>3?1.4:r>1?1.2:1.1;_k(this,"zoom","zoomOnMouseWheel",t,{scale:i>0?s:1/s,originX:o,originY:a,isAvailableBehavior:null})}if(n){var l=Math.abs(i);_k(this,"scrollMove","moveOnMouseWheel",t,{scrollDelta:(i>0?1:-1)*(l>3?.4:l>1?.15:.05),originX:o,originY:a,isAvailableBehavior:null})}}},e.prototype._pinchHandler=function(t){bT(this._zr,"globalPan")||_k(this,"zoom",null,t,{scale:t.pinchScale>1?1.1:1/1.1,originX:t.pinchX,originY:t.pinchY,isAvailableBehavior:null})},e}(Ut);function _k(t,e,n,i,r){t.pointerChecker&&t.pointerChecker(i,r.originX,r.originY)&&(ue(i.event),xk(t,e,n,i,r))}function xk(t,e,n,i,r){r.isAvailableBehavior=H(wk,null,n,i),t.trigger(e,r)}function wk(t,e,n){var i=n[t];return!t||i&&(!Z(i)||e.event[i+"Key"])}var bk=Io();function Sk(t,e,n){bk(t).coordSysRecordMap.each((function(t){var i=t.dataZoomInfoMap.get(e.uid);i&&(i.getRange=n)}))}function Mk(t,e){if(e){t.removeKey(e.model.uid);var n=e.controller;n&&n.dispose()}}function Ck(t,e){t.isDisposed()||t.dispatchAction({type:"dataZoom",animation:{easing:"cubicOut",duration:100},batch:e})}function Tk(t,e,n,i){return t.coordinateSystem.containPoint([n,i])}function Ik(t){t.registerProcessor(t.PRIORITY.PROCESSOR.FILTER,(function(t,e){var n=bk(e),i=n.coordSysRecordMap||(n.coordSysRecordMap=gt());i.each((function(t){t.dataZoomInfoMap=null})),t.eachComponent({mainType:"dataZoom",subType:"inside"},(function(t){z(NC(t).infoList,(function(n){var r=n.model.uid,o=i.get(r)||i.set(r,function(t,e){var n={model:e,containsPoint:W(Tk,e),dispatchAction:W(Ck,t),dataZoomInfoMap:null,controller:null},i=n.controller=new mk(t.getZr());return z(["pan","zoom","scrollMove"],(function(t){i.on(t,(function(e){var i=[];n.dataZoomInfoMap.each((function(r){if(e.isAvailableBehavior(r.model.option)){var o=(r.getRange||{})[t],a=o&&o(r.dzReferCoordSysInfo,n.model.mainType,n.controller,e);!r.model.get("disabled",!0)&&a&&i.push({dataZoomId:r.model.id,start:a[0],end:a[1]})}})),i.length&&n.dispatchAction(i)}))})),n}(e,n.model));(o.dataZoomInfoMap||(o.dataZoomInfoMap=gt())).set(t.uid,{dzReferCoordSysInfo:n,model:t,getRange:null})}))})),i.each((function(t){var e,n=t.controller,r=t.dataZoomInfoMap;if(r){var o=r.keys()[0];null!=o&&(e=r.get(o))}if(e){var a=function(t){var e,n="type_",i={type_true:2,type_move:1,type_false:0,type_undefined:-1},r=!0;return t.each((function(t){var o=t.model,a=!o.get("disabled",!0)&&(!o.get("zoomLock",!0)||"move");i[n+a]>i[n+e]&&(e=a),r=r&&o.get("preventDefaultMouseMove",!0)})),{controlType:e,opt:{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!0,preventDefaultMouseMove:!!r}}}(r);n.enable(a.controlType,a.opt),n.setPointerChecker(t.containsPoint),hg(t,"dispatchAction",e.model.get("throttle",!0),"fixRate")}else Mk(i,t)}))}))}var Dk=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="dataZoom.inside",e}return n(e,t),e.prototype.render=function(e,n,i){t.prototype.render.apply(this,arguments),e.noTarget()?this._clear():(this.range=e.getPercentRange(),Sk(i,e,{pan:H(kk.pan,this),zoom:H(kk.zoom,this),scrollMove:H(kk.scrollMove,this)}))},e.prototype.dispose=function(){this._clear(),t.prototype.dispose.apply(this,arguments)},e.prototype._clear=function(){!function(t,e){for(var n=bk(t).coordSysRecordMap,i=n.keys(),r=0;r0?s.pixelStart+s.pixelLength-s.pixel:s.pixel-s.pixelStart)/s.pixelLength*(o[1]-o[0])+o[0],u=Math.max(1/i.scale,0);o[0]=(o[0]-l)*u+l,o[1]=(o[1]-l)*u+l;var h=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();return WC(0,o,[0,100],0,h.minSpan,h.maxSpan),this.range=o,r[0]!==o[0]||r[1]!==o[1]?o:void 0}},pan:Ak((function(t,e,n,i,r,o){var a=Pk[i]([o.oldX,o.oldY],[o.newX,o.newY],e,r,n);return a.signal*(t[1]-t[0])*a.pixel/a.pixelLength})),scrollMove:Ak((function(t,e,n,i,r,o){return Pk[i]([0,0],[o.scrollDelta,o.scrollDelta],e,r,n).signal*(t[1]-t[0])*o.scrollDelta}))};function Ak(t){return function(e,n,i,r){var o=this.range,a=o.slice(),s=e.axisModels[0];if(s)return WC(t(a,s,e,n,i,r),a,[0,100],"all"),this.range=a,o[0]!==a[0]||o[1]!==a[1]?a:void 0}}var Pk={grid:function(t,e,n,i,r){var o=n.axis,a={},s=r.model.coordinateSystem.getRect();return t=t||[0,0],"x"===o.dim?(a.pixel=e[0]-t[0],a.pixelLength=s.width,a.pixelStart=s.x,a.signal=o.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=s.height,a.pixelStart=s.y,a.signal=o.inverse?-1:1),a},polar:function(t,e,n,i,r){var o=n.axis,a={},s=r.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),"radiusAxis"===n.mainType?(a.pixel=e[0]-t[0],a.pixelLength=l[1]-l[0],a.pixelStart=l[0],a.signal=o.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=u[1]-u[0],a.pixelStart=u[0],a.signal=o.inverse?-1:1),a},singleAxis:function(t,e,n,i,r){var o=n.axis,a=r.model.coordinateSystem.getRect(),s={};return t=t||[0,0],"horizontal"===o.orient?(s.pixel=e[0]-t[0],s.pixelLength=a.width,s.pixelStart=a.x,s.signal=o.inverse?1:-1):(s.pixel=e[1]-t[1],s.pixelLength=a.height,s.pixelStart=a.y,s.signal=o.inverse?-1:1),s}};function Lk(t){KC(t),t.registerComponentModel(yk),t.registerComponentView(Dk),Ik(t)}var Ok=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="dataZoom.slider",e.layoutMode="box",e.defaultOption=ac(EC.defaultOption,{show:!0,right:"ph",top:"ph",width:"ph",height:"ph",left:null,bottom:null,borderColor:"#d2dbee",borderRadius:3,backgroundColor:"rgba(47,69,84,0)",dataBackground:{lineStyle:{color:"#d2dbee",width:.5},areaStyle:{color:"#d2dbee",opacity:.2}},selectedDataBackground:{lineStyle:{color:"#8fb0f7",width:.5},areaStyle:{color:"#8fb0f7",opacity:.2}},fillerColor:"rgba(135,175,274,0.2)",handleIcon:"path://M-9.35,34.56V42m0-40V9.5m-2,0h4a2,2,0,0,1,2,2v21a2,2,0,0,1-2,2h-4a2,2,0,0,1-2-2v-21A2,2,0,0,1-11.35,9.5Z",handleSize:"100%",handleStyle:{color:"#fff",borderColor:"#ACB8D1"},moveHandleSize:7,moveHandleIcon:"path://M-320.9-50L-320.9-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-348-41-339-50-320.9-50z M-212.3-50L-212.3-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-239.4-41-230.4-50-212.3-50z M-103.7-50L-103.7-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-130.9-41-121.8-50-103.7-50z",moveHandleStyle:{color:"#D2DBEE",opacity:.7},showDetail:!0,showDataShadow:"auto",realtime:!0,zoomLock:!1,textStyle:{color:"#6E7079"},brushSelect:!0,brushStyle:{color:"rgba(135,175,274,0.15)"},emphasis:{handleStyle:{borderColor:"#8FB0F7"},moveHandleStyle:{color:"#8FB0F7"}}}),e}(EC),Rk=Ds,Nk="horizontal",zk="vertical",Ek=["line","bar","candlestick","scatter"],Bk={easing:"cubicOut",duration:100,delay:0},Vk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._displayables={},n}return n(e,t),e.prototype.init=function(t,e){this.api=e,this._onBrush=H(this._onBrush,this),this._onBrushEnd=H(this._onBrushEnd,this)},e.prototype.render=function(e,n,i,r){if(t.prototype.render.apply(this,arguments),hg(this,"_dispatchZoomAction",e.get("throttle"),"fixRate"),this._orient=e.getOrient(),!1!==e.get("show")){if(e.noTarget())return this._clear(),void this.group.removeAll();r&&"dataZoom"===r.type&&r.from===this.uid||this._buildView(),this._updateView()}else this.group.removeAll()},e.prototype.dispose=function(){this._clear(),t.prototype.dispose.apply(this,arguments)},e.prototype._clear=function(){cg(this,"_dispatchZoomAction");var t=this.api.getZr();t.off("mousemove",this._onBrush),t.off("mouseup",this._onBrushEnd)},e.prototype._buildView=function(){var t=this.group;t.removeAll(),this._brushing=!1,this._displayables.brushRect=null,this._resetLocation(),this._resetInterval();var e=this._displayables.sliderGroup=new Pr;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(e),this._positionGroup()},e.prototype._resetLocation=function(){var t=this.dataZoomModel,e=this.api,n=t.get("brushSelect")?7:0,i=this._findCoordRect(),r={width:e.getWidth(),height:e.getHeight()},o=this._orient===Nk?{right:r.width-i.x-i.width,top:r.height-30-7-n,width:i.width,height:30}:{right:7,top:i.y,width:30,height:i.height},a=up(t.option);z(["right","top","width","height"],(function(t){"ph"===a[t]&&(a[t]=o[t])}));var s=op(a,r);this._location={x:s.x,y:s.y},this._size=[s.width,s.height],this._orient===zk&&this._size.reverse()},e.prototype._positionGroup=function(){var t=this.group,e=this._location,n=this._orient,i=this.dataZoomModel.getFirstTargetAxisModel(),r=i&&i.get("inverse"),o=this._displayables.sliderGroup,a=(this._dataShadowInfo||{}).otherAxisInverse;o.attr(n!==Nk||r?n===Nk&&r?{scaleY:a?1:-1,scaleX:-1}:n!==zk||r?{scaleY:a?-1:1,scaleX:-1,rotation:Math.PI/2}:{scaleY:a?-1:1,scaleX:1,rotation:Math.PI/2}:{scaleY:a?1:-1,scaleX:1});var s=t.getBoundingRect([o]);t.x=e.x-s.x,t.y=e.y-s.y,t.markRedraw()},e.prototype._getViewExtent=function(){return[0,this._size[0]]},e.prototype._renderBackground=function(){var t=this.dataZoomModel,e=this._size,n=this._displayables.sliderGroup,i=t.get("brushSelect");n.add(new Rk({silent:!0,shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:t.get("backgroundColor")},z2:-40}));var r=new Rk({shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:"transparent"},z2:0,onclick:H(this._onClickPanel,this)}),o=this.api.getZr();i?(r.on("mousedown",this._onBrushStart,this),r.cursor="crosshair",o.on("mousemove",this._onBrush),o.on("mouseup",this._onBrushEnd)):(o.off("mousemove",this._onBrush),o.off("mouseup",this._onBrushEnd)),n.add(r)},e.prototype._renderDataShadow=function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(this._displayables.dataShadowSegs=[],t){var e=this._size,n=this._shadowSize||[],i=t.series,r=i.getRawData(),o=i.getShadowDim&&i.getShadowDim(),a=o&&r.getDimensionInfo(o)?i.getShadowDim():t.otherDim;if(null!=a){var s=this._shadowPolygonPts,l=this._shadowPolylinePts;if(r!==this._shadowData||a!==this._shadowDim||e[0]!==n[0]||e[1]!==n[1]){var u=r.getDataExtent(a),h=.3*(u[1]-u[0]);u=[u[0]-h,u[1]+h];var c,p=[0,e[1]],d=[0,e[0]],f=[[e[0],0],[0,0]],g=[],v=d[1]/(r.count()-1),y=0,m=Math.round(r.count()/e[0]);r.each([a],(function(t,e){if(m>0&&e%m)y+=v;else{var n=null==t||isNaN(t)||""===t,i=n?0:Wr(t,u,p,!0);n&&!c&&e?(f.push([f[f.length-1][0],0]),g.push([g[g.length-1][0],0])):!n&&c&&(f.push([y,0]),g.push([y,0])),f.push([y,i]),g.push([y,i]),y+=v,c=n}})),s=this._shadowPolygonPts=f,l=this._shadowPolylinePts=g}this._shadowData=r,this._shadowDim=a,this._shadowSize=[e[0],e[1]];for(var _=this.dataZoomModel,x=0;x<3;x++){var w=b(1===x);this._displayables.sliderGroup.add(w),this._displayables.dataShadowSegs.push(w)}}}function b(t){var e=_.getModel(t?"selectedDataBackground":"dataBackground"),n=new Pr,i=new Cu({shape:{points:s},segmentIgnoreThreshold:1,style:e.getModel("areaStyle").getAreaStyle(),silent:!0,z2:-20}),r=new Iu({shape:{points:l},segmentIgnoreThreshold:1,style:e.getModel("lineStyle").getLineStyle(),silent:!0,z2:-19});return n.add(i),n.add(r),n}},e.prototype._prepareDataShadowInfo=function(){var t=this.dataZoomModel,e=t.get("showDataShadow");if(!1!==e){var n,i=this.ecModel;return t.eachTargetAxis((function(r,o){z(t.getAxisProxy(r,o).getTargetSeriesModels(),(function(t){if(!(n||!0!==e&&L(Ek,t.get("type"))<0)){var a,s=i.getComponent(OC(r),o).axis,l=function(t){var e={x:"y",y:"x",radius:"angle",angle:"radius"};return e[t]}(r),u=t.coordinateSystem;null!=l&&u.getOtherAxis&&(a=u.getOtherAxis(s).inverse),l=t.getData().mapDimension(l),n={thisAxis:s,series:t,thisDim:r,otherDim:l,otherAxisInverse:a}}}),this)}),this),n}},e.prototype._renderHandle=function(){var t=this.group,e=this._displayables,n=e.handles=[null,null],i=e.handleLabels=[null,null],r=this._displayables.sliderGroup,o=this._size,a=this.dataZoomModel,s=this.api,l=a.get("borderRadius")||0,u=a.get("brushSelect"),h=e.filler=new Rk({silent:u,style:{fill:a.get("fillerColor")},textConfig:{position:"inside"}});r.add(h),r.add(new Rk({silent:!0,subPixelOptimize:!0,shape:{x:0,y:0,width:o[0],height:o[1],r:l},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:1,fill:"rgba(0,0,0,0)"}})),z([0,1],(function(e){var o=a.get("handleIcon");!av[o]&&o.indexOf("path://")<0&&o.indexOf("image://")<0&&(o="path://"+o);var s=uv(o,-1,0,2,2,null,!0);s.attr({cursor:Fk(this._orient),draggable:!0,drift:H(this._onDragMove,this,e),ondragend:H(this._onDragEnd,this),onmouseover:H(this._showDataInfo,this,!0),onmouseout:H(this._showDataInfo,this,!1),z2:5});var l=s.getBoundingRect(),u=a.get("handleSize");this._handleHeight=Gr(u,this._size[1]),this._handleWidth=l.width/l.height*this._handleHeight,s.setStyle(a.getModel("handleStyle").getItemStyle()),s.style.strokeNoScale=!0,s.rectHover=!0,s.ensureState("emphasis").style=a.getModel(["emphasis","handleStyle"]).getItemStyle(),Al(s);var h=a.get("handleColor");null!=h&&(s.style.fill=h),r.add(n[e]=s);var c=a.getModel("textStyle");t.add(i[e]=new Ps({silent:!0,invisible:!0,style:Eh(c,{x:0,y:0,text:"",verticalAlign:"middle",align:"center",fill:c.getTextColor(),font:c.getFont()}),z2:10}))}),this);var c=h;if(u){var p=Gr(a.get("moveHandleSize"),o[1]),d=e.moveHandle=new Ds({style:a.getModel("moveHandleStyle").getItemStyle(),silent:!0,shape:{r:[0,0,2,2],y:o[1]-.5,height:p}}),f=.8*p,g=e.moveHandleIcon=uv(a.get("moveHandleIcon"),-f/2,-f/2,f,f,"#fff",!0);g.silent=!0,g.y=o[1]+p/2-.5,d.ensureState("emphasis").style=a.getModel(["emphasis","moveHandleStyle"]).getItemStyle();var v=Math.min(o[1]/2,Math.max(p,10));(c=e.moveZone=new Ds({invisible:!0,shape:{y:o[1]-v,height:p+v}})).on("mouseover",(function(){s.enterEmphasis(d)})).on("mouseout",(function(){s.leaveEmphasis(d)})),r.add(d),r.add(g),r.add(c)}c.attr({draggable:!0,cursor:Fk(this._orient),drift:H(this._onDragMove,this,"all"),ondragstart:H(this._showDataInfo,this,!0),ondragend:H(this._onDragEnd,this),onmouseover:H(this._showDataInfo,this,!0),onmouseout:H(this._showDataInfo,this,!1)})},e.prototype._resetInterval=function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[Wr(t[0],[0,100],e,!0),Wr(t[1],[0,100],e,!0)]},e.prototype._updateInterval=function(t,e){var n=this.dataZoomModel,i=this._handleEnds,r=this._getViewExtent(),o=n.findRepresentativeAxisProxy().getMinMaxSpan(),a=[0,100];WC(e,i,r,n.get("zoomLock")?"all":t,null!=o.minSpan?Wr(o.minSpan,a,r,!0):null,null!=o.maxSpan?Wr(o.maxSpan,a,r,!0):null);var s=this._range,l=this._range=Zr([Wr(i[0],r,a,!0),Wr(i[1],r,a,!0)]);return!s||s[0]!==l[0]||s[1]!==l[1]},e.prototype._updateView=function(t){var e=this._displayables,n=this._handleEnds,i=Zr(n.slice()),r=this._size;z([0,1],(function(t){var i=e.handles[t],o=this._handleHeight;i.attr({scaleX:o/2,scaleY:o/2,x:n[t]+(t?-1:1),y:r[1]/2-o/2})}),this),e.filler.setShape({x:i[0],y:0,width:i[1]-i[0],height:r[1]});var o={x:i[0],width:i[1]-i[0]};e.moveHandle&&(e.moveHandle.setShape(o),e.moveZone.setShape(o),e.moveZone.getBoundingRect(),e.moveHandleIcon&&e.moveHandleIcon.attr("x",o.x+o.width/2));for(var a=e.dataShadowSegs,s=[0,i[0],i[1],r[0]],l=0;le[0]||n[1]<0||n[1]>e[1])){var i=this._handleEnds,r=(i[0]+i[1])/2,o=this._updateInterval("all",n[0]-r);this._updateView(),o&&this._dispatchZoomAction(!1)}},e.prototype._onBrushStart=function(t){var e=t.offsetX,n=t.offsetY;this._brushStart=new Se(e,n),this._brushing=!0,this._brushStartTime=+new Date},e.prototype._onBrushEnd=function(t){if(this._brushing){var e=this._displayables.brushRect;if(this._brushing=!1,e){e.attr("ignore",!0);var n=e.shape;if(!(+new Date-this._brushStartTime<200&&Math.abs(n.width)<5)){var i=this._getViewExtent(),r=[0,100];this._range=Zr([Wr(n.x,i,r,!0),Wr(n.x+n.width,i,r,!0)]),this._handleEnds=[n.x,n.x+n.width],this._updateView(),this._dispatchZoomAction(!1)}}}},e.prototype._onBrush=function(t){this._brushing&&(ue(t.event),this._updateBrushRect(t.offsetX,t.offsetY))},e.prototype._updateBrushRect=function(t,e){var n=this._displayables,i=this.dataZoomModel,r=n.brushRect;r||(r=n.brushRect=new Rk({silent:!0,style:i.getModel("brushStyle").getItemStyle()}),n.sliderGroup.add(r)),r.attr("ignore",!1);var o=this._brushStart,a=this._displayables.sliderGroup,s=a.transformCoordToLocal(t,e),l=a.transformCoordToLocal(o.x,o.y),u=this._size;s[0]=Math.max(Math.min(u[0],s[0]),0),r.setShape({x:l[0],y:0,width:s[0]-l[0],height:u[1]})},e.prototype._dispatchZoomAction=function(t){var e=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,animation:t?Bk:null,start:e[0],end:e[1]})},e.prototype._findCoordRect=function(){var t,e=NC(this.dataZoomModel).infoList;if(!t&&e.length){var n=e[0].model.coordinateSystem;t=n.getRect&&n.getRect()}if(!t){var i=this.api.getWidth(),r=this.api.getHeight();t={x:.2*i,y:.2*r,width:.6*i,height:.6*r}}return t},e.type="dataZoom.slider",e}(FC);function Fk(t){return"vertical"===t?"ns-resize":"ew-resize"}function Hk(t){t.registerComponentModel(Ok),t.registerComponentView(Vk),KC(t)}var Wk={label:{enabled:!0},decal:{show:!1}},Gk=Io(),Uk={};function Zk(t,e){var n=t.getModel("aria");if(n.get("enabled")){var i=T(Wk);I(i.label,t.getLocaleModel().get("aria"),!1),I(n.option,i,!1),function(){if(n.getModel("decal").get("show")){var e=gt();t.eachSeries((function(t){if(!t.isColorBySeries()){var n=e.get(t.type);n||(n={},e.set(t.type,n)),Gk(t).scope=n}})),t.eachRawSeries((function(e){if(!t.isSeriesFiltered(e))if(U(e.enableAriaDecal))e.enableAriaDecal();else{var n=e.getData();if(e.isColorBySeries()){var i=Hp(e.ecModel,e.name,Uk,t.getSeriesCount()),r=n.getVisual("decal");n.setVisual("decal",u(r,i))}else{var o=e.getRawData(),a={},s=Gk(e).scope;n.each((function(t){var e=n.getRawIndex(t);a[e]=t}));var l=o.count();o.each((function(t){var i=a[t],r=o.getName(t)||t+"",h=Hp(e.ecModel,r,s,l),c=n.getItemVisual(i,"decal");n.setItemVisual(i,"decal",u(c,h))}))}}function u(t,e){var n=t?k(k({},e),t):e;return n.dirty=!0,n}}))}}(),function(){var i=e.getZr().dom;if(!i)return;var o=t.getLocaleModel().get("aria"),a=n.getModel("label");if(a.option=A(a.option,o),!a.get("enabled"))return;if(a.get("description"))return void i.setAttribute("aria-label",a.get("description"));var s,l=t.getSeriesCount(),u=a.get(["data","maxCount"])||10,h=a.get(["series","maxCount"])||10,c=Math.min(l,h);if(l<1)return;var p=function(){var e=t.get("title");e&&e.length&&(e=e[0]);return e&&e.text}();s=p?r(a.get(["general","withTitle"]),{title:p}):a.get(["general","withoutTitle"]);var d=[];s+=r(l>1?a.get(["series","multiple","prefix"]):a.get(["series","single","prefix"]),{seriesCount:l}),t.eachSeries((function(e,n){if(n1?a.get(["series","multiple",o]):a.get(["series","single",o]),{seriesId:e.seriesIndex,seriesName:e.get("name"),seriesType:(_=e.subType,x=t.getLocaleModel().get(["series","typeNames"]),x[_]||x.chart)});var s=e.getData();if(s.count()>u)i+=r(a.get(["data","partialData"]),{displayCnt:u});else i+=a.get(["data","allData"]);for(var h=a.get(["data","separator","middle"]),p=a.get(["data","separator","end"]),f=[],g=0;g0?n:1:n))}(0,r),d=l_(t),f=t.get("barMinHeight")||0,g=u&&e.getDimensionIndex(u),v=e.getLayout("size"),y=e.getLayout("offset");return{progress:function(t,e){for(var i,r=t.count,l=d&&e_(3*r),u=d&&s&&e_(3*r),m=d&&e_(r),_=n.master.getRect(),x=c?_.width:_.height,w=e.getStore(),b=0;null!=(i=t.next());){var S=w.get(h?g:o,i),M=w.get(a,i),C=p,T=void 0;h&&(T=+S-w.get(o,i));var I=void 0,D=void 0,k=void 0,A=void 0;if(c){var P=n.dataToPoint([S,M]);h&&(C=n.dataToPoint([T,M])[0]),I=C,D=P[1]+y,k=P[0]-C,A=v,Math.abs(k)b?-1:i+10>b?b-i+26+26:k+26>b?b-k:j+26>b?b-j+26:void 0}function c(a){function c(a){j[l++]=a}var d,e,g,h,i,j;if(a.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var k=a.length;i="="===a.charAt(k-2)?2:"="===a.charAt(k-1)?1:0,j=new f(3*a.length/4-i),g=i>0?a.length-4:a.length;var l=0;for(d=0,e=0;g>d;d+=4,e+=3)h=b(a.charAt(d))<<18|b(a.charAt(d+1))<<12|b(a.charAt(d+2))<<6|b(a.charAt(d+3)),c((16711680&h)>>16),c((65280&h)>>8),c(255&h);return 2===i?(h=b(a.charAt(d))<<2|b(a.charAt(d+1))>>4,c(255&h)):1===i&&(h=b(a.charAt(d))<<10|b(a.charAt(d+1))<<4|b(a.charAt(d+2))>>2,c(h>>8&255),c(255&h)),j}function e(a){function b(a){return d.charAt(a)}function c(a){return b(a>>18&63)+b(a>>12&63)+b(a>>6&63)+b(63&a)}var e,f,g,h=a.length%3,i="";for(e=0,g=a.length-h;g>e;e+=3)f=(a[e]<<16)+(a[e+1]<<8)+a[e+2],i+=c(f);switch(h){case 1:f=a[a.length-1],i+=b(f>>2),i+=b(f<<4&63),i+="==";break;case 2:f=(a[a.length-2]<<8)+a[a.length-1],i+=b(f>>10),i+=b(f>>4&63),i+=b(f<<2&63),i+="="}return i}var f="undefined"!=typeof Uint8Array?Uint8Array:Array,g="+".charCodeAt(0),h="/".charCodeAt(0),i="0".charCodeAt(0),j="a".charCodeAt(0),k="A".charCodeAt(0),l="-".charCodeAt(0),m="_".charCodeAt(0);a.toByteArray=c,a.fromByteArray=e}("undefined"==typeof c?this.base64js={}:c)},{}],2:[function(a,b,c){(function(b){"use strict";function d(){function a(){}try{var b=new Uint8Array(1);return b.foo=function(){return 42},b.constructor=a,42===b.foo()&&b.constructor===a&&"function"==typeof b.subarray&&0===b.subarray(1,1).byteLength}catch(c){return!1}}function e(){return f.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function f(a){return this instanceof f?(f.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof a?g(this,a):"string"==typeof a?h(this,a,arguments.length>1?arguments[1]:"utf8"):i(this,a)):arguments.length>1?new f(a,arguments[1]):new f(a)}function g(a,b){if(a=p(a,0>b?0:0|q(b)),!f.TYPED_ARRAY_SUPPORT)for(var c=0;b>c;c++)a[c]=0;return a}function h(a,b,c){("string"!=typeof c||""===c)&&(c="utf8");var d=0|s(b,c);return a=p(a,d),a.write(b,c),a}function i(a,b){if(f.isBuffer(b))return j(a,b);if(Y(b))return k(a,b);if(null==b)throw new TypeError("must start with number, buffer, array or string");if("undefined"!=typeof ArrayBuffer){if(b.buffer instanceof ArrayBuffer)return l(a,b);if(b instanceof ArrayBuffer)return m(a,b)}return b.length?n(a,b):o(a,b)}function j(a,b){var c=0|q(b.length);return a=p(a,c),b.copy(a,0,0,c),a}function k(a,b){var c=0|q(b.length);a=p(a,c);for(var d=0;c>d;d+=1)a[d]=255&b[d];return a}function l(a,b){var c=0|q(b.length);a=p(a,c);for(var d=0;c>d;d+=1)a[d]=255&b[d];return a}function m(a,b){return f.TYPED_ARRAY_SUPPORT?(b.byteLength,a=f._augment(new Uint8Array(b))):a=l(a,new Uint8Array(b)),a}function n(a,b){var c=0|q(b.length);a=p(a,c);for(var d=0;c>d;d+=1)a[d]=255&b[d];return a}function o(a,b){var c,d=0;"Buffer"===b.type&&Y(b.data)&&(c=b.data,d=0|q(c.length)),a=p(a,d);for(var e=0;d>e;e+=1)a[e]=255&c[e];return a}function p(a,b){f.TYPED_ARRAY_SUPPORT?(a=f._augment(new Uint8Array(b)),a.__proto__=f.prototype):(a.length=b,a._isBuffer=!0);var c=0!==b&&b<=f.poolSize>>>1;return c&&(a.parent=Z),a}function q(a){if(a>=e())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+e().toString(16)+" bytes");return 0|a}function r(a,b){if(!(this instanceof r))return new r(a,b);var c=new f(a,b);return delete c.parent,c}function s(a,b){"string"!=typeof a&&(a=""+a);var c=a.length;if(0===c)return 0;for(var d=!1;;)switch(b){case"ascii":case"binary":case"raw":case"raws":return c;case"utf8":case"utf-8":return R(a).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*c;case"hex":return c>>>1;case"base64":return U(a).length;default:if(d)return R(a).length;b=(""+b).toLowerCase(),d=!0}}function t(a,b,c){var d=!1;if(b=0|b,c=void 0===c||c===1/0?this.length:0|c,a||(a="utf8"),0>b&&(b=0),c>this.length&&(c=this.length),b>=c)return"";for(;;)switch(a){case"hex":return F(this,b,c);case"utf8":case"utf-8":return B(this,b,c);case"ascii":return D(this,b,c);case"binary":return E(this,b,c);case"base64":return A(this,b,c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return G(this,b,c);default:if(d)throw new TypeError("Unknown encoding: "+a);a=(a+"").toLowerCase(),d=!0}}function u(a,b,c,d){c=Number(c)||0;var e=a.length-c;d?(d=Number(d),d>e&&(d=e)):d=e;var f=b.length;if(f%2!==0)throw new Error("Invalid hex string");d>f/2&&(d=f/2);for(var g=0;d>g;g++){var h=parseInt(b.substr(2*g,2),16);if(isNaN(h))throw new Error("Invalid hex string");a[c+g]=h}return g}function v(a,b,c,d){return V(R(b,a.length-c),a,c,d)}function w(a,b,c,d){return V(S(b),a,c,d)}function x(a,b,c,d){return w(a,b,c,d)}function y(a,b,c,d){return V(U(b),a,c,d)}function z(a,b,c,d){return V(T(b,a.length-c),a,c,d)}function A(a,b,c){return 0===b&&c===a.length?W.fromByteArray(a):W.fromByteArray(a.slice(b,c))}function B(a,b,c){c=Math.min(a.length,c);for(var d=[],e=b;c>e;){var f=a[e],g=null,h=f>239?4:f>223?3:f>191?2:1;if(c>=e+h){var i,j,k,l;switch(h){case 1:128>f&&(g=f);break;case 2:i=a[e+1],128===(192&i)&&(l=(31&f)<<6|63&i,l>127&&(g=l));break;case 3:i=a[e+1],j=a[e+2],128===(192&i)&&128===(192&j)&&(l=(15&f)<<12|(63&i)<<6|63&j,l>2047&&(55296>l||l>57343)&&(g=l));break;case 4:i=a[e+1],j=a[e+2],k=a[e+3],128===(192&i)&&128===(192&j)&&128===(192&k)&&(l=(15&f)<<18|(63&i)<<12|(63&j)<<6|63&k,l>65535&&1114112>l&&(g=l))}}null===g?(g=65533,h=1):g>65535&&(g-=65536,d.push(g>>>10&1023|55296),g=56320|1023&g),d.push(g),e+=h}return C(d)}function C(a){var b=a.length;if($>=b)return String.fromCharCode.apply(String,a);for(var c="",d=0;b>d;)c+=String.fromCharCode.apply(String,a.slice(d,d+=$));return c}function D(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;c>e;e++)d+=String.fromCharCode(127&a[e]);return d}function E(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;c>e;e++)d+=String.fromCharCode(a[e]);return d}function F(a,b,c){var d=a.length;(!b||0>b)&&(b=0),(!c||0>c||c>d)&&(c=d);for(var e="",f=b;c>f;f++)e+=Q(a[f]);return e}function G(a,b,c){for(var d=a.slice(b,c),e="",f=0;fa)throw new RangeError("offset is not uint");if(a+b>c)throw new RangeError("Trying to access beyond buffer length")}function I(a,b,c,d,e,g){if(!f.isBuffer(a))throw new TypeError("buffer must be a Buffer instance");if(b>e||g>b)throw new RangeError("value is out of bounds");if(c+d>a.length)throw new RangeError("index out of range")}function J(a,b,c,d){0>b&&(b=65535+b+1);for(var e=0,f=Math.min(a.length-c,2);f>e;e++)a[c+e]=(b&255<<8*(d?e:1-e))>>>8*(d?e:1-e)}function K(a,b,c,d){0>b&&(b=4294967295+b+1);for(var e=0,f=Math.min(a.length-c,4);f>e;e++)a[c+e]=b>>>8*(d?e:3-e)&255}function L(a,b,c,d,e,f){if(b>e||f>b)throw new RangeError("value is out of bounds");if(c+d>a.length)throw new RangeError("index out of range");if(0>c)throw new RangeError("index out of range")}function M(a,b,c,d,e){return e||L(a,b,c,4,3.4028234663852886e38,-3.4028234663852886e38),X.write(a,b,c,d,23,4),c+4}function N(a,b,c,d,e){return e||L(a,b,c,8,1.7976931348623157e308,-1.7976931348623157e308),X.write(a,b,c,d,52,8),c+8}function O(a){if(a=P(a).replace(aa,""),a.length<2)return"";for(;a.length%4!==0;)a+="=";return a}function P(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function Q(a){return 16>a?"0"+a.toString(16):a.toString(16)}function R(a,b){b=b||1/0;for(var c,d=a.length,e=null,f=[],g=0;d>g;g++){if(c=a.charCodeAt(g),c>55295&&57344>c){if(!e){if(c>56319){(b-=3)>-1&&f.push(239,191,189);continue}if(g+1===d){(b-=3)>-1&&f.push(239,191,189);continue}e=c;continue}if(56320>c){(b-=3)>-1&&f.push(239,191,189),e=c;continue}c=(e-55296<<10|c-56320)+65536}else e&&(b-=3)>-1&&f.push(239,191,189);if(e=null,128>c){if((b-=1)<0)break;f.push(c)}else if(2048>c){if((b-=2)<0)break;f.push(c>>6|192,63&c|128)}else if(65536>c){if((b-=3)<0)break;f.push(c>>12|224,c>>6&63|128,63&c|128)}else{if(!(1114112>c))throw new Error("Invalid code point");if((b-=4)<0)break;f.push(c>>18|240,c>>12&63|128,c>>6&63|128,63&c|128)}}return f}function S(a){for(var b=[],c=0;c>8,e=c%256,f.push(e),f.push(d);return f}function U(a){return W.toByteArray(O(a))}function V(a,b,c,d){for(var e=0;d>e&&!(e+c>=b.length||e>=a.length);e++)b[e+c]=a[e];return e}var W=a("base64-js"),X=a("ieee754"),Y=a("isarray");c.Buffer=f,c.SlowBuffer=r,c.INSPECT_MAX_BYTES=50,f.poolSize=8192;var Z={};f.TYPED_ARRAY_SUPPORT=void 0!==b.TYPED_ARRAY_SUPPORT?b.TYPED_ARRAY_SUPPORT:d(),f.TYPED_ARRAY_SUPPORT?(f.prototype.__proto__=Uint8Array.prototype,f.__proto__=Uint8Array):(f.prototype.length=void 0,f.prototype.parent=void 0),f.isBuffer=function(a){return!(null==a||!a._isBuffer)},f.compare=function(a,b){if(!f.isBuffer(a)||!f.isBuffer(b))throw new TypeError("Arguments must be Buffers");if(a===b)return 0;for(var c=a.length,d=b.length,e=0,g=Math.min(c,d);g>e&&a[e]===b[e];)++e;return e!==g&&(c=a[e],d=b[e]),d>c?-1:c>d?1:0},f.isEncoding=function(a){switch(String(a).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},f.concat=function(a,b){if(!Y(a))throw new TypeError("list argument must be an Array of Buffers.");if(0===a.length)return new f(0);var c;if(void 0===b)for(b=0,c=0;c0&&(a=this.toString("hex",0,b).match(/.{2}/g).join(" "),this.length>b&&(a+=" ... ")),""},f.prototype.compare=function(a){if(!f.isBuffer(a))throw new TypeError("Argument must be a Buffer");return this===a?0:f.compare(this,a)},f.prototype.indexOf=function(a,b){function c(a,b,c){for(var d=-1,e=0;c+e2147483647?b=2147483647:-2147483648>b&&(b=-2147483648),b>>=0,0===this.length)return-1;if(b>=this.length)return-1;if(0>b&&(b=Math.max(this.length+b,0)),"string"==typeof a)return 0===a.length?-1:String.prototype.indexOf.call(this,a,b);if(f.isBuffer(a))return c(this,a,b);if("number"==typeof a)return f.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,a,b):c(this,[a],b);throw new TypeError("val must be string, number or Buffer")},f.prototype.get=function(a){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(a)},f.prototype.set=function(a,b){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(a,b)},f.prototype.write=function(a,b,c,d){if(void 0===b)d="utf8",c=this.length,b=0;else if(void 0===c&&"string"==typeof b)d=b,c=this.length,b=0;else if(isFinite(b))b=0|b,isFinite(c)?(c=0|c,void 0===d&&(d="utf8")):(d=c,c=void 0);else{var e=d;d=b,b=0|c,c=e}var f=this.length-b;if((void 0===c||c>f)&&(c=f),a.length>0&&(0>c||0>b)||b>this.length)throw new RangeError("attempt to write outside buffer bounds");d||(d="utf8");for(var g=!1;;)switch(d){case"hex":return u(this,a,b,c);case"utf8":case"utf-8":return v(this,a,b,c);case"ascii":return w(this,a,b,c);case"binary":return x(this,a,b,c);case"base64":return y(this,a,b,c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return z(this,a,b,c);default:if(g)throw new TypeError("Unknown encoding: "+d);d=(""+d).toLowerCase(),g=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var $=4096;f.prototype.slice=function(a,b){var c=this.length;a=~~a,b=void 0===b?c:~~b,0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c),0>b?(b+=c,0>b&&(b=0)):b>c&&(b=c),a>b&&(b=a);var d;if(f.TYPED_ARRAY_SUPPORT)d=f._augment(this.subarray(a,b));else{var e=b-a;d=new f(e,void 0);for(var g=0;e>g;g++)d[g]=this[g+a]}return d.length&&(d.parent=this.parent||this),d},f.prototype.readUIntLE=function(a,b,c){a=0|a,b=0|b,c||H(a,b,this.length);for(var d=this[a],e=1,f=0;++f0&&(e*=256);)d+=this[a+--b]*e;return d},f.prototype.readUInt8=function(a,b){return b||H(a,1,this.length),this[a]},f.prototype.readUInt16LE=function(a,b){return b||H(a,2,this.length),this[a]|this[a+1]<<8},f.prototype.readUInt16BE=function(a,b){return b||H(a,2,this.length),this[a]<<8|this[a+1]},f.prototype.readUInt32LE=function(a,b){return b||H(a,4,this.length),(this[a]|this[a+1]<<8|this[a+2]<<16)+16777216*this[a+3]},f.prototype.readUInt32BE=function(a,b){return b||H(a,4,this.length),16777216*this[a]+(this[a+1]<<16|this[a+2]<<8|this[a+3])},f.prototype.readIntLE=function(a,b,c){a=0|a,b=0|b,c||H(a,b,this.length);for(var d=this[a],e=1,f=0;++f=e&&(d-=Math.pow(2,8*b)),d},f.prototype.readIntBE=function(a,b,c){a=0|a,b=0|b,c||H(a,b,this.length);for(var d=b,e=1,f=this[a+--d];d>0&&(e*=256);)f+=this[a+--d]*e;return e*=128,f>=e&&(f-=Math.pow(2,8*b)),f},f.prototype.readInt8=function(a,b){return b||H(a,1,this.length),128&this[a]?-1*(255-this[a]+1):this[a]},f.prototype.readInt16LE=function(a,b){b||H(a,2,this.length);var c=this[a]|this[a+1]<<8;return 32768&c?4294901760|c:c},f.prototype.readInt16BE=function(a,b){b||H(a,2,this.length);var c=this[a+1]|this[a]<<8;return 32768&c?4294901760|c:c},f.prototype.readInt32LE=function(a,b){return b||H(a,4,this.length),this[a]|this[a+1]<<8|this[a+2]<<16|this[a+3]<<24},f.prototype.readInt32BE=function(a,b){return b||H(a,4,this.length),this[a]<<24|this[a+1]<<16|this[a+2]<<8|this[a+3]},f.prototype.readFloatLE=function(a,b){return b||H(a,4,this.length),X.read(this,a,!0,23,4)},f.prototype.readFloatBE=function(a,b){return b||H(a,4,this.length),X.read(this,a,!1,23,4)},f.prototype.readDoubleLE=function(a,b){return b||H(a,8,this.length),X.read(this,a,!0,52,8)},f.prototype.readDoubleBE=function(a,b){return b||H(a,8,this.length),X.read(this,a,!1,52,8)},f.prototype.writeUIntLE=function(a,b,c,d){a=+a,b=0|b,c=0|c,d||I(this,a,b,c,Math.pow(2,8*c),0);var e=1,f=0;for(this[b]=255&a;++f=0&&(f*=256);)this[b+e]=a/f&255;return b+c},f.prototype.writeUInt8=function(a,b,c){return a=+a,b=0|b,c||I(this,a,b,1,255,0),f.TYPED_ARRAY_SUPPORT||(a=Math.floor(a)),this[b]=255&a,b+1},f.prototype.writeUInt16LE=function(a,b,c){return a=+a,b=0|b,c||I(this,a,b,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[b]=255&a,this[b+1]=a>>>8):J(this,a,b,!0),b+2},f.prototype.writeUInt16BE=function(a,b,c){return a=+a,b=0|b,c||I(this,a,b,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[b]=a>>>8,this[b+1]=255&a):J(this,a,b,!1),b+2},f.prototype.writeUInt32LE=function(a,b,c){return a=+a,b=0|b,c||I(this,a,b,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[b+3]=a>>>24,this[b+2]=a>>>16,this[b+1]=a>>>8,this[b]=255&a):K(this,a,b,!0),b+4},f.prototype.writeUInt32BE=function(a,b,c){return a=+a,b=0|b,c||I(this,a,b,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[b]=a>>>24,this[b+1]=a>>>16,this[b+2]=a>>>8,this[b+3]=255&a):K(this,a,b,!1),b+4},f.prototype.writeIntLE=function(a,b,c,d){if(a=+a,b=0|b,!d){var e=Math.pow(2,8*c-1);I(this,a,b,c,e-1,-e)}var f=0,g=1,h=0>a?1:0;for(this[b]=255&a;++f>0)-h&255;return b+c},f.prototype.writeIntBE=function(a,b,c,d){if(a=+a,b=0|b,!d){var e=Math.pow(2,8*c-1);I(this,a,b,c,e-1,-e)}var f=c-1,g=1,h=0>a?1:0;for(this[b+f]=255&a;--f>=0&&(g*=256);)this[b+f]=(a/g>>0)-h&255;return b+c},f.prototype.writeInt8=function(a,b,c){return a=+a,b=0|b,c||I(this,a,b,1,127,-128),f.TYPED_ARRAY_SUPPORT||(a=Math.floor(a)),0>a&&(a=255+a+1),this[b]=255&a,b+1},f.prototype.writeInt16LE=function(a,b,c){return a=+a,b=0|b,c||I(this,a,b,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[b]=255&a,this[b+1]=a>>>8):J(this,a,b,!0),b+2},f.prototype.writeInt16BE=function(a,b,c){return a=+a,b=0|b,c||I(this,a,b,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[b]=a>>>8,this[b+1]=255&a):J(this,a,b,!1),b+2},f.prototype.writeInt32LE=function(a,b,c){return a=+a,b=0|b,c||I(this,a,b,4,2147483647,-2147483648),f.TYPED_ARRAY_SUPPORT?(this[b]=255&a,this[b+1]=a>>>8,this[b+2]=a>>>16,this[b+3]=a>>>24):K(this,a,b,!0),b+4},f.prototype.writeInt32BE=function(a,b,c){return a=+a,b=0|b,c||I(this,a,b,4,2147483647,-2147483648),0>a&&(a=4294967295+a+1),f.TYPED_ARRAY_SUPPORT?(this[b]=a>>>24,this[b+1]=a>>>16,this[b+2]=a>>>8,this[b+3]=255&a):K(this,a,b,!1),b+4},f.prototype.writeFloatLE=function(a,b,c){return M(this,a,b,!0,c)},f.prototype.writeFloatBE=function(a,b,c){return M(this,a,b,!1,c)},f.prototype.writeDoubleLE=function(a,b,c){return N(this,a,b,!0,c)},f.prototype.writeDoubleBE=function(a,b,c){return N(this,a,b,!1,c)},f.prototype.copy=function(a,b,c,d){if(c||(c=0),d||0===d||(d=this.length),b>=a.length&&(b=a.length),b||(b=0),d>0&&c>d&&(d=c),d===c)return 0;if(0===a.length||0===this.length)return 0;if(0>b)throw new RangeError("targetStart out of bounds");if(0>c||c>=this.length)throw new RangeError("sourceStart out of bounds");if(0>d)throw new RangeError("sourceEnd out of bounds");d>this.length&&(d=this.length),a.length-bc&&d>b)for(e=g-1;e>=0;e--)a[e+b]=this[e+c];else if(1e3>g||!f.TYPED_ARRAY_SUPPORT)for(e=0;g>e;e++)a[e+b]=this[e+c];else a._set(this.subarray(c,c+g),b);return g},f.prototype.fill=function(a,b,c){if(a||(a=0),b||(b=0),c||(c=this.length),b>c)throw new RangeError("end < start");if(c!==b&&0!==this.length){if(0>b||b>=this.length)throw new RangeError("start out of bounds");if(0>c||c>this.length)throw new RangeError("end out of bounds");var d;if("number"==typeof a)for(d=b;c>d;d++)this[d]=a;else{var e=R(a.toString()),f=e.length;for(d=b;c>d;d++)this[d]=e[d%f]}return this}},f.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(f.TYPED_ARRAY_SUPPORT)return new f(this).buffer;for(var a=new Uint8Array(this.length),b=0,c=a.length;c>b;b+=1)a[b]=this[b];return a.buffer}throw new TypeError("Buffer.toArrayBuffer not supported in this browser")};var _=f.prototype;f._augment=function(a){return a.constructor=f,a._isBuffer=!0,a._set=a.set,a.get=_.get,a.set=_.set,a.write=_.write,a.toString=_.toString,a.toLocaleString=_.toString,a.toJSON=_.toJSON,a.equals=_.equals,a.compare=_.compare,a.indexOf=_.indexOf,a.copy=_.copy,a.slice=_.slice,a.readUIntLE=_.readUIntLE,a.readUIntBE=_.readUIntBE,a.readUInt8=_.readUInt8,a.readUInt16LE=_.readUInt16LE,a.readUInt16BE=_.readUInt16BE,a.readUInt32LE=_.readUInt32LE,a.readUInt32BE=_.readUInt32BE,a.readIntLE=_.readIntLE,a.readIntBE=_.readIntBE,a.readInt8=_.readInt8,a.readInt16LE=_.readInt16LE,a.readInt16BE=_.readInt16BE,a.readInt32LE=_.readInt32LE,a.readInt32BE=_.readInt32BE,a.readFloatLE=_.readFloatLE,a.readFloatBE=_.readFloatBE,a.readDoubleLE=_.readDoubleLE,a.readDoubleBE=_.readDoubleBE,a.writeUInt8=_.writeUInt8,a.writeUIntLE=_.writeUIntLE,a.writeUIntBE=_.writeUIntBE,a.writeUInt16LE=_.writeUInt16LE,a.writeUInt16BE=_.writeUInt16BE,a.writeUInt32LE=_.writeUInt32LE,a.writeUInt32BE=_.writeUInt32BE,a.writeIntLE=_.writeIntLE,a.writeIntBE=_.writeIntBE,a.writeInt8=_.writeInt8,a.writeInt16LE=_.writeInt16LE,a.writeInt16BE=_.writeInt16BE,a.writeInt32LE=_.writeInt32LE,a.writeInt32BE=_.writeInt32BE,a.writeFloatLE=_.writeFloatLE,a.writeFloatBE=_.writeFloatBE,a.writeDoubleLE=_.writeDoubleLE,a.writeDoubleBE=_.writeDoubleBE,a.fill=_.fill,a.inspect=_.inspect,a.toArrayBuffer=_.toArrayBuffer,a};var aa=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":1,ieee754:6,isarray:3}],3:[function(a,b,c){var d={}.toString;b.exports=Array.isArray||function(a){return"[object Array]"==d.call(a)}},{}],4:[function(a,b,c){var d=function(a,b,c){c=c||{};var d=c.encode||h,e=[a+"="+d(b)];return c.maxAge&&e.push("Max-Age="+c.maxAge),c.domain&&e.push("Domain="+c.domain),c.path&&e.push("Path="+c.path),c.expires&&e.push("Expires="+c.expires.toUTCString()),c.httpOnly&&e.push("HttpOnly"),c.secure&&e.push("Secure"),e.join("; ")},e=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,f=function(a){return a.trim?a.trim():a.replace(e,"")},g=function(a,b){b=b||{};for(var c={},d=a.split(/[;,] */),e=b.decode||i,g=d.length,h=0;g>h;h++){var j=d[h],k=j.indexOf("=");if(!(0>k)){var l=f(j.substr(0,k)),m=f(j.substr(++k,j.length));if('"'==m[0]&&(m=m.slice(1,-1)),void 0==c[l])try{c[l]=e(m)}catch(n){c[l]=m}}}return c},h=encodeURIComponent,i=decodeURIComponent;b.exports.serialize=d,b.exports.parse=g},{}],5:[function(a,b,c){function d(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function e(a){return"function"==typeof a}function f(a){return"number"==typeof a}function g(a){return"object"==typeof a&&null!==a}function h(a){return void 0===a}b.exports=d,d.EventEmitter=d,d.prototype._events=void 0,d.prototype._maxListeners=void 0,d.defaultMaxListeners=10,d.prototype.setMaxListeners=function(a){if(!f(a)||0>a||isNaN(a))throw TypeError("n must be a positive number");return this._maxListeners=a,this},d.prototype.emit=function(a){var b,c,d,f,i,j;if(this._events||(this._events={}),"error"===a&&(!this._events.error||g(this._events.error)&&!this._events.error.length)){if(b=arguments[1],b instanceof Error)throw b;throw TypeError('Uncaught, unspecified "error" event.')}if(c=this._events[a],h(c))return!1;if(e(c))switch(arguments.length){case 1:c.call(this);break;case 2:c.call(this,arguments[1]);break;case 3:c.call(this,arguments[1],arguments[2]);break;default:for(d=arguments.length,f=new Array(d-1),i=1;d>i;i++)f[i-1]=arguments[i];c.apply(this,f)}else if(g(c)){for(d=arguments.length,f=new Array(d-1),i=1;d>i;i++)f[i-1]=arguments[i];for(j=c.slice(),d=j.length,i=0;d>i;i++)j[i].apply(this,f)}return!0},d.prototype.addListener=function(a,b){var c;if(!e(b))throw TypeError("listener must be a function");if(this._events||(this._events={}),this._events.newListener&&this.emit("newListener",a,e(b.listener)?b.listener:b),this._events[a]?g(this._events[a])?this._events[a].push(b):this._events[a]=[this._events[a],b]:this._events[a]=b,g(this._events[a])&&!this._events[a].warned){var c;c=h(this._maxListeners)?d.defaultMaxListeners:this._maxListeners,c&&c>0&&this._events[a].length>c&&(this._events[a].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[a].length),"function"==typeof console.trace&&console.trace())}return this},d.prototype.on=d.prototype.addListener,d.prototype.once=function(a,b){function c(){this.removeListener(a,c),d||(d=!0,b.apply(this,arguments))}if(!e(b))throw TypeError("listener must be a function");var d=!1;return c.listener=b,this.on(a,c),this},d.prototype.removeListener=function(a,b){var c,d,f,h;if(!e(b))throw TypeError("listener must be a function");if(!this._events||!this._events[a])return this;if(c=this._events[a],f=c.length,d=-1,c===b||e(c.listener)&&c.listener===b)delete this._events[a],this._events.removeListener&&this.emit("removeListener",a,b);else if(g(c)){for(h=f;h-->0;)if(c[h]===b||c[h].listener&&c[h].listener===b){d=h;break}if(0>d)return this;1===c.length?(c.length=0,delete this._events[a]):c.splice(d,1),this._events.removeListener&&this.emit("removeListener",a,b)}return this},d.prototype.removeAllListeners=function(a){var b,c;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[a]&&delete this._events[a],this;if(0===arguments.length){for(b in this._events)"removeListener"!==b&&this.removeAllListeners(b);return this.removeAllListeners("removeListener"),this._events={},this}if(c=this._events[a],e(c))this.removeListener(a,c);else for(;c.length;)this.removeListener(a,c[c.length-1]);return delete this._events[a],this},d.prototype.listeners=function(a){var b;return b=this._events&&this._events[a]?e(this._events[a])?[this._events[a]]:this._events[a].slice():[]},d.listenerCount=function(a,b){var c;return c=a._events&&a._events[b]?e(a._events[b])?1:a._events[b].length:0}},{}],6:[function(a,b,c){c.read=function(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?NaN:(n?-1:1)*(1/0);g+=Math.pow(2,d),f-=j}return(n?-1:1)*g*Math.pow(2,f-d)},c.write=function(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=0>b||0===b&&0>1/b?1:0;for(b=Math.abs(b),isNaN(b)||b===1/0?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p}},{}],7:[function(a,b,c){"function"==typeof Object.create?b.exports=function(a,b){b&&(a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}))}:b.exports=function(a,b){if(b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}}},{}],8:[function(a,b,c){b.exports=a("./jquery.build.js")},{"./jquery.build.js":9}],9:[function(a,b,c){!function(){var a=function(a,b){var c=!0;try{var d=b.createElement("button");d.type="button"}catch(e){c=!1}var f=b.createElement("style");f.type="text/css";var g=f.styleSheet&&"cssText"in f.styleSheet,h=b.createElement("div");h.innerHTML=" s ";var i=h.childNodes[0].nodeValue,j=0!=i.indexOf(" "),k=2!=i.lastIndexOf(" "),l=/'/g,m=/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,n=/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,o=/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/g,p=/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/g,q=/[\[\]]/g,r=function(a,c){j&&" "===c.charAt(0)&&a.appendChild(b.createTextNode(" ")),a.appendChild(b.createTextNode(c)),k&&" "===c.charAt(c.length-1)&&a.appendChild(b.createTextNode(" "))},s=function(b,c){if(c)if(c.jquery)b.appendChild(c.get(0));else if(1==c.nodeType||3==c.nodeType||11==c.nodeType)b.appendChild(c);else if(a.isArray(c)){var d=0,e=c.length;for(d=0;e>d;d++)s(b,c[d])}else r(b,c.toString())},t=function(c){var d=b.createDocumentFragment();if(c)if(a.isArray(c)){var e=0,f=c.length;for(e=0;f>e;e++)s(d,c[e])}else s(d,c);return d},u=function(a){var c=b.createDocumentFragment();if(a)if("undefined"!=typeof c.innerHTML)c.innerHTML=a;else{var d=b.createElement("div");for(d.innerHTML=a.replace(l,"'"),j&&0==a.indexOf(" ")&&c.appendChild(b.createTextNode(" "));d.hasChildNodes();)c.appendChild(d.firstChild);k&&a.lastIndexOf(" ")==a.length-1&&c.appendChild(b.createTextNode(" "))}return c};return a.build=function(d,e,f){2==arguments.length&&null!=e&&("string"==typeof e||a.isArray(e)||e.nodeType||e.jquery)&&(f=e,e=null),d=d||"";var h;h=d.match(m),h&&(h=h[0]);var i=null;if(-1!=d.indexOf("#")){var i=d.match(n);i=i?i[1]:null}var j;-1!=d.indexOf(".")&&(j=d.match(o));var k;-1!=d.indexOf("[")&&(k=d.match(p)),h=h||"div",k&&(e=e||{},a.each(k,function(a,b){var c=b.replace(q,"").split("=");c&&2==c.length&&(e[c[0]]=c[1])})),e=e||{};var l;if(c||"input"!==h&&"button"!==h)l=b.createElement(h);else{var r=e.type?'type="'+e.type+'"':"",s=e.name?'name="'+e.name+'"':"";l=b.createElement("<"+h+" "+r+" "+s+">"),delete e.type,delete e.name}var u=a(l);if(e&&u.attr(e),i&&(l.id=i),"img"===h&&(e.width||u.removeAttr("width"),e.height||u.removeAttr("height")),j){var v="";a.each(j,function(a,b){v+=b.replace(".","")+" "}),l.className=a.trim(l.className+" "+v)}return g&&"style"==h&&"string"==typeof f?(u.attr("type")||u.attr("type","text/css"),l.styleSheet.cssText=f):f&&(11==f.nodeType?l.appendChild(f):l.appendChild(t(f))),u},a.build.docFrag=t,a.build.html=u,a.build};"undefined"!=typeof b&&b.exports&&(b.exports=a),"undefined"!=typeof window&&window.jQuery&&window.document&&a(window.jQuery,window.document)}()},{}],10:[function(a,b,c){(function(a){!function(d){function e(a){throw RangeError(H[a])}function f(a,b){for(var c=a.length;c--;)a[c]=b(a[c]);return a}function g(a,b){return f(a.split(G),b).join(".")}function h(a){for(var b,c,d=[],e=0,f=a.length;f>e;)b=a.charCodeAt(e++),b>=55296&&56319>=b&&f>e?(c=a.charCodeAt(e++),56320==(64512&c)?d.push(((1023&b)<<10)+(1023&c)+65536):(d.push(b),e--)):d.push(b);return d}function i(a){return f(a,function(a){var b="";return a>65535&&(a-=65536,b+=K(a>>>10&1023|55296),a=56320|1023&a),b+=K(a)}).join("")}function j(a){return 10>a-48?a-22:26>a-65?a-65:26>a-97?a-97:w}function k(a,b){return a+22+75*(26>a)-((0!=b)<<5)}function l(a,b,c){var d=0;for(a=c?J(a/A):a>>1,a+=J(a/b);a>I*y>>1;d+=w)a=J(a/I);return J(d+(I+1)*a/(a+z))}function m(a){var b,c,d,f,g,h,k,m,n,o,p=[],q=a.length,r=0,s=C,t=B;for(c=a.lastIndexOf(D),0>c&&(c=0),d=0;c>d;++d)a.charCodeAt(d)>=128&&e("not-basic"),p.push(a.charCodeAt(d));for(f=c>0?c+1:0;q>f;){for(g=r,h=1,k=w;f>=q&&e("invalid-input"),m=j(a.charCodeAt(f++)),(m>=w||m>J((v-r)/h))&&e("overflow"),r+=m*h,n=t>=k?x:k>=t+y?y:k-t,!(n>m);k+=w)o=w-n,h>J(v/o)&&e("overflow"),h*=o;b=p.length+1,t=l(r-g,b,0==g),J(r/b)>v-s&&e("overflow"),s+=J(r/b),r%=b,p.splice(r++,0,s)}return i(p)}function n(a){var b,c,d,f,g,i,j,m,n,o,p,q,r,s,t,u=[];for(a=h(a),q=a.length,b=C,c=0,g=B,i=0;q>i;++i)p=a[i],128>p&&u.push(K(p));for(d=f=u.length,f&&u.push(D);q>d;){for(j=v,i=0;q>i;++i)p=a[i],p>=b&&j>p&&(j=p);for(r=d+1,j-b>J((v-c)/r)&&e("overflow"),c+=(j-b)*r,b=j,i=0;q>i;++i)if(p=a[i],b>p&&++c>v&&e("overflow"),p==b){for(m=c,n=w;o=g>=n?x:n>=g+y?y:n-g,!(o>m);n+=w)t=m-o,s=w-o,u.push(K(k(o+t%s,0))),m=J(t/s);u.push(K(k(m,0))),g=l(c,r,d==f),c=0,++d}++c,++b}return u.join("")}function o(a){return g(a,function(a){return E.test(a)?m(a.slice(4).toLowerCase()):a})}function p(a){return g(a,function(a){return F.test(a)?"xn--"+n(a):a})}var q="object"==typeof c&&c,r="object"==typeof b&&b&&b.exports==q&&b,s="object"==typeof a&&a;(s.global===s||s.window===s)&&(d=s);var t,u,v=2147483647,w=36,x=1,y=26,z=38,A=700,B=72,C=128,D="-",E=/^xn--/,F=/[^ -~]/,G=/\x2E|\u3002|\uFF0E|\uFF61/g,H={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},I=w-x,J=Math.floor,K=String.fromCharCode;if(t={version:"1.2.4",ucs2:{decode:h,encode:i},decode:m,encode:n,toASCII:p,toUnicode:o},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define("punycode",function(){return t});else if(q&&!q.nodeType)if(r)r.exports=t;else for(u in t)t.hasOwnProperty(u)&&(q[u]=t[u]);else d.punycode=t}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],11:[function(a,b,c){"use strict";function d(a,b){return Object.prototype.hasOwnProperty.call(a,b)}b.exports=function(a,b,c,f){b=b||"&",c=c||"=";var g={};if("string"!=typeof a||0===a.length)return g;var h=/\+/g;a=a.split(b);var i=1e3;f&&"number"==typeof f.maxKeys&&(i=f.maxKeys); + var j=a.length;i>0&&j>i&&(j=i);for(var k=0;j>k;++k){var l,m,n,o,p=a[k].replace(h,"%20"),q=p.indexOf(c);q>=0?(l=p.substr(0,q),m=p.substr(q+1)):(l=p,m=""),n=decodeURIComponent(l),o=decodeURIComponent(m),d(g,n)?e(g[n])?g[n].push(o):g[n]=[g[n],o]:g[n]=o}return g};var e=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)}},{}],12:[function(a,b,c){"use strict";function d(a,b){if(a.map)return a.map(b);for(var c=[],d=0;dh;){for(var i=g%d,j=Math.min(f-h,d-i),k=0;j>k;k++)c[i+k]=a[h+k];g+=j,h+=j,g%d===0&&this._update(c)}return this._len+=f,this},d.prototype.digest=function(a){var b=this._len%this._blockSize;this._block[b]=128,this._block.fill(0,b+1),b>=this._finalSize&&(this._update(this._block),this._block.fill(0));var c=8*this._len;if(4294967295>=c)this._block.writeUInt32BE(c,this._blockSize-4);else{var d=(4294967295&c)>>>0,e=(c-d)/4294967296;this._block.writeUInt32BE(e,this._blockSize-8),this._block.writeUInt32BE(d,this._blockSize-4)}this._update(this._block);var f=this._hash();return a?f.toString(a):f},d.prototype._update=function(){throw new Error("_update must be implemented by subclass")},b.exports=d},{"safe-buffer":14}],16:[function(a,b,c){var c=b.exports=function(a){a=a.toLowerCase();var b=c[a];if(!b)throw new Error(a+" is not supported (we accept pull requests)");return new b};c.sha=a("./sha"),c.sha1=a("./sha1"),c.sha224=a("./sha224"),c.sha256=a("./sha256"),c.sha384=a("./sha384"),c.sha512=a("./sha512")},{"./sha":17,"./sha1":18,"./sha224":19,"./sha256":20,"./sha384":21,"./sha512":22}],17:[function(a,b,c){function d(){this.init(),this._w=l,i.call(this,64,56)}function e(a){return a<<5|a>>>27}function f(a){return a<<30|a>>>2}function g(a,b,c,d){return 0===a?b&c|~b&d:2===a?b&c|b&d|c&d:b^c^d}var h=a("inherits"),i=a("./hash"),j=a("safe-buffer").Buffer,k=[1518500249,1859775393,-1894007588,-899497514],l=new Array(80);h(d,i),d.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},d.prototype._update=function(a){for(var b=this._w,c=0|this._a,d=0|this._b,h=0|this._c,i=0|this._d,j=0|this._e,l=0;16>l;++l)b[l]=a.readInt32BE(4*l);for(;80>l;++l)b[l]=b[l-3]^b[l-8]^b[l-14]^b[l-16];for(var m=0;80>m;++m){var n=~~(m/20),o=e(c)+g(n,d,h,i)+j+b[m]+k[n]|0;j=i,i=h,h=f(d),d=c,c=o}this._a=c+this._a|0,this._b=d+this._b|0,this._c=h+this._c|0,this._d=i+this._d|0,this._e=j+this._e|0},d.prototype._hash=function(){var a=j.allocUnsafe(20);return a.writeInt32BE(0|this._a,0),a.writeInt32BE(0|this._b,4),a.writeInt32BE(0|this._c,8),a.writeInt32BE(0|this._d,12),a.writeInt32BE(0|this._e,16),a},b.exports=d},{"./hash":15,inherits:7,"safe-buffer":14}],18:[function(a,b,c){function d(){this.init(),this._w=m,j.call(this,64,56)}function e(a){return a<<1|a>>>31}function f(a){return a<<5|a>>>27}function g(a){return a<<30|a>>>2}function h(a,b,c,d){return 0===a?b&c|~b&d:2===a?b&c|b&d|c&d:b^c^d}var i=a("inherits"),j=a("./hash"),k=a("safe-buffer").Buffer,l=[1518500249,1859775393,-1894007588,-899497514],m=new Array(80);i(d,j),d.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},d.prototype._update=function(a){for(var b=this._w,c=0|this._a,d=0|this._b,i=0|this._c,j=0|this._d,k=0|this._e,m=0;16>m;++m)b[m]=a.readInt32BE(4*m);for(;80>m;++m)b[m]=e(b[m-3]^b[m-8]^b[m-14]^b[m-16]);for(var n=0;80>n;++n){var o=~~(n/20),p=f(c)+h(o,d,i,j)+k+b[n]+l[o]|0;k=j,j=i,i=g(d),d=c,c=p}this._a=c+this._a|0,this._b=d+this._b|0,this._c=i+this._c|0,this._d=j+this._d|0,this._e=k+this._e|0},d.prototype._hash=function(){var a=k.allocUnsafe(20);return a.writeInt32BE(0|this._a,0),a.writeInt32BE(0|this._b,4),a.writeInt32BE(0|this._c,8),a.writeInt32BE(0|this._d,12),a.writeInt32BE(0|this._e,16),a},b.exports=d},{"./hash":15,inherits:7,"safe-buffer":14}],19:[function(a,b,c){function d(){this.init(),this._w=i,g.call(this,64,56)}var e=a("inherits"),f=a("./sha256"),g=a("./hash"),h=a("safe-buffer").Buffer,i=new Array(64);e(d,f),d.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},d.prototype._hash=function(){var a=h.allocUnsafe(28);return a.writeInt32BE(this._a,0),a.writeInt32BE(this._b,4),a.writeInt32BE(this._c,8),a.writeInt32BE(this._d,12),a.writeInt32BE(this._e,16),a.writeInt32BE(this._f,20),a.writeInt32BE(this._g,24),a},b.exports=d},{"./hash":15,"./sha256":20,inherits:7,"safe-buffer":14}],20:[function(a,b,c){function d(){this.init(),this._w=o,l.call(this,64,56)}function e(a,b,c){return c^a&(b^c)}function f(a,b,c){return a&b|c&(a|b)}function g(a){return(a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10)}function h(a){return(a>>>6|a<<26)^(a>>>11|a<<21)^(a>>>25|a<<7)}function i(a){return(a>>>7|a<<25)^(a>>>18|a<<14)^a>>>3}function j(a){return(a>>>17|a<<15)^(a>>>19|a<<13)^a>>>10}var k=a("inherits"),l=a("./hash"),m=a("safe-buffer").Buffer,n=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],o=new Array(64);k(d,l),d.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},d.prototype._update=function(a){for(var b=this._w,c=0|this._a,d=0|this._b,k=0|this._c,l=0|this._d,m=0|this._e,o=0|this._f,p=0|this._g,q=0|this._h,r=0;16>r;++r)b[r]=a.readInt32BE(4*r);for(;64>r;++r)b[r]=j(b[r-2])+b[r-7]+i(b[r-15])+b[r-16]|0;for(var s=0;64>s;++s){var t=q+h(m)+e(m,o,p)+n[s]+b[s]|0,u=g(c)+f(c,d,k)|0;q=p,p=o,o=m,m=l+t|0,l=k,k=d,d=c,c=t+u|0}this._a=c+this._a|0,this._b=d+this._b|0,this._c=k+this._c|0,this._d=l+this._d|0,this._e=m+this._e|0,this._f=o+this._f|0,this._g=p+this._g|0,this._h=q+this._h|0},d.prototype._hash=function(){var a=m.allocUnsafe(32);return a.writeInt32BE(this._a,0),a.writeInt32BE(this._b,4),a.writeInt32BE(this._c,8),a.writeInt32BE(this._d,12),a.writeInt32BE(this._e,16),a.writeInt32BE(this._f,20),a.writeInt32BE(this._g,24),a.writeInt32BE(this._h,28),a},b.exports=d},{"./hash":15,inherits:7,"safe-buffer":14}],21:[function(a,b,c){function d(){this.init(),this._w=i,g.call(this,128,112)}var e=a("inherits"),f=a("./sha512"),g=a("./hash"),h=a("safe-buffer").Buffer,i=new Array(160);e(d,f),d.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},d.prototype._hash=function(){function a(a,c,d){b.writeInt32BE(a,d),b.writeInt32BE(c,d+4)}var b=h.allocUnsafe(48);return a(this._ah,this._al,0),a(this._bh,this._bl,8),a(this._ch,this._cl,16),a(this._dh,this._dl,24),a(this._eh,this._el,32),a(this._fh,this._fl,40),b},b.exports=d},{"./hash":15,"./sha512":22,inherits:7,"safe-buffer":14}],22:[function(a,b,c){function d(){this.init(),this._w=r,o.call(this,128,112)}function e(a,b,c){return c^a&(b^c)}function f(a,b,c){return a&b|c&(a|b)}function g(a,b){return(a>>>28|b<<4)^(b>>>2|a<<30)^(b>>>7|a<<25)}function h(a,b){return(a>>>14|b<<18)^(a>>>18|b<<14)^(b>>>9|a<<23)}function i(a,b){return(a>>>1|b<<31)^(a>>>8|b<<24)^a>>>7}function j(a,b){return(a>>>1|b<<31)^(a>>>8|b<<24)^(a>>>7|b<<25)}function k(a,b){return(a>>>19|b<<13)^(b>>>29|a<<3)^a>>>6}function l(a,b){return(a>>>19|b<<13)^(b>>>29|a<<3)^(a>>>6|b<<26)}function m(a,b){return b>>>0>a>>>0?1:0}var n=a("inherits"),o=a("./hash"),p=a("safe-buffer").Buffer,q=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],r=new Array(160);n(d,o),d.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},d.prototype._update=function(a){for(var b=this._w,c=0|this._ah,d=0|this._bh,n=0|this._ch,o=0|this._dh,p=0|this._eh,r=0|this._fh,s=0|this._gh,t=0|this._hh,u=0|this._al,v=0|this._bl,w=0|this._cl,x=0|this._dl,y=0|this._el,z=0|this._fl,A=0|this._gl,B=0|this._hl,C=0;32>C;C+=2)b[C]=a.readInt32BE(4*C),b[C+1]=a.readInt32BE(4*C+4);for(;160>C;C+=2){var D=b[C-30],E=b[C-30+1],F=i(D,E),G=j(E,D);D=b[C-4],E=b[C-4+1];var H=k(D,E),I=l(E,D),J=b[C-14],K=b[C-14+1],L=b[C-32],M=b[C-32+1],N=G+K|0,O=F+J+m(N,G)|0;N=N+I|0,O=O+H+m(N,I)|0,N=N+M|0,O=O+L+m(N,M)|0,b[C]=O,b[C+1]=N}for(var P=0;160>P;P+=2){O=b[P],N=b[P+1];var Q=f(c,d,n),R=f(u,v,w),S=g(c,u),T=g(u,c),U=h(p,y),V=h(y,p),W=q[P],X=q[P+1],Y=e(p,r,s),Z=e(y,z,A),$=B+V|0,_=t+U+m($,B)|0;$=$+Z|0,_=_+Y+m($,Z)|0,$=$+X|0,_=_+W+m($,X)|0,$=$+N|0,_=_+O+m($,N)|0;var aa=T+R|0,ba=S+Q+m(aa,T)|0;t=s,B=A,s=r,A=z,r=p,z=y,y=x+$|0,p=o+_+m(y,x)|0,o=n,x=w,n=d,w=v,d=c,v=u,u=$+aa|0,c=_+ba+m(u,$)|0}this._al=this._al+u|0,this._bl=this._bl+v|0,this._cl=this._cl+w|0,this._dl=this._dl+x|0,this._el=this._el+y|0,this._fl=this._fl+z|0,this._gl=this._gl+A|0,this._hl=this._hl+B|0,this._ah=this._ah+c+m(this._al,u)|0,this._bh=this._bh+d+m(this._bl,v)|0,this._ch=this._ch+n+m(this._cl,w)|0,this._dh=this._dh+o+m(this._dl,x)|0,this._eh=this._eh+p+m(this._el,y)|0,this._fh=this._fh+r+m(this._fl,z)|0,this._gh=this._gh+s+m(this._gl,A)|0,this._hh=this._hh+t+m(this._hl,B)|0},d.prototype._hash=function(){function a(a,c,d){b.writeInt32BE(a,d),b.writeInt32BE(c,d+4)}var b=p.allocUnsafe(64);return a(this._ah,this._al,0),a(this._bh,this._bl,8),a(this._ch,this._cl,16),a(this._dh,this._dl,24),a(this._eh,this._el,32),a(this._fh,this._fl,40),a(this._gh,this._gl,48),a(this._hh,this._hl,56),b},b.exports=d},{"./hash":15,inherits:7,"safe-buffer":14}],23:[function(a,b,c){function d(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function e(a,b,c){if(a&&j(a)&&a instanceof d)return a;var e=new d;return e.parse(a,b,c),e}function f(a){return i(a)&&(a=e(a)),a instanceof d?a.format():d.prototype.format.call(a)}function g(a,b){return e(a,!1,!0).resolve(b)}function h(a,b){return a?e(a,!1,!0).resolveObject(b):b}function i(a){return"string"==typeof a}function j(a){return"object"==typeof a&&null!==a}function k(a){return null===a}function l(a){return null==a}var m=a("punycode");c.parse=e,c.resolve=g,c.resolveObject=h,c.format=f,c.Url=d;var n=/^([a-z0-9.+-]+:)/i,o=/:[0-9]*$/,p=["<",">",'"',"`"," ","\r","\n"," "],q=["{","}","|","\\","^","`"].concat(p),r=["'"].concat(q),s=["%","/","?",";","#"].concat(r),t=["/","?","#"],u=255,v=/^[a-z0-9A-Z_-]{0,63}$/,w=/^([a-z0-9A-Z_-]{0,63})(.*)$/,x={javascript:!0,"javascript:":!0},y={javascript:!0,"javascript:":!0},z={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},A=a("querystring");d.prototype.parse=function(a,b,c){if(!i(a))throw new TypeError("Parameter 'url' must be a string, not "+typeof a);var d=a;d=d.trim();var e=n.exec(d);if(e){e=e[0];var f=e.toLowerCase();this.protocol=f,d=d.substr(e.length)}if(c||e||d.match(/^\/\/[^@\/]+@[^@\/]+/)){var g="//"===d.substr(0,2);!g||e&&y[e]||(d=d.substr(2),this.slashes=!0)}if(!y[e]&&(g||e&&!z[e])){for(var h=-1,j=0;jk)&&(h=k)}var l,o;o=-1===h?d.lastIndexOf("@"):d.lastIndexOf("@",h),-1!==o&&(l=d.slice(0,o),d=d.slice(o+1),this.auth=decodeURIComponent(l)),h=-1;for(var j=0;jk)&&(h=k)}-1===h&&(h=d.length),this.host=d.slice(0,h),d=d.slice(h),this.parseHost(),this.hostname=this.hostname||"";var p="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!p)for(var q=this.hostname.split(/\./),j=0,B=q.length;B>j;j++){var C=q[j];if(C&&!C.match(v)){for(var D="",E=0,F=C.length;F>E;E++)D+=C.charCodeAt(E)>127?"x":C[E];if(!D.match(v)){var G=q.slice(0,j),H=q.slice(j+1),I=C.match(w);I&&(G.push(I[1]),H.unshift(I[2])),H.length&&(d="/"+H.join(".")+d),this.hostname=G.join(".");break}}}if(this.hostname.length>u?this.hostname="":this.hostname=this.hostname.toLowerCase(),!p){for(var J=this.hostname.split("."),K=[],j=0;jj;j++){var O=r[j],P=encodeURIComponent(O);P===O&&(P=escape(O)),d=d.split(O).join(P)}var Q=d.indexOf("#");-1!==Q&&(this.hash=d.substr(Q),d=d.slice(0,Q));var R=d.indexOf("?");if(-1!==R?(this.search=d.substr(R),this.query=d.substr(R+1),b&&(this.query=A.parse(this.query)),d=d.slice(0,R)):b&&(this.search="",this.query={}),d&&(this.pathname=d),z[f]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var M=this.pathname||"",L=this.search||"";this.path=M+L}return this.href=this.format(),this},d.prototype.format=function(){var a=this.auth||"";a&&(a=encodeURIComponent(a),a=a.replace(/%3A/i,":"),a+="@");var b=this.protocol||"",c=this.pathname||"",d=this.hash||"",e=!1,f="";this.host?e=a+this.host:this.hostname&&(e=a+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(e+=":"+this.port)),this.query&&j(this.query)&&Object.keys(this.query).length&&(f=A.stringify(this.query));var g=this.search||f&&"?"+f||"";return b&&":"!==b.substr(-1)&&(b+=":"),this.slashes||(!b||z[b])&&e!==!1?(e="//"+(e||""),c&&"/"!==c.charAt(0)&&(c="/"+c)):e||(e=""),d&&"#"!==d.charAt(0)&&(d="#"+d),g&&"?"!==g.charAt(0)&&(g="?"+g),c=c.replace(/[?#]/g,function(a){return encodeURIComponent(a)}),g=g.replace("#","%23"),b+e+c+g+d},d.prototype.resolve=function(a){return this.resolveObject(e(a,!1,!0)).format()},d.prototype.resolveObject=function(a){if(i(a)){var b=new d;b.parse(a,!1,!0),a=b}var c=new d;if(Object.keys(this).forEach(function(a){c[a]=this[a]},this),c.hash=a.hash,""===a.href)return c.href=c.format(),c;if(a.slashes&&!a.protocol)return Object.keys(a).forEach(function(b){"protocol"!==b&&(c[b]=a[b])}),z[c.protocol]&&c.hostname&&!c.pathname&&(c.path=c.pathname="/"),c.href=c.format(),c;if(a.protocol&&a.protocol!==c.protocol){if(!z[a.protocol])return Object.keys(a).forEach(function(b){c[b]=a[b]}),c.href=c.format(),c;if(c.protocol=a.protocol,a.host||y[a.protocol])c.pathname=a.pathname;else{for(var e=(a.pathname||"").split("/");e.length&&!(a.host=e.shift()););a.host||(a.host=""),a.hostname||(a.hostname=""),""!==e[0]&&e.unshift(""),e.length<2&&e.unshift(""),c.pathname=e.join("/")}if(c.search=a.search,c.query=a.query,c.host=a.host||"",c.auth=a.auth,c.hostname=a.hostname||a.host,c.port=a.port,c.pathname||c.search){var f=c.pathname||"",g=c.search||"";c.path=f+g}return c.slashes=c.slashes||a.slashes,c.href=c.format(),c}var h=c.pathname&&"/"===c.pathname.charAt(0),j=a.host||a.pathname&&"/"===a.pathname.charAt(0),m=j||h||c.host&&a.pathname,n=m,o=c.pathname&&c.pathname.split("/")||[],e=a.pathname&&a.pathname.split("/")||[],p=c.protocol&&!z[c.protocol];if(p&&(c.hostname="",c.port=null,c.host&&(""===o[0]?o[0]=c.host:o.unshift(c.host)),c.host="",a.protocol&&(a.hostname=null,a.port=null,a.host&&(""===e[0]?e[0]=a.host:e.unshift(a.host)),a.host=null),m=m&&(""===e[0]||""===o[0])),j)c.host=a.host||""===a.host?a.host:c.host,c.hostname=a.hostname||""===a.hostname?a.hostname:c.hostname,c.search=a.search,c.query=a.query,o=e;else if(e.length)o||(o=[]),o.pop(),o=o.concat(e),c.search=a.search,c.query=a.query;else if(!l(a.search)){if(p){c.hostname=c.host=o.shift();var q=c.host&&c.host.indexOf("@")>0?c.host.split("@"):!1;q&&(c.auth=q.shift(),c.host=c.hostname=q.shift())}return c.search=a.search,c.query=a.query,k(c.pathname)&&k(c.search)||(c.path=(c.pathname?c.pathname:"")+(c.search?c.search:"")),c.href=c.format(),c}if(!o.length)return c.pathname=null,c.search?c.path="/"+c.search:c.path=null,c.href=c.format(),c;for(var r=o.slice(-1)[0],s=(c.host||a.host)&&("."===r||".."===r)||""===r,t=0,u=o.length;u>=0;u--)r=o[u],"."==r?o.splice(u,1):".."===r?(o.splice(u,1),t++):t&&(o.splice(u,1),t--);if(!m&&!n)for(;t--;t)o.unshift("..");!m||""===o[0]||o[0]&&"/"===o[0].charAt(0)||o.unshift(""),s&&"/"!==o.join("/").substr(-1)&&o.push("");var v=""===o[0]||o[0]&&"/"===o[0].charAt(0);if(p){c.hostname=c.host=v?"":o.length?o.shift():"";var q=c.host&&c.host.indexOf("@")>0?c.host.split("@"):!1;q&&(c.auth=q.shift(),c.host=c.hostname=q.shift())}return m=m||c.host&&o.length,m&&!v&&o.unshift(""),o.length?c.pathname=o.join("/"):(c.pathname=null,c.path=null),k(c.pathname)&&k(c.search)||(c.path=(c.pathname?c.pathname:"")+(c.search?c.search:"")),c.auth=a.auth||c.auth,c.slashes=c.slashes||a.slashes,c.href=c.format(),c},d.prototype.parseHost=function(){var a=this.host,b=o.exec(a);b&&(b=b[0],":"!==b&&(this.port=b.substr(1)),a=a.substr(0,a.length-b.length)),a&&(this.hostname=a)}},{punycode:10,querystring:13}],24:[function(a,b,c){function d(a,b){var c={};return h.each(a,function(a,d){if("hidden"!=d.Datatype&&"profiling"!=d.Datatype){var e=d.VisibilityRule;if(e){if("fieldset"==d.Datatype&&Object.keys(b.fieldsetRows).length>0){var f=j.flatten(b.fieldsetRows[""+d.Id]),g=c[d.Name];g||(g=[]),g=g.concat(h.map(f,function(a){return a.Name})),c[d.Name]=g}var i=e.rules||[e];h.each(i,function(a,b){if("string"!=typeof b){var e=c[b.subjectField];e||(e=[]),-1===h.inArray(d.Name,e)&&e.push(d.Name),c[b.subjectField]=e}})}}}),c}function e(a,b){for(var c=a.length,d=0;c>d;d++){var e=a[d];if(b(e))return e}return void 0}function f(a,b){if(b&&(a.PicklistValues||b.picklistKeys||b.altLabel)){if(a=h.extend(!0,{},a),a.PicklistValues)if(b.picklistFilterValues){var c={};h.each(b.picklistFilterValues,function(a,b){c.hasOwnProperty(b.value)||(c[b.value]=[]),c[b.value].push(b.label)}),a.PicklistValues=h.map(a.PicklistValues,function(a){return c.hasOwnProperty(a.value)&&-1!=h.inArray(a.label,c[a.value])?a:void 0})}else b.picklistKeys&&(a.PicklistValues=h.map(a.PicklistValues,function(a){return-1!=h.inArray(a.value,b.picklistKeys)?a:void 0}));b.altLabel&&(a.InputLabel=b.altLabel)}return a}function g(a,b){if(!a)return{show:!0};var c="show"==a.defaultVisibility,d=a.rules||[a],f=h.map(d,function(a){if("string"!=typeof a){var c=b[a.subjectField];h.isArray(c)||(c=c?[c]:[]);var d=i[a.operator],e=d(c,a.values);return e?a:null}}),g=e(f,function(a){return null!==a});return c?{show:!g,rule:g}:{show:!!g,rule:g}}var h=a("./jquery.js"),i=a("./comparators.js"),j=a("./fields/fieldhelpers.js");b.exports={getChangeMap:d,fieldChangeChecker:g,applyPicklistAlterations:f}},{"./comparators.js":26,"./fields/fieldhelpers.js":30,"./jquery.js":45}],25:[function(a,b,c){function d(a){var b,c=parseInt;return a=(a||"").replace(/\s\s*/g,""),(b=/^#([\da-f]{2})([\da-f]{2})([\da-f]{2})/i.exec(a))?[c(b[1],16),c(b[2],16),c(b[3],16),1]:(b=/^#([\da-f])([\da-f])([\da-f])/i.exec(a))?[17*c(b[1],16),17*c(b[2],16),17*c(b[3],16),1]:(b=/^rgba\(([\d]+),([\d]+),([\d]+),([\d]+|[\d]*.[\d]+)\)/i.exec(a))?[+b[1],+b[2],+b[3],+b[4]]:(b=/^rgb\(([\d]+),([\d]+),([\d]+)\)/i.exec(a))?[+b[1],+b[2],+b[3],1]:null}function e(a,b){var c=d(a),e=d(b);if(!c||!e)return!1;for(var f=0;4>f;f++)if(c[f]!==e[f])return!1;return!0}b.exports={parseColor:d,compareColor:e}},{}],26:[function(a,b,c){var d=function(a,b,c){for(var d=[],e=0;e0},notEqual:function(a,b){var c=function(a,b){return a===b};return 0===d(a,b,c).length},empty:function(a,b){return 0===a.length},notEmpty:function(a,b){return a.length>0},any:function(a,b){return a.length>0},startsWith:function(a,b){var c=function(a,b){return 0===a.indexOf(b)};return d(a,b,c).length>0},notStartsWith:function(a,b){var c=function(a,b){return 0===a.indexOf(b)};return 0===d(a,b,c).length},endsWith:function(a,b){var c=function(a,b){return a.slice(-b.length)===b};return d(a,b,c).length>0},notEndsWith:function(a,b){var c=function(a,b){return a.slice(-b.length)===b};return 0===d(a,b,c).length},contains:function(a,b){var c=function(a,b){return a.match(new RegExp(b,"g"))};return d(a,b,c).length>0},notContains:function(a,b){var c=function(a,b){return a.match(new RegExp(b,"g"))};return 0===d(a,b,c).length},atLeast:function(a,b){return a[0]>=b[0]},atMost:function(a,b){return a[0]<=b[0]},greaterThan:function(a,b){return a[0]>b[0]},lessThan:function(a,b){return a[0]b[0]&&a[0]b[1]},inTimeFrame:function(a,b){return new Date(a[0])>new Date(b[0])&&new Date(a[0])new Date(b[1])},inPast:function(a,b){return new Date(a[0])=new Date},before:function(a,b){return new Date(a[0])new Date(b[0])},onOrBefore:function(a,b){return new Date(a[0])<=new Date(b[0])},onOrAfter:function(a,b){return new Date(a[0])>=new Date(b[0])}};b.exports=e},{}],27:[function(a,b,c){function d(a,b){b=b||location.hostname;var c=new Date;c.setFullYear(c.getFullYear()-1);var d=[];document.cookie=e.serialize(a,"",{expires:c,path:"/"}),d.push("");for(var f=b.split(".");f.length>1;){var g="."+f.join(".");document.cookie=e.serialize(a,"",{expires:c,path:"/",domain:g}),d.push(g),f.shift()}return d}var e=a("cookie");b.exports.removeCookieAllDomains=d},{cookie:4}],28:[function(a,b,c){var d=a("../jquery.js"),e=(d.build,a("./fieldHelpers.js")),f={};b.exports=f,f.fieldType="currency";var g=/[0-9]+/g,h=function(a){return a?a.match(g):!0};f.newField=function(a,b){var c=e.renderInput("text",a,b);return{name:a.Name,elem:e.formatStandardField(c,a,b),val:d.proxy(c.val,c),required:a.IsRequired,validator:h,validatorElem:c,onChange:function(a){c.on("change",a)}}}},{"../jquery.js":45,"./fieldHelpers.js":29}],29:[function(a,b,c){var d=a("../jquery.js"),e=d.build,f={};f.splitSemis=function(a){return a=""+a,a.split(/\s?;\s?/)},f.cap=function(a){return a.charAt(0).toUpperCase()+a.slice(1)},f.first=function(){for(var a=0;aa?!1:h.isSet(c)&&a>c?!1:!0)}function f(a,b,c){return function(b){if(0===arguments.length){var c=a.val();if(h.isSet(c)){var d=parseFloat(c);return isNaN(d)?"":d}return null}a.val(b)}}var g=a("../jquery.js"),h=(g.build,a("./fieldHelpers.js")),g=a("../jquery.js"),h=(g.build,a("./fieldHelpers.js")),i={};b.exports=i,i.fieldType="number",i.newField=function(a,b){var c=h.renderInput("number",a,b);c.attr({min:d(a.MinimumNumber),max:d(a.MaximumNumber),step:d(a.StepNumber)});return{name:a.Name,val:f(c,a.MinimumNumber,a.MaximumNumber),elem:h.formatStandardField(c,a,b),required:a.IsRequired,validator:function(b){return e(b,a.MinimumNumber,a.MaximumNumber)},validatorElem:c,onChange:function(a){c.on("change",a)}}}},{"../jquery.js":45, + "./fieldHelpers.js":29}],35:[function(a,b,c){var d=a("../jquery.js"),e=d.build,f=a("./fieldHelpers.js"),g={};b.exports=g,g.fieldType="radio";var h=function(a){return function(b){if(0===arguments.length){var c=a.find("input:checked").val();return c}a.find("input").prop("checked",!1),""!==b?a.find("input[value='"+b+"']").prop("checked",!0):a.find("input").each(function(a,b){b=d(b),""===b.val()&&b.prop("checked",!0)})}};g.newField=function(a,b){var c=e(".mktoRadioList",{title:a.Description},[d.map(a.PicklistValues||[],function(b,c){var d="mktoRadio_"+a.Id+"_"+c;return c||(firstVal=b.value),e.docFrag([e("input[type=radio].mktoField",{name:a.Name,id:d,value:b.value,"aria-required":a.IsRequired,"aria-labelledby":[f.getLabelId(a.Name,d),f.getInstructionId(a.Name)].join(" ")}),e("label",{"for":d,id:f.getLabelId(d)},[e.html(b.label||b.name)])])})]);a.IsLabelToLeft&&c.addClass("mktoLabelToLeft");var g=h(c);return{name:a.Name,elem:f.formatStandardField(c,a,b),val:g,required:a.IsRequired,validatorElem:c,validatorFocusElem:c.find("input:eq(0)"),onChange:function(a){c.on("change",a)}}}},{"../jquery.js":45,"./fieldHelpers.js":29}],36:[function(a,b,c){var d=a("../jquery.js"),e=d.build,f=a("./fieldHelpers.js"),g=a("../modernizr.js"),h={};b.exports=h,h.fieldType="range";var i=function(a,b,c){var d=a.get(0);if(d.validity&&!d.validity.valid)return!1;var e=a.val();return e?j(e,b,c):!0},j=function(a,b,c){return a=parseFloat(a,10),isNaN(a)?!1:f.isSet(b)&&b>a?!1:f.isSet(c)&&a>c?!1:!0},k=function(a,b,c){return function(d){if(0===arguments.length){var e=a.val();if(f.isSet(e)){var g=parseFloat(e,10);return isNaN(g)?null:g}return null}null!==d&&void 0!==d&&""!==d&&j(d,b,c)&&(a.val(parseFloat(d,10)),a.trigger("change"))}};h.newField=function(a,b){var c,h,j,l,m=a.MinimumNumber||0,n=a.MaximumNumber||100,o=e(".mktoLogicalField.mktoRangeField",[j=e(".mktoRangeValue",[l=e(".mktoRangeValueArrowWrap",e(".mktoRangeValueArrow")),h=e(".mktoRangeValueText",""+a.MinimumNumber||0)]),c=e("input[type=range].mktoField",{id:a.Name,name:a.Name,min:m,max:n,step:a.StepNumber||1,title:a.Description,"aria-labelledby":[f.getLabelId(a.Name),f.getInstructionId(a.Name)].join(" ")}).addClass("mktoHasWidth").css({width:f.first(a.FieldWidth,b.FieldWidth,0)})]).hover(function(){o.addClass("mktoHover"),p()},function(){o.removeClass("mktoHover")});g.csstransforms||l.addClass("mktoArrowImage");var p=function(){var a=c.val()||0;h.html(""+a);var b=12,d=c.data("mktoNoCubicEase"),e=c.data("mktoPxAboveSlider")||0,f=(a-m)/(n-m),g=c.width()*f,i=0;d||(.5>f&&(i=Math.pow(1-f,3)*(b/2)),f>.5&&(i=-1*Math.pow(f,3)*(b/2)),g+=Math.floor(i));var k=g-j.outerWidth()/2,o=h.outerWidth()/2-l.outerWidth()/2;j.css("margin-left",k),j.css("margin-top",-1*(l.outerHeight()+h.outerHeight()+e)),l.css("margin-left",o)};return c.on("change",p),c.on("input",p),c.data("mktoRangeUpdate",p),d("body").on("mktoRender",p),{name:a.Name,val:k(c,a.MinimumNumber,a.MaximumNumber),elem:f.formatStandardField(o,a,b),required:a.IsRequired,validator:function(){return i(c,m,n)},validatorElem:c,onChange:function(a){c.on("change",a)}}}},{"../jquery.js":45,"../modernizr.js":48,"./fieldHelpers.js":29}],37:[function(a,b,c){var d=a("../jquery.js"),e=(d.build,a("./fieldHelpers.js")),f=/^([0-9()+. \t-])+(\s?(x|ext|extension)\s?([0-9()])+)?$/,g={};b.exports=g,g.fieldType="phone";var h=function(a){var b=a.val()||"";return b?b.match(f):!0};g.newField=function(a,b){var c=e.renderInput("tel",a,b);return{name:a.Name,elem:e.formatStandardField(c,a,b),val:d.proxy(c.val,c),required:a.IsRequired,validator:function(){return h(c)},validatorElem:c,onChange:function(a){c.on("change",a)}}}},{"../jquery.js":45,"./fieldHelpers.js":29}],38:[function(a,b,c){var d=a("../jquery.js"),e=(d.build,a("./fieldHelpers.js")),f={};b.exports=f,f.fieldType="string",f.newField=function(a,b){var c=a.Maxlength||255,d=e.renderInput("text",a,b);return a.FieldMask&&d.addClass("mktoInputMask").data("mktoInputMask",a.FieldMask),{name:a.Name,elem:e.formatStandardField(d,a,b),val:function(a){return 0===arguments.length?d.val():(a&&a.length>c&&(a=a.substring(0,c)),d.val(a))},required:a.IsRequired,validatorElem:d,onChange:function(a){d.on("change",a)}}}},{"../jquery.js":45,"./fieldHelpers.js":29}],39:[function(a,b,c){var d=a("../jquery.js"),e=(d.build,a("./fieldHelpers.js")),f={};b.exports=f,f.fieldType="url";var g=/^[a-zA-z0-9\.\-_~:/\?#\[\]@!$&\'\(\)\*\+,;=%]*$/,h=function(a){if(!a)return!0;var b=a.indexOf("://");return 1>b?!1:a.match(g)};f.newField=function(a,b){var c=e.renderInput("url",a,b);return{name:a.Name,elem:e.formatStandardField(c,a,b),val:d.proxy(c.val,c),required:a.IsRequired,validatorElem:c,validator:h,onChange:function(a){c.on("change",a)}}}},{"../jquery.js":45,"./fieldHelpers.js":29}],40:[function(a,b,c){var d=a("../jquery.js"),e=d.build,f=a("./fieldHelpers.js"),g=function(a,b){return function(c){return 0===arguments.length?a.val():(b&&c&&!d.isArray(c)&&(c=f.splitSemis(c)),a.val(c))}},h={};b.exports=h,h.fieldType="picklist",h.newField=function(a,b){var c=e("select.mktoField",{id:a.Name,name:a.Name,title:a.Description,"aria-labelledby":[f.getLabelId(a.Name),f.getInstructionId(a.Name)].join(" ")},[d.map(a.PicklistValues||[],function(a,b){return!a.isDefault||a.selected?e("option",{value:a.value},a.label||a.name):void 0})]);return a.IsMultiselect&&(c.attr("multiple","multiple"),c.attr("size",a.VisibleRows||5)),{name:a.Name,elem:f.formatStandardField(c,a,b),val:g(c,a.IsMultiselect),required:a.IsRequired,validatorElem:c,onChange:function(a){c.on("change",a)}}}},{"../jquery.js":45,"./fieldHelpers.js":29}],41:[function(a,b,c){var d=a("../jquery.js"),e=d.build,f=a("./fieldHelpers.js"),g={};b.exports=g,g.fieldType="textarea",g.newField=function(a,b){var c=a.Maxlength||2e3,d=e("textarea.mktoField",{id:a.Name,name:a.Name,placeholder:a.PlaceholderText,rows:Math.max(2,a.VisibleRows||2),title:a.Description,"aria-labelledby":[f.getLabelId(a.Name),f.getInstructionId(a.Name)].join(" ")});try{d.attr("maxlength",c)}catch(g){d.get(0).setAttribute("maxlength",""+c)}return{name:a.Name,elem:f.formatStandardField(d,a,b),val:function(a){return 0===arguments.length?d.val():(a&&a.length>c&&(a=a.substring(0,c)),d.val(a))},required:a.IsRequired,validatorElem:d,onChange:function(a){d.on("change",a)}}}},{"../jquery.js":45,"./fieldHelpers.js":29}],42:[function(a,b,c){var d=a("./jquery.js"),e=d.build,f=a("./validation.js"),g=a("./measure.js"),h=a("./fields/fieldhelpers.js"),j=h.cap,k=h.isSet,l=h.first,m=a("querystring"),n=a("url"),o=a("cookie"),p=a("./cookiehelper.js"),q=a("./tokenTemplate.js"),r=a("./changeManager.js"),s=a("./urlhelper.js"),t=a("./prefillcoercer.js"),u=a("./iframeproxy.js"),v=a("./safelog.js"),w=a("sha.js"),x=[a("./fields/inputRadio.js"),a("./fields/inputDate.js"),a("./fields/inputEmail.js"),a("./fields/inputCheckbox.js"),a("./fields/select.js"),a("./fields/inputRange.js"),a("./fields/inputText.js"),a("./fields/inputUrl.js"),a("./fields/inputTel.js"),a("./fields/inputNumber.js"),a("./fields/textarea.js"),a("./fields/currency.js")],y={};d.each(x,function(a,b){y[b.fieldType]=b}),y["int"]=y.number,y["double"]=y.number,y.single_checkbox=y.checkbox;var z=(a("./comparators.js"),navigator.userAgent.match(/msie ([6789])/i)),A=z?"ie"+z[1]:"",B=location.href,C=function(a,b,c){var x={},z={};z.hiddenFields={formid:a.Id},z.onSuccess=[],z.onSubmit=[],z.onValidate=[],z.values={},z.fieldsByName=h.getFieldsByName(h.getFlattenedFields(a)),z.changeMap=r.getChangeMap(z.fieldsByName,a),z.fieldElemsByName={},z.latestFieldsByName={},z.canSubmit="draft"!=a.Status&&!a.isPreview;var C=function(a){var b=z.changeMap[a]||[],c=!1,f={defaultValuesToSet:{},fieldsToCheck:[]};d.each(b,function(a,b){var g=z.fieldElemsByName[b];if(g&&g[0]&&d.contains(z.formElem[0],g[0])){var h,i,j=!g.hasClass("mktoPlaceholder"),k=z.fieldsByName[b],l=r.fieldChangeChecker(k.VisibilityRule,x.getValues()),m=l.show,n=function(a,c){var d=D(a,f),e=F(d),g=e.elem;return g.hide(),c.replaceWith(g),J()&&K(g),z.latestFieldsByName[b]=a,g},o=function(a,b){var c=e(".mktoPlaceholder.mktoPlaceholder"+a.Name);return b.replaceWith(c),c};j&&m&&(h=r.applyPicklistAlterations(k,l.rule),JSON.stringify(h)!==JSON.stringify(z.latestFieldsByName[b])&&(i=n(h,g),i.show(),c=!0)),j&&!m&&(i=o(k,g),z.fieldElemsByName[b]=i,f.fieldsToCheck.push(k)),!j&&m&&(h=r.applyPicklistAlterations(k,l.rule),i=n(h,g),i.show(),f.fieldsToCheck.push(k),c=!0),i&&(z.fieldElemsByName[b]=i),"fieldset"==k.Datatype&&C(k.Name),c&&i&&z.validation&&z.validation.initScoped(i)}}),x.setValues(f.defaultValuesToSet),d.each(f.fieldsToCheck,function(a,b){C(b.Name)}),c&&d("body").data("mktoRendered")&&d("body").trigger("mktoRender",x)},D=function(b,c){var f=z.values[b.Name]||b.DefaultValue||b.InputInitialValue;if(y[b.Datatype]){var g=y[b.Datatype].newField(b,a);if(g.validationMessage=g.validationMessage||b.ValidationMessage,g.requiredMessage=g.requiredMessage||b.RequiredMessage,g.required){if(!g.validatorElem)throw new Error("Required fields must have a validatorElem");g.validatorElem.addClass("mktoRequired"),"single_checkbox"!=b.Datatype&&"checkbox"!=b.Datatype&&"radio"!=b.Datatype&&g.validatorElem.attr("aria-required","true")}z.changeMap[b.Name]&&g.onChange(function(a){C(b.Name)}),k(f)&&(c.defaultValuesToSet[b.Name]=f);var h=e(".mktoFieldDescriptor",g.elem);return h.data("mktoFieldDescriptor",g),h}if("htmltext"==b.Datatype||"richtext"==b.Datatype)return e.docFrag([e(".mktoOffset.mktoHasWidth").css({width:l(b.OffsetWidth,a.OffsetWidth,0)}),e(".mktoFieldWrap",[e(".mktoHtmlText.mktoHasWidth",[e.html(b.Htmltext||b.InputLabel)]).css({width:l(b.LabelWidth,a.LabelWidth,0)}),e(".mktoClear")]),e(".mktoClear")]);if("hidden"==b.Datatype){var i=b.InputSourceChannel,j=b.InputSourceSelector,p=b.Name,q="";if("url"==i&&j){var r=m.parse(location.search.replace("?",""));q=r[j]||""}else if("cookie"==i&&j){var s=o.parse(document.cookie);q=s[j]}else if("referrer"==i&&j){var t=n.parse(document.referrer,!0);q=t.query[j]}return!q&&f&&(q=f),c.defaultValuesToSet[p]=q,H(q,p)}if("fieldset"==b.Datatype){var u=a.fieldsetRows[b.Id.toString()]||[];if(!u.length)return null;var w=e("fieldset",[e("legend",e.html(b.InputLabel)),d.map(u,function(a,b){return G(a,b,c)})]);return u.length&&u[0].length&&w.css({"padding-right":l(u[0][0].OffsetWidth,a.OffsetWidth,0)}),w}"profiling"!=b.Datatype&&v("invalid data type: "+b.Datatype)},E=function(b,c){var f=a.ProcessOptions,g=0;f&&f.profiling&&f.profiling.numberOfProfilingFields&&(g=f.profiling.numberOfProfilingFields);var h=b.ProfilingFieldNumber||g,i=a.fieldsetRows[b.Id.toString()]||[],j=[],l=0;return d.each(i,function(b,c){var e=[],f=[];a.filledFields&&(f=a.filledFields),d.each(c,function(a,b){!k(z.values[b.Name])&&-1==d.inArray(b.Name,f)&&h>l&&(e.push(b),l++)}),e.length>0&&j.push(e)}),e.docFrag(d.map(j,function(a,b){return G(a,b,c)}))},F=function(b){var c,d=0;return c=11==b.nodeType?e(".mktoFormCol",b):b.addClass("mktoFormCol"),d+=g.measure(c).w,c.css("margin-bottom",a.LineMargin||0),{elem:c,width:d}},G=function(a,b,c){var f=0;if(1==a.length&&"profiling"==a[0].Datatype)return E(a[0],c);var g=d.map(a,function(a,b){var d=D(a,c);if(!d)return null;var e=F(d);return f+=e.width,a.VisibilityRule&&"hidden"!=a.Datatype&&c.fieldsToCheck.push(a),z.fieldElemsByName[a.Name]=e.elem,e.elem});if(0===g.length)return null;var h=e(".mktoFormRow",[g,e(".mktoClear")]);return f>z.formWidth&&(z.formWidth=f),h},H=function(a,b){var c=e("input.mktoField.mktoFieldDescriptor",{type:"hidden",name:b}),f={name:b,val:d.proxy(c.val,c),onChange:function(a){c.on("change",a)}};return z.changeMap[b]&&f.onChange(function(a){C(field.Name)}),c.data("mktoFieldDescriptor",f),c},I=function(a,b){var c={},f=function(a,b){c[a]=b};x.setValues(b,f);var g=d.map(c,H);a.append(e.docFrag(g)),x.setValues(b)},J=function(){return window.matchMedia&&d("body.mktoMobileShow").length?window.matchMedia("only screen and (max-width:480px), only screen and (max-device-width:480px), only screen and (max-device-height:480px)").matches:d(window).width()<=480},K=function(a){var b=a.find(".mktoHasWidth").addBack();b.each(function(){var a=d(this);a.data("mktoFixedWidth",a.css("width")),a.css("width","")})},L=function(){if(z.formElem){d(window).width();z.hasRemovedWidths?J()||(z.formElem.find(".mktoHasWidth").addBack().each(function(){var a=d(this);a.css("width",a.data("mktoFixedWidth"))}),z.hasRemovedWidths=!1):J()&&(K(z.formElem),z.hasRemovedWidths=!0)}},M=function(b){var c=a.ButtonStyle||{className:""},d=a.ButtonText||a.SubmitLabel||"Submit",f=a.ButtonLocation||"",g=parseInt(f,10)||0,h=e("span.mktoButtonWrap",[e("button.mktoButton",{type:"submit"},[d])]).addClass(c.className).css({"margin-left":g+"px"});return h},N=function(){var b=a.ProcessOptions;if(!(b&&b.socialSignOn&&b.socialSignOn.isEnabled&&b.socialSignOn.enabledNetworks.length))return"";var c=b.socialSignOn.cfId+"_SocialSignOn",d=e(".cf_widgetLoader.cf_w_"+c);return window.cf_scripts&&window.CF?(setTimeout(function(){CF.widget.restart(c)},10),d):e.docFrag([e("script",{src:a.loaderJsUrl,type:"text/javascript"}),d])},O=function(c){c.addClass("mktoForm mktoHasWidth mktoLayout"+j(a.Layout||"left")+(b.csschecked?"":" mktoNoCheckedSupport")),A&&c.addClass(A)},P=function(a,b){var c=!0;return d.each(z.onSuccess,function(d,e){e(a,b)===!1&&(c=!1)}),c},Q=function(a){var b,c=a.__cdrop;return c&&(b=c.split("."),3==b.length)?b[2]:null},R=function(a){var b={};return d.each(a,function(a,c){d.isArray(c)&&c.length>1?b[a+"[]"]=c:b[a]=c}),b},S=function(){var a=location;return-1!=a.hostname.indexOf(c.fbTabDomain)&&-1!=a.search.indexOf("fbTab=1")},T=function(b){var c=S(),d="";if(b){var e=x.getValues().followupLpId>0;e||"string"!=typeof a.FormFollowup?b.followUpUrl&&"string"==typeof b.followUpUrl?d=b.followUpUrl:b.followUpUrl&&b.followUpUrl.url&&(c&&b.followUpUrl.isLandingPage?(d=s.remapLandingPageUrl(b.followUpUrl.url,location.href),d=s.addQueryParams(d,{fbTab:"1"})):d=b.followUpUrl.url):(d=a.FormFollowup,c&&0!==d.indexOf("https://")&&(d=s.remapLandingPageUrl(d,location.href),d=s.addQueryParams(d,{fbTab:"1"})))}return d=d||location.href,b.aliId&&(d=s.addQueryParams(d,{aliId:b.aliId})),d},U=function(){function e(a){return decodeURIComponent(escape(a))}function f(a,b,c){var d;if(a&&a.responseJSON)d=a.responseJSON;else if(a&&a.responseText)try{d=JSON.parse(a.responseText)}catch(e){d=c}else d=c;F(d)}var g=x.getValues();if(window.Munchkin)try{window.Munchkin.createTrackingCookie(!0)}catch(h){}var i=n.parse(B,!0).query,j=o.parse(document.cookie),k=n.parse(a.action).hostname,l=(k?"//"+k:"")+c.formSubmitPath;window.location;S()&&(l=c.formSubmitPath,k=location.hostname);var q="json",r="POST";void 0===g._mkt_trk&&(g._mkt_trk=j._mkto_trk),g.formVid=a.Vid,i.mkt_tok&&void 0===g.mkt_tok&&(g.mkt_tok=i.mkt_tok);var s=Q(j);s&&(g.MarketoSocialSyndicationId=s),g._mktoReferrer=B;var t=[],v=[],y=function(a){var b=0;d.each(a,function(a,c){b>=20||(t.push(c),v.push(a),b++)})};y(g),g.checksumFields=v.join(","),g.checksum=w("sha256").update(t.join("|")).digest("hex"),z.captchaToken&&(g.captchaToken=z.captchaToken);var A=m.stringify(R(g)),C=function(a){var b=T(a);!1!==P(g,b)&&(p.removeCookieAllDomains("_mkto_purl"),location.href=b)},D=function(a){if(a.error)F(a);else if(a.formId)if(a.followupStreamValue&&window.AdobeDX&&window.AdobeDX.conversationalForms){var b=x.getValues(),c={id:a.followupStreamValue,type:a.deliveryType||"popup"};b&&b.Email&&(c.content={form:{emailAddress:b.Email}}),a&&a.conversationalFieldAttributes&&d.each(a.conversationalFieldAttributes,function(a,b){c.content.form[a]=b});var e=window.AdobeDX.conversationalForms(c);if(e.registerCallback&&e.Enum&&e.Enum.Events&&e.Enum.Events.CONVERSATION_CLOSED&&e.Enum.CallbackType&&e.Enum.CallbackType.EVENT_LISTENER){var f=window.AdobeDX.addListener;f&&f(e.Enum.Events.CONVERSATION_CLOSED,function(b){C(a)})}}else C(a)},E=function(a){for(var b=[],c=a.length-1;c>=0;c--)b.unshift(["&#",a[c].charCodeAt(),";"].join(""));return b.join("")},F=function(b){var c=a.formSubmitFailedMsg||"Submission failed, please try again later.";"invalid"===b.errorType&&(b.invalidInputMsg&&(b.invalidInputMsg=e(b.invalidInputMsg)),c=b.invalidInputMsg||a.invalidInputMsg||"Invalid input");var d=!1;if(b&&b.errorFields&&b.errorFields.length){var f=b.errorFields[0];if(f){var g=z.fieldElemsByName[f];if(g){var h=g.data("mktoFieldDescriptor");h&&h.validatorElem&&(z.validation.showError(h.validatorElem,E(c)),d=!0)}}}if(z.submitButton){var i=z.submitButton.find("button");i.removeAttr("disabled"),i.html(a.ButtonText||a.SubmitLabel||"Submit"),d||z.validation.showError(i,c)}},G={type:r,data:A,dataType:q,url:l,success:D,error:F};k&&k!=location.hostname?b.postmessage&&b.json?u.send(G):(G.dataType="jsonp",G.submitUrl+="?callback=?",G.type="GET",G.error=f,d.ajax(G)):(G.error=f,d.ajax(G))},V=function(b){var c=function(b){if(z.submitButton){var c=z.submitButton.find("button");c.attr("disabled","disabled"),a.ButtonSubmissionText&&c.html(a.ButtonSubmissionText)}return U(),!1},e=x.validate();return z.canSubmit&&e&&z.onSubmit&&d.each(z.onSubmit,function(a,b){b(x)}),b.preventDefault(),z.canSubmit&&e?!a.EnableCaptcha||!a.Captcha||"disabled"===a.Captcha.provider||z.captchaToken&&""!==z.captchaToken?c(!0):("reCaptcha"==a.Captcha.provider&&grecaptcha.ready(function(){grecaptcha.execute(a.Captcha.siteKey,{action:"submit"}).then(function(a){return c(!0)})}),b.stopPropagation(),!1):(b.stopPropagation(),!1)},W=function(b){var c=a.ButtonStyle||{className:""},d=e("span.mktoButtonWrap",[e("button.mktoButton",{type:"submit"},[b["default"]||""])]).addClass(c.className);return d.click(function(a){V(a),a.preventDefault()}),d},X=function(a){return e("a.mktoNotYou",[a["default"]||"Not You?"]).click(function(){p.removeCookieAllDomains("_mkto_trk"),location.href=s.removeQueryParams(location.href,["mkt_tok","aliId"])})},Y=function(){var b=a.ProcessOptions.knownLead.template;b=b.replace(/\{\[\((.*?)\)\]\}/g,"{{$1}}");var c={},f=0,g=function(a){return function(){var b=a.apply(null,arguments);if(b.jquery||b.nodeType){var d="__tempSwap"+f;return f++,c[d]=b,""}return b}},h=function(a){return d.each(a,function(b,c){a[b]=d("
").text(a[b]).html()}),a},i={lead:h(a.knownLead),form:{Button:g(W),NotYou:g(X)}},j=e("div.mktoTemplateBox",e.html(q(b,i)));return d.each(c,function(a,b){j.find("#"+a).replaceWith(b)}),j};x.render=function(b){z.id=a.Vid||a.Id||1,b||(b=d("form#mktoForm_"+(a.Vid||a.Id))),b.length||(b=e("form#mktoForm_"+(a.Vid||a.Id))),z.formElem=b,b.attr({novalidate:"novalidate"}),b.css({"font-family":a.FontFamily||"","font-size":a.FontSize||"",color:a.FontColor||""}),O(b),g.init(z.formElem),z.formWidth=0;var c={defaultValuesToSet:{},fieldsToCheck:[]},h=d.map(a.rows,function(a,b){return G(a,b,c)}),j=N();d.each(c.fieldsToCheck,function(a,b){if(!r.fieldChangeChecker(b.VisibilityRule,c.defaultValuesToSet).show){var d=e(".mktoPlaceholder.mktoPlaceholder"+b.Name),f=z.fieldElemsByName[b.Name];f&&(f.replaceWith(d),z.fieldElemsByName[b.Name]=d)}});var k="",l=a.ButtonStyle;if(l&&(l.css&&(k+=l.css),l.buttonColor&&(k+="\n.mktoForm .mktoButtonWrap."+l.className+" button.mktoButton {background:"+l.buttonColor+";}\n")),b.append(e("style",{type:"text/css"},k)),a.knownLead&&a.ProcessOptions&&a.ProcessOptions.knownLead&&"custom"==a.ProcessOptions.knownLead.type){b.append(Y());var m=[];if(a.EnableCaptcha&&a.Captcha&&"disabled"!==a.Captcha.provider){var n=addCaptchaScript(b,a);n&&n.forEach(function(a){m.push(a)})}b.append(e.docFrag(m))}else{var o=[j,h],p=e(".mktoButtonRow",[z.submitButton=M(b)]);if(a.EnableCaptcha&&a.Captcha&&"disabled"!==a.Captcha.provider){var q=addCaptchaScript(b,a,p);q&&q.forEach(function(a){o.push(a)})}if(o.push(p),a.dcJsUrl){var s=e("div");s.append(''),o.push(s)}if(b.append(e.docFrag(o)),a.removeDuplicateLabelId){var t=b.find('input[type="checkbox"]').next("label");for(i=0;i0)for(var c=0;c';j+="var formId = "+b.Vid+";",j+="var captchaCallback = "+g+";",j+="",i.append(j),"reCaptcha"==b.Captcha.provider&&(c["data-size"]="invisible");var k="";"reCaptcha"==b.Captcha.provider&&(k=e("div.mktoCaptchaDisclaimer"),k.append('This site is protected by reCAPTCHA and the Google\n Privacy Policy and Terms of Service apply.'));var l=e("
",c);return[h,i,l,k]};var Z=function(a){var b=a.find(".mktoFormRow, .mktoFormCol"),c=b.length;b.each(function(){d(this).css("z-index",c--)}),a.css("z-index",b.length+1)};x.getId=function(){return z.id},x.getFormElem=function(){return z.formElem},x.getElem=x.getFormElem(),x.validate=function(){var a=z.validation.check();return d.each(z.onValidate,function(b,c){c(a)}),a},x.onValidate=function(a){return a?z.onValidate.push(a):z.onValidate=[],x},x.offValidate=function(a){return z.onValidate=z.onValidate.filter(function(b){return b!==a}),x},x.submit=function(a){if(a&&"function"==typeof a){var b=function(){x.offSuccess(b),a.apply(null,arguments)};z.onSuccess.push(b)}return z.formElem.trigger("submit"),x},x.onSubmit=function(a){return a?z.onSubmit.push(a):z.onSubmit=[],x},x.offSubmit=function(a){return z.onSubmit=z.onSubmit.filter(function(b){return b!==a}),x},x.onSuccess=function(a){return a?z.onSuccess.push(a):z.onSuccess=[],x},x.offSuccess=function(a){return z.onSuccess=z.onSuccess.filter(function(b){return b!==a}),x},x.submitable=function(a){return arguments.length?(z.canSubmit=a,x):z.canSubmit},x.submittable=x.submitable,x.allFieldsFilled=function(){var a=x.getValues(),b=!0;return d.each(a,function(a,c){d.isArray(c)&&0===c.length?b=!1:(void 0===c||null===c||""===c)&&(b=!1)}),b};var $=function(){var a={};return z.formElem.find(".mktoFieldDescriptor").each(function(b,c){var e=d(c),f=e.data("mktoFieldDescriptor");a[f.name]=f.val}),a};return x.setValuesCoerced=function(b){var c=t.coerceTypes(b,a);x.setValues(c)},x.setValues=function(a,b){if(z.formElem){var c=[],e=$();d.each(a,function(a,d){e[a]?e[a](d):b&&b(a,d),z.changeMap[a]&&c.push(a)}),d.each(c,function(b,c){C(c);var e=$();d.each(z.changeMap[c],function(b,c){e[c]&&void 0!==a[c]&&e[c](a[c])})})}else z.values=a;return x},x.setCaptchaValue=function(a){if(z&&(z.captchaToken=a,z.submitButton)){var b=z.submitButton.find("button");b.removeAttr("disabled")}},x.setCaptchaExpired=function(){if(z&&(z.captchaToken="",z.submitButton)){var a=z.submitButton.find("button");a.attr("disabled","disabled")}},x.addHiddenFields=function(a){z.formElem?I(z.formElem,a):d.extend(z.hiddenFields,a)},x.getValues=function(){if(z.formElem){var a={},b=$();return d.each(b,function(b,c){var d=c();a[b]=d}),a}return z.values},x.vals=function(){return 0===arguments.length?x.getValues():x.setValues.apply(null,arguments)},x.showErrorMessage=function(a,b){return z.validation&&(b||(b=z.submitButton),z.validation.showError(b,a)),x},x.setErrorMessages=function(a){d.each(a,function(a,b){if(z.fieldsByName[a].ValidationMessage=b,z.formElem){var c=z.fieldElemsByName[a];if(c){var d=c.data("mktoFieldDescriptor");d&&(d.validationMessage=b,c.data("mktoFieldDescriptor",d))}}})},x};b.exports=C},{"./changeManager.js":24,"./comparators.js":26,"./cookiehelper.js":27,"./fields/currency.js":28,"./fields/fieldhelpers.js":30,"./fields/inputCheckbox.js":31,"./fields/inputDate.js":32,"./fields/inputEmail.js":33,"./fields/inputNumber.js":34,"./fields/inputRadio.js":35,"./fields/inputRange.js":36,"./fields/inputTel.js":37,"./fields/inputText.js":38,"./fields/inputUrl.js":39,"./fields/select.js":40,"./fields/textarea.js":41,"./iframeproxy.js":44,"./jquery.js":45,"./measure.js":46,"./prefillcoercer.js":49,"./safelog.js":50,"./tokenTemplate.js":52,"./urlhelper.js":53,"./validation.js":54,cookie:4,querystring:13,"sha.js":16,url:23}],43:[function(a,b,c){if("undefined"!=typeof window&&window.MktoForms2)return void(b.exports=window.MktoForms2);var d=a("./jquery.js");d.noConflict();var e=a("jquery.build")(d,document),f=a("./form.js");a("./shimsham.js");var g={};g.$=d,g.$b=e,g.Modernizr=a("./modernizr.js");var h=g.Modernizr,i=a("querystring"),j=a("./fields/fieldhelpers.js"),k=a("cookie"),l=a("events"),m=new l.EventEmitter,n=a("url"),o=a("./iframeproxy.js"),p=a("./color.js"),q=a("./safelog.js"),r=!0,s={rootUrl:"",baseUrl:"/js/forms2/",skipPolyfills:!1,formSubmitPath:"/index.php/leadCapture/save2",formXDPath:"/index.php/form/XDFrame",fbTabDomain:"marketo.com"},t=[];g.setOptions=function(a){d.extend(s,a)};var u=function(a){var b=e("#mktoStyleLoaded").css({display:"none","border-top-color":"#123456"}).appendTo(d("body")),c=0,f=1500,g=25,h=function(){var d=b.css("color"),e=b.css("background-color"),i=b.css("border-top-color");c>f/g?(q("Timeout loading CSS. #mktoStyleLoaded missing color #123456 for one of color, background-color, or border-top-color.",d,e,i),a()):p.compareColor(i,e)&&p.compareColor(i,d)?z(a):(c++,setTimeout(h,g))};h()},v=function(a,b){0===b.indexOf("//")&&(b=location.protocol+b);var c=e("link",{id:a,rel:"stylesheet",type:"text/css",href:b});d("head").append(c),document.createStyleSheet&&document.createStyleSheet(b)},w=function(a,b){window.console&&console.log("Error loading form:",a),b&&b(null)},x=function(a){return 0===a.indexOf("/")&&0!==a.indexOf("//")},y=function(a,b){var c="json";x(a)||(c="jsonp",a+="&callback=?"),d.ajax({dataType:c,url:a,success:b,error:function(a,c,d){w(d,b)}})};g.loadForm=function(a,b,c,d){g.setOptions({rootUrl:a,baseUrl:a+"/js/forms2/"});var e=function(c){r=!1,c.action=(0===a.indexOf("http")?a:location.protocol+a)+s.formSubmitPath,g.newForm(c,function(a){a.addHiddenFields({munchkinId:b}),a.render(),d&&d(a)})},f=location.href.split("?")[0].split("#")[0];f.length>255&&(f=f.substring(0,255));var h=a+"/index.php/form/getForm?munchkinId="+b+"&form="+c+"&url="+encodeURIComponent(f);return y(h,function(a){a.error?w(a,d):e(a)}),g},g.lightbox=function(b,c){var d,e;return c=c||{},b.getFormElem?(b.getFormElem()||b.render(),d=b.getFormElem(),b.onSuccess(c.onSuccess||function(a,b){return e.hide(),b?void 0:!1})):d=b,e=a("./modal.js")(d,c)};var z=function(a){setTimeout(a,0)},A=function(a,b,c,e,f){if(window.mktoPreFillFields&&mktoPreFillFields.FirstName&&mktoPreFillFields.LastName)return void z(function(){e(mktoPreFillFields)});var g=k.parse(document.cookie),h=i.parse(location.search.replace("?","")),j=s.rootUrl+"/index.php/form/getKnownLead?";if(g._mkto_trk||h.mkt_tok){var l={form:a,lpId:f,munchkinId:b,filledFields:c};return g._mkto_trk&&(l._mkt_trk=g._mkto_trk),h.mkt_tok&&(l.mkt_tok=h.mkt_tok),j+=i.stringify(l),void y(j,function(a){a&&a.error?w(a,e):(window.mktoPreFillFields&&(a=d.extend({},window.mktoPrefillFields,a)),e(a))})}z(e)};g.newForm=function(a,b){!r||a.isPreview||a.isFormTheme?g.processForm(a,b):g.getLatestFormDescriptor(a,b)},g.getLatestFormDescriptor=function(a,b){var c=function(a){console.log("Error loading form : ",a)},e=function(c){return c.Captcha?a.Captcha=c.Captcha:delete a.Captcha,g.processForm(a,b)},f=function(a,b){d.ajax({dataType:"json",url:a,success:b,error:function(a,d,e){c(e,b)}})},h=location.hostname,i=a.munchkinId,j=a.Id;if(i&&j){var k=h+"/index.php/form/getForm?munchkinId="+i+"&form="+j;k=0===k.indexOf("http")?k:location.protocol+"//"+k,f(k,function(a){a.error?c(a,b):e(a)})}},g.processForm=function(a,b){if(0===d("#mktoForms2BaseStyle").length){var c=s.baseUrl+"css/forms2.css";v("mktoForms2BaseStyle",c)}0===d("#mktoForms2ThemeStyle").length&&a.ThemeStyle&&a.ThemeStyle.href?v("mktoForms2ThemeStyle",s.baseUrl+a.ThemeStyle.href):d("head").append(e("style","#mktoStyleLoaded {color:#123456;}")),a.FontUrl&&v("mktoFontUrl",a.FontUrl),a.ThemeStyleOverride&&d("head").append(e("style",a.ThemeStyleOverride)),g._polyfillsLoaded||(C(a),g._polyfillsLoaded=!0);var i=a.ProcessOptions,j=0,k=function(){var a=location;return-1!=a.hostname.indexOf(s.fbTabDomain)&&-1!=a.search.indexOf("fbTab=1")},l=function(){return-1!=location.hostname.indexOf(".marketodesigner.com")},p=function(){if(j--,0>=j){var c=f(a,h,s);t.push(c),b&&b(c),z(function(){if(a.action&&!k()&&!l()){var b=n.parse(a.action).hostname;b&&b!=location.hostname&&h.postmessage&&h.json&&o.init("//"+b+s.formXDPath)}}),z(function(){m.emit("mktoFormReady",c)})}},q=i&&i.profiling&&i.profiling.isEnabled,r=i&&i.knownLead&&"custom"==i.knownLead.type&&a.munchkinId;(r||q)&&(j++,A(a.Vid,a.munchkinId,q,function(b){b&&(a.filledFields=b.filledFields,b.FirstName&&b.LastName&&(a.knownLead=b)),p()},a.lpId)),j++,u(p)},g.getForm=function(a){for(var b=0;b0&&b-1 in a}function f(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}function g(a,b){return b?"\x00"===a?"ïÂŋÂŊ":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a}function h(a,b,c){return sa(b)?ya.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?ya.grep(a,function(a){return a===b!==c}):"string"!=typeof b?ya.grep(a,function(a){return la.call(b,a)>-1!==c}):ya.filter(b,a,c)}function i(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function j(a){var b={};return ya.each(a.match(Qa)||[],function(a,c){b[c]=!0}),b}function k(a){return a}function l(a){throw a}function m(a,b,c,d){var e;try{a&&sa(e=a.promise)?e.call(a).done(b).fail(c):a&&sa(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}function n(){ua.removeEventListener("DOMContentLoaded",n),a.removeEventListener("load",n),ya.ready()}function o(a,b){return b.toUpperCase()}function p(a){return a.replace(Ua,"ms-").replace(Va,o)}function q(){this.expando=ya.expando+q.uid++}function r(a){return"true"===a?!0:"false"===a?!1:"null"===a?null:a===+a+""?+a:Za.test(a)?JSON.parse(a):a}function s(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace($a,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=r(c)}catch(e){}Ya.set(a,b,c)}else c=void 0;return c}function t(a,b,c,d){var e,f,g=20,h=d?function(){return d.cur()}:function(){return ya.css(a,b,"")},i=h(),j=c&&c[3]||(ya.cssNumber[b]?"":"px"),k=a.nodeType&&(ya.cssNumber[b]||"px"!==j&&+i)&&ab.exec(ya.css(a,b));if(k&&k[3]!==j){for(i/=2,j=j||k[3],k=+i||1;g--;)ya.style(a,b,k+j),(1-f)*(1-(f=h()/i||.5))<=0&&(g=0),k/=f;k=2*k,ya.style(a,b,k+j),c=c||[]}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}function u(a){var b,c=a.ownerDocument,d=a.nodeName,e=gb[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=ya.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),gb[d]=e,e)}function v(a,b){for(var c,d,e=[],f=0,g=a.length;g>f;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=Xa.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&fb(d)&&(e[f]=u(d))):"none"!==c&&(e[f]="none",Xa.set(d,"display",c)));for(f=0;g>f;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}function w(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&f(a,b)?ya.merge([a],c):c}function x(a,b){for(var c=0,d=a.length;d>c;c++)Xa.set(a[c],"globalEval",!b||Xa.get(b[c],"globalEval"))}function y(a,b,c,e,f){for(var g,h,i,j,k,l,m=b.createDocumentFragment(),n=[],o=0,p=a.length;p>o;o++)if(g=a[o],g||0===g)if("object"===d(g))ya.merge(n,g.nodeType?[g]:g);else if(lb.test(g)){for(h=h||m.appendChild(b.createElement("div")),i=(ib.exec(g)||["",""])[1].toLowerCase(),j=kb[i]||kb._default,h.innerHTML=j[1]+ya.htmlPrefilter(g)+j[2],l=j[0];l--;)h=h.lastChild;ya.merge(n,h.childNodes),h=m.firstChild,h.textContent=""}else n.push(b.createTextNode(g));for(m.textContent="",o=0;g=n[o++];)if(e&&ya.inArray(g,e)>-1)f&&f.push(g);else if(k=db(g),h=w(m.appendChild(g),"script"),k&&x(h),c)for(l=0;g=h[l++];)jb.test(g.type||"")&&c.push(g);return m}function z(){return!0}function A(){return!1}function B(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)B(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=A;else if(!e)return a;return 1===f&&(g=e,e=function(a){return ya().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=ya.guid++)),a.each(function(){ya.event.add(this,b,e,d,c)})}function C(a,b,c){return c?(Xa.set(a,b,!1),void ya.event.add(a,b,{namespace:!1,handler:function(a){var c,d=Xa.get(this,b);if(1&a.isTrigger&&this[b]){if(d)(ya.event.special[b]||{}).delegateType&&a.stopPropagation();else if(d=ia.call(arguments),Xa.set(this,b,d),this[b](),c=Xa.get(this,b),Xa.set(this,b,!1),d!==c)return a.stopImmediatePropagation(),a.preventDefault(),c}else d&&(Xa.set(this,b,ya.event.trigger(d[0],d.slice(1),this)),a.stopPropagation(),a.isImmediatePropagationStopped=z)}})):void(void 0===Xa.get(a,b)&&ya.event.add(a,b,z))}function D(a,b){return f(a,"table")&&f(11!==b.nodeType?b:b.firstChild,"tr")?ya(a).children("tbody")[0]||a:a}function E(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function F(a){return"true/"===(a.type||"").slice(0,5)?a.type=a.type.slice(5):a.removeAttribute("type"),a}function G(a,b){var c,d,e,f,g,h,i;if(1===b.nodeType){if(Xa.hasData(a)&&(f=Xa.get(a),i=f.events)){Xa.remove(b,"handle events");for(e in i)for(c=0,d=i[e].length;d>c;c++)ya.event.add(b,e,i[e][c])}Ya.hasData(a)&&(g=Ya.access(a),h=ya.extend({},g),Ya.set(b,h))}}function H(a,b){var c=b.nodeName.toLowerCase();"input"===c&&hb.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function I(a,b,d,e){b=ja(b);var f,g,h,i,j,k,l=0,m=a.length,n=m-1,o=b[0],p=sa(o);if(p||m>1&&"string"==typeof o&&!ra.checkClone&&ob.test(o))return a.each(function(c){var f=a.eq(c);p&&(b[0]=o.call(this,c,f.html())),I(f,b,d,e)});if(m&&(f=y(b,a[0].ownerDocument,!1,a,e),g=f.firstChild,1===f.childNodes.length&&(f=g),g||e)){for(h=ya.map(w(f,"script"),E),i=h.length;m>l;l++)j=f,l!==n&&(j=ya.clone(j,!0,!0),i&&ya.merge(h,w(j,"script"))),d.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,ya.map(h,F),l=0;i>l;l++)j=h[l],jb.test(j.type||"")&&!Xa.access(j,"globalEval")&&ya.contains(k,j)&&(j.src&&"module"!==(j.type||"").toLowerCase()?ya._evalUrl&&!j.noModule&&ya._evalUrl(j.src,{nonce:j.nonce||j.getAttribute("nonce")},k):c(j.textContent.replace(pb,""),j,k))}return a}function J(a,b,c){for(var d,e=b?ya.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||ya.cleanData(w(d)),d.parentNode&&(c&&db(d)&&x(w(d,"script")),d.parentNode.removeChild(d));return a}function K(a,b,c){var d,e,f,g,h=rb.test(b),i=a.style;return c=c||sb(a),c&&(g=c.getPropertyValue(b)||c[b],h&&g&&(g=g.replace(Da,"$1")||void 0),""!==g||db(a)||(g=ya.style(a,b)),!ra.pixelBoxStyles()&&qb.test(g)&&ub.test(b)&&(d=i.width,e=i.minWidth,f=i.maxWidth,i.minWidth=i.maxWidth=i.width=g,g=c.width,i.width=d,i.minWidth=e,i.maxWidth=f)),void 0!==g?g+"":g}function L(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}function M(a){for(var b=a[0].toUpperCase()+a.slice(1),c=vb.length;c--;)if(a=vb[c]+b,a in wb)return a}function N(a){var b=ya.cssProps[a]||xb[a];return b?b:a in wb?a:xb[a]=M(a)||a}function O(a,b,c){var d=ab.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function P(a,b,c,d,e,f){var g="width"===b?1:0,h=0,i=0,j=0;if(c===(d?"border":"content"))return 0;for(;4>g;g+=2)"margin"===c&&(j+=ya.css(a,c+bb[g],!0,e)),d?("content"===c&&(i-=ya.css(a,"padding"+bb[g],!0,e)),"margin"!==c&&(i-=ya.css(a,"border"+bb[g]+"Width",!0,e))):(i+=ya.css(a,"padding"+bb[g],!0,e),"padding"!==c?i+=ya.css(a,"border"+bb[g]+"Width",!0,e):h+=ya.css(a,"border"+bb[g]+"Width",!0,e));return!d&&f>=0&&(i+=Math.max(0,Math.ceil(a["offset"+b[0].toUpperCase()+b.slice(1)]-f-i-h-.5))||0),i+j}function Q(a,b,c){var d=sb(a),e=!ra.boxSizingReliable()||c,g=e&&"border-box"===ya.css(a,"boxSizing",!1,d),h=g,i=K(a,b,d),j="offset"+b[0].toUpperCase()+b.slice(1);if(qb.test(i)){if(!c)return i;i="auto"}return(!ra.boxSizingReliable()&&g||!ra.reliableTrDimensions()&&f(a,"tr")||"auto"===i||!parseFloat(i)&&"inline"===ya.css(a,"display",!1,d))&&a.getClientRects().length&&(g="border-box"===ya.css(a,"boxSizing",!1,d),h=j in a,h&&(i=a[j])),i=parseFloat(i)||0,i+P(a,b,c||(g?"border":"content"),h,d,i)+"px"}function R(a,b,c,d,e){return new R.prototype.init(a,b,c,d,e)}function S(){Cb&&(ua.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(S):a.setTimeout(S,ya.fx.interval),ya.fx.tick())}function T(){return a.setTimeout(function(){Bb=void 0}),Bb=Date.now()}function U(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=bb[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function V(a,b,c){for(var d,e=(Y.tweeners[b]||[]).concat(Y.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function W(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&fb(a),q=Xa.get(a,"fxshow");c.queue||(g=ya._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,ya.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],Db.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||ya.style(a,d)}if(i=!ya.isEmptyObject(b),i||!ya.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=Xa.get(a,"display")),k=ya.css(a,"display"),"none"===k&&(j?k=j:(v([a],!0),j=a.style.display||j,k=ya.css(a,"display"),v([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===ya.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=Xa.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&v([a],!0),m.done(function(){p||v([a]),Xa.remove(a,"fxshow");for(d in n)ya.style(a,d,n[d])})),i=V(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function X(a,b){var c,d,e,f,g;for(c in a)if(d=p(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=ya.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Y(a,b,c){var d,e,f=0,g=Y.prefilters.length,h=ya.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Bb||T(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:ya.extend({},b),opts:ya.extend(!0,{specialEasing:{},easing:ya.easing._default},c),originalProperties:b,originalOptions:c,startTime:Bb||T(),duration:c.duration,tweens:[],createTween:function(b,c){var d=ya.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(X(k,j.opts.specialEasing);g>f;f++)if(d=Y.prefilters[f].call(j,a,k,j.opts))return sa(d.stop)&&(ya._queueHooks(j.elem,j.opts.queue).stop=d.stop.bind(d)),d;return ya.map(k,V,j),sa(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),ya.fx.timer(ya.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}function Z(a){var b=a.match(Qa)||[];return b.join(" ")}function $(a){return a.getAttribute&&a.getAttribute("class")||""}function _(a){return Array.isArray(a)?a:"string"==typeof a?a.match(Qa)||[]:[]}function aa(a,b,c,e){var f;if(Array.isArray(b))ya.each(b,function(b,d){c||Pb.test(a)?e(a,d):aa(a+"["+("object"==typeof d&&null!=d?b:"")+"]",d,c,e)});else if(c||"object"!==d(b))e(a,b);else for(f in b)aa(a+"["+f+"]",b[f],c,e)}function ba(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(Qa)||[];if(sa(c))for(;d=f[e++];)"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function ca(a,b,c,d){function e(h){var i;return f[h]=!0,ya.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||g||f[j]?g?!(i=j):void 0:(b.dataTypes.unshift(j),e(j),!1)}),i}var f={},g=a===_b;return e(b.dataTypes[0])||!f["*"]&&e("*")}function da(a,b){var c,d,e=ya.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&ya.extend(!0,a,d),a}function ea(a,b,c){for(var d,e,f,g,h=a.contents,i=a.dataTypes;"*"===i[0];)i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function fa(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];for(f=k.shift();f;)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}var ga=[],ha=Object.getPrototypeOf,ia=ga.slice,ja=ga.flat?function(a){return ga.flat.call(a)}:function(a){return ga.concat.apply([],a)},ka=ga.push,la=ga.indexOf,ma={},na=ma.toString,oa=ma.hasOwnProperty,pa=oa.toString,qa=pa.call(Object),ra={},sa=function(a){return"function"==typeof a&&"number"!=typeof a.nodeType&&"function"!=typeof a.item},ta=function(a){return null!=a&&a===a.window},ua=a.document,va={type:!0,src:!0,nonce:!0,noModule:!0},wa="3.7.1",xa=/HTML$/i,ya=function(a,b){return new ya.fn.init(a,b)};ya.fn=ya.prototype={jquery:wa,constructor:ya,length:0,toArray:function(){return ia.call(this)},get:function(a){return null==a?ia.call(this):0>a?this[a+this.length]:this[a]},pushStack:function(a){var b=ya.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return ya.each(this,a)},map:function(a){return this.pushStack(ya.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(ia.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ya.grep(this,function(a,b){return(b+1)%2}))},odd:function(){return this.pushStack(ya.grep(this,function(a,b){return b%2}))},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:ka,sort:ga.sort,splice:ga.splice},ya.extend=ya.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||sa(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)d=a[b],"__proto__"!==b&&g!==d&&(j&&d&&(ya.isPlainObject(d)||(e=Array.isArray(d)))?(c=g[b],f=e&&!Array.isArray(c)?[]:e||ya.isPlainObject(c)?c:{},e=!1,g[b]=ya.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},ya.extend({expando:"jQuery"+(wa+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isPlainObject:function(a){var b,c;return a&&"[object Object]"===na.call(a)?(b=ha(a))?(c=oa.call(b,"constructor")&&b.constructor,"function"==typeof c&&pa.call(c)===qa):!0:!1},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},globalEval:function(a,b,d){c(a,{nonce:b&&b.nonce},d)},each:function(a,b){var c,d=0;if(e(a))for(c=a.length;c>d&&b.call(a[d],d,a[d])!==!1;d++);else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},text:function(a){var b,c="",d=0,e=a.nodeType;if(!e)for(;b=a[d++];)c+=ya.text(b);return 1===e||11===e?a.textContent:9===e?a.documentElement.textContent:3===e||4===e?a.nodeValue:c},makeArray:function(a,b){var c=b||[];return null!=a&&(e(Object(a))?ya.merge(c,"string"==typeof a?[a]:a):ka.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:la.call(b,a,c)},isXMLDoc:function(a){var b=a&&a.namespaceURI,c=a&&(a.ownerDocument||a).documentElement;return!xa.test(b||c&&c.nodeName||"HTML")},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f,g=0,h=[];if(e(a))for(d=a.length;d>g;g++)f=b(a[g],g,c),null!=f&&h.push(f);else for(g in a)f=b(a[g],g,c),null!=f&&h.push(f);return ja(h)},guid:1,support:ra}),"function"==typeof Symbol&&(ya.fn[Symbol.iterator]=ga[Symbol.iterator]),ya.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){ma["[object "+b+"]"]=b.toLowerCase()});var za=ga.pop,Aa=ga.sort,Ba=ga.splice,Ca="[\\x20\\t\\r\\n\\f]",Da=new RegExp("^"+Ca+"+|((?:^|[^\\\\])(?:\\\\.)*)"+Ca+"+$","g");ya.contains=function(a,b){var c=b&&b.parentNode;return a===c||!(!c||1!==c.nodeType||!(a.contains?a.contains(c):a.compareDocumentPosition&&16&a.compareDocumentPosition(c)))};var Ea=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;ya.escapeSelector=function(a){return(a+"").replace(Ea,g)};var Fa=ua,Ga=ka;!function(){function b(){try{return E.activeElement}catch(a){}}function c(a,b,d,e){var f,g,h,i,j,k,n,q=b&&b.ownerDocument,r=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==r&&9!==r&&11!==r)return d;if(!e&&(m(b),b=b||E,G)){if(11!==r&&(j=da.exec(a)))if(f=j[1]){if(9===r){if(!(h=b.getElementById(f)))return d;if(h.id===f)return J.call(d,h),d}else if(q&&(h=q.getElementById(f))&&c.contains(b,h)&&h.id===f)return J.call(d,h),d}else{if(j[2])return J.apply(d,b.getElementsByTagName(a)),d;if((f=j[3])&&b.getElementsByClassName)return J.apply(d,b.getElementsByClassName(f)),d}if(!(Q[a+" "]||H&&H.test(a))){if(n=a,q=b,1===r&&(Z.test(a)||Y.test(a))){for(q=ea.test(a)&&l(b.parentNode)||b,q==b&&ra.scope||((i=b.getAttribute("id"))?i=ya.escapeSelector(i):b.setAttribute("id",i=K)),k=o(a),g=k.length;g--;)k[g]=(i?"#"+i:":scope")+" "+p(k[g]);n=k.join(",")}try{return J.apply(d,q.querySelectorAll(n)),d}catch(s){Q(a,!0)}finally{i===K&&b.removeAttribute("id")}}}return y(a.replace(Da,"$1"),b,d,e)}function d(){function a(c,d){return b.push(c+" ")>A.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function e(a){return a[K]=!0,a}function g(a){var b=E.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function h(a){return function(b){return f(b,"input")&&b.type===a}}function i(a){return function(b){return(f(b,"input")||f(b,"button"))&&b.type===a}}function j(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ka(b)===a:b.disabled===a:"label"in b?b.disabled===a:!1}}function k(a){return e(function(b){return b=+b,e(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function l(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}function m(a){var b,d=a?a.ownerDocument||a:Fa;return d!=E&&9===d.nodeType&&d.documentElement?(E=d,F=E.documentElement,G=!ya.isXMLDoc(E),I=F.matches||F.webkitMatchesSelector||F.msMatchesSelector,F.msMatchesSelector&&Fa!=E&&(b=E.defaultView)&&b.top!==b&&b.addEventListener("unload",ja),ra.getById=g(function(a){return F.appendChild(a).id=ya.expando,!E.getElementsByName||!E.getElementsByName(ya.expando).length}),ra.disconnectedMatch=g(function(a){return I.call(a,"*")}),ra.scope=g(function(){return E.querySelectorAll(":scope")}),ra.cssHas=g(function(){try{return E.querySelector(":has(*,:jqfake)"),!1}catch(a){return!0}}),ra.getById?(A.filter.ID=function(a){var b=a.replace(fa,ha);return function(a){return a.getAttribute("id")===b}},A.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&G){var c=b.getElementById(a);return c?[c]:[]}}):(A.filter.ID=function(a){var b=a.replace(fa,ha);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},A.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&G){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];for(e=b.getElementsByName(a),d=0;f=e[d++];)if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),A.find.TAG=function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):b.querySelectorAll(a)},A.find.CLASS=function(a,b){return"undefined"!=typeof b.getElementsByClassName&&G?b.getElementsByClassName(a):void 0},H=[],g(function(a){var b;F.appendChild(a).innerHTML="",a.querySelectorAll("[selected]").length||H.push("\\["+Ca+"*(?:value|"+S+")"),a.querySelectorAll("[id~="+K+"-]").length||H.push("~="),a.querySelectorAll("a#"+K+"+*").length||H.push(".#.+[+~]"),a.querySelectorAll(":checked").length||H.push(":checked"),b=E.createElement("input"),b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),F.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&H.push(":enabled",":disabled"),b=E.createElement("input"),b.setAttribute("name",""),a.appendChild(b),a.querySelectorAll("[name='']").length||H.push("\\["+Ca+"*name"+Ca+"*="+Ca+"*(?:''|\"\")")}),ra.cssHas||H.push(":has"),H=H.length&&new RegExp(H.join("|")),R=function(a,b){if(a===b)return D=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)==(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!ra.sortDetached&&b.compareDocumentPosition(a)===d?a===E||a.ownerDocument==Fa&&c.contains(Fa,a)?-1:b===E||b.ownerDocument==Fa&&c.contains(Fa,b)?1:C?la.call(C,a)-la.call(C,b):0:4&d?-1:1)},E):E}function n(){}function o(a,b){var d,e,f,g,h,i,j,k=O[a+" "];if(k)return b?0:k.slice(0);for(h=a,i=[],j=A.preFilter;h;){(!d||(e=X.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),d=!1,(e=Y.exec(h))&&(d=e.shift(),f.push({value:d,type:e[0].replace(Da," ")}),h=h.slice(d.length));for(g in A.filter)!(e=aa[g].exec(h))||j[g]&&!(e=j[g](e))||(d=e.shift(),f.push({value:d,type:g,matches:e}),h=h.slice(d.length));if(!d)break}return b?h.length:h?c.error(a):O(a,i).slice(0)}function p(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function q(a,b,c){var d=b.dir,e=b.next,g=e||d,h=c&&"parentNode"===g,i=M++;return b.first?function(b,c,e){for(;b=b[d];)if(1===b.nodeType||h)return a(b,c,e);return!1}:function(b,c,j){var k,l,m=[L,i];if(j){for(;b=b[d];)if((1===b.nodeType||h)&&a(b,c,j))return!0}else for(;b=b[d];)if(1===b.nodeType||h)if(l=b[K]||(b[K]={}),e&&f(b,e))b=b[d]||b;else{if((k=l[g])&&k[0]===L&&k[1]===i)return m[2]=k[2];if(l[g]=m,m[2]=a(b,c,j))return!0}return!1}}function r(a){return a.length>1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function s(a,b,d){for(var e=0,f=b.length;f>e;e++)c(a,b[e],d);return d}function t(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function u(a,b,c,d,f,g){return d&&!d[K]&&(d=u(d)),f&&!f[K]&&(f=u(f,g)),e(function(e,g,h,i){var j,k,l,m,n=[],o=[],p=g.length,q=e||s(b||"*",h.nodeType?[h]:h,[]),r=!a||!e&&b?q:t(q,n,a,h,i);if(c?(m=f||(e?a:p||d)?[]:g,c(r,m,h,i)):m=r,d)for(j=t(m,o),d(j,[],h,i),k=j.length;k--;)(l=j[k])&&(m[o[k]]=!(r[o[k]]=l));if(e){if(f||a){if(f){for(j=[],k=m.length;k--;)(l=m[k])&&j.push(r[k]=l);f(null,m=[],j,i)}for(k=m.length;k--;)(l=m[k])&&(j=f?la.call(e,l):n[k])>-1&&(e[j]=!(g[j]=l))}}else m=t(m===g?m.splice(p,m.length):m),f?f(null,g,m,i):J.apply(g,m)})}function v(a){for(var b,c,d,e=a.length,f=A.relative[a[0].type],g=f||A.relative[" "],h=f?1:0,i=q(function(a){return a===b},g,!0),j=q(function(a){return la.call(b,a)>-1},g,!0),k=[function(a,c,d){var e=!f&&(d||c!=B)||((b=c).nodeType?i(a,c,d):j(a,c,d));return b=null,e}];e>h;h++)if(c=A.relative[a[h].type])k=[q(r(k),c)];else{if(c=A.filter[a[h].type].apply(null,a[h].matches),c[K]){for(d=++h;e>d&&!A.relative[a[d].type];d++);return u(h>1&&r(k),h>1&&p(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(Da,"$1"),c,d>h&&v(a.slice(h,d)),e>d&&v(a=a.slice(d)),e>d&&p(a))}k.push(c)}return r(k)}function w(a,b){var c=b.length>0,d=a.length>0,f=function(e,f,g,h,i){var j,k,l,n=0,o="0",p=e&&[],q=[],r=B,s=e||d&&A.find.TAG("*",i),u=L+=null==r?1:Math.random()||.1,v=s.length;for(i&&(B=f==E||f||i);o!==v&&null!=(j=s[o]);o++){if(d&&j){for(k=0,f||j.ownerDocument==E||(m(j),g=!G);l=a[k++];)if(l(j,f||E,g)){J.call(h,j);break}i&&(L=u)}c&&((j=!l&&j)&&n--,e&&p.push(j))}if(n+=o,c&&o!==n){for(k=0;l=b[k++];)l(p,q,f,g);if(e){if(n>0)for(;o--;)p[o]||q[o]||(q[o]=za.call(h));q=t(q)}J.apply(h,q),i&&!e&&q.length>0&&n+b.length>1&&ya.uniqueSort(h)}return i&&(L=u,B=r),p};return c?e(f):f}function x(a,b){var c,d=[],e=[],f=P[a+" "];if(!f){for(b||(b=o(a)),c=b.length;c--;)f=v(b[c]),f[K]?d.push(f):e.push(f);f=P(a,w(e,d)),f.selector=a}return f}function y(a,b,c,d){var e,f,g,h,i,j="function"==typeof a&&a,k=!d&&o(a=j.selector||a);if(c=c||[],1===k.length){if(f=k[0]=k[0].slice(0),f.length>2&&"ID"===(g=f[0]).type&&9===b.nodeType&&G&&A.relative[f[1].type]){if(b=(A.find.ID(g.matches[0].replace(fa,ha),b)||[])[0],!b)return c;j&&(b=b.parentNode),a=a.slice(f.shift().value.length)}for(e=aa.needsContext.test(a)?0:f.length;e--&&(g=f[e],!A.relative[h=g.type]);)if((i=A.find[h])&&(d=i(g.matches[0].replace(fa,ha),ea.test(f[0].type)&&l(b.parentNode)||b))){if(f.splice(e,1),a=d.length&&p(f),!a)return J.apply(c,d),c;break}}return(j||x(a,k))(d,b,!G,c,!b||ea.test(a)&&l(b.parentNode)||b),c}var z,A,B,C,D,E,F,G,H,I,J=Ga,K=ya.expando,L=0,M=0,N=d(),O=d(),P=d(),Q=d(),R=function(a,b){return a===b&&(D=!0),0},S="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",T="(?:\\\\[\\da-fA-F]{1,6}"+Ca+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+",U="\\["+Ca+"*("+T+")(?:"+Ca+"*([*^$|!~]?=)"+Ca+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+T+"))|)"+Ca+"*\\]",V=":("+T+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+U+")*)|.*)\\)|)",W=new RegExp(Ca+"+","g"),X=new RegExp("^"+Ca+"*,"+Ca+"*"),Y=new RegExp("^"+Ca+"*([>+~]|"+Ca+")"+Ca+"*"),Z=new RegExp(Ca+"|>"),$=new RegExp(V),_=new RegExp("^"+T+"$"),aa={ID:new RegExp("^#("+T+")"),CLASS:new RegExp("^\\.("+T+")"),TAG:new RegExp("^("+T+"|[*])"),ATTR:new RegExp("^"+U),PSEUDO:new RegExp("^"+V),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+Ca+"*(even|odd|(([+-]|)(\\d*)n|)"+Ca+"*(?:([+-]|)"+Ca+"*(\\d+)|))"+Ca+"*\\)|)","i"),bool:new RegExp("^(?:"+S+")$","i"),needsContext:new RegExp("^"+Ca+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+Ca+"*((?:-\\d)?\\d*)"+Ca+"*\\)|)(?=[^-]|$)","i")},ba=/^(?:input|select|textarea|button)$/i,ca=/^h\d$/i,da=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ea=/[+~]/,fa=new RegExp("\\\\[\\da-fA-F]{1,6}"+Ca+"?|\\\\([^\\r\\n\\f])","g"),ha=function(a,b){var c="0x"+a.slice(1)-65536;return b?b:0>c?String.fromCharCode(c+65536):String.fromCharCode(c>>10|55296,1023&c|56320)},ja=function(){m()},ka=q(function(a){return a.disabled===!0&&f(a,"fieldset")},{dir:"parentNode",next:"legend"});try{J.apply(ga=ia.call(Fa.childNodes),Fa.childNodes),ga[Fa.childNodes.length].nodeType}catch(ma){J={apply:function(a,b){Ga.apply(a,ia.call(b))},call:function(a){Ga.apply(a,ia.call(arguments,1))}}}c.matches=function(a,b){return c(a,null,null,b)},c.matchesSelector=function(a,b){if(m(a),G&&!Q[b+" "]&&(!H||!H.test(b)))try{var d=I.call(a,b);if(d||ra.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){Q(b,!0)}return c(b,E,null,[a]).length>0},c.contains=function(a,b){return(a.ownerDocument||a)!=E&&m(a),ya.contains(a,b)},c.attr=function(a,b){(a.ownerDocument||a)!=E&&m(a);var c=A.attrHandle[b.toLowerCase()],d=c&&oa.call(A.attrHandle,b.toLowerCase())?c(a,b,!G):void 0;return void 0!==d?d:a.getAttribute(b)},c.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ya.uniqueSort=function(a){var b,c=[],d=0,e=0;if(D=!ra.sortStable,C=!ra.sortStable&&ia.call(a,0),Aa.call(a,R),D){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)Ba.call(a,c[d],1)}return C=null,a},ya.fn.uniqueSort=function(){return this.pushStack(ya.uniqueSort(ia.apply(this)))},A=ya.expr={cacheLength:50,createPseudo:e,match:aa,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(fa,ha),a[3]=(a[3]||a[4]||a[5]||"").replace(fa,ha),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||c.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&c.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return aa.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&$.test(c)&&(b=o(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(fa,ha).toLowerCase();return"*"===a?function(){return!0}:function(a){return f(a,b)}},CLASS:function(a){var b=N[a+" "];return b||(b=new RegExp("(^|"+Ca+")"+a+"("+Ca+"|$)"))&&N(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,d){return function(e){var f=c.attr(e,a);return null==f?"!="===b:b?(f+="","="===b?f===d:"!="===b?f!==d:"^="===b?d&&0===f.indexOf(d):"*="===b?d&&f.indexOf(d)>-1:"$="===b?d&&f.slice(-d.length)===d:"~="===b?(" "+f.replace(W," ")+" ").indexOf(d)>-1:"|="===b?f===d||f.slice(0,d.length+1)===d+"-":!1):!0}},CHILD:function(a,b,c,d,e){var g="nth"!==a.slice(0,3),h="last"!==a.slice(-4),i="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,j){var k,l,m,n,o,p=g!==h?"nextSibling":"previousSibling",q=b.parentNode,r=i&&b.nodeName.toLowerCase(),s=!j&&!i,t=!1;if(q){if(g){for(;p;){for(m=b;m=m[p];)if(i?f(m,r):1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[h?q.firstChild:q.lastChild],h&&s){for(l=q[K]||(q[K]={}),k=l[a]||[],n=k[0]===L&&k[1],t=n&&k[2],m=n&&q.childNodes[n];m=++n&&m&&m[p]||(t=n=0)||o.pop();)if(1===m.nodeType&&++t&&m===b){l[a]=[L,n,t];break}}else if(s&&(l=b[K]||(b[K]={}),k=l[a]||[],n=k[0]===L&&k[1],t=n),t===!1)for(;(m=++n&&m&&m[p]||(t=n=0)||o.pop())&&((i?!f(m,r):1!==m.nodeType)||!++t||(s&&(l=m[K]||(m[K]={}),l[a]=[L,t]),m!==b)););return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var d,f=A.pseudos[a]||A.setFilters[a.toLowerCase()]||c.error("unsupported pseudo: "+a);return f[K]?f(b):f.length>1?(d=[a,a,"",b],A.setFilters.hasOwnProperty(a.toLowerCase())?e(function(a,c){for(var d,e=f(a,b),g=e.length;g--;)d=la.call(a,e[g]),a[d]=!(c[d]=e[g])}):function(a){return f(a,0,d); + }):f}},pseudos:{not:e(function(a){var b=[],c=[],d=x(a.replace(Da,"$1"));return d[K]?e(function(a,b,c,e){for(var f,g=d(a,null,e,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:e(function(a){return function(b){return c(a,b).length>0}}),contains:e(function(a){return a=a.replace(fa,ha),function(b){return(b.textContent||ya.text(b)).indexOf(a)>-1}}),lang:e(function(a){return _.test(a||"")||c.error("unsupported lang: "+a),a=a.replace(fa,ha).toLowerCase(),function(b){var c;do if(c=G?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===F},focus:function(a){return a===b()&&E.hasFocus()&&!!(a.type||a.href||~a.tabIndex)},enabled:j(!1),disabled:j(!0),checked:function(a){return f(a,"input")&&!!a.checked||f(a,"option")&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!A.pseudos.empty(a)},header:function(a){return ca.test(a.nodeName)},input:function(a){return ba.test(a.nodeName)},button:function(a){return f(a,"input")&&"button"===a.type||f(a,"button")},text:function(a){var b;return f(a,"input")&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:k(function(){return[0]}),last:k(function(a,b){return[b-1]}),eq:k(function(a,b,c){return[0>c?c+b:c]}),even:k(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:k(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:k(function(a,b,c){var d;for(d=0>c?c+b:c>b?b:c;--d>=0;)a.push(d);return a}),gt:k(function(a,b,c){for(var d=0>c?c+b:c;++d:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;ya.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?ya.find.matchesSelector(d,a)?[d]:[]:ya.find.matches(a,ya.grep(b,function(a){return 1===a.nodeType}))},ya.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(ya(a).filter(function(){for(b=0;d>b;b++)if(ya.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;d>b;b++)ya.find(a,e[b],c);return d>1?ya.uniqueSort(c):c},filter:function(a){return this.pushStack(h(this,a||[],!1))},not:function(a){return this.pushStack(h(this,a||[],!0))},is:function(a){return!!h(this,"string"==typeof a&&Ja.test(a)?ya(a):a||[],!1).length}});var La,Ma=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Na=ya.fn.init=function(a,b,c){var d,e;if(!a)return this;if(c=c||La,"string"==typeof a){if(d="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:Ma.exec(a),!d||!d[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(d[1]){if(b=b instanceof ya?b[0]:b,ya.merge(this,ya.parseHTML(d[1],b&&b.nodeType?b.ownerDocument||b:ua,!0)),Ka.test(d[1])&&ya.isPlainObject(b))for(d in b)sa(this[d])?this[d](b[d]):this.attr(d,b[d]);return this}return e=ua.getElementById(d[2]),e&&(this[0]=e,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):sa(a)?void 0!==c.ready?c.ready(a):a(ya):ya.makeArray(a,this)};Na.prototype=ya.fn,La=ya(ua);var Oa=/^(?:parents|prev(?:Until|All))/,Pa={children:!0,contents:!0,next:!0,prev:!0};ya.fn.extend({has:function(a){var b=ya(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(ya.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&ya(a);if(!Ja.test(a))for(;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&ya.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?ya.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?la.call(ya(a),this[0]):la.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(ya.uniqueSort(ya.merge(this.get(),ya(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}}),ya.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return Ha(a,"parentNode")},parentsUntil:function(a,b,c){return Ha(a,"parentNode",c)},next:function(a){return i(a,"nextSibling")},prev:function(a){return i(a,"previousSibling")},nextAll:function(a){return Ha(a,"nextSibling")},prevAll:function(a){return Ha(a,"previousSibling")},nextUntil:function(a,b,c){return Ha(a,"nextSibling",c)},prevUntil:function(a,b,c){return Ha(a,"previousSibling",c)},siblings:function(a){return Ia((a.parentNode||{}).firstChild,a)},children:function(a){return Ia(a.firstChild)},contents:function(a){return null!=a.contentDocument&&ha(a.contentDocument)?a.contentDocument:(f(a,"template")&&(a=a.content||a),ya.merge([],a.childNodes))}},function(a,b){ya.fn[a]=function(c,d){var e=ya.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=ya.filter(d,e)),this.length>1&&(Pa[a]||ya.uniqueSort(e),Oa.test(a)&&e.reverse()),this.pushStack(e)}});var Qa=/[^\x20\t\r\n\f]+/g;ya.Callbacks=function(a){a="string"==typeof a?j(a):ya.extend({},a);var b,c,e,f,g=[],h=[],i=-1,k=function(){for(f=f||a.once,e=b=!0;h.length;i=-1)for(c=h.shift();++i-1;)g.splice(c,1),i>=c&&i--}),this},has:function(a){return a?ya.inArray(a,g)>-1:g.length>0},empty:function(){return g&&(g=[]),this},disable:function(){return f=h=[],g=c="",this},disabled:function(){return!g},lock:function(){return f=h=[],c||b||(g=c=""),this},locked:function(){return!!f},fireWith:function(a,c){return f||(c=c||[],c=[a,c.slice?c.slice():c],h.push(c),b||k()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!e}};return l},ya.extend({Deferred:function(b){var c=[["notify","progress",ya.Callbacks("memory"),ya.Callbacks("memory"),2],["resolve","done",ya.Callbacks("once memory"),ya.Callbacks("once memory"),0,"resolved"],["reject","fail",ya.Callbacks("once memory"),ya.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return ya.Deferred(function(b){ya.each(c,function(c,d){var e=sa(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&sa(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){function f(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(g>b)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,sa(j)?e?j.call(a,f(g,c,k,e),f(g,c,l,e)):(g++,j.call(a,f(g,c,k,e),f(g,c,l,e),f(g,c,k,c.notifyWith))):(d!==k&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},m=e?j:function(){try{j()}catch(a){ya.Deferred.exceptionHook&&ya.Deferred.exceptionHook(a,m.error),b+1>=g&&(d!==l&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?m():(ya.Deferred.getErrorHook?m.error=ya.Deferred.getErrorHook():ya.Deferred.getStackHook&&(m.error=ya.Deferred.getStackHook()),a.setTimeout(m))}}var g=0;return ya.Deferred(function(a){c[0][3].add(f(0,a,sa(e)?e:k,a.notifyWith)),c[1][3].add(f(0,a,sa(b)?b:k)),c[2][3].add(f(0,a,sa(d)?d:l))}).promise()},promise:function(a){return null!=a?ya.extend(a,e):e}},f={};return ya.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[3-a][3].disable,c[0][2].lock,c[0][3].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=ia.call(arguments),f=ya.Deferred(),g=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?ia.call(arguments):c,--b||f.resolveWith(d,e)}};if(1>=b&&(m(a,f.done(g(c)).resolve,f.reject,!b),"pending"===f.state()||sa(e[c]&&e[c].then)))return f.then();for(;c--;)m(e[c],g(c),f.reject);return f.promise()}});var Ra=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ya.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Ra.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},ya.readyException=function(b){a.setTimeout(function(){throw b})};var Sa=ya.Deferred();ya.fn.ready=function(a){return Sa.then(a)["catch"](function(a){ya.readyException(a)}),this},ya.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--ya.readyWait:ya.isReady)||(ya.isReady=!0,a!==!0&&--ya.readyWait>0||Sa.resolveWith(ua,[ya]))}}),ya.ready.then=Sa.then,"complete"===ua.readyState||"loading"!==ua.readyState&&!ua.documentElement.doScroll?a.setTimeout(ya.ready):(ua.addEventListener("DOMContentLoaded",n),a.addEventListener("load",n));var Ta=function(a,b,c,e,f,g,h){var i=0,j=a.length,k=null==c;if("object"===d(c)){f=!0;for(i in c)Ta(a,b,i,c[i],!0,g,h)}else if(void 0!==e&&(f=!0,sa(e)||(h=!0),k&&(h?(b.call(a,e),b=null):(k=b,b=function(a,b,c){return k.call(ya(a),c)})),b))for(;j>i;i++)b(a[i],c,h?e:e.call(a[i],i,b(a[i],c)));return f?a:k?b.call(a):j?b(a[0],c):g},Ua=/^-ms-/,Va=/-([a-z])/g,Wa=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};q.uid=1,q.prototype={cache:function(a){var b=a[this.expando];return b||(b={},Wa(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[p(b)]=c;else for(d in b)e[p(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][p(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(p):(b=p(b),b=b in d?[b]:b.match(Qa)||[]),c=b.length;for(;c--;)delete d[b[c]]}(void 0===b||ya.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!ya.isEmptyObject(b)}};var Xa=new q,Ya=new q,Za=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,$a=/[A-Z]/g;ya.extend({hasData:function(a){return Ya.hasData(a)||Xa.hasData(a)},data:function(a,b,c){return Ya.access(a,b,c)},removeData:function(a,b){Ya.remove(a,b)},_data:function(a,b,c){return Xa.access(a,b,c)},_removeData:function(a,b){Xa.remove(a,b)}}),ya.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=Ya.get(f),1===f.nodeType&&!Xa.get(f,"hasDataAttrs"))){for(c=g.length;c--;)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=p(d.slice(5)),s(f,d,e[d])));Xa.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){Ya.set(this,a)}):Ta(this,function(b){var c;if(f&&void 0===b){if(c=Ya.get(f,a),void 0!==c)return c;if(c=s(f,a),void 0!==c)return c}else this.each(function(){Ya.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){Ya.remove(this,a)})}}),ya.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=Xa.get(a,b),c&&(!d||Array.isArray(c)?d=Xa.access(a,b,ya.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=ya.queue(a,b),d=c.length,e=c.shift(),f=ya._queueHooks(a,b),g=function(){ya.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return Xa.get(a,c)||Xa.access(a,c,{empty:ya.Callbacks("once memory").add(function(){Xa.remove(a,[b+"queue",c])})})}}),ya.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]*)/i,jb=/^$|^module$|\/(?:java|ecma)script/i;!function(){var a=ua.createDocumentFragment(),b=a.appendChild(ua.createElement("div")),c=ua.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),ra.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",ra.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,b.innerHTML="",ra.option=!!b.lastChild}();var kb={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};kb.tbody=kb.tfoot=kb.colgroup=kb.caption=kb.thead,kb.th=kb.td,ra.option||(kb.optgroup=kb.option=[1,""]);var lb=/<|&#?\w+;/,mb=/^([^.]*)(?:\.(.+)|)/;ya.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=Xa.get(a);if(Wa(a))for(c.handler&&(f=c,c=f.handler,e=f.selector),e&&ya.find.matchesSelector(cb,e),c.guid||(c.guid=ya.guid++),(i=q.events)||(i=q.events=Object.create(null)),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof ya&&ya.event.triggered!==b.type?ya.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(Qa)||[""],j=b.length;j--;)h=mb.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=ya.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=ya.event.special[n]||{},k=ya.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&ya.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),ya.event.global[n]=!0)},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=Xa.hasData(a)&&Xa.get(a);if(q&&(i=q.events)){for(b=(b||"").match(Qa)||[""],j=b.length;j--;)if(h=mb.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){for(l=ya.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;f--;)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||ya.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)ya.event.remove(a,n+b[j],c,d,!0);ya.isEmptyObject(i)&&Xa.remove(a,"handle events")}},dispatch:function(a){var b,c,d,e,f,g,h=new Array(arguments.length),i=ya.event.fix(a),j=(Xa.get(this,"events")||Object.create(null))[i.type]||[],k=ya.event.special[i.type]||{};for(h[0]=i,b=1;b=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;i>c;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?ya(e,this).index(j)>-1:ya.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\s*$/g;ya.extend({htmlPrefilter:function(a){return a},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=db(a);if(!(ra.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||ya.isXMLDoc(a)))for(g=w(h),f=w(a),d=0,e=f.length;e>d;d++)H(f[d],g[d]);if(b)if(c)for(f=f||w(a),g=g||w(h),d=0,e=f.length;e>d;d++)G(f[d],g[d]);else G(a,h);return g=w(h,"script"),g.length>0&&x(g,!i&&w(a,"script")),h},cleanData:function(a){for(var b,c,d,e=ya.event.special,f=0;void 0!==(c=a[f]);f++)if(Wa(c)){if(b=c[Xa.expando]){if(b.events)for(d in b.events)e[d]?ya.event.remove(c,d):ya.removeEvent(c,d,b.handle);c[Xa.expando]=void 0}c[Ya.expando]&&(c[Ya.expando]=void 0)}}}),ya.fn.extend({detach:function(a){return J(this,a,!0)},remove:function(a){return J(this,a)},text:function(a){return Ta(this,function(a){return void 0===a?ya.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return I(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=D(this,a);b.appendChild(a)}})},prepend:function(){return I(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=D(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return I(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return I(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(ya.cleanData(w(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return ya.clone(this,a,b)})},html:function(a){return Ta(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!nb.test(a)&&!kb[(ib.exec(a)||["",""])[1].toLowerCase()]){a=ya.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(ya.cleanData(w(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return I(this,arguments,function(b){var c=this.parentNode;ya.inArray(this,a)<0&&(ya.cleanData(w(this)),c&&c.replaceChild(b,this))},a)}}),ya.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){ya.fn[a]=function(a){for(var c,d=[],e=ya(a),f=e.length-1,g=0;f>=g;g++)c=g===f?this:this.clone(!0),ya(e[g])[b](c),ka.apply(d,c.get());return this.pushStack(d)}});var qb=new RegExp("^("+_a+")(?!px)[a-z%]+$","i"),rb=/^--/,sb=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},tb=function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d},ub=new RegExp(bb.join("|"),"i");!function(){function b(){if(k){j.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",k.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",cb.appendChild(j).appendChild(k);var b=a.getComputedStyle(k);d="1%"!==b.top,i=12===c(b.marginLeft),k.style.right="60%",g=36===c(b.right),e=36===c(b.width),k.style.position="absolute",f=12===c(k.offsetWidth/3),cb.removeChild(j),k=null}}function c(a){return Math.round(parseFloat(a))}var d,e,f,g,h,i,j=ua.createElement("div"),k=ua.createElement("div");k.style&&(k.style.backgroundClip="content-box",k.cloneNode(!0).style.backgroundClip="",ra.clearCloneStyle="content-box"===k.style.backgroundClip,ya.extend(ra,{boxSizingReliable:function(){return b(),e},pixelBoxStyles:function(){return b(),g},pixelPosition:function(){return b(),d},reliableMarginLeft:function(){return b(),i},scrollboxSize:function(){return b(),f},reliableTrDimensions:function(){var b,c,d,e;return null==h&&(b=ua.createElement("table"),c=ua.createElement("tr"),d=ua.createElement("div"),b.style.cssText="position:absolute;left:-11111px;border-collapse:separate",c.style.cssText="box-sizing:content-box;border:1px solid",c.style.height="1px",d.style.height="9px",d.style.display="block",cb.appendChild(b).appendChild(c).appendChild(d),e=a.getComputedStyle(c),h=parseInt(e.height,10)+parseInt(e.borderTopWidth,10)+parseInt(e.borderBottomWidth,10)===c.offsetHeight,cb.removeChild(b)),h}}))}();var vb=["Webkit","Moz","ms"],wb=ua.createElement("div").style,xb={},yb=/^(none|table(?!-c[ea]).+)/,zb={position:"absolute",visibility:"hidden",display:"block"},Ab={letterSpacing:"0",fontWeight:"400"};ya.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=K(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=p(b),i=rb.test(b),j=a.style;return i||(b=N(h)),g=ya.cssHooks[b]||ya.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ab.exec(c))&&e[1]&&(c=t(a,b,e),f="number"),null!=c&&c===c&&("number"!==f||i||(c+=e&&e[3]||(ya.cssNumber[h]?"":"px")),ra.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=p(b),i=rb.test(b);return i||(b=N(h)),g=ya.cssHooks[b]||ya.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=K(a,b,d)),"normal"===e&&b in Ab&&(e=Ab[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),ya.each(["height","width"],function(a,b){ya.cssHooks[b]={get:function(a,c,d){return c?!yb.test(ya.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?Q(a,b,d):tb(a,zb,function(){return Q(a,b,d)}):void 0},set:function(a,c,d){var e,f=sb(a),g=!ra.scrollboxSize()&&"absolute"===f.position,h=g||d,i=h&&"border-box"===ya.css(a,"boxSizing",!1,f),j=d?P(a,b,d,i,f):0;return i&&g&&(j-=Math.ceil(a["offset"+b[0].toUpperCase()+b.slice(1)]-parseFloat(f[b])-P(a,b,"border",!1,f)-.5)),j&&(e=ab.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=ya.css(a,b)),O(a,c,j)}}}),ya.cssHooks.marginLeft=L(ra.reliableMarginLeft,function(a,b){return b?(parseFloat(K(a,"marginLeft"))||a.getBoundingClientRect().left-tb(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px":void 0}),ya.each({margin:"",padding:"",border:"Width"},function(a,b){ya.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+bb[d]+b]=f[d]||f[d-2]||f[0];return e}},"margin"!==a&&(ya.cssHooks[a+b].set=O)}),ya.fn.extend({css:function(a,b){return Ta(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=sb(a),e=b.length;e>g;g++)f[b[g]]=ya.css(a,b[g],!1,d);return f}return void 0!==c?ya.style(a,b,c):ya.css(a,b)},a,b,arguments.length>1)}}),ya.Tween=R,R.prototype={constructor:R,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||ya.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(ya.cssNumber[c]?"":"px")},cur:function(){var a=R.propHooks[this.prop];return a&&a.get?a.get(this):R.propHooks._default.get(this)},run:function(a){var b,c=R.propHooks[this.prop];return this.options.duration?this.pos=b=ya.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=ya.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){ya.fx.step[a.prop]?ya.fx.step[a.prop](a):1!==a.elem.nodeType||!ya.cssHooks[a.prop]&&null==a.elem.style[N(a.prop)]?a.elem[a.prop]=a.now:ya.style(a.elem,a.prop,a.now+a.unit)}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},ya.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},ya.fx=R.prototype.init,ya.fx.step={};var Bb,Cb,Db=/^(?:toggle|show|hide)$/,Eb=/queueHooks$/;ya.Animation=ya.extend(Y,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return t(c.elem,a,ab.exec(b),c),c}]},tweener:function(a,b){sa(a)?(b=a,a=["*"]):a=a.match(Qa);for(var c,d=0,e=a.length;e>d;d++)c=a[d],Y.tweeners[c]=Y.tweeners[c]||[],Y.tweeners[c].unshift(b)},prefilters:[W],prefilter:function(a,b){b?Y.prefilters.unshift(a):Y.prefilters.push(a)}}),ya.speed=function(a,b,c){var d=a&&"object"==typeof a?ya.extend({},a):{complete:c||!c&&b||sa(a)&&a,duration:a,easing:c&&b||b&&!sa(b)&&b};return ya.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in ya.fx.speeds?d.duration=ya.fx.speeds[d.duration]:d.duration=ya.fx.speeds._default),(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){ + sa(d.old)&&d.old.call(this),d.queue&&ya.dequeue(this,d.queue)},d},ya.fn.extend({fadeTo:function(a,b,c,d){return this.filter(fb).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=ya.isEmptyObject(a),f=ya.speed(b,c,d),g=function(){var b=Y(this,ya.extend({},a),f);(e||Xa.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=ya.timers,g=Xa.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Eb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&ya.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=Xa.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=ya.timers,g=d?d.length:0;for(c.finish=!0,ya.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),ya.each(["toggle","show","hide"],function(a,b){var c=ya.fn[b];ya.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(U(b,!0),a,d,e)}}),ya.each({slideDown:U("show"),slideUp:U("hide"),slideToggle:U("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){ya.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),ya.timers=[],ya.fx.tick=function(){var a,b=0,c=ya.timers;for(Bb=Date.now();b1)},removeAttr:function(a){return this.each(function(){ya.removeAttr(this,a)})}}),ya.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?ya.prop(a,b,c):(1===f&&ya.isXMLDoc(a)||(e=ya.attrHooks[b.toLowerCase()]||(ya.expr.match.bool.test(b)?Fb:void 0)),void 0!==c?null===c?void ya.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=ya.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!ra.radioValue&&"radio"===b&&f(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(Qa);if(e&&1===a.nodeType)for(;c=e[d++];)a.removeAttribute(c)}}),Fb={set:function(a,b,c){return b===!1?ya.removeAttr(a,c):a.setAttribute(c,c),c}},ya.each(ya.expr.match.bool.source.match(/\w+/g),function(a,b){var c=Gb[b]||ya.find.attr;Gb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=Gb[g],Gb[g]=e,e=null!=c(a,b,d)?g:null,Gb[g]=f),e}});var Hb=/^(?:input|select|textarea|button)$/i,Ib=/^(?:a|area)$/i;ya.fn.extend({prop:function(a,b){return Ta(this,ya.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[ya.propFix[a]||a]})}}),ya.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&ya.isXMLDoc(a)||(b=ya.propFix[b]||b,e=ya.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=ya.find.attr(a,"tabindex");return b?parseInt(b,10):Hb.test(a.nodeName)||Ib.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),ra.optSelected||(ya.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),ya.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ya.propFix[this.toLowerCase()]=this}),ya.fn.extend({addClass:function(a){var b,c,d,e,f,g;return sa(a)?this.each(function(b){ya(this).addClass(a.call(this,b,$(this)))}):(b=_(a),b.length?this.each(function(){if(d=$(this),c=1===this.nodeType&&" "+Z(d)+" "){for(f=0;f-1;)c=c.replace(" "+e+" "," ");g=Z(c),d!==g&&this.setAttribute("class",g)}}):this):this.attr("class","")},toggleClass:function(a,b){var c,d,e,f,g=typeof a,h="string"===g||Array.isArray(a);return sa(a)?this.each(function(c){ya(this).toggleClass(a.call(this,c,$(this),b),b)}):"boolean"==typeof b&&h?b?this.addClass(a):this.removeClass(a):(c=_(a),this.each(function(){if(h)for(f=ya(this),e=0;e-1)return!0;return!1}});var Jb=/\r/g;ya.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=sa(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,ya(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=ya.map(e,function(a){return null==a?"":a+""})),b=ya.valHooks[this.type]||ya.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=ya.valHooks[e.type]||ya.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(Jb,""):null==c?"":c)}}}),ya.extend({valHooks:{option:{get:function(a){var b=ya.find.attr(a,"value");return null!=b?b:Z(ya.text(a))}},select:{get:function(a){var b,c,d,e=a.options,g=a.selectedIndex,h="select-one"===a.type,i=h?null:[],j=h?g+1:e.length;for(d=0>g?j:h?g:0;j>d;d++)if(c=e[d],(c.selected||d===g)&&!c.disabled&&(!c.parentNode.disabled||!f(c.parentNode,"optgroup"))){if(b=ya(c).val(),h)return b;i.push(b)}return i},set:function(a,b){for(var c,d,e=a.options,f=ya.makeArray(b),g=e.length;g--;)d=e[g],(d.selected=ya.inArray(ya.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),ya.each(["radio","checkbox"],function(){ya.valHooks[this]={set:function(a,b){return Array.isArray(b)?a.checked=ya.inArray(ya(a).val(),b)>-1:void 0}},ra.checkOn||(ya.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var Kb=a.location,Lb={guid:Date.now()},Mb=/\?/;ya.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(e){}return d=c&&c.getElementsByTagName("parsererror")[0],(!c||d)&&ya.error("Invalid XML: "+(d?ya.map(d.childNodes,function(a){return a.textContent}).join("\n"):b)),c};var Nb=/^(?:focusinfocus|focusoutblur)$/,Ob=function(a){a.stopPropagation()};ya.extend(ya.event,{trigger:function(b,c,d,e){var f,g,h,i,j,k,l,m,n=[d||ua],o=oa.call(b,"type")?b.type:b,p=oa.call(b,"namespace")?b.namespace.split("."):[];if(g=m=h=d=d||ua,3!==d.nodeType&&8!==d.nodeType&&!Nb.test(o+ya.event.triggered)&&(o.indexOf(".")>-1&&(p=o.split("."),o=p.shift(),p.sort()),j=o.indexOf(":")<0&&"on"+o,b=b[ya.expando]?b:new ya.Event(o,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=p.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:ya.makeArray(c,[b]),l=ya.event.special[o]||{},e||!l.trigger||l.trigger.apply(d,c)!==!1)){if(!e&&!l.noBubble&&!ta(d)){for(i=l.delegateType||o,Nb.test(i+o)||(g=g.parentNode);g;g=g.parentNode)n.push(g),h=g;h===(d.ownerDocument||ua)&&n.push(h.defaultView||h.parentWindow||a)}for(f=0;(g=n[f++])&&!b.isPropagationStopped();)m=g,b.type=f>1?i:l.bindType||o,k=(Xa.get(g,"events")||Object.create(null))[b.type]&&Xa.get(g,"handle"),k&&k.apply(g,c),k=j&&g[j],k&&k.apply&&Wa(g)&&(b.result=k.apply(g,c),b.result===!1&&b.preventDefault());return b.type=o,e||b.isDefaultPrevented()||l._default&&l._default.apply(n.pop(),c)!==!1||!Wa(d)||j&&sa(d[o])&&!ta(d)&&(h=d[j],h&&(d[j]=null),ya.event.triggered=o,b.isPropagationStopped()&&m.addEventListener(o,Ob),d[o](),b.isPropagationStopped()&&m.removeEventListener(o,Ob),ya.event.triggered=void 0,h&&(d[j]=h)),b.result}},simulate:function(a,b,c){var d=ya.extend(new ya.Event,c,{type:a,isSimulated:!0});ya.event.trigger(d,null,b)}}),ya.fn.extend({trigger:function(a,b){return this.each(function(){ya.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?ya.event.trigger(a,b,c,!0):void 0}});var Pb=/\[\]$/,Qb=/\r?\n/g,Rb=/^(?:submit|button|image|reset|file)$/i,Sb=/^(?:input|select|textarea|keygen)/i;ya.param=function(a,b){var c,d=[],e=function(a,b){var c=sa(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(null==a)return"";if(Array.isArray(a)||a.jquery&&!ya.isPlainObject(a))ya.each(a,function(){e(this.name,this.value)});else for(c in a)aa(c,a[c],b,e);return d.join("&")},ya.fn.extend({serialize:function(){return ya.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=ya.prop(this,"elements");return a?ya.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!ya(this).is(":disabled")&&Sb.test(this.nodeName)&&!Rb.test(a)&&(this.checked||!hb.test(a))}).map(function(a,b){var c=ya(this).val();return null==c?null:Array.isArray(c)?ya.map(c,function(a){return{name:b.name,value:a.replace(Qb,"\r\n")}}):{name:b.name,value:c.replace(Qb,"\r\n")}}).get()}});var Tb=/%20/g,Ub=/#.*$/,Vb=/([?&])_=[^&]*/,Wb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Xb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Yb=/^(?:GET|HEAD)$/,Zb=/^\/\//,$b={},_b={},ac="*/".concat("*"),bc=ua.createElement("a");bc.href=Kb.href,ya.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Kb.href,type:"GET",isLocal:Xb.test(Kb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":ac,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ya.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?da(da(a,ya.ajaxSettings),b):da(ya.ajaxSettings,a)},ajaxPrefilter:ba($b),ajaxTransport:ba(_b),ajax:function(b,c){function d(b,c,d,h){var j,m,n,u,v,w=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",x.readyState=b>0?4:0,j=b>=200&&300>b||304===b,d&&(u=ea(o,x,d)),!j&&ya.inArray("script",o.dataTypes)>-1&&ya.inArray("json",o.dataTypes)<0&&(o.converters["text script"]=function(){}),u=fa(o,u,x,j),j?(o.ifModified&&(v=x.getResponseHeader("Last-Modified"),v&&(ya.lastModified[f]=v),v=x.getResponseHeader("etag"),v&&(ya.etag[f]=v)),204===b||"HEAD"===o.type?w="nocontent":304===b?w="notmodified":(w=u.state,m=u.data,n=u.error,j=!n)):(n=w,(b||!w)&&(w="error",0>b&&(b=0))),x.status=b,x.statusText=(c||w)+"",j?r.resolveWith(p,[m,w,x]):r.rejectWith(p,[x,w,n]),x.statusCode(t),t=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[x,o,j?m:n]),s.fireWith(p,[x,w]),l&&(q.trigger("ajaxComplete",[x,o]),--ya.active||ya.event.trigger("ajaxStop")))}"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=ya.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?ya(p):ya.event,r=ya.Deferred(),s=ya.Callbacks("once memory"),t=o.statusCode||{},u={},v={},w="canceled",x={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h)for(h={};b=Wb.exec(g);)h[b[1].toLowerCase()+" "]=(h[b[1].toLowerCase()+" "]||[]).concat(b[2]);b=h[a.toLowerCase()+" "]}return null==b?null:b.join(", ")},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=v[a.toLowerCase()]=v[a.toLowerCase()]||a,u[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)x.always(a[x.status]);else for(b in a)t[b]=[t[b],a[b]];return this},abort:function(a){var b=a||w;return e&&e.abort(b),d(0,b),this}};if(r.promise(x),o.url=((b||o.url||Kb.href)+"").replace(Zb,Kb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(Qa)||[""],null==o.crossDomain){j=ua.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=bc.protocol+"//"+bc.host!=j.protocol+"//"+j.host}catch(y){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=ya.param(o.data,o.traditional)),ca($b,o,c,x),k)return x;l=ya.event&&o.global,l&&0===ya.active++&&ya.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Yb.test(o.type),f=o.url.replace(Ub,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Tb,"+")):(n=o.url.slice(f.length),o.data&&(o.processData||"string"==typeof o.data)&&(f+=(Mb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Vb,"$1"),n=(Mb.test(f)?"&":"?")+"_="+Lb.guid++ +n),o.url=f+n),o.ifModified&&(ya.lastModified[f]&&x.setRequestHeader("If-Modified-Since",ya.lastModified[f]),ya.etag[f]&&x.setRequestHeader("If-None-Match",ya.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",o.contentType),x.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+ac+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)x.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,x,o)===!1||k))return x.abort();if(w="abort",s.add(o.complete),x.done(o.success),x.fail(o.error),e=ca(_b,o,c,x)){if(x.readyState=1,l&&q.trigger("ajaxSend",[x,o]),k)return x;o.async&&o.timeout>0&&(i=a.setTimeout(function(){x.abort("timeout")},o.timeout));try{k=!1,e.send(u,d)}catch(y){if(k)throw y;d(-1,y)}}else d(-1,"No Transport");return x},getJSON:function(a,b,c){return ya.get(a,b,c,"json")},getScript:function(a,b){return ya.get(a,void 0,b,"script")}}),ya.each(["get","post"],function(a,b){ya[b]=function(a,c,d,e){return sa(c)&&(e=e||d,d=c,c=void 0),ya.ajax(ya.extend({url:a,type:b,dataType:e,data:c,success:d},ya.isPlainObject(a)&&a))}}),ya.ajaxPrefilter(function(a){var b;for(b in a.headers)"content-type"===b.toLowerCase()&&(a.contentType=a.headers[b]||"")}),ya._evalUrl=function(a,b,c){return ya.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(a){ya.globalEval(a,b,c)}})},ya.fn.extend({wrapAll:function(a){var b;return this[0]&&(sa(a)&&(a=a.call(this[0])),b=ya(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstElementChild;)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return sa(a)?this.each(function(b){ya(this).wrapInner(a.call(this,b))}):this.each(function(){var b=ya(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=sa(a);return this.each(function(c){ya(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){ya(this).replaceWith(this.childNodes)}),this}}),ya.expr.pseudos.hidden=function(a){return!ya.expr.pseudos.visible(a)},ya.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},ya.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var cc={0:200,1223:204},dc=ya.ajaxSettings.xhr();ra.cors=!!dc&&"withCredentials"in dc,ra.ajax=dc=!!dc,ya.ajaxTransport(function(b){var c,d;return ra.cors||dc&&!b.crossDomain?{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.ontimeout=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(cc[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=h.ontimeout=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}:void 0}),ya.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),ya.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return ya.globalEval(a),a}}}),ya.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),ya.ajaxTransport("script",function(a){if(a.crossDomain||a.scriptAttrs){var b,c;return{send:function(d,e){b=ya(" - - - - - - - `; - -function customReporter() { - return { - async reportTestFileResults({ logger, sessionsForTestFile }) { - sessionsForTestFile.forEach((session) => { - session.testResults.tests.forEach((test) => { - if (!test.passed && !test.skipped) { - logger.log(test); - } - }); - }); - }, - }; -} - -/** @type {import('@web/test-runner').TestRunnerConfig} */ -export default { - browsers: [ - chromeLauncher({ - launchOptions: { args: ['--no-sandbox'] }, - }), - ], - coverageConfig: { - include: ['src/**'], - exclude: ['test/mocks/**', 'test/**', '**/node_modules/**'], - threshold: { - branches: 99, - functions: 97, - statements: 99.5, - lines: 99.5, - }, - }, - debug: false, - files: ['test/**/*.test.(js|html)'], - middleware: [ - async (ctx, next) => { - await next(); - ctx.set('Cache-Control', 'public, max-age=604800, immutable'); - ctx.set('Access-Control-Allow-Credentials', true); - ctx.set('Access-Control-Allow-Origin', ctx.request.headers.origin); - }, - ], - nodeResolve: true, - plugins: [ - importMapsPlugin({ - inject: { - importMap: { - imports: { - react: '/test/mocks/react.js', - '@pandora/fetch': '/test/mocks/pandora-fetch.js', - }, - }, - }, - }), - ], - port: 2023, - reporters: [ - defaultReporter({ reportTestResults: true, reportTestProgress: true }), - customReporter(), - ], - testRunnerHtml, -}; diff --git a/libs/features/mas/dist/mas.js b/libs/features/mas/dist/mas.js new file mode 100644 index 00000000000..77a0ac95044 --- /dev/null +++ b/libs/features/mas/dist/mas.js @@ -0,0 +1,2626 @@ +var Fs=Object.create;var sr=Object.defineProperty;var Ks=Object.getOwnPropertyDescriptor;var Ys=Object.getOwnPropertyNames;var js=Object.getPrototypeOf,Ws=Object.prototype.hasOwnProperty;var oo=e=>{throw TypeError(e)};var Xs=(e,t,r)=>t in e?sr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var qs=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Zs=(e,t)=>{for(var r in t)sr(e,r,{get:t[r],enumerable:!0})},Qs=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ys(t))!Ws.call(e,i)&&i!==r&&sr(e,i,{get:()=>t[i],enumerable:!(n=Ks(t,i))||n.enumerable});return e};var Js=(e,t,r)=>(r=e!=null?Fs(js(e)):{},Qs(t||!e||!e.__esModule?sr(r,"default",{value:e,enumerable:!0}):r,e));var p=(e,t,r)=>Xs(e,typeof t!="symbol"?t+"":t,r),Qr=(e,t,r)=>t.has(e)||oo("Cannot "+r);var L=(e,t,r)=>(Qr(e,t,"read from private field"),r?r.call(e):t.get(e)),G=(e,t,r)=>t.has(e)?oo("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),K=(e,t,r,n)=>(Qr(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r),ge=(e,t,r)=>(Qr(e,t,"access private method"),r);var Rs=qs((cg,Uh)=>{Uh.exports={total:38,offset:0,limit:38,data:[{lang:"ar",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u0627\u0644\u0634\u0647\u0631} YEAR {/\u0627\u0644\u0639\u0627\u0645} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u0643\u0644 \u0634\u0647\u0631} YEAR {\u0643\u0644 \u0639\u0627\u0645} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u0644\u0643\u0644 \u062A\u0631\u062E\u064A\u0635} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u0644\u0643\u0644 \u062A\u0631\u062E\u064A\u0635} other {}}",freeLabel:"\u0645\u062C\u0627\u0646\u064B\u0627",freeAriaLabel:"\u0645\u062C\u0627\u0646\u064B\u0627",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"\u0623\u0648 \u0628\u062F\u0644\u0627\u064B \u0645\u0646 \u0630\u0644\u0643 \u0628\u0642\u064A\u0645\u0629 {alternativePrice}",strikethroughAriaLabel:"\u0628\u0634\u0643\u0644 \u0645\u0646\u062A\u0638\u0645 \u0628\u0642\u064A\u0645\u0629 {strikethroughPrice}"},{lang:"bg",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u043C\u0435\u0441.} YEAR {/\u0433\u043E\u0434.} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u043D\u0430 \u043C\u0435\u0441\u0435\u0446} YEAR {\u043D\u0430 \u0433\u043E\u0434\u0438\u043D\u0430} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u043D\u0430 \u043B\u0438\u0446\u0435\u043D\u0437} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u043D\u0430 \u043B\u0438\u0446\u0435\u043D\u0437} other {}}",freeLabel:"\u0411\u0435\u0437\u043F\u043B\u0430\u0442\u043D\u043E",freeAriaLabel:"\u0411\u0435\u0437\u043F\u043B\u0430\u0442\u043D\u043E",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"\u0410\u043B\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u043E \u043D\u0430 {alternativePrice}",strikethroughAriaLabel:"\u0420\u0435\u0434\u043E\u0432\u043D\u043E \u043D\u0430 {strikethroughPrice}"},{lang:"cs",recurrenceLabel:"{recurrenceTerm, select, MONTH {/m\u011Bs\xEDc} YEAR {/rok} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {za m\u011Bs\xEDc} YEAR {za rok} other {}}",perUnitLabel:"{perUnit, select, LICENSE {za licenci} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {za licenci} other {}}",freeLabel:"Zdarma",freeAriaLabel:"Zdarma",taxExclusiveLabel:"{taxTerm, select, GST {bez dan\u011B ze zbo\u017E\xED a slu\u017Eeb} VAT {bez DPH} TAX {bez dan\u011B} IVA {bez IVA} SST {bez SST} KDV {bez KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {v\u010Detn\u011B dan\u011B ze zbo\u017E\xED a slu\u017Eeb} VAT {v\u010Detn\u011B DPH} TAX {v\u010Detn\u011B dan\u011B} IVA {v\u010Detn\u011B IVA} SST {v\u010Detn\u011B SST} KDV {v\u010Detn\u011B KDV} other {}}",alternativePriceAriaLabel:"P\u0159\xEDpadn\u011B za {alternativePrice}",strikethroughAriaLabel:"Pravideln\u011B za {strikethroughPrice}"},{lang:"da",recurrenceLabel:"{recurrenceTerm, select, MONTH {/md} YEAR {/\xE5r} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {pr. m\xE5ned} YEAR {pr. \xE5r} other {}}",perUnitLabel:"{perUnit, select, LICENSE {pr. licens} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {pr. licens} other {}}",freeLabel:"Gratis",freeAriaLabel:"Gratis",taxExclusiveLabel:"{taxTerm, select, GST {ekskl. GST} VAT {ekskl. moms} TAX {ekskl. skat} IVA {ekskl. IVA} SST {ekskl. SST} KDV {ekskl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {inkl. GST} VAT {inkl. moms} TAX {inkl. skat} IVA {inkl. IVA} SST {inkl. SST} KDV {inkl. KDV} other {}}",alternativePriceAriaLabel:"Alternativt til {alternativePrice}",strikethroughAriaLabel:"Normalpris {strikethroughPrice}"},{lang:"de",recurrenceLabel:"{recurrenceTerm, select, MONTH {/Monat} YEAR {/Jahr} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {pro Monat} YEAR {pro Jahr} other {}}",perUnitLabel:"{perUnit, select, LICENSE {pro Lizenz} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {pro Lizenz} other {}}",freeLabel:"Kostenlos",freeAriaLabel:"Kostenlos",taxExclusiveLabel:"{taxTerm, select, GST {zzgl. GST} VAT {zzgl. MwSt.} TAX {zzgl. Steuern} IVA {zzgl. IVA} SST {zzgl. SST} KDV {zzgl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {inkl. GST} VAT {inkl. MwSt.} TAX {inkl. Steuern} IVA {inkl. IVA} SST {inkl. SST} KDV {inkl. KDV} other {}}",alternativePriceAriaLabel:"Alternativ: {alternativePrice}",strikethroughAriaLabel:"Regul\xE4r: {strikethroughPrice}"},{lang:"en",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mo} YEAR {/yr} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per month} YEAR {per year} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per license} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per license} other {}}",freeLabel:"Free",freeAriaLabel:"Free",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Alternatively at {alternativePrice}",strikethroughAriaLabel:"Regularly at {strikethroughPrice}"},{lang:"et",recurrenceLabel:"{recurrenceTerm, select, MONTH {kuus} YEAR {aastas} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {kuus} YEAR {aastas} other {}}",perUnitLabel:"{perUnit, select, LICENSE {litsentsi kohta} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {litsentsi kohta} other {}}",freeLabel:"Tasuta",freeAriaLabel:"Tasuta",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Teise v\xF5imalusena hinnaga {alternativePrice}",strikethroughAriaLabel:"Tavahind {strikethroughPrice}"},{lang:"fi",recurrenceLabel:"{recurrenceTerm, select, MONTH {/kk} YEAR {/v} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {kuukausittain} YEAR {vuosittain} other {}}",perUnitLabel:"{perUnit, select, LICENSE {k\xE4ytt\xF6oikeutta kohti} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {k\xE4ytt\xF6oikeutta kohti} other {}}",freeLabel:"Maksuton",freeAriaLabel:"Maksuton",taxExclusiveLabel:"{taxTerm, select, GST {ilman GST:t\xE4} VAT {ilman ALV:t\xE4} TAX {ilman veroja} IVA {ilman IVA:ta} SST {ilman SST:t\xE4} KDV {ilman KDV:t\xE4} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {sis. GST:n} VAT {sis. ALV:n} TAX {sis. verot} IVA {sis. IVA:n} SST {sis. SST:n} KDV {sis. KDV:n} other {}}",alternativePriceAriaLabel:"Vaihtoehtoisesti hintaan {alternativePrice}",strikethroughAriaLabel:"S\xE4\xE4nn\xF6llisesti hintaan {strikethroughPrice}"},{lang:"fr",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mois} YEAR {/an} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {par mois} YEAR {par an} other {}}",perUnitLabel:"{perUnit, select, LICENSE {par licence} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {par licence} other {}}",freeLabel:"Gratuit",freeAriaLabel:"Gratuit",taxExclusiveLabel:"{taxTerm, select, GST {hors TPS} VAT {hors TVA} TAX {hors taxes} IVA {hors IVA} SST {hors SST} KDV {hors KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {TPS comprise} VAT {TVA comprise} TAX {taxes comprises} IVA {IVA comprise} SST {SST comprise} KDV {KDV comprise} other {}}",alternativePriceAriaLabel:"Autre prix {alternativePrice}",strikethroughAriaLabel:"Prix habituel {strikethroughPrice}"},{lang:"he",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u05D7\u05D5\u05D3\u05E9} YEAR {/\u05E9\u05E0\u05D4} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u05DC\u05D7\u05D5\u05D3\u05E9} YEAR {\u05DC\u05E9\u05E0\u05D4} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u05DC\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u05DC\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF} other {}}",freeLabel:"\u05D7\u05D9\u05E0\u05DD",freeAriaLabel:"\u05D7\u05D9\u05E0\u05DD",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"\u05DC\u05D7\u05DC\u05D5\u05E4\u05D9\u05DF \u05D1-{alternativePrice}",strikethroughAriaLabel:"\u05D1\u05D0\u05D5\u05E4\u05DF \u05E7\u05D1\u05D5\u05E2 \u05D1-{strikethroughPrice}"},{lang:"hu",recurrenceLabel:"{recurrenceTerm, select, MONTH {/h\xF3} YEAR {/\xE9v} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {havonta} YEAR {\xE9vente} other {}}",perUnitLabel:"{perUnit, select, LICENSE {licencenk\xE9nt} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {licencenk\xE9nt} other {}}",freeLabel:"Ingyenes",freeAriaLabel:"Ingyenes",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"M\xE1sik lehet\u0151s\xE9g: {alternativePrice}",strikethroughAriaLabel:"\xC1ltal\xE1ban {strikethroughPrice} \xE1ron"},{lang:"it",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mese} YEAR {/anno} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {al mese} YEAR {all'anno} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per licenza} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per licenza} other {}}",freeLabel:"Gratuito",freeAriaLabel:"Gratuito",taxExclusiveLabel:"{taxTerm, select, GST {escl. GST} VAT {escl. IVA.} TAX {escl. imposte} IVA {escl. IVA} SST {escl. SST} KDV {escl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. IVA} TAX {incl. imposte} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"In alternativa a {alternativePrice}",strikethroughAriaLabel:"Regolarmente a {strikethroughPrice}"},{lang:"ja",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u6708} YEAR {/\u5E74} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u6BCE\u6708} YEAR {\u6BCE\u5E74} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u30E9\u30A4\u30BB\u30F3\u30B9\u3054\u3068} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u30E9\u30A4\u30BB\u30F3\u30B9\u3054\u3068} other {}}",freeLabel:"\u7121\u6599",freeAriaLabel:"\u7121\u6599",taxExclusiveLabel:"{taxTerm, select, GST {GST \u5225} VAT {VAT \u5225} TAX {\u7A0E\u5225} IVA {IVA \u5225} SST {SST \u5225} KDV {KDV \u5225} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {GST \u8FBC} VAT {VAT \u8FBC} TAX {\u7A0E\u8FBC} IVA {IVA \u8FBC} SST {SST \u8FBC} KDV {KDV \u8FBC} other {}}",alternativePriceAriaLabel:"\u7279\u5225\u4FA1\u683C : {alternativePrice}",strikethroughAriaLabel:"\u901A\u5E38\u4FA1\u683C : {strikethroughPrice}"},{lang:"ko",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\uC6D4} YEAR {/\uB144} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\uC6D4\uAC04} YEAR {\uC5F0\uAC04} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\uB77C\uC774\uC120\uC2A4\uB2F9} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\uB77C\uC774\uC120\uC2A4\uB2F9} other {}}",freeLabel:"\uBB34\uB8CC",freeAriaLabel:"\uBB34\uB8CC",taxExclusiveLabel:"{taxTerm, select, GST {GST \uC81C\uC678} VAT {VAT \uC81C\uC678} TAX {\uC138\uAE08 \uC81C\uC678} IVA {IVA \uC81C\uC678} SST {SST \uC81C\uC678} KDV {KDV \uC81C\uC678} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {GST \uD3EC\uD568} VAT {VAT \uD3EC\uD568} TAX {\uC138\uAE08 \uD3EC\uD568} IVA {IVA \uD3EC\uD568} SST {SST \uD3EC\uD568} KDV {KDV \uD3EC\uD568} other {}}",alternativePriceAriaLabel:"\uB610\uB294 {alternativePrice}\uC5D0",strikethroughAriaLabel:"\uB610\uB294 {alternativePrice}\uC5D0"},{lang:"lt",recurrenceLabel:"{recurrenceTerm, select, MONTH { per m\u0117n.} YEAR { per metus} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per m\u0117n.} YEAR {per metus} other {}}",perUnitLabel:"{perUnit, select, LICENSE {u\u017E licencij\u0105} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {u\u017E licencij\u0105} other {}}",freeLabel:"Nemokamai",freeAriaLabel:"Nemokamai",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Arba u\u017E {alternativePrice}",strikethroughAriaLabel:"Normaliai u\u017E {strikethroughPrice}"},{lang:"lv",recurrenceLabel:"{recurrenceTerm, select, MONTH {m\u0113nes\u012B} YEAR {gad\u0101} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {m\u0113nes\u012B} YEAR {gad\u0101} other {}}",perUnitLabel:"{perUnit, select, LICENSE {vienai licencei} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {vienai licencei} other {}}",freeLabel:"Bezmaksas",freeAriaLabel:"Bezmaksas",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Alternat\u012Bvi par {alternativePrice}",strikethroughAriaLabel:"Regul\u0101ri par {strikethroughPrice}"},{lang:"nb",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mnd.} YEAR {/\xE5r} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per m\xE5ned} YEAR {per \xE5r} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per lisens} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per lisens} other {}}",freeLabel:"Fri",freeAriaLabel:"Fri",taxExclusiveLabel:"{taxTerm, select, GST {ekskl. GST} VAT {ekskl. moms} TAX {ekskl. avgift} IVA {ekskl. IVA} SST {ekskl. SST} KDV {ekskl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {inkl. GST} VAT {inkl. moms} TAX {inkl. avgift} IVA {inkl. IVA} SST {inkl. SST} KDV {inkl. KDV} other {}}",alternativePriceAriaLabel:"Alternativt til {alternativePrice}",strikethroughAriaLabel:"Regelmessig til {strikethroughPrice}"},{lang:"nl",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mnd} YEAR {/jr} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per maand} YEAR {per jaar} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per licentie} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per licentie} other {}}",freeLabel:"Gratis",freeAriaLabel:"Gratis",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. btw} TAX {excl. belasting} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. btw} TAX {incl. belasting} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Nu {alternativePrice}",strikethroughAriaLabel:"Normaal {strikethroughPrice}"},{lang:"pl",recurrenceLabel:"{recurrenceTerm, select, MONTH { / mies.} YEAR { / rok} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH { / miesi\u0105c} YEAR { / rok} other {}}",perUnitLabel:"{perUnit, select, LICENSE {za licencj\u0119} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {za licencj\u0119} other {}}",freeLabel:"Bezp\u0142atne",freeAriaLabel:"Bezp\u0142atne",taxExclusiveLabel:"{taxTerm, select, GST {bez GST} VAT {bez VAT} TAX {netto} IVA {bez IVA} SST {bez SST} KDV {bez KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {z GST} VAT {z VAT} TAX {brutto} IVA {z IVA} SST {z SST} KDV {z KDV} other {}}",alternativePriceAriaLabel:"Lub za {alternativePrice}",strikethroughAriaLabel:"Cena zwyk\u0142a: {strikethroughPrice}"},{lang:"pt",recurrenceLabel:"{recurrenceTerm, select, MONTH {/m\xEAs} YEAR {/ano} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {por m\xEAs} YEAR {por ano} other {}}",perUnitLabel:"{perUnit, select, LICENSE {por licen\xE7a} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {por licen\xE7a} other {}}",freeLabel:"Gratuito",freeAriaLabel:"Gratuito",taxExclusiveLabel:"{taxTerm, select, GST {ICMS n\xE3o incluso} VAT {IVA n\xE3o incluso} TAX {impostos n\xE3o inclusos} IVA {IVA n\xE3o incluso} SST { SST n\xE3o incluso} KDV {KDV n\xE3o incluso} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {ICMS incluso} VAT {IVA incluso} TAX {impostos inclusos} IVA {IVA incluso} SST {SST incluso} KDV {KDV incluso} other {}}",alternativePriceAriaLabel:"Ou a {alternativePrice}",strikethroughAriaLabel:"Pre\xE7o normal: {strikethroughPrice}"},{lang:"ro",recurrenceLabel:"{recurrenceTerm, select, MONTH {/lun\u0103} YEAR {/an} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {pe lun\u0103} YEAR {pe an} other {}}",perUnitLabel:"{perUnit, select, LICENSE {pe licen\u021B\u0103} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {pe licen\u021B\u0103} other {}}",freeLabel:"Gratuit",freeAriaLabel:"Gratuit",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Alternativ, la {alternativePrice}",strikethroughAriaLabel:"\xCEn mod normal, la {strikethroughPrice}"},{lang:"ru",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u043C\u0435\u0441.} YEAR {/\u0433.} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u0432 \u043C\u0435\u0441\u044F\u0446} YEAR {\u0432 \u0433\u043E\u0434} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u0437\u0430 \u043B\u0438\u0446\u0435\u043D\u0437\u0438\u044E} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u0437\u0430 \u043B\u0438\u0446\u0435\u043D\u0437\u0438\u044E} other {}}",freeLabel:"\u0411\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u043E",freeAriaLabel:"\u0411\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u043E",taxExclusiveLabel:"{taxTerm, select, GST {\u0438\u0441\u043A\u043B. \u043D\u0430\u043B\u043E\u0433 \u043D\u0430 \u0442\u043E\u0432\u0430\u0440\u044B \u0438 \u0443\u0441\u043B\u0443\u0433\u0438} VAT {\u0438\u0441\u043A\u043B. \u041D\u0414\u0421} TAX {\u0438\u0441\u043A\u043B. \u043D\u0430\u043B\u043E\u0433} IVA {\u0438\u0441\u043A\u043B. \u0418\u0412\u0410} SST {\u0438\u0441\u043A\u043B. SST} KDV {\u0438\u0441\u043A\u043B. \u041A\u0414\u0412} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {\u0432\u043A\u043B. \u043D\u0430\u043B\u043E\u0433 \u043D\u0430 \u0442\u043E\u0432\u0430\u0440\u044B \u0438 \u0443\u0441\u043B\u0443\u0433\u0438} VAT {\u0432\u043A\u043B. \u041D\u0414\u0421} TAX {\u0432\u043A\u043B. \u043D\u0430\u043B\u043E\u0433} IVA {\u0432\u043A\u043B. \u0418\u0412\u0410} SST {\u0432\u043A\u043B. SST} KDV {\u0432\u043A\u043B. \u041A\u0414\u0412} other {}}",alternativePriceAriaLabel:"\u0410\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u0437\u0430 {alternativePrice}",strikethroughAriaLabel:"\u0420\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u043E \u043F\u043E \u0446\u0435\u043D\u0435 {strikethroughPrice}"},{lang:"sk",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mesiac} YEAR {/rok} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {za mesiac} YEAR {za rok} other {}}",perUnitLabel:"{perUnit, select, LICENSE {za licenciu} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {za licenciu} other {}}",freeLabel:"Zadarmo",freeAriaLabel:"Zadarmo",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Pr\xEDpadne za {alternativePrice}",strikethroughAriaLabel:"Pravidelne za {strikethroughPrice}"},{lang:"sl",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mesec} YEAR {/leto} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {na mesec} YEAR {na leto} other {}}",perUnitLabel:"{perUnit, select, LICENSE {na licenco} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {na licenco} other {}}",freeLabel:"Brezpla\u010Dno",freeAriaLabel:"Brezpla\u010Dno",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Druga mo\u017Enost je: {alternativePrice}",strikethroughAriaLabel:"Redno po {strikethroughPrice}"},{lang:"sv",recurrenceLabel:"{recurrenceTerm, select, MONTH {/m\xE5n} YEAR {/\xE5r} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per m\xE5nad} YEAR {per \xE5r} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per licens} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per licens} other {}}",freeLabel:"Kostnadsfritt",freeAriaLabel:"Kostnadsfritt",taxExclusiveLabel:"{taxTerm, select, GST {exkl. GST} VAT {exkl. moms} TAX {exkl. skatt} IVA {exkl. IVA} SST {exkl. SST} KDV {exkl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {inkl. GST} VAT {inkl. moms} TAX {inkl. skatt} IVA {inkl. IVA} SST {inkl. SST} KDV {inkl. KDV} other {}}",alternativePriceAriaLabel:"Alternativt f\xF6r {alternativePrice}",strikethroughAriaLabel:"Normalpris {strikethroughPrice}"},{lang:"tr",recurrenceLabel:"{recurrenceTerm, select, MONTH {/ay} YEAR {/y\u0131l} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {(ayl\u0131k)} YEAR {(y\u0131ll\u0131k)} other {}}",perUnitLabel:"{perUnit, select, LICENSE {(lisans ba\u015F\u0131na)} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {(lisans ba\u015F\u0131na)} other {}}",freeLabel:"\xDCcretsiz",freeAriaLabel:"\xDCcretsiz",taxExclusiveLabel:"{taxTerm, select, GST {GST hari\xE7} VAT {KDV hari\xE7} TAX {vergi hari\xE7} IVA {IVA hari\xE7} SST {SST hari\xE7} KDV {KDV hari\xE7} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {GST dahil} VAT {KDV dahil} TAX {vergi dahil} IVA {IVA dahil} SST {SST dahil} KDV {KDV dahil} other {}}",alternativePriceAriaLabel:"Ya da {alternativePrice}",strikethroughAriaLabel:"Standart fiyat: {strikethroughPrice}"},{lang:"uk",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u043C\u0456\u0441.} YEAR {/\u0440\u0456\u043A} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u043D\u0430 \u043C\u0456\u0441\u044F\u0446\u044C} YEAR {\u043D\u0430 \u0440\u0456\u043A} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u0437\u0430 \u043B\u0456\u0446\u0435\u043D\u0437\u0456\u044E} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u0437\u0430 \u043B\u0456\u0446\u0435\u043D\u0437\u0456\u044E} other {}}",freeLabel:"\u0411\u0435\u0437\u043A\u043E\u0448\u0442\u043E\u0432\u043D\u043E",freeAriaLabel:"\u0411\u0435\u0437\u043A\u043E\u0448\u0442\u043E\u0432\u043D\u043E",taxExclusiveLabel:"{taxTerm, select, GST {\u0431\u0435\u0437 GST} VAT {\u0431\u0435\u0437 \u041F\u0414\u0412} TAX {\u0431\u0435\u0437 \u043F\u043E\u0434\u0430\u0442\u043A\u0443} IVA {\u0431\u0435\u0437 IVA} SST {\u0431\u0435\u0437 SST} KDV {\u0431\u0435\u0437 KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {\u0440\u0430\u0437\u043E\u043C \u0456\u0437 GST} VAT {\u0440\u0430\u0437\u043E\u043C \u0456\u0437 \u041F\u0414\u0412} TAX {\u0440\u0430\u0437\u043E\u043C \u0456\u0437 \u043F\u043E\u0434\u0430\u0442\u043A\u043E\u043C} IVA {\u0440\u0430\u0437\u043E\u043C \u0437 IVA} SST {\u0440\u0430\u0437\u043E\u043C \u0456\u0437 SST} KDV {\u0440\u0430\u0437\u043E\u043C \u0456\u0437 KDV} other {}}",alternativePriceAriaLabel:"\u0410\u0431\u043E \u0437\u0430 {alternativePrice}",strikethroughAriaLabel:"\u0417\u0432\u0438\u0447\u0430\u0439\u043D\u0430 \u0446\u0456\u043D\u0430 {strikethroughPrice}"},{lang:"zh-hans",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u6708} YEAR {/\u5E74} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u6BCF\u6708} YEAR {\u6BCF\u5E74} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u6BCF\u4E2A\u8BB8\u53EF\u8BC1} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u6BCF\u4E2A\u8BB8\u53EF\u8BC1} other {}}",freeLabel:"\u514D\u8D39",freeAriaLabel:"\u514D\u8D39",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"\u6216\u5B9A\u4EF7 {alternativePrice}",strikethroughAriaLabel:"\u6B63\u5E38\u4EF7 {strikethroughPrice}"},{lang:"zh-hant",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u6708} YEAR {/\u5E74} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u6BCF\u6708} YEAR {\u6BCF\u5E74} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u6BCF\u500B\u6388\u6B0A} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u6BCF\u500B\u6388\u6B0A} other {}}",freeLabel:"\u514D\u8CBB",freeAriaLabel:"\u514D\u8CBB",taxExclusiveLabel:"{taxTerm, select, GST {\u4E0D\u542B GST} VAT {\u4E0D\u542B VAT} TAX {\u4E0D\u542B\u7A05} IVA {\u4E0D\u542B IVA} SST {\u4E0D\u542B SST} KDV {\u4E0D\u542B KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {\u542B GST} VAT {\u542B VAT} TAX {\u542B\u7A05} IVA {\u542B IVA} SST {\u542B SST} KDV {\u542B KDV} other {}}",alternativePriceAriaLabel:"\u6216\u8005\u5728 {alternativePrice}",strikethroughAriaLabel:"\u6A19\u6E96\u50F9\u683C\u70BA {strikethroughPrice}"},{lang:"es",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mes} YEAR {/a\xF1o} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {al mes} YEAR {al a\xF1o} other {}}",perUnitLabel:"{perUnit, select, LICENSE {por licencia} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {por licencia} other {}}",freeLabel:"Gratuito",freeAriaLabel:"Gratuito",taxExclusiveLabel:"{taxTerm, select, GST {GST no incluido} VAT {IVA no incluido} TAX {Impuestos no incluidos} IVA {IVA no incluido} SST {SST no incluido} KDV {KDV no incluido} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {GST incluido} VAT {IVA incluido} TAX {Impuestos incluidos} IVA {IVA incluido} SST {SST incluido} KDV {KDV incluido} other {}}",alternativePriceAriaLabel:"Alternativamente por {alternativePrice}",strikethroughAriaLabel:"Normalmente a {strikethroughPrice}"},{lang:"in",recurrenceLabel:"{recurrenceTerm, select, MONTH {/bulan} YEAR {/tahun} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per bulan} YEAR {per tahun} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per lisensi} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per lisensi} other {}}",freeLabel:"Gratis",freeAriaLabel:"Gratis",taxExclusiveLabel:"{taxTerm, select, GST {tidak termasuk PBJ} VAT {tidak termasuk PPN} TAX {tidak termasuk pajak} IVA {tidak termasuk IVA} SST {tidak termasuk SST} KDV {tidak termasuk KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {termasuk PBJ} VAT {termasuk PPN} TAX {termasuk pajak} IVA {termasuk IVA} SST {termasuk SST} KDV {termasuk KDV} other {}}",alternativePriceAriaLabel:"Atau seharga {alternativePrice}",strikethroughAriaLabel:"Normalnya seharga {strikethroughPrice}"},{lang:"vi",recurrenceLabel:"{recurrenceTerm, select, MONTH {/th\xE1ng} YEAR {/n\u0103m} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {m\u1ED7i th\xE1ng} YEAR {m\u1ED7i n\u0103m} other {}}",perUnitLabel:"{perUnit, select, LICENSE {m\u1ED7i gi\u1EA5y ph\xE9p} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {m\u1ED7i gi\u1EA5y ph\xE9p} other {}}",freeLabel:"Mi\u1EC5n ph\xED",freeAriaLabel:"Mi\u1EC5n ph\xED",taxExclusiveLabel:"{taxTerm, select, GST {ch\u01B0a bao g\u1ED3m thu\u1EBF h\xE0ng h\xF3a v\xE0 d\u1ECBch v\u1EE5} VAT {ch\u01B0a bao g\u1ED3m thu\u1EBF GTGT} TAX {ch\u01B0a bao g\u1ED3m thu\u1EBF} IVA {ch\u01B0a bao g\u1ED3m IVA} SST {ch\u01B0a bao g\u1ED3m SST} KDV {ch\u01B0a bao g\u1ED3m KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {(\u0111\xE3 bao g\u1ED3m thu\u1EBF h\xE0ng h\xF3a v\xE0 d\u1ECBch v\u1EE5)} VAT {(\u0111\xE3 bao g\u1ED3m thu\u1EBF GTGT)} TAX {(\u0111\xE3 bao g\u1ED3m thu\u1EBF)} IVA {(\u0111\xE3 bao g\u1ED3m IVA)} SST {(\u0111\xE3 bao g\u1ED3m SST)} KDV {(\u0111\xE3 bao g\u1ED3m KDV)} other {}}",alternativePriceAriaLabel:"Gi\xE1 \u01B0u \u0111\xE3i {alternativePrice}",strikethroughAriaLabel:"Gi\xE1 th\xF4ng th\u01B0\u1EDDng {strikethroughPrice}"},{lang:"th",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u0E40\u0E14\u0E37\u0E2D\u0E19} YEAR {/\u0E1B\u0E35} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u0E15\u0E48\u0E2D\u0E40\u0E14\u0E37\u0E2D\u0E19} YEAR {\u0E15\u0E48\u0E2D\u0E1B\u0E35} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u0E15\u0E48\u0E2D\u0E2A\u0E34\u0E17\u0E18\u0E34\u0E4C\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u0E15\u0E48\u0E2D\u0E2A\u0E34\u0E17\u0E18\u0E34\u0E4C\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19} other {}}",freeLabel:"\u0E1F\u0E23\u0E35",freeAriaLabel:"\u0E1F\u0E23\u0E35",taxExclusiveLabel:"{taxTerm, select, GST {\u0E44\u0E21\u0E48\u0E23\u0E27\u0E21\u0E20\u0E32\u0E29\u0E35 GST} VAT {\u0E44\u0E21\u0E48\u0E23\u0E27\u0E21 VAT} TAX {\u0E44\u0E21\u0E48\u0E23\u0E27\u0E21\u0E20\u0E32\u0E29\u0E35} IVA {\u0E44\u0E21\u0E48\u0E23\u0E27\u0E21 IVA} SST {\u0E44\u0E21\u0E48\u0E23\u0E27\u0E21 SST} KDV {\u0E44\u0E21\u0E48\u0E23\u0E27\u0E21 KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {\u0E23\u0E27\u0E21\u0E20\u0E32\u0E29\u0E35 GST} VAT {\u0E23\u0E27\u0E21 VAT} TAX {\u0E23\u0E27\u0E21\u0E20\u0E32\u0E29\u0E35} IVA {\u0E23\u0E27\u0E21 IVA} SST {\u0E23\u0E27\u0E21 SST} KDV {\u0E23\u0E27\u0E21 KDV} other {}}",alternativePriceAriaLabel:"\u0E23\u0E32\u0E04\u0E32\u0E1E\u0E34\u0E40\u0E28\u0E29 {alternativePrice}",strikethroughAriaLabel:"\u0E23\u0E32\u0E04\u0E32\u0E1B\u0E01\u0E15\u0E34 {strikethroughPrice}"},{lang:"el",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u03BC\u03AE\u03BD\u03B1} YEAR {/\u03AD\u03C4\u03BF\u03C2} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u03BA\u03AC\u03B8\u03B5 \u03BC\u03AE\u03BD\u03B1} YEAR {\u03B1\u03BD\u03AC \u03AD\u03C4\u03BF\u03C2} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u03B1\u03BD\u03AC \u03AC\u03B4\u03B5\u03B9\u03B1 \u03C7\u03C1\u03AE\u03C3\u03B7\u03C2} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u03B1\u03BD\u03AC \u03AC\u03B4\u03B5\u03B9\u03B1 \u03C7\u03C1\u03AE\u03C3\u03B7\u03C2} other {}}",freeLabel:"\u0394\u03C9\u03C1\u03B5\u03AC\u03BD",freeAriaLabel:"\u0394\u03C9\u03C1\u03B5\u03AC\u03BD",taxExclusiveLabel:"{taxTerm, select, GST {(\u03BC\u03B7 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 GST)} VAT {(\u03BC\u03B7 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03A6\u03A0\u0391)} TAX {(\u03BC\u03B7 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C6\u03CC\u03C1\u03BF)} IVA {(\u03BC\u03B7 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 IVA)} SST {(\u03BC\u03B7 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 SST)} KDV {(\u03BC\u03B7 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 KDV)} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {(\u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C4\u03BF\u03C5 GST)} VAT {(\u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03A6\u03A0\u0391)} TAX {(\u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C4\u03BF\u03C5 \u03C6\u03CC\u03C1\u03BF\u03C5)} IVA {(\u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C4\u03BF\u03C5 IVA)} SST {(\u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C4\u03BF\u03C5 SST)} KDV {(\u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C4\u03BF\u03C5 KDV)} other {}}",alternativePriceAriaLabel:"\u0394\u03B9\u03B1\u03C6\u03BF\u03C1\u03B5\u03C4\u03B9\u03BA\u03AC, {alternativePrice}",strikethroughAriaLabel:"\u039A\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03AE \u03C4\u03B9\u03BC\u03AE {strikethroughPrice}"},{lang:"fil",recurrenceLabel:"{recurrenceTerm, select, MONTH {/buwan} YEAR {/taon} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per buwan} YEAR {per taon} other {}}",perUnitLabel:"{perUnit, select, LICENSE {kada lisensya} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {kada lisensya} other {}}",freeLabel:"Libre",freeAriaLabel:"Libre",taxExclusiveLabel:"{taxTerm, select, GST {hindi kasama ang GST} VAT {hindi kasama ang VAT} TAX {hindi kasama ang Buwis} IVA {hindi kasama ang IVA} SST {hindi kasama ang SST} KDV {hindi kasama ang KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {kasama ang GST} VAT {kasama ang VAT} TAX {kasama ang Buwis} IVA {kasama ang IVA} SST {kasama ang SST} KDV {kasama ang KDV} other {}}",alternativePriceAriaLabel:"Alternatibong nasa halagang {alternativePrice}",strikethroughAriaLabel:"Regular na nasa halagang {strikethroughPrice}"},{lang:"ms",recurrenceLabel:"{recurrenceTerm, select, MONTH {/bulan} YEAR {/tahun} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per bulan} YEAR {per tahun} other {}}",perUnitLabel:"{perUnit, select, LICENSE {setiap lesen} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {setiap lesen} other {}}",freeLabel:"Percuma",freeAriaLabel:"Percuma",taxExclusiveLabel:"{taxTerm, select, GST {kecuali GST} VAT {kecuali VAT} TAX {kecuali Cukai} IVA {kecuali IVA} SST {kecuali SST} KDV {kecuali KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {termasuk GST} VAT {termasuk VAT} TAX {termasuk Cukai} IVA {termasuk IVA} SST {termasuk SST} KDV {termasuk KDV} other {}}",alternativePriceAriaLabel:"Secara alternatif pada {alternativePrice}",strikethroughAriaLabel:"Biasanya pada {strikethroughPrice}"},{lang:"hi",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u092E\u093E\u0939} YEAR {/\u0935\u0930\u094D\u0937} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per \u092E\u093E\u0939} YEAR {per \u0935\u0930\u094D\u0937} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u092A\u094D\u0930\u0924\u093F \u0932\u093E\u0907\u0938\u0947\u0902\u0938} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u092A\u094D\u0930\u0924\u093F \u0932\u093E\u0907\u0938\u0947\u0902\u0938} other {}}",freeLabel:"\u092B\u093C\u094D\u0930\u0940",freeAriaLabel:"\u092B\u093C\u094D\u0930\u0940",taxExclusiveLabel:"{taxTerm, select, GST {GST \u0905\u0924\u093F\u0930\u093F\u0915\u094D\u0924} VAT {VAT \u0905\u0924\u093F\u0930\u093F\u0915\u094D\u0924} TAX {\u0915\u0930 \u0905\u0924\u093F\u0930\u093F\u0915\u094D\u0924} IVA {IVA \u0905\u0924\u093F\u0930\u093F\u0915\u094D\u0924} SST {SST \u0905\u0924\u093F\u0930\u093F\u0915\u094D\u0924} KDV {KDV \u0905\u0924\u093F\u0930\u093F\u0915\u094D\u0924} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {GST \u0938\u0939\u093F\u0924} VAT {VAT \u0938\u0939\u093F\u0924} TAX {\u0915\u0930 \u0938\u0939\u093F\u0924} IVA {IVA \u0938\u0939\u093F\u0924} SST {SST \u0938\u0939\u093F\u0924} KDV {KDV \u0938\u0939\u093F\u0924} other {}}",alternativePriceAriaLabel:"\u0935\u0948\u0915\u0932\u094D\u092A\u093F\u0915 \u0930\u0942\u092A \u0938\u0947 \u0907\u0938 \u092A\u0930 {alternativePrice}",strikethroughAriaLabel:"\u0928\u093F\u092F\u092E\u093F\u0924 \u0930\u0942\u092A \u0938\u0947 \u0907\u0938 \u092A\u0930 {strikethroughPrice}"},{lang:"iw",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u05D7\u05D5\u05D3\u05E9} YEAR {/\u05E9\u05E0\u05D4} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u05DC\u05D7\u05D5\u05D3\u05E9} YEAR {\u05DC\u05E9\u05E0\u05D4} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u05DC\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u05DC\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF} other {}}",freeLabel:"\u05D7\u05D9\u05E0\u05DD",freeAriaLabel:"\u05D7\u05D9\u05E0\u05DD",taxExclusiveLabel:'{taxTerm, select, GST {\u05DC\u05DC\u05D0 GST} VAT {\u05DC\u05DC\u05D0 \u05DE\u05E2"\u05DE} TAX {\u05DC\u05DC\u05D0 \u05DE\u05E1} IVA {\u05DC\u05DC\u05D0 IVA} SST {\u05DC\u05DC\u05D0 SST} KDV {\u05DC\u05DC\u05D0 KDV} other {}}',taxInclusiveLabel:'{taxTerm, select, GST {\u05DB\u05D5\u05DC\u05DC GST} VAT {\u05DB\u05D5\u05DC\u05DC \u05DE\u05E2"\u05DE} TAX {\u05DB\u05D5\u05DC\u05DC \u05DE\u05E1} IVA {\u05DB\u05D5\u05DC\u05DC IVA} SST {\u05DB\u05D5\u05DC\u05DC SST} KDV {\u05DB\u05D5\u05DC\u05DC KDV} other {}}',alternativePriceAriaLabel:"\u05DC\u05D7\u05DC\u05D5\u05E4\u05D9\u05DF \u05D1-{alternativePrice}",strikethroughAriaLabel:"\u05D1\u05D0\u05D5\u05E4\u05DF \u05E7\u05D1\u05D5\u05E2 \u05D1-{strikethroughPrice}"}],":type":"sheet"}});(function(){let r={clientId:"",endpoint:"https://www.adobe.com/lana/ll",endpointStage:"https://www.stage.adobe.com/lana/ll",errorType:"e",sampleRate:1,tags:"",implicitSampleRate:1,useProd:!0,isProdDomain:!1},n=window;function i(){let{host:h}=window.location;return h.substring(h.length-10)===".adobe.com"&&h.substring(h.length-15)!==".corp.adobe.com"&&h.substring(h.length-16)!==".stage.adobe.com"}function o(h,d){h||(h={}),d||(d={});function u(m){return h[m]!==void 0?h[m]:d[m]!==void 0?d[m]:r[m]}return Object.keys(r).reduce((m,f)=>(m[f]=u(f),m),{})}function a(h,d){h=h&&h.stack?h.stack:h||"",h.length>2e3&&(h=`${h.slice(0,2e3)}`);let u=o(d,n.lana.options);if(!u.clientId){console.warn("LANA ClientID is not set in options.");return}let f=parseInt(new URL(window.location).searchParams.get("lana-sample"),10)||(u.errorType==="i"?u.implicitSampleRate:u.sampleRate);if(!n.lana.debug&&!n.lana.localhost&&f<=Math.random()*100)return;let g=i()||u.isProdDomain,T=!g||!u.useProd?u.endpointStage:u.endpoint,P=[`m=${encodeURIComponent(h)}`,`c=${encodeURI(u.clientId)}`,`s=${f}`,`t=${encodeURI(u.errorType)}`];if(u.tags&&P.push(`tags=${encodeURI(u.tags)}`),(!g||n.lana.debug||n.lana.localhost)&&console.log("LANA Msg: ",h,` +Opts:`,u),!n.lana.localhost||n.lana.debug){let x=new XMLHttpRequest;return n.lana.debug&&(P.push("d"),x.addEventListener("load",()=>{console.log("LANA response:",x.responseText)})),x.open("GET",`${T}?${P.join("&")}`),x.send(),x}}function s(h){a(h.reason||h.error||h.message,{errorType:"i"})}function c(){return n.location.search.toLowerCase().indexOf("lanadebug")!==-1}function l(){return n.location.host.toLowerCase().indexOf("localhost")!==-1}n.lana={debug:!1,log:a,options:o(n.lana&&n.lana.options)},c()&&(n.lana.debug=!0),l()&&(n.lana.localhost=!0),n.addEventListener("error",s),n.addEventListener("unhandledrejection",s)})();var cr=window,hr=cr.ShadowRoot&&(cr.ShadyCSS===void 0||cr.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,so=Symbol(),ao=new WeakMap,lr=class{constructor(t,r,n){if(this._$cssResult$=!0,n!==so)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=r}get styleSheet(){let t=this.o,r=this.t;if(hr&&t===void 0){let n=r!==void 0&&r.length===1;n&&(t=ao.get(r)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),n&&ao.set(r,t))}return t}toString(){return this.cssText}},co=e=>new lr(typeof e=="string"?e:e+"",void 0,so);var Jr=(e,t)=>{hr?e.adoptedStyleSheets=t.map(r=>r instanceof CSSStyleSheet?r:r.styleSheet):t.forEach(r=>{let n=document.createElement("style"),i=cr.litNonce;i!==void 0&&n.setAttribute("nonce",i),n.textContent=r.cssText,e.appendChild(n)})},dr=hr?e=>e:e=>e instanceof CSSStyleSheet?(t=>{let r="";for(let n of t.cssRules)r+=n.cssText;return co(r)})(e):e;var en,ur=window,lo=ur.trustedTypes,ec=lo?lo.emptyScript:"",ho=ur.reactiveElementPolyfillSupport,rn={toAttribute(e,t){switch(t){case Boolean:e=e?ec:null;break;case Object:case Array:e=e==null?e:JSON.stringify(e)}return e},fromAttribute(e,t){let r=e;switch(t){case Boolean:r=e!==null;break;case Number:r=e===null?null:Number(e);break;case Object:case Array:try{r=JSON.parse(e)}catch{r=null}}return r}},uo=(e,t)=>t!==e&&(t==t||e==e),tn={attribute:!0,type:String,converter:rn,reflect:!1,hasChanged:uo},nn="finalized",we=class extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this._$Eu()}static addInitializer(t){var r;this.finalize(),((r=this.h)!==null&&r!==void 0?r:this.h=[]).push(t)}static get observedAttributes(){this.finalize();let t=[];return this.elementProperties.forEach((r,n)=>{let i=this._$Ep(n,r);i!==void 0&&(this._$Ev.set(i,n),t.push(i))}),t}static createProperty(t,r=tn){if(r.state&&(r.attribute=!1),this.finalize(),this.elementProperties.set(t,r),!r.noAccessor&&!this.prototype.hasOwnProperty(t)){let n=typeof t=="symbol"?Symbol():"__"+t,i=this.getPropertyDescriptor(t,n,r);i!==void 0&&Object.defineProperty(this.prototype,t,i)}}static getPropertyDescriptor(t,r,n){return{get(){return this[r]},set(i){let o=this[t];this[r]=i,this.requestUpdate(t,o,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||tn}static finalize(){if(this.hasOwnProperty(nn))return!1;this[nn]=!0;let t=Object.getPrototypeOf(this);if(t.finalize(),t.h!==void 0&&(this.h=[...t.h]),this.elementProperties=new Map(t.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){let r=this.properties,n=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let i of n)this.createProperty(i,r[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){let r=[];if(Array.isArray(t)){let n=new Set(t.flat(1/0).reverse());for(let i of n)r.unshift(dr(i))}else t!==void 0&&r.push(dr(t));return r}static _$Ep(t,r){let n=r.attribute;return n===!1?void 0:typeof n=="string"?n:typeof t=="string"?t.toLowerCase():void 0}_$Eu(){var t;this._$E_=new Promise(r=>this.enableUpdating=r),this._$AL=new Map,this._$Eg(),this.requestUpdate(),(t=this.constructor.h)===null||t===void 0||t.forEach(r=>r(this))}addController(t){var r,n;((r=this._$ES)!==null&&r!==void 0?r:this._$ES=[]).push(t),this.renderRoot!==void 0&&this.isConnected&&((n=t.hostConnected)===null||n===void 0||n.call(t))}removeController(t){var r;(r=this._$ES)===null||r===void 0||r.splice(this._$ES.indexOf(t)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach((t,r)=>{this.hasOwnProperty(r)&&(this._$Ei.set(r,this[r]),delete this[r])})}createRenderRoot(){var t;let r=(t=this.shadowRoot)!==null&&t!==void 0?t:this.attachShadow(this.constructor.shadowRootOptions);return Jr(r,this.constructor.elementStyles),r}connectedCallback(){var t;this.renderRoot===void 0&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(t=this._$ES)===null||t===void 0||t.forEach(r=>{var n;return(n=r.hostConnected)===null||n===void 0?void 0:n.call(r)})}enableUpdating(t){}disconnectedCallback(){var t;(t=this._$ES)===null||t===void 0||t.forEach(r=>{var n;return(n=r.hostDisconnected)===null||n===void 0?void 0:n.call(r)})}attributeChangedCallback(t,r,n){this._$AK(t,n)}_$EO(t,r,n=tn){var i;let o=this.constructor._$Ep(t,n);if(o!==void 0&&n.reflect===!0){let a=(((i=n.converter)===null||i===void 0?void 0:i.toAttribute)!==void 0?n.converter:rn).toAttribute(r,n.type);this._$El=t,a==null?this.removeAttribute(o):this.setAttribute(o,a),this._$El=null}}_$AK(t,r){var n;let i=this.constructor,o=i._$Ev.get(t);if(o!==void 0&&this._$El!==o){let a=i.getPropertyOptions(o),s=typeof a.converter=="function"?{fromAttribute:a.converter}:((n=a.converter)===null||n===void 0?void 0:n.fromAttribute)!==void 0?a.converter:rn;this._$El=o,this[o]=s.fromAttribute(r,a.type),this._$El=null}}requestUpdate(t,r,n){let i=!0;t!==void 0&&(((n=n||this.constructor.getPropertyOptions(t)).hasChanged||uo)(this[t],r)?(this._$AL.has(t)||this._$AL.set(t,r),n.reflect===!0&&this._$El!==t&&(this._$EC===void 0&&(this._$EC=new Map),this._$EC.set(t,n))):i=!1),!this.isUpdatePending&&i&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(r){Promise.reject(r)}let t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach((i,o)=>this[o]=i),this._$Ei=void 0);let r=!1,n=this._$AL;try{r=this.shouldUpdate(n),r?(this.willUpdate(n),(t=this._$ES)===null||t===void 0||t.forEach(i=>{var o;return(o=i.hostUpdate)===null||o===void 0?void 0:o.call(i)}),this.update(n)):this._$Ek()}catch(i){throw r=!1,this._$Ek(),i}r&&this._$AE(n)}willUpdate(t){}_$AE(t){var r;(r=this._$ES)===null||r===void 0||r.forEach(n=>{var i;return(i=n.hostUpdated)===null||i===void 0?void 0:i.call(n)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(t){return!0}update(t){this._$EC!==void 0&&(this._$EC.forEach((r,n)=>this._$EO(n,this[n],r)),this._$EC=void 0),this._$Ek()}updated(t){}firstUpdated(t){}};we[nn]=!0,we.elementProperties=new Map,we.elementStyles=[],we.shadowRootOptions={mode:"open"},ho?.({ReactiveElement:we}),((en=ur.reactiveElementVersions)!==null&&en!==void 0?en:ur.reactiveElementVersions=[]).push("1.6.3");var on,mr=window,Je=mr.trustedTypes,mo=Je?Je.createPolicy("lit-html",{createHTML:e=>e}):void 0,sn="$lit$",be=`lit$${(Math.random()+"").slice(9)}$`,Ao="?"+be,tc=`<${Ao}>`,Pe=document,pr=()=>Pe.createComment(""),Rt=e=>e===null||typeof e!="object"&&typeof e!="function",yo=Array.isArray,rc=e=>yo(e)||typeof e?.[Symbol.iterator]=="function",an=`[ +\f\r]`,Nt=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,po=/-->/g,fo=/>/g,Le=RegExp(`>|${an}(?:([^\\s"'>=/]+)(${an}*=${an}*(?:[^ +\f\r"'\`<>=]|("|')|))|$)`,"g"),go=/'/g,bo=/"/g,Eo=/^(?:script|style|textarea|title)$/i,So=e=>(t,...r)=>({_$litType$:e,strings:t,values:r}),Xh=So(1),qh=So(2),Ot=Symbol.for("lit-noChange"),D=Symbol.for("lit-nothing"),xo=new WeakMap,_e=Pe.createTreeWalker(Pe,129,null,!1);function To(e,t){if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return mo!==void 0?mo.createHTML(t):t}var nc=(e,t)=>{let r=e.length-1,n=[],i,o=t===2?"":"",a=Nt;for(let s=0;s"?(a=i??Nt,d=-1):h[1]===void 0?d=-2:(d=a.lastIndex-h[2].length,l=h[1],a=h[3]===void 0?Le:h[3]==='"'?bo:go):a===bo||a===go?a=Le:a===po||a===fo?a=Nt:(a=Le,i=void 0);let m=a===Le&&e[s+1].startsWith("/>")?" ":"";o+=a===Nt?c+tc:d>=0?(n.push(l),c.slice(0,d)+sn+c.slice(d)+be+m):c+be+(d===-2?(n.push(void 0),s):m)}return[To(e,o+(e[r]||"")+(t===2?"":"")),n]},Mt=class e{constructor({strings:t,_$litType$:r},n){let i;this.parts=[];let o=0,a=0,s=t.length-1,c=this.parts,[l,h]=nc(t,r);if(this.el=e.createElement(l,n),_e.currentNode=this.el.content,r===2){let d=this.el.content,u=d.firstChild;u.remove(),d.append(...u.childNodes)}for(;(i=_e.nextNode())!==null&&c.length0){i.textContent=Je?Je.emptyScript:"";for(let m=0;m2||n[0]!==""||n[1]!==""?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=D}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,r=this,n,i){let o=this.strings,a=!1;if(o===void 0)t=et(this,t,r,0),a=!Rt(t)||t!==this._$AH&&t!==Ot,a&&(this._$AH=t);else{let s=t,c,l;for(t=o[0],c=0;cnew Vt(typeof e=="string"?e:e+"",void 0,mn),_=(e,...t)=>{let r=e.length===1?e[0]:t.reduce((n,i,o)=>n+(a=>{if(a._$cssResult$===!0)return a.cssText;if(typeof a=="number")return a;throw Error("Value passed to 'css' function must be a 'css' function result: "+a+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+e[o+1],e[0]);return new Vt(r,e,mn)},pn=(e,t)=>{br?e.adoptedStyleSheets=t.map(r=>r instanceof CSSStyleSheet?r:r.styleSheet):t.forEach(r=>{let n=document.createElement("style"),i=gr.litNonce;i!==void 0&&n.setAttribute("nonce",i),n.textContent=r.cssText,e.appendChild(n)})},xr=br?e=>e:e=>e instanceof CSSStyleSheet?(t=>{let r="";for(let n of t.cssRules)r+=n.cssText;return xe(r)})(e):e;var fn,vr=window,Lo=vr.trustedTypes,oc=Lo?Lo.emptyScript:"",_o=vr.reactiveElementPolyfillSupport,bn={toAttribute(e,t){switch(t){case Boolean:e=e?oc:null;break;case Object:case Array:e=e==null?e:JSON.stringify(e)}return e},fromAttribute(e,t){let r=e;switch(t){case Boolean:r=e!==null;break;case Number:r=e===null?null:Number(e);break;case Object:case Array:try{r=JSON.parse(e)}catch{r=null}}return r}},Po=(e,t)=>t!==e&&(t==t||e==e),gn={attribute:!0,type:String,converter:bn,reflect:!1,hasChanged:Po},xn="finalized",oe=class extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this._$Eu()}static addInitializer(t){var r;this.finalize(),((r=this.h)!==null&&r!==void 0?r:this.h=[]).push(t)}static get observedAttributes(){this.finalize();let t=[];return this.elementProperties.forEach((r,n)=>{let i=this._$Ep(n,r);i!==void 0&&(this._$Ev.set(i,n),t.push(i))}),t}static createProperty(t,r=gn){if(r.state&&(r.attribute=!1),this.finalize(),this.elementProperties.set(t,r),!r.noAccessor&&!this.prototype.hasOwnProperty(t)){let n=typeof t=="symbol"?Symbol():"__"+t,i=this.getPropertyDescriptor(t,n,r);i!==void 0&&Object.defineProperty(this.prototype,t,i)}}static getPropertyDescriptor(t,r,n){return{get(){return this[r]},set(i){let o=this[t];this[r]=i,this.requestUpdate(t,o,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||gn}static finalize(){if(this.hasOwnProperty(xn))return!1;this[xn]=!0;let t=Object.getPrototypeOf(this);if(t.finalize(),t.h!==void 0&&(this.h=[...t.h]),this.elementProperties=new Map(t.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){let r=this.properties,n=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let i of n)this.createProperty(i,r[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){let r=[];if(Array.isArray(t)){let n=new Set(t.flat(1/0).reverse());for(let i of n)r.unshift(xr(i))}else t!==void 0&&r.push(xr(t));return r}static _$Ep(t,r){let n=r.attribute;return n===!1?void 0:typeof n=="string"?n:typeof t=="string"?t.toLowerCase():void 0}_$Eu(){var t;this._$E_=new Promise(r=>this.enableUpdating=r),this._$AL=new Map,this._$Eg(),this.requestUpdate(),(t=this.constructor.h)===null||t===void 0||t.forEach(r=>r(this))}addController(t){var r,n;((r=this._$ES)!==null&&r!==void 0?r:this._$ES=[]).push(t),this.renderRoot!==void 0&&this.isConnected&&((n=t.hostConnected)===null||n===void 0||n.call(t))}removeController(t){var r;(r=this._$ES)===null||r===void 0||r.splice(this._$ES.indexOf(t)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach((t,r)=>{this.hasOwnProperty(r)&&(this._$Ei.set(r,this[r]),delete this[r])})}createRenderRoot(){var t;let r=(t=this.shadowRoot)!==null&&t!==void 0?t:this.attachShadow(this.constructor.shadowRootOptions);return pn(r,this.constructor.elementStyles),r}connectedCallback(){var t;this.renderRoot===void 0&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(t=this._$ES)===null||t===void 0||t.forEach(r=>{var n;return(n=r.hostConnected)===null||n===void 0?void 0:n.call(r)})}enableUpdating(t){}disconnectedCallback(){var t;(t=this._$ES)===null||t===void 0||t.forEach(r=>{var n;return(n=r.hostDisconnected)===null||n===void 0?void 0:n.call(r)})}attributeChangedCallback(t,r,n){this._$AK(t,n)}_$EO(t,r,n=gn){var i;let o=this.constructor._$Ep(t,n);if(o!==void 0&&n.reflect===!0){let a=(((i=n.converter)===null||i===void 0?void 0:i.toAttribute)!==void 0?n.converter:bn).toAttribute(r,n.type);this._$El=t,a==null?this.removeAttribute(o):this.setAttribute(o,a),this._$El=null}}_$AK(t,r){var n;let i=this.constructor,o=i._$Ev.get(t);if(o!==void 0&&this._$El!==o){let a=i.getPropertyOptions(o),s=typeof a.converter=="function"?{fromAttribute:a.converter}:((n=a.converter)===null||n===void 0?void 0:n.fromAttribute)!==void 0?a.converter:bn;this._$El=o,this[o]=s.fromAttribute(r,a.type),this._$El=null}}requestUpdate(t,r,n){let i=!0;t!==void 0&&(((n=n||this.constructor.getPropertyOptions(t)).hasChanged||Po)(this[t],r)?(this._$AL.has(t)||this._$AL.set(t,r),n.reflect===!0&&this._$El!==t&&(this._$EC===void 0&&(this._$EC=new Map),this._$EC.set(t,n))):i=!1),!this.isUpdatePending&&i&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(r){Promise.reject(r)}let t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach((i,o)=>this[o]=i),this._$Ei=void 0);let r=!1,n=this._$AL;try{r=this.shouldUpdate(n),r?(this.willUpdate(n),(t=this._$ES)===null||t===void 0||t.forEach(i=>{var o;return(o=i.hostUpdate)===null||o===void 0?void 0:o.call(i)}),this.update(n)):this._$Ek()}catch(i){throw r=!1,this._$Ek(),i}r&&this._$AE(n)}willUpdate(t){}_$AE(t){var r;(r=this._$ES)===null||r===void 0||r.forEach(n=>{var i;return(i=n.hostUpdated)===null||i===void 0?void 0:i.call(n)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(t){return!0}update(t){this._$EC!==void 0&&(this._$EC.forEach((r,n)=>this._$EO(n,this[n],r)),this._$EC=void 0),this._$Ek()}updated(t){}firstUpdated(t){}};oe[xn]=!0,oe.elementProperties=new Map,oe.elementStyles=[],oe.shadowRootOptions={mode:"open"},_o?.({ReactiveElement:oe}),((fn=vr.reactiveElementVersions)!==null&&fn!==void 0?fn:vr.reactiveElementVersions=[]).push("1.6.3");var vn,Ar=window,rt=Ar.trustedTypes,Co=rt?rt.createPolicy("lit-html",{createHTML:e=>e}):void 0,yn="$lit$",ve=`lit$${(Math.random()+"").slice(9)}$`,Vo="?"+ve,ac=`<${Vo}>`,Ie=document,Ht=()=>Ie.createComment(""),Ut=e=>e===null||typeof e!="object"&&typeof e!="function",$o=Array.isArray,sc=e=>$o(e)||typeof e?.[Symbol.iterator]=="function",An=`[ +\f\r]`,$t=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,ko=/-->/g,Io=/>/g,Ce=RegExp(`>|${An}(?:([^\\s"'>=/]+)(${An}*=${An}*(?:[^ +\f\r"'\`<>=]|("|')|))|$)`,"g"),No=/'/g,Ro=/"/g,Ho=/^(?:script|style|textarea|title)$/i,Uo=e=>(t,...r)=>({_$litType$:e,strings:t,values:r}),b=Uo(1),rd=Uo(2),Ne=Symbol.for("lit-noChange"),B=Symbol.for("lit-nothing"),Oo=new WeakMap,ke=Ie.createTreeWalker(Ie,129,null,!1);function Do(e,t){if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return Co!==void 0?Co.createHTML(t):t}var cc=(e,t)=>{let r=e.length-1,n=[],i,o=t===2?"":"",a=$t;for(let s=0;s"?(a=i??$t,d=-1):h[1]===void 0?d=-2:(d=a.lastIndex-h[2].length,l=h[1],a=h[3]===void 0?Ce:h[3]==='"'?Ro:No):a===Ro||a===No?a=Ce:a===ko||a===Io?a=$t:(a=Ce,i=void 0);let m=a===Ce&&e[s+1].startsWith("/>")?" ":"";o+=a===$t?c+ac:d>=0?(n.push(l),c.slice(0,d)+yn+c.slice(d)+ve+m):c+ve+(d===-2?(n.push(void 0),s):m)}return[Do(e,o+(e[r]||"")+(t===2?"":"")),n]},Dt=class e{constructor({strings:t,_$litType$:r},n){let i;this.parts=[];let o=0,a=0,s=t.length-1,c=this.parts,[l,h]=cc(t,r);if(this.el=e.createElement(l,n),ke.currentNode=this.el.content,r===2){let d=this.el.content,u=d.firstChild;u.remove(),d.append(...u.childNodes)}for(;(i=ke.nextNode())!==null&&c.length0){i.textContent=rt?rt.emptyScript:"";for(let m=0;m2||n[0]!==""||n[1]!==""?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=B}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,r=this,n,i){let o=this.strings,a=!1;if(o===void 0)t=nt(this,t,r,0),a=!Ut(t)||t!==this._$AH&&t!==Ne,a&&(this._$AH=t);else{let s=t,c,l;for(t=o[0],c=0;c{var n,i;let o=(n=r?.renderBefore)!==null&&n!==void 0?n:t,a=o._$litPart$;if(a===void 0){let s=(i=r?.renderBefore)!==null&&i!==void 0?i:null;o._$litPart$=a=new Bt(t.insertBefore(Ht(),s),s,void 0,r??{})}return a._$AI(e),a};var _n,Pn;var X=class extends oe{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var t,r;let n=super.createRenderRoot();return(t=(r=this.renderOptions).renderBefore)!==null&&t!==void 0||(r.renderBefore=n.firstChild),n}update(t){let r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=Bo(r,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),(t=this._$Do)===null||t===void 0||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),(t=this._$Do)===null||t===void 0||t.setConnected(!1)}render(){return Ne}};X.finalized=!0,X._$litElement$=!0,(_n=globalThis.litElementHydrateSupport)===null||_n===void 0||_n.call(globalThis,{LitElement:X});var Go=globalThis.litElementPolyfillSupport;Go?.({LitElement:X});((Pn=globalThis.litElementVersions)!==null&&Pn!==void 0?Pn:globalThis.litElementVersions=[]).push("3.3.3");var Ae="(max-width: 767px)",yr="(max-width: 1199px)",V="(min-width: 768px)",M="(min-width: 1200px)",q="(min-width: 1600px)";var zo=_` + :host { + --consonant-merch-card-background-color: #fff; + --consonant-merch-card-border: 1px solid var(--consonant-merch-card-border-color); + -webkit-font-smoothing: antialiased; + background-color: var(--consonant-merch-card-background-color); + border-radius: var(--consonant-merch-spacing-xs); + border: var(--consonant-merch-card-border); + box-sizing: border-box; + display: flex; + flex-direction: column; + font-family: var(--merch-body-font-family, 'Adobe Clean'); + grid-template-columns: repeat(auto-fit, minmax(300px, max-content)); + position: relative; + text-align: start; + } + + :host(.placeholder) { + visibility: hidden; + } + + :host([aria-selected]) { + outline: none; + box-shadow: inset 0 0 0 2px var(--color-accent); + } + + .invisible { + visibility: hidden; + } + + :host(:hover) .invisible, + :host(:active) .invisible, + :host(:focus) .invisible { + visibility: visible; + background-image: var(--ellipsis-icon); + cursor: pointer; + } + + .action-menu.always-visible { + visibility: visible; + background-image: var(--ellipsis-icon); + cursor: pointer; + } + + .top-section { + display: flex; + justify-content: flex-start; + align-items: flex-start; + gap: 16px; + } + + .top-section.badge { + min-height: 32px; + } + + .body { + flex: 1; + display: flex; + flex-direction: column; + justify-content: flex-start; + height: 100%; + gap: var(--consonant-merch-spacing-xxs); + padding: var(--consonant-merch-spacing-xs); + } + + footer { + display: flex; + justify-content: flex-end; + box-sizing: border-box; + align-items: flex-end; + width: 100%; + flex-flow: wrap; + gap: var(--consonant-merch-spacing-xs); + + padding: var(--consonant-merch-spacing-xs); + } + + footer.footer-column { + flex-direction: column; + } + + footer.footer-column .secure-transaction-label { + align-self: flex-start; + } + + hr { + background-color: var(--merch-color-grey-200); + border: none; + height: 1px; + width: auto; + margin-top: 0; + margin-bottom: 0; + margin-left: var(--consonant-merch-spacing-xs); + margin-right: var(--consonant-merch-spacing-xs); + } + + div[class$='-badge'] { + position: absolute; + top: 16px; + right: 0; + font-size: var(--type-heading-xxs-size); + font-weight: 500; + max-width: 180px; + line-height: 16px; + text-align: center; + padding: 8px 11px; + border-radius: 5px 0 0 5px; + } + + div[class$='-badge']:dir(rtl) { + left: 0; + right: initial; + padding: 8px 11px; + border-radius: 0 5px 5px 0; + } + + .detail-bg-container { + right: 0; + padding: var(--consonant-merch-spacing-xs); + border-radius: 5px; + font-size: var(--consonant-merch-card-body-font-size); + margin: var(--consonant-merch-spacing-xs); + } + + .action-menu { + display: flex; + width: 32px; + height: 32px; + position: absolute; + top: 16px; + right: 16px; + background-color: #f6f6f6; + background-repeat: no-repeat; + background-position: center; + background-size: 16px 16px; + font-size: 0; + } + .hidden { + visibility: hidden; + } + + #stock-checkbox, + .secure-transaction-label { + font-size: var(--consonant-merch-card-body-xxs-font-size); + line-height: 1.3; + color: var(--merch-color-grey-600); + } + + #stock-checkbox { + display: inline-flex; + align-items: center; + cursor: pointer; + gap: 10px; /*same as spectrum */ + } + + #stock-checkbox > input { + display: none; + } + + #stock-checkbox > span { + display: inline-block; + box-sizing: border-box; + border: 2px solid rgb(117, 117, 117); + border-radius: 2px; + width: 14px; + height: 14px; + } + + #stock-checkbox > input:checked + span { + background: var(--checkmark-icon) no-repeat var(--color-accent); + border-color: var(--color-accent); + } + + .secure-transaction-label { + white-space: nowrap; + display: inline-flex; + gap: var(--consonant-merch-spacing-xxs); + align-items: center; + flex: 1; + line-height: normal; + align-self: center; + } + + .secure-transaction-label::before { + display: inline-block; + content: ''; + width: 12px; + height: 15px; + background: var(--secure-icon) no-repeat; + background-position: center; + background-size: contain; + } + + .checkbox-container { + display: flex; + align-items: center; + gap: var(--consonant-merch-spacing-xxs); + } + + .checkbox-container input[type='checkbox']:checked + .checkmark { + background-color: var(--color-accent); + background-image: var(--checkmark-icon); + border-color: var(--color-accent); + } + + .checkbox-container input[type='checkbox'] { + display: none; + } + + .checkbox-container .checkmark { + position: relative; + display: inline-block; + width: 12px; + height: 12px; + border: 2px solid #757575; + background: #fff; + border-radius: 2px; + cursor: pointer; + margin-top: 2px; + } + + slot[name='icons'] { + display: flex; + gap: 8px; + } + + ::slotted([slot='price']) { + color: var(--consonant-merch-card-price-color); + } +`,Fo=()=>[_` + /* Tablet */ + @media screen and ${xe(V)} { + :host([size='wide']), + :host([size='super-wide']) { + width: 100%; + grid-column: 1 / -1; + } + } + + /* Laptop */ + @media screen and ${xe(M)} { + :host([size='wide']) { + grid-column: span 2; + } + } + `];var ot,Gt=class Gt{constructor(t){p(this,"card");G(this,ot);this.card=t,this.insertVariantStyle()}getContainer(){return K(this,ot,L(this,ot)??this.card.closest('[class*="-merch-cards"]')??this.card.parentElement),L(this,ot)}insertVariantStyle(){if(!Gt.styleMap[this.card.variant]){Gt.styleMap[this.card.variant]=!0;let t=document.createElement("style");t.innerHTML=this.getGlobalCSS(),document.head.appendChild(t)}}updateCardElementMinHeight(t,r){if(!t)return;let n=`--consonant-merch-card-${this.card.variant}-${r}-height`,i=Math.max(0,parseInt(window.getComputedStyle(t).height)||0),o=parseInt(this.getContainer().style.getPropertyValue(n))||0;i>o&&this.getContainer().style.setProperty(n,`${i}px`)}get badge(){let t;if(!(!this.card.badgeBackgroundColor||!this.card.badgeColor||!this.card.badgeText))return this.evergreen&&(t=`border: 1px solid ${this.card.badgeBackgroundColor}; border-right: none;`),b` +
+ ${this.card.badgeText} +
+ `}get cardImage(){return b`
+ + ${this.badge} +
`}getGlobalCSS(){return""}get theme(){return document.querySelector("sp-theme")}get evergreen(){return this.card.classList.contains("intro-pricing")}get promoBottom(){return this.card.classList.contains("promo-bottom")}get headingSelector(){return'[slot="heading-xs"]'}get secureLabelFooter(){let t=this.card.secureLabel?b`${this.card.secureLabel}`:"";return b`
${t}
`}async adjustTitleWidth(){let t=this.card.getBoundingClientRect().width,r=this.card.badgeElement?.getBoundingClientRect().width||0;t===0||r===0||this.card.style.setProperty("--consonant-merch-card-heading-xs-max-width",`${Math.round(t-r-16)}px`)}postCardUpdateHook(){}connectedCallbackHook(){}disconnectedCallbackHook(){}renderLayout(){}get aemFragmentMapping(){}};ot=new WeakMap,p(Gt,"styleMap",{});var C=Gt;function Ko(e,t){let r;return function(){let n=this,i=arguments;clearTimeout(r),r=setTimeout(()=>e.apply(n,i),t)}}function Re(e,t={},r=null,n=null){let i=n?document.createElement(e,{is:n}):document.createElement(e);r instanceof HTMLElement?i.appendChild(r):i.innerHTML=r;for(let[o,a]of Object.entries(t))i.setAttribute(o,a);return i}function Er(){return window.matchMedia("(max-width: 767px)").matches}function Yo(){return window.matchMedia("(max-width: 1024px)").matches}var Yn={};Zs(Yn,{CLASS_NAME_FAILED:()=>On,CLASS_NAME_HIDDEN:()=>dc,CLASS_NAME_PENDING:()=>Mn,CLASS_NAME_RESOLVED:()=>Vn,ERROR_MESSAGE_BAD_REQUEST:()=>Tr,ERROR_MESSAGE_MISSING_LITERALS_URL:()=>Ac,ERROR_MESSAGE_OFFER_NOT_FOUND:()=>$n,EVENT_AEM_ERROR:()=>Me,EVENT_AEM_LOAD:()=>Oe,EVENT_MAS_ERROR:()=>Rn,EVENT_MAS_READY:()=>Nn,EVENT_MERCH_CARD_ACTION_MENU_TOGGLE:()=>In,EVENT_MERCH_CARD_COLLECTION_SHOWMORE:()=>xc,EVENT_MERCH_CARD_COLLECTION_SORT:()=>bc,EVENT_MERCH_CARD_READY:()=>kn,EVENT_MERCH_OFFER_READY:()=>mc,EVENT_MERCH_OFFER_SELECT_READY:()=>Cn,EVENT_MERCH_QUANTITY_SELECTOR_CHANGE:()=>st,EVENT_MERCH_SEARCH_CHANGE:()=>gc,EVENT_MERCH_SIDENAV_SELECT:()=>vc,EVENT_MERCH_STOCK_CHANGE:()=>fc,EVENT_MERCH_STORAGE_CHANGE:()=>Sr,EVENT_OFFER_SELECTED:()=>pc,EVENT_TYPE_FAILED:()=>Hn,EVENT_TYPE_READY:()=>at,EVENT_TYPE_RESOLVED:()=>Un,LOG_NAMESPACE:()=>Dn,Landscape:()=>ce,MODAL_TYPE_3_IN_1:()=>$e,NAMESPACE:()=>hc,PARAM_AOS_API_KEY:()=>yc,PARAM_ENV:()=>Bn,PARAM_LANDSCAPE:()=>Gn,PARAM_WCS_API_KEY:()=>Ec,PROVIDER_ENVIRONMENT:()=>Kn,STATE_FAILED:()=>ae,STATE_PENDING:()=>ye,STATE_RESOLVED:()=>se,TAG_NAME_SERVICE:()=>uc,WCS_PROD_URL:()=>zn,WCS_STAGE_URL:()=>Fn,WORKFLOW_STEP:()=>Ve});var hc="merch",dc="hidden",at="wcms:commerce:ready",uc="mas-commerce-service",mc="merch-offer:ready",Cn="merch-offer-select:ready",kn="merch-card:ready",In="merch-card:action-menu-toggle",pc="merch-offer:selected",fc="merch-stock:change",Sr="merch-storage:change",st="merch-quantity-selector:change",gc="merch-search:change",bc="merch-card-collection:sort",xc="merch-card-collection:showmore",vc="merch-sidenav:select",Oe="aem:load",Me="aem:error",Nn="mas:ready",Rn="mas:error",On="placeholder-failed",Mn="placeholder-pending",Vn="placeholder-resolved",Tr="Bad WCS request",$n="Commerce offer not found",Ac="Literals URL not provided",Hn="mas:failed",Un="mas:resolved",Dn="mas/commerce",Bn="commerce.env",Gn="commerce.landscape",yc="commerce.aosKey",Ec="commerce.wcsKey",zn="https://www.adobe.com/web_commerce_artifact",Fn="https://www.stage.adobe.com/web_commerce_artifact_stage",ae="failed",ye="pending",se="resolved",ce={DRAFT:"DRAFT",PUBLISHED:"PUBLISHED"},Ve={CHECKOUT:"checkout",CHECKOUT_EMAIL:"checkout/email",SEGMENTATION:"segmentation",BUNDLE:"bundle",COMMITMENT:"commitment",RECOMMENDATION:"recommendation",EMAIL:"email",PAYMENT:"payment",CHANGE_PLAN_TEAM_PLANS:"change-plan/team-upgrade/plans",CHANGE_PLAN_TEAM_PAYMENT:"change-plan/team-upgrade/payment"},Kn={PRODUCTION:"PRODUCTION"},$e={TWP:"twp",D2P:"d2p",CRM:"crm"};var jo=` +:root { + --consonant-merch-card-catalog-width: 276px; + --consonant-merch-card-catalog-icon-size: 40px; +} +.one-merch-card.catalog, +.two-merch-cards.catalog, +.three-merch-cards.catalog, +.four-merch-cards.catalog { + grid-template-columns: var(--consonant-merch-card-catalog-width); +} + +@media screen and ${V} { + :root { + --consonant-merch-card-catalog-width: 302px; + } + + .two-merch-cards.catalog, + .three-merch-cards.catalog, + .four-merch-cards.catalog { + grid-template-columns: repeat(2, var(--consonant-merch-card-catalog-width)); + } +} + +@media screen and ${M} { + :root { + --consonant-merch-card-catalog-width: 276px; + } + + .three-merch-cards.catalog, + .four-merch-cards.catalog { + grid-template-columns: repeat(3, var(--consonant-merch-card-catalog-width)); + } +} + +@media screen and ${q} { + .four-merch-cards.catalog { + grid-template-columns: repeat(4, var(--consonant-merch-card-catalog-width)); + } +} + +merch-card[variant="catalog"] [slot="action-menu-content"] { + background-color: #000; + color: var(--color-white, #fff); + font-size: var(--consonant-merch-card-body-xs-font-size); + width: fit-content; + padding: var(--consonant-merch-spacing-xs); + border-radius: var(--consonant-merch-spacing-xxxs); + position: absolute; + top: 55px; + right: 15px; + line-height: var(--consonant-merch-card-body-line-height); +} + +merch-card[variant="catalog"] [slot="action-menu-content"] ul { + padding-left: 0; + padding-bottom: var(--consonant-merch-spacing-xss); + margin-top: 0; + margin-bottom: 0; + list-style-position: inside; + list-style-type: '\u2022 '; +} + +merch-card[variant="catalog"] [slot="action-menu-content"] ul li { + padding-left: 0; + line-height: var(--consonant-merch-card-body-line-height); +} + +merch-card[variant="catalog"] [slot="action-menu-content"] ::marker { + margin-right: 0; +} + +merch-card[variant="catalog"] [slot="action-menu-content"] p { + color: var(--color-white, #fff); +} + +merch-card[variant="catalog"] [slot="action-menu-content"] a { + color: var(--consonant-merch-card-background-color); + text-decoration: underline; +} + +merch-card[variant="catalog"] .payment-details { + font-size: var(--consonant-merch-card-body-font-size); + font-style: italic; + font-weight: 400; + line-height: var(--consonant-merch-card-body-line-height); +}`;var jn={badge:!0,ctas:{slot:"footer",size:"m"},description:{tag:"div",slot:"body-xs"},mnemonics:{size:"l"},prices:{tag:"h3",slot:"heading-xs"},size:["wide","super-wide"],title:{tag:"h3",slot:"heading-xs"}},ct=class extends C{constructor(r){super(r);p(this,"dispatchActionMenuToggle",()=>{this.card.dispatchEvent(new CustomEvent(In,{bubbles:!0,composed:!0,detail:{card:this.card.name,type:"action-menu"}}))});p(this,"toggleActionMenu",r=>{if(!this.actionMenuContentSlot||!r||r.type!=="click"&&r.code!=="Space"&&r.code!=="Enter")return;r.preventDefault(),this.actionMenuContentSlot.classList.toggle("hidden");let n=this.actionMenuContentSlot.classList.contains("hidden");n||this.dispatchActionMenuToggle(),this.setAriaExpanded(this.actionMenu,(!n).toString())});p(this,"toggleActionMenuFromCard",r=>{let n=r?.type==="mouseleave"?!0:void 0;this.card.blur(),this.actionMenu?.classList.remove("always-visible"),this.actionMenuContentSlot&&(n||this.dispatchActionMenuToggle(),this.actionMenuContentSlot.classList.toggle("hidden",n),this.setAriaExpanded(this.actionMenu,"false"))});p(this,"hideActionMenu",r=>{this.actionMenuContentSlot?.classList.add("hidden"),this.setAriaExpanded(this.actionMenu,"false")})}get aemFragmentMapping(){return jn}get actionMenu(){return this.card.shadowRoot.querySelector(".action-menu")}get actionMenuContentSlot(){return this.card.shadowRoot.querySelector('slot[name="action-menu-content"]')}renderLayout(){return b`
+
+ ${this.badge} + +
+ ${this.card.actionMenuContent} + + + + + ${this.promoBottom?"":b``} + + ${this.promoBottom?b``:""} +
+ ${this.secureLabelFooter} + `}getGlobalCSS(){return jo}setAriaExpanded(r,n){r.setAttribute("aria-expanded",n)}connectedCallbackHook(){this.card.addEventListener("mouseleave",this.toggleActionMenuFromCard)}disconnectedCallbackHook(){this.card.removeEventListener("mouseleave",this.toggleActionMenuFromCard)}};p(ct,"variantStyle",_` + :host([variant='catalog']) { + min-height: 330px; + width: var(--consonant-merch-card-catalog-width); + } + + .body .catalog-badge { + display: flex; + height: fit-content; + flex-direction: column; + width: fit-content; + max-width: 140px; + border-radius: 5px; + position: relative; + top: 0; + margin-left: var(--consonant-merch-spacing-xxs); + box-sizing: border-box; + } + `);var Wo=` +:root { + --consonant-merch-card-image-width: 300px; +} + +.one-merch-card.image, +.two-merch-cards.image, +.three-merch-cards.image, +.four-merch-cards.image { + grid-template-columns: var(--consonant-merch-card-image-width); +} + +@media screen and ${V} { + .two-merch-cards.image, + .three-merch-cards.image, + .four-merch-cards.image { + grid-template-columns: repeat(2, var(--consonant-merch-card-image-width)); + } +} + +@media screen and ${M} { + :root { + --consonant-merch-card-image-width: 378px; + --consonant-merch-card-image-width-4clm: 276px; + } + + .three-merch-cards.image { + grid-template-columns: repeat(3, var(--consonant-merch-card-image-width)); + } + + .four-merch-cards.image { + grid-template-columns: repeat(4, var(--consonant-merch-card-image-width-4clm)); + } +} +`;var wr=class extends C{constructor(t){super(t)}getGlobalCSS(){return Wo}renderLayout(){return b`${this.cardImage} +
+ + + + ${this.promoBottom?b``:b``} +
+ ${this.evergreen?b` +
+ +
+ `:b` +
+ ${this.secureLabelFooter} + `}`}};var Xo=` +:root { + --consonant-merch-card-inline-heading-width: 300px; +} + +.one-merch-card.inline-heading, +.two-merch-cards.inline-heading, +.three-merch-cards.inline-heading, +.four-merch-cards.inline-heading { + grid-template-columns: var(--consonant-merch-card-inline-heading-width); +} + +@media screen and ${V} { + .two-merch-cards.inline-heading, + .three-merch-cards.inline-heading, + .four-merch-cards.inline-heading { + grid-template-columns: repeat(2, var(--consonant-merch-card-inline-heading-width)); + } +} + +@media screen and ${M} { + :root { + --consonant-merch-card-inline-heading-width: 378px; + } + + .three-merch-cards.inline-heading, + .four-merch-cards.inline-heading { + grid-template-columns: repeat(3, var(--consonant-merch-card-inline-heading-width)); + } +} + +@media screen and ${q} { + .four-merch-cards.inline-heading { + grid-template-columns: repeat(4, var(--consonant-merch-card-inline-heading-width)); + } +} +`;var Lr=class extends C{constructor(t){super(t)}getGlobalCSS(){return Xo}renderLayout(){return b` ${this.badge} +
+
+ + +
+ +
+ ${this.card.customHr?"":b`
`} ${this.secureLabelFooter}`}};var qo=` + :root { + --consonant-merch-card-mini-compare-chart-icon-size: 32px; + --consonant-merch-card-mini-compare-mobile-cta-font-size: 15px; + --consonant-merch-card-mini-compare-mobile-cta-width: 75px; + --consonant-merch-card-mini-compare-badge-mobile-max-width: 50px; + } + + merch-card[variant="mini-compare-chart"] [slot="heading-m"] { + padding: 0 var(--consonant-merch-spacing-s) 0; + } + + merch-card[variant="mini-compare-chart"].bullet-list [slot="heading-m"] { + padding: var(--consonant-merch-spacing-xxs) var(--consonant-merch-spacing-xs); + font-size: var(--consonant-merch-card-heading-xs-font-size); + } + + merch-card[variant="mini-compare-chart"].bullet-list [slot='heading-m-price'] { + font-size: var(--consonant-merch-card-body-xxl-font-size); + padding: 0 var(--consonant-merch-spacing-xs); + } + + merch-card[variant="mini-compare-chart"] [slot="body-m"] { + padding: var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-s); + } + + merch-card[variant="mini-compare-chart"].bullet-list [slot="body-m"] { + padding: var(--consonant-merch-spacing-xs); + } + + merch-card[variant="mini-compare-chart"] [is="inline-price"] { + display: inline-block; + min-height: 30px; + min-width: 1px; + } + + merch-card[variant="mini-compare-chart"] [slot='callout-content'] { + padding: var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-s) 0px; + } + + merch-card[variant="mini-compare-chart"].bullet-list [slot='callout-content'] { + padding: var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-xs) 0px; + } + + merch-card[variant="mini-compare-chart"] [slot='callout-content'] [is="inline-price"] { + min-height: unset; + } + + merch-card[variant="mini-compare-chart"] [slot="price-commitment"] { + font-size: var(--consonant-merch-card-body-xs-font-size); + padding: 0 var(--consonant-merch-spacing-s); + } + + merch-card[variant="mini-compare-chart"] [slot="price-commitment"] a { + display: inline-block; + height: 27px; + } + + merch-card[variant="mini-compare-chart"] [slot="offers"] { + font-size: var(--consonant-merch-card-body-xs-font-size); + } + + merch-card[variant="mini-compare-chart"] [slot="body-xxs"] { + font-size: var(--consonant-merch-card-body-xs-font-size); + padding: var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-s) 0; + } + + merch-card[variant="mini-compare-chart"].bullet-list [slot="body-xxs"] { + padding: var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-xs) 0; + } + + merch-card[variant="mini-compare-chart"] [slot="promo-text"] { + font-size: var(--consonant-merch-card-body-m-font-size); + padding: var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-s) 0; + } + + merch-card[variant="mini-compare-chart"].bullet-list [slot="promo-text"] { + padding: var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-xs) 0; + } + + merch-card[variant="mini-compare-chart"] [slot="promo-text"] a { + text-decoration: underline; + } + + merch-card[variant="mini-compare-chart"] .action-area { + display: flex; + justify-content: flex-end; + align-items: flex-end; + flex-wrap: wrap; + width: 100%; + gap: var(--consonant-merch-spacing-xs); + } + + merch-card[variant="mini-compare-chart"] [slot="footer-rows"] ul { + margin-block-start: 0px; + margin-block-end: 0px; + padding-inline-start: 0px; + } + + merch-card[variant="mini-compare-chart"] .footer-row-icon { + display: flex; + place-items: center; + } + + merch-card[variant="mini-compare-chart"] .footer-row-icon img { + max-width: initial; + width: var(--consonant-merch-card-mini-compare-chart-icon-size); + height: var(--consonant-merch-card-mini-compare-chart-icon-size); + } + + merch-card[variant="mini-compare-chart"] .footer-rows-title { + font-color: var(--merch-color-grey-80); + font-weight: 700; + padding-block-end: var(--consonant-merch-spacing-xxs); + line-height: var(--consonant-merch-card-body-xs-line-height); + font-size: var(--consonant-merch-card-body-xs-font-size); + } + + merch-card[variant="mini-compare-chart"] .footer-row-cell { + border-top: 1px solid var(--consonant-merch-card-border-color); + display: flex; + gap: var(--consonant-merch-spacing-xs); + justify-content: start; + place-items: center; + padding: var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-s); + margin-block: 0px; + } + + merch-card[variant="mini-compare-chart"] .footer-row-icon-checkmark img { + max-width: initial; + } + + merch-card[variant="mini-compare-chart"] .footer-row-icon-checkmark { + display: flex; + align-items: center; + height: 20px; + } + + merch-card[variant="mini-compare-chart"] .footer-row-cell-checkmark { + display: flex; + gap: var(--consonant-merch-spacing-xs); + justify-content: start; + align-items: flex-start; + margin-block: var(--consonant-merch-spacing-xxxs); + } + + merch-card[variant="mini-compare-chart"] .footer-row-cell-description-checkmark { + font-size: var(--consonant-merch-card-body-xs-font-size); + font-weight: 400; + line-height: var(--consonant-merch-card-body-xs-line-height); + } + + merch-card[variant="mini-compare-chart"] .footer-row-cell-description { + font-size: var(--consonant-merch-card-body-s-font-size); + line-height: var(--consonant-merch-card-body-s-line-height); + } + + merch-card[variant="mini-compare-chart"] .footer-row-cell-description p { + color: var(--merch-color-grey-80); + vertical-align: bottom; + } + + merch-card[variant="mini-compare-chart"] .footer-row-cell-description a { + color: var(--color-accent); + } + + merch-card[variant="mini-compare-chart"] .chevron-icon { + margin-left: 8px; + } + + merch-card[variant="mini-compare-chart"] .checkmark-copy-container { + display: none; + } + + merch-card[variant="mini-compare-chart"] .checkmark-copy-container.open { + display: block; + } + +.one-merch-card.mini-compare-chart { + grid-template-columns: var(--consonant-merch-card-mini-compare-chart-wide-width); + gap: var(--consonant-merch-spacing-xs); +} + +.two-merch-cards.mini-compare-chart, +.three-merch-cards.mini-compare-chart, +.four-merch-cards.mini-compare-chart { + grid-template-columns: repeat(2, var(--consonant-merch-card-mini-compare-chart-width)); + gap: var(--consonant-merch-spacing-xs); +} + +/* mini compare mobile */ +@media screen and ${Ae} { + :root { + --consonant-merch-card-mini-compare-chart-width: 302px; + --consonant-merch-card-mini-compare-chart-wide-width: 302px; + } + + .two-merch-cards.mini-compare-chart, + .three-merch-cards.mini-compare-chart, + .four-merch-cards.mini-compare-chart { + grid-template-columns: var(--consonant-merch-card-mini-compare-chart-width); + gap: var(--consonant-merch-spacing-xs); + } + + merch-card[variant="mini-compare-chart"] [slot='heading-m'] { + font-size: var(--consonant-merch-card-body-s-font-size); + line-height: var(--consonant-merch-card-body-s-line-height); + } + + merch-card[variant="mini-compare-chart"] [slot='heading-m-price'] { + font-size: var(--consonant-merch-card-body-s-font-size); + line-height: var(--consonant-merch-card-body-s-line-height); + } + + merch-card[variant="mini-compare-chart"] [slot='body-m'] { + font-size: var(--consonant-merch-card-body-xs-font-size); + line-height: var(--consonant-merch-card-body-xs-line-height); + } + + merch-card[variant="mini-compare-chart"] [slot="promo-text"] { + font-size: var(--consonant-merch-card-body-xs-font-size); + line-height: var(--consonant-merch-card-body-xs-line-height); + } + merch-card[variant="mini-compare-chart"] .footer-row-cell-description { + font-size: var(--consonant-merch-card-body-xs-font-size); + line-height: var(--consonant-merch-card-body-xs-line-height); + } +} + +@media screen and ${yr} { + merch-card[variant="mini-compare-chart"] [slot='heading-m'] { + font-size: var(--consonant-merch-card-body-s-font-size); + line-height: var(--consonant-merch-card-body-s-line-height); + } + + merch-card[variant="mini-compare-chart"] [slot='heading-m-price'] { + font-size: var(--consonant-merch-card-body-s-font-size); + line-height: var(--consonant-merch-card-body-s-line-height); + } + + merch-card[variant="mini-compare-chart"] [slot='body-m'] { + font-size: var(--consonant-merch-card-body-xs-font-size); + line-height: var(--consonant-merch-card-body-xs-line-height); + } + + merch-card[variant="mini-compare-chart"] [slot="promo-text"] { + font-size: var(--consonant-merch-card-body-xs-font-size); + line-height: var(--consonant-merch-card-body-xs-line-height); + } + + merch-card[variant="mini-compare-chart"] .footer-row-cell-description { + font-size: var(--consonant-merch-card-body-xs-font-size); + line-height: var(--consonant-merch-card-body-xs-line-height); + } +} +@media screen and ${V} { + :root { + --consonant-merch-card-mini-compare-chart-width: 302px; + --consonant-merch-card-mini-compare-chart-wide-width: 302px; + } + + .two-merch-cards.mini-compare-chart { + grid-template-columns: repeat(2, minmax(var(--consonant-merch-card-mini-compare-chart-width), var(--consonant-merch-card-mini-compare-chart-wide-width))); + gap: var(--consonant-merch-spacing-m); + } + + .three-merch-cards.mini-compare-chart, + .four-merch-cards.mini-compare-chart { + grid-template-columns: repeat(2, minmax(var(--consonant-merch-card-mini-compare-chart-width), var(--consonant-merch-card-mini-compare-chart-wide-width))); + } +} + +/* desktop */ +@media screen and ${M} { + :root { + --consonant-merch-card-mini-compare-chart-width: 378px; + --consonant-merch-card-mini-compare-chart-wide-width: 484px; + } + .one-merch-card.mini-compare-chart { + grid-template-columns: var(--consonant-merch-card-mini-compare-chart-wide-width); + } + + .two-merch-cards.mini-compare-chart { + grid-template-columns: repeat(2, var(--consonant-merch-card-mini-compare-chart-wide-width)); + gap: var(--consonant-merch-spacing-m); + } + + .three-merch-cards.mini-compare-chart, + .four-merch-cards.mini-compare-chart { + grid-template-columns: repeat(3, var(--consonant-merch-card-mini-compare-chart-width)); + gap: var(--consonant-merch-spacing-m); + } +} + +@media screen and ${q} { + .four-merch-cards.mini-compare-chart { + grid-template-columns: repeat(4, var(--consonant-merch-card-mini-compare-chart-width)); + } +} + +merch-card .footer-row-cell:nth-child(1) { + min-height: var(--consonant-merch-card-footer-row-1-min-height); +} + +merch-card .footer-row-cell:nth-child(2) { + min-height: var(--consonant-merch-card-footer-row-2-min-height); +} + +merch-card .footer-row-cell:nth-child(3) { + min-height: var(--consonant-merch-card-footer-row-3-min-height); +} + +merch-card .footer-row-cell:nth-child(4) { + min-height: var(--consonant-merch-card-footer-row-4-min-height); +} + +merch-card .footer-row-cell:nth-child(5) { + min-height: var(--consonant-merch-card-footer-row-5-min-height); +} + +merch-card .footer-row-cell:nth-child(6) { + min-height: var(--consonant-merch-card-footer-row-6-min-height); +} + +merch-card .footer-row-cell:nth-child(7) { + min-height: var(--consonant-merch-card-footer-row-7-min-height); +} + +merch-card .footer-row-cell:nth-child(8) { + min-height: var(--consonant-merch-card-footer-row-8-min-height); +} +`;var Sc=32,lt=class extends C{constructor(r){super(r);p(this,"getRowMinHeightPropertyName",r=>`--consonant-merch-card-footer-row-${r}-min-height`);p(this,"getMiniCompareFooter",()=>{let r=this.card.secureLabel?b` + ${this.card.secureLabel}`:b``;return b`
${r}
`})}getGlobalCSS(){return qo}adjustMiniCompareBodySlots(){if(this.card.getBoundingClientRect().width<=2)return;this.updateCardElementMinHeight(this.card.shadowRoot.querySelector(".top-section"),"top-section");let r=["heading-m","body-m","heading-m-price","body-xxs","price-commitment","offers","promo-text","callout-content"];this.card.classList.contains("bullet-list")&&r.push("footer-rows"),r.forEach(i=>this.updateCardElementMinHeight(this.card.shadowRoot.querySelector(`slot[name="${i}"]`),i)),this.updateCardElementMinHeight(this.card.shadowRoot.querySelector("footer"),"footer");let n=this.card.shadowRoot.querySelector(".mini-compare-chart-badge");n&&n.textContent!==""&&this.getContainer().style.setProperty("--consonant-merch-card-mini-compare-chart-top-section-mobile-height","32px")}adjustMiniCompareFooterRows(){if(this.card.getBoundingClientRect().width===0)return;[...this.card.querySelector('[slot="footer-rows"] ul')?.children].forEach((n,i)=>{let o=Math.max(Sc,parseFloat(window.getComputedStyle(n).height)||0),a=parseFloat(this.getContainer().style.getPropertyValue(this.getRowMinHeightPropertyName(i+1)))||0;o>a&&this.getContainer().style.setProperty(this.getRowMinHeightPropertyName(i+1),`${o}px`)})}removeEmptyRows(){this.card.querySelectorAll(".footer-row-cell").forEach(n=>{let i=n.querySelector(".footer-row-cell-description");i&&!i.textContent.trim()&&n.remove()})}renderLayout(){return b`
+ ${this.badge} +
+ + ${this.card.classList.contains("bullet-list")?b` + `:b` + `} + + + + + + ${this.getMiniCompareFooter()} + `}async postCardUpdateHook(){Er()?this.removeEmptyRows():(await Promise.all(this.card.prices.map(r=>r.onceSettled())),this.adjustMiniCompareBodySlots(),this.adjustMiniCompareFooterRows())}};p(lt,"variantStyle",_` + :host([variant='mini-compare-chart']) > slot:not([name='icons']) { + display: block; + } + :host([variant='mini-compare-chart']) footer { + min-height: var(--consonant-merch-card-mini-compare-chart-footer-height); + padding: var(--consonant-merch-spacing-s); + } + + :host([variant='mini-compare-chart'].bullet-list) footer { + flex-flow: column nowrap; + min-height: var(--consonant-merch-card-mini-compare-chart-footer-height); + padding: var(--consonant-merch-spacing-xs); + } + + /* mini-compare card */ + :host([variant='mini-compare-chart']) .top-section { + padding-top: var(--consonant-merch-spacing-s); + padding-inline-start: var(--consonant-merch-spacing-s); + height: var(--consonant-merch-card-mini-compare-chart-top-section-height); + } + + :host([variant='mini-compare-chart'].bullet-list) .top-section { + padding-top: var(--consonant-merch-spacing-xs); + padding-inline-start: var(--consonant-merch-spacing-xs); + } + + :host([variant='mini-compare-chart'].bullet-list) .secure-transaction-label { + align-self: flex-start; + flex: none; + color: var(--merch-color-grey-700); + } + + @media screen and ${xe(yr)} { + [class*'-merch-cards'] :host([variant='mini-compare-chart']) footer { + flex-direction: column; + align-items: stretch; + text-align: center; + } + } + + @media screen and ${xe(M)} { + :host([variant='mini-compare-chart']) footer { + padding: var(--consonant-merch-spacing-xs) + var(--consonant-merch-spacing-s) + var(--consonant-merch-spacing-s) + var(--consonant-merch-spacing-s); + } + } + + :host([variant='mini-compare-chart']) slot[name='footer-rows'] { + flex: 1; + display: flex; + flex-direction: column; + justify-content: end; + } + /* mini-compare card heights for the slots: heading-m, body-m, heading-m-price, price-commitment, offers, promo-text, footer */ + :host([variant='mini-compare-chart']) slot[name='heading-m'] { + min-height: var(--consonant-merch-card-mini-compare-chart-heading-m-height); + } + :host([variant='mini-compare-chart']) slot[name='body-m'] { + min-height: var(--consonant-merch-card-mini-compare-chart-body-m-height); + } + :host([variant='mini-compare-chart']) slot[name='heading-m-price'] { + min-height: var( + --consonant-merch-card-mini-compare-chart-heading-m-price-height + ); + } + :host([variant='mini-compare-chart']) slot[name='body-xxs'] { + min-height: var( + --consonant-merch-card-mini-compare-chart-body-xxs-height + ); + } + :host([variant='mini-compare-chart']) slot[name='price-commitment'] { + min-height: var( + --consonant-merch-card-mini-compare-chart-price-commitment-height + ); + } + :host([variant='mini-compare-chart']) slot[name='offers'] { + min-height: var(--consonant-merch-card-mini-compare-chart-offers-height); + } + :host([variant='mini-compare-chart']) slot[name='promo-text'] { + min-height: var(--consonant-merch-card-mini-compare-chart-promo-text-height); + } + :host([variant='mini-compare-chart']) slot[name='callout-content'] { + min-height: var( + --consonant-merch-card-mini-compare-chart-callout-content-height + ); + } + :host([variant='mini-compare-chart']) slot[name='footer-rows'] { + justify-content: flex-start; + } + `);var Zo=` +:root { + --consonant-merch-card-plans-width: 300px; + --consonant-merch-card-plans-icon-size: 40px; +} + +merch-card[variant="plans"] { + width: 276px; +} + +merch-card[variant="plans"] [slot="description"] { + min-height: 84px; +} + +merch-card[variant="plans"] [slot="quantity-select"] { + display: flex; + justify-content: flex-start; + box-sizing: border-box; + width: 100%; + padding: var(--consonant-merch-spacing-xs); +} + +.one-merch-card.plans, +.two-merch-cards.plans, +.three-merch-cards.plans, +.four-merch-cards.plans { + grid-template-columns: var(--consonant-merch-card-plans-width); +} + +/* Tablet */ +@media screen and ${V} { + :root { + --consonant-merch-card-plans-width: 302px; + } + .two-merch-cards.plans, + .three-merch-cards.plans, + .four-merch-cards.plans { + grid-template-columns: repeat(2, var(--consonant-merch-card-plans-width)); + } + .four-merch-cards.plans .foreground { + max-width: unset; + } +} + +/* desktop */ +@media screen and ${M} { + :root { + --consonant-merch-card-plans-width: 276px; + } + .three-merch-cards.plans { + grid-template-columns: repeat(3, var(--consonant-merch-card-plans-width)); + } + .four-merch-cards.plans { + grid-template-columns: repeat(4, var(--consonant-merch-card-plans-width)); + } +} + +/* Large desktop */ + @media screen and ${q} { + .four-merch-cards.plans { + grid-template-columns: repeat(4, var(--consonant-merch-card-plans-width)); + } +} +`;var Wn={title:{tag:"p",slot:"heading-xs"},prices:{tag:"p",slot:"heading-m"},promoText:{tag:"p",slot:"promo-text"},description:{tag:"div",slot:"body-xs"},mnemonics:{size:"l"},callout:{tag:"div",slot:"callout-content"},quantitySelect:{tag:"div",slot:"quantity-select"},stockOffer:!0,secureLabel:!0,badge:!0,ctas:{slot:"footer",size:"m"},style:"consonant"},ht=class extends C{constructor(t){super(t)}get aemFragmentMapping(){return Wn}getGlobalCSS(){return Zo}postCardUpdateHook(){this.adjustTitleWidth()}get stockCheckbox(){return this.card.checkboxLabel?b``:""}renderLayout(){return b` ${this.badge} +
+ + + + + + + + + + ${this.stockCheckbox} +
+ + ${this.secureLabelFooter}`}};p(ht,"variantStyle",_` + :host([variant='plans']) { + min-height: 348px; + } + + :host([variant='plans']) ::slotted([slot='heading-xs']) { + max-width: var(--consonant-merch-card-heading-xs-max-width, 100%); + } + `);var Qo=` +:root { + --consonant-merch-card-product-width: 300px; +} + +/* grid style for product */ +.one-merch-card.product, +.two-merch-cards.product, +.three-merch-cards.product, +.four-merch-cards.product { + grid-template-columns: var(--consonant-merch-card-product-width); +} + +/* Tablet */ +@media screen and ${V} { + .two-merch-cards.product, + .three-merch-cards.product, + .four-merch-cards.product { + grid-template-columns: repeat(2, var(--consonant-merch-card-product-width)); + } +} + +/* desktop */ +@media screen and ${M} { + :root { + --consonant-merch-card-product-width: 378px; + --consonant-merch-card-product-width-4clm: 276px; + } + + .three-merch-cards.product { + grid-template-columns: repeat(3, var(--consonant-merch-card-product-width)); + } + + .four-merch-cards.product { + grid-template-columns: repeat(4, var(--consonant-merch-card-product-width-4clm)); + } +} +`;var He=class extends C{constructor(t){super(t),this.postCardUpdateHook=this.postCardUpdateHook.bind(this)}getGlobalCSS(){return Qo}adjustProductBodySlots(){if(this.card.getBoundingClientRect().width===0)return;["heading-xs","body-xxs","body-xs","promo-text","callout-content","body-lower"].forEach(r=>this.updateCardElementMinHeight(this.card.shadowRoot.querySelector(`slot[name="${r}"]`),r))}renderLayout(){return b` ${this.badge} +
+ + + + ${this.promoBottom?"":b``} + + ${this.promoBottom?b``:""} + + +
+ ${this.secureLabelFooter}`}connectedCallbackHook(){window.addEventListener("resize",this.postCardUpdateHook)}disconnectedCallbackHook(){window.removeEventListener("resize",this.postCardUpdateHook)}postCardUpdateHook(){this.card.isConnected&&(Er()||this.adjustProductBodySlots(),this.adjustTitleWidth())}};p(He,"variantStyle",_` + :host([variant='product']) > slot:not([name='icons']) { + display: block; + } + :host([variant='product']) slot[name='body-xs'] { + min-height: var(--consonant-merch-card-product-body-xs-height); + display: block; + } + :host([variant='product']) slot[name='heading-xs'] { + min-height: var(--consonant-merch-card-product-heading-xs-height); + display: block; + } + :host([variant='product']) slot[name='body-xxs'] { + min-height: var(--consonant-merch-card-product-body-xxs-height); + display: block; + } + :host([variant='product']) slot[name='promo-text'] { + min-height: var(--consonant-merch-card-product-promo-text-height); + display: block; + } + :host([variant='product']) slot[name='callout-content'] { + min-height: var(--consonant-merch-card-product-callout-content-height); + display: block; + } + + :host([variant='product']) ::slotted([slot='heading-xs']) { + max-width: var(--consonant-merch-card-heading-xs-max-width, 100%); + } + `);var Jo=` +:root { + --consonant-merch-card-segment-width: 378px; +} + +/* grid style for segment */ +.one-merch-card.segment, +.two-merch-cards.segment, +.three-merch-cards.segment, +.four-merch-cards.segment { + grid-template-columns: minmax(276px, var(--consonant-merch-card-segment-width)); +} + +/* Mobile */ +@media screen and ${Ae} { + :root { + --consonant-merch-card-segment-width: 276px; + } +} + +@media screen and ${V} { + :root { + --consonant-merch-card-segment-width: 276px; + } + + .two-merch-cards.segment, + .three-merch-cards.segment, + .four-merch-cards.segment { + grid-template-columns: repeat(2, minmax(276px, var(--consonant-merch-card-segment-width))); + } +} + +/* desktop */ +@media screen and ${M} { + :root { + --consonant-merch-card-segment-width: 302px; + } + + .three-merch-cards.segment { + grid-template-columns: repeat(3, minmax(276px, var(--consonant-merch-card-segment-width))); + } + + .four-merch-cards.segment { + grid-template-columns: repeat(4, minmax(276px, var(--consonant-merch-card-segment-width))); + } +} +`;var dt=class extends C{constructor(t){super(t)}getGlobalCSS(){return Jo}postCardUpdateHook(){this.adjustTitleWidth()}renderLayout(){return b` ${this.badge} +
+ + + ${this.promoBottom?"":b``} + + ${this.promoBottom?b``:""} +
+
+ ${this.secureLabelFooter}`}};p(dt,"variantStyle",_` + :host([variant='segment']) { + min-height: 214px; + } + :host([variant='segment']) ::slotted([slot='heading-xs']) { + max-width: var(--consonant-merch-card-heading-xs-max-width, 100%); + } + `);var ea=` +:root { + --consonant-merch-card-special-offers-width: 378px; +} + +merch-card[variant="special-offers"] span[is="inline-price"][data-template="strikethrough"] { + font-size: var(--consonant-merch-card-body-xs-font-size); +} + +/* grid style for special-offers */ +.one-merch-card.special-offers, +.two-merch-cards.special-offers, +.three-merch-cards.special-offers, +.four-merch-cards.special-offers { + grid-template-columns: minmax(300px, var(--consonant-merch-card-special-offers-width)); +} + +@media screen and ${Ae} { + :root { + --consonant-merch-card-special-offers-width: 302px; + } +} + +@media screen and ${V} { + :root { + --consonant-merch-card-special-offers-width: 302px; + } + + .two-merch-cards.special-offers, + .three-merch-cards.special-offers, + .four-merch-cards.special-offers { + grid-template-columns: repeat(2, minmax(300px, var(--consonant-merch-card-special-offers-width))); + } +} + +/* desktop */ +@media screen and ${M} { + .three-merch-cards.special-offers, + .four-merch-cards.special-offers { + grid-template-columns: repeat(3, minmax(300px, var(--consonant-merch-card-special-offers-width))); + } +} + +@media screen and ${q} { + .four-merch-cards.special-offers { + grid-template-columns: repeat(4, minmax(300px, var(--consonant-merch-card-special-offers-width))); + } +} +`;var Xn={name:{tag:"h4",slot:"detail-m"},title:{tag:"h4",slot:"detail-m"},backgroundImage:{tag:"div",slot:"bg-image"},prices:{tag:"h3",slot:"heading-xs"},description:{tag:"div",slot:"body-xs"},ctas:{slot:"footer",size:"l"}},ut=class extends C{constructor(t){super(t)}getGlobalCSS(){return ea}get headingSelector(){return'[slot="detail-m"]'}get aemFragmentMapping(){return Xn}renderLayout(){return b`${this.cardImage} +
+ + + +
+ ${this.evergreen?b` +
+ +
+ `:b` +
+ ${this.secureLabelFooter} + `} + `}};p(ut,"variantStyle",_` + :host([variant='special-offers']) { + min-height: 439px; + } + + :host([variant='special-offers']) { + width: var(--consonant-merch-card-special-offers-width); + } + + :host([variant='special-offers'].center) { + text-align: center; + } + `);var ta=` +:root { + --consonant-merch-card-twp-width: 268px; + --consonant-merch-card-twp-mobile-width: 300px; + --consonant-merch-card-twp-mobile-height: 358px; +} + +merch-card[variant="twp"] div[class$='twp-badge'] { + padding: 4px 10px 5px 10px; +} + +merch-card[variant="twp"] [slot="body-xs-top"] { + font-size: var(--consonant-merch-card-body-xs-font-size); + line-height: var(--consonant-merch-card-body-xs-line-height); + color: var(--merch-color-grey-80); +} + +merch-card[variant="twp"] [slot="body-xs"] ul { + padding: 0; + margin: 0; +} + +merch-card[variant="twp"] [slot="body-xs"] ul li { + list-style-type: none; + padding-left: 0; +} + +merch-card[variant="twp"] [slot="body-xs"] ul li::before { + content: '\xB7'; + font-size: 20px; + padding-right: 5px; + font-weight: bold; +} + +merch-card[variant="twp"] [slot="footer"] { + font-size: var(--consonant-merch-card-body-xs-font-size); + line-height: var(--consonant-merch-card-body-xs-line-height); + padding: var(--consonant-merch-spacing-s); + var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-xs); + color: var(--merch-color-grey-80); + display: flex; + flex-flow: wrap; +} + +merch-card[variant='twp'] merch-quantity-select, +merch-card[variant='twp'] merch-offer-select { + display: none; +} + +.one-merch-card.twp, +.two-merch-cards.twp, +.three-merch-cards.twp { + grid-template-columns: var(--consonant-merch-card-image-width); +} + +@media screen and ${Ae} { + :root { + --consonant-merch-card-twp-width: 300px; + } + .one-merch-card.twp, + .two-merch-cards.twp, + .three-merch-cards.twp { + grid-template-columns: repeat(1, var(--consonant-merch-card-twp-mobile-width)); + } +} + +@media screen and ${V} { + :root { + --consonant-merch-card-twp-width: 268px; + } + .one-merch-card.twp, + .two-merch-cards.twp { + grid-template-columns: repeat(2, var(--consonant-merch-card-twp-width)); + } + .three-merch-cards.twp { + grid-template-columns: repeat(3, var(--consonant-merch-card-twp-width)); + } +} + +@media screen and ${M} { + :root { + --consonant-merch-card-twp-width: 268px; + } + .one-merch-card.twp + .two-merch-cards.twp { + grid-template-columns: repeat(2, var(--consonant-merch-card-twp-width)); + } + .three-merch-cards.twp { + grid-template-columns: repeat(3, var(--consonant-merch-card-twp-width)); + } +} + +@media screen and ${q} { + .one-merch-card.twp + .two-merch-cards.twp { + grid-template-columns: repeat(2, var(--consonant-merch-card-twp-width)); + } + .three-merch-cards.twp { + grid-template-columns: repeat(3, var(--consonant-merch-card-twp-width)); + } +} +`;var mt=class extends C{constructor(t){super(t)}getGlobalCSS(){return ta}renderLayout(){return b`${this.badge} +
+ + + +
+
+ +
+
`}};p(mt,"variantStyle",_` + :host([variant='twp']) { + padding: 4px 10px 5px 10px; + } + .twp-badge { + padding: 4px 10px 5px 10px; + } + + :host([variant='twp']) ::slotted(merch-offer-select) { + display: none; + } + + :host([variant='twp']) .top-section { + flex: 0; + display: flex; + flex-direction: column; + justify-content: flex-start; + height: 100%; + gap: var(--consonant-merch-spacing-xxs); + padding: var(--consonant-merch-spacing-xs) + var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-xs) + var(--consonant-merch-spacing-xs); + align-items: flex-start; + } + + :host([variant='twp']) .body { + padding: 0 var(--consonant-merch-spacing-xs); + } + + :host([aria-selected]) .twp-badge { + margin-inline-end: 2px; + padding-inline-end: 9px; + } + + :host([variant='twp']) footer { + gap: var(--consonant-merch-spacing-xxs); + flex-direction: column; + align-self: flex-start; + } + `);var ra=` + + merch-card[variant="ccd-suggested"] [slot="heading-xs"] { + font-size: var(--consonant-merch-card-heading-xxs-font-size); + line-height: var(--consonant-merch-card-heading-xxs-line-height); + } + + merch-card[variant="ccd-suggested"] [slot="body-xs"] a { + font-size: var(--consonant-merch-card-body-xxs-font-size); + line-height: var(--consonant-merch-card-body-xxs-line-height); + } + + merch-card[variant="ccd-suggested"] [slot="price"] em { + font-size: var(--consonant-merch-card-body-xxs-font-size); + line-height: var(--consonant-merch-card-body-xxs-line-height); + } + +.spectrum--darkest merch-card[variant="ccd-suggested"] { + --consonant-merch-card-background-color:rgb(30, 30, 30); + --consonant-merch-card-heading-xs-color:rgb(239, 239, 239); + --consonant-merch-card-body-xs-color:rgb(200, 200, 200); + --consonant-merch-card-border-color:rgb(57, 57, 57); + --consonant-merch-card-detail-s-color:rgb(162, 162, 162); + --consonant-merch-card-price-color:rgb(248, 248, 248); + --merch-color-inline-price-strikethrough:rgb(176, 176, 176); +} + +.spectrum--darkest merch-card[variant="ccd-suggested"]:hover { + --consonant-merch-card-border-color:rgb(73, 73, 73); +} +`;var qn={backgroundImage:{attribute:"background-image"},badge:!0,ctas:{slot:"cta",size:"M"},description:{tag:"div",slot:"body-xs"},mnemonics:{size:"l"},prices:{tag:"p",slot:"price"},size:[],subtitle:{tag:"h4",slot:"detail-s"},title:{tag:"h3",slot:"heading-xs"}},pt=class extends C{getGlobalCSS(){return ra}get aemFragmentMapping(){return qn}get stripStyle(){return this.card.backgroundImage?` + background: url("${this.card.backgroundImage}"); + background-size: auto 100%; + background-repeat: no-repeat; + background-position: ${this.card.dir==="ltr"?"left":"right"}; + `:""}renderLayout(){return b`
+
+
+ + ${this.badge} +
+
+ + +
+
+ + +
+ `}postCardUpdateHook(t){t.has("backgroundImage")&&this.styleBackgroundImage()}styleBackgroundImage(){if(this.card.classList.remove("thin-strip"),this.card.classList.remove("wide-strip"),!this.card.backgroundImage)return;let t=new Image;t.src=this.card.backgroundImage,t.onload=()=>{t.width>8?this.card.classList.add("wide-strip"):t.width===8&&this.card.classList.add("thin-strip")}}};p(pt,"variantStyle",_` + :host([variant='ccd-suggested']) { + --consonant-merch-card-background-color: rgb(245, 245, 245); + --consonant-merch-card-body-xs-color: rgb(75, 75, 75); + --consonant-merch-card-border-color: rgb(225, 225, 225); + --consonant-merch-card-detail-s-color: rgb(110, 110, 110); + --consonant-merch-card-heading-xs-color: rgb(44, 44, 44); + --merch-color-inline-price-strikethrough: var(--spectrum-gray-600); + --mod-img-height: 38px; + + box-sizing: border-box; + width: 100%; + max-width: 305px; + min-width: 270px; + min-height: 205px; + border-radius: 4px; + display: flex; + flex-flow: wrap; + overflow: hidden; + } + + :host([variant='ccd-slice']) * { + overflow: hidden; + } + + :host([variant='ccd-suggested']:hover) { + --consonant-merch-card-border-color: #cacaca; + } + + :host([variant='ccd-suggested']) .body { + height: auto; + padding: 20px; + gap: 0; + } + + :host([variant='ccd-suggested'].thin-strip) .body { + padding: 20px 20px 20px 28px; + } + + :host([variant='ccd-suggested']) .header { + display: flex; + flex-flow: wrap; + place-self: flex-start; + flex-wrap: nowrap; + } + + :host([variant='ccd-suggested']) .headings { + padding-inline-start: var(--consonant-merch-spacing-xxs); + display: flex; + flex-direction: column; + justify-content: space-between; + } + + :host([variant='ccd-suggested']) ::slotted([slot='icons']) { + place-self: center; + } + + :host([variant='ccd-suggested']) ::slotted([slot='heading-xs']) { + font-size: var(--consonant-merch-card-heading-xxs-font-size); + line-height: var(--consonant-merch-card-heading-xxs-line-height); + } + + :host([variant='ccd-suggested']) ::slotted([slot='detail-m']) { + line-height: var(--consonant-merch-card-detail-m-line-height); + } + + :host([variant='ccd-suggested']) ::slotted([slot='body-xs']) { + color: var(--ccd-gray-700-dark); + padding-top: 8px; + flex-grow: 1; + } + + :host([variant='ccd-suggested'].wide-strip) + ::slotted([slot='body-xs']) { + padding-inline-start: 48px; + } + + :host([variant='ccd-suggested'].wide-strip) ::slotted([slot='price']) { + padding-inline-start: 48px; + } + + :host([variant='ccd-suggested']) ::slotted([slot='price']) { + font-size: var(--consonant-merch-card-body-xs-font-size); + line-height: var(--consonant-merch-card-body-xs-line-height); + } + + :host([variant='ccd-suggested']) ::slotted([slot='cta']) { + display: flex; + align-items: center; + min-width: fit-content; + } + + :host([variant='ccd-suggested']) .footer { + display: flex; + justify-content: space-between; + flex-grow: 0; + margin-top: 6px; + align-items: center; + } + + :host([variant='ccd-suggested']) div[class$='-badge'] { + position: static; + border-radius: 4px; + } + + :host([variant='ccd-suggested']) .top-section { + align-items: center; + } + `);var na=` + +merch-card[variant="ccd-slice"] [slot='image'] img { + overflow: hidden; + border-radius: 50%; +} + +merch-card[variant="ccd-slice"] [slot='body-s'] a.spectrum-Link { + font-size: var(--consonant-merch-card-body-xxs-font-size); + font-style: normal; + font-weight: 400; + line-height: var(--consonant-merch-card-body-xxs-line-height); +} + +.spectrum--darkest merch-card[variant="ccd-slice"] { + --consonant-merch-card-background-color:rgb(29, 29, 29); + --consonant-merch-card-body-s-color:rgb(235, 235, 235); + --consonant-merch-card-border-color:rgb(48, 48, 48); + --consonant-merch-card-detail-s-color:rgb(235, 235, 235); +} +`;var Zn={backgroundImage:{tag:"div",slot:"image"},badge:!0,ctas:{slot:"footer",size:"S"},description:{tag:"div",slot:"body-s"},mnemonics:{size:"m"},size:["wide"]},ft=class extends C{getGlobalCSS(){return na}get aemFragmentMapping(){return Zn}renderLayout(){return b`
+
+ + ${this.badge} +
+ + +
+ + `}};p(ft,"variantStyle",_` + :host([variant='ccd-slice']) { + --consonant-merch-card-background-color: rgb(248, 248, 248); + --consonant-merch-card-border-color: rgb(230, 230, 230); + --consonant-merch-card-body-s-color: rgb(34, 34, 34); + --merch-color-inline-price-strikethrough: var(--spectrum-gray-600); + --mod-img-height: 29px; + + box-sizing: border-box; + min-width: 290px; + max-width: 322px; + width: 100%; + max-height: 154px; + height: 154px; + border-radius: 4px; + display: flex; + flex-flow: wrap; + } + + :host([variant='ccd-slice']) * { + overflow: hidden; + } + + :host([variant='ccd-slice']) ::slotted([slot='body-s']) { + font-size: var(--consonant-merch-card-body-xs-font-size); + line-height: var(--consonant-merch-card-body-xxs-line-height); + min-width: 154px; + max-width: 171px; + height: 55px; + overflow: hidden; + } + + :host([variant='ccd-slice'][size='wide']) ::slotted([slot='body-s']) { + max-width: 425px; + display: flex; + flex-direction: column; + justify-content: center; + } + + :host([variant='ccd-slice'][size='wide']) { + width: 600px; + max-width: 600px; + } + + :host([variant='ccd-slice']) .content { + display: flex; + gap: var(--consonant-merch-spacing-xxs); + padding: 15px; + padding-inline-end: 0; + height: 154px; + box-sizing: border-box; + min-height: 123px; + flex-direction: column; + justify-content: space-between; + align-items: flex-start; + flex: 1 0 0; + } + + :host([variant='ccd-slice']) + ::slotted([slot='body-s']) + ::slotted(a:not(.con-button)) { + font-size: var(--consonant-merch-card-body-xxs-font-size); + font-style: normal; + font-weight: 400; + line-height: var(--consonant-merch-card-body-xxs-line-height); + text-decoration-line: underline; + color: var(--spectrum-gray-800, var(--merch-color-grey-80)); + } + + :host([variant='ccd-slice']) ::slotted([slot='image']) { + display: flex; + justify-content: center; + flex-shrink: 0; + width: 134px; + height: 149px; + overflow: hidden; + border-radius: 50%; + padding: 15px; + align-self: center; + padding-inline-start: 0; + } + + :host([variant='ccd-slice']) ::slotted([slot='image']) img { + overflow: hidden; + border-radius: 50%; + width: inherit; + height: inherit; + } + + :host([variant='ccd-slice']) div[class$='-badge'] { + font-size: var(--consonant-merch-card-body-xxs-font-size); + position: static; + border-radius: 4px; + font-style: normal; + font-weight: 400; + line-height: normal; + padding: 4px 9px; + } + + :host([variant='ccd-slice']) .top-section { + align-items: center; + gap: 8px; + } + `);var ia=` + merch-card[variant="ah-try-buy-widget"] [slot="body-xxs"] { + letter-spacing: normal; + margin-bottom: 16px; + box-sizing: border-box; + color: var(--consonant-merch-card-body-xxs-color); + word-wrap: break-word; + overflow-wrap: break-word; + word-break: break-word; + } + + merch-card[variant="ah-try-buy-widget"] [slot="body-xxs"] a { + color: var(--consonant-merch-card-body-xxs-color); + } + + merch-card[variant="ah-try-buy-widget"] [slot="body-xxs"] a:hover { + color: var(--consonant-merch-card-body-xxs-color); + } + + merch-card[variant="ah-try-buy-widget"] [slot="heading-xxxs"] { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + display: -moz-box; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + line-clamp: 3; + -webkit-line-clamp: 3; + } + + merch-card[variant="ah-try-buy-widget"] [slot="price"] .price { + display: inline-block; + height: var(--consonant-merch-card-detail-xl-line-height); + line-height: var(--consonant-merch-card-detail-xl-line-height); + font-style: normal; + margin-top: 4px; + } + + merch-card[variant="ah-try-buy-widget"] [slot="price"] .price.price-strikethrough { + height: var(--consonant-merch-card-detail-l-line-height); + line-height: var(--consonant-merch-card-detail-l-line-height); + font-size: var(--consonant-merch-card-body-xxs-font-size); + text-decoration-thickness: .5px; + color: var(--ah-gray-500); + } + + merch-card[variant="ah-try-buy-widget"] [slot="price"] .price:not(.price-strikethrough) .price-currency-symbol, + merch-card[variant="ah-try-buy-widget"] [slot="price"] .price:not(.price-strikethrough) .price-integer, + merch-card[variant="ah-try-buy-widget"] [slot="price"] .price:not(.price-strikethrough) .price-decimals-delimiter, + merch-card[variant="ah-try-buy-widget"] [slot="price"] .price:not(.price-strikethrough) .price-decimals { + color: var(--consonant-merch-card-heading-xxxs-color); + font-size: var(--consonant-merch-card-heading-xs-font-size); + font-weight: 700; + } + + merch-card[variant="ah-try-buy-widget"] [slot="price"] .price:not(.price-strikethrough) .price-recurrence { + display: inline-block; + width: 21px; + text-align: end; + font-size: var(--consonant-merch-card-body-xxs-font-size); + color: var(--consonant-merch-card-body-xxs-color); + font-weight: 400; + } + + merch-card[variant="ah-try-buy-widget"] [slot="price"] a { + color: var(--consonant-merch-card-body-xxs-color); + font-size: var(--consonant-merch-card-body-xxs-font-size); + font-style: normal; + line-height: var(--consonant-merch-card-body-xxs-line-height); + text-decoration: underline; + text-decoration-thickness: .75px; + text-underline-offset: 1px; + width: fit-content; + margin-top: 4px; + } + + merch-card[variant="ah-try-buy-widget"] [slot="price"] a:hover { + color: var(--consonant-merch-card-body-xxs-color); + font-weight: 700; + } + + merch-card[variant="ah-try-buy-widget"] [slot="cta"] { + align-self: end; + gap: 8px; + display: flex; + padding-top: 24px; + flex-wrap: wrap; + } + + merch-card[variant="ah-try-buy-widget"] [slot="image"] { + display: none; + } + + merch-card[variant="ah-try-buy-widget"][size='single'] [slot="image"] { + display: flex; + width: 199px; + overflow: hidden; + height: 100%; + border-radius: 16px; + order: 1; + } + + merch-card[variant="ah-try-buy-widget"][size='single'] [slot="image"] img { + width: 100%; + object-fit: cover; + border-radius: 16px; + overflow: hidden; + } + + .spectrum--dark merch-card[variant="ah-try-buy-widget"][background-color='gray'], + .spectrum--darkest merch-card[variant="ah-try-buy-widget"][background-color='gray'] { + --merch-card-ah-try-buy-widget-gray-background: rgb(27, 27, 27); + } + + .spectrum--dark merch-card[variant="ah-try-buy-widget"], + .spectrum--darkest merch-card[variant="ah-try-buy-widget"] { + --consonant-merch-card-background-color:rgb(17, 17, 17); + --consonant-merch-card-heading-xxxs-color:rgb(242, 242, 242); + --consonant-merch-card-body-xxs-color:rgb(219, 219, 219); + } + + .spectrum--dark merch-card[variant="ah-try-buy-widget"]:hover, + .spectrum--darkest merch-card[variant="ah-try-buy-widget"]:hover { + --consonant-merch-card-border-color:rgb(73, 73, 73); + } +`;var Qn={mnemonics:{size:"s"},title:{tag:"h3",slot:"heading-xxxs",maxCount:40,withSuffix:!0},description:{tag:"div",slot:"body-xxs",maxCount:200,withSuffix:!1},prices:{tag:"p",slot:"price"},ctas:{slot:"cta",size:"S"},backgroundImage:{tag:"div",slot:"image"},backgroundColor:{attribute:"background-color"},borderColor:{attribute:"border-color"},allowedColors:{gray:"--spectrum-gray-100"},size:["single","double","triple"]},Ue=class extends C{getGlobalCSS(){return ia}get aemFragmentMapping(){return Qn}renderLayout(){return b` +
+
+ + +
+ +
+ +
+ +
+ + + `}};p(Ue,"variantStyle",_` + :host([variant='ah-try-buy-widget']) { + --merch-card-ah-try-buy-widget-min-width: 132px; + --merch-card-ah-try-buy-widget-content-min-width: 132px; + --merch-card-ah-try-buy-widget-header-min-height: 36px; + --merch-card-ah-try-buy-widget-gray-background: rgba(248, 248, 248); + --merch-card-ah-try-buy-widget-text-color: rgba(19, 19, 19); + --merch-card-ah-try-buy-widget-price-line-height: 17px; + --merch-card-ah-try-buy-widget-outline: transparent; + --merch-card-custom-border-width: 1px; + min-width: var(--merch-card-ah-try-buy-widget-min-width); + background-color: var(--merch-card-custom-background-color, var(--consonant-merch-card-background-color)); + color: var(--consonant-merch-card-heading-xxxs-color); + border-radius: 10px; + border: 1px solid var(--merch-card-custom-border-color, transparent); + display: flex; + flex-direction: column; + overflow: hidden; + padding: 12px !important; + gap: 16px; + box-sizing: content-box !important; + justify-content: space-between; + } + + :host([variant='ah-try-buy-widget'][size='single']) { + flex-direction: row; + } + + :host([variant='ah-try-buy-widget'][size='single']) ::slotted(div[slot="cta"]) { + display: flex; + flex-grow: 0; + } + + :host([variant='ah-try-buy-widget']) .content { + display: flex; + flex-direction: column; + justify-content: flex-start; + min-width: var(--merch-card-ah-try-buy-widget-content-min-width); + flex-basis: var(--merch-card-ah-try-buy-widget-content-min-width); + flex-grow: 1; + } + + :host([variant='ah-try-buy-widget']) .header { + display: flex; + min-height: var(--merch-card-ah-try-buy-widget-header-min-height); + flex-direction: row; + align-items: center; + gap: var(--consonant-merch-spacing-xxs); + margin-bottom: 4px; + } + + :host([variant='ah-try-buy-widget']) .price { + display: flex; + flex-grow: 1; + } + + :host([variant='ah-try-buy-widget']) ::slotted([slot='price']) { + margin-left: var(--spacing-xs); + display: flex; + flex-direction: column; + justify-content: end; + font-size: var(--consonant-merch-card-detail-s-font-size); + font-style: italic; + line-height: var(--merch-card-ah-try-buy-widget-price-line-height); + color: var(--consonant-merch-card-heading-xxxs-color); + } + + :host([variant='ah-try-buy-widget']) .footer { + display: flex; + width: fit-content; + flex-wrap: wrap; + gap: 8px; + flex-direction: row; + } + `);customElements.define("ah-try-buy-widget",Ue);var Jn=(e,t=!1)=>{switch(e.variant){case"catalog":return new ct(e);case"image":return new wr(e);case"inline-heading":return new Lr(e);case"mini-compare-chart":return new lt(e);case"plans":return new ht(e);case"product":return new He(e);case"segment":return new dt(e);case"special-offers":return new ut(e);case"twp":return new mt(e);case"ccd-suggested":return new pt(e);case"ccd-slice":return new ft(e);case"ah-try-buy-widget":return new Ue(e);default:return t?void 0:new He(e)}},oa={catalog:jn,image:null,"inline-heading":null,"mini-compare-chart":null,plans:Wn,product:null,segment:null,"special-offers":Xn,twp:null,"ccd-suggested":qn,"ccd-slice":Zn,"ah-try-buy-widget":Qn},aa=()=>{let e=[];return e.push(ct.variantStyle),e.push(lt.variantStyle),e.push(He.variantStyle),e.push(ht.variantStyle),e.push(dt.variantStyle),e.push(ut.variantStyle),e.push(mt.variantStyle),e.push(pt.variantStyle),e.push(ft.variantStyle),e.push(Ue.variantStyle),e};var sa=document.createElement("style");sa.innerHTML=` +:root { + --consonant-merch-card-detail-font-size: 12px; + --consonant-merch-card-detail-font-weight: 500; + --consonant-merch-card-detail-letter-spacing: 0.8px; + + --consonant-merch-card-heading-font-size: 18px; + --consonant-merch-card-heading-line-height: 22.5px; + --consonant-merch-card-heading-secondary-font-size: 14px; + --consonant-merch-card-body-font-size: 14px; + --consonant-merch-card-body-line-height: 21px; + --consonant-merch-card-promo-text-height: var(--consonant-merch-card-body-font-size); + + /* Fonts */ + --merch-body-font-family: 'Adobe Clean', adobe-clean, 'Trebuchet MS', sans-serif; + + /* spacing */ + --consonant-merch-spacing-xxxs: 4px; + --consonant-merch-spacing-xxs: 8px; + --consonant-merch-spacing-xs: 16px; + --consonant-merch-spacing-s: 24px; + --consonant-merch-spacing-m: 32px; + + /* cta */ + --consonant-merch-card-cta-font-size: 15px; + + /* headings */ + --consonant-merch-card-heading-xxxs-font-size: 14px; + --consonant-merch-card-heading-xxxs-line-height: 18px; + --consonant-merch-card-heading-xxs-font-size: 16px; + --consonant-merch-card-heading-xxs-line-height: 20px; + --consonant-merch-card-heading-xs-font-size: 18px; + --consonant-merch-card-heading-xs-line-height: 22.5px; + --consonant-merch-card-heading-s-font-size: 20px; + --consonant-merch-card-heading-s-line-height: 25px; + --consonant-merch-card-heading-m-font-size: 24px; + --consonant-merch-card-heading-m-line-height: 30px; + --consonant-merch-card-heading-l-font-size: 20px; + --consonant-merch-card-heading-l-line-height: 30px; + --consonant-merch-card-heading-xl-font-size: 36px; + --consonant-merch-card-heading-xl-line-height: 45px; + + /* detail */ + --consonant-merch-card-detail-s-font-size: 11px; + --consonant-merch-card-detail-s-line-height: 14px; + --consonant-merch-card-detail-m-font-size: 12px; + --consonant-merch-card-detail-m-line-height: 15px; + --consonant-merch-card-detail-m-font-weight: 700; + --consonant-merch-card-detail-m-letter-spacing: 1px; + --consonant-merch-card-detail-l-line-height: 18px; + --consonant-merch-card-detail-xl-line-height: 23px; + + /* body */ + --consonant-merch-card-body-xxs-font-size: 12px; + --consonant-merch-card-body-xxs-line-height: 18px; + --consonant-merch-card-body-xxs-letter-spacing: 1px; + --consonant-merch-card-body-xs-font-size: 14px; + --consonant-merch-card-body-xs-line-height: 21px; + --consonant-merch-card-body-s-font-size: 16px; + --consonant-merch-card-body-s-line-height: 24px; + --consonant-merch-card-body-m-font-size: 18px; + --consonant-merch-card-body-m-line-height: 27px; + --consonant-merch-card-body-l-font-size: 20px; + --consonant-merch-card-body-l-line-height: 30px; + --consonant-merch-card-body-xl-font-size: 22px; + --consonant-merch-card-body-xxl-font-size: 24px; + --consonant-merch-card-body-xl-line-height: 33px; + + + --consonant-merch-card-heading-padding: 0; + + /* colors */ + --consonant-merch-card-background-color: inherit; + --consonant-merch-card-border-color: #eaeaea; + --color-accent: rgb(59, 99, 251); + --merch-color-focus-ring: #1473E6; + --merch-color-grey-10: #f6f6f6; + --merch-color-grey-50: var(--specturm-gray-50); + --merch-color-grey-60: var(--specturm-gray-600); + --merch-color-grey-80: #2c2c2c; + --merch-color-grey-200: #E8E8E8; + --merch-color-grey-600: #686868; + --merch-color-grey-700: #464646; + --merch-color-green-promo: #2D9D78; + --consonant-merch-card-body-xs-color: var(--spectrum-gray-100, var(--merch-color-grey-80)); + --merch-color-inline-price-strikethrough: initial; + --consonant-merch-card-detail-s-color: var(--spectrum-gray-600, var(--merch-color-grey-600)); + --consonant-merch-card-heading-color: var(--spectrum-gray-800, var(--merch-color-grey-80)); + --consonant-merch-card-heading-xs-color: var(--consonant-merch-card-heading-color); + --consonant-merch-card-price-color: #222222; + --consonant-merch-card-heading-xxxs-color: #131313; + --consonant-merch-card-body-xxs-color: #292929; + + /* ccd colors */ + --ccd-gray-200-light: #E6E6E6; + --ccd-gray-800-dark: #222; + --ccd-gray-700-dark: #464646; + --ccd-gray-600-light: #6D6D6D; + + /* ah colors */ + --ah-gray-500: #717171; + + /* merch card generic */ + --consonant-merch-card-max-width: 300px; + --transition: cmax-height 0.3s linear, opacity 0.3s linear; + + /* background image */ + --consonant-merch-card-bg-img-height: 180px; + + /* inline SVGs */ + --checkmark-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'%3E%3Cpath fill='%23fff' d='M3.788 9A.999.999 0 0 1 3 8.615l-2.288-3a1 1 0 1 1 1.576-1.23l1.5 1.991 3.924-4.991a1 1 0 1 1 1.576 1.23l-4.712 6A.999.999 0 0 1 3.788 9z' class='spectrum-UIIcon--medium'/%3E%3C/svg%3E%0A"); + + --secure-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23757575' viewBox='0 0 12 15'%3E%3Cpath d='M11.5 6H11V5A5 5 0 1 0 1 5v1H.5a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h11a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5ZM3 5a3 3 0 1 1 6 0v1H3Zm4 6.111V12.5a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1.389a1.5 1.5 0 1 1 2 0Z'/%3E%3C/svg%3E"); + + --info-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 36 36'>'); + + /* callout */ + --consonant-merch-card-callout-line-height: 21px; + --consonant-merch-card-callout-font-size: 14px; + --consonant-merch-card-callout-font-color: #2C2C2C; + --consonant-merch-card-callout-icon-size: 16px; + --consonant-merch-card-callout-icon-top: 6px; + --consonant-merch-card-callout-icon-right: 8px; + --consonant-merch-card-callout-letter-spacing: 0px; + --consonant-merch-card-callout-icon-padding: 34px; + --consonant-merch-card-callout-spacing-xxs: 8px; +} + +merch-card-collection { + display: contents; +} + +merch-card-collection > merch-card:not([style]) { + display: none; +} + +merch-card-collection > p[slot], +merch-card-collection > div[slot] p { + margin: 0; +} + +.one-merch-card, +.two-merch-cards, +.three-merch-cards, +.four-merch-cards { + display: grid; + justify-content: center; + justify-items: stretch; + align-items: normal; + gap: var(--consonant-merch-spacing-m); + padding: var(--spacing-m); +} + +merch-card[variant="ccd-suggested"] *, +merch-card[variant="ccd-slice"] * { + box-sizing: border-box; +} + +merch-card * { + padding: revert-layer; +} + +merch-card.background-opacity-70 { + background-color: rgba(255 255 255 / 70%); +} + +merch-card.has-divider hr { + margin: var(--consonant-merch-spacing-xs) 0; + height: 1px; + border: none; +} + +merch-card.has-divider div[slot='body-lower'] hr { + margin: 0; +} + +merch-card p, merch-card h3, merch-card h4 { + margin: 0; +} + +merch-card span[is='inline-price'] { + display: inline-block; +} + +merch-card [slot^='heading-'] { + color: var(--consonant-merch-card-heading-color); + font-weight: 700; +} + +merch-card [slot='heading-xxxs'] { + font-size: var(--consonant-merch-card-heading-xxxs-font-size); + line-height: var(--consonant-merch-card-heading-xxxs-line-height); + color: var(--consonant-merch-card-heading-xxxs-color); + letter-spacing: normal; +} + +merch-card [slot='heading-xs'] { + font-size: var(--consonant-merch-card-heading-xs-font-size); + line-height: var(--consonant-merch-card-heading-xs-line-height); + color: var(--consonant-merch-card-heading-xs-color); + margin: 0; +} + +merch-card.dc-pricing [slot='heading-xs'] { + margin-bottom: var(--consonant-merch-spacing-xxs); +} + +merch-card:not([variant='inline-heading']) [slot='heading-xs'] a { + color: var(--merch-color-grey-80); +} + +merch-card div.starting-at { + font-size: var(--consonant-merch-card-body-xs-font-size); + line-height: var(--consonant-merch-card-body-xs-line-height); + font-weight: 500; +} + +merch-card [slot='heading-xs'] a:not(:hover) { + text-decoration: inherit; +} + +merch-card [slot='heading-s'] { + font-size: var(--consonant-merch-card-heading-s-font-size); + line-height: var(--consonant-merch-card-heading-s-line-height); + margin: 0; +} + +merch-card [slot='heading-m'] { + font-size: var(--consonant-merch-card-heading-m-font-size); + line-height: var(--consonant-merch-card-heading-m-line-height); + margin: 0; +} + +merch-card [slot='heading-m-price'] { + font-size: var(--consonant-merch-card-heading-m-font-size); + line-height: var(--consonant-merch-card-heading-m-line-height); + padding: 0 var(--consonant-merch-spacing-s); + margin: 0; + color: var(--spectrum-gray-800, #2c2c2c); +} + +merch-card [slot='offers'] { + padding: var(--consonant-merch-spacing-xxs) var(--consonant-merch-spacing-s); +} + +merch-card [slot='heading-l'] { + font-size: var(--consonant-merch-card-heading-l-font-size); + line-height: var(--consonant-merch-card-heading-l-line-height); + margin: 0; +} + +merch-card [slot='heading-xl'] { + font-size: var(--consonant-merch-card-heading-xl-font-size); + line-height: var(--consonant-merch-card-heading-xl-line-height); + margin: 0; +} + +merch-card [slot='callout-content'] { + display: flex; + flex-direction: column; + margin: var(--consonant-merch-spacing-xxxs) 0px; + gap: var(--consonant-merch-card-callout-spacing-xxs); +} + +merch-card [slot='callout-content'] > p { + background: rgba(203 203 203 / 50%); + border-radius: var(--consonant-merch-spacing-xxxs); + padding: var(--consonant-merch-spacing-xxxs) var(--consonant-merch-spacing-xxs); + width: fit-content; + font-size: var(--consonant-merch-card-callout-font-size); + line-height: var(--consonant-merch-card-callout-line-height); +} + +merch-card [slot='callout-content'] .icon-button { + position: relative; + top: 3px; +} + +merch-card [slot='callout-content'] .icon-button:before { + display: inline-block; + content: ''; + width: 14px; + height: 14px; + background-image: url('data:image/svg+xml,') +} + +merch-card [slot='callout-content'] > div { + display: flex; + flex-direction: column; + margin: var(--consonant-merch-spacing-xxxs) 0px; + gap: var(--consonant-merch-card-callout-spacing-xxs); + align-items: flex-start; +} + +merch-card [slot='callout-content'] > div > div { + display: flex; + background: rgba(203 203 203 / 50%); + border-radius: var(--consonant-merch-spacing-xxxs); + padding: var(--consonant-merch-spacing-xxxs) var(--consonant-merch-spacing-xxxs) var(--consonant-merch-spacing-xxxs) var(--consonant-merch-spacing-xxs); +} + +merch-card [slot='callout-content'] > div > div > div { + display: inline-block; + text-align: start; + font: normal normal normal var(--consonant-merch-card-callout-font-size)/var(--consonant-merch-card-callout-line-height) var(--body-font-family, 'Adobe Clean'); + letter-spacing: var(--consonant-merch-card-callout-letter-spacing); + color: var(--consonant-merch-card-callout-font-color); +} + +merch-card [slot='callout-content'] img { + width: var(--consonant-merch-card-callout-icon-size); + height: var(--consonant-merch-card-callout-icon-size); + margin-inline-end: 2.5px; + margin-inline-start: 9px; + margin-block-start: 2.5px; +} + +merch-card [slot='detail-s'] { + font-size: var(--consonant-merch-card-detail-s-font-size); + line-height: var(--consonant-merch-card-detail-s-line-height); + letter-spacing: 0.66px; + font-weight: 700; + text-transform: uppercase; + color: var(--consonant-merch-card-detail-s-color); +} + +merch-card [slot='detail-m'] { + font-size: var(--consonant-merch-card-detail-m-font-size); + letter-spacing: var(--consonant-merch-card-detail-m-letter-spacing); + font-weight: var(--consonant-merch-card-detail-m-font-weight); + text-transform: uppercase; + margin: 0; + color: var(--merch-color-grey-80); +} + +merch-card [slot="body-xxs"] { + font-size: var(--consonant-merch-card-body-xxs-font-size); + line-height: var(--consonant-merch-card-body-xxs-line-height); + font-weight: normal; + letter-spacing: var(--consonant-merch-card-body-xxs-letter-spacing); + margin: 0; + color: var(--merch-color-grey-80); +} + +merch-card [slot="body-s"] { + color: var(--consonant-merch-card-body-s-color); +} + +merch-card button.spectrum-Button > a { + color: inherit; + text-decoration: none; +} + +merch-card button.spectrum-Button > a:hover { + color: inherit; +} + +merch-card button.spectrum-Button > a:active { + color: inherit; +} + +merch-card button.spectrum-Button > a:focus { + color: inherit; +} + +merch-card [slot="body-xs"] { + font-size: var(--consonant-merch-card-body-xs-font-size); + line-height: var(--consonant-merch-card-body-xs-line-height); + color: var(--consonant-merch-card-body-xs-color); +} + +merch-card [slot="body-m"] { + font-size: var(--consonant-merch-card-body-m-font-size); + line-height: var(--consonant-merch-card-body-m-line-height); + color: var(--merch-color-grey-80); +} + +merch-card [slot="body-l"] { + font-size: var(--consonant-merch-card-body-l-font-size); + line-height: var(--consonant-merch-card-body-l-line-height); + color: var(--merch-color-grey-80); +} + +merch-card [slot="body-xl"] { + font-size: var(--consonant-merch-card-body-xl-font-size); + line-height: var(--consonant-merch-card-body-xl-line-height); + color: var(--merch-color-grey-80); +} + +merch-card [slot="cci-footer"] p, +merch-card [slot="cct-footer"] p, +merch-card [slot="cce-footer"] p { + margin: 0; +} + +merch-card [slot="promo-text"] { + color: var(--merch-color-green-promo); + font-size: var(--consonant-merch-card-promo-text-height); + font-weight: 700; + line-height: var(--consonant-merch-card-promo-text-height); + margin: 0; + min-height: var(--consonant-merch-card-promo-text-height); + padding: 0; +} + +merch-card [slot="footer-rows"] { + min-height: var(--consonant-merch-card-footer-rows-height); +} + +merch-card div[slot="footer"] { + display: contents; +} + +merch-card.product div[slot="footer"] { + display: block; +} + +merch-card.product div[slot="footer"] a + a { + margin: 5px 0 0 5px; +} + +merch-card [slot="footer"] a { + word-wrap: break-word; + text-align: center; +} + +merch-card [slot="footer"] a:not([class]) { + font-weight: 700; + font-size: var(--consonant-merch-card-cta-font-size); +} + +merch-card div[slot='bg-image'] img { + position: relative; + width: 100%; + min-height: var(--consonant-merch-card-bg-img-height); + max-height: var(--consonant-merch-card-bg-img-height); + object-fit: cover; + border-top-left-radius: 16px; + border-top-right-radius: 16px; +} + +.price-unit-type:not(.disabled)::before, +.price-tax-inclusivity:not(.disabled)::before { + content: "\\00a0"; +} + +merch-card span.placeholder-resolved[data-template='priceStrikethrough'], +merch-card span.placeholder-resolved[data-template='strikethrough'], +merch-card span.price.price-strikethrough { + font-size: var(--consonant-merch-card-body-xs-font-size); + font-weight: normal; + text-decoration: line-through; + color: var(--merch-color-inline-price-strikethrough); +} + +/* merch-offer-select */ +merch-offer-select[variant="subscription-options"] merch-offer span[is="inline-price"][data-display-tax='true'] .price-tax-inclusivity { + font-size: 12px; + font-style: italic; + font-weight: normal; + position: absolute; + left: 0; + top: 20px; +} + +body.merch-modal { + overflow: hidden; + scrollbar-gutter: stable; + height: 100vh; +} + +merch-sidenav-checkbox-group h3 { + font-size: 14px; + height: 32px; + letter-spacing: 0px; + line-height: 18.2px; + color: var(--color-gray-600); + margin: 0px; +} + +`;document.head.appendChild(sa);var da=new CSSStyleSheet;da.replaceSync(":host { display: contents; }");var Tc=document.querySelector('meta[name="aem-base-url"]')?.content??"https://odin.adobe.com",ca="fragment",la="author",wc="ims",ha=e=>{throw new Error(`Failed to get fragment: ${e}`)};async function Lc(e,t,r,n){let i=r?`${e}/adobe/sites/cf/fragments/${t}`:`${e}/adobe/sites/fragments/${t}`,o=await fetch(i,{cache:"default",credentials:"omit",headers:n}).catch(a=>ha(a.message));return o?.ok||ha(`${o.status} ${o.statusText}`),o.json()}var ei,Ee,ti=class{constructor(){G(this,Ee,new Map)}clear(){L(this,Ee).clear()}add(...t){t.forEach(r=>{let{id:n}=r;n&&L(this,Ee).set(n,r)})}has(t){return L(this,Ee).has(t)}get(t){return L(this,Ee).get(t)}remove(t){L(this,Ee).delete(t)}};Ee=new WeakMap;var _r=new ti,De,le,Se,zt,he,gt,de,ni,ua,ma,ri=class extends HTMLElement{constructor(){super();G(this,de);p(this,"cache",_r);G(this,De);G(this,le);G(this,Se);G(this,zt,!1);G(this,he);G(this,gt,!1);this.attachShadow({mode:"open"}),this.shadowRoot.adoptedStyleSheets=[da];let r=this.getAttribute(wc);["",!0,"true"].includes(r)&&(K(this,zt,!0),ei||(ei={Authorization:`Bearer ${window.adobeid?.authorize?.()}`}))}static get observedAttributes(){return[ca,la]}attributeChangedCallback(r,n,i){r===ca&&(K(this,Se,i),this.refresh(!1)),r===la&&K(this,gt,["","true"].includes(i))}connectedCallback(){if(!L(this,Se)){ge(this,de,ni).call(this,"Missing fragment id");return}}async refresh(r=!0){L(this,he)&&!await Promise.race([L(this,he),Promise.resolve(!1)])||(r&&_r.remove(L(this,Se)),K(this,he,this.fetchData().then(()=>(this.dispatchEvent(new CustomEvent(Oe,{detail:this.data,bubbles:!0,composed:!0})),!0)).catch(n=>(ge(this,de,ni).call(this,"Network error: failed to load fragment"),K(this,he,null),!1))),L(this,he))}async fetchData(){K(this,De,null),K(this,le,null);let r=_r.get(L(this,Se));r||(r=await Lc(Tc,L(this,Se),L(this,gt),L(this,zt)?ei:void 0),_r.add(r)),K(this,De,r)}get updateComplete(){return L(this,he)??Promise.reject(new Error("AEM fragment cannot be loaded"))}get data(){return L(this,le)?L(this,le):(L(this,gt)?ge(this,de,ua).call(this):ge(this,de,ma).call(this),L(this,le))}};De=new WeakMap,le=new WeakMap,Se=new WeakMap,zt=new WeakMap,he=new WeakMap,gt=new WeakMap,de=new WeakSet,ni=function(r){this.classList.add("error"),this.dispatchEvent(new CustomEvent(Me,{detail:r,bubbles:!0,composed:!0}))},ua=function(){let{fields:r,id:n,tags:i}=L(this,De);K(this,le,r.reduce((o,{name:a,multiple:s,values:c})=>(o.fields[a]=s?c:c[0],o),{fields:{},id:n,tags:i}))},ma=function(){let{fields:r,id:n,tags:i}=L(this,De);K(this,le,Object.entries(r).reduce((o,[a,s])=>(o.fields[a]=s?.mimeType?s.value:s??"",o),{fields:{},id:n,tags:i}))};customElements.define("aem-fragment",ri);var ii;(function(e){e.BASE="BASE",e.TRIAL="TRIAL",e.PROMOTION="PROMOTION"})(ii||(ii={}));var H;(function(e){e.MONTH="MONTH",e.YEAR="YEAR",e.TWO_YEARS="TWO_YEARS",e.THREE_YEARS="THREE_YEARS",e.PERPETUAL="PERPETUAL",e.TERM_LICENSE="TERM_LICENSE",e.ACCESS_PASS="ACCESS_PASS",e.THREE_MONTHS="THREE_MONTHS",e.SIX_MONTHS="SIX_MONTHS"})(H||(H={}));var N;(function(e){e.ANNUAL="ANNUAL",e.MONTHLY="MONTHLY",e.TWO_YEARS="TWO_YEARS",e.THREE_YEARS="THREE_YEARS",e.P1D="P1D",e.P1Y="P1Y",e.P3Y="P3Y",e.P10Y="P10Y",e.P15Y="P15Y",e.P3D="P3D",e.P7D="P7D",e.P30D="P30D",e.HALF_YEARLY="HALF_YEARLY",e.QUARTERLY="QUARTERLY"})(N||(N={}));var oi;(function(e){e.INDIVIDUAL="INDIVIDUAL",e.TEAM="TEAM",e.ENTERPRISE="ENTERPRISE"})(oi||(oi={}));var ai;(function(e){e.COM="COM",e.EDU="EDU",e.GOV="GOV"})(ai||(ai={}));var si;(function(e){e.DIRECT="DIRECT",e.INDIRECT="INDIRECT"})(si||(si={}));var ci;(function(e){e.ENTERPRISE_PRODUCT="ENTERPRISE_PRODUCT",e.ETLA="ETLA",e.RETAIL="RETAIL",e.VIP="VIP",e.VIPMP="VIPMP",e.FREE="FREE"})(ci||(ci={}));var pa="tacocat.js";var Pr=(e,t)=>String(e??"").toLowerCase()==String(t??"").toLowerCase(),fa=e=>`${e??""}`.replace(/[&<>'"]/g,t=>({"&":"&","<":"<",">":">","'":"'",'"':"""})[t]??t)??"";function R(e,t={},{metadata:r=!0,search:n=!0,storage:i=!0}={}){let o;if(n&&o==null){let a=new URLSearchParams(window.location.search),s=bt(n)?n:e;o=a.get(s)}if(i&&o==null){let a=bt(i)?i:e;o=window.sessionStorage.getItem(a)??window.localStorage.getItem(a)}if(r&&o==null){let a=_c(bt(r)?r:e);o=document.documentElement.querySelector(`meta[name="${a}"]`)?.content}return o??t[e]}var xt=()=>{};var ga=e=>typeof e=="boolean",Ft=e=>typeof e=="function",Cr=e=>typeof e=="number",ba=e=>e!=null&&typeof e=="object";var bt=e=>typeof e=="string",li=e=>bt(e)&&e,vt=e=>Cr(e)&&Number.isFinite(e)&&e>0;function At(e,t=r=>r==null||r===""){return e!=null&&Object.entries(e).forEach(([r,n])=>{t(n)&&delete e[r]}),e}function S(e,t){if(ga(e))return e;let r=String(e);return r==="1"||r==="true"?!0:r==="0"||r==="false"?!1:t}function Te(e,t,r){let n=Object.values(t);return n.find(i=>Pr(i,e))??r??n[0]}function _c(e=""){return String(e).replace(/(\p{Lowercase_Letter})(\p{Uppercase_Letter})/gu,(t,r,n)=>`${r}-${n}`).replace(/\W+/gu,"-").toLowerCase()}function yt(e,t=1){return Cr(e)||(e=Number.parseInt(e,10)),!Number.isNaN(e)&&e>0&&Number.isFinite(e)?e:t}var Pc=Date.now(),hi=()=>`(+${Date.now()-Pc}ms)`,kr=new Set,Cc=S(R("tacocat.debug",{},{metadata:!1}),typeof process<"u"&&process.env?.DEBUG);function xa(e){let t=`[${pa}/${e}]`,r=(a,s,...c)=>a?!0:(i(s,...c),!1),n=Cc?(a,...s)=>{console.debug(`${t} ${a}`,...s,hi())}:()=>{},i=(a,...s)=>{let c=`${t} ${a}`;kr.forEach(([l])=>l(c,...s))};return{assert:r,debug:n,error:i,warn:(a,...s)=>{let c=`${t} ${a}`;kr.forEach(([,l])=>l(c,...s))}}}function kc(e,t){let r=[e,t];return kr.add(r),()=>{kr.delete(r)}}kc((e,...t)=>{console.error(e,...t,hi())},(e,...t)=>{console.warn(e,...t,hi())});var Ic="no promo",va="promo-tag",Nc="yellow",Rc="neutral",Oc=(e,t,r)=>{let n=o=>o||Ic,i=r?` (was "${n(t)}")`:"";return`${n(e)}${i}`},Mc="cancel-context",Kt=(e,t)=>{let r=e===Mc,n=!r&&e?.length>0,i=(n||r)&&(t&&t!=e||!t&&!r),o=i&&n||!i&&!!t,a=o?e||t:void 0;return{effectivePromoCode:a,overridenPromoCode:e,className:o?va:`${va} no-promo`,text:Oc(a,t,i),variant:o?Nc:Rc,isOverriden:i}};var di="ABM",ui="PUF",mi="M2M",pi="PERPETUAL",fi="P3Y",Vc="TAX_INCLUSIVE_DETAILS",$c="TAX_EXCLUSIVE",Aa={ABM:di,PUF:ui,M2M:mi,PERPETUAL:pi,P3Y:fi},Sm={[di]:{commitment:H.YEAR,term:N.MONTHLY},[ui]:{commitment:H.YEAR,term:N.ANNUAL},[mi]:{commitment:H.MONTH,term:N.MONTHLY},[pi]:{commitment:H.PERPETUAL,term:void 0},[fi]:{commitment:H.THREE_MONTHS,term:N.P3Y}},ya="Value is not an offer",Ir=e=>{if(typeof e!="object")return ya;let{commitment:t,term:r}=e,n=Hc(t,r);return{...e,planType:n}};var Hc=(e,t)=>{switch(e){case void 0:return ya;case"":return"";case H.YEAR:return t===N.MONTHLY?di:t===N.ANNUAL?ui:"";case H.MONTH:return t===N.MONTHLY?mi:"";case H.PERPETUAL:return pi;case H.TERM_LICENSE:return t===N.P3Y?fi:"";default:return""}};function gi(e){let{priceDetails:t}=e,{price:r,priceWithoutDiscount:n,priceWithoutTax:i,priceWithoutDiscountAndTax:o,taxDisplay:a}=t;if(a!==Vc)return e;let s={...e,priceDetails:{...t,price:i??r,priceWithoutDiscount:o??n,taxDisplay:$c}};return s.offerType==="TRIAL"&&s.priceDetails.price===0&&(s.priceDetails.price=s.priceDetails.priceWithoutDiscount),s}var bi=function(e,t){return bi=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[i]=n[i])},bi(e,t)};function Yt(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");bi(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}var A=function(){return A=Object.assign||function(t){for(var r,n=1,i=arguments.length;n0}),r=[],n=0,i=t;n1)throw new RangeError("integer-width stems only accept a single optional option");i.options[0].replace(Bc,function(c,l,h,d,u,m){if(l)t.minimumIntegerDigits=h.length;else{if(d&&u)throw new Error("We currently do not support maximum integer digits");if(m)throw new Error("We currently do not support exact integer digits")}return""});continue}if(Ia.test(i.stem)){t.minimumIntegerDigits=i.stem.length;continue}if(La.test(i.stem)){if(i.options.length>1)throw new RangeError("Fraction-precision stems only accept a single optional option");i.stem.replace(La,function(c,l,h,d,u,m){return h==="*"?t.minimumFractionDigits=l.length:d&&d[0]==="#"?t.maximumFractionDigits=d.length:u&&m?(t.minimumFractionDigits=u.length,t.maximumFractionDigits=u.length+m.length):(t.minimumFractionDigits=l.length,t.maximumFractionDigits=l.length),""});var o=i.options[0];o==="w"?t=A(A({},t),{trailingZeroDisplay:"stripIfInteger"}):o&&(t=A(A({},t),_a(o)));continue}if(ka.test(i.stem)){t=A(A({},t),_a(i.stem));continue}var a=Na(i.stem);a&&(t=A(A({},t),a));var s=Gc(i.stem);s&&(t=A(A({},t),s))}return t}var Wt={AX:["H"],BQ:["H"],CP:["H"],CZ:["H"],DK:["H"],FI:["H"],ID:["H"],IS:["H"],ML:["H"],NE:["H"],RU:["H"],SE:["H"],SJ:["H"],SK:["H"],AS:["h","H"],BT:["h","H"],DJ:["h","H"],ER:["h","H"],GH:["h","H"],IN:["h","H"],LS:["h","H"],PG:["h","H"],PW:["h","H"],SO:["h","H"],TO:["h","H"],VU:["h","H"],WS:["h","H"],"001":["H","h"],AL:["h","H","hB"],TD:["h","H","hB"],"ca-ES":["H","h","hB"],CF:["H","h","hB"],CM:["H","h","hB"],"fr-CA":["H","h","hB"],"gl-ES":["H","h","hB"],"it-CH":["H","h","hB"],"it-IT":["H","h","hB"],LU:["H","h","hB"],NP:["H","h","hB"],PF:["H","h","hB"],SC:["H","h","hB"],SM:["H","h","hB"],SN:["H","h","hB"],TF:["H","h","hB"],VA:["H","h","hB"],CY:["h","H","hb","hB"],GR:["h","H","hb","hB"],CO:["h","H","hB","hb"],DO:["h","H","hB","hb"],KP:["h","H","hB","hb"],KR:["h","H","hB","hb"],NA:["h","H","hB","hb"],PA:["h","H","hB","hb"],PR:["h","H","hB","hb"],VE:["h","H","hB","hb"],AC:["H","h","hb","hB"],AI:["H","h","hb","hB"],BW:["H","h","hb","hB"],BZ:["H","h","hb","hB"],CC:["H","h","hb","hB"],CK:["H","h","hb","hB"],CX:["H","h","hb","hB"],DG:["H","h","hb","hB"],FK:["H","h","hb","hB"],GB:["H","h","hb","hB"],GG:["H","h","hb","hB"],GI:["H","h","hb","hB"],IE:["H","h","hb","hB"],IM:["H","h","hb","hB"],IO:["H","h","hb","hB"],JE:["H","h","hb","hB"],LT:["H","h","hb","hB"],MK:["H","h","hb","hB"],MN:["H","h","hb","hB"],MS:["H","h","hb","hB"],NF:["H","h","hb","hB"],NG:["H","h","hb","hB"],NR:["H","h","hb","hB"],NU:["H","h","hb","hB"],PN:["H","h","hb","hB"],SH:["H","h","hb","hB"],SX:["H","h","hb","hB"],TA:["H","h","hb","hB"],ZA:["H","h","hb","hB"],"af-ZA":["H","h","hB","hb"],AR:["H","h","hB","hb"],CL:["H","h","hB","hb"],CR:["H","h","hB","hb"],CU:["H","h","hB","hb"],EA:["H","h","hB","hb"],"es-BO":["H","h","hB","hb"],"es-BR":["H","h","hB","hb"],"es-EC":["H","h","hB","hb"],"es-ES":["H","h","hB","hb"],"es-GQ":["H","h","hB","hb"],"es-PE":["H","h","hB","hb"],GT:["H","h","hB","hb"],HN:["H","h","hB","hb"],IC:["H","h","hB","hb"],KG:["H","h","hB","hb"],KM:["H","h","hB","hb"],LK:["H","h","hB","hb"],MA:["H","h","hB","hb"],MX:["H","h","hB","hb"],NI:["H","h","hB","hb"],PY:["H","h","hB","hb"],SV:["H","h","hB","hb"],UY:["H","h","hB","hb"],JP:["H","h","K"],AD:["H","hB"],AM:["H","hB"],AO:["H","hB"],AT:["H","hB"],AW:["H","hB"],BE:["H","hB"],BF:["H","hB"],BJ:["H","hB"],BL:["H","hB"],BR:["H","hB"],CG:["H","hB"],CI:["H","hB"],CV:["H","hB"],DE:["H","hB"],EE:["H","hB"],FR:["H","hB"],GA:["H","hB"],GF:["H","hB"],GN:["H","hB"],GP:["H","hB"],GW:["H","hB"],HR:["H","hB"],IL:["H","hB"],IT:["H","hB"],KZ:["H","hB"],MC:["H","hB"],MD:["H","hB"],MF:["H","hB"],MQ:["H","hB"],MZ:["H","hB"],NC:["H","hB"],NL:["H","hB"],PM:["H","hB"],PT:["H","hB"],RE:["H","hB"],RO:["H","hB"],SI:["H","hB"],SR:["H","hB"],ST:["H","hB"],TG:["H","hB"],TR:["H","hB"],WF:["H","hB"],YT:["H","hB"],BD:["h","hB","H"],PK:["h","hB","H"],AZ:["H","hB","h"],BA:["H","hB","h"],BG:["H","hB","h"],CH:["H","hB","h"],GE:["H","hB","h"],LI:["H","hB","h"],ME:["H","hB","h"],RS:["H","hB","h"],UA:["H","hB","h"],UZ:["H","hB","h"],XK:["H","hB","h"],AG:["h","hb","H","hB"],AU:["h","hb","H","hB"],BB:["h","hb","H","hB"],BM:["h","hb","H","hB"],BS:["h","hb","H","hB"],CA:["h","hb","H","hB"],DM:["h","hb","H","hB"],"en-001":["h","hb","H","hB"],FJ:["h","hb","H","hB"],FM:["h","hb","H","hB"],GD:["h","hb","H","hB"],GM:["h","hb","H","hB"],GU:["h","hb","H","hB"],GY:["h","hb","H","hB"],JM:["h","hb","H","hB"],KI:["h","hb","H","hB"],KN:["h","hb","H","hB"],KY:["h","hb","H","hB"],LC:["h","hb","H","hB"],LR:["h","hb","H","hB"],MH:["h","hb","H","hB"],MP:["h","hb","H","hB"],MW:["h","hb","H","hB"],NZ:["h","hb","H","hB"],SB:["h","hb","H","hB"],SG:["h","hb","H","hB"],SL:["h","hb","H","hB"],SS:["h","hb","H","hB"],SZ:["h","hb","H","hB"],TC:["h","hb","H","hB"],TT:["h","hb","H","hB"],UM:["h","hb","H","hB"],US:["h","hb","H","hB"],VC:["h","hb","H","hB"],VG:["h","hb","H","hB"],VI:["h","hb","H","hB"],ZM:["h","hb","H","hB"],BO:["H","hB","h","hb"],EC:["H","hB","h","hb"],ES:["H","hB","h","hb"],GQ:["H","hB","h","hb"],PE:["H","hB","h","hb"],AE:["h","hB","hb","H"],"ar-001":["h","hB","hb","H"],BH:["h","hB","hb","H"],DZ:["h","hB","hb","H"],EG:["h","hB","hb","H"],EH:["h","hB","hb","H"],HK:["h","hB","hb","H"],IQ:["h","hB","hb","H"],JO:["h","hB","hb","H"],KW:["h","hB","hb","H"],LB:["h","hB","hb","H"],LY:["h","hB","hb","H"],MO:["h","hB","hb","H"],MR:["h","hB","hb","H"],OM:["h","hB","hb","H"],PH:["h","hB","hb","H"],PS:["h","hB","hb","H"],QA:["h","hB","hb","H"],SA:["h","hB","hb","H"],SD:["h","hB","hb","H"],SY:["h","hB","hb","H"],TN:["h","hB","hb","H"],YE:["h","hB","hb","H"],AF:["H","hb","hB","h"],LA:["H","hb","hB","h"],CN:["H","hB","hb","h"],LV:["H","hB","hb","h"],TL:["H","hB","hb","h"],"zu-ZA":["H","hB","hb","h"],CD:["hB","H"],IR:["hB","H"],"hi-IN":["hB","h","H"],"kn-IN":["hB","h","H"],"ml-IN":["hB","h","H"],"te-IN":["hB","h","H"],KH:["hB","h","H","hb"],"ta-IN":["hB","h","hb","H"],BN:["hb","hB","h","H"],MY:["hb","hB","h","H"],ET:["hB","hb","h","H"],"gu-IN":["hB","hb","h","H"],"mr-IN":["hB","hb","h","H"],"pa-IN":["hB","hb","h","H"],TW:["hB","hb","h","H"],KE:["hB","hb","H","h"],MM:["hB","hb","H","h"],TZ:["hB","hb","H","h"],UG:["hB","hb","H","h"]};function Oa(e,t){for(var r="",n=0;n>1),c="a",l=zc(t);for((l=="H"||l=="k")&&(s=0);s-- >0;)r+=c;for(;a-- >0;)r=l+r}else i==="J"?r+="H":r+=i}return r}function zc(e){var t=e.hourCycle;if(t===void 0&&e.hourCycles&&e.hourCycles.length&&(t=e.hourCycles[0]),t)switch(t){case"h24":return"k";case"h23":return"H";case"h12":return"h";case"h11":return"K";default:throw new Error("Invalid hourCycle")}var r=e.language,n;r!=="root"&&(n=e.maximize().region);var i=Wt[n||""]||Wt[r||""]||Wt["".concat(r,"-001")]||Wt["001"];return i[0]}var Ai,Fc=new RegExp("^".concat(vi.source,"*")),Kc=new RegExp("".concat(vi.source,"*$"));function y(e,t){return{start:e,end:t}}var Yc=!!String.prototype.startsWith,jc=!!String.fromCodePoint,Wc=!!Object.fromEntries,Xc=!!String.prototype.codePointAt,qc=!!String.prototype.trimStart,Zc=!!String.prototype.trimEnd,Qc=!!Number.isSafeInteger,Jc=Qc?Number.isSafeInteger:function(e){return typeof e=="number"&&isFinite(e)&&Math.floor(e)===e&&Math.abs(e)<=9007199254740991},Ei=!0;try{Ma=Ua("([^\\p{White_Space}\\p{Pattern_Syntax}]*)","yu"),Ei=((Ai=Ma.exec("a"))===null||Ai===void 0?void 0:Ai[0])==="a"}catch{Ei=!1}var Ma,Va=Yc?function(t,r,n){return t.startsWith(r,n)}:function(t,r,n){return t.slice(n,n+r.length)===r},Si=jc?String.fromCodePoint:function(){for(var t=[],r=0;ro;){if(a=t[o++],a>1114111)throw RangeError(a+" is not a valid code point");n+=a<65536?String.fromCharCode(a):String.fromCharCode(((a-=65536)>>10)+55296,a%1024+56320)}return n},$a=Wc?Object.fromEntries:function(t){for(var r={},n=0,i=t;n=n)){var i=t.charCodeAt(r),o;return i<55296||i>56319||r+1===n||(o=t.charCodeAt(r+1))<56320||o>57343?i:(i-55296<<10)+(o-56320)+65536}},el=qc?function(t){return t.trimStart()}:function(t){return t.replace(Fc,"")},tl=Zc?function(t){return t.trimEnd()}:function(t){return t.replace(Kc,"")};function Ua(e,t){return new RegExp(e,t)}var Ti;Ei?(yi=Ua("([^\\p{White_Space}\\p{Pattern_Syntax}]*)","yu"),Ti=function(t,r){var n;yi.lastIndex=r;var i=yi.exec(t);return(n=i[1])!==null&&n!==void 0?n:""}):Ti=function(t,r){for(var n=[];;){var i=Ha(t,r);if(i===void 0||Ba(i)||il(i))break;n.push(i),r+=i>=65536?2:1}return Si.apply(void 0,n)};var yi,Da=function(){function e(t,r){r===void 0&&(r={}),this.message=t,this.position={offset:0,line:1,column:1},this.ignoreTag=!!r.ignoreTag,this.locale=r.locale,this.requiresOtherClause=!!r.requiresOtherClause,this.shouldParseSkeletons=!!r.shouldParseSkeletons}return e.prototype.parse=function(){if(this.offset()!==0)throw Error("parser can only be used once");return this.parseMessage(0,"",!1)},e.prototype.parseMessage=function(t,r,n){for(var i=[];!this.isEOF();){var o=this.char();if(o===123){var a=this.parseArgument(t,n);if(a.err)return a;i.push(a.val)}else{if(o===125&&t>0)break;if(o===35&&(r==="plural"||r==="selectordinal")){var s=this.clonePosition();this.bump(),i.push({type:k.pound,location:y(s,this.clonePosition())})}else if(o===60&&!this.ignoreTag&&this.peek()===47){if(n)break;return this.error(v.UNMATCHED_CLOSING_TAG,y(this.clonePosition(),this.clonePosition()))}else if(o===60&&!this.ignoreTag&&wi(this.peek()||0)){var a=this.parseTag(t,r);if(a.err)return a;i.push(a.val)}else{var a=this.parseLiteral(t,r);if(a.err)return a;i.push(a.val)}}}return{val:i,err:null}},e.prototype.parseTag=function(t,r){var n=this.clonePosition();this.bump();var i=this.parseTagName();if(this.bumpSpace(),this.bumpIf("/>"))return{val:{type:k.literal,value:"<".concat(i,"/>"),location:y(n,this.clonePosition())},err:null};if(this.bumpIf(">")){var o=this.parseMessage(t+1,r,!0);if(o.err)return o;var a=o.val,s=this.clonePosition();if(this.bumpIf("")?{val:{type:k.tag,value:i,children:a,location:y(n,this.clonePosition())},err:null}:this.error(v.INVALID_TAG,y(s,this.clonePosition())))}else return this.error(v.UNCLOSED_TAG,y(n,this.clonePosition()))}else return this.error(v.INVALID_TAG,y(n,this.clonePosition()))},e.prototype.parseTagName=function(){var t=this.offset();for(this.bump();!this.isEOF()&&nl(this.char());)this.bump();return this.message.slice(t,this.offset())},e.prototype.parseLiteral=function(t,r){for(var n=this.clonePosition(),i="";;){var o=this.tryParseQuote(r);if(o){i+=o;continue}var a=this.tryParseUnquoted(t,r);if(a){i+=a;continue}var s=this.tryParseLeftAngleBracket();if(s){i+=s;continue}break}var c=y(n,this.clonePosition());return{val:{type:k.literal,value:i,location:c},err:null}},e.prototype.tryParseLeftAngleBracket=function(){return!this.isEOF()&&this.char()===60&&(this.ignoreTag||!rl(this.peek()||0))?(this.bump(),"<"):null},e.prototype.tryParseQuote=function(t){if(this.isEOF()||this.char()!==39)return null;switch(this.peek()){case 39:return this.bump(),this.bump(),"'";case 123:case 60:case 62:case 125:break;case 35:if(t==="plural"||t==="selectordinal")break;return null;default:return null}this.bump();var r=[this.char()];for(this.bump();!this.isEOF();){var n=this.char();if(n===39)if(this.peek()===39)r.push(39),this.bump();else{this.bump();break}else r.push(n);this.bump()}return Si.apply(void 0,r)},e.prototype.tryParseUnquoted=function(t,r){if(this.isEOF())return null;var n=this.char();return n===60||n===123||n===35&&(r==="plural"||r==="selectordinal")||n===125&&t>0?null:(this.bump(),Si(n))},e.prototype.parseArgument=function(t,r){var n=this.clonePosition();if(this.bump(),this.bumpSpace(),this.isEOF())return this.error(v.EXPECT_ARGUMENT_CLOSING_BRACE,y(n,this.clonePosition()));if(this.char()===125)return this.bump(),this.error(v.EMPTY_ARGUMENT,y(n,this.clonePosition()));var i=this.parseIdentifierIfPossible().value;if(!i)return this.error(v.MALFORMED_ARGUMENT,y(n,this.clonePosition()));if(this.bumpSpace(),this.isEOF())return this.error(v.EXPECT_ARGUMENT_CLOSING_BRACE,y(n,this.clonePosition()));switch(this.char()){case 125:return this.bump(),{val:{type:k.argument,value:i,location:y(n,this.clonePosition())},err:null};case 44:return this.bump(),this.bumpSpace(),this.isEOF()?this.error(v.EXPECT_ARGUMENT_CLOSING_BRACE,y(n,this.clonePosition())):this.parseArgumentOptions(t,r,i,n);default:return this.error(v.MALFORMED_ARGUMENT,y(n,this.clonePosition()))}},e.prototype.parseIdentifierIfPossible=function(){var t=this.clonePosition(),r=this.offset(),n=Ti(this.message,r),i=r+n.length;this.bumpTo(i);var o=this.clonePosition(),a=y(t,o);return{value:n,location:a}},e.prototype.parseArgumentOptions=function(t,r,n,i){var o,a=this.clonePosition(),s=this.parseIdentifierIfPossible().value,c=this.clonePosition();switch(s){case"":return this.error(v.EXPECT_ARGUMENT_TYPE,y(a,c));case"number":case"date":case"time":{this.bumpSpace();var l=null;if(this.bumpIf(",")){this.bumpSpace();var h=this.clonePosition(),d=this.parseSimpleArgStyleIfPossible();if(d.err)return d;var u=tl(d.val);if(u.length===0)return this.error(v.EXPECT_ARGUMENT_STYLE,y(this.clonePosition(),this.clonePosition()));var m=y(h,this.clonePosition());l={style:u,styleLocation:m}}var f=this.tryParseArgumentClose(i);if(f.err)return f;var g=y(i,this.clonePosition());if(l&&Va(l?.style,"::",0)){var T=el(l.style.slice(2));if(s==="number"){var d=this.parseNumberSkeletonFromString(T,l.styleLocation);return d.err?d:{val:{type:k.number,value:n,location:g,style:d.val},err:null}}else{if(T.length===0)return this.error(v.EXPECT_DATE_TIME_SKELETON,g);var P=T;this.locale&&(P=Oa(T,this.locale));var u={type:Be.dateTime,pattern:P,location:l.styleLocation,parsedOptions:this.shouldParseSkeletons?Ta(P):{}},x=s==="date"?k.date:k.time;return{val:{type:x,value:n,location:g,style:u},err:null}}}return{val:{type:s==="number"?k.number:s==="date"?k.date:k.time,value:n,location:g,style:(o=l?.style)!==null&&o!==void 0?o:null},err:null}}case"plural":case"selectordinal":case"select":{var E=this.clonePosition();if(this.bumpSpace(),!this.bumpIf(","))return this.error(v.EXPECT_SELECT_ARGUMENT_OPTIONS,y(E,A({},E)));this.bumpSpace();var I=this.parseIdentifierIfPossible(),O=0;if(s!=="select"&&I.value==="offset"){if(!this.bumpIf(":"))return this.error(v.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,y(this.clonePosition(),this.clonePosition()));this.bumpSpace();var d=this.tryParseDecimalInteger(v.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,v.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);if(d.err)return d;this.bumpSpace(),I=this.parseIdentifierIfPossible(),O=d.val}var U=this.tryParsePluralOrSelectOptions(t,s,r,I);if(U.err)return U;var f=this.tryParseArgumentClose(i);if(f.err)return f;var $=y(i,this.clonePosition());return s==="select"?{val:{type:k.select,value:n,options:$a(U.val),location:$},err:null}:{val:{type:k.plural,value:n,options:$a(U.val),offset:O,pluralType:s==="plural"?"cardinal":"ordinal",location:$},err:null}}default:return this.error(v.INVALID_ARGUMENT_TYPE,y(a,c))}},e.prototype.tryParseArgumentClose=function(t){return this.isEOF()||this.char()!==125?this.error(v.EXPECT_ARGUMENT_CLOSING_BRACE,y(t,this.clonePosition())):(this.bump(),{val:!0,err:null})},e.prototype.parseSimpleArgStyleIfPossible=function(){for(var t=0,r=this.clonePosition();!this.isEOF();){var n=this.char();switch(n){case 39:{this.bump();var i=this.clonePosition();if(!this.bumpUntil("'"))return this.error(v.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE,y(i,this.clonePosition()));this.bump();break}case 123:{t+=1,this.bump();break}case 125:{if(t>0)t-=1;else return{val:this.message.slice(r.offset,this.offset()),err:null};break}default:this.bump();break}}return{val:this.message.slice(r.offset,this.offset()),err:null}},e.prototype.parseNumberSkeletonFromString=function(t,r){var n=[];try{n=Ca(t)}catch{return this.error(v.INVALID_NUMBER_SKELETON,r)}return{val:{type:Be.number,tokens:n,location:r,parsedOptions:this.shouldParseSkeletons?Ra(n):{}},err:null}},e.prototype.tryParsePluralOrSelectOptions=function(t,r,n,i){for(var o,a=!1,s=[],c=new Set,l=i.value,h=i.location;;){if(l.length===0){var d=this.clonePosition();if(r!=="select"&&this.bumpIf("=")){var u=this.tryParseDecimalInteger(v.EXPECT_PLURAL_ARGUMENT_SELECTOR,v.INVALID_PLURAL_ARGUMENT_SELECTOR);if(u.err)return u;h=y(d,this.clonePosition()),l=this.message.slice(d.offset,this.offset())}else break}if(c.has(l))return this.error(r==="select"?v.DUPLICATE_SELECT_ARGUMENT_SELECTOR:v.DUPLICATE_PLURAL_ARGUMENT_SELECTOR,h);l==="other"&&(a=!0),this.bumpSpace();var m=this.clonePosition();if(!this.bumpIf("{"))return this.error(r==="select"?v.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT:v.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT,y(this.clonePosition(),this.clonePosition()));var f=this.parseMessage(t+1,r,n);if(f.err)return f;var g=this.tryParseArgumentClose(m);if(g.err)return g;s.push([l,{value:f.val,location:y(m,this.clonePosition())}]),c.add(l),this.bumpSpace(),o=this.parseIdentifierIfPossible(),l=o.value,h=o.location}return s.length===0?this.error(r==="select"?v.EXPECT_SELECT_ARGUMENT_SELECTOR:v.EXPECT_PLURAL_ARGUMENT_SELECTOR,y(this.clonePosition(),this.clonePosition())):this.requiresOtherClause&&!a?this.error(v.MISSING_OTHER_CLAUSE,y(this.clonePosition(),this.clonePosition())):{val:s,err:null}},e.prototype.tryParseDecimalInteger=function(t,r){var n=1,i=this.clonePosition();this.bumpIf("+")||this.bumpIf("-")&&(n=-1);for(var o=!1,a=0;!this.isEOF();){var s=this.char();if(s>=48&&s<=57)o=!0,a=a*10+(s-48),this.bump();else break}var c=y(i,this.clonePosition());return o?(a*=n,Jc(a)?{val:a,err:null}:this.error(r,c)):this.error(t,c)},e.prototype.offset=function(){return this.position.offset},e.prototype.isEOF=function(){return this.offset()===this.message.length},e.prototype.clonePosition=function(){return{offset:this.position.offset,line:this.position.line,column:this.position.column}},e.prototype.char=function(){var t=this.position.offset;if(t>=this.message.length)throw Error("out of bound");var r=Ha(this.message,t);if(r===void 0)throw Error("Offset ".concat(t," is at invalid UTF-16 code unit boundary"));return r},e.prototype.error=function(t,r){return{val:null,err:{kind:t,message:this.message,location:r}}},e.prototype.bump=function(){if(!this.isEOF()){var t=this.char();t===10?(this.position.line+=1,this.position.column=1,this.position.offset+=1):(this.position.column+=1,this.position.offset+=t<65536?1:2)}},e.prototype.bumpIf=function(t){if(Va(this.message,t,this.offset())){for(var r=0;r=0?(this.bumpTo(n),!0):(this.bumpTo(this.message.length),!1)},e.prototype.bumpTo=function(t){if(this.offset()>t)throw Error("targetOffset ".concat(t," must be greater than or equal to the current offset ").concat(this.offset()));for(t=Math.min(t,this.message.length);;){var r=this.offset();if(r===t)break;if(r>t)throw Error("targetOffset ".concat(t," is at invalid UTF-16 code unit boundary"));if(this.bump(),this.isEOF())break}},e.prototype.bumpSpace=function(){for(;!this.isEOF()&&Ba(this.char());)this.bump()},e.prototype.peek=function(){if(this.isEOF())return null;var t=this.char(),r=this.offset(),n=this.message.charCodeAt(r+(t>=65536?2:1));return n??null},e}();function wi(e){return e>=97&&e<=122||e>=65&&e<=90}function rl(e){return wi(e)||e===47}function nl(e){return e===45||e===46||e>=48&&e<=57||e===95||e>=97&&e<=122||e>=65&&e<=90||e==183||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8255&&e<=8256||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function Ba(e){return e>=9&&e<=13||e===32||e===133||e>=8206&&e<=8207||e===8232||e===8233}function il(e){return e>=33&&e<=35||e===36||e>=37&&e<=39||e===40||e===41||e===42||e===43||e===44||e===45||e>=46&&e<=47||e>=58&&e<=59||e>=60&&e<=62||e>=63&&e<=64||e===91||e===92||e===93||e===94||e===96||e===123||e===124||e===125||e===126||e===161||e>=162&&e<=165||e===166||e===167||e===169||e===171||e===172||e===174||e===176||e===177||e===182||e===187||e===191||e===215||e===247||e>=8208&&e<=8213||e>=8214&&e<=8215||e===8216||e===8217||e===8218||e>=8219&&e<=8220||e===8221||e===8222||e===8223||e>=8224&&e<=8231||e>=8240&&e<=8248||e===8249||e===8250||e>=8251&&e<=8254||e>=8257&&e<=8259||e===8260||e===8261||e===8262||e>=8263&&e<=8273||e===8274||e===8275||e>=8277&&e<=8286||e>=8592&&e<=8596||e>=8597&&e<=8601||e>=8602&&e<=8603||e>=8604&&e<=8607||e===8608||e>=8609&&e<=8610||e===8611||e>=8612&&e<=8613||e===8614||e>=8615&&e<=8621||e===8622||e>=8623&&e<=8653||e>=8654&&e<=8655||e>=8656&&e<=8657||e===8658||e===8659||e===8660||e>=8661&&e<=8691||e>=8692&&e<=8959||e>=8960&&e<=8967||e===8968||e===8969||e===8970||e===8971||e>=8972&&e<=8991||e>=8992&&e<=8993||e>=8994&&e<=9e3||e===9001||e===9002||e>=9003&&e<=9083||e===9084||e>=9085&&e<=9114||e>=9115&&e<=9139||e>=9140&&e<=9179||e>=9180&&e<=9185||e>=9186&&e<=9254||e>=9255&&e<=9279||e>=9280&&e<=9290||e>=9291&&e<=9311||e>=9472&&e<=9654||e===9655||e>=9656&&e<=9664||e===9665||e>=9666&&e<=9719||e>=9720&&e<=9727||e>=9728&&e<=9838||e===9839||e>=9840&&e<=10087||e===10088||e===10089||e===10090||e===10091||e===10092||e===10093||e===10094||e===10095||e===10096||e===10097||e===10098||e===10099||e===10100||e===10101||e>=10132&&e<=10175||e>=10176&&e<=10180||e===10181||e===10182||e>=10183&&e<=10213||e===10214||e===10215||e===10216||e===10217||e===10218||e===10219||e===10220||e===10221||e===10222||e===10223||e>=10224&&e<=10239||e>=10240&&e<=10495||e>=10496&&e<=10626||e===10627||e===10628||e===10629||e===10630||e===10631||e===10632||e===10633||e===10634||e===10635||e===10636||e===10637||e===10638||e===10639||e===10640||e===10641||e===10642||e===10643||e===10644||e===10645||e===10646||e===10647||e===10648||e>=10649&&e<=10711||e===10712||e===10713||e===10714||e===10715||e>=10716&&e<=10747||e===10748||e===10749||e>=10750&&e<=11007||e>=11008&&e<=11055||e>=11056&&e<=11076||e>=11077&&e<=11078||e>=11079&&e<=11084||e>=11085&&e<=11123||e>=11124&&e<=11125||e>=11126&&e<=11157||e===11158||e>=11159&&e<=11263||e>=11776&&e<=11777||e===11778||e===11779||e===11780||e===11781||e>=11782&&e<=11784||e===11785||e===11786||e===11787||e===11788||e===11789||e>=11790&&e<=11798||e===11799||e>=11800&&e<=11801||e===11802||e===11803||e===11804||e===11805||e>=11806&&e<=11807||e===11808||e===11809||e===11810||e===11811||e===11812||e===11813||e===11814||e===11815||e===11816||e===11817||e>=11818&&e<=11822||e===11823||e>=11824&&e<=11833||e>=11834&&e<=11835||e>=11836&&e<=11839||e===11840||e===11841||e===11842||e>=11843&&e<=11855||e>=11856&&e<=11857||e===11858||e>=11859&&e<=11903||e>=12289&&e<=12291||e===12296||e===12297||e===12298||e===12299||e===12300||e===12301||e===12302||e===12303||e===12304||e===12305||e>=12306&&e<=12307||e===12308||e===12309||e===12310||e===12311||e===12312||e===12313||e===12314||e===12315||e===12316||e===12317||e>=12318&&e<=12319||e===12320||e===12336||e===64830||e===64831||e>=65093&&e<=65094}function Li(e){e.forEach(function(t){if(delete t.location,Vr(t)||$r(t))for(var r in t.options)delete t.options[r].location,Li(t.options[r].value);else Rr(t)&&Ur(t.style)||(Or(t)||Mr(t))&&jt(t.style)?delete t.style.location:Hr(t)&&Li(t.children)})}function Ga(e,t){t===void 0&&(t={}),t=A({shouldParseSkeletons:!0,requiresOtherClause:!0},t);var r=new Da(e,t).parse();if(r.err){var n=SyntaxError(v[r.err.kind]);throw n.location=r.err.location,n.originalMessage=r.err.message,n}return t?.captureLocation||Li(r.val),r.val}function Xt(e,t){var r=t&&t.cache?t.cache:hl,n=t&&t.serializer?t.serializer:ll,i=t&&t.strategy?t.strategy:al;return i(e,{cache:r,serializer:n})}function ol(e){return e==null||typeof e=="number"||typeof e=="boolean"}function za(e,t,r,n){var i=ol(n)?n:r(n),o=t.get(i);return typeof o>"u"&&(o=e.call(this,n),t.set(i,o)),o}function Fa(e,t,r){var n=Array.prototype.slice.call(arguments,3),i=r(n),o=t.get(i);return typeof o>"u"&&(o=e.apply(this,n),t.set(i,o)),o}function _i(e,t,r,n,i){return r.bind(t,e,n,i)}function al(e,t){var r=e.length===1?za:Fa;return _i(e,this,r,t.cache.create(),t.serializer)}function sl(e,t){return _i(e,this,Fa,t.cache.create(),t.serializer)}function cl(e,t){return _i(e,this,za,t.cache.create(),t.serializer)}var ll=function(){return JSON.stringify(arguments)};function Pi(){this.cache=Object.create(null)}Pi.prototype.get=function(e){return this.cache[e]};Pi.prototype.set=function(e,t){this.cache[e]=t};var hl={create:function(){return new Pi}},Dr={variadic:sl,monadic:cl};var Ge;(function(e){e.MISSING_VALUE="MISSING_VALUE",e.INVALID_VALUE="INVALID_VALUE",e.MISSING_INTL_API="MISSING_INTL_API"})(Ge||(Ge={}));var qt=function(e){Yt(t,e);function t(r,n,i){var o=e.call(this,r)||this;return o.code=n,o.originalMessage=i,o}return t.prototype.toString=function(){return"[formatjs Error: ".concat(this.code,"] ").concat(this.message)},t}(Error);var Ci=function(e){Yt(t,e);function t(r,n,i,o){return e.call(this,'Invalid values for "'.concat(r,'": "').concat(n,'". Options are "').concat(Object.keys(i).join('", "'),'"'),Ge.INVALID_VALUE,o)||this}return t}(qt);var Ka=function(e){Yt(t,e);function t(r,n,i){return e.call(this,'Value for "'.concat(r,'" must be of type ').concat(n),Ge.INVALID_VALUE,i)||this}return t}(qt);var Ya=function(e){Yt(t,e);function t(r,n){return e.call(this,'The intl string context variable "'.concat(r,'" was not provided to the string "').concat(n,'"'),Ge.MISSING_VALUE,n)||this}return t}(qt);var F;(function(e){e[e.literal=0]="literal",e[e.object=1]="object"})(F||(F={}));function dl(e){return e.length<2?e:e.reduce(function(t,r){var n=t[t.length-1];return!n||n.type!==F.literal||r.type!==F.literal?t.push(r):n.value+=r.value,t},[])}function ul(e){return typeof e=="function"}function Zt(e,t,r,n,i,o,a){if(e.length===1&&xi(e[0]))return[{type:F.literal,value:e[0].value}];for(var s=[],c=0,l=e;c0?new Intl.Locale(r[0]):new Intl.Locale(typeof t=="string"?t:t[0])},e.__parse=Ga,e.formats={number:{integer:{maximumFractionDigits:0},currency:{style:"currency"},percent:{style:"percent"}},date:{short:{month:"numeric",day:"numeric",year:"2-digit"},medium:{month:"short",day:"numeric",year:"numeric"},long:{month:"long",day:"numeric",year:"numeric"},full:{weekday:"long",month:"long",day:"numeric",year:"numeric"}},time:{short:{hour:"numeric",minute:"numeric"},medium:{hour:"numeric",minute:"numeric",second:"numeric"},long:{hour:"numeric",minute:"numeric",second:"numeric",timeZoneName:"short"},full:{hour:"numeric",minute:"numeric",second:"numeric",timeZoneName:"short"}}},e}();var Wa=ja;var gl=/[0-9\-+#]/,bl=/[^\d\-+#]/g;function Xa(e){return e.search(gl)}function xl(e="#.##"){let t={},r=e.length,n=Xa(e);t.prefix=n>0?e.substring(0,n):"";let i=Xa(e.split("").reverse().join("")),o=r-i,a=e.substring(o,o+1),s=o+(a==="."||a===","?1:0);t.suffix=i>0?e.substring(s,r):"",t.mask=e.substring(n,s),t.maskHasNegativeSign=t.mask.charAt(0)==="-",t.maskHasPositiveSign=t.mask.charAt(0)==="+";let c=t.mask.match(bl);return t.decimal=c&&c[c.length-1]||".",t.separator=c&&c[1]&&c[0]||",",c=t.mask.split(t.decimal),t.integer=c[0],t.fraction=c[1],t}function vl(e,t,r){let n=!1,i={value:e};e<0&&(n=!0,i.value=-i.value),i.sign=n?"-":"",i.value=Number(i.value).toFixed(t.fraction&&t.fraction.length),i.value=Number(i.value).toString();let o=t.fraction&&t.fraction.lastIndexOf("0"),[a="0",s=""]=i.value.split(".");return(!s||s&&s.length<=o)&&(s=o<0?"":(+("0."+s)).toFixed(o+1).replace("0.","")),i.integer=a,i.fraction=s,Al(i,t),(i.result==="0"||i.result==="")&&(n=!1,i.sign=""),!n&&t.maskHasPositiveSign?i.sign="+":n&&t.maskHasPositiveSign?i.sign="-":n&&(i.sign=r&&r.enforceMaskSign&&!t.maskHasNegativeSign?"":"-"),i}function Al(e,t){e.result="";let r=t.integer.split(t.separator),n=r.join(""),i=n&&n.indexOf("0");if(i>-1)for(;e.integer.lengthe*12,ts=(e,t)=>{let{start:r,end:n,displaySummary:{amount:i,duration:o,minProductQuantity:a,outcomeType:s}={}}=e;if(!(i&&o&&s&&a))return!1;let c=t?new Date(t):new Date;if(!r||!n)return!1;let l=new Date(r),h=new Date(n);return c>=l&&c<=h},ze={MONTH:"MONTH",YEAR:"YEAR"},Sl={[N.ANNUAL]:12,[N.MONTHLY]:1,[N.THREE_YEARS]:36,[N.TWO_YEARS]:24},Ni=(e,t)=>({accept:e,round:t}),Tl=[Ni(({divisor:e,price:t})=>t%e==0,({divisor:e,price:t})=>t/e),Ni(({usePrecision:e})=>e,({divisor:e,price:t})=>Math.round(t/e*100)/100),Ni(()=>!0,({divisor:e,price:t})=>Math.ceil(Math.floor(t*100/e)/100))],Ri={[H.YEAR]:{[N.MONTHLY]:ze.MONTH,[N.ANNUAL]:ze.YEAR},[H.MONTH]:{[N.MONTHLY]:ze.MONTH}},wl=(e,t)=>e.indexOf(`'${t}'`)===0,Ll=(e,t=!0)=>{let r=e.replace(/'.*?'/,"").trim(),n=ns(r);return!!n?t||(r=r.replace(/[,\.]0+/,n)):r=r.replace(/\s?(#.*0)(?!\s)?/,"$&"+Pl(e)),r},_l=e=>{let t=Cl(e),r=wl(e,t),n=e.replace(/'.*?'/,""),i=Ja.test(n)||es.test(n);return{currencySymbol:t,isCurrencyFirst:r,hasCurrencySpace:i}},rs=e=>e.replace(Ja,Qa).replace(es,Qa),Pl=e=>e.match(/#(.?)#/)?.[1]===Za?El:Za,Cl=e=>e.match(/'(.*?)'/)?.[1]??"",ns=e=>e.match(/0(.?)0/)?.[1]??"";function Et({formatString:e,price:t,usePrecision:r,isIndianPrice:n=!1},i,o=a=>a){let{currencySymbol:a,isCurrencyFirst:s,hasCurrencySpace:c}=_l(e),l=r?ns(e):"",h=Ll(e,r),d=r?2:0,u=o(t,{currencySymbol:a}),m=n?u.toLocaleString("hi-IN",{minimumFractionDigits:d,maximumFractionDigits:d}):qa(h,u),f=r?m.lastIndexOf(l):m.length,g=m.substring(0,f),T=m.substring(f+1);return{accessiblePrice:e.replace(/'.*?'/,"SYMBOL").replace(/#.*0/,m).replace(/SYMBOL/,a),currencySymbol:a,decimals:T,decimalsDelimiter:l,hasCurrencySpace:c,integer:g,isCurrencyFirst:s,recurrenceTerm:i}}var is=e=>{let{commitment:t,term:r,usePrecision:n}=e,i=Sl[r]??1;return Et(e,i>1?ze.MONTH:Ri[t]?.[r],o=>{let a={divisor:i,price:o,usePrecision:n},{round:s}=Tl.find(({accept:c})=>c(a));if(!s)throw new Error(`Missing rounding rule for: ${JSON.stringify(a)}`);return s(a)})},os=({commitment:e,term:t,...r})=>Et(r,Ri[e]?.[t]),as=e=>{let{commitment:t,instant:r,price:n,originalPrice:i,priceWithoutDiscount:o,promotion:a,quantity:s=1,term:c}=e;if(t===H.YEAR&&c===N.MONTHLY){if(!a)return Et(e,ze.YEAR,Ii);let{displaySummary:{outcomeType:l,duration:h,minProductQuantity:d=1}={}}=a;switch(l){case"PERCENTAGE_DISCOUNT":if(s>=d&&ts(a,r)){let u=parseInt(h.replace("P","").replace("M",""));if(isNaN(u))return Ii(n);let m=s*i*u,f=s*o*(12-u),g=Math.floor((m+f)*100)/100;return Et({...e,price:g},ze.YEAR)}default:return Et(e,ze.YEAR,()=>Ii(o??n))}}return Et(e,Ri[t]?.[c])};var kl={recurrenceLabel:"{recurrenceTerm, select, MONTH {/mo} YEAR {/yr} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per month} YEAR {per year} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per license} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per license} other {}}",freeLabel:"Free",freeAriaLabel:"Free",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Alternatively at {alternativePrice}",strikethroughAriaLabel:"Regularly at {strikethroughPrice}"},Il=xa("ConsonantTemplates/price"),Nl=/<\/?[^>]+(>|$)/g,z={container:"price",containerOptical:"price-optical",containerStrikethrough:"price-strikethrough",containerAnnual:"price-annual",containerAnnualPrefix:"price-annual-prefix",containerAnnualSuffix:"price-annual-suffix",disabled:"disabled",currencySpace:"price-currency-space",currencySymbol:"price-currency-symbol",decimals:"price-decimals",decimalsDelimiter:"price-decimals-delimiter",integer:"price-integer",recurrence:"price-recurrence",taxInclusivity:"price-tax-inclusivity",unitType:"price-unit-type"},Fe={perUnitLabel:"perUnitLabel",perUnitAriaLabel:"perUnitAriaLabel",recurrenceLabel:"recurrenceLabel",recurrenceAriaLabel:"recurrenceAriaLabel",taxExclusiveLabel:"taxExclusiveLabel",taxInclusiveLabel:"taxInclusiveLabel",strikethroughAriaLabel:"strikethroughAriaLabel"},Rl="TAX_EXCLUSIVE",Ol=e=>ba(e)?Object.entries(e).filter(([,t])=>bt(t)||Cr(t)||t===!0).reduce((t,[r,n])=>t+` ${r}${n===!0?"":'="'+fa(n)+'"'}`,""):"",Y=(e,t,r,n=!1)=>`${n?rs(t):t??""}`;function Ml(e,{accessibleLabel:t,currencySymbol:r,decimals:n,decimalsDelimiter:i,hasCurrencySpace:o,integer:a,isCurrencyFirst:s,recurrenceLabel:c,perUnitLabel:l,taxInclusivityLabel:h},d={}){let u=Y(z.currencySymbol,r),m=Y(z.currencySpace,o?" ":""),f="";return s&&(f+=u+m),f+=Y(z.integer,a),f+=Y(z.decimalsDelimiter,i),f+=Y(z.decimals,n),s||(f+=m+u),f+=Y(z.recurrence,c,null,!0),f+=Y(z.unitType,l,null,!0),f+=Y(z.taxInclusivity,h,!0),Y(e,f,{...d,"aria-label":t})}var Z=({displayOptical:e=!1,displayStrikethrough:t=!1,displayAnnual:r=!1,instant:n=void 0}={})=>({country:i,displayFormatted:o=!0,displayRecurrence:a=!0,displayPerUnit:s=!1,displayTax:c=!1,language:l,literals:h={},quantity:d=1}={},{commitment:u,offerSelectorIds:m,formatString:f,price:g,priceWithoutDiscount:T,taxDisplay:P,taxTerm:x,term:E,usePrecision:I,promotion:O}={},U={})=>{Object.entries({country:i,formatString:f,language:l,price:g}).forEach(([ie,qr])=>{if(qr==null)throw new Error(`Argument "${ie}" is missing for osi ${m?.toString()}, country ${i}, language ${l}`)});let $={...kl,...h},me=`${l.toLowerCase()}-${i.toUpperCase()}`;function Q(ie,qr){let Zr=$[ie];if(Zr==null)return"";try{return new Wa(Zr.replace(Nl,""),me).format(qr)}catch{return Il.error("Failed to format literal:",Zr),""}}let _t=t&&T?T:g,Ze=e?is:os;r&&(Ze=as);let{accessiblePrice:Pt,recurrenceTerm:pe,...fe}=Ze({commitment:u,formatString:f,instant:n,isIndianPrice:i==="IN",originalPrice:g,priceWithoutDiscount:T,price:e?g:_t,promotion:O,quantity:d,term:E,usePrecision:I}),J=Pt,Ct="";if(S(a)&&pe){let ie=Q(Fe.recurrenceAriaLabel,{recurrenceTerm:pe});ie&&(J+=" "+ie),Ct=Q(Fe.recurrenceLabel,{recurrenceTerm:pe})}let Xr="";if(S(s)){Xr=Q(Fe.perUnitLabel,{perUnit:"LICENSE"});let ie=Q(Fe.perUnitAriaLabel,{perUnit:"LICENSE"});ie&&(J+=" "+ie)}let kt="";S(c)&&x&&(kt=Q(P===Rl?Fe.taxExclusiveLabel:Fe.taxInclusiveLabel,{taxTerm:x}),kt&&(J+=" "+kt)),t&&(J=Q(Fe.strikethroughAriaLabel,{strikethroughPrice:J}));let It=z.container;if(e&&(It+=" "+z.containerOptical),t&&(It+=" "+z.containerStrikethrough),r&&(It+=" "+z.containerAnnual),S(o))return Ml(It,{...fe,accessibleLabel:J,recurrenceLabel:Ct,perUnitLabel:Xr,taxInclusivityLabel:kt},U);let{currencySymbol:no,decimals:Us,decimalsDelimiter:Ds,hasCurrencySpace:io,integer:Bs,isCurrencyFirst:Gs}=fe,Qe=[Bs,Ds,Us];Gs?(Qe.unshift(io?"\xA0":""),Qe.unshift(no)):(Qe.push(io?"\xA0":""),Qe.push(no)),Qe.push(Ct,Xr,kt);let zs=Qe.join("");return Y(It,zs,U)},ss=()=>(e,t,r)=>{let i=(e.displayOldPrice===void 0||S(e.displayOldPrice))&&t.priceWithoutDiscount&&t.priceWithoutDiscount!=t.price;return`${Z()(e,t,r)}${i?" "+Z({displayStrikethrough:!0})(e,t,r):""}`},cs=()=>(e,t,r)=>{let{instant:n}=e;try{n||(n=new URLSearchParams(document.location.search).get("instant")),n&&(n=new Date(n))}catch{n=void 0}let i={...e,displayTax:!1,displayPerUnit:!1};return`${(e.displayOldPrice===void 0||S(e.displayOldPrice))&&t.priceWithoutDiscount&&t.priceWithoutDiscount!=t.price?Z({displayStrikethrough:!0})(i,t,r)+" ":""}${Z()(e,t,r)}${Y(z.containerAnnualPrefix," (")}${Z({displayAnnual:!0,instant:n})(i,t,r)}${Y(z.containerAnnualSuffix,")")}`},ls=()=>(e,t,r)=>{let n={...e,displayTax:!1,displayPerUnit:!1};return`${Z()(e,t,r)}${Y(z.containerAnnualPrefix," (")}${Z({displayAnnual:!0})(n,t,r)}${Y(z.containerAnnualSuffix,")")}`};var Oi=Z(),Mi=ss(),Vi=Z({displayOptical:!0}),$i=Z({displayStrikethrough:!0}),Hi=Z({displayAnnual:!0}),Ui=ls(),Di=cs();var Vl=(e,t)=>{if(!(!vt(e)||!vt(t)))return Math.floor((t-e)/t*100)},hs=()=>(e,t)=>{let{price:r,priceWithoutDiscount:n}=t,i=Vl(r,n);return i===void 0?'':`${i}%`};var Bi=hs();var{freeze:Qt}=Object,$l={V2:"UCv2",V3:"UCv3"},ee=Qt({...$l}),Hl={CHECKOUT:"checkout",CHECKOUT_EMAIL:"checkout/email",SEGMENTATION:"segmentation",BUNDLE:"bundle",COMMITMENT:"commitment",RECOMMENDATION:"recommendation",EMAIL:"email",PAYMENT:"payment",CHANGE_PLAN_TEAM_PLANS:"change-plan/team-upgrade/plans",CHANGE_PLAN_TEAM_PAYMENT:"change-plan/team-upgrade/payment"},te=Qt({...Hl}),Ke={STAGE:"STAGE",PRODUCTION:"PRODUCTION",LOCAL:"LOCAL"},Gi=Qt({...H}),zi=Qt({...Aa}),Fi=Qt({...N});var ds="mas-commerce-service";function us(e,{once:t=!1}={}){let r=null;function n(){let i=document.querySelector(ds);i!==r&&(r=i,i&&e(i))}return document.addEventListener(at,n,{once:t}),Ye(n),()=>document.removeEventListener(at,n)}function Jt(e,{country:t,forceTaxExclusive:r,perpetual:n}){let i;if(e.length<2)i=e;else{let o=t==="GB"||n?"EN":"MULT",[a,s]=e;i=[a.language===o?a:s]}return r&&(i=i.map(gi)),i}var Ye=e=>window.setTimeout(e);function St(e,t=1){if(e==null)return[t];let r=(Array.isArray(e)?e:String(e).split(",")).map(yt).filter(vt);return r.length||(r=[t]),r}function Br(e){return e==null?[]:(Array.isArray(e)?e:String(e).split(",")).filter(li)}function j(){return document.getElementsByTagName(ds)?.[0]}function Ul(e){return`https://${e==="PRODUCTION"?"www.adobe.com":"www.stage.adobe.com"}/offers/promo-terms.html`}var er,je=class je extends HTMLAnchorElement{constructor(){super();G(this,er,!1);this.setAttribute("is",je.is)}get isUptLink(){return!0}initializeWcsData(r,n){this.setAttribute("data-wcs-osi",r),n&&this.setAttribute("data-promotion-code",n),K(this,er,!0),this.composePromoTermsUrl()}attributeChangedCallback(r,n,i){L(this,er)&&this.composePromoTermsUrl()}composePromoTermsUrl(){let r=this.getAttribute("data-wcs-osi");if(!r){let d=this.closest("merch-card").querySelector("aem-fragment").getAttribute("fragment");console.error(`Missing 'data-wcs-osi' attribute on upt-link. Fragment: ${d}`);return}let n=j(),i=[r],o=this.getAttribute("data-promotion-code"),{country:a,language:s,env:c}=n.settings,l={country:a,language:s,wcsOsi:i,promotionCode:o},h=n.resolveOfferSelectors(l);Promise.all(h).then(([[d]])=>{let u=`locale=${s}_${a}&country=${a}&offer_id=${d.offerId}`;o&&(u+=`&promotion_code=${encodeURIComponent(o)}`),this.href=`${Ul(c)}?${u}`}).catch(d=>{console.error(`Could not resolve offer selectors for id: ${r}.`,d.message)})}static createFrom(r){let n=new je;for(let i of r.attributes)i.name!=="is"&&(i.name==="class"&&i.value.includes("upt-link")?n.setAttribute("class",i.value.replace("upt-link","").trim()):n.setAttribute(i.name,i.value));return n.innerHTML=r.innerHTML,n.setAttribute("tabindex",0),n}};er=new WeakMap,p(je,"is","upt-link"),p(je,"tag","a"),p(je,"observedAttributes",["data-wcs-osi","data-promotion-code"]);var ue=je;window.customElements.get(ue.is)||window.customElements.define(ue.is,ue,{extends:ue.tag});var Dl="#000000",ms="#F8D904",Bl="#EAEAEA",Gl=/(accent|primary|secondary)(-(outline|link))?/,zl="mas:product_code/",Fl="daa-ll",tr="daa-lh",Kl=["XL","L","M","S"],Ki="...";function We(e,t,r,n){let i=n[e];if(t[e]&&i){let o={slot:i?.slot},a=t[e];if(i.maxCount&&typeof a=="string"){let[c,l]=nh(a,i.maxCount,i.withSuffix);c!==a&&(o.title=l,a=c)}let s=Re(i.tag,o,a);r.append(s)}}function Yl(e,t,r){e.mnemonicIcon?.map((i,o)=>({icon:i,alt:e.mnemonicAlt[o]??"",link:e.mnemonicLink[o]??""}))?.forEach(({icon:i,alt:o,link:a})=>{if(a&&!/^https?:/.test(a))try{a=new URL(`https://${a}`).href.toString()}catch{a="#"}let s={slot:"icons",src:i,loading:t.loading,size:r?.size??"l"};o&&(s.alt=o),a&&(s.href=a);let c=Re("merch-icon",s);t.append(c)})}function jl(e,t){e.badge?(t.setAttribute("badge-text",e.badge),t.setAttribute("badge-color",e.badgeColor||Dl),t.setAttribute("badge-background-color",e.badgeBackgroundColor||ms),t.setAttribute("border-color",e.badgeBackgroundColor||ms)):t.setAttribute("border-color",e.borderColor||Bl)}function Wl(e,t,r){r?.includes(e.size)&&t.setAttribute("size",e.size)}function Xl(e,t,r){We("cardTitle",e,t,{cardTitle:r})}function ql(e,t,r){We("subtitle",e,t,r)}function Zl(e,t,r){if(!e.backgroundColor||e.backgroundColor.toLowerCase()==="default"){t.style.removeProperty("--merch-card-custom-background-color"),t.removeAttribute("background-color");return}r?.[e.backgroundColor]&&(t.style.setProperty("--merch-card-custom-background-color",`var(${r[e.backgroundColor]})`),t.setAttribute("background-color",e.backgroundColor))}function Ql(e,t,r){e.borderColor&&r&&e.borderColor!=="transparent"&&t.style.setProperty("--merch-card-custom-border-color",`var(--${e.borderColor})`)}function Jl(e,t,r){if(e.backgroundImage){let n={loading:t.loading??"lazy",src:e.backgroundImage};if(e.backgroundImageAltText?n.alt=e.backgroundImageAltText:n.role="none",!r)return;if(r?.attribute){t.setAttribute(r.attribute,e.backgroundImage);return}t.append(Re(r.tag,{slot:r.slot},Re("img",n)))}}function eh(e,t,r){We("prices",e,t,r)}function th(e,t,r){We("promoText",e,t,r),We("description",e,t,r),We("callout",e,t,r),We("quantitySelect",e,t,r)}function rh(e,t,r,n){e.showStockCheckbox&&r.stockOffer&&(t.setAttribute("checkbox-label",n.stockCheckboxLabel),t.setAttribute("stock-offer-osis",n.stockOfferOsis)),n.secureLabel&&r.secureLabel&&t.setAttribute("secure-label",n.secureLabel)}function nh(e,t,r=!0){try{let n=typeof e!="string"?"":e,i=ps(n);if(i.length<=t)return[n,i];let o=0,a=!1,s=r?t-Ki.length<1?1:t-Ki.length:t,c=[];for(let d of n){if(o++,d==="<")if(a=!0,n[o]==="/")c.pop();else{let u="";for(let m of n.substring(o)){if(m===" "||m===">")break;u+=m}c.push(u)}if(d==="/"&&n[o]===">"&&c.pop(),d===">"){a=!1;continue}if(!a&&(s--,s===0))break}let l=n.substring(0,o).trim();if(c.length>0){c[0]==="p"&&c.shift();for(let d of c.reverse())l+=``}return[`${l}${r?Ki:""}`,i]}catch{let i=typeof e=="string"?e:"",o=ps(i);return[i,o]}}function ps(e){if(!e)return"";let t="",r=!1;for(let n of e){if(n==="<"&&(r=!0),n===">"){r=!1;continue}r||(t+=n)}return t}function ih(e,t){t.querySelectorAll("a.upt-link").forEach(n=>{let i=ue.createFrom(n);n.replaceWith(i),i.initializeWcsData(e.osi,e.promoCode)})}function oh(e,t,r,n){let o=customElements.get("checkout-button").createCheckoutButton({},e.innerHTML);o.setAttribute("tabindex",0);for(let h of e.attributes)["class","is"].includes(h.name)||o.setAttribute(h.name,h.value);o.firstElementChild?.classList.add("spectrum-Button-label");let a=t.ctas.size??"M",s=`spectrum-Button--${n}`,c=Kl.includes(a)?`spectrum-Button--size${a}`:"spectrum-Button--sizeM",l=["spectrum-Button",s,c];return r&&l.push("spectrum-Button--outline"),o.classList.add(...l),o}function ah(e,t,r,n){let o=customElements.get("checkout-button").createCheckoutButton(e.dataset);e.dataset.analyticsId&&o.setAttribute("data-analytics-id",e.dataset.analyticsId),o.connectedCallback(),o.render();let a="fill";r&&(a="outline");let s=Re("sp-button",{treatment:a,variant:n,tabIndex:0,size:t.ctas.size??"m",...e.dataset.analyticsId&&{"data-analytics-id":e.dataset.analyticsId}},e.innerHTML);return s.source=o,o.onceSettled().then(c=>{s.setAttribute("data-navigation-url",c.href)}),s.addEventListener("click",c=>{c.defaultPrevented||o.click()}),s}function sh(e,t){return e.classList.add("con-button"),t&&e.classList.add("blue"),e}function ch(e,t,r,n){if(e.ctas){let{slot:i}=r.ctas,o=Re("div",{slot:i},e.ctas),a=[...o.querySelectorAll("a")].map(s=>{let c=Gl.exec(s.className)?.[0]??"accent",l=c.includes("accent"),h=c.includes("primary"),d=c.includes("secondary"),u=c.includes("-outline"),m=c.includes("-link");if(t.consonant)return sh(s,l);if(m)return s;let f;return l?f="accent":h?f="primary":d&&(f="secondary"),t.spectrum==="swc"?ah(s,r,u,f):oh(s,r,u,f)});o.innerHTML="",o.append(...a),t.append(o)}}function lh(e,t){let{tags:r}=e,n=r?.find(o=>o.startsWith(zl))?.split("/").pop();if(!n)return;t.setAttribute(tr,n),[...t.shadowRoot.querySelectorAll("a[data-analytics-id],button[data-analytics-id]"),...t.querySelectorAll("a[data-analytics-id],button[data-analytics-id]")].forEach((o,a)=>{o.setAttribute(Fl,`${o.dataset.analyticsId}-${a+1}`)})}function hh(e){e.spectrum==="css"&&[["primary-link","primary"],["secondary-link","secondary"]].forEach(([t,r])=>{e.querySelectorAll(`a.${t}`).forEach(n=>{n.classList.remove(t),n.classList.add("spectrum-Link",`spectrum-Link--${r}`)})})}function dh(e){e.querySelectorAll("[slot]").forEach(n=>{n.remove()}),["checkbox-label","stock-offer-osis","secure-label","background-image","background-color","border-color","badge-background-color","badge-color","badge-text","size",tr].forEach(n=>e.removeAttribute(n));let r=["wide-strip","thin-strip"];e.classList.remove(...r)}async function fs(e,t){let{fields:r}=e,{variant:n}=r;if(!n)return;let i={stockCheckboxLabel:"Add a 30-day free trial of Adobe Stock.*",stockOfferOsis:"",secureLabel:"Secure transaction"};dh(t),t.id=e.id,t.removeAttribute("background-image"),t.removeAttribute("background-color"),t.removeAttribute("badge-background-color"),t.removeAttribute("badge-color"),t.removeAttribute("badge-text"),t.removeAttribute("size"),t.classList.remove("wide-strip"),t.classList.remove("thin-strip"),t.removeAttribute(tr),t.variant=n,await t.updateComplete;let{aemFragmentMapping:o}=t.variantLayout;o&&(o.style==="consonant"&&t.setAttribute("consonant",!0),Yl(r,t,o.mnemonics),jl(r,t),Wl(r,t,o.size),Xl(r,t,o.title),ql(r,t,o),eh(r,t,o),Jl(r,t,o.backgroundImage),Zl(r,t,o.allowedColors),Ql(r,t,o.borderColor),th(r,t,o),rh(r,t,o,i),ih(r,t),ch(r,t,o,n),lh(r,t),hh(t))}var uh="merch-card",mh=":start",ph=":ready",fh=1e4,gs="merch-card:",nr,Yi,rr=class extends X{constructor(){super();G(this,nr);p(this,"customerSegment");p(this,"marketSegment");p(this,"variantLayout");this.filters={},this.types="",this.selected=!1,this.spectrum="css",this.loading="lazy",this.handleAemFragmentEvents=this.handleAemFragmentEvents.bind(this)}static getFragmentMapping(r){return oa[r]}firstUpdated(){this.variantLayout=Jn(this,!1),this.variantLayout?.connectedCallbackHook(),this.aemFragment?.updateComplete.catch(()=>{this.style.display="none"})}willUpdate(r){(r.has("variant")||!this.variantLayout)&&(this.variantLayout=Jn(this),this.variantLayout.connectedCallbackHook())}updated(r){(r.has("badgeBackgroundColor")||r.has("borderColor"))&&this.style.setProperty("--consonant-merch-card-border",this.computedBorderStyle),this.variantLayout?.postCardUpdateHook(r)}get theme(){return this.closest("sp-theme")}get dir(){return this.closest("[dir]")?.getAttribute("dir")??"ltr"}get prices(){return Array.from(this.querySelectorAll('span[is="inline-price"][data-wcs-osi]'))}render(){if(!(!this.isConnected||!this.variantLayout||this.style.display==="none"))return this.variantLayout.renderLayout()}get computedBorderStyle(){return["twp","ccd-slice","ccd-suggested"].includes(this.variant)?"":`1px solid ${this.borderColor?this.borderColor:this.badgeBackgroundColor}`}get badgeElement(){return this.shadowRoot.getElementById("badge")}get headingmMSlot(){return this.shadowRoot.querySelector('slot[name="heading-m"]').assignedElements()[0]}get footerSlot(){return this.shadowRoot.querySelector('slot[name="footer"]')?.assignedElements()[0]}get price(){return this.headingmMSlot?.querySelector('span[is="inline-price"]')}get checkoutLinks(){return[...this.footerSlot?.querySelectorAll('a[is="checkout-link"]')??[]]}async toggleStockOffer({target:r}){if(!this.stockOfferOsis)return;let n=this.checkoutLinks;if(n.length!==0)for(let i of n){await i.onceSettled();let o=i.value?.[0]?.planType;if(!o)return;let a=this.stockOfferOsis[o];if(!a)return;let s=i.dataset.wcsOsi.split(",").filter(c=>c!==a);r.checked&&s.push(a),i.dataset.wcsOsi=s.join(",")}}handleQuantitySelection(r){let n=this.checkoutLinks;for(let i of n)i.dataset.quantity=r.detail.option}get titleElement(){return this.querySelector(this.variantLayout?.headingSelector||".card-heading")}get title(){return this.titleElement?.textContent?.trim()}get description(){return this.querySelector('[slot="body-xs"]')?.textContent?.trim()}updateFilters(r){let n={...this.filters};Object.keys(n).forEach(i=>{if(r){n[i].order=Math.min(n[i].order||2,2);return}let o=n[i].order;o===1||isNaN(o)||(n[i].order=Number(o)+1)}),this.filters=n}includes(r){return this.textContent.match(new RegExp(r,"i"))!==null}connectedCallback(){super.connectedCallback();let r=this.querySelector("aem-fragment")?.getAttribute("fragment");performance.mark(`${gs}${r}${mh}`),this.addEventListener(st,this.handleQuantitySelection),this.addEventListener(Cn,this.merchCardReady,{once:!0}),this.updateComplete.then(()=>{this.merchCardReady()}),this.storageOptions?.addEventListener("change",this.handleStorageChange),this.addEventListener(Me,this.handleAemFragmentEvents),this.addEventListener(Oe,this.handleAemFragmentEvents),this.aemFragment||setTimeout(()=>this.checkReady(),0)}disconnectedCallback(){super.disconnectedCallback(),this.variantLayout?.disconnectedCallbackHook(),this.removeEventListener(st,this.handleQuantitySelection),this.storageOptions?.removeEventListener(Sr,this.handleStorageChange),this.removeEventListener(Me,this.handleAemFragmentEvents),this.removeEventListener(Oe,this.handleAemFragmentEvents)}async handleAemFragmentEvents(r){if(r.type===Me&&ge(this,nr,Yi).call(this,"AEM fragment cannot be loaded"),r.type===Oe&&r.target.nodeName==="AEM-FRAGMENT"){let n=r.detail;await fs(n,this),this.checkReady()}}async checkReady(){let r=Promise.all([...this.querySelectorAll('span[is="inline-price"][data-wcs-osi],a[is="checkout-link"][data-wcs-osi]')].map(o=>o.onceSettled().catch(()=>o))).then(o=>o.every(a=>a.classList.contains("placeholder-resolved"))),n=new Promise(o=>setTimeout(()=>o(!1),fh));if(await Promise.race([r,n])===!0){performance.mark(`${gs}${this.id}${ph}`),this.dispatchEvent(new CustomEvent(Nn,{bubbles:!0,composed:!0}));return}ge(this,nr,Yi).call(this,"Contains unresolved offers")}get aemFragment(){return this.querySelector("aem-fragment")}get storageOptions(){return this.querySelector("sp-radio-group#storage")}get storageSpecificOfferSelect(){let r=this.storageOptions?.selected;if(r){let n=this.querySelector(`merch-offer-select[storage="${r}"]`);if(n)return n}return this.querySelector("merch-offer-select")}get offerSelect(){return this.storageOptions?this.storageSpecificOfferSelect:this.querySelector("merch-offer-select")}get quantitySelect(){return this.querySelector("merch-quantity-select")}displayFooterElementsInColumn(){if(!this.classList.contains("product"))return;let r=this.shadowRoot.querySelector(".secure-transaction-label");(this.footerSlot?.querySelectorAll('a[is="checkout-link"].con-button')).length===2&&r&&r.parentElement.classList.add("footer-column")}merchCardReady(){this.offerSelect&&!this.offerSelect.planType||(this.dispatchEvent(new CustomEvent(kn,{bubbles:!0})),this.displayFooterElementsInColumn())}handleStorageChange(){let r=this.closest("merch-card")?.offerSelect.cloneNode(!0);r&&this.dispatchEvent(new CustomEvent(Sr,{detail:{offerSelect:r},bubbles:!0}))}get dynamicPrice(){return this.querySelector('[slot="price"]')}selectMerchOffer(r){if(r===this.merchOffer)return;this.merchOffer=r;let n=this.dynamicPrice;if(r.price&&n){let i=r.price.cloneNode(!0);n.onceSettled?n.onceSettled().then(()=>{n.replaceWith(i)}):n.replaceWith(i)}}};nr=new WeakSet,Yi=function(r){this.dispatchEvent(new CustomEvent(Rn,{detail:r,bubbles:!0,composed:!0}))},p(rr,"properties",{name:{type:String,attribute:"name",reflect:!0},variant:{type:String,reflect:!0},size:{type:String,attribute:"size",reflect:!0},badgeColor:{type:String,attribute:"badge-color",reflect:!0},borderColor:{type:String,attribute:"border-color",reflect:!0},badgeBackgroundColor:{type:String,attribute:"badge-background-color",reflect:!0},backgroundImage:{type:String,attribute:"background-image",reflect:!0},badgeText:{type:String,attribute:"badge-text"},actionMenu:{type:Boolean,attribute:"action-menu"},customHr:{type:Boolean,attribute:"custom-hr"},consonant:{type:Boolean,attribute:"consonant"},spectrum:{type:String,attribute:"spectrum"},detailBg:{type:String,attribute:"detail-bg"},secureLabel:{type:String,attribute:"secure-label"},checkboxLabel:{type:String,attribute:"checkbox-label"},selected:{type:Boolean,attribute:"aria-selected",reflect:!0},storageOption:{type:String,attribute:"storage",reflect:!0},stockOfferOsis:{type:Object,attribute:"stock-offer-osis",converter:{fromAttribute:r=>{if(!r)return;let[n,i,o]=r.split(",");return{PUF:n,ABM:i,M2M:o}}}},filters:{type:String,reflect:!0,converter:{fromAttribute:r=>Object.fromEntries(r.split(",").map(n=>{let[i,o,a]=n.split(":"),s=Number(o);return[i,{order:isNaN(s)?void 0:s,size:a}]})),toAttribute:r=>Object.entries(r).map(([n,{order:i,size:o}])=>[n,i,o].filter(a=>a!=null).join(":")).join(",")}},types:{type:String,attribute:"types",reflect:!0},merchOffer:{type:Object},analyticsId:{type:String,attribute:tr,reflect:!0},loading:{type:String}}),p(rr,"styles",[zo,aa(),...Fo()]);customElements.define(uh,rr);var Tt=class extends X{constructor(){super(),this.size="m",this.alt="",this.loading="lazy"}render(){let{href:t}=this;return t?b` + ${this.alt} + `:b` ${this.alt}`}};p(Tt,"properties",{size:{type:String,attribute:!0},src:{type:String,attribute:!0},alt:{type:String,attribute:!0},href:{type:String,attribute:!0},loading:{type:String,attribute:!0}}),p(Tt,"styles",_` + :host { + --img-width: 32px; + --img-height: 32px; + display: block; + width: var(--mod-img-width, var(--img-width)); + height: var(--mod-img-height, var(--img-height)); + } + + :host([size='s']) { + --img-width: 24px; + --img-height: 24px; + } + + :host([size='m']) { + --img-width: 30px; + --img-height: 30px; + } + + :host([size='l']) { + --img-width: 40px; + --img-height: 40px; + } + + img { + width: var(--mod-img-width, var(--img-width)); + height: var(--mod-img-height, var(--img-height)); + } + `);customElements.define("merch-icon",Tt);var bs=_` + :host { + box-sizing: border-box; + --background-color: var(--qs-background-color, #f6f6f6); + --text-color: #000; + --radius: 5px; + --border-color: var(--qs-border-color, #e8e8e8); + --border-width: var(--qs-border-width, 1px); + --label-font-size: var(--qs-label-font-size, 12px); + --font-size: var(--qs-font-size, 12px); + --label-color: var(--qs-lable-color, #000); + --input-height: var(--qs-input-height, 30px); + --input-width: var(--qs-input-width, 72px); + --button-width: var(--qs-button-width, 30px); + --font-size: var(--qs-font-size, 12px); + --picker-fill-icon: var( + --chevron-down-icon, + url('data:image/svg+xml,') + ); + --qs-transition: var(--transition); + + display: block; + position: relative; + color: var(--text-color); + line-height: var(--qs-line-height, 2); + } + + .text-field { + display: flex; + align-items: center; + width: var(--input-width); + position: relative; + margin-top: 6px; + } + + .text-field-input { + font-family: inherit; + padding: 0; + font-size: var(--font-size); + height: var(--input-height); + width: calc(var(--input-width) - var(--button-width)); + border: var(--border-width) solid var(--border-color); + border-top-left-radius: var(--radius); + border-bottom-left-radius: var(--radius); + border-right: none; + padding-inline-start: 12px; + box-sizing: border-box; + -moz-appearance: textfield; + } + + .text-field-input::-webkit-inner-spin-button, + .text-field-input::-webkit-outer-spin-button { + margin: 0; + -webkit-appearance: none; + } + + .label { + font-size: var(--label-font-size); + color: var(--label-color); + } + + .picker-button { + width: var(--button-width); + height: var(--input-height); + position: absolute; + inset-inline-end: 0; + border: var(--border-width) solid var(--border-color); + border-top-right-radius: var(--radius); + border-bottom-right-radius: var(--radius); + background-color: var(--background-color); + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + padding: 0; + } + + .picker-button-fill { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + background-image: var(--picker-fill-icon); + background-position: center; + background-repeat: no-repeat; + } + + .popover { + position: absolute; + top: var(--input-height); + left: 0; + width: var(--input-width); + border-radius: var(--radius); + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + overflow: hidden; + z-index: 100; + margin-top: var(--popover-margin-top, 6px); + transition: var(--qs-transition); + opacity: 0; + box-sizing: border-box; + } + + .popover.open { + opacity: 1; + background: #ffffff; + border: var(--border-width) solid var(--border-color); + } + + .popover.closed { + max-height: 0; + opacity: 0; + } + + ::slotted(p) { + margin: 0; + } + + .item { + display: flex; + align-items: center; + color: var(--text-color); + font-size: var(--font-size); + padding-inline-start: 12px; + box-sizing: border-box; + } + + .item.highlighted { + background-color: var(--background-color); + } +`;var[cf,lf,xs,vs,As,hf]=["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Enter","Tab"];var ji=class extends X{static get properties(){return{closed:{type:Boolean,reflect:!0},selected:{type:Number},min:{type:Number},max:{type:Number},step:{type:Number},maxInput:{type:Number,attribute:"max-input"},defaultValue:{type:Number,attribute:"default-value",reflect:!0},title:{type:String}}}static get styles(){return bs}constructor(){super(),this.options=[],this.title="",this.closed=!0,this.min=0,this.max=0,this.step=0,this.maxInput=void 0,this.defaultValue=void 0,this.selectedValue=0,this.highlightedIndex=0,this.toggleMenu=this.toggleMenu.bind(this),this.handleClickOutside=this.handleClickOutside.bind(this),this.boundKeydownListener=this.handleKeydown.bind(this),this.addEventListener("keydown",this.boundKeydownListener),window.addEventListener("mousedown",this.handleClickOutside),this.handleKeyupDebounced=Ko(this.handleKeyup.bind(this),500)}handleKeyup(){this.handleInput(),this.sendEvent()}handleKeydown(t){switch(t.key){case vs:this.closed||(t.preventDefault(),this.highlightedIndex=(this.highlightedIndex+1)%this.options.length,this.requestUpdate());break;case xs:this.closed||(t.preventDefault(),this.highlightedIndex=(this.highlightedIndex-1+this.options.length)%this.options.length,this.requestUpdate());break;case As:if(this.closed)this.closePopover(),this.blur();else{let r=this.options[this.highlightedIndex];if(!r)break;this.selectedValue=r,this.handleMenuOption(this.selectedValue),this.toggleMenu()}break}t.composedPath().includes(this)&&t.stopPropagation()}adjustInput(t,r){this.selectedValue=r,t.value=r,this.highlightedIndex=this.options.indexOf(r)}handleInput(){let t=this.shadowRoot.querySelector(".text-field-input"),r=parseInt(t.value);if(!isNaN(r))if(r>0&&r!==this.selectedValue){let n=r;this.maxInput&&r>this.maxInput&&(n=this.maxInput),this.min&&n0)for(let r=this.min;r<=this.max;r+=this.step)t.push(r);return t}updated(t){(t.has("min")||t.has("max")||t.has("step")||t.has("defaultValue"))&&(this.options=this.generateOptionsArray(),this.highlightedIndex=this.defaultValue?this.options.indexOf(this.defaultValue):0,this.handleMenuOption(this.defaultValue?this.defaultValue:this.options[0]),this.requestUpdate())}handleClickOutside(t){t.composedPath().includes(this)||this.closePopover()}toggleMenu(){this.closed=!this.closed}handleMouseEnter(t){this.highlightedIndex=t,this.requestUpdate()}handleMenuOption(t){t===this.max&&this.shadowRoot.querySelector(".text-field-input")?.focus(),this.selectedValue=t,this.sendEvent(),this.closePopover()}sendEvent(){let t=new CustomEvent(st,{detail:{option:this.selectedValue},bubbles:!0});this.dispatchEvent(t)}closePopover(){this.closed||this.toggleMenu()}get offerSelect(){return this.querySelector("merch-offer-select")}get popover(){return b`
+ ${this.options.map((t,r)=>b` +
+ ${t===this.max?`${t}+`:t} +
+ `)} +
`}render(){return b` +
${this.title}
+
+ + + ${this.popover} +
+ `}};customElements.define("merch-quantity-select",ji);var Xe={clientId:"merch-at-scale",delimiter:"\xB6",ignoredProperties:["analytics","literals"],serializableTypes:["Array","Object"],sampleRate:1,tags:"acom",isProdDomain:!1},ys=1e3,Es=new Set;function gh(e){return e instanceof Error||typeof e?.originatingRequest=="string"}function Ss(e){if(e==null)return;let t=typeof e;if(t==="function")return e.name?`function ${e.name}`:"function";if(t==="object"){if(e instanceof Error)return e.message;if(typeof e.originatingRequest=="string"){let{message:n,originatingRequest:i,status:o}=e;return[n,o,i].filter(Boolean).join(" ")}let r=e[Symbol.toStringTag]??Object.getPrototypeOf(e).constructor.name;if(!Xe.serializableTypes.includes(r))return r}return e}function bh(e,t){if(!Xe.ignoredProperties.includes(e))return Ss(t)}var Wi={append(e){if(e.level!=="error")return;let{message:t,params:r}=e,n=[],i=[],o=t;r.forEach(l=>{l!=null&&(gh(l)?n:i).push(l)}),n.length&&(o+=" "+n.map(Ss).join(" "));let{pathname:a,search:s}=window.location,c=`${Xe.delimiter}page=${a}${s}`;c.length>ys&&(c=`${c.slice(0,ys)}`),o+=c,i.length&&(o+=`${Xe.delimiter}facts=`,o+=JSON.stringify(i,bh)),Es.has(o)||(Es.add(o),window.lana?.log(o,Xe))}};function wt(e){Object.assign(Xe,Object.fromEntries(Object.entries(e).filter(([t,r])=>t in Xe&&r!==""&&r!==null&&r!==void 0&&!Number.isNaN(r))))}var w=Object.freeze({checkoutClientId:"adobe_com",checkoutWorkflow:ee.V3,checkoutWorkflowStep:te.EMAIL,country:"US",displayOldPrice:!0,displayPerUnit:!1,displayRecurrence:!0,displayTax:!1,env:Ke.PRODUCTION,forceTaxExclusive:!1,language:"en",entitlement:!1,extraOptions:{},modal:!1,promotionCode:"",quantity:1,wcsApiKey:"wcms-commerce-ims-ro-user-milo",wcsBufferDelay:1,wcsURL:"https://www.adobe.com/web_commerce_artifact",landscape:ce.PUBLISHED,wcsBufferLimit:1});var Xi=Object.freeze({LOCAL:"local",PROD:"prod",STAGE:"stage"});function xh({locale:e=void 0,country:t=void 0,language:r=void 0}={}){return r??(r=e?.split("_")?.[0]||w.language),t??(t=e?.split("_")?.[1]||w.country),e??(e=`${r}_${t}`),{locale:e,country:t,language:r}}function qi(e={}){let{commerce:t={}}=e,r=Ke.PRODUCTION,n=zn,i=R("checkoutClientId",t)??w.checkoutClientId,o=Te(R("checkoutWorkflow",t),ee,w.checkoutWorkflow),a=te.CHECKOUT;o===ee.V3&&(a=Te(R("checkoutWorkflowStep",t),te,w.checkoutWorkflowStep));let s=S(R("displayOldPrice",t),w.displayOldPrice),c=S(R("displayPerUnit",t),w.displayPerUnit),l=S(R("displayRecurrence",t),w.displayRecurrence),h=S(R("displayTax",t),w.displayTax),d=S(R("entitlement",t),w.entitlement),u=S(R("modal",t),w.modal),m=S(R("forceTaxExclusive",t),w.forceTaxExclusive),f=R("promotionCode",t)??w.promotionCode,g=St(R("quantity",t)),T=R("wcsApiKey",t)??w.wcsApiKey,P=t?.env==="stage",x=ce.PUBLISHED;["true",""].includes(t.allowOverride)&&(P=(R(Bn,t,{metadata:!1})?.toLowerCase()??t?.env)==="stage",x=Te(R(Gn,t),ce,x)),P&&(r=Ke.STAGE,n=Fn);let I=yt(R("wcsBufferDelay",t),w.wcsBufferDelay),O=yt(R("wcsBufferLimit",t),w.wcsBufferLimit);return{...xh(e),displayOldPrice:s,checkoutClientId:i,checkoutWorkflow:o,checkoutWorkflowStep:a,displayPerUnit:c,displayRecurrence:l,displayTax:h,entitlement:d,extraOptions:w.extraOptions,modal:u,env:r,forceTaxExclusive:m,promotionCode:f,quantity:g,wcsApiKey:T,wcsBufferDelay:I,wcsBufferLimit:O,wcsURL:n,landscape:x}}var Zi={DEBUG:"debug",ERROR:"error",INFO:"info",WARN:"warn"},vh=Date.now(),Qi=new Set,Ji=new Set,Ts=new Map,ws={append({level:e,message:t,params:r,timestamp:n,source:i}){console[e](`${n}ms [${i}] %c${t}`,"font-weight: bold;",...r)}},Ls={filter:({level:e})=>e!==Zi.DEBUG},Ah={filter:()=>!1};function yh(e,t,r,n,i){return{level:e,message:t,namespace:r,get params(){return n.length===1&&Ft(n[0])&&(n=n[0](),Array.isArray(n)||(n=[n])),n},source:i,timestamp:Date.now()-vh}}function Eh(e){[...Ji].every(t=>t(e))&&Qi.forEach(t=>t(e))}function _s(e){let t=(Ts.get(e)??0)+1;Ts.set(e,t);let r=`${e} #${t}`,n={id:r,namespace:e,module:i=>_s(`${n.namespace}/${i}`),updateConfig:wt};return Object.values(Zi).forEach(i=>{n[i]=(o,...a)=>Eh(yh(i,o,e,a,r))}),Object.seal(n)}function Gr(...e){e.forEach(t=>{let{append:r,filter:n}=t;Ft(n)&&Ji.add(n),Ft(r)&&Qi.add(r)})}function Sh(e={}){let{name:t}=e,r=S(R("commerce.debug",{search:!0,storage:!0}),t===Xi.LOCAL);return Gr(r?ws:Ls),t===Xi.PROD&&Gr(Wi),W}function Th(){Qi.clear(),Ji.clear()}var W={..._s(Dn),Level:Zi,Plugins:{consoleAppender:ws,debugFilter:Ls,quietFilter:Ah,lanaAppender:Wi},init:Sh,reset:Th,use:Gr};var wh={[ae]:On,[ye]:Mn,[se]:Vn},Lh={[ae]:Hn,[se]:Un},Lt=class{constructor(t){p(this,"changes",new Map);p(this,"connected",!1);p(this,"dispose",xt);p(this,"error");p(this,"log");p(this,"options");p(this,"promises",[]);p(this,"state",ye);p(this,"timer",null);p(this,"value");p(this,"version",0);p(this,"wrapperElement");this.wrapperElement=t}update(){[ae,ye,se].forEach(t=>{this.wrapperElement.classList.toggle(wh[t],t===this.state)})}notify(){(this.state===se||this.state===ae)&&(this.state===se?this.promises.forEach(({resolve:t})=>t(this.wrapperElement)):this.state===ae&&this.promises.forEach(({reject:t})=>t(this.error)),this.promises=[]),this.wrapperElement.dispatchEvent(new CustomEvent(Lh[this.state],{bubbles:!0}))}attributeChangedCallback(t,r,n){this.changes.set(t,n),this.requestUpdate()}connectedCallback(){this.dispose=us(()=>this.requestUpdate(!0))}disconnectedCallback(){this.connected&&(this.connected=!1,this.log?.debug("Disconnected:",{element:this.wrapperElement})),this.dispose(),this.dispose=xt}onceSettled(){let{error:t,promises:r,state:n}=this;return se===n?Promise.resolve(this.wrapperElement):ae===n?Promise.reject(t):new Promise((i,o)=>{r.push({resolve:i,reject:o})})}toggleResolved(t,r,n){return t!==this.version?!1:(n!==void 0&&(this.options=n),this.state=se,this.value=r,this.update(),this.log?.debug("Resolved:",{element:this.wrapperElement,value:r}),Ye(()=>this.notify()),!0)}toggleFailed(t,r,n){return t!==this.version?!1:(n!==void 0&&(this.options=n),this.error=r,this.state=ae,this.update(),this.log?.error("Failed:",{element:this.wrapperElement,error:r}),Ye(()=>this.notify()),!0)}togglePending(t){return this.version++,t&&(this.options=t),this.state=ye,this.update(),this.log?.debug("Pending:",{osi:this.wrapperElement?.options?.wcsOsi}),this.version}requestUpdate(t=!1){if(!this.wrapperElement.isConnected||!j()||this.timer)return;let r=W.module("mas-element"),{error:n,options:i,state:o,value:a,version:s}=this;this.state=ye,this.timer=Ye(async()=>{this.timer=null;let c=null;if(this.changes.size&&(c=Object.fromEntries(this.changes.entries()),this.changes.clear()),this.connected?this.log?.debug("Updated:",{element:this.wrapperElement,changes:c}):(this.connected=!0,this.log?.debug("Connected:",{element:this.wrapperElement,changes:c})),c||t)try{await this.wrapperElement.render?.()===!1&&this.state===ye&&this.version===s&&(this.state=o,this.error=n,this.value=a,this.update(),this.notify())}catch(l){r.error("Failed to render mas-element: ",l),this.toggleFailed(this.version,l,i)}})}};function Ps(e={}){return Object.entries(e).forEach(([t,r])=>{(r==null||r===""||r?.length===0)&&delete e[t]}),e}function zr(e,t={}){let{tag:r,is:n}=e,i=document.createElement(r,{is:n});return i.setAttribute("is",n),Object.assign(i.dataset,Ps(t)),i}function Fr(e,t={}){return e instanceof HTMLElement?(Object.assign(e.dataset,Ps(t)),e):null}var _h="download",Ph="upgrade";function Kr(e,t={},r=""){let n=j();if(!n)return null;let{checkoutMarketSegment:i,checkoutWorkflow:o,checkoutWorkflowStep:a,entitlement:s,upgrade:c,modal:l,perpetual:h,promotionCode:d,quantity:u,wcsOsi:m,extraOptions:f}=n.collectCheckoutOptions(t),g=zr(e,{checkoutMarketSegment:i,checkoutWorkflow:o,checkoutWorkflowStep:a,entitlement:s,upgrade:c,modal:l,perpetual:h,promotionCode:d,quantity:u,wcsOsi:m,extraOptions:f});return r&&(g.innerHTML=`${r}`),g}function Yr(e){return class extends e{constructor(){super(...arguments);p(this,"checkoutActionHandler");p(this,"masElement",new Lt(this))}attributeChangedCallback(n,i,o){this.masElement.attributeChangedCallback(n,i,o)}connectedCallback(){this.masElement.connectedCallback(),this.addEventListener("click",this.clickHandler)}disconnectedCallback(){this.masElement.disconnectedCallback(),this.removeEventListener("click",this.clickHandler)}onceSettled(){return this.masElement.onceSettled()}get value(){return this.masElement.value}get options(){return this.masElement.options}get opens3in1Modal(){return Object.values($e).includes(this.getAttribute("data-modal-type"))&&!!this.href}requestUpdate(n=!1){return this.masElement.requestUpdate(n)}static get observedAttributes(){return["data-checkout-workflow","data-checkout-workflow-step","data-extra-options","data-ims-country","data-perpetual","data-promotion-code","data-quantity","data-template","data-wcs-osi","data-entitlement","data-upgrade","data-modal"]}async render(n={}){let i=j();if(!i)return!1;this.dataset.imsCountry||i.imsCountryPromise.then(d=>{d&&(this.dataset.imsCountry=d)},xt),n.imsCountry=null;let o=i.collectCheckoutOptions(n,this);if(!o.wcsOsi.length)return!1;let a;try{a=JSON.parse(o.extraOptions??"{}")}catch(d){this.masElement.log?.error("cannot parse exta checkout options",d)}let s=this.masElement.togglePending(o);this.setCheckoutUrl("");let c=i.resolveOfferSelectors(o),l=await Promise.all(c);l=l.map(d=>Jt(d,o)),o.country=this.dataset.imsCountry||o.country;let h=await i.buildCheckoutAction?.(l.flat(),{...a,...o},this);return this.renderOffers(l.flat(),o,{},h,s)}add3in1ModalParams(n,i){try{let o=new URL(n);return o.searchParams.set("ctx","if"),i===$e.CRM?(o.searchParams.set("af","uc_segmentation_hide_tabs,uc_new_user_iframe,uc_new_system_close"),o.searchParams.set("cli","creative")):(o.searchParams.set("af","uc_new_user_iframe,uc_new_system_close"),o.searchParams.set("cli","mini_plans")),o.toString()}catch(o){this.masElement.log?.error("Failed to add 3-in-1 modal parameters",o)}}setModalType(n,i){try{let a=new URL(i).searchParams.get("modal");if([$e.TWP,$e.D2P,$e.CRM].includes(a))return n?.setAttribute("data-modal-type",a),a}catch(o){this.masElement.log?.error("Failed to set modal type",o)}}renderOffers(n,i,o={},a=void 0,s=void 0){let c=j();if(!c)return!1;i={...JSON.parse(this.dataset.extraOptions??"null"),...i,...o},s??(s=this.masElement.togglePending(i)),this.checkoutActionHandler&&(this.checkoutActionHandler=void 0);let h;if(a){this.classList.remove(_h,Ph),this.masElement.toggleResolved(s,n,i);let{url:d,text:u,className:m,handler:f}=a;if(d&&(this.setCheckoutUrl(d),h=this.setModalType(this,d)),u&&(this.firstElementChild.innerHTML=u),m&&this.classList.add(...m.split(" ")),f&&(this.setCheckoutUrl("#"),this.checkoutActionHandler=f.bind(this)),!h)return!0}if(n.length){if(this.masElement.toggleResolved(s,n,i)){let d=c.buildCheckoutURL(n,i),u=a&&h?this.add3in1ModalParams(d,h):d;return this.setCheckoutUrl(u),!0}}else{let d=new Error(`Not provided: ${i?.wcsOsi??"-"}`);if(this.masElement.toggleFailed(s,d,i))return this.setCheckoutUrl("#"),!0}}setCheckoutUrl(){}clickHandler(n){}updateOptions(n={}){let i=j();if(!i)return!1;let{checkoutMarketSegment:o,checkoutWorkflow:a,checkoutWorkflowStep:s,entitlement:c,upgrade:l,modal:h,perpetual:d,promotionCode:u,quantity:m,wcsOsi:f}=i.collectCheckoutOptions(n);return Fr(this,{checkoutMarketSegment:o,checkoutWorkflow:a,checkoutWorkflowStep:s,entitlement:c,upgrade:l,modal:h,perpetual:d,promotionCode:u,quantity:m,wcsOsi:f}),!0}}}var ir=class ir extends Yr(HTMLAnchorElement){static createCheckoutLink(t={},r=""){return Kr(ir,t,r)}setCheckoutUrl(t){this.setAttribute("href",t)}get isCheckoutLink(){return!0}clickHandler(t){if(this.checkoutActionHandler){this.checkoutActionHandler?.(t);return}}};p(ir,"is","checkout-link"),p(ir,"tag","a");var re=ir;window.customElements.get(re.is)||window.customElements.define(re.is,re,{extends:re.tag});var or=class or extends Yr(HTMLButtonElement){static createCheckoutButton(t={},r=""){return Kr(or,t,r)}setCheckoutUrl(t){this.setAttribute("data-href",t)}get href(){return this.getAttribute("data-href")}get isCheckoutButton(){return!0}clickHandler(t){if(this.checkoutActionHandler){this.checkoutActionHandler?.(t);return}this.href&&(window.location.href=this.href)}};p(or,"is","checkout-button"),p(or,"tag","button");var qe=or;window.customElements.get(qe.is)||window.customElements.define(qe.is,qe,{extends:qe.tag});var Ch="p_draft_landscape",kh="/store/",Ih=new Map([["countrySpecific","cs"],["customerSegment","cs"],["quantity","q"],["authCode","code"],["checkoutPromoCode","apc"],["rurl","rUrl"],["curl","cUrl"],["ctxrturl","ctxRtUrl"],["country","co"],["language","lang"],["clientId","cli"],["context","ctx"],["productArrangementCode","pa"],["offerType","ot"],["marketSegment","ms"]]),eo=new Set(["af","ai","apc","appctxid","cli","co","cs","csm","ctx","ctxRtUrl","DCWATC","dp","fr","gsp","ijt","lang","lo","mal","ms","mv","mv2","nglwfdata","ot","otac","pa","pcid","promoid","q","rf","sc","scl","sdid","sid","spint","svar","th","thm","trackingid","usid","workflowid","context.guid","so.ca","so.su","so.tr","so.va"]),Nh=["env","workflowStep","clientId","country"],Cs=e=>Ih.get(e)??e;function to(e,t,r){for(let[n,i]of Object.entries(e)){let o=Cs(n);i!=null&&r.has(o)&&t.set(o,i)}}function Rh(e){switch(e){case Kn.PRODUCTION:return"https://commerce.adobe.com";default:return"https://commerce-stg.adobe.com"}}function Oh(e,t){for(let r in e){let n=e[r];for(let[i,o]of Object.entries(n)){if(o==null)continue;let a=Cs(i);t.set(`items[${r}][${a}]`,o)}}}function ks(e){Mh(e);let{env:t,items:r,workflowStep:n,ms:i,marketSegment:o,ot:a,offerType:s,pa:c,productArrangementCode:l,landscape:h,...d}=e,u={marketSegment:o??i,offerType:s??a,productArrangementCode:l??c},m=new URL(Rh(t));return m.pathname=`${kh}${n}`,n!==Ve.SEGMENTATION&&n!==Ve.CHANGE_PLAN_TEAM_PLANS&&Oh(r,m.searchParams),n===Ve.SEGMENTATION&&to(u,m.searchParams,eo),to(d,m.searchParams,eo),h===ce.DRAFT&&to({af:Ch},m.searchParams,eo),m.toString()}function Mh(e){for(let t of Nh)if(!e[t])throw new Error('Argument "checkoutData" is not valid, missing: '+t);if(e.workflowStep!==Ve.SEGMENTATION&&e.workflowStep!==Ve.CHANGE_PLAN_TEAM_PLANS&&!e.items)throw new Error('Argument "checkoutData" is not valid, missing: items');return!0}function Is({providers:e,settings:t}){function r(o,a){let{checkoutClientId:s,checkoutWorkflow:c,checkoutWorkflowStep:l,country:h,language:d,promotionCode:u,quantity:m}=t,{checkoutMarketSegment:f,checkoutWorkflow:g=c,checkoutWorkflowStep:T=l,imsCountry:P,country:x=P??h,language:E=d,quantity:I=m,entitlement:O,upgrade:U,modal:$,perpetual:me,promotionCode:Q=u,wcsOsi:_t,extraOptions:Ze,...Pt}=Object.assign({},a?.dataset??{},o??{}),pe=Te(g,ee,w.checkoutWorkflow),fe=te.CHECKOUT;pe===ee.V3&&(fe=Te(T,te,w.checkoutWorkflowStep));let J=At({...Pt,extraOptions:Ze,checkoutClientId:s,checkoutMarketSegment:f,country:x,quantity:St(I,w.quantity),checkoutWorkflow:pe,checkoutWorkflowStep:fe,language:E,entitlement:S(O),upgrade:S(U),modal:S($),perpetual:S(me),promotionCode:Kt(Q).effectivePromoCode,wcsOsi:Br(_t)});if(a)for(let Ct of e.checkout)Ct(a,J);return J}function n(o,a){if(!Array.isArray(o)||!o.length||!a)return"";let{env:s,landscape:c}=t,{checkoutClientId:l,checkoutMarketSegment:h,checkoutWorkflow:d,checkoutWorkflowStep:u,country:m,promotionCode:f,quantity:g,...T}=r(a),P=window.frameElement?"if":"fp",x={checkoutPromoCode:f,clientId:l,context:P,country:m,env:s,items:[],marketSegment:h,workflowStep:u,landscape:c,...T};if(o.length===1){let[{offerId:E,offerType:I,productArrangementCode:O}]=o,{marketSegments:[U]}=o[0];Object.assign(x,{marketSegment:U,offerType:I,productArrangementCode:O}),x.items.push(g[0]===1?{id:E}:{id:E,quantity:g[0]})}else x.items.push(...o.map(({offerId:E},I)=>({id:E,quantity:g[I]??w.quantity})));return ks(x)}let{createCheckoutLink:i}=re;return{CheckoutLink:re,CheckoutWorkflow:ee,CheckoutWorkflowStep:te,buildCheckoutURL:n,collectCheckoutOptions:r,createCheckoutLink:i}}function Vh({interval:e=200,maxAttempts:t=25}={}){let r=W.module("ims");return new Promise(n=>{r.debug("Waing for IMS to be ready");let i=0;function o(){window.adobeIMS?.initialized?n():++i>t?(r.debug("Timeout"),n()):setTimeout(o,e)}o()})}function $h(e){return e.then(()=>window.adobeIMS?.isSignedInUser()??!1)}function Hh(e){let t=W.module("ims");return e.then(r=>r?window.adobeIMS.getProfile().then(({countryCode:n})=>(t.debug("Got user country:",n),n),n=>{t.error("Unable to get user country:",n)}):null)}function Ns({}){let e=Vh(),t=$h(e),r=Hh(t);return{imsReadyPromise:e,imsSignedInPromise:t,imsCountryPromise:r}}async function Os(e,t){let{data:r}=t||await Promise.resolve().then(()=>Js(Rs(),1));if(Array.isArray(r)){let n=o=>r.find(a=>Pr(a.lang,o)),i=n(e.language)??n(w.language);if(i)return Object.freeze(i)}return{}}var Ms=["GB_en","AU_en","FR_fr","AT_de","BE_en","BE_fr","BE_nl","BG_bg","CH_de","CH_fr","CH_it","CZ_cs","DE_de","DK_da","EE_et","EG_ar","EG_en","ES_es","FI_fi","FR_fr","GR_el","GR_en","HU_hu","IE_en","IT_it","LU_de","LU_en","LU_fr","NL_nl","NO_nb","PL_pl","PT_pt","RO_ro","SE_sv","SI_sl","SK_sk","TR_tr","UA_uk","ID_en","ID_in","IN_en","IN_hi","JP_ja","MY_en","MY_ms","NZ_en","TH_en","TH_th"],Dh={INDIVIDUAL_COM:["ZA_en","LT_lt","LV_lv","NG_en","SA_ar","SA_en","ZA_en","SG_en","KR_ko"],TEAM_COM:["ZA_en","LT_lt","LV_lv","NG_en","ZA_en","CO_es","KR_ko"],INDIVIDUAL_EDU:["LT_lt","LV_lv","SA_en","SG_en"],TEAM_EDU:["SG_en","KR_ko"]},ar=class ar extends HTMLSpanElement{constructor(){super();p(this,"masElement",new Lt(this));this.handleClick=this.handleClick.bind(this)}static get observedAttributes(){return["data-display-old-price","data-display-per-unit","data-display-recurrence","data-display-tax","data-perpetual","data-promotion-code","data-tax-exclusive","data-template","data-wcs-osi"]}static createInlinePrice(r){let n=j();if(!n)return null;let{displayOldPrice:i,displayPerUnit:o,displayRecurrence:a,displayTax:s,forceTaxExclusive:c,perpetual:l,promotionCode:h,quantity:d,template:u,wcsOsi:m}=n.collectPriceOptions(r);return zr(ar,{displayOldPrice:i,displayPerUnit:o,displayRecurrence:a,displayTax:s,forceTaxExclusive:c,perpetual:l,promotionCode:h,quantity:d,template:u,wcsOsi:m})}get isInlinePrice(){return!0}attributeChangedCallback(r,n,i){this.masElement.attributeChangedCallback(r,n,i)}connectedCallback(){this.masElement.connectedCallback(),this.addEventListener("click",this.handleClick)}disconnectedCallback(){this.masElement.disconnectedCallback(),this.removeEventListener("click",this.handleClick)}handleClick(r){r.target!==this&&(r.stopImmediatePropagation(),this.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window})))}onceSettled(){return this.masElement.onceSettled()}get value(){return this.masElement.value}get options(){return this.masElement.options}requestUpdate(r=!1){return this.masElement.requestUpdate(r)}resolveDisplayTaxForGeoAndSegment(r,n,i,o){let a=`${r}_${n}`;if(Ms.includes(r)||Ms.includes(a))return!0;let s=Dh[`${i}_${o}`];return s?!!(s.includes(r)||s.includes(a)):!1}async resolveDisplayTax(r,n){let[i]=await r.resolveOfferSelectors(n),o=Jt(await i,n);if(o?.length){let{country:a,language:s}=n,c=o[0],[l=""]=c.marketSegments;return this.resolveDisplayTaxForGeoAndSegment(a,s,c.customerSegment,l)}}async render(r={}){if(!this.isConnected)return!1;let n=j();if(!n)return!1;let i=n.collectPriceOptions(r,this);if(!i.wcsOsi.length)return!1;let o=this.masElement.togglePending(i);this.innerHTML="";let[a]=n.resolveOfferSelectors(i);return this.renderOffers(Jt(await a,i),i,o)}renderOffers(r,n={},i=void 0){if(!this.isConnected)return;let o=j();if(!o)return!1;let a=o.collectPriceOptions({...this.dataset,...n},this);if(i??(i=this.masElement.togglePending(a)),r.length){if(this.masElement.toggleResolved(i,r,a))return this.innerHTML=o.buildPriceHTML(r,a),!0}else{let s=new Error(`Not provided: ${a?.wcsOsi??"-"}`);if(this.masElement.toggleFailed(i,s,a))return this.innerHTML="",!0}return!1}updateOptions(r){let n=j();if(!n)return!1;let{displayOldPrice:i,displayPerUnit:o,displayRecurrence:a,displayTax:s,forceTaxExclusive:c,perpetual:l,promotionCode:h,quantity:d,template:u,wcsOsi:m}=n.collectPriceOptions(r);return Fr(this,{displayOldPrice:i,displayPerUnit:o,displayRecurrence:a,displayTax:s,forceTaxExclusive:c,perpetual:l,promotionCode:h,quantity:d,template:u,wcsOsi:m}),!0}};p(ar,"is","inline-price"),p(ar,"tag","span");var ne=ar;window.customElements.get(ne.is)||window.customElements.define(ne.is,ne,{extends:ne.tag});function Vs({literals:e,providers:t,settings:r}){function n(a,s){let{country:c,displayOldPrice:l,displayPerUnit:h,displayRecurrence:d,displayTax:u,forceTaxExclusive:m,language:f,promotionCode:g,quantity:T}=r,{displayOldPrice:P=l,displayPerUnit:x=h,displayRecurrence:E=d,displayTax:I=u,forceTaxExclusive:O=m,country:U=c,language:$=f,perpetual:me,promotionCode:Q=g,quantity:_t=T,template:Ze,wcsOsi:Pt,...pe}=Object.assign({},s?.dataset??{},a??{}),fe=At({...pe,country:U,displayOldPrice:S(P),displayPerUnit:S(x),displayRecurrence:S(E),displayTax:S(I),forceTaxExclusive:S(O),language:$,perpetual:S(me),promotionCode:Kt(Q).effectivePromoCode,quantity:St(_t,w.quantity),template:Ze,wcsOsi:Br(Pt)});if(s)for(let J of t.price)J(s,fe);return fe}function i(a,s){if(!Array.isArray(a)||!a.length||!s)return"";let{template:c}=s,l;switch(c){case"discount":l=Bi;break;case"strikethrough":l=$i;break;case"optical":l=Vi;break;case"annual":l=Hi;break;default:s.country==="AU"&&a[0].planType==="ABM"?l=s.promotionCode?Di:Ui:l=s.promotionCode?Mi:Oi}let h=n(s);h.literals=Object.assign({},e.price,At(s.literals??{}));let[d]=a;return d={...d,...d.priceDetails},l(h,d)}let o=ne.createInlinePrice;return{InlinePrice:ne,buildPriceHTML:i,collectPriceOptions:n,createInlinePrice:o}}function $s({settings:e}){let t=W.module("wcs"),{env:r,wcsApiKey:n}=e,i=new Map,o=new Map,a;async function s(d,u,m=!0){let f=$n;t.debug("Fetching:",d);let g="",T,P=(x,E,I)=>`${x}: ${E?.status}, url: ${I.toString()}`;try{if(d.offerSelectorIds=d.offerSelectorIds.sort(),g=new URL(e.wcsURL),g.searchParams.set("offer_selector_ids",d.offerSelectorIds.join(",")),g.searchParams.set("country",d.country),g.searchParams.set("locale",d.locale),g.searchParams.set("landscape",r===Ke.STAGE?"ALL":e.landscape),g.searchParams.set("api_key",n),d.language&&g.searchParams.set("language",d.language),d.promotionCode&&g.searchParams.set("promotion_code",d.promotionCode),d.currency&&g.searchParams.set("currency",d.currency),T=await fetch(g.toString(),{credentials:"omit"}),T.ok){let x=await T.json();t.debug("Fetched:",d,x);let E=x.resolvedOffers??[];E=E.map(Ir),u.forEach(({resolve:I},O)=>{let U=E.filter(({offerSelectorIds:$})=>$.includes(O)).flat();U.length&&(u.delete(O),I(U))})}else T.status===404&&d.offerSelectorIds.length>1?(t.debug("Multi-osi 404, fallback to fetch-by-one strategy"),await Promise.allSettled(d.offerSelectorIds.map(x=>s({...d,offerSelectorIds:[x]},u,!1)))):f=Tr}catch(x){f=Tr,t.error(f,d,x)}m&&u.size&&(t.debug("Missing:",{offerSelectorIds:[...u.keys()]}),u.forEach(x=>{x.reject(new Error(P(f,T,g)))}))}function c(){clearTimeout(a);let d=[...o.values()];o.clear(),d.forEach(({options:u,promises:m})=>s(u,m))}function l(){let d=i.size;i.clear(),t.debug(`Flushed ${d} cache entries`)}function h({country:d,language:u,perpetual:m=!1,promotionCode:f="",wcsOsi:g=[]}){let T=`${u}_${d}`;d!=="GB"&&(u=m?"EN":"MULT");let P=[d,u,f].filter(x=>x).join("-").toLowerCase();return g.map(x=>{let E=`${x}-${P}`;if(!i.has(E)){let I=new Promise((O,U)=>{let $=o.get(P);if(!$){let me={country:d,locale:T,offerSelectorIds:[]};d!=="GB"&&(me.language=u),$={options:me,promises:new Map},o.set(P,$)}f&&($.options.promotionCode=f),$.options.offerSelectorIds.push(x),$.promises.set(x,{resolve:O,reject:U}),$.options.offerSelectorIds.length>=e.wcsBufferLimit?c():(t.debug("Queued:",$.options),a||(a=setTimeout(c,e.wcsBufferDelay)))});i.set(E,I)}return i.get(E)})}return{WcsCommitment:Gi,WcsPlanType:zi,WcsTerm:Fi,resolveOfferSelectors:h,flushWcsCache:l}}var ro="mas-commerce-service",Bh="mas:start",Gh="mas:ready",Wr,Hs,jr=class extends HTMLElement{constructor(){super(...arguments);G(this,Wr);p(this,"promise",null)}async registerCheckoutAction(r){typeof r=="function"&&(this.buildCheckoutAction=async(n,i,o)=>{let a=await r?.(n,i,this.imsSignedInPromise,o);return a||null})}async activate(){let r=L(this,Wr,Hs),n=Object.freeze(qi(r));wt(r.lana);let i=W.init(r.hostEnv).module("service");i.debug("Activating:",r);let o={price:{}};try{o.price=await Os(n,r.commerce.priceLiterals)}catch{}let a={checkout:new Set,price:new Set},s={literals:o,providers:a,settings:n};Object.defineProperties(this,Object.getOwnPropertyDescriptors({...Is(s),...Ns(s),...Vs(s),...$s(s),...Yn,Log:W,get defaults(){return w},get log(){return W},get providers(){return{checkout(c){return a.checkout.add(c),()=>a.checkout.delete(c)},price(c){return a.price.add(c),()=>a.price.delete(c)}}},get settings(){return n}})),i.debug("Activated:",{literals:o,settings:n}),Ye(()=>{let c=new CustomEvent(at,{bubbles:!0,cancelable:!1,detail:this});performance.mark(Gh),this.dispatchEvent(c)})}connectedCallback(){this.readyPromise||(performance.mark(Bh),this.readyPromise=this.activate())}disconnectedCallback(){this.readyPromise=null}flushWcsCache(){this.flushWcsCache(),this.log.debug("Flushed WCS cache")}refreshOffers(){this.flushWcsCache(),document.querySelectorAll('span[is="inline-price"],a[is="checkout-link"]').forEach(r=>r.requestUpdate(!0)),this.log.debug("Refreshed WCS offers")}refreshFragments(){this.flushWcsCache(),document.querySelectorAll("aem-fragment").forEach(r=>r.refresh()),this.log.debug("Refreshed AEM fragments")}};Wr=new WeakSet,Hs=function(){let r={hostEnv:{name:this.getAttribute("host-env")??"prod"},commerce:{env:this.getAttribute("env")},lana:{tags:this.getAttribute("lana-tags"),sampleRate:parseInt(this.getAttribute("lana-sample-rate"),10),isProdDomain:this.getAttribute("host-env")==="prod"}};return["locale","country","language"].forEach(n=>{let i=this.getAttribute(n);i&&(r[n]=i)}),["checkout-workflow-step","force-tax-exclusive","checkout-client-id","allow-override","wcs-api-key"].forEach(n=>{let i=this.getAttribute(n);if(i!=null){let o=n.replace(/-([a-z])/g,a=>a[1].toUpperCase());r.commerce[o]=i}}),r},p(jr,"instance");window.customElements.get(ro)||window.customElements.define(ro,jr);wt({sampleRate:1});export{On as CLASS_NAME_FAILED,dc as CLASS_NAME_HIDDEN,Mn as CLASS_NAME_PENDING,Vn as CLASS_NAME_RESOLVED,qe as CheckoutButton,re as CheckoutLink,ee as CheckoutWorkflow,te as CheckoutWorkflowStep,w as Defaults,Tr as ERROR_MESSAGE_BAD_REQUEST,Ac as ERROR_MESSAGE_MISSING_LITERALS_URL,$n as ERROR_MESSAGE_OFFER_NOT_FOUND,Me as EVENT_AEM_ERROR,Oe as EVENT_AEM_LOAD,Rn as EVENT_MAS_ERROR,Nn as EVENT_MAS_READY,In as EVENT_MERCH_CARD_ACTION_MENU_TOGGLE,xc as EVENT_MERCH_CARD_COLLECTION_SHOWMORE,bc as EVENT_MERCH_CARD_COLLECTION_SORT,kn as EVENT_MERCH_CARD_READY,mc as EVENT_MERCH_OFFER_READY,Cn as EVENT_MERCH_OFFER_SELECT_READY,st as EVENT_MERCH_QUANTITY_SELECTOR_CHANGE,gc as EVENT_MERCH_SEARCH_CHANGE,vc as EVENT_MERCH_SIDENAV_SELECT,fc as EVENT_MERCH_STOCK_CHANGE,Sr as EVENT_MERCH_STORAGE_CHANGE,pc as EVENT_OFFER_SELECTED,Hn as EVENT_TYPE_FAILED,at as EVENT_TYPE_READY,Un as EVENT_TYPE_RESOLVED,ne as InlinePrice,Dn as LOG_NAMESPACE,ce as Landscape,W as Log,$e as MODAL_TYPE_3_IN_1,hc as NAMESPACE,yc as PARAM_AOS_API_KEY,Bn as PARAM_ENV,Gn as PARAM_LANDSCAPE,Ec as PARAM_WCS_API_KEY,Kn as PROVIDER_ENVIRONMENT,ae as STATE_FAILED,ye as STATE_PENDING,se as STATE_RESOLVED,ue as UptLink,zn as WCS_PROD_URL,Fn as WCS_STAGE_URL,Ve as WORKFLOW_STEP,Gi as WcsCommitment,zi as WcsPlanType,Fi as WcsTerm,Ir as applyPlanType,qi as getSettings}; +/*! Bundled license information: + +@lit/reactive-element/css-tag.js: + (** + * @license + * Copyright 2019 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + +@lit/reactive-element/reactive-element.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + +lit-html/lit-html.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + +@lit/reactive-element/css-tag.js: + (** + * @license + * Copyright 2019 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + +@lit/reactive-element/reactive-element.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + +lit-html/lit-html.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + +lit-element/lit-element.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + +lit-html/is-server.js: + (** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) +*/ diff --git a/libs/features/mas/docs/adobe-home.html b/libs/features/mas/docs/adobe-home.html new file mode 100644 index 00000000000..648bd3032c0 --- /dev/null +++ b/libs/features/mas/docs/adobe-home.html @@ -0,0 +1,160 @@ + + + + + Adobe Home Gallery + + + + + + + + + + + + + + + + + +
+ +
+
+ + + diff --git a/libs/features/mas/docs/benchmarks.html b/libs/features/mas/docs/benchmarks.html new file mode 100644 index 00000000000..f51531c4536 --- /dev/null +++ b/libs/features/mas/docs/benchmarks.html @@ -0,0 +1,125 @@ + + + + + M@S Benchmarks + + + + + + + + + + + + + + +
+ + +
+ + diff --git a/libs/features/mas/docs/ccd.html b/libs/features/mas/docs/ccd.html index f22db137d14..7f20be2fd76 100644 --- a/libs/features/mas/docs/ccd.html +++ b/libs/features/mas/docs/ccd.html @@ -1,73 +1,71 @@ - CCD Gallery - + + + + + - - - + + - - - - - - -
- + + +
+ diff --git a/libs/features/mas/docs/checkout-button.html b/libs/features/mas/docs/checkout-button.html new file mode 100644 index 00000000000..28f65860868 --- /dev/null +++ b/libs/features/mas/docs/checkout-button.html @@ -0,0 +1,364 @@ + + + + + + M@S Web Components + + + + + + + + + + + + + +
+ +

checkout-button #

+

Introduction #

+

This custom element renders a checkout button supporting most of the features documented at https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=businessservices&title=UCv3+button+Creation+Guide.

+

Behind the scene, it uses https://git.corp.adobe.com/PandoraUI/commerce-core to generate the checkout url.

+

It requires an Offer Selector ID to retrieve the offer details from WCS.

+

See MAS to learn more.

+

â„šī¸ Unlike checkout-link, in order to prevent the default click event from redirecting to checkout url, register the click event using {capture: true}. +
See the demo at the end

+

Example #

+
<button
+    is="checkout-button"
+    data-wcs-osi="A1xn6EL4pK93bWjM8flffQpfEL-bnvtoQKQAvkx574M"
+>
+    Buy now
+</button>
+
+

Attributes #

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionDefault ValueRequiredProvider
data-wcs-osiOffer Selector ID, can be multiple, separeted by commatruemas.js or consumer code
data-checkout-workflowTarget checkout workflow for the generation of checkout urlsUCv3falsemas.js
data-checkout-workflow-stepworkflow step to land on the unified checkout pageemailfalsemas.js
data-extra-optionsadditional query params to append to the url, see: Table of public query params{}falsemas.js
data-ims-countrythe ims country to code of the user if signed in, overrides the locale country in the generated checkout urlfalsemas.js or consumer code
data-perpetualwhether this is a perpetual offer true|falsefalsemas.js
data-promotion-codeFlex promotion code, if applicablefalsemas.js
data-quantityQuantity of the offer to purchase1falsemas.js or consumer code
data-entitlemententitlement flag for client side interpretationfalsefalsemas.js
data-upgradeupgrade flag for client side interpretationfalsefalsemas.js
data-modalmodal flag for client side interpretationfalsefalsemas.js
data-analytics-idhuman-readable, non-translatable button id for analytics. Authored in Studio in button Editor.falsefalsemas.js
daa-llmartech-compatible button id for analytics. Format: ‘${data-analytics-id}-${#}’, where # is the position of the button within a card. E.g. : see-terms-1, buy-now-2falsefalsemas.js
+

Examples #

+

Custom Workflow Step #

+
<button
+    is="checkout-button"
+    data-wcs-osi="A1xn6EL4pK93bWjM8flffQpfEL-bnvtoQKQAvkx574M"
+    data-checkout-workflow-step="recommendation"
+>
+    Buy now
+</button>
+
+

Multiple Quantities #

+

Two photoshop and three acrobat pro single apps (TEAMS):

+
<button
+    is="checkout-button"
+    data-wcs-osi="yHKQJK2VOMSY5bINgg7oa2ov9RnmnU1oJe4NOg4QTYI,vV01ci-KLH6hYdRfUKMBFx009hdpxZcIRG1-BY_PutE"
+    data-quantity="2,3"
+>
+    Buy now
+</button>
+
+

Custom query params #

+
<button
+    is="checkout-button"
+    data-wcs-osi="A1xn6EL4pK93bWjM8flffQpfEL-bnvtoQKQAvkx574M"
+    data-extra-options='{"promoid":"promo12345","mv":1,"mv2":2}'
+>
+    Buy now
+</button>
+
+

IMS Country #

+
<button
+    is="checkout-button"
+    data-wcs-osi="A1xn6EL4pK93bWjM8flffQpfEL-bnvtoQKQAvkx574M"
+    data-ims-country="JP"
+>
+    Buy now
+</button>
+
+

Properties #

+ + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
isCheckoutButtonon checkout button elements, it will return true
onceSettledpromise that resolves when the custom-element either resolves or fails to resolve the offer
optionsJSON object with the complete set of properties used to resolve the offer
valueThe actual offer that is used to render the checkout button. In some cases WCS can return multiple offers but only one will be picked to render for a single app.
+

Example #

+
<button
+    id="co1"
+    is="checkout-button"
+    data-wcs-osi="A1xn6EL4pK93bWjM8flffQpfEL-bnvtoQKQAvkx574M"
+    data-ims-country="CA"
+>
+    Buy now
+</button>
+<script type="module">
+    document
+        .getElementById('co1')
+        .onceSettled()
+        .then((el) => {
+            document.getElementById('coValue').innerHTML = JSON.stringify(
+                el.value,
+                null,
+                '\t',
+            );
+            document.getElementById('coOptions').innerHTML = JSON.stringify(
+                el.options,
+                null,
+                '\t',
+            );
+        });
+</script>
+
+

value property #

+

+
+

options property #

+

+
+

Methods #

+ + + + + + + + + + + + + +
PropertyDescription
requestUpdate(true | false)Causes a re-render using the actual options, force = false by default, meaning if no change is found will skip
+

Events #

+ + + + + + + + + + + + + + + + + + + + + +
EventDescription
mas:pendingfires when checkout button starts loading
mas:resolvedfires when the offer is successfully resolved
mas:failedfires when the offer could not be found or fetched
+
+

For each event, the following css classes are toggled on the element: placeholder-pending, placeholder-resolved, placeholder-failed.

+

Example #

+
<div id="eventsDemo">
+    <button
+        is="checkout-button"
+        data-wcs-osi="A1xn6EL4pK93bWjM8flffQpfEL-bnvtoQKQAvkx574M"
+        >Buy now (click me)</a
+    >
+    <br />
+    <button
+        is="checkout-button"
+        data-wcs-osi="A1xn6EL4pK93bWjM8flffQpfEL-bnvtoQKQAvkx574M"
+        ><span style="pointer-events: none;">Span + <strong>Strong + Buy now</strong></span></a
+    >
+</div>
+<button id="btnRefresh">Refresh</button>
+<script type="module">
+    const log = document.getElementById('log');
+    const logger = (...messages) =>
+        (log.innerHTML = `${messages.join(' ')}<br>${log.innerHTML}`);
+    const eventsDemo = document.getElementById('eventsDemo');
+    eventsDemo.addEventListener('mas:pending', () =>
+        logger('checkout-button pending'),
+    );
+    eventsDemo.addEventListener('mas:resolved', (e) =>
+        logger('checkout-button resolved'),
+    );
+    eventsDemo.addEventListener('mas:failed', () =>
+        logger('checkout-button failed'),
+    );
+    eventsDemo.addEventListener('click', (e) => {
+        e.preventDefault();
+        e.stopPropagation();
+        if (e.target.isCheckoutButton) {
+            logger('checkout button is clicked: ', e.target.href);
+        } else {
+            logger('element clicked: ', e.target);
+        }
+    }, {capture: true});
+    document.getElementById('btnRefresh').addEventListener('click', () => {
+        [...eventsDemo.querySelectorAll('a')].forEach((a) =>
+            a.requestUpdate(true),
+        );
+    });
+</script>
+
+

Logs #

+

+
+ +
+
+ + + diff --git a/libs/features/mas/docs/checkout-link.html b/libs/features/mas/docs/checkout-link.html index d174349c690..5892108ce58 100644 --- a/libs/features/mas/docs/checkout-link.html +++ b/libs/features/mas/docs/checkout-link.html @@ -5,38 +5,32 @@ M@S Web Components - + + + - - - - - - - - - + - + +

checkout-link #

@@ -63,6 +57,7 @@

Attributes Attributes workflow step to land on the unified checkout page email false +mas.js data-extra-options additional query params to append to the url, see: Table of public query params {} false +mas.js data-ims-country the ims country to code of the user if signed in, overrides the locale country in the generated checkout url false +mas.js or consumer code data-perpetual whether this is a perpetual offer true|false false +mas.js data-promotion-code Flex promotion code, if applicable false +mas.js data-quantity Quantity of the offer to purchase 1 false +mas.js or consumer code data-entitlement entitlement flag for client side interpretation false false +mas.js data-upgrade upgrade flag for client side interpretation false false +mas.js data-modal modal flag for client side interpretation false false +mas.js + + +data-analytics-id +human-readable, non-translatable link id for analytics. Authored in Studio in Link Editor. +false +false +mas.js + + +daa-ll +martech-compatible link id for analytics. Format: ‘${data-analytics-id}-${#}’, where # is the position of the link within a card. E.g. : see-terms-1, buy-now-2 +false +false +mas.js @@ -268,38 +288,54 @@

Events mas:failed fires when the offer could not be found or fetched - -click -native click event on the a element -
-

For each event except click, the following css classes are toggled on the element: placeholder-pending, placeholder-resolved, placeholder-failed.

+

For each event, the following css classes are toggled on the element: placeholder-pending, placeholder-resolved, placeholder-failed.

Example #

-
<a
-    id="co2"
-    href="#"
-    is="checkout-link"
-    data-wcs-osi="A1xn6EL4pK93bWjM8flffQpfEL-bnvtoQKQAvkx574M"
-    >Buy now (click me)</a
->
+
<div id="eventsDemo">
+    <a
+        is="checkout-link"
+        data-wcs-osi="A1xn6EL4pK93bWjM8flffQpfEL-bnvtoQKQAvkx574M"
+        >Buy now (click me)</a
+    >
+    <br />
+    <a
+        is="checkout-link"
+        data-wcs-osi="A1xn6EL4pK93bWjM8flffQpfEL-bnvtoQKQAvkx574M"
+        ><span style="pointer-events: none;"
+            >Span + <strong>Strong + Buy now</strong></span
+        ></a
+    >
+</div>
 <button id="btnRefresh">Refresh</button>
 <script type="module">
     const log = document.getElementById('log');
     const logger = (...messages) =>
         (log.innerHTML = `${messages.join(' ')}<br>${log.innerHTML}`);
-    const a = document.getElementById('co2');
-    a.addEventListener('mas:pending', () => logger('checkout-link pending'));
-    a.addEventListener('mas:resolved', () => logger('checkout-link resolved'));
-    a.addEventListener('mas:failed', () => logger('checkout-link failed'));
-    a.addEventListener('click', (e) => {
+    const eventsDemo = document.getElementById('eventsDemo');
+    eventsDemo.addEventListener('mas:pending', () =>
+        logger('checkout-link pending'),
+    );
+    eventsDemo.addEventListener('mas:resolved', (e) =>
+        logger('checkout-link resolved'),
+    );
+    eventsDemo.addEventListener('mas:failed', () =>
+        logger('checkout-link failed'),
+    );
+    eventsDemo.addEventListener('click', (e) => {
         e.preventDefault();
         e.stopPropagation();
-        logger('checkout link is clicked: ', e.target.href);
+        if (e.target.isCheckoutLink) {
+            logger('checkout link is clicked: ', e.target.href);
+        } else {
+            logger('element clicked: ', e.target);
+        }
     });
     document.getElementById('btnRefresh').addEventListener('click', () => {
-        a.requestUpdate(true);
+        [...eventsDemo.querySelectorAll('a')].forEach((a) =>
+            a.requestUpdate(true),
+        );
     });
 </script>
 
@@ -319,6 +355,7 @@

Logs M@S Web Components - + + + - - - - - - - - - + - + +

inline-price #

@@ -325,6 +319,7 @@

Logs Home + mas.js + Checkout Link + Checkout Button + Inline Price + Merch Card + CCD Gallery + Adobe Home Gallery + Plans Gallery + Benchmarks + `; + } +} + +customElements.define('mas-sidenav', MasSidenav, { extends: 'aside' }); diff --git a/libs/features/mas/docs/mas.html b/libs/features/mas/docs/mas.html index 7b72528cae2..b1519b48a16 100644 --- a/libs/features/mas/docs/mas.html +++ b/libs/features/mas/docs/mas.html @@ -5,38 +5,32 @@ M@S Web Components - + + + - - - - - - - - - + - + +

Merch At Scale (MAS) #

@@ -75,7 +69,7 @@

Components mas.js documentation

+

mas.js: A JavaScript library to enable “4” on any page. mas.js documentation

Terminology #

@@ -93,6 +87,16 @@

How It Works Analytics #

+

For analytics purposes, every <merch-card> tag can be tagged with ‘PRODUCT_CODE’ tag in Studio. When PRODUCT_CODE tag is present on the card, <merch-card> will reflect the tag value in the ‘daa-lh’ attribute. It is a non-translatable, human-readable card id. +To set a non-translatable, human-readable id on link - open Link editor in Studio and select the value from the dropdown. +Once value is set, every link will have 2 attributes:

+
    +
  • data-analytics-id - the value set in studio, without changes e.g. ‘buy-now’
  • +
  • daa-ll - the value set in studio + position of the link within the card, e.g. ‘free-trial-1’, ‘buy-now-2’
  • +
+

Example: if you have 5 cards with buy-now cta on your page, you can take a combination of merch-card daa-lh and link daa-ll: +${daa-lh}–${daa-ll}: will result in ‘phlt–buy-now-2’.

@@ -106,6 +110,7 @@

How It Works M@S Web Components - + + + - - - - - - - - - + - + +

mas.js #

@@ -46,12 +40,20 @@

Introduction inline-price
  • checkout-link
  • +
  • checkout-button
  • merch-card
  • -
  • CCD Gallery
  • Enablement mas-commerce-service #

    -

    You do need to have mas.js on your page / application, including it can be done like the following

    -
    <script src="/libs/deps/mas/mas.js" type="module"></script>
    +

    âš ī¸ Safari does not support customized built-in elements. Therefore, you need to load the following polyfill before mas.js for browser compatibility (not required for in-app usage).

    +
    <script
    +    src="https://www.adobe.comlibs/deps/custom-elements.js"
    +></script>
    +
    +

    To add mas.js to your page or application, include it as shown below:

    +
    <script
    +    src="https://www.adobe.com/libs/features/mas/dist/mas.js"
    +    type="module"
    +></script>
     

    Attributes #

    @@ -95,6 +97,12 @@

    Attributes Attributes ^1 with the given tags. e.g:ccd. +

    + + + + + + + +
    false
    lana-sample-rateSets the sampling rate, see ^1 for details.1false

    Methods #

    @@ -162,6 +188,12 @@

    Examples <!-- or with a country and language --> <mas-commerce-service country="JP" language="en"></mas-commerce-service> + +<!-- with custom api key & checkout clientid --> +<mas-commerce-service + wcs-api-key="custom-api-key" + checkout-client-id="custom-client-id" +></mas-commerce-service>

    you can play around with below price, either adding locale, language or env as parameters that will be injected to mas-commerce-service as attributes, and then it will be activated.

    @@ -613,6 +645,7 @@

    Supported locales M@S Web Components - + + + - - - - - - - - - + - + +
    +

    merch-card custom element #

    Introduction #

    This custom element implements all the merch-card variants provided in acom and ccd figma designs.

    A merch-card can be rendered using either static html markup or aem-fragment custom element to retrieve a card from Odin/AEM.

    +

    The CTAs styles depend on Spectrum CSS that must be provided by the consumer.

    Designs:

    ACOM: https://www.figma.com/design/tiEUQLJ1hVlosqwzAATVXZ/Cards-(Merch)?node-id=1086-17994&t=LeMR0vbaBoEKaKln-1

    CCD: https://www.figma.com/proto/7tUtNgFelfMjgPoJ5QcE1k/Merch%40Scale-Frameworks?node-id=2077-63597&t=cWfdzWlga79eyjyI-1

    +

    Adobe Home: https://www.figma.com/design/7tUtNgFelfMjgPoJ5QcE1k/Merch%40Scale-Frameworks?node-id=2081-22654&m=dev

    +

    CCD Gallery: /libs/features/mas/docs/ccd.html +CCD Gallery provides a comprehensive list of all supported card variants in CCD.

    +

    Adobe Home Gallery: /libs/features/mas/docs/adobe-home.html +Adobe Home Gallery provides a comprehensive list of all supported card variants in Adobe Home.

    Examples #

    -

    With an Odin/AEM Fragment (VPN required) #

    <merch-card id="card1">
         <aem-fragment
             id="fragment1"
    @@ -57,41 +57,41 @@ 

    With an Odin/A </merch-card> <script type="module"> - const log = (target, ...messages) => - (target.innerHTML = `${messages.join(' ')}<br>${target.innerHTML}`); - { - const target = document.getElementById('log'); + const target = document.getElementById('log1'); - const fragment1 = document.getElementById('fragment1'); - fragment1.addEventListener('aem:load', (e) => { - log( - target, - 'aem-fragment is loaded: ', - JSON.stringify(e.target.data, null, '\t'), - ); - }); + const fragment1 = document.getElementById('fragment1'); + fragment1.addEventListener('aem:load', (e) => { + log( + target, + 'aem-fragment is loaded: ', + JSON.stringify(e.target.data, null, '\t'), + ); + }); - const card1 = document.getElementById('card1'); - card1.addEventListener('mas:ready', (e) => { - log(target, 'merch-card is ready: ', e.target.variant); - }); + const card1 = document.getElementById('card1'); + card1.addEventListener('mas:ready', (e) => { + log(target, 'merch-card is ready: ', e.target.variant); + }); - card1.addEventListener('click', (e) => { - e.preventDefault(); - e.stopPropagation(); - if (e.target.isCheckoutLink) { - log(target, 'merch-card checkout-link click: ', e.target); - } else if (e.target.isInlinePrice) { - log(target, 'merch-card price click: ', e.target.innerText); - } else { - log(target, 'merch-card click: ', e.target); - } - }); - } + card1.addEventListener( + 'click', + (e) => { + e.preventDefault(); + e.stopPropagation(); + if (e.target.isCheckoutButton) { + log(target, 'merch-card checkout-button click: ', e.target); + } else if (e.target.isInlinePrice) { + log(target, 'merch-card price click: ', e.target.innerText); + } else { + log(target, 'merch-card click: ', e.target); + } + }, + { capture: true }, + ); </script>

    Logs #

    -
    
    +
    
     

    With static content (dynamic pricing) #

    <merch-card variant="plans" badge-color="#EDCC2D" badge-background-color="#000000"" badge-text=" Best value">
    @@ -120,6 +120,7 @@ 

    Attributes Attributes Active variants: #

    • catalog
    • -
    • ccd-action
    • image
    • inline-heading
    • mini-compare-chart
    • @@ -156,6 +173,8 @@

      Active variants: Properties #

      @@ -168,11 +187,13 @@

      Properties Events #

      +

      We recommend to listen to events on the container, so that listener is attached before the merch card is appended to DOM. +The reason is that some merch cards are resolved very quickly and event could dispatch before event listener is attached by consumer code.

      @@ -239,10 +260,12 @@

      mas:ready & log(target, `${e.target.nodeName}: ${e.detail}`), ); - card.addEventListener('mas:ready', () => - card.classList.add('ready'), - ); + card.addEventListener('mas:ready', () => { + card.classList.add('ready'); + card.classList.remove('error'); + }); card.addEventListener('mas:error', (e) => { + card.classList.remove('ready'); card.classList.add('error'); log(target, `${e.target.nodeName}: ${e.detail}`); }); @@ -260,6 +283,50 @@

      mas:ready &
      
       
      +

      spectrum = ‘swc’ #

      +

      The spectrum attribute is used to specify the Spectrum technology to use for rendering the CTAs. +With swc the checkout buttons are rendered as Spectrum SWC sp-button and the click event is directed to actual checkout-button web component that is kept off the DOM. +However, it can be accessed via e.target.source property.

      +
      <merch-card id="cardSwc" spectrum="swc">
      +    <aem-fragment
      +        title="CCD Slice Creative Cloud Photography"
      +        fragment="830f76be-0e83-4faf-9051-3dbb1a1dff04"
      +    ></aem-fragment>
      +</merch-card>
      +
      +<script type="module">
      +      const target = document.getElementById('log3');
      +
      +      const cardSwc = document.getElementById('cardSwc');
      +      console.log('cardSwc', cardSwc);
      +      cardSwc.addEventListener(
      +          'click',
      +          (e) => {
      +              e.preventDefault();
      +              if (e.target.source?.isCheckoutButton) {
      +                  log(
      +                      target,
      +                      'merch-card checkout-button click: ',
      +                      '\n\t',
      +                      e.target.dataset.navigationUrl,
      +                      '\n\t',
      +                      e.target.outerHTML,
      +                      '\n\t',
      +                      e.target.source.outerHTML,
      +                      '\n',
      +                  );
      +              } else if (e.target.isInlinePrice) {
      +                  log(target, 'merch-card price click: ', e.target.innerText);
      +              } else {
      +                  log(target, 'merch-card click: ', e.target);
      +              }
      +          },
      +          { capture: true },
      +      );
      +</script>
      +
      +
      
      +

      aem-fragment custom element #

      Attributes #

      @@ -269,6 +336,7 @@

      Attributes Attributes Events <button id="btnRefresh">Refresh</button> <script type="module"> { - const target = document.getElementById('log3'); + const target = document.getElementById('log4'); const psCard = document.getElementById('psCard2'); psCard.addEventListener('mas:ready', (e) => { log(target, 'merch-card is ready: ', e.target.variant); }); const aemFragment = psCard.querySelector('aem-fragment'); - aemFragment.addEventListener('aem:load', (e) => log(target, e.detail)); + aemFragment.addEventListener('aem:load', (e) => { + log(target, JSON.stringify(e.detail)); + log(target, 'aem-fragment has loaded'); + }); document.getElementById('btnRefresh').addEventListener('click', () => { aemFragment.refresh(); }); } </script> -
      
      +
      
      +
      +

      Extending merch-card #

      +

      The merch-card custom element renders content in its default slot, allowing consumers to seamlessly extend it with additional UI capabilities.

      +

      Example #

      +

      In the demo below, the aem-fragment custom element is headless and does not render any content. +The sp-action-button custom element renders into the default slot as no explicit slot is provided.

      +
      <style>
      +    merch-card button {
      +        position: absolute;
      +        display: none;
      +        top: 4px;
      +        right: 4px;
      +    }
      +
      +    merch-card:hover button {
      +        display: block;
      +    }
      +</style>
      +<merch-card>
      +    <aem-fragment
      +        fragment="d8008cac-010f-4607-bacc-a7a327da1312"
      +    ></aem-fragment>
      +    <button id="ctxBtn">...</button>
      +</merch-card>
      +<script type="module">
      +    document
      +        .getElementById('ctxBtn')
      +        .addEventListener(
      +            'click',
      +            (e) =>
      +                (e.target.parentElement.style.backgroundColor =
      +                    'var(--spectrum-blue-300)'),
      +        );
      +</script>
       
      @@ -382,6 +490,7 @@

      Events - - - Plans merch cards - - - - - - - - - -
      -
      -
      -
      -
      -
      M@S2 Components
      -
      -
      -
      - -
      -
      -
      -

      <<Merch cards>>

      -
      -
      -
      + + + + + M@S Web Components + + + + + + + + + + + + + +
      + +
      -
      - + + +
      + + + +
      + + diff --git a/libs/features/mas/docs/spectrum.css b/libs/features/mas/docs/spectrum.css new file mode 100644 index 00000000000..d745ce2e4b1 --- /dev/null +++ b/libs/features/mas/docs/spectrum.css @@ -0,0 +1,7397 @@ +/* ../../node_modules/@spectrum-css/button/dist/index-base.css */ +.spectrum-Button { + cursor: pointer; + -webkit-user-select: none; + user-select: none; + overflow: visible; + display: inline-flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + margin: 0; + font-family: var(--mod-button-font-family, var(--mod-sans-font-family-stack, var(--spectrum-sans-font-family-stack))); + line-height: var(--mod-button-line-height, var(--mod-line-height-100, var(--spectrum-line-height-100))); + -webkit-text-decoration: none; + text-decoration: none; + text-transform: none; + vertical-align: top; + -webkit-appearance: button; + transition: + background var(--mod-button-animation-duration, var(--mod-animation-duration-100, var(--spectrum-animation-duration-100))) ease-out, + border-color var(--mod-button-animation-duration, var(--mod-animation-duration-100, var(--spectrum-animation-duration-100))) ease-out, + color var(--mod-button-animation-duration, var(--mod-animation-duration-100, var(--spectrum-animation-duration-100))) ease-out, + box-shadow var(--mod-button-animation-duration, var(--mod-animation-duration-100, var(--spectrum-animation-duration-100))) ease-out; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.spectrum-Button::-moz-focus-inner { + border-style: none; + padding: 0; +} +.spectrum-Button:focus { + outline: none; +} +.spectrum-Button.is-disabled, +.spectrum-Button:disabled { + cursor: default; +} +.spectrum-Button:after { + inset-block-start: 0; + inset-block-end: 0; + inset-inline-start: 0; + inset-inline-end: 0; + display: block; + margin: calc(var(--mod-button-focus-indicator-gap, var(--mod-focus-indicator-gap, var(--spectrum-focus-indicator-gap))) * -1); + transition: opacity var(--mod-button-animation-duration, var(--mod-button-animation-duration, var(--mod-animation-duration-100, var(--spectrum-animation-duration-100)))) ease-out, margin var(--mod-button-animation-duration, var(--mod-button-animation-duration, var(--mod-animation-duration-100, var(--spectrum-animation-duration-100)))) ease-out; +} +.spectrum-Button:focus-visible:after { + margin: calc(var(--mod-focus-indicator-gap, var(--spectrum-focus-indicator-gap)) * -2); +} +a.spectrum-Button { + -webkit-user-select: none; + user-select: none; + -webkit-appearance: none; +} +.spectrum-Button-label { + align-self: center; + justify-self: center; +} +.spectrum-Button-label:empty { + display: none; +} +.spectrum-Button { + --spectrum-button-animation-duration: var(--spectrum-animation-duration-100); + --spectrum-button-border-radius: calc(var(--spectrum-button-height) / 2); + --spectrum-button-border-width: var(--spectrum-border-width-200); + --spectrum-button-line-height: 1.2; + --spectrum-button-focus-ring-gap: var(--spectrum-focus-indicator-gap); + --spectrum-button-focus-ring-border-radius: calc(var(--spectrum-button-border-radius) + var(--spectrum-button-focus-ring-gap)); + --spectrum-button-focus-ring-thickness: var(--spectrum-focus-indicator-thickness); + --spectrum-button-focus-indicator-color: var(--spectrum-focus-indicator-color); + --spectrum-button-intended-icon-size: var(--spectrum-workflow-icon-size-50); + --mod-progress-circle-position: absolute; +} +.spectrum-Button--sizeS { + --spectrum-button-min-width: calc(var(--spectrum-component-height-75) * var(--spectrum-button-minimum-width-multiplier)); + --spectrum-button-height: var(--spectrum-component-height-75); + --spectrum-button-font-size: var(--spectrum-font-size-75); + --spectrum-button-edge-to-visual: calc(var(--spectrum-component-pill-edge-to-visual-75) - var(--spectrum-button-border-width)); + --spectrum-button-edge-to-visual-only: var(--spectrum-component-pill-edge-to-visual-only-75); + --spectrum-button-edge-to-text: calc(var(--spectrum-component-pill-edge-to-text-75) - var(--spectrum-button-border-width)); + --spectrum-button-padding-label-to-icon: var(--spectrum-text-to-visual-75); + --spectrum-button-top-to-text: var(--spectrum-button-top-to-text-small); + --spectrum-button-bottom-to-text: var(--spectrum-button-bottom-to-text-small); + --spectrum-button-top-to-icon: var(--spectrum-component-top-to-workflow-icon-75); + --spectrum-button-intended-icon-size: var(--spectrum-workflow-icon-size-75); +} +.spectrum-Button--sizeM { + --spectrum-button-min-width: calc(var(--spectrum-component-height-100) * var(--spectrum-button-minimum-width-multiplier)); + --spectrum-button-height: var(--spectrum-component-height-100); + --spectrum-button-font-size: var(--spectrum-font-size-100); + --spectrum-button-edge-to-visual: calc(var(--spectrum-component-pill-edge-to-visual-100) - var(--spectrum-button-border-width)); + --spectrum-button-edge-to-visual-only: var(--spectrum-component-pill-edge-to-visual-only-100); + --spectrum-button-edge-to-text: calc(var(--spectrum-component-pill-edge-to-text-100) - var(--spectrum-button-border-width)); + --spectrum-button-padding-label-to-icon: var(--spectrum-text-to-visual-100); + --spectrum-button-top-to-text: var(--spectrum-button-top-to-text-medium); + --spectrum-button-bottom-to-text: var(--spectrum-button-bottom-to-text-medium); + --spectrum-button-top-to-icon: var(--spectrum-component-top-to-workflow-icon-100); + --spectrum-button-intended-icon-size: var(--spectrum-workflow-icon-size-100); +} +.spectrum-Button--sizeL { + --spectrum-button-min-width: calc(var(--spectrum-component-height-200) * var(--spectrum-button-minimum-width-multiplier)); + --spectrum-button-height: var(--spectrum-component-height-200); + --spectrum-button-font-size: var(--spectrum-font-size-200); + --spectrum-button-edge-to-visual: calc(var(--spectrum-component-pill-edge-to-visual-200) - var(--spectrum-button-border-width)); + --spectrum-button-edge-to-visual-only: var(--spectrum-component-pill-edge-to-visual-only-200); + --spectrum-button-edge-to-text: calc(var(--spectrum-component-pill-edge-to-text-200) - var(--spectrum-button-border-width)); + --spectrum-button-padding-label-to-icon: var(--spectrum-text-to-visual-200); + --spectrum-button-top-to-text: var(--spectrum-button-top-to-text-large); + --spectrum-button-bottom-to-text: var(--spectrum-button-bottom-to-text-large); + --spectrum-button-top-to-icon: var(--spectrum-component-top-to-workflow-icon-200); + --spectrum-button-intended-icon-size: var(--spectrum-workflow-icon-size-200); +} +.spectrum-Button--sizeXL { + --spectrum-button-min-width: calc(var(--spectrum-component-height-300) * var(--spectrum-button-minimum-width-multiplier)); + --spectrum-button-height: var(--spectrum-component-height-300); + --spectrum-button-font-size: var(--spectrum-font-size-300); + --spectrum-button-edge-to-visual: calc(var(--spectrum-component-pill-edge-to-visual-300) - var(--spectrum-button-border-width)); + --spectrum-button-edge-to-visual-only: var(--spectrum-component-pill-edge-to-visual-only-300); + --spectrum-button-edge-to-text: calc(var(--spectrum-component-pill-edge-to-text-300) - var(--spectrum-button-border-width)); + --spectrum-button-padding-label-to-icon: var(--spectrum-text-to-visual-300); + --spectrum-button-top-to-text: var(--spectrum-button-top-to-text-extra-large); + --spectrum-button-bottom-to-text: var(--spectrum-button-bottom-to-text-extra-large); + --spectrum-button-top-to-icon: var(--spectrum-component-top-to-workflow-icon-300); + --spectrum-button-intended-icon-size: var(--spectrum-workflow-icon-size-300); +} +.spectrum-Button { + border-radius: var(--mod-button-border-radius, var(--spectrum-button-border-radius)); + border-width: var(--mod-button-border-width, var(--spectrum-button-border-width)); + border-style: solid; + font-size: var(--mod-button-font-size, var(--spectrum-button-font-size)); + font-weight: var(--mod-bold-font-weight, var(--spectrum-bold-font-weight)); + gap: var(--mod-button-padding-label-to-icon, var(--spectrum-button-padding-label-to-icon)); + max-inline-size: none; + max-inline-size: var(--mod-button-max-inline-size, none); + min-inline-size: var(--mod-button-min-width, var(--spectrum-button-min-width)); + min-block-size: var(--mod-button-height, var(--spectrum-button-height)); + padding-block: 0; + padding-inline: var(--mod-button-edge-to-text, var(--spectrum-button-edge-to-text)); + position: relative; + color: inherit; + margin-block: var(--mod-button-margin-block); + margin-inline-end: var(--mod-button-margin-right); + margin-inline-start: var(--mod-button-margin-left); +} +.spectrum-Button:active { + box-shadow: none; +} +.spectrum-Button .spectrum-Icon { + --_icon-size-difference: max(0px, var(--spectrum-button-intended-icon-size) - var(--spectrum-icon-block-size, var(--spectrum-button-intended-icon-size))); + margin-block-start: var(--mod-button-icon-margin-block-start, max(0px, var(--mod-button-top-to-icon, var(--spectrum-button-top-to-icon)) - var(--mod-button-border-width, var(--spectrum-button-border-width)) + (0px/2))); + margin-block-start: var(--mod-button-icon-margin-block-start, max(0px, var(--mod-button-top-to-icon, var(--spectrum-button-top-to-icon)) - var(--mod-button-border-width, var(--spectrum-button-border-width)) + (var(--_icon-size-difference, 0px) / 2))); + margin-inline-start: calc(var(--mod-button-edge-to-visual, var(--spectrum-button-edge-to-visual)) - var(--mod-button-edge-to-text, var(--spectrum-button-edge-to-text))); + color: inherit; + flex-shrink: 0; + align-self: flex-start; +} +.spectrum-Button:after { + border-radius: calc(var(--mod-button-border-radius, var(--spectrum-button-border-radius)) + var(--mod-focus-indicator-gap, var(--spectrum-focus-indicator-gap))); +} +.spectrum-Button.spectrum-Button--iconOnly { + min-inline-size: unset; + padding: calc(var(--mod-button-edge-to-visual-only, var(--spectrum-button-edge-to-visual-only)) - var(--mod-button-border-width, var(--spectrum-button-border-width))); + border-radius: 50%; +} +.spectrum-Button.spectrum-Button--iconOnly .spectrum-Icon { + align-self: center; + margin-inline-start: 0; + margin-block-start: 0; +} +.spectrum-Button.spectrum-Button--iconOnly:after { + border-radius: 50%; +} +.spectrum-Button-label { + padding-block-start: calc(var(--mod-button-top-to-text, var(--spectrum-button-top-to-text)) - var(--mod-button-border-width, var(--spectrum-button-border-width))); + padding-block-end: calc(var(--mod-button-bottom-to-text, var(--spectrum-button-bottom-to-text)) - var(--mod-button-border-width, var(--spectrum-button-border-width))); + line-height: var(--mod-button-line-height, var(--spectrum-button-line-height)); + align-self: start; + text-align: center; + text-align: var(--mod-button-text-align, center); +} +.spectrum-Button .spectrum-Icon + .spectrum-Button-label { + text-align: start; + text-align: var(--mod-button-text-align-with-icon, start); +} +.spectrum-Button.is-focused:after, +.spectrum-Button:focus-visible:after { + box-shadow: 0 0 0 var(--mod-button-focus-ring-thickness, var(--spectrum-button-focus-ring-thickness)) var(--mod-button-focus-ring-color, var(--spectrum-button-focus-indicator-color)); +} +.spectrum-Button { + transition: border-color var(--mod-button-animation-duration, var(--spectrum-button-animation-duration)) ease-in-out; +} +.spectrum-Button:after { + position: absolute; + inset: 0; + margin: calc((var(--mod-button-focus-ring-gap, var(--spectrum-button-focus-ring-gap)) + var(--mod-button-border-width, var(--spectrum-button-border-width))) * -1); + border-radius: var(--mod-button-focus-ring-border-radius, var(--spectrum-button-focus-ring-border-radius)); + transition: box-shadow var(--mod-button-animation-duration, var(--spectrum-button-animation-duration)) ease-in-out; + pointer-events: none; + content: ""; +} +.spectrum-Button:focus-visible { + box-shadow: none; + outline: none; +} +.spectrum-Button:focus-visible:after { + box-shadow: 0 0 0 var(--mod-button-focus-ring-thickness, var(--spectrum-button-focus-ring-thickness)) var(--highcontrast-button-focus-ring-color, var(--mod-button-focus-ring-color, var(--mod-button-focus-ring-color, var(--spectrum-button-focus-indicator-color)))); +} +.spectrum-Button { + background-color: var(--highcontrast-button-background-color-default, var(--mod-button-background-color-default, var(--spectrum-button-background-color-default))); + border-color: var(--highcontrast-button-border-color-default, var(--mod-button-border-color-default, var(--spectrum-button-border-color-default))); + color: var(--highcontrast-button-content-color-default, var(--mod-button-content-color-default, var(--spectrum-button-content-color-default))); + transition: + border 0.13s linear, + color 0.13s linear, + background-color 0.13s linear; + transition: + border var(--mod-button-animation-duration, var(--spectrum-button-animation-duration, 0.13s)) linear, + color var(--mod-button-animation-duration, var(--spectrum-button-animation-duration, 0.13s)) linear, + background-color var(--mod-button-animation-duration, var(--spectrum-button-animation-duration, 0.13s)) linear; +} +@media (hover: hover) { + .spectrum-Button:hover { + box-shadow: none; + background-color: var(--highcontrast-button-background-color-hover, var(--mod-button-background-color-hover, var(--spectrum-button-background-color-hover))); + border-color: var(--highcontrast-button-border-color-hover, var(--mod-button-border-color-hover, var(--spectrum-button-border-color-hover))); + color: var(--highcontrast-button-content-color-hover, var(--mod-button-content-color-hover, var(--spectrum-button-content-color-hover))); + } +} +.spectrum-Button:focus-visible { + background-color: var(--highcontrast-button-background-color-focus, var(--mod-button-background-color-focus, var(--spectrum-button-background-color-focus))); + border-color: var(--highcontrast-button-border-color-focus, var(--mod-button-border-color-focus, var(--spectrum-button-border-color-focus))); + color: var(--highcontrast-button-content-color-focus, var(--mod-button-content-color-focus, var(--spectrum-button-content-color-focus))); +} +.spectrum-Button:active { + background-color: var(--highcontrast-button-background-color-down, var(--mod-button-background-color-down, var(--spectrum-button-background-color-down))); + border-color: var(--highcontrast-button-border-color-down, var(--mod-button-border-color-down, var(--spectrum-button-border-color-down))); + color: var(--highcontrast-button-content-color-down, var(--mod-button-content-color-down, var(--spectrum-button-content-color-down))); +} +.spectrum-Button.is-disabled, +.spectrum-Button.is-pending, +.spectrum-Button:disabled, +.spectrum-Button[pending] { + background-color: var(--highcontrast-button-background-color-disabled, var(--mod-button-background-color-disabled, var(--spectrum-button-background-color-disabled))); + border-color: var(--highcontrast-button-border-color-disabled, var(--mod-button-border-color-disabled, var(--spectrum-button-border-color-disabled))); + color: var(--highcontrast-button-content-color-disabled, var(--mod-button-content-color-disabled, var(--spectrum-button-content-color-disabled))); +} +.spectrum-Button .spectrum-Button-label, +.spectrum-Button .spectrum-Icon { + visibility: visible; + opacity: 1; + transition: opacity 0.13s ease-in-out; + transition: opacity var(--mod-button-animation-duration, var(--spectrum-button-animation-duration, 0.13s)) ease-in-out; +} +.spectrum-Button .spectrum-ProgressCircle { + visibility: hidden; + opacity: 0; + transition: opacity 0.13s ease-in-out, visibility 0s linear 0.13s; + transition: opacity var(--mod-button-animation-duration, var(--spectrum-button-animation-duration, 0.13s)) ease-in-out, visibility 0s linear var(--mod-button-animation-duration, var(--spectrum-button-animation-duration, 0.13s)); +} +.spectrum-Button.is-pending, +.spectrum-Button[pending] { + cursor: default; +} +.spectrum-Button.is-pending .spectrum-Button-label, +.spectrum-Button.is-pending .spectrum-Icon, +.spectrum-Button[pending] .spectrum-Button-label, +.spectrum-Button[pending] .spectrum-Icon { + visibility: hidden; + opacity: 0; + transition: opacity 0.13s ease-in-out, visibility 0s linear 0.13s; + transition: opacity var(--mod-button-animation-duration, var(--spectrum-button-animation-duration, 0.13s)) ease-in-out, visibility 0s linear var(--mod-button-animation-duration, var(--spectrum-button-animation-duration, 0.13s)); +} +.spectrum-Button.is-pending .spectrum-ProgressCircle, +.spectrum-Button[pending] .spectrum-ProgressCircle { + visibility: visible; + opacity: 1; + transition: opacity 0.13s ease-in-out; + transition: opacity var(--mod-button-animation-duration, var(--spectrum-button-animation-duration, 0.13s)) ease-in-out; +} +.spectrum-Button--noWrap .spectrum-Button-label { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.spectrum-Button--staticBlack, +.spectrum-Button--staticWhite { + --spectrum-button-focus-indicator-color: var(--mod-static-black-focus-indicator-color, var(--spectrum-static-black-focus-indicator-color)); +} +@media (forced-colors: active) { + .spectrum-Button { + --highcontrast-button-content-color-default: ButtonText; + --highcontrast-button-content-color-hover: ButtonText; + --highcontrast-button-content-color-focus: ButtonText; + --highcontrast-button-content-color-down: ButtonText; + --highcontrast-button-border-color-default: ButtonBorder; + --highcontrast-button-border-color-hover: ButtonBorder; + --highcontrast-button-border-color-focus: ButtonBorder; + --highcontrast-button-border-color-down: ButtonBorder; + --highcontrast-button-background-color-default: ButtonFace; + --highcontrast-button-background-color-hover: ButtonFace; + --highcontrast-button-background-color-down: ButtonFace; + --highcontrast-button-background-color-focus: ButtonFace; + --highcontrast-button-background-color-disabled: ButtonFace; + --highcontrast-button-content-color-disabled: GrayText; + --highcontrast-button-border-color-disabled: GrayText; + --mod-progress-circle-track-border-color: ButtonText; + --mod-progress-circle-track-border-color-over-background: ButtonText; + --mod-progress-circle-thickness: var(--spectrum-progress-circle-thickness-medium); + --mod-button-animation-duration: 0s; + } + .spectrum-Button .spectrum-Button-label { + forced-color-adjust: none; + } + .spectrum-Button:focus-visible:after { + forced-color-adjust: none; + box-shadow: 0 0 0 var(--mod-button-focus-ring-thickness, var(--spectrum-button-focus-ring-thickness)) ButtonText; + } + .spectrum-Button.spectrum-Button--accent.spectrum-Button--fill { + --highcontrast-button-background-color-default: ButtonText; + --highcontrast-button-content-color-default: ButtonFace; + --highcontrast-button-content-color-hover: HighlightText; + --highcontrast-button-content-color-down: HighlightText; + --highcontrast-button-content-color-focus: HighlightText; + --highcontrast-button-background-color-disabled: ButtonFace; + --highcontrast-button-background-color-hover: Highlight; + --highcontrast-button-background-color-down: Highlight; + --highcontrast-button-background-color-focus: Highlight; + --highcontrast-button-border-color-default: ButtonText; + --highcontrast-button-border-color-hover: Highlight; + --highcontrast-button-border-color-focus: Highlight; + --highcontrast-button-border-color-down: Highlight; + } +} +.spectrum-Button { + --spectrum-button-background-color-default: var(--system-spectrum-button-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-content-color-focus); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-content-color-disabled); +} +.spectrum-Button.spectrum-Button--accent { + --spectrum-button-background-color-default: var(--system-spectrum-button-accent-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-accent-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-accent-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-accent-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-accent-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-accent-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-accent-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-accent-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-accent-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-accent-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-accent-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-accent-content-color-focus); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-accent-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-accent-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-accent-content-color-disabled); +} +.spectrum-Button.spectrum-Button--accent.spectrum-Button--outline { + --spectrum-button-background-color-default: var(--system-spectrum-button-accent-outline-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-accent-outline-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-accent-outline-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-accent-outline-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-accent-outline-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-accent-outline-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-accent-outline-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-accent-outline-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-accent-outline-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-accent-outline-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-accent-outline-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-accent-outline-content-color-focus); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-accent-outline-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-accent-outline-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-accent-outline-content-color-disabled); +} +.spectrum-Button.spectrum-Button--negative { + --spectrum-button-background-color-default: var(--system-spectrum-button-negative-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-negative-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-negative-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-negative-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-negative-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-negative-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-negative-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-negative-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-negative-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-negative-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-negative-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-negative-content-color-focus); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-negative-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-negative-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-negative-content-color-disabled); +} +.spectrum-Button.spectrum-Button--negative.spectrum-Button--outline { + --spectrum-button-background-color-default: var(--system-spectrum-button-negative-outline-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-negative-outline-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-negative-outline-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-negative-outline-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-negative-outline-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-negative-outline-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-negative-outline-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-negative-outline-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-negative-outline-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-negative-outline-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-negative-outline-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-negative-outline-content-color-focus); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-negative-outline-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-negative-outline-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-negative-outline-content-color-disabled); +} +.spectrum-Button.spectrum-Button--primary { + --spectrum-button-background-color-default: var(--system-spectrum-button-primary-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-primary-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-primary-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-primary-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-primary-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-primary-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-primary-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-primary-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-primary-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-primary-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-primary-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-primary-content-color-focus); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-primary-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-primary-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-primary-content-color-disabled); +} +.spectrum-Button.spectrum-Button--primary.spectrum-Button--outline { + --spectrum-button-background-color-default: var(--system-spectrum-button-primary-outline-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-primary-outline-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-primary-outline-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-primary-outline-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-primary-outline-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-primary-outline-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-primary-outline-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-primary-outline-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-primary-outline-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-primary-outline-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-primary-outline-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-primary-outline-content-color-focus); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-primary-outline-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-primary-outline-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-primary-outline-content-color-disabled); +} +.spectrum-Button.spectrum-Button--secondary { + --spectrum-button-background-color-default: var(--system-spectrum-button-secondary-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-secondary-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-secondary-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-secondary-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-secondary-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-secondary-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-secondary-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-secondary-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-secondary-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-secondary-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-secondary-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-secondary-content-color-focus); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-secondary-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-secondary-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-secondary-content-color-disabled); +} +.spectrum-Button.spectrum-Button--secondary.spectrum-Button--outline { + --spectrum-button-background-color-default: var(--system-spectrum-button-secondary-outline-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-secondary-outline-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-secondary-outline-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-secondary-outline-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-secondary-outline-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-secondary-outline-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-secondary-outline-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-secondary-outline-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-secondary-outline-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-secondary-outline-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-secondary-outline-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-secondary-outline-content-color-focus); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-secondary-outline-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-secondary-outline-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-secondary-outline-content-color-disabled); +} +.spectrum-Button.spectrum-Button--quiet { + --spectrum-button-background-color-default: var(--system-spectrum-button-quiet-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-quiet-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-quiet-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-quiet-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-quiet-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-quiet-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-quiet-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-quiet-border-color-focus); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-quiet-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-quiet-border-color-disabled); +} +.spectrum-Button.is-selected { + --spectrum-button-background-color-default: var(--system-spectrum-button-selected-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-selected-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-selected-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-selected-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-selected-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-selected-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-selected-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-selected-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-selected-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-selected-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-selected-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-selected-content-color-focus); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-selected-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-selected-border-color-disabled); +} +.spectrum-Button.is-selected.spectrum-Button--emphasized { + --spectrum-button-background-color-default: var(--system-spectrum-button-selected-emphasized-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-selected-emphasized-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-selected-emphasized-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-selected-emphasized-background-color-focus); +} +.spectrum-Button.spectrum-Button--staticBlack.spectrum-Button--quiet { + --spectrum-button-border-color-default: var(--system-spectrum-button-staticblack-quiet-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-staticblack-quiet-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-staticblack-quiet-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-staticblack-quiet-border-color-focus); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-staticblack-quiet-border-color-disabled); +} +.spectrum-Button.spectrum-Button--staticWhite.spectrum-Button--quiet { + --spectrum-button-border-color-default: var(--system-spectrum-button-staticwhite-quiet-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-staticwhite-quiet-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-staticwhite-quiet-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-staticwhite-quiet-border-color-focus); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-staticwhite-quiet-border-color-disabled); +} +.spectrum-Button.spectrum-Button--staticWhite { + --spectrum-button-background-color-default: var(--system-spectrum-button-staticwhite-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-staticwhite-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-staticwhite-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-staticwhite-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-staticwhite-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-staticwhite-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-staticwhite-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-staticwhite-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-staticwhite-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-staticwhite-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-staticwhite-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-staticwhite-content-color-focus); + --spectrum-button-focus-indicator-color: var(--system-spectrum-button-staticwhite-focus-indicator-color); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-staticwhite-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-staticwhite-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-staticwhite-content-color-disabled); +} +.spectrum-Button.spectrum-Button--staticWhite.spectrum-Button--outline { + --spectrum-button-background-color-default: var(--system-spectrum-button-staticwhite-outline-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-staticwhite-outline-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-staticwhite-outline-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-staticwhite-outline-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-staticwhite-outline-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-staticwhite-outline-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-staticwhite-outline-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-staticwhite-outline-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-staticwhite-outline-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-staticwhite-outline-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-staticwhite-outline-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-staticwhite-outline-content-color-focus); + --spectrum-button-focus-indicator-color: var(--system-spectrum-button-staticwhite-outline-focus-indicator-color); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-staticwhite-outline-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-staticwhite-outline-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-staticwhite-outline-content-color-disabled); +} +.spectrum-Button.spectrum-Button--staticWhite.is-selected { + --spectrum-button-background-color-default: var(--system-spectrum-button-staticwhite-selected-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-staticwhite-selected-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-staticwhite-selected-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-staticwhite-selected-background-color-focus); + --spectrum-button-content-color-default: var(--mod-button-static-content-color, var(--system-spectrum-button-staticwhite-selected-content-color-default)); + --spectrum-button-content-color-hover: var(--mod-button-static-content-color, var(--system-spectrum-button-staticwhite-selected-content-color-hover)); + --spectrum-button-content-color-down: var(--mod-button-static-content-color, var(--system-spectrum-button-staticwhite-selected-content-color-down)); + --spectrum-button-content-color-focus: var(--mod-button-static-content-color, var(--system-spectrum-button-staticwhite-selected-content-color-focus)); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-staticwhite-selected-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-staticwhite-selected-border-color-disabled); +} +.spectrum-Button.spectrum-Button--staticWhite.spectrum-Button--secondary { + --spectrum-button-background-color-default: var(--system-spectrum-button-staticwhite-secondary-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-staticwhite-secondary-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-staticwhite-secondary-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-staticwhite-secondary-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-staticwhite-secondary-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-staticwhite-secondary-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-staticwhite-secondary-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-staticwhite-secondary-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-staticwhite-secondary-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-staticwhite-secondary-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-staticwhite-secondary-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-staticwhite-secondary-content-color-focus); + --spectrum-button-focus-indicator-color: var(--system-spectrum-button-staticwhite-secondary-focus-indicator-color); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-staticwhite-secondary-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-staticwhite-secondary-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-staticwhite-secondary-content-color-disabled); +} +.spectrum-Button.spectrum-Button--staticWhite.spectrum-Button--secondary.spectrum-Button--outline { + --spectrum-button-background-color-default: var(--system-spectrum-button-staticwhite-secondary-outline-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-staticwhite-secondary-outline-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-staticwhite-secondary-outline-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-staticwhite-secondary-outline-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-staticwhite-secondary-outline-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-staticwhite-secondary-outline-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-staticwhite-secondary-outline-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-staticwhite-secondary-outline-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-staticwhite-secondary-outline-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-staticwhite-secondary-outline-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-staticwhite-secondary-outline-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-staticwhite-secondary-outline-content-color-focus); + --spectrum-button-focus-indicator-color: var(--system-spectrum-button-staticwhite-secondary-outline-focus-indicator-color); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-staticwhite-secondary-outline-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-staticwhite-secondary-outline-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-staticwhite-secondary-outline-content-color-disabled); +} +.spectrum-Button.spectrum-Button--staticBlack { + --spectrum-button-background-color-default: var(--system-spectrum-button-staticblack-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-staticblack-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-staticblack-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-staticblack-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-staticblack-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-staticblack-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-staticblack-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-staticblack-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-staticblack-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-staticblack-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-staticblack-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-staticblack-content-color-focus); + --spectrum-button-focus-indicator-color: var(--system-spectrum-button-staticblack-focus-indicator-color); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-staticblack-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-staticblack-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-staticblack-content-color-disabled); +} +.spectrum-Button.spectrum-Button--staticBlack.spectrum-Button--outline { + --spectrum-button-background-color-default: var(--system-spectrum-button-staticblack-outline-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-staticblack-outline-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-staticblack-outline-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-staticblack-outline-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-staticblack-outline-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-staticblack-outline-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-staticblack-outline-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-staticblack-outline-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-staticblack-outline-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-staticblack-outline-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-staticblack-outline-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-staticblack-outline-content-color-focus); + --spectrum-button-focus-indicator-color: var(--system-spectrum-button-staticblack-outline-focus-indicator-color); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-staticblack-outline-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-staticblack-outline-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-staticblack-outline-content-color-disabled); +} +.spectrum-Button.spectrum-Button--staticBlack.spectrum-Button--secondary { + --spectrum-button-background-color-default: var(--system-spectrum-button-staticblack-secondary-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-staticblack-secondary-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-staticblack-secondary-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-staticblack-secondary-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-staticblack-secondary-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-staticblack-secondary-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-staticblack-secondary-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-staticblack-secondary-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-staticblack-secondary-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-staticblack-secondary-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-staticblack-secondary-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-staticblack-secondary-content-color-focus); + --spectrum-button-focus-indicator-color: var(--system-spectrum-button-staticblack-secondary-focus-indicator-color); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-staticblack-secondary-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-staticblack-secondary-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-staticblack-secondary-content-color-disabled); +} +.spectrum-Button.spectrum-Button--staticBlack.spectrum-Button--secondary.spectrum-Button--outline { + --spectrum-button-background-color-default: var(--system-spectrum-button-staticblack-secondary-outline-background-color-default); + --spectrum-button-background-color-hover: var(--system-spectrum-button-staticblack-secondary-outline-background-color-hover); + --spectrum-button-background-color-down: var(--system-spectrum-button-staticblack-secondary-outline-background-color-down); + --spectrum-button-background-color-focus: var(--system-spectrum-button-staticblack-secondary-outline-background-color-focus); + --spectrum-button-border-color-default: var(--system-spectrum-button-staticblack-secondary-outline-border-color-default); + --spectrum-button-border-color-hover: var(--system-spectrum-button-staticblack-secondary-outline-border-color-hover); + --spectrum-button-border-color-down: var(--system-spectrum-button-staticblack-secondary-outline-border-color-down); + --spectrum-button-border-color-focus: var(--system-spectrum-button-staticblack-secondary-outline-border-color-focus); + --spectrum-button-content-color-default: var(--system-spectrum-button-staticblack-secondary-outline-content-color-default); + --spectrum-button-content-color-hover: var(--system-spectrum-button-staticblack-secondary-outline-content-color-hover); + --spectrum-button-content-color-down: var(--system-spectrum-button-staticblack-secondary-outline-content-color-down); + --spectrum-button-content-color-focus: var(--system-spectrum-button-staticblack-secondary-outline-content-color-focus); + --spectrum-button-focus-indicator-color: var(--system-spectrum-button-staticblack-secondary-outline-focus-indicator-color); + --spectrum-button-background-color-disabled: var(--system-spectrum-button-staticblack-secondary-outline-background-color-disabled); + --spectrum-button-border-color-disabled: var(--system-spectrum-button-staticblack-secondary-outline-border-color-disabled); + --spectrum-button-content-color-disabled: var(--system-spectrum-button-staticblack-secondary-outline-content-color-disabled); +} + +/* ../../node_modules/@spectrum-css/button/dist/themes/spectrum.css */ +.spectrum { + --system-spectrum-button-background-color-default: var(--spectrum-gray-75); + --system-spectrum-button-background-color-hover: var(--spectrum-gray-200); + --system-spectrum-button-background-color-down: var(--spectrum-gray-300); + --system-spectrum-button-background-color-focus: var(--spectrum-gray-200); + --system-spectrum-button-border-color-default: var(--spectrum-gray-400); + --system-spectrum-button-border-color-hover: var(--spectrum-gray-500); + --system-spectrum-button-border-color-down: var(--spectrum-gray-600); + --system-spectrum-button-border-color-focus: var(--spectrum-gray-500); + --system-spectrum-button-content-color-default: var(--spectrum-neutral-content-color-default); + --system-spectrum-button-content-color-hover: var(--spectrum-neutral-content-color-hover); + --system-spectrum-button-content-color-down: var(--spectrum-neutral-content-color-down); + --system-spectrum-button-content-color-focus: var(--spectrum-neutral-content-color-key-focus); + --system-spectrum-button-background-color-disabled: transparent; + --system-spectrum-button-border-color-disabled: var(--spectrum-disabled-border-color); + --system-spectrum-button-content-color-disabled: var(--spectrum-disabled-content-color); + --system-spectrum-button-accent-background-color-default: var(--spectrum-accent-background-color-default); + --system-spectrum-button-accent-background-color-hover: var(--spectrum-accent-background-color-hover); + --system-spectrum-button-accent-background-color-down: var(--spectrum-accent-background-color-down); + --system-spectrum-button-accent-background-color-focus: var(--spectrum-accent-background-color-key-focus); + --system-spectrum-button-accent-border-color-default: transparent; + --system-spectrum-button-accent-border-color-hover: transparent; + --system-spectrum-button-accent-border-color-down: transparent; + --system-spectrum-button-accent-border-color-focus: transparent; + --system-spectrum-button-accent-content-color-default: var(--spectrum-white); + --system-spectrum-button-accent-content-color-hover: var(--spectrum-white); + --system-spectrum-button-accent-content-color-down: var(--spectrum-white); + --system-spectrum-button-accent-content-color-focus: var(--spectrum-white); + --system-spectrum-button-accent-background-color-disabled: var(--spectrum-disabled-background-color); + --system-spectrum-button-accent-border-color-disabled: transparent; + --system-spectrum-button-accent-content-color-disabled: var(--spectrum-disabled-content-color); + --system-spectrum-button-accent-outline-background-color-default: transparent; + --system-spectrum-button-accent-outline-background-color-hover: var(--spectrum-accent-color-200); + --system-spectrum-button-accent-outline-background-color-down: var(--spectrum-accent-color-300); + --system-spectrum-button-accent-outline-background-color-focus: var(--spectrum-accent-color-200); + --system-spectrum-button-accent-outline-border-color-default: var(--spectrum-accent-color-900); + --system-spectrum-button-accent-outline-border-color-hover: var(--spectrum-accent-color-1000); + --system-spectrum-button-accent-outline-border-color-down: var(--spectrum-accent-color-1100); + --system-spectrum-button-accent-outline-border-color-focus: var(--spectrum-accent-color-1000); + --system-spectrum-button-accent-outline-content-color-default: var(--spectrum-accent-content-color-default); + --system-spectrum-button-accent-outline-content-color-hover: var(--spectrum-accent-content-color-hover); + --system-spectrum-button-accent-outline-content-color-down: var(--spectrum-accent-content-color-down); + --system-spectrum-button-accent-outline-content-color-focus: var(--spectrum-accent-content-color-key-focus); + --system-spectrum-button-accent-outline-background-color-disabled: transparent; + --system-spectrum-button-accent-outline-border-color-disabled: var(--spectrum-disabled-border-color); + --system-spectrum-button-accent-outline-content-color-disabled: var(--spectrum-disabled-content-color); + --system-spectrum-button-negative-background-color-default: var(--spectrum-negative-background-color-default); + --system-spectrum-button-negative-background-color-hover: var(--spectrum-negative-background-color-hover); + --system-spectrum-button-negative-background-color-down: var(--spectrum-negative-background-color-down); + --system-spectrum-button-negative-background-color-focus: var(--spectrum-negative-background-color-key-focus); + --system-spectrum-button-negative-border-color-default: transparent; + --system-spectrum-button-negative-border-color-hover: transparent; + --system-spectrum-button-negative-border-color-down: transparent; + --system-spectrum-button-negative-border-color-focus: transparent; + --system-spectrum-button-negative-content-color-default: var(--spectrum-white); + --system-spectrum-button-negative-content-color-hover: var(--spectrum-white); + --system-spectrum-button-negative-content-color-down: var(--spectrum-white); + --system-spectrum-button-negative-content-color-focus: var(--spectrum-white); + --system-spectrum-button-negative-background-color-disabled: var(--spectrum-disabled-background-color); + --system-spectrum-button-negative-border-color-disabled: transparent; + --system-spectrum-button-negative-content-color-disabled: var(--spectrum-disabled-content-color); + --system-spectrum-button-negative-outline-background-color-default: transparent; + --system-spectrum-button-negative-outline-background-color-hover: var(--spectrum-negative-color-200); + --system-spectrum-button-negative-outline-background-color-down: var(--spectrum-negative-color-300); + --system-spectrum-button-negative-outline-background-color-focus: var(--spectrum-negative-color-200); + --system-spectrum-button-negative-outline-border-color-default: var(--spectrum-negative-color-900); + --system-spectrum-button-negative-outline-border-color-hover: var(--spectrum-negative-color-1000); + --system-spectrum-button-negative-outline-border-color-down: var(--spectrum-negative-color-1100); + --system-spectrum-button-negative-outline-border-color-focus: var(--spectrum-negative-color-1000); + --system-spectrum-button-negative-outline-content-color-default: var(--spectrum-negative-content-color-default); + --system-spectrum-button-negative-outline-content-color-hover: var(--spectrum-negative-content-color-hover); + --system-spectrum-button-negative-outline-content-color-down: var(--spectrum-negative-content-color-down); + --system-spectrum-button-negative-outline-content-color-focus: var(--spectrum-negative-content-color-key-focus); + --system-spectrum-button-negative-outline-background-color-disabled: transparent; + --system-spectrum-button-negative-outline-border-color-disabled: var(--spectrum-disabled-border-color); + --system-spectrum-button-negative-outline-content-color-disabled: var(--spectrum-disabled-content-color); + --system-spectrum-button-primary-background-color-default: var(--spectrum-neutral-background-color-default); + --system-spectrum-button-primary-background-color-hover: var(--spectrum-neutral-background-color-hover); + --system-spectrum-button-primary-background-color-down: var(--spectrum-neutral-background-color-down); + --system-spectrum-button-primary-background-color-focus: var(--spectrum-neutral-background-color-key-focus); + --system-spectrum-button-primary-border-color-default: transparent; + --system-spectrum-button-primary-border-color-hover: transparent; + --system-spectrum-button-primary-border-color-down: transparent; + --system-spectrum-button-primary-border-color-focus: transparent; + --system-spectrum-button-primary-content-color-default: var(--spectrum-white); + --system-spectrum-button-primary-content-color-hover: var(--spectrum-white); + --system-spectrum-button-primary-content-color-down: var(--spectrum-white); + --system-spectrum-button-primary-content-color-focus: var(--spectrum-white); + --system-spectrum-button-primary-background-color-disabled: var(--spectrum-disabled-background-color); + --system-spectrum-button-primary-border-color-disabled: transparent; + --system-spectrum-button-primary-content-color-disabled: var(--spectrum-disabled-content-color); + --system-spectrum-button-primary-outline-background-color-default: transparent; + --system-spectrum-button-primary-outline-background-color-hover: var(--spectrum-gray-300); + --system-spectrum-button-primary-outline-background-color-down: var(--spectrum-gray-400); + --system-spectrum-button-primary-outline-background-color-focus: var(--spectrum-gray-300); + --system-spectrum-button-primary-outline-border-color-default: var(--spectrum-gray-800); + --system-spectrum-button-primary-outline-border-color-hover: var(--spectrum-gray-900); + --system-spectrum-button-primary-outline-border-color-down: var(--spectrum-gray-900); + --system-spectrum-button-primary-outline-border-color-focus: var(--spectrum-gray-900); + --system-spectrum-button-primary-outline-content-color-default: var(--spectrum-neutral-content-color-default); + --system-spectrum-button-primary-outline-content-color-hover: var(--spectrum-neutral-content-color-hover); + --system-spectrum-button-primary-outline-content-color-down: var(--spectrum-neutral-content-color-down); + --system-spectrum-button-primary-outline-content-color-focus: var(--spectrum-neutral-content-color-key-focus); + --system-spectrum-button-primary-outline-background-color-disabled: transparent; + --system-spectrum-button-primary-outline-border-color-disabled: var(--spectrum-disabled-border-color); + --system-spectrum-button-primary-outline-content-color-disabled: var(--spectrum-disabled-content-color); + --system-spectrum-button-secondary-background-color-default: var(--spectrum-gray-200); + --system-spectrum-button-secondary-background-color-hover: var(--spectrum-gray-300); + --system-spectrum-button-secondary-background-color-down: var(--spectrum-gray-400); + --system-spectrum-button-secondary-background-color-focus: var(--spectrum-gray-300); + --system-spectrum-button-secondary-border-color-default: transparent; + --system-spectrum-button-secondary-border-color-hover: transparent; + --system-spectrum-button-secondary-border-color-down: transparent; + --system-spectrum-button-secondary-border-color-focus: transparent; + --system-spectrum-button-secondary-content-color-default: var(--spectrum-neutral-content-color-default); + --system-spectrum-button-secondary-content-color-hover: var(--spectrum-neutral-content-color-hover); + --system-spectrum-button-secondary-content-color-down: var(--spectrum-neutral-content-color-down); + --system-spectrum-button-secondary-content-color-focus: var(--spectrum-neutral-content-color-key-focus); + --system-spectrum-button-secondary-background-color-disabled: var(--spectrum-disabled-background-color); + --system-spectrum-button-secondary-border-color-disabled: transparent; + --system-spectrum-button-secondary-content-color-disabled: var(--spectrum-disabled-content-color); + --system-spectrum-button-secondary-outline-background-color-default: transparent; + --system-spectrum-button-secondary-outline-background-color-hover: var(--spectrum-gray-300); + --system-spectrum-button-secondary-outline-background-color-down: var(--spectrum-gray-400); + --system-spectrum-button-secondary-outline-background-color-focus: var(--spectrum-gray-300); + --system-spectrum-button-secondary-outline-border-color-default: var(--spectrum-gray-300); + --system-spectrum-button-secondary-outline-border-color-hover: var(--spectrum-gray-400); + --system-spectrum-button-secondary-outline-border-color-down: var(--spectrum-gray-500); + --system-spectrum-button-secondary-outline-border-color-focus: var(--spectrum-gray-400); + --system-spectrum-button-secondary-outline-content-color-default: var(--spectrum-neutral-content-color-default); + --system-spectrum-button-secondary-outline-content-color-hover: var(--spectrum-neutral-content-color-hover); + --system-spectrum-button-secondary-outline-content-color-down: var(--spectrum-neutral-content-color-down); + --system-spectrum-button-secondary-outline-content-color-focus: var(--spectrum-neutral-content-color-key-focus); + --system-spectrum-button-secondary-outline-background-color-disabled: transparent; + --system-spectrum-button-secondary-outline-border-color-disabled: var(--spectrum-disabled-border-color); + --system-spectrum-button-secondary-outline-content-color-disabled: var(--spectrum-disabled-content-color); + --system-spectrum-button-quiet-background-color-default: transparent; + --system-spectrum-button-quiet-background-color-hover: var(--spectrum-gray-200); + --system-spectrum-button-quiet-background-color-down: var(--spectrum-gray-300); + --system-spectrum-button-quiet-background-color-focus: var(--spectrum-gray-200); + --system-spectrum-button-quiet-border-color-default: transparent; + --system-spectrum-button-quiet-border-color-hover: transparent; + --system-spectrum-button-quiet-border-color-down: transparent; + --system-spectrum-button-quiet-border-color-focus: transparent; + --system-spectrum-button-quiet-background-color-disabled: transparent; + --system-spectrum-button-quiet-border-color-disabled: transparent; + --system-spectrum-button-selected-background-color-default: var(--spectrum-neutral-subdued-background-color-default); + --system-spectrum-button-selected-background-color-hover: var(--spectrum-neutral-subdued-background-color-hover); + --system-spectrum-button-selected-background-color-down: var(--spectrum-neutral-subdued-background-color-down); + --system-spectrum-button-selected-background-color-focus: var(--spectrum-neutral-subdued-background-color-key-focus); + --system-spectrum-button-selected-border-color-default: transparent; + --system-spectrum-button-selected-border-color-hover: transparent; + --system-spectrum-button-selected-border-color-down: transparent; + --system-spectrum-button-selected-border-color-focus: transparent; + --system-spectrum-button-selected-content-color-default: var(--spectrum-white); + --system-spectrum-button-selected-content-color-hover: var(--spectrum-white); + --system-spectrum-button-selected-content-color-down: var(--spectrum-white); + --system-spectrum-button-selected-content-color-focus: var(--spectrum-white); + --system-spectrum-button-selected-background-color-disabled: var(--spectrum-disabled-background-color); + --system-spectrum-button-selected-border-color-disabled: transparent; + --system-spectrum-button-selected-emphasized-background-color-default: var(--spectrum-accent-background-color-default); + --system-spectrum-button-selected-emphasized-background-color-hover: var(--spectrum-accent-background-color-hover); + --system-spectrum-button-selected-emphasized-background-color-down: var(--spectrum-accent-background-color-down); + --system-spectrum-button-selected-emphasized-background-color-focus: var(--spectrum-accent-background-color-key-focus); + --system-spectrum-button-staticblack-quiet-border-color-default: transparent; + --system-spectrum-button-staticwhite-quiet-border-color-default: transparent; + --system-spectrum-button-staticblack-quiet-border-color-hover: transparent; + --system-spectrum-button-staticwhite-quiet-border-color-hover: transparent; + --system-spectrum-button-staticblack-quiet-border-color-down: transparent; + --system-spectrum-button-staticwhite-quiet-border-color-down: transparent; + --system-spectrum-button-staticblack-quiet-border-color-focus: transparent; + --system-spectrum-button-staticwhite-quiet-border-color-focus: transparent; + --system-spectrum-button-staticblack-quiet-border-color-disabled: transparent; + --system-spectrum-button-staticwhite-quiet-border-color-disabled: transparent; + --system-spectrum-button-staticwhite-background-color-default: var(--spectrum-transparent-white-800); + --system-spectrum-button-staticwhite-background-color-hover: var(--spectrum-transparent-white-900); + --system-spectrum-button-staticwhite-background-color-down: var(--spectrum-transparent-white-900); + --system-spectrum-button-staticwhite-background-color-focus: var(--spectrum-transparent-white-900); + --system-spectrum-button-staticwhite-border-color-default: transparent; + --system-spectrum-button-staticwhite-border-color-hover: transparent; + --system-spectrum-button-staticwhite-border-color-down: transparent; + --system-spectrum-button-staticwhite-border-color-focus: transparent; + --system-spectrum-button-staticwhite-content-color-default: var(--spectrum-black); + --system-spectrum-button-staticwhite-content-color-hover: var(--spectrum-black); + --system-spectrum-button-staticwhite-content-color-down: var(--spectrum-black); + --system-spectrum-button-staticwhite-content-color-focus: var(--spectrum-black); + --system-spectrum-button-staticwhite-focus-indicator-color: var(--spectrum-static-white-focus-indicator-color); + --system-spectrum-button-staticwhite-background-color-disabled: var(--spectrum-disabled-static-white-background-color); + --system-spectrum-button-staticwhite-border-color-disabled: transparent; + --system-spectrum-button-staticwhite-content-color-disabled: var(--spectrum-disabled-static-white-content-color); + --system-spectrum-button-staticwhite-outline-background-color-default: transparent; + --system-spectrum-button-staticwhite-outline-background-color-hover: var(--spectrum-transparent-white-300); + --system-spectrum-button-staticwhite-outline-background-color-down: var(--spectrum-transparent-white-400); + --system-spectrum-button-staticwhite-outline-background-color-focus: var(--spectrum-transparent-white-300); + --system-spectrum-button-staticwhite-outline-border-color-default: var(--spectrum-transparent-white-800); + --system-spectrum-button-staticwhite-outline-border-color-hover: var(--spectrum-transparent-white-900); + --system-spectrum-button-staticwhite-outline-border-color-down: var(--spectrum-transparent-white-900); + --system-spectrum-button-staticwhite-outline-border-color-focus: var(--spectrum-transparent-white-900); + --system-spectrum-button-staticwhite-outline-content-color-default: var(--spectrum-white); + --system-spectrum-button-staticwhite-outline-content-color-hover: var(--spectrum-white); + --system-spectrum-button-staticwhite-outline-content-color-down: var(--spectrum-white); + --system-spectrum-button-staticwhite-outline-content-color-focus: var(--spectrum-white); + --system-spectrum-button-staticwhite-outline-focus-indicator-color: var(--spectrum-static-white-focus-indicator-color); + --system-spectrum-button-staticwhite-outline-background-color-disabled: transparent; + --system-spectrum-button-staticwhite-outline-border-color-disabled: var(--spectrum-disabled-static-white-border-color); + --system-spectrum-button-staticwhite-outline-content-color-disabled: var(--spectrum-disabled-static-white-content-color); + --system-spectrum-button-staticwhite-selected-background-color-default: var(--spectrum-transparent-white-800); + --system-spectrum-button-staticwhite-selected-background-color-hover: var(--spectrum-transparent-white-900); + --system-spectrum-button-staticwhite-selected-background-color-down: var(--spectrum-transparent-white-900); + --system-spectrum-button-staticwhite-selected-background-color-focus: var(--spectrum-transparent-white-900); + --system-spectrum-button-staticwhite-selected-content-color-default: var(--spectrum-black); + --system-spectrum-button-staticwhite-selected-content-color-hover: var(--spectrum-black); + --system-spectrum-button-staticwhite-selected-content-color-down: var(--spectrum-black); + --system-spectrum-button-staticwhite-selected-content-color-focus: var(--spectrum-black); + --system-spectrum-button-staticwhite-selected-background-color-disabled: var(--spectrum-disabled-static-white-background-color); + --system-spectrum-button-staticwhite-selected-border-color-disabled: transparent; + --system-spectrum-button-staticwhite-secondary-background-color-default: var(--spectrum-transparent-white-200); + --system-spectrum-button-staticwhite-secondary-background-color-hover: var(--spectrum-transparent-white-300); + --system-spectrum-button-staticwhite-secondary-background-color-down: var(--spectrum-transparent-white-400); + --system-spectrum-button-staticwhite-secondary-background-color-focus: var(--spectrum-transparent-white-300); + --system-spectrum-button-staticwhite-secondary-border-color-default: transparent; + --system-spectrum-button-staticwhite-secondary-border-color-hover: transparent; + --system-spectrum-button-staticwhite-secondary-border-color-down: transparent; + --system-spectrum-button-staticwhite-secondary-border-color-focus: transparent; + --system-spectrum-button-staticwhite-secondary-content-color-default: var(--spectrum-white); + --system-spectrum-button-staticwhite-secondary-content-color-hover: var(--spectrum-white); + --system-spectrum-button-staticwhite-secondary-content-color-down: var(--spectrum-white); + --system-spectrum-button-staticwhite-secondary-content-color-focus: var(--spectrum-white); + --system-spectrum-button-staticwhite-secondary-focus-indicator-color: var(--spectrum-static-white-focus-indicator-color); + --system-spectrum-button-staticwhite-secondary-background-color-disabled: var(--spectrum-disabled-static-white-background-color); + --system-spectrum-button-staticwhite-secondary-border-color-disabled: transparent; + --system-spectrum-button-staticwhite-secondary-content-color-disabled: var(--spectrum-disabled-static-white-content-color); + --system-spectrum-button-staticwhite-secondary-outline-background-color-default: transparent; + --system-spectrum-button-staticwhite-secondary-outline-background-color-hover: var(--spectrum-transparent-white-300); + --system-spectrum-button-staticwhite-secondary-outline-background-color-down: var(--spectrum-transparent-white-400); + --system-spectrum-button-staticwhite-secondary-outline-background-color-focus: var(--spectrum-transparent-white-300); + --system-spectrum-button-staticwhite-secondary-outline-border-color-default: var(--spectrum-transparent-white-300); + --system-spectrum-button-staticwhite-secondary-outline-border-color-hover: var(--spectrum-transparent-white-400); + --system-spectrum-button-staticwhite-secondary-outline-border-color-down: var(--spectrum-transparent-white-500); + --system-spectrum-button-staticwhite-secondary-outline-border-color-focus: var(--spectrum-transparent-white-400); + --system-spectrum-button-staticwhite-secondary-outline-content-color-default: var(--spectrum-white); + --system-spectrum-button-staticwhite-secondary-outline-content-color-hover: var(--spectrum-white); + --system-spectrum-button-staticwhite-secondary-outline-content-color-down: var(--spectrum-white); + --system-spectrum-button-staticwhite-secondary-outline-content-color-focus: var(--spectrum-white); + --system-spectrum-button-staticwhite-secondary-outline-focus-indicator-color: var(--spectrum-static-white-focus-indicator-color); + --system-spectrum-button-staticwhite-secondary-outline-background-color-disabled: transparent; + --system-spectrum-button-staticwhite-secondary-outline-border-color-disabled: var(--spectrum-disabled-static-white-border-color); + --system-spectrum-button-staticwhite-secondary-outline-content-color-disabled: var(--spectrum-disabled-static-white-content-color); + --system-spectrum-button-staticblack-background-color-default: var(--spectrum-transparent-black-800); + --system-spectrum-button-staticblack-background-color-hover: var(--spectrum-transparent-black-900); + --system-spectrum-button-staticblack-background-color-down: var(--spectrum-transparent-black-900); + --system-spectrum-button-staticblack-background-color-focus: var(--spectrum-transparent-black-900); + --system-spectrum-button-staticblack-border-color-default: transparent; + --system-spectrum-button-staticblack-border-color-hover: transparent; + --system-spectrum-button-staticblack-border-color-down: transparent; + --system-spectrum-button-staticblack-border-color-focus: transparent; + --system-spectrum-button-staticblack-content-color-default: var(--spectrum-white); + --system-spectrum-button-staticblack-content-color-hover: var(--spectrum-white); + --system-spectrum-button-staticblack-content-color-down: var(--spectrum-white); + --system-spectrum-button-staticblack-content-color-focus: var(--spectrum-white); + --system-spectrum-button-staticblack-focus-indicator-color: var(--spectrum-static-black-focus-indicator-color); + --system-spectrum-button-staticblack-background-color-disabled: var(--spectrum-disabled-static-black-background-color); + --system-spectrum-button-staticblack-border-color-disabled: transparent; + --system-spectrum-button-staticblack-content-color-disabled: var(--spectrum-disabled-static-black-content-color); + --system-spectrum-button-staticblack-outline-background-color-default: transparent; + --system-spectrum-button-staticblack-outline-background-color-hover: var(--spectrum-transparent-black-300); + --system-spectrum-button-staticblack-outline-background-color-down: var(--spectrum-transparent-black-400); + --system-spectrum-button-staticblack-outline-background-color-focus: var(--spectrum-transparent-black-300); + --system-spectrum-button-staticblack-outline-border-color-default: var(--spectrum-transparent-black-400); + --system-spectrum-button-staticblack-outline-border-color-hover: var(--spectrum-transparent-black-500); + --system-spectrum-button-staticblack-outline-border-color-down: var(--spectrum-transparent-black-600); + --system-spectrum-button-staticblack-outline-border-color-focus: var(--spectrum-transparent-black-500); + --system-spectrum-button-staticblack-outline-content-color-default: var(--spectrum-black); + --system-spectrum-button-staticblack-outline-content-color-hover: var(--spectrum-black); + --system-spectrum-button-staticblack-outline-content-color-down: var(--spectrum-black); + --system-spectrum-button-staticblack-outline-content-color-focus: var(--spectrum-black); + --system-spectrum-button-staticblack-outline-focus-indicator-color: var(--spectrum-static-black-focus-indicator-color); + --system-spectrum-button-staticblack-outline-background-color-disabled: transparent; + --system-spectrum-button-staticblack-outline-border-color-disabled: var(--spectrum-disabled-static-black-border-color); + --system-spectrum-button-staticblack-outline-content-color-disabled: var(--spectrum-disabled-static-black-content-color); + --system-spectrum-button-staticblack-secondary-background-color-default: var(--spectrum-transparent-black-200); + --system-spectrum-button-staticblack-secondary-background-color-hover: var(--spectrum-transparent-black-300); + --system-spectrum-button-staticblack-secondary-background-color-down: var(--spectrum-transparent-black-400); + --system-spectrum-button-staticblack-secondary-background-color-focus: var(--spectrum-transparent-black-300); + --system-spectrum-button-staticblack-secondary-border-color-default: transparent; + --system-spectrum-button-staticblack-secondary-border-color-hover: transparent; + --system-spectrum-button-staticblack-secondary-border-color-down: transparent; + --system-spectrum-button-staticblack-secondary-border-color-focus: transparent; + --system-spectrum-button-staticblack-secondary-content-color-default: var(--spectrum-black); + --system-spectrum-button-staticblack-secondary-content-color-hover: var(--spectrum-black); + --system-spectrum-button-staticblack-secondary-content-color-down: var(--spectrum-black); + --system-spectrum-button-staticblack-secondary-content-color-focus: var(--spectrum-black); + --system-spectrum-button-staticblack-secondary-focus-indicator-color: var(--spectrum-static-black-focus-indicator-color); + --system-spectrum-button-staticblack-secondary-background-color-disabled: var(--spectrum-disabled-static-black-background-color); + --system-spectrum-button-staticblack-secondary-border-color-disabled: transparent; + --system-spectrum-button-staticblack-secondary-content-color-disabled: var(--spectrum-disabled-static-black-content-color); + --system-spectrum-button-staticblack-secondary-outline-background-color-default: transparent; + --system-spectrum-button-staticblack-secondary-outline-background-color-hover: var(--spectrum-transparent-black-300); + --system-spectrum-button-staticblack-secondary-outline-background-color-down: var(--spectrum-transparent-black-400); + --system-spectrum-button-staticblack-secondary-outline-background-color-focus: var(--spectrum-transparent-black-300); + --system-spectrum-button-staticblack-secondary-outline-border-color-default: var(--spectrum-transparent-black-300); + --system-spectrum-button-staticblack-secondary-outline-border-color-hover: var(--spectrum-transparent-black-400); + --system-spectrum-button-staticblack-secondary-outline-border-color-down: var(--spectrum-transparent-black-500); + --system-spectrum-button-staticblack-secondary-outline-border-color-focus: var(--spectrum-transparent-black-400); + --system-spectrum-button-staticblack-secondary-outline-content-color-default: var(--spectrum-black); + --system-spectrum-button-staticblack-secondary-outline-content-color-hover: var(--spectrum-black); + --system-spectrum-button-staticblack-secondary-outline-content-color-down: var(--spectrum-black); + --system-spectrum-button-staticblack-secondary-outline-content-color-focus: var(--spectrum-black); + --system-spectrum-button-staticblack-secondary-outline-focus-indicator-color: var(--spectrum-static-black-focus-indicator-color); + --system-spectrum-button-staticblack-secondary-outline-background-color-disabled: transparent; + --system-spectrum-button-staticblack-secondary-outline-border-color-disabled: var(--spectrum-disabled-static-black-border-color); + --system-spectrum-button-staticblack-secondary-outline-content-color-disabled: var(--spectrum-disabled-static-black-content-color); +} + +/* ../../node_modules/@spectrum-css/link/dist/index-base.css */ +.spectrum-Link { + --spectrum-link-animation-duration: var(--spectrum-animation-duration-100); + --spectrum-link-text-color-primary-default: var(--spectrum-accent-content-color-default); + --spectrum-link-text-color-primary-hover: var(--spectrum-accent-content-color-hover); + --spectrum-link-text-color-primary-active: var(--spectrum-accent-content-color-down); + --spectrum-link-text-color-primary-focus: var(--spectrum-accent-content-color-key-focus); + --spectrum-link-text-color-secondary-default: var(--spectrum-neutral-content-color-default); + --spectrum-link-text-color-secondary-hover: var(--spectrum-neutral-content-color-hover); + --spectrum-link-text-color-secondary-active: var(--spectrum-neutral-content-color-down); + --spectrum-link-text-color-secondary-focus: var(--spectrum-neutral-content-color-key-focus); + --spectrum-link-text-color-white: var(--spectrum-white); + --spectrum-link-text-color-black: var(--spectrum-black); +} +@media (forced-colors: active) { + .spectrum-Link { + --highcontrast-link-text-color-primary-default: LinkText; + --highcontrast-link-text-color-primary-hover: LinkText; + --highcontrast-link-text-color-primary-active: LinkText; + --highcontrast-link-text-color-primary-focus: LinkText; + --highcontrast-link-text-color-secondary-default: LinkText; + --highcontrast-link-text-color-secondary-hover: LinkText; + --highcontrast-link-text-color-secondary-active: LinkText; + --highcontrast-link-text-color-secondary-focus: LinkText; + --highcontrast-link-text-color-white: LinkText; + --highcontrast-link-text-color-black: LinkText; + } +} +.spectrum-Link { + background-color: initial; + -webkit-text-decoration-skip: objects; + text-decoration-skip: objects; + -webkit-text-decoration: underline; + text-decoration: underline; + transition: color var(--mod-link-animation-duration, var(--spectrum-link-animation-duration)) ease-in-out; + outline: none; + cursor: pointer; + color: var(--highcontrast-link-text-color-primary-default, var(--mod-link-text-color-primary-default, var(--spectrum-link-text-color-primary-default))); +} +.spectrum-Link:active { + color: var(--highcontrast-link-text-color-primary-active, var(--mod-link-text-color-primary-active, var(--spectrum-link-text-color-primary-active))); +} +.spectrum-Link:focus-visible { + color: var(--highcontrast-link-text-color-primary-focus, var(--mod-link-text-color-primary-focus, var(--spectrum-link-text-color-primary-focus))); + -webkit-text-decoration: underline; + text-decoration: underline; + text-decoration-style: double; + text-decoration-color: inherit; + text-decoration-color: var(--highcontrast-link-focus-color, inherit); +} +.spectrum-Link--secondary { + color: var(--highcontrast-link-text-color-secondary-default, var(--mod-link-text-color-secondary-default, var(--spectrum-link-text-color-secondary-default))); +} +.spectrum-Link--secondary:active { + color: var(--highcontrast-link-text-color-secondary-active, var(--mod-link-text-color-secondary-active, var(--spectrum-link-text-color-secondary-active))); +} +.spectrum-Link--secondary:focus { + color: var(--highcontrast-link-text-color-secondary-focus, var(--mod-link-text-color-secondary-focus, var(--spectrum-link-text-color-secondary-focus))); +} +.spectrum-Link--quiet { + -webkit-text-decoration: none; + text-decoration: none; +} +.spectrum-Link--staticWhite, +.spectrum-Link--staticWhite:active, +.spectrum-Link--staticWhite:focus { + color: var(--highcontrast-link-text-color-white, var(--mod-link-text-color-white, var(--spectrum-link-text-color-white))); +} +.spectrum-Link--staticBlack, +.spectrum-Link--staticBlack:active, +.spectrum-Link--staticBlack:focus { + color: var(--highcontrast-link-text-color-black, var(--mod-link-text-color-black, var(--spectrum-link-text-color-black))); +} +@media (hover: hover) { + .spectrum-Link:hover { + color: var(--highcontrast-link-text-color-primary-hover, var(--mod-link-text-color-primary-hover, var(--spectrum-link-text-color-primary-hover))); + } + .spectrum-Link--secondary:hover { + color: var(--highcontrast-link-text-color-secondary-hover, var(--mod-link-text-color-secondary-hover, var(--spectrum-link-text-color-secondary-hover))); + } + .spectrum-Link--quiet:hover { + -webkit-text-decoration: underline; + text-decoration: underline; + } + .spectrum-Link--staticWhite:hover { + color: var(--highcontrast-link-text-color-white, var(--mod-link-text-color-white, var(--spectrum-link-text-color-white))); + } + .spectrum-Link--staticBlack:hover { + color: var(--highcontrast-link-text-color-black, var(--mod-link-text-color-black, var(--spectrum-link-text-color-black))); + } +} + +/* ../../node_modules/@spectrum-css/page/dist/index.css */ +:root { + background-color: var(--spectrum-gray-100); + -webkit-tap-highlight-color: var(--spectrum-transparent-black-100); +} + +/* ../../node_modules/@spectrum-css/tokens/dist/index.css */ +.spectrum--dark { + --spectrum-overlay-opacity: 0.5; + --spectrum-drop-shadow-color-rgb: + 0, + 0, + 0; + --spectrum-drop-shadow-color-opacity: 0.5; + --spectrum-drop-shadow-color: rgba(var(--spectrum-drop-shadow-color-rgb), var(--spectrum-drop-shadow-color-opacity)); + --spectrum-background-base-color: var(--spectrum-gray-50); + --spectrum-background-layer-1-color: var(--spectrum-gray-75); + --spectrum-background-layer-2-color: var(--spectrum-gray-100); + --spectrum-neutral-background-color-default: var(--spectrum-gray-400); + --spectrum-neutral-background-color-hover: var(--spectrum-gray-300); + --spectrum-neutral-background-color-down: var(--spectrum-gray-200); + --spectrum-neutral-background-color-key-focus: var(--spectrum-gray-300); + --spectrum-neutral-subdued-background-color-default: var(--spectrum-gray-400); + --spectrum-neutral-subdued-background-color-hover: var(--spectrum-gray-300); + --spectrum-neutral-subdued-background-color-down: var(--spectrum-gray-200); + --spectrum-neutral-subdued-background-color-key-focus: var(--spectrum-gray-300); + --spectrum-accent-background-color-default: var(--spectrum-accent-color-500); + --spectrum-accent-background-color-hover: var(--spectrum-accent-color-400); + --spectrum-accent-background-color-down: var(--spectrum-accent-color-300); + --spectrum-accent-background-color-key-focus: var(--spectrum-accent-color-400); + --spectrum-informative-background-color-default: var(--spectrum-informative-color-500); + --spectrum-informative-background-color-hover: var(--spectrum-informative-color-400); + --spectrum-informative-background-color-down: var(--spectrum-informative-color-300); + --spectrum-informative-background-color-key-focus: var(--spectrum-informative-color-400); + --spectrum-negative-background-color-default: var(--spectrum-negative-color-500); + --spectrum-negative-background-color-hover: var(--spectrum-negative-color-400); + --spectrum-negative-background-color-down: var(--spectrum-negative-color-300); + --spectrum-negative-background-color-key-focus: var(--spectrum-negative-color-400); + --spectrum-positive-background-color-default: var(--spectrum-positive-color-500); + --spectrum-positive-background-color-hover: var(--spectrum-positive-color-400); + --spectrum-positive-background-color-down: var(--spectrum-positive-color-300); + --spectrum-positive-background-color-key-focus: var(--spectrum-positive-color-400); + --spectrum-notice-background-color-default: var(--spectrum-notice-color-800); + --spectrum-gray-background-color-default: var(--spectrum-gray-700); + --spectrum-red-background-color-default: var(--spectrum-red-700); + --spectrum-orange-background-color-default: var(--spectrum-orange-800); + --spectrum-yellow-background-color-default: var(--spectrum-yellow-1000); + --spectrum-chartreuse-background-color-default: var(--spectrum-chartreuse-900); + --spectrum-celery-background-color-default: var(--spectrum-celery-800); + --spectrum-green-background-color-default: var(--spectrum-green-700); + --spectrum-seafoam-background-color-default: var(--spectrum-seafoam-700); + --spectrum-cyan-background-color-default: var(--spectrum-cyan-700); + --spectrum-blue-background-color-default: var(--spectrum-blue-700); + --spectrum-indigo-background-color-default: var(--spectrum-indigo-700); + --spectrum-purple-background-color-default: var(--spectrum-purple-700); + --spectrum-fuchsia-background-color-default: var(--spectrum-fuchsia-700); + --spectrum-magenta-background-color-default: var(--spectrum-magenta-700); + --spectrum-neutral-visual-color: var(--spectrum-gray-600); + --spectrum-accent-visual-color: var(--spectrum-accent-color-900); + --spectrum-informative-visual-color: var(--spectrum-informative-color-900); + --spectrum-negative-visual-color: var(--spectrum-negative-color-700); + --spectrum-notice-visual-color: var(--spectrum-notice-color-900); + --spectrum-positive-visual-color: var(--spectrum-positive-color-800); + --spectrum-gray-visual-color: var(--spectrum-gray-600); + --spectrum-red-visual-color: var(--spectrum-red-700); + --spectrum-orange-visual-color: var(--spectrum-orange-900); + --spectrum-yellow-visual-color: var(--spectrum-yellow-1100); + --spectrum-chartreuse-visual-color: var(--spectrum-chartreuse-900); + --spectrum-celery-visual-color: var(--spectrum-celery-800); + --spectrum-green-visual-color: var(--spectrum-green-800); + --spectrum-seafoam-visual-color: var(--spectrum-seafoam-800); + --spectrum-cyan-visual-color: var(--spectrum-cyan-900); + --spectrum-blue-visual-color: var(--spectrum-blue-900); + --spectrum-indigo-visual-color: var(--spectrum-indigo-900); + --spectrum-purple-visual-color: var(--spectrum-purple-900); + --spectrum-fuchsia-visual-color: var(--spectrum-fuchsia-900); + --spectrum-magenta-visual-color: var(--spectrum-magenta-900); + --spectrum-opacity-checkerboard-square-dark: var(--spectrum-gray-800); + --spectrum-gray-50-rgb: + 29, + 29, + 29; + --spectrum-gray-50: rgba(var(--spectrum-gray-50-rgb)); + --spectrum-gray-75-rgb: + 38, + 38, + 38; + --spectrum-gray-75: rgba(var(--spectrum-gray-75-rgb)); + --spectrum-gray-100-rgb: + 50, + 50, + 50; + --spectrum-gray-100: rgba(var(--spectrum-gray-100-rgb)); + --spectrum-gray-200-rgb: + 63, + 63, + 63; + --spectrum-gray-200: rgba(var(--spectrum-gray-200-rgb)); + --spectrum-gray-300-rgb: + 84, + 84, + 84; + --spectrum-gray-300: rgba(var(--spectrum-gray-300-rgb)); + --spectrum-gray-400-rgb: + 112, + 112, + 112; + --spectrum-gray-400: rgba(var(--spectrum-gray-400-rgb)); + --spectrum-gray-500-rgb: + 144, + 144, + 144; + --spectrum-gray-500: rgba(var(--spectrum-gray-500-rgb)); + --spectrum-gray-600-rgb: + 178, + 178, + 178; + --spectrum-gray-600: rgba(var(--spectrum-gray-600-rgb)); + --spectrum-gray-700-rgb: + 209, + 209, + 209; + --spectrum-gray-700: rgba(var(--spectrum-gray-700-rgb)); + --spectrum-gray-800-rgb: + 235, + 235, + 235; + --spectrum-gray-800: rgba(var(--spectrum-gray-800-rgb)); + --spectrum-gray-900-rgb: + 255, + 255, + 255; + --spectrum-gray-900: rgba(var(--spectrum-gray-900-rgb)); + --spectrum-blue-100-rgb: + 0, + 56, + 119; + --spectrum-blue-100: rgba(var(--spectrum-blue-100-rgb)); + --spectrum-blue-200-rgb: + 0, + 65, + 138; + --spectrum-blue-200: rgba(var(--spectrum-blue-200-rgb)); + --spectrum-blue-300-rgb: + 0, + 77, + 163; + --spectrum-blue-300: rgba(var(--spectrum-blue-300-rgb)); + --spectrum-blue-400-rgb: + 0, + 89, + 194; + --spectrum-blue-400: rgba(var(--spectrum-blue-400-rgb)); + --spectrum-blue-500-rgb: + 3, + 103, + 224; + --spectrum-blue-500: rgba(var(--spectrum-blue-500-rgb)); + --spectrum-blue-600-rgb: + 19, + 121, + 243; + --spectrum-blue-600: rgba(var(--spectrum-blue-600-rgb)); + --spectrum-blue-700-rgb: + 52, + 143, + 244; + --spectrum-blue-700: rgba(var(--spectrum-blue-700-rgb)); + --spectrum-blue-800-rgb: + 84, + 163, + 246; + --spectrum-blue-800: rgba(var(--spectrum-blue-800-rgb)); + --spectrum-blue-900-rgb: + 114, + 183, + 249; + --spectrum-blue-900: rgba(var(--spectrum-blue-900-rgb)); + --spectrum-blue-1000-rgb: + 143, + 202, + 252; + --spectrum-blue-1000: rgba(var(--spectrum-blue-1000-rgb)); + --spectrum-blue-1100-rgb: + 174, + 219, + 254; + --spectrum-blue-1100: rgba(var(--spectrum-blue-1100-rgb)); + --spectrum-blue-1200-rgb: + 204, + 233, + 255; + --spectrum-blue-1200: rgba(var(--spectrum-blue-1200-rgb)); + --spectrum-blue-1300-rgb: + 232, + 246, + 255; + --spectrum-blue-1300: rgba(var(--spectrum-blue-1300-rgb)); + --spectrum-blue-1400-rgb: + 255, + 255, + 255; + --spectrum-blue-1400: rgba(var(--spectrum-blue-1400-rgb)); + --spectrum-red-100-rgb: + 123, + 0, + 0; + --spectrum-red-100: rgba(var(--spectrum-red-100-rgb)); + --spectrum-red-200-rgb: + 141, + 0, + 0; + --spectrum-red-200: rgba(var(--spectrum-red-200-rgb)); + --spectrum-red-300-rgb: + 165, + 0, + 0; + --spectrum-red-300: rgba(var(--spectrum-red-300-rgb)); + --spectrum-red-400-rgb: + 190, + 4, + 3; + --spectrum-red-400: rgba(var(--spectrum-red-400-rgb)); + --spectrum-red-500-rgb: + 215, + 25, + 19; + --spectrum-red-500: rgba(var(--spectrum-red-500-rgb)); + --spectrum-red-600-rgb: + 234, + 56, + 41; + --spectrum-red-600: rgba(var(--spectrum-red-600-rgb)); + --spectrum-red-700-rgb: + 246, + 88, + 67; + --spectrum-red-700: rgba(var(--spectrum-red-700-rgb)); + --spectrum-red-800-rgb: + 255, + 117, + 94; + --spectrum-red-800: rgba(var(--spectrum-red-800-rgb)); + --spectrum-red-900-rgb: + 255, + 149, + 129; + --spectrum-red-900: rgba(var(--spectrum-red-900-rgb)); + --spectrum-red-1000-rgb: + 255, + 176, + 161; + --spectrum-red-1000: rgba(var(--spectrum-red-1000-rgb)); + --spectrum-red-1100-rgb: + 255, + 201, + 189; + --spectrum-red-1100: rgba(var(--spectrum-red-1100-rgb)); + --spectrum-red-1200-rgb: + 255, + 222, + 216; + --spectrum-red-1200: rgba(var(--spectrum-red-1200-rgb)); + --spectrum-red-1300-rgb: + 255, + 241, + 238; + --spectrum-red-1300: rgba(var(--spectrum-red-1300-rgb)); + --spectrum-red-1400-rgb: + 255, + 255, + 255; + --spectrum-red-1400: rgba(var(--spectrum-red-1400-rgb)); + --spectrum-orange-100-rgb: + 102, + 37, + 0; + --spectrum-orange-100: rgba(var(--spectrum-orange-100-rgb)); + --spectrum-orange-200-rgb: + 117, + 45, + 0; + --spectrum-orange-200: rgba(var(--spectrum-orange-200-rgb)); + --spectrum-orange-300-rgb: + 137, + 55, + 0; + --spectrum-orange-300: rgba(var(--spectrum-orange-300-rgb)); + --spectrum-orange-400-rgb: + 158, + 66, + 0; + --spectrum-orange-400: rgba(var(--spectrum-orange-400-rgb)); + --spectrum-orange-500-rgb: + 180, + 78, + 0; + --spectrum-orange-500: rgba(var(--spectrum-orange-500-rgb)); + --spectrum-orange-600-rgb: + 202, + 93, + 0; + --spectrum-orange-600: rgba(var(--spectrum-orange-600-rgb)); + --spectrum-orange-700-rgb: + 225, + 109, + 0; + --spectrum-orange-700: rgba(var(--spectrum-orange-700-rgb)); + --spectrum-orange-800-rgb: + 244, + 129, + 12; + --spectrum-orange-800: rgba(var(--spectrum-orange-800-rgb)); + --spectrum-orange-900-rgb: + 254, + 154, + 46; + --spectrum-orange-900: rgba(var(--spectrum-orange-900-rgb)); + --spectrum-orange-1000-rgb: + 255, + 181, + 88; + --spectrum-orange-1000: rgba(var(--spectrum-orange-1000-rgb)); + --spectrum-orange-1100-rgb: + 253, + 206, + 136; + --spectrum-orange-1100: rgba(var(--spectrum-orange-1100-rgb)); + --spectrum-orange-1200-rgb: + 255, + 225, + 179; + --spectrum-orange-1200: rgba(var(--spectrum-orange-1200-rgb)); + --spectrum-orange-1300-rgb: + 255, + 242, + 221; + --spectrum-orange-1300: rgba(var(--spectrum-orange-1300-rgb)); + --spectrum-orange-1400-rgb: + 255, + 253, + 249; + --spectrum-orange-1400: rgba(var(--spectrum-orange-1400-rgb)); + --spectrum-yellow-100-rgb: + 76, + 54, + 0; + --spectrum-yellow-100: rgba(var(--spectrum-yellow-100-rgb)); + --spectrum-yellow-200-rgb: + 88, + 64, + 0; + --spectrum-yellow-200: rgba(var(--spectrum-yellow-200-rgb)); + --spectrum-yellow-300-rgb: + 103, + 76, + 0; + --spectrum-yellow-300: rgba(var(--spectrum-yellow-300-rgb)); + --spectrum-yellow-400-rgb: + 119, + 89, + 0; + --spectrum-yellow-400: rgba(var(--spectrum-yellow-400-rgb)); + --spectrum-yellow-500-rgb: + 136, + 104, + 0; + --spectrum-yellow-500: rgba(var(--spectrum-yellow-500-rgb)); + --spectrum-yellow-600-rgb: + 155, + 120, + 0; + --spectrum-yellow-600: rgba(var(--spectrum-yellow-600-rgb)); + --spectrum-yellow-700-rgb: + 174, + 137, + 0; + --spectrum-yellow-700: rgba(var(--spectrum-yellow-700-rgb)); + --spectrum-yellow-800-rgb: + 192, + 156, + 0; + --spectrum-yellow-800: rgba(var(--spectrum-yellow-800-rgb)); + --spectrum-yellow-900-rgb: + 211, + 174, + 0; + --spectrum-yellow-900: rgba(var(--spectrum-yellow-900-rgb)); + --spectrum-yellow-1000-rgb: + 228, + 194, + 0; + --spectrum-yellow-1000: rgba(var(--spectrum-yellow-1000-rgb)); + --spectrum-yellow-1100-rgb: + 244, + 213, + 0; + --spectrum-yellow-1100: rgba(var(--spectrum-yellow-1100-rgb)); + --spectrum-yellow-1200-rgb: + 249, + 232, + 92; + --spectrum-yellow-1200: rgba(var(--spectrum-yellow-1200-rgb)); + --spectrum-yellow-1300-rgb: + 252, + 246, + 187; + --spectrum-yellow-1300: rgba(var(--spectrum-yellow-1300-rgb)); + --spectrum-yellow-1400-rgb: + 255, + 255, + 255; + --spectrum-yellow-1400: rgba(var(--spectrum-yellow-1400-rgb)); + --spectrum-chartreuse-100-rgb: + 48, + 64, + 0; + --spectrum-chartreuse-100: rgba(var(--spectrum-chartreuse-100-rgb)); + --spectrum-chartreuse-200-rgb: + 55, + 74, + 0; + --spectrum-chartreuse-200: rgba(var(--spectrum-chartreuse-200-rgb)); + --spectrum-chartreuse-300-rgb: + 65, + 87, + 0; + --spectrum-chartreuse-300: rgba(var(--spectrum-chartreuse-300-rgb)); + --spectrum-chartreuse-400-rgb: + 76, + 102, + 0; + --spectrum-chartreuse-400: rgba(var(--spectrum-chartreuse-400-rgb)); + --spectrum-chartreuse-500-rgb: + 89, + 118, + 0; + --spectrum-chartreuse-500: rgba(var(--spectrum-chartreuse-500-rgb)); + --spectrum-chartreuse-600-rgb: + 102, + 136, + 0; + --spectrum-chartreuse-600: rgba(var(--spectrum-chartreuse-600-rgb)); + --spectrum-chartreuse-700-rgb: + 117, + 154, + 0; + --spectrum-chartreuse-700: rgba(var(--spectrum-chartreuse-700-rgb)); + --spectrum-chartreuse-800-rgb: + 132, + 173, + 1; + --spectrum-chartreuse-800: rgba(var(--spectrum-chartreuse-800-rgb)); + --spectrum-chartreuse-900-rgb: + 148, + 192, + 8; + --spectrum-chartreuse-900: rgba(var(--spectrum-chartreuse-900-rgb)); + --spectrum-chartreuse-1000-rgb: + 166, + 211, + 18; + --spectrum-chartreuse-1000: rgba(var(--spectrum-chartreuse-1000-rgb)); + --spectrum-chartreuse-1100-rgb: + 184, + 229, + 37; + --spectrum-chartreuse-1100: rgba(var(--spectrum-chartreuse-1100-rgb)); + --spectrum-chartreuse-1200-rgb: + 205, + 245, + 71; + --spectrum-chartreuse-1200: rgba(var(--spectrum-chartreuse-1200-rgb)); + --spectrum-chartreuse-1300-rgb: + 231, + 254, + 154; + --spectrum-chartreuse-1300: rgba(var(--spectrum-chartreuse-1300-rgb)); + --spectrum-chartreuse-1400-rgb: + 255, + 255, + 255; + --spectrum-chartreuse-1400: rgba(var(--spectrum-chartreuse-1400-rgb)); + --spectrum-celery-100-rgb: + 0, + 69, + 10; + --spectrum-celery-100: rgba(var(--spectrum-celery-100-rgb)); + --spectrum-celery-200-rgb: + 0, + 80, + 12; + --spectrum-celery-200: rgba(var(--spectrum-celery-200-rgb)); + --spectrum-celery-300-rgb: + 0, + 94, + 14; + --spectrum-celery-300: rgba(var(--spectrum-celery-300-rgb)); + --spectrum-celery-400-rgb: + 0, + 109, + 15; + --spectrum-celery-400: rgba(var(--spectrum-celery-400-rgb)); + --spectrum-celery-500-rgb: + 0, + 127, + 15; + --spectrum-celery-500: rgba(var(--spectrum-celery-500-rgb)); + --spectrum-celery-600-rgb: + 0, + 145, + 18; + --spectrum-celery-600: rgba(var(--spectrum-celery-600-rgb)); + --spectrum-celery-700-rgb: + 4, + 165, + 30; + --spectrum-celery-700: rgba(var(--spectrum-celery-700-rgb)); + --spectrum-celery-800-rgb: + 34, + 184, + 51; + --spectrum-celery-800: rgba(var(--spectrum-celery-800-rgb)); + --spectrum-celery-900-rgb: + 68, + 202, + 73; + --spectrum-celery-900: rgba(var(--spectrum-celery-900-rgb)); + --spectrum-celery-1000-rgb: + 105, + 220, + 99; + --spectrum-celery-1000: rgba(var(--spectrum-celery-1000-rgb)); + --spectrum-celery-1100-rgb: + 142, + 235, + 127; + --spectrum-celery-1100: rgba(var(--spectrum-celery-1100-rgb)); + --spectrum-celery-1200-rgb: + 180, + 247, + 162; + --spectrum-celery-1200: rgba(var(--spectrum-celery-1200-rgb)); + --spectrum-celery-1300-rgb: + 221, + 253, + 211; + --spectrum-celery-1300: rgba(var(--spectrum-celery-1300-rgb)); + --spectrum-celery-1400-rgb: + 255, + 255, + 255; + --spectrum-celery-1400: rgba(var(--spectrum-celery-1400-rgb)); + --spectrum-green-100-rgb: + 4, + 67, + 41; + --spectrum-green-100: rgba(var(--spectrum-green-100-rgb)); + --spectrum-green-200-rgb: + 0, + 78, + 47; + --spectrum-green-200: rgba(var(--spectrum-green-200-rgb)); + --spectrum-green-300-rgb: + 0, + 92, + 56; + --spectrum-green-300: rgba(var(--spectrum-green-300-rgb)); + --spectrum-green-400-rgb: + 0, + 108, + 67; + --spectrum-green-400: rgba(var(--spectrum-green-400-rgb)); + --spectrum-green-500-rgb: + 0, + 125, + 78; + --spectrum-green-500: rgba(var(--spectrum-green-500-rgb)); + --spectrum-green-600-rgb: + 0, + 143, + 93; + --spectrum-green-600: rgba(var(--spectrum-green-600-rgb)); + --spectrum-green-700-rgb: + 18, + 162, + 108; + --spectrum-green-700: rgba(var(--spectrum-green-700-rgb)); + --spectrum-green-800-rgb: + 43, + 180, + 125; + --spectrum-green-800: rgba(var(--spectrum-green-800-rgb)); + --spectrum-green-900-rgb: + 67, + 199, + 143; + --spectrum-green-900: rgba(var(--spectrum-green-900-rgb)); + --spectrum-green-1000-rgb: + 94, + 217, + 162; + --spectrum-green-1000: rgba(var(--spectrum-green-1000-rgb)); + --spectrum-green-1100-rgb: + 129, + 233, + 184; + --spectrum-green-1100: rgba(var(--spectrum-green-1100-rgb)); + --spectrum-green-1200-rgb: + 177, + 244, + 209; + --spectrum-green-1200: rgba(var(--spectrum-green-1200-rgb)); + --spectrum-green-1300-rgb: + 223, + 250, + 234; + --spectrum-green-1300: rgba(var(--spectrum-green-1300-rgb)); + --spectrum-green-1400-rgb: + 254, + 255, + 252; + --spectrum-green-1400: rgba(var(--spectrum-green-1400-rgb)); + --spectrum-seafoam-100-rgb: + 18, + 65, + 63; + --spectrum-seafoam-100: rgba(var(--spectrum-seafoam-100-rgb)); + --spectrum-seafoam-200-rgb: + 14, + 76, + 73; + --spectrum-seafoam-200: rgba(var(--spectrum-seafoam-200-rgb)); + --spectrum-seafoam-300-rgb: + 4, + 90, + 87; + --spectrum-seafoam-300: rgba(var(--spectrum-seafoam-300-rgb)); + --spectrum-seafoam-400-rgb: + 0, + 105, + 101; + --spectrum-seafoam-400: rgba(var(--spectrum-seafoam-400-rgb)); + --spectrum-seafoam-500-rgb: + 0, + 122, + 117; + --spectrum-seafoam-500: rgba(var(--spectrum-seafoam-500-rgb)); + --spectrum-seafoam-600-rgb: + 0, + 140, + 135; + --spectrum-seafoam-600: rgba(var(--spectrum-seafoam-600-rgb)); + --spectrum-seafoam-700-rgb: + 0, + 158, + 152; + --spectrum-seafoam-700: rgba(var(--spectrum-seafoam-700-rgb)); + --spectrum-seafoam-800-rgb: + 3, + 178, + 171; + --spectrum-seafoam-800: rgba(var(--spectrum-seafoam-800-rgb)); + --spectrum-seafoam-900-rgb: + 54, + 197, + 189; + --spectrum-seafoam-900: rgba(var(--spectrum-seafoam-900-rgb)); + --spectrum-seafoam-1000-rgb: + 93, + 214, + 207; + --spectrum-seafoam-1000: rgba(var(--spectrum-seafoam-1000-rgb)); + --spectrum-seafoam-1100-rgb: + 132, + 230, + 223; + --spectrum-seafoam-1100: rgba(var(--spectrum-seafoam-1100-rgb)); + --spectrum-seafoam-1200-rgb: + 176, + 242, + 236; + --spectrum-seafoam-1200: rgba(var(--spectrum-seafoam-1200-rgb)); + --spectrum-seafoam-1300-rgb: + 223, + 249, + 246; + --spectrum-seafoam-1300: rgba(var(--spectrum-seafoam-1300-rgb)); + --spectrum-seafoam-1400-rgb: + 254, + 255, + 254; + --spectrum-seafoam-1400: rgba(var(--spectrum-seafoam-1400-rgb)); + --spectrum-cyan-100-rgb: + 0, + 61, + 98; + --spectrum-cyan-100: rgba(var(--spectrum-cyan-100-rgb)); + --spectrum-cyan-200-rgb: + 0, + 71, + 111; + --spectrum-cyan-200: rgba(var(--spectrum-cyan-200-rgb)); + --spectrum-cyan-300-rgb: + 0, + 85, + 127; + --spectrum-cyan-300: rgba(var(--spectrum-cyan-300-rgb)); + --spectrum-cyan-400-rgb: + 0, + 100, + 145; + --spectrum-cyan-400: rgba(var(--spectrum-cyan-400-rgb)); + --spectrum-cyan-500-rgb: + 0, + 116, + 162; + --spectrum-cyan-500: rgba(var(--spectrum-cyan-500-rgb)); + --spectrum-cyan-600-rgb: + 0, + 134, + 180; + --spectrum-cyan-600: rgba(var(--spectrum-cyan-600-rgb)); + --spectrum-cyan-700-rgb: + 0, + 153, + 198; + --spectrum-cyan-700: rgba(var(--spectrum-cyan-700-rgb)); + --spectrum-cyan-800-rgb: + 14, + 173, + 215; + --spectrum-cyan-800: rgba(var(--spectrum-cyan-800-rgb)); + --spectrum-cyan-900-rgb: + 44, + 193, + 230; + --spectrum-cyan-900: rgba(var(--spectrum-cyan-900-rgb)); + --spectrum-cyan-1000-rgb: + 84, + 211, + 241; + --spectrum-cyan-1000: rgba(var(--spectrum-cyan-1000-rgb)); + --spectrum-cyan-1100-rgb: + 127, + 228, + 249; + --spectrum-cyan-1100: rgba(var(--spectrum-cyan-1100-rgb)); + --spectrum-cyan-1200-rgb: + 167, + 241, + 255; + --spectrum-cyan-1200: rgba(var(--spectrum-cyan-1200-rgb)); + --spectrum-cyan-1300-rgb: + 215, + 250, + 255; + --spectrum-cyan-1300: rgba(var(--spectrum-cyan-1300-rgb)); + --spectrum-cyan-1400-rgb: + 255, + 255, + 255; + --spectrum-cyan-1400: rgba(var(--spectrum-cyan-1400-rgb)); + --spectrum-indigo-100-rgb: + 40, + 44, + 140; + --spectrum-indigo-100: rgba(var(--spectrum-indigo-100-rgb)); + --spectrum-indigo-200-rgb: + 47, + 52, + 163; + --spectrum-indigo-200: rgba(var(--spectrum-indigo-200-rgb)); + --spectrum-indigo-300-rgb: + 57, + 63, + 187; + --spectrum-indigo-300: rgba(var(--spectrum-indigo-300-rgb)); + --spectrum-indigo-400-rgb: + 70, + 75, + 211; + --spectrum-indigo-400: rgba(var(--spectrum-indigo-400-rgb)); + --spectrum-indigo-500-rgb: + 85, + 91, + 231; + --spectrum-indigo-500: rgba(var(--spectrum-indigo-500-rgb)); + --spectrum-indigo-600-rgb: + 104, + 109, + 244; + --spectrum-indigo-600: rgba(var(--spectrum-indigo-600-rgb)); + --spectrum-indigo-700-rgb: + 124, + 129, + 251; + --spectrum-indigo-700: rgba(var(--spectrum-indigo-700-rgb)); + --spectrum-indigo-800-rgb: + 145, + 149, + 255; + --spectrum-indigo-800: rgba(var(--spectrum-indigo-800-rgb)); + --spectrum-indigo-900-rgb: + 167, + 170, + 255; + --spectrum-indigo-900: rgba(var(--spectrum-indigo-900-rgb)); + --spectrum-indigo-1000-rgb: + 188, + 190, + 255; + --spectrum-indigo-1000: rgba(var(--spectrum-indigo-1000-rgb)); + --spectrum-indigo-1100-rgb: + 208, + 210, + 255; + --spectrum-indigo-1100: rgba(var(--spectrum-indigo-1100-rgb)); + --spectrum-indigo-1200-rgb: + 226, + 228, + 255; + --spectrum-indigo-1200: rgba(var(--spectrum-indigo-1200-rgb)); + --spectrum-indigo-1300-rgb: + 243, + 243, + 254; + --spectrum-indigo-1300: rgba(var(--spectrum-indigo-1300-rgb)); + --spectrum-indigo-1400-rgb: + 255, + 255, + 255; + --spectrum-indigo-1400: rgba(var(--spectrum-indigo-1400-rgb)); + --spectrum-purple-100-rgb: + 76, + 13, + 157; + --spectrum-purple-100: rgba(var(--spectrum-purple-100-rgb)); + --spectrum-purple-200-rgb: + 89, + 17, + 177; + --spectrum-purple-200: rgba(var(--spectrum-purple-200-rgb)); + --spectrum-purple-300-rgb: + 105, + 28, + 200; + --spectrum-purple-300: rgba(var(--spectrum-purple-300-rgb)); + --spectrum-purple-400-rgb: + 122, + 45, + 218; + --spectrum-purple-400: rgba(var(--spectrum-purple-400-rgb)); + --spectrum-purple-500-rgb: + 140, + 65, + 233; + --spectrum-purple-500: rgba(var(--spectrum-purple-500-rgb)); + --spectrum-purple-600-rgb: + 157, + 87, + 243; + --spectrum-purple-600: rgba(var(--spectrum-purple-600-rgb)); + --spectrum-purple-700-rgb: + 172, + 111, + 249; + --spectrum-purple-700: rgba(var(--spectrum-purple-700-rgb)); + --spectrum-purple-800-rgb: + 187, + 135, + 251; + --spectrum-purple-800: rgba(var(--spectrum-purple-800-rgb)); + --spectrum-purple-900-rgb: + 202, + 159, + 252; + --spectrum-purple-900: rgba(var(--spectrum-purple-900-rgb)); + --spectrum-purple-1000-rgb: + 215, + 182, + 254; + --spectrum-purple-1000: rgba(var(--spectrum-purple-1000-rgb)); + --spectrum-purple-1100-rgb: + 228, + 204, + 254; + --spectrum-purple-1100: rgba(var(--spectrum-purple-1100-rgb)); + --spectrum-purple-1200-rgb: + 239, + 223, + 255; + --spectrum-purple-1200: rgba(var(--spectrum-purple-1200-rgb)); + --spectrum-purple-1300-rgb: + 249, + 240, + 255; + --spectrum-purple-1300: rgba(var(--spectrum-purple-1300-rgb)); + --spectrum-purple-1400-rgb: + 255, + 253, + 255; + --spectrum-purple-1400: rgba(var(--spectrum-purple-1400-rgb)); + --spectrum-fuchsia-100-rgb: + 107, + 3, + 106; + --spectrum-fuchsia-100: rgba(var(--spectrum-fuchsia-100-rgb)); + --spectrum-fuchsia-200-rgb: + 123, + 0, + 123; + --spectrum-fuchsia-200: rgba(var(--spectrum-fuchsia-200-rgb)); + --spectrum-fuchsia-300-rgb: + 144, + 0, + 145; + --spectrum-fuchsia-300: rgba(var(--spectrum-fuchsia-300-rgb)); + --spectrum-fuchsia-400-rgb: + 165, + 13, + 166; + --spectrum-fuchsia-400: rgba(var(--spectrum-fuchsia-400-rgb)); + --spectrum-fuchsia-500-rgb: + 185, + 37, + 185; + --spectrum-fuchsia-500: rgba(var(--spectrum-fuchsia-500-rgb)); + --spectrum-fuchsia-600-rgb: + 205, + 57, + 206; + --spectrum-fuchsia-600: rgba(var(--spectrum-fuchsia-600-rgb)); + --spectrum-fuchsia-700-rgb: + 223, + 81, + 224; + --spectrum-fuchsia-700: rgba(var(--spectrum-fuchsia-700-rgb)); + --spectrum-fuchsia-800-rgb: + 235, + 110, + 236; + --spectrum-fuchsia-800: rgba(var(--spectrum-fuchsia-800-rgb)); + --spectrum-fuchsia-900-rgb: + 244, + 140, + 242; + --spectrum-fuchsia-900: rgba(var(--spectrum-fuchsia-900-rgb)); + --spectrum-fuchsia-1000-rgb: + 250, + 168, + 245; + --spectrum-fuchsia-1000: rgba(var(--spectrum-fuchsia-1000-rgb)); + --spectrum-fuchsia-1100-rgb: + 254, + 194, + 248; + --spectrum-fuchsia-1100: rgba(var(--spectrum-fuchsia-1100-rgb)); + --spectrum-fuchsia-1200-rgb: + 255, + 219, + 250; + --spectrum-fuchsia-1200: rgba(var(--spectrum-fuchsia-1200-rgb)); + --spectrum-fuchsia-1300-rgb: + 255, + 239, + 252; + --spectrum-fuchsia-1300: rgba(var(--spectrum-fuchsia-1300-rgb)); + --spectrum-fuchsia-1400-rgb: + 255, + 253, + 255; + --spectrum-fuchsia-1400: rgba(var(--spectrum-fuchsia-1400-rgb)); + --spectrum-magenta-100-rgb: + 118, + 0, + 58; + --spectrum-magenta-100: rgba(var(--spectrum-magenta-100-rgb)); + --spectrum-magenta-200-rgb: + 137, + 0, + 66; + --spectrum-magenta-200: rgba(var(--spectrum-magenta-200-rgb)); + --spectrum-magenta-300-rgb: + 160, + 0, + 77; + --spectrum-magenta-300: rgba(var(--spectrum-magenta-300-rgb)); + --spectrum-magenta-400-rgb: + 182, + 18, + 90; + --spectrum-magenta-400: rgba(var(--spectrum-magenta-400-rgb)); + --spectrum-magenta-500-rgb: + 203, + 38, + 109; + --spectrum-magenta-500: rgba(var(--spectrum-magenta-500-rgb)); + --spectrum-magenta-600-rgb: + 222, + 61, + 130; + --spectrum-magenta-600: rgba(var(--spectrum-magenta-600-rgb)); + --spectrum-magenta-700-rgb: + 237, + 87, + 149; + --spectrum-magenta-700: rgba(var(--spectrum-magenta-700-rgb)); + --spectrum-magenta-800-rgb: + 249, + 114, + 167; + --spectrum-magenta-800: rgba(var(--spectrum-magenta-800-rgb)); + --spectrum-magenta-900-rgb: + 255, + 143, + 185; + --spectrum-magenta-900: rgba(var(--spectrum-magenta-900-rgb)); + --spectrum-magenta-1000-rgb: + 255, + 172, + 202; + --spectrum-magenta-1000: rgba(var(--spectrum-magenta-1000-rgb)); + --spectrum-magenta-1100-rgb: + 255, + 198, + 218; + --spectrum-magenta-1100: rgba(var(--spectrum-magenta-1100-rgb)); + --spectrum-magenta-1200-rgb: + 255, + 221, + 233; + --spectrum-magenta-1200: rgba(var(--spectrum-magenta-1200-rgb)); + --spectrum-magenta-1300-rgb: + 255, + 240, + 245; + --spectrum-magenta-1300: rgba(var(--spectrum-magenta-1300-rgb)); + --spectrum-magenta-1400-rgb: + 255, + 252, + 253; + --spectrum-magenta-1400: rgba(var(--spectrum-magenta-1400-rgb)); + --spectrum-icon-color-blue-primary-default: var(--spectrum-blue-800); + --spectrum-icon-color-green-primary-default: var(--spectrum-green-800); + --spectrum-icon-color-red-primary-default: var(--spectrum-red-700); + --spectrum-icon-color-yellow-primary-default: var(--spectrum-yellow-1000); +} +.spectrum--darkest { + --spectrum-overlay-opacity: 0.6; + --spectrum-drop-shadow-color-rgb: + 0, + 0, + 0; + --spectrum-drop-shadow-color-opacity: 0.8; + --spectrum-drop-shadow-color: rgba(var(--spectrum-drop-shadow-color-rgb), var(--spectrum-drop-shadow-color-opacity)); + --spectrum-background-base-color: var(--spectrum-gray-50); + --spectrum-background-layer-1-color: var(--spectrum-gray-75); + --spectrum-background-layer-2-color: var(--spectrum-gray-100); + --spectrum-neutral-background-color-default: var(--spectrum-gray-400); + --spectrum-neutral-background-color-hover: var(--spectrum-gray-300); + --spectrum-neutral-background-color-down: var(--spectrum-gray-200); + --spectrum-neutral-background-color-key-focus: var(--spectrum-gray-300); + --spectrum-neutral-subdued-background-color-default: var(--spectrum-gray-400); + --spectrum-neutral-subdued-background-color-hover: var(--spectrum-gray-300); + --spectrum-neutral-subdued-background-color-down: var(--spectrum-gray-200); + --spectrum-neutral-subdued-background-color-key-focus: var(--spectrum-gray-300); + --spectrum-accent-background-color-default: var(--spectrum-accent-color-600); + --spectrum-accent-background-color-hover: var(--spectrum-accent-color-500); + --spectrum-accent-background-color-down: var(--spectrum-accent-color-400); + --spectrum-accent-background-color-key-focus: var(--spectrum-accent-color-500); + --spectrum-informative-background-color-default: var(--spectrum-informative-color-600); + --spectrum-informative-background-color-hover: var(--spectrum-informative-color-500); + --spectrum-informative-background-color-down: var(--spectrum-informative-color-400); + --spectrum-informative-background-color-key-focus: var(--spectrum-informative-color-500); + --spectrum-negative-background-color-default: var(--spectrum-negative-color-600); + --spectrum-negative-background-color-hover: var(--spectrum-negative-color-500); + --spectrum-negative-background-color-down: var(--spectrum-negative-color-400); + --spectrum-negative-background-color-key-focus: var(--spectrum-negative-color-500); + --spectrum-positive-background-color-default: var(--spectrum-positive-color-600); + --spectrum-positive-background-color-hover: var(--spectrum-positive-color-500); + --spectrum-positive-background-color-down: var(--spectrum-positive-color-400); + --spectrum-positive-background-color-key-focus: var(--spectrum-positive-color-500); + --spectrum-notice-background-color-default: var(--spectrum-notice-color-800); + --spectrum-gray-background-color-default: var(--spectrum-gray-700); + --spectrum-red-background-color-default: var(--spectrum-red-700); + --spectrum-orange-background-color-default: var(--spectrum-orange-800); + --spectrum-yellow-background-color-default: var(--spectrum-yellow-1000); + --spectrum-chartreuse-background-color-default: var(--spectrum-chartreuse-900); + --spectrum-celery-background-color-default: var(--spectrum-celery-800); + --spectrum-green-background-color-default: var(--spectrum-green-700); + --spectrum-seafoam-background-color-default: var(--spectrum-seafoam-700); + --spectrum-cyan-background-color-default: var(--spectrum-cyan-700); + --spectrum-blue-background-color-default: var(--spectrum-blue-700); + --spectrum-indigo-background-color-default: var(--spectrum-indigo-700); + --spectrum-purple-background-color-default: var(--spectrum-purple-700); + --spectrum-fuchsia-background-color-default: var(--spectrum-fuchsia-700); + --spectrum-magenta-background-color-default: var(--spectrum-magenta-700); + --spectrum-neutral-visual-color: var(--spectrum-gray-600); + --spectrum-accent-visual-color: var(--spectrum-accent-color-900); + --spectrum-informative-visual-color: var(--spectrum-informative-color-900); + --spectrum-negative-visual-color: var(--spectrum-negative-color-700); + --spectrum-notice-visual-color: var(--spectrum-notice-color-900); + --spectrum-positive-visual-color: var(--spectrum-positive-color-800); + --spectrum-gray-visual-color: var(--spectrum-gray-600); + --spectrum-red-visual-color: var(--spectrum-red-700); + --spectrum-orange-visual-color: var(--spectrum-orange-900); + --spectrum-yellow-visual-color: var(--spectrum-yellow-1100); + --spectrum-chartreuse-visual-color: var(--spectrum-chartreuse-900); + --spectrum-celery-visual-color: var(--spectrum-celery-800); + --spectrum-green-visual-color: var(--spectrum-green-800); + --spectrum-seafoam-visual-color: var(--spectrum-seafoam-800); + --spectrum-cyan-visual-color: var(--spectrum-cyan-900); + --spectrum-blue-visual-color: var(--spectrum-blue-900); + --spectrum-indigo-visual-color: var(--spectrum-indigo-900); + --spectrum-purple-visual-color: var(--spectrum-purple-900); + --spectrum-fuchsia-visual-color: var(--spectrum-fuchsia-900); + --spectrum-magenta-visual-color: var(--spectrum-magenta-900); + --spectrum-opacity-checkerboard-square-dark: var(--spectrum-gray-800); + --spectrum-gray-50-rgb: + 0, + 0, + 0; + --spectrum-gray-50: rgba(var(--spectrum-gray-50-rgb)); + --spectrum-gray-75-rgb: + 14, + 14, + 14; + --spectrum-gray-75: rgba(var(--spectrum-gray-75-rgb)); + --spectrum-gray-100-rgb: + 29, + 29, + 29; + --spectrum-gray-100: rgba(var(--spectrum-gray-100-rgb)); + --spectrum-gray-200-rgb: + 48, + 48, + 48; + --spectrum-gray-200: rgba(var(--spectrum-gray-200-rgb)); + --spectrum-gray-300-rgb: + 75, + 75, + 75; + --spectrum-gray-300: rgba(var(--spectrum-gray-300-rgb)); + --spectrum-gray-400-rgb: + 106, + 106, + 106; + --spectrum-gray-400: rgba(var(--spectrum-gray-400-rgb)); + --spectrum-gray-500-rgb: + 141, + 141, + 141; + --spectrum-gray-500: rgba(var(--spectrum-gray-500-rgb)); + --spectrum-gray-600-rgb: + 176, + 176, + 176; + --spectrum-gray-600: rgba(var(--spectrum-gray-600-rgb)); + --spectrum-gray-700-rgb: + 208, + 208, + 208; + --spectrum-gray-700: rgba(var(--spectrum-gray-700-rgb)); + --spectrum-gray-800-rgb: + 235, + 235, + 235; + --spectrum-gray-800: rgba(var(--spectrum-gray-800-rgb)); + --spectrum-gray-900-rgb: + 255, + 255, + 255; + --spectrum-gray-900: rgba(var(--spectrum-gray-900-rgb)); + --spectrum-blue-100-rgb: + 0, + 38, + 81; + --spectrum-blue-100: rgba(var(--spectrum-blue-100-rgb)); + --spectrum-blue-200-rgb: + 0, + 50, + 106; + --spectrum-blue-200: rgba(var(--spectrum-blue-200-rgb)); + --spectrum-blue-300-rgb: + 0, + 64, + 135; + --spectrum-blue-300: rgba(var(--spectrum-blue-300-rgb)); + --spectrum-blue-400-rgb: + 0, + 78, + 166; + --spectrum-blue-400: rgba(var(--spectrum-blue-400-rgb)); + --spectrum-blue-500-rgb: + 0, + 92, + 200; + --spectrum-blue-500: rgba(var(--spectrum-blue-500-rgb)); + --spectrum-blue-600-rgb: + 6, + 108, + 231; + --spectrum-blue-600: rgba(var(--spectrum-blue-600-rgb)); + --spectrum-blue-700-rgb: + 29, + 128, + 245; + --spectrum-blue-700: rgba(var(--spectrum-blue-700-rgb)); + --spectrum-blue-800-rgb: + 64, + 150, + 243; + --spectrum-blue-800: rgba(var(--spectrum-blue-800-rgb)); + --spectrum-blue-900-rgb: + 94, + 170, + 247; + --spectrum-blue-900: rgba(var(--spectrum-blue-900-rgb)); + --spectrum-blue-1000-rgb: + 124, + 189, + 250; + --spectrum-blue-1000: rgba(var(--spectrum-blue-1000-rgb)); + --spectrum-blue-1100-rgb: + 152, + 206, + 253; + --spectrum-blue-1100: rgba(var(--spectrum-blue-1100-rgb)); + --spectrum-blue-1200-rgb: + 179, + 222, + 254; + --spectrum-blue-1200: rgba(var(--spectrum-blue-1200-rgb)); + --spectrum-blue-1300-rgb: + 206, + 234, + 255; + --spectrum-blue-1300: rgba(var(--spectrum-blue-1300-rgb)); + --spectrum-blue-1400-rgb: + 227, + 243, + 255; + --spectrum-blue-1400: rgba(var(--spectrum-blue-1400-rgb)); + --spectrum-red-100-rgb: + 87, + 0, + 0; + --spectrum-red-100: rgba(var(--spectrum-red-100-rgb)); + --spectrum-red-200-rgb: + 110, + 0, + 0; + --spectrum-red-200: rgba(var(--spectrum-red-200-rgb)); + --spectrum-red-300-rgb: + 138, + 0, + 0; + --spectrum-red-300: rgba(var(--spectrum-red-300-rgb)); + --spectrum-red-400-rgb: + 167, + 0, + 0; + --spectrum-red-400: rgba(var(--spectrum-red-400-rgb)); + --spectrum-red-500-rgb: + 196, + 7, + 6; + --spectrum-red-500: rgba(var(--spectrum-red-500-rgb)); + --spectrum-red-600-rgb: + 221, + 33, + 24; + --spectrum-red-600: rgba(var(--spectrum-red-600-rgb)); + --spectrum-red-700-rgb: + 238, + 67, + 49; + --spectrum-red-700: rgba(var(--spectrum-red-700-rgb)); + --spectrum-red-800-rgb: + 249, + 99, + 76; + --spectrum-red-800: rgba(var(--spectrum-red-800-rgb)); + --spectrum-red-900-rgb: + 255, + 129, + 107; + --spectrum-red-900: rgba(var(--spectrum-red-900-rgb)); + --spectrum-red-1000-rgb: + 255, + 158, + 140; + --spectrum-red-1000: rgba(var(--spectrum-red-1000-rgb)); + --spectrum-red-1100-rgb: + 255, + 183, + 169; + --spectrum-red-1100: rgba(var(--spectrum-red-1100-rgb)); + --spectrum-red-1200-rgb: + 255, + 205, + 195; + --spectrum-red-1200: rgba(var(--spectrum-red-1200-rgb)); + --spectrum-red-1300-rgb: + 255, + 223, + 217; + --spectrum-red-1300: rgba(var(--spectrum-red-1300-rgb)); + --spectrum-red-1400-rgb: + 255, + 237, + 234; + --spectrum-red-1400: rgba(var(--spectrum-red-1400-rgb)); + --spectrum-orange-100-rgb: + 72, + 24, + 1; + --spectrum-orange-100: rgba(var(--spectrum-orange-100-rgb)); + --spectrum-orange-200-rgb: + 92, + 32, + 0; + --spectrum-orange-200: rgba(var(--spectrum-orange-200-rgb)); + --spectrum-orange-300-rgb: + 115, + 43, + 0; + --spectrum-orange-300: rgba(var(--spectrum-orange-300-rgb)); + --spectrum-orange-400-rgb: + 138, + 55, + 0; + --spectrum-orange-400: rgba(var(--spectrum-orange-400-rgb)); + --spectrum-orange-500-rgb: + 162, + 68, + 0; + --spectrum-orange-500: rgba(var(--spectrum-orange-500-rgb)); + --spectrum-orange-600-rgb: + 186, + 82, + 0; + --spectrum-orange-600: rgba(var(--spectrum-orange-600-rgb)); + --spectrum-orange-700-rgb: + 210, + 98, + 0; + --spectrum-orange-700: rgba(var(--spectrum-orange-700-rgb)); + --spectrum-orange-800-rgb: + 232, + 116, + 0; + --spectrum-orange-800: rgba(var(--spectrum-orange-800-rgb)); + --spectrum-orange-900-rgb: + 249, + 137, + 23; + --spectrum-orange-900: rgba(var(--spectrum-orange-900-rgb)); + --spectrum-orange-1000-rgb: + 255, + 162, + 59; + --spectrum-orange-1000: rgba(var(--spectrum-orange-1000-rgb)); + --spectrum-orange-1100-rgb: + 255, + 188, + 102; + --spectrum-orange-1100: rgba(var(--spectrum-orange-1100-rgb)); + --spectrum-orange-1200-rgb: + 253, + 210, + 145; + --spectrum-orange-1200: rgba(var(--spectrum-orange-1200-rgb)); + --spectrum-orange-1300-rgb: + 255, + 226, + 181; + --spectrum-orange-1300: rgba(var(--spectrum-orange-1300-rgb)); + --spectrum-orange-1400-rgb: + 255, + 239, + 213; + --spectrum-orange-1400: rgba(var(--spectrum-orange-1400-rgb)); + --spectrum-yellow-100-rgb: + 53, + 36, + 0; + --spectrum-yellow-100: rgba(var(--spectrum-yellow-100-rgb)); + --spectrum-yellow-200-rgb: + 68, + 47, + 0; + --spectrum-yellow-200: rgba(var(--spectrum-yellow-200-rgb)); + --spectrum-yellow-300-rgb: + 86, + 62, + 0; + --spectrum-yellow-300: rgba(var(--spectrum-yellow-300-rgb)); + --spectrum-yellow-400-rgb: + 103, + 77, + 0; + --spectrum-yellow-400: rgba(var(--spectrum-yellow-400-rgb)); + --spectrum-yellow-500-rgb: + 122, + 92, + 0; + --spectrum-yellow-500: rgba(var(--spectrum-yellow-500-rgb)); + --spectrum-yellow-600-rgb: + 141, + 108, + 0; + --spectrum-yellow-600: rgba(var(--spectrum-yellow-600-rgb)); + --spectrum-yellow-700-rgb: + 161, + 126, + 0; + --spectrum-yellow-700: rgba(var(--spectrum-yellow-700-rgb)); + --spectrum-yellow-800-rgb: + 180, + 144, + 0; + --spectrum-yellow-800: rgba(var(--spectrum-yellow-800-rgb)); + --spectrum-yellow-900-rgb: + 199, + 162, + 0; + --spectrum-yellow-900: rgba(var(--spectrum-yellow-900-rgb)); + --spectrum-yellow-1000-rgb: + 216, + 181, + 0; + --spectrum-yellow-1000: rgba(var(--spectrum-yellow-1000-rgb)); + --spectrum-yellow-1100-rgb: + 233, + 199, + 0; + --spectrum-yellow-1100: rgba(var(--spectrum-yellow-1100-rgb)); + --spectrum-yellow-1200-rgb: + 247, + 216, + 4; + --spectrum-yellow-1200: rgba(var(--spectrum-yellow-1200-rgb)); + --spectrum-yellow-1300-rgb: + 249, + 233, + 97; + --spectrum-yellow-1300: rgba(var(--spectrum-yellow-1300-rgb)); + --spectrum-yellow-1400-rgb: + 252, + 243, + 170; + --spectrum-yellow-1400: rgba(var(--spectrum-yellow-1400-rgb)); + --spectrum-chartreuse-100-rgb: + 32, + 43, + 0; + --spectrum-chartreuse-100: rgba(var(--spectrum-chartreuse-100-rgb)); + --spectrum-chartreuse-200-rgb: + 42, + 56, + 0; + --spectrum-chartreuse-200: rgba(var(--spectrum-chartreuse-200-rgb)); + --spectrum-chartreuse-300-rgb: + 54, + 72, + 0; + --spectrum-chartreuse-300: rgba(var(--spectrum-chartreuse-300-rgb)); + --spectrum-chartreuse-400-rgb: + 66, + 88, + 0; + --spectrum-chartreuse-400: rgba(var(--spectrum-chartreuse-400-rgb)); + --spectrum-chartreuse-500-rgb: + 79, + 105, + 0; + --spectrum-chartreuse-500: rgba(var(--spectrum-chartreuse-500-rgb)); + --spectrum-chartreuse-600-rgb: + 93, + 123, + 0; + --spectrum-chartreuse-600: rgba(var(--spectrum-chartreuse-600-rgb)); + --spectrum-chartreuse-700-rgb: + 107, + 142, + 0; + --spectrum-chartreuse-700: rgba(var(--spectrum-chartreuse-700-rgb)); + --spectrum-chartreuse-800-rgb: + 122, + 161, + 0; + --spectrum-chartreuse-800: rgba(var(--spectrum-chartreuse-800-rgb)); + --spectrum-chartreuse-900-rgb: + 138, + 180, + 3; + --spectrum-chartreuse-900: rgba(var(--spectrum-chartreuse-900-rgb)); + --spectrum-chartreuse-1000-rgb: + 154, + 198, + 11; + --spectrum-chartreuse-1000: rgba(var(--spectrum-chartreuse-1000-rgb)); + --spectrum-chartreuse-1100-rgb: + 170, + 216, + 22; + --spectrum-chartreuse-1100: rgba(var(--spectrum-chartreuse-1100-rgb)); + --spectrum-chartreuse-1200-rgb: + 187, + 232, + 41; + --spectrum-chartreuse-1200: rgba(var(--spectrum-chartreuse-1200-rgb)); + --spectrum-chartreuse-1300-rgb: + 205, + 246, + 72; + --spectrum-chartreuse-1300: rgba(var(--spectrum-chartreuse-1300-rgb)); + --spectrum-chartreuse-1400-rgb: + 225, + 253, + 132; + --spectrum-chartreuse-1400: rgba(var(--spectrum-chartreuse-1400-rgb)); + --spectrum-celery-100-rgb: + 0, + 47, + 7; + --spectrum-celery-100: rgba(var(--spectrum-celery-100-rgb)); + --spectrum-celery-200-rgb: + 0, + 61, + 9; + --spectrum-celery-200: rgba(var(--spectrum-celery-200-rgb)); + --spectrum-celery-300-rgb: + 0, + 77, + 12; + --spectrum-celery-300: rgba(var(--spectrum-celery-300-rgb)); + --spectrum-celery-400-rgb: + 0, + 95, + 15; + --spectrum-celery-400: rgba(var(--spectrum-celery-400-rgb)); + --spectrum-celery-500-rgb: + 0, + 113, + 15; + --spectrum-celery-500: rgba(var(--spectrum-celery-500-rgb)); + --spectrum-celery-600-rgb: + 0, + 132, + 15; + --spectrum-celery-600: rgba(var(--spectrum-celery-600-rgb)); + --spectrum-celery-700-rgb: + 0, + 151, + 20; + --spectrum-celery-700: rgba(var(--spectrum-celery-700-rgb)); + --spectrum-celery-800-rgb: + 13, + 171, + 37; + --spectrum-celery-800: rgba(var(--spectrum-celery-800-rgb)); + --spectrum-celery-900-rgb: + 45, + 191, + 58; + --spectrum-celery-900: rgba(var(--spectrum-celery-900-rgb)); + --spectrum-celery-1000-rgb: + 80, + 208, + 82; + --spectrum-celery-1000: rgba(var(--spectrum-celery-1000-rgb)); + --spectrum-celery-1100-rgb: + 115, + 224, + 107; + --spectrum-celery-1100: rgba(var(--spectrum-celery-1100-rgb)); + --spectrum-celery-1200-rgb: + 147, + 237, + 131; + --spectrum-celery-1200: rgba(var(--spectrum-celery-1200-rgb)); + --spectrum-celery-1300-rgb: + 180, + 247, + 162; + --spectrum-celery-1300: rgba(var(--spectrum-celery-1300-rgb)); + --spectrum-celery-1400-rgb: + 213, + 252, + 202; + --spectrum-celery-1400: rgba(var(--spectrum-celery-1400-rgb)); + --spectrum-green-100-rgb: + 10, + 44, + 28; + --spectrum-green-100: rgba(var(--spectrum-green-100-rgb)); + --spectrum-green-200-rgb: + 7, + 59, + 36; + --spectrum-green-200: rgba(var(--spectrum-green-200-rgb)); + --spectrum-green-300-rgb: + 0, + 76, + 46; + --spectrum-green-300: rgba(var(--spectrum-green-300-rgb)); + --spectrum-green-400-rgb: + 0, + 93, + 57; + --spectrum-green-400: rgba(var(--spectrum-green-400-rgb)); + --spectrum-green-500-rgb: + 0, + 111, + 69; + --spectrum-green-500: rgba(var(--spectrum-green-500-rgb)); + --spectrum-green-600-rgb: + 0, + 130, + 82; + --spectrum-green-600: rgba(var(--spectrum-green-600-rgb)); + --spectrum-green-700-rgb: + 0, + 149, + 98; + --spectrum-green-700: rgba(var(--spectrum-green-700-rgb)); + --spectrum-green-800-rgb: + 28, + 168, + 114; + --spectrum-green-800: rgba(var(--spectrum-green-800-rgb)); + --spectrum-green-900-rgb: + 52, + 187, + 132; + --spectrum-green-900: rgba(var(--spectrum-green-900-rgb)); + --spectrum-green-1000-rgb: + 75, + 205, + 149; + --spectrum-green-1000: rgba(var(--spectrum-green-1000-rgb)); + --spectrum-green-1100-rgb: + 103, + 222, + 168; + --spectrum-green-1100: rgba(var(--spectrum-green-1100-rgb)); + --spectrum-green-1200-rgb: + 137, + 236, + 188; + --spectrum-green-1200: rgba(var(--spectrum-green-1200-rgb)); + --spectrum-green-1300-rgb: + 177, + 244, + 209; + --spectrum-green-1300: rgba(var(--spectrum-green-1300-rgb)); + --spectrum-green-1400-rgb: + 214, + 249, + 228; + --spectrum-green-1400: rgba(var(--spectrum-green-1400-rgb)); + --spectrum-seafoam-100-rgb: + 18, + 43, + 42; + --spectrum-seafoam-100: rgba(var(--spectrum-seafoam-100-rgb)); + --spectrum-seafoam-200-rgb: + 19, + 57, + 55; + --spectrum-seafoam-200: rgba(var(--spectrum-seafoam-200-rgb)); + --spectrum-seafoam-300-rgb: + 16, + 73, + 70; + --spectrum-seafoam-300: rgba(var(--spectrum-seafoam-300-rgb)); + --spectrum-seafoam-400-rgb: + 3, + 91, + 88; + --spectrum-seafoam-400: rgba(var(--spectrum-seafoam-400-rgb)); + --spectrum-seafoam-500-rgb: + 0, + 108, + 104; + --spectrum-seafoam-500: rgba(var(--spectrum-seafoam-500-rgb)); + --spectrum-seafoam-600-rgb: + 0, + 127, + 121; + --spectrum-seafoam-600: rgba(var(--spectrum-seafoam-600-rgb)); + --spectrum-seafoam-700-rgb: + 0, + 146, + 140; + --spectrum-seafoam-700: rgba(var(--spectrum-seafoam-700-rgb)); + --spectrum-seafoam-800-rgb: + 0, + 165, + 159; + --spectrum-seafoam-800: rgba(var(--spectrum-seafoam-800-rgb)); + --spectrum-seafoam-900-rgb: + 26, + 185, + 178; + --spectrum-seafoam-900: rgba(var(--spectrum-seafoam-900-rgb)); + --spectrum-seafoam-1000-rgb: + 66, + 202, + 195; + --spectrum-seafoam-1000: rgba(var(--spectrum-seafoam-1000-rgb)); + --spectrum-seafoam-1100-rgb: + 102, + 218, + 211; + --spectrum-seafoam-1100: rgba(var(--spectrum-seafoam-1100-rgb)); + --spectrum-seafoam-1200-rgb: + 139, + 232, + 225; + --spectrum-seafoam-1200: rgba(var(--spectrum-seafoam-1200-rgb)); + --spectrum-seafoam-1300-rgb: + 179, + 242, + 237; + --spectrum-seafoam-1300: rgba(var(--spectrum-seafoam-1300-rgb)); + --spectrum-seafoam-1400-rgb: + 215, + 248, + 244; + --spectrum-seafoam-1400: rgba(var(--spectrum-seafoam-1400-rgb)); + --spectrum-cyan-100-rgb: + 0, + 41, + 68; + --spectrum-cyan-100: rgba(var(--spectrum-cyan-100-rgb)); + --spectrum-cyan-200-rgb: + 0, + 54, + 88; + --spectrum-cyan-200: rgba(var(--spectrum-cyan-200-rgb)); + --spectrum-cyan-300-rgb: + 0, + 69, + 108; + --spectrum-cyan-300: rgba(var(--spectrum-cyan-300-rgb)); + --spectrum-cyan-400-rgb: + 0, + 86, + 128; + --spectrum-cyan-400: rgba(var(--spectrum-cyan-400-rgb)); + --spectrum-cyan-500-rgb: + 0, + 103, + 147; + --spectrum-cyan-500: rgba(var(--spectrum-cyan-500-rgb)); + --spectrum-cyan-600-rgb: + 0, + 121, + 167; + --spectrum-cyan-600: rgba(var(--spectrum-cyan-600-rgb)); + --spectrum-cyan-700-rgb: + 0, + 140, + 186; + --spectrum-cyan-700: rgba(var(--spectrum-cyan-700-rgb)); + --spectrum-cyan-800-rgb: + 4, + 160, + 205; + --spectrum-cyan-800: rgba(var(--spectrum-cyan-800-rgb)); + --spectrum-cyan-900-rgb: + 23, + 180, + 221; + --spectrum-cyan-900: rgba(var(--spectrum-cyan-900-rgb)); + --spectrum-cyan-1000-rgb: + 57, + 199, + 234; + --spectrum-cyan-1000: rgba(var(--spectrum-cyan-1000-rgb)); + --spectrum-cyan-1100-rgb: + 96, + 216, + 243; + --spectrum-cyan-1100: rgba(var(--spectrum-cyan-1100-rgb)); + --spectrum-cyan-1200-rgb: + 134, + 230, + 250; + --spectrum-cyan-1200: rgba(var(--spectrum-cyan-1200-rgb)); + --spectrum-cyan-1300-rgb: + 170, + 242, + 255; + --spectrum-cyan-1300: rgba(var(--spectrum-cyan-1300-rgb)); + --spectrum-cyan-1400-rgb: + 206, + 249, + 255; + --spectrum-cyan-1400: rgba(var(--spectrum-cyan-1400-rgb)); + --spectrum-indigo-100-rgb: + 26, + 29, + 97; + --spectrum-indigo-100: rgba(var(--spectrum-indigo-100-rgb)); + --spectrum-indigo-200-rgb: + 35, + 39, + 125; + --spectrum-indigo-200: rgba(var(--spectrum-indigo-200-rgb)); + --spectrum-indigo-300-rgb: + 46, + 50, + 158; + --spectrum-indigo-300: rgba(var(--spectrum-indigo-300-rgb)); + --spectrum-indigo-400-rgb: + 58, + 63, + 189; + --spectrum-indigo-400: rgba(var(--spectrum-indigo-400-rgb)); + --spectrum-indigo-500-rgb: + 73, + 78, + 216; + --spectrum-indigo-500: rgba(var(--spectrum-indigo-500-rgb)); + --spectrum-indigo-600-rgb: + 90, + 96, + 235; + --spectrum-indigo-600: rgba(var(--spectrum-indigo-600-rgb)); + --spectrum-indigo-700-rgb: + 110, + 115, + 246; + --spectrum-indigo-700: rgba(var(--spectrum-indigo-700-rgb)); + --spectrum-indigo-800-rgb: + 132, + 136, + 253; + --spectrum-indigo-800: rgba(var(--spectrum-indigo-800-rgb)); + --spectrum-indigo-900-rgb: + 153, + 157, + 255; + --spectrum-indigo-900: rgba(var(--spectrum-indigo-900-rgb)); + --spectrum-indigo-1000-rgb: + 174, + 177, + 255; + --spectrum-indigo-1000: rgba(var(--spectrum-indigo-1000-rgb)); + --spectrum-indigo-1100-rgb: + 194, + 196, + 255; + --spectrum-indigo-1100: rgba(var(--spectrum-indigo-1100-rgb)); + --spectrum-indigo-1200-rgb: + 212, + 213, + 255; + --spectrum-indigo-1200: rgba(var(--spectrum-indigo-1200-rgb)); + --spectrum-indigo-1300-rgb: + 227, + 228, + 255; + --spectrum-indigo-1300: rgba(var(--spectrum-indigo-1300-rgb)); + --spectrum-indigo-1400-rgb: + 240, + 240, + 255; + --spectrum-indigo-1400: rgba(var(--spectrum-indigo-1400-rgb)); + --spectrum-purple-100-rgb: + 50, + 16, + 104; + --spectrum-purple-100: rgba(var(--spectrum-purple-100-rgb)); + --spectrum-purple-200-rgb: + 67, + 13, + 140; + --spectrum-purple-200: rgba(var(--spectrum-purple-200-rgb)); + --spectrum-purple-300-rgb: + 86, + 16, + 173; + --spectrum-purple-300: rgba(var(--spectrum-purple-300-rgb)); + --spectrum-purple-400-rgb: + 106, + 29, + 200; + --spectrum-purple-400: rgba(var(--spectrum-purple-400-rgb)); + --spectrum-purple-500-rgb: + 126, + 49, + 222; + --spectrum-purple-500: rgba(var(--spectrum-purple-500-rgb)); + --spectrum-purple-600-rgb: + 145, + 70, + 236; + --spectrum-purple-600: rgba(var(--spectrum-purple-600-rgb)); + --spectrum-purple-700-rgb: + 162, + 94, + 246; + --spectrum-purple-700: rgba(var(--spectrum-purple-700-rgb)); + --spectrum-purple-800-rgb: + 178, + 119, + 250; + --spectrum-purple-800: rgba(var(--spectrum-purple-800-rgb)); + --spectrum-purple-900-rgb: + 192, + 143, + 252; + --spectrum-purple-900: rgba(var(--spectrum-purple-900-rgb)); + --spectrum-purple-1000-rgb: + 206, + 166, + 253; + --spectrum-purple-1000: rgba(var(--spectrum-purple-1000-rgb)); + --spectrum-purple-1100-rgb: + 219, + 188, + 254; + --spectrum-purple-1100: rgba(var(--spectrum-purple-1100-rgb)); + --spectrum-purple-1200-rgb: + 230, + 207, + 255; + --spectrum-purple-1200: rgba(var(--spectrum-purple-1200-rgb)); + --spectrum-purple-1300-rgb: + 240, + 224, + 255; + --spectrum-purple-1300: rgba(var(--spectrum-purple-1300-rgb)); + --spectrum-purple-1400-rgb: + 248, + 237, + 255; + --spectrum-purple-1400: rgba(var(--spectrum-purple-1400-rgb)); + --spectrum-fuchsia-100-rgb: + 70, + 14, + 68; + --spectrum-fuchsia-100: rgba(var(--spectrum-fuchsia-100-rgb)); + --spectrum-fuchsia-200-rgb: + 93, + 9, + 92; + --spectrum-fuchsia-200: rgba(var(--spectrum-fuchsia-200-rgb)); + --spectrum-fuchsia-300-rgb: + 120, + 0, + 120; + --spectrum-fuchsia-300: rgba(var(--spectrum-fuchsia-300-rgb)); + --spectrum-fuchsia-400-rgb: + 146, + 0, + 147; + --spectrum-fuchsia-400: rgba(var(--spectrum-fuchsia-400-rgb)); + --spectrum-fuchsia-500-rgb: + 169, + 19, + 170; + --spectrum-fuchsia-500: rgba(var(--spectrum-fuchsia-500-rgb)); + --spectrum-fuchsia-600-rgb: + 191, + 43, + 191; + --spectrum-fuchsia-600: rgba(var(--spectrum-fuchsia-600-rgb)); + --spectrum-fuchsia-700-rgb: + 211, + 65, + 213; + --spectrum-fuchsia-700: rgba(var(--spectrum-fuchsia-700-rgb)); + --spectrum-fuchsia-800-rgb: + 228, + 91, + 229; + --spectrum-fuchsia-800: rgba(var(--spectrum-fuchsia-800-rgb)); + --spectrum-fuchsia-900-rgb: + 239, + 120, + 238; + --spectrum-fuchsia-900: rgba(var(--spectrum-fuchsia-900-rgb)); + --spectrum-fuchsia-1000-rgb: + 246, + 149, + 243; + --spectrum-fuchsia-1000: rgba(var(--spectrum-fuchsia-1000-rgb)); + --spectrum-fuchsia-1100-rgb: + 251, + 175, + 246; + --spectrum-fuchsia-1100: rgba(var(--spectrum-fuchsia-1100-rgb)); + --spectrum-fuchsia-1200-rgb: + 254, + 199, + 248; + --spectrum-fuchsia-1200: rgba(var(--spectrum-fuchsia-1200-rgb)); + --spectrum-fuchsia-1300-rgb: + 255, + 220, + 250; + --spectrum-fuchsia-1300: rgba(var(--spectrum-fuchsia-1300-rgb)); + --spectrum-fuchsia-1400-rgb: + 255, + 235, + 252; + --spectrum-fuchsia-1400: rgba(var(--spectrum-fuchsia-1400-rgb)); + --spectrum-magenta-100-rgb: + 83, + 3, + 41; + --spectrum-magenta-100: rgba(var(--spectrum-magenta-100-rgb)); + --spectrum-magenta-200-rgb: + 106, + 0, + 52; + --spectrum-magenta-200: rgba(var(--spectrum-magenta-200-rgb)); + --spectrum-magenta-300-rgb: + 133, + 0, + 65; + --spectrum-magenta-300: rgba(var(--spectrum-magenta-300-rgb)); + --spectrum-magenta-400-rgb: + 161, + 0, + 78; + --spectrum-magenta-400: rgba(var(--spectrum-magenta-400-rgb)); + --spectrum-magenta-500-rgb: + 186, + 22, + 93; + --spectrum-magenta-500: rgba(var(--spectrum-magenta-500-rgb)); + --spectrum-magenta-600-rgb: + 209, + 43, + 114; + --spectrum-magenta-600: rgba(var(--spectrum-magenta-600-rgb)); + --spectrum-magenta-700-rgb: + 227, + 69, + 137; + --spectrum-magenta-700: rgba(var(--spectrum-magenta-700-rgb)); + --spectrum-magenta-800-rgb: + 241, + 97, + 156; + --spectrum-magenta-800: rgba(var(--spectrum-magenta-800-rgb)); + --spectrum-magenta-900-rgb: + 252, + 124, + 173; + --spectrum-magenta-900: rgba(var(--spectrum-magenta-900-rgb)); + --spectrum-magenta-1000-rgb: + 255, + 152, + 191; + --spectrum-magenta-1000: rgba(var(--spectrum-magenta-1000-rgb)); + --spectrum-magenta-1100-rgb: + 255, + 179, + 207; + --spectrum-magenta-1100: rgba(var(--spectrum-magenta-1100-rgb)); + --spectrum-magenta-1200-rgb: + 255, + 202, + 221; + --spectrum-magenta-1200: rgba(var(--spectrum-magenta-1200-rgb)); + --spectrum-magenta-1300-rgb: + 255, + 221, + 233; + --spectrum-magenta-1300: rgba(var(--spectrum-magenta-1300-rgb)); + --spectrum-magenta-1400-rgb: + 255, + 236, + 243; + --spectrum-magenta-1400: rgba(var(--spectrum-magenta-1400-rgb)); + --spectrum-icon-color-blue-primary-default: var(--spectrum-blue-800); + --spectrum-icon-color-green-primary-default: var(--spectrum-green-800); + --spectrum-icon-color-red-primary-default: var(--spectrum-red-700); + --spectrum-icon-color-yellow-primary-default: var(--spectrum-yellow-1000); +} +.spectrum { + --spectrum-focus-indicator-color: var(--spectrum-blue-800); + --spectrum-static-white-focus-indicator-color: var(--spectrum-white); + --spectrum-static-black-focus-indicator-color: var(--spectrum-black); + --spectrum-overlay-color: var(--spectrum-black); + --spectrum-opacity-disabled: 0.3; + --spectrum-neutral-subdued-content-color-selected: var(--spectrum-neutral-subdued-content-color-down); + --spectrum-accent-content-color-selected: var(--spectrum-accent-content-color-down); + --spectrum-disabled-background-color: var(--spectrum-gray-200); + --spectrum-disabled-static-white-background-color: var(--spectrum-transparent-white-200); + --spectrum-disabled-static-black-background-color: var(--spectrum-transparent-black-200); + --spectrum-background-opacity-default: 0; + --spectrum-background-opacity-hover: 0.1; + --spectrum-background-opacity-down: 0.1; + --spectrum-background-opacity-key-focus: 0.1; + --spectrum-neutral-content-color-default: var(--spectrum-gray-800); + --spectrum-neutral-content-color-hover: var(--spectrum-gray-900); + --spectrum-neutral-content-color-down: var(--spectrum-gray-900); + --spectrum-neutral-content-color-focus-hover: var(--spectrum-neutral-content-color-down); + --spectrum-neutral-content-color-focus: var(--spectrum-neutral-content-color-down); + --spectrum-neutral-content-color-key-focus: var(--spectrum-gray-900); + --spectrum-neutral-subdued-content-color-default: var(--spectrum-gray-700); + --spectrum-neutral-subdued-content-color-hover: var(--spectrum-gray-800); + --spectrum-neutral-subdued-content-color-down: var(--spectrum-gray-900); + --spectrum-neutral-subdued-content-color-key-focus: var(--spectrum-gray-800); + --spectrum-accent-content-color-default: var(--spectrum-accent-color-900); + --spectrum-accent-content-color-hover: var(--spectrum-accent-color-1000); + --spectrum-accent-content-color-down: var(--spectrum-accent-color-1100); + --spectrum-accent-content-color-key-focus: var(--spectrum-accent-color-1000); + --spectrum-negative-content-color-default: var(--spectrum-negative-color-900); + --spectrum-negative-content-color-hover: var(--spectrum-negative-color-1000); + --spectrum-negative-content-color-down: var(--spectrum-negative-color-1100); + --spectrum-negative-content-color-key-focus: var(--spectrum-negative-color-1000); + --spectrum-disabled-content-color: var(--spectrum-gray-400); + --spectrum-disabled-static-white-content-color: var(--spectrum-transparent-white-500); + --spectrum-disabled-static-black-content-color: var(--spectrum-transparent-black-500); + --spectrum-disabled-border-color: var(--spectrum-gray-300); + --spectrum-disabled-static-white-border-color: var(--spectrum-transparent-white-300); + --spectrum-disabled-static-black-border-color: var(--spectrum-transparent-black-300); + --spectrum-negative-border-color-default: var(--spectrum-negative-color-900); + --spectrum-negative-border-color-hover: var(--spectrum-negative-color-1000); + --spectrum-negative-border-color-down: var(--spectrum-negative-color-1100); + --spectrum-negative-border-color-focus-hover: var(--spectrum-negative-border-color-down); + --spectrum-negative-border-color-focus: var(--spectrum-negative-color-1000); + --spectrum-negative-border-color-key-focus: var(--spectrum-negative-color-1000); + --spectrum-swatch-border-color: var(--spectrum-gray-900); + --spectrum-swatch-border-opacity: 0.51; + --spectrum-swatch-disabled-icon-border-color: var(--spectrum-black); + --spectrum-swatch-disabled-icon-border-opacity: 0.51; + --spectrum-thumbnail-border-color: var(--spectrum-gray-800); + --spectrum-thumbnail-border-opacity: 0.1; + --spectrum-thumbnail-opacity-disabled: var(--spectrum-opacity-disabled); + --spectrum-opacity-checkerboard-square-light: var(--spectrum-white); + --spectrum-avatar-opacity-disabled: var(--spectrum-opacity-disabled); + --spectrum-color-area-border-color: var(--spectrum-gray-900); + --spectrum-color-area-border-opacity: 0.1; + --spectrum-color-slider-border-color: var(--spectrum-gray-900); + --spectrum-color-slider-border-opacity: 0.1; + --spectrum-color-loupe-drop-shadow-color: var(--spectrum-transparent-black-300); + --spectrum-color-loupe-inner-border: var(--spectrum-transparent-black-200); + --spectrum-color-loupe-outer-border: var(--spectrum-white); + --spectrum-card-selection-background-color: var(--spectrum-gray-100); + --spectrum-card-selection-background-color-opacity: 0.95; + --spectrum-drop-zone-background-color: var(--spectrum-accent-visual-color); + --spectrum-drop-zone-background-color-opacity: 0.1; + --spectrum-drop-zone-background-color-opacity-filled: 0.3; + --spectrum-coach-mark-pagination-color: var(--spectrum-gray-600); + --spectrum-color-handle-inner-border-color: var(--spectrum-black); + --spectrum-color-handle-inner-border-opacity: 0.42; + --spectrum-color-handle-outer-border-color: var(--spectrum-black); + --spectrum-color-handle-outer-border-opacity: var(--spectrum-color-handle-inner-border-opacity); + --spectrum-color-handle-drop-shadow-color: var(--spectrum-drop-shadow-color); + --spectrum-floating-action-button-drop-shadow-color: var(--spectrum-transparent-black-300); + --spectrum-floating-action-button-shadow-color: var(--spectrum-floating-action-button-drop-shadow-color); + --spectrum-table-row-hover-color: var(--spectrum-gray-900); + --spectrum-table-row-hover-opacity: 0.07; + --spectrum-table-selected-row-background-color: var(--spectrum-informative-background-color-default); + --spectrum-table-selected-row-background-opacity: 0.1; + --spectrum-table-selected-row-background-color-non-emphasized: var(--spectrum-neutral-background-color-selected-default); + --spectrum-table-selected-row-background-opacity-non-emphasized: 0.1; + --spectrum-table-row-down-opacity: 0.1; + --spectrum-table-selected-row-background-opacity-hover: 0.15; + --spectrum-table-selected-row-background-opacity-non-emphasized-hover: 0.15; + --spectrum-white-rgb: + 255, + 255, + 255; + --spectrum-white: rgba(var(--spectrum-white-rgb)); + --spectrum-transparent-white-100-rgb: + 255, + 255, + 255; + --spectrum-transparent-white-100-opacity: 0; + --spectrum-transparent-white-100: rgba(var(--spectrum-transparent-white-100-rgb), var(--spectrum-transparent-white-100-opacity)); + --spectrum-transparent-white-200-rgb: + 255, + 255, + 255; + --spectrum-transparent-white-200-opacity: 0.1; + --spectrum-transparent-white-200: rgba(var(--spectrum-transparent-white-200-rgb), var(--spectrum-transparent-white-200-opacity)); + --spectrum-transparent-white-300-rgb: + 255, + 255, + 255; + --spectrum-transparent-white-300-opacity: 0.25; + --spectrum-transparent-white-300: rgba(var(--spectrum-transparent-white-300-rgb), var(--spectrum-transparent-white-300-opacity)); + --spectrum-transparent-white-400-rgb: + 255, + 255, + 255; + --spectrum-transparent-white-400-opacity: 0.4; + --spectrum-transparent-white-400: rgba(var(--spectrum-transparent-white-400-rgb), var(--spectrum-transparent-white-400-opacity)); + --spectrum-transparent-white-500-rgb: + 255, + 255, + 255; + --spectrum-transparent-white-500-opacity: 0.55; + --spectrum-transparent-white-500: rgba(var(--spectrum-transparent-white-500-rgb), var(--spectrum-transparent-white-500-opacity)); + --spectrum-transparent-white-600-rgb: + 255, + 255, + 255; + --spectrum-transparent-white-600-opacity: 0.7; + --spectrum-transparent-white-600: rgba(var(--spectrum-transparent-white-600-rgb), var(--spectrum-transparent-white-600-opacity)); + --spectrum-transparent-white-700-rgb: + 255, + 255, + 255; + --spectrum-transparent-white-700-opacity: 0.8; + --spectrum-transparent-white-700: rgba(var(--spectrum-transparent-white-700-rgb), var(--spectrum-transparent-white-700-opacity)); + --spectrum-transparent-white-800-rgb: + 255, + 255, + 255; + --spectrum-transparent-white-800-opacity: 0.9; + --spectrum-transparent-white-800: rgba(var(--spectrum-transparent-white-800-rgb), var(--spectrum-transparent-white-800-opacity)); + --spectrum-transparent-white-900-rgb: + 255, + 255, + 255; + --spectrum-transparent-white-900: rgba(var(--spectrum-transparent-white-900-rgb)); + --spectrum-black-rgb: + 0, + 0, + 0; + --spectrum-black: rgba(var(--spectrum-black-rgb)); + --spectrum-transparent-black-100-rgb: + 0, + 0, + 0; + --spectrum-transparent-black-100-opacity: 0; + --spectrum-transparent-black-100: rgba(var(--spectrum-transparent-black-100-rgb), var(--spectrum-transparent-black-100-opacity)); + --spectrum-transparent-black-200-rgb: + 0, + 0, + 0; + --spectrum-transparent-black-200-opacity: 0.1; + --spectrum-transparent-black-200: rgba(var(--spectrum-transparent-black-200-rgb), var(--spectrum-transparent-black-200-opacity)); + --spectrum-transparent-black-300-rgb: + 0, + 0, + 0; + --spectrum-transparent-black-300-opacity: 0.25; + --spectrum-transparent-black-300: rgba(var(--spectrum-transparent-black-300-rgb), var(--spectrum-transparent-black-300-opacity)); + --spectrum-transparent-black-400-rgb: + 0, + 0, + 0; + --spectrum-transparent-black-400-opacity: 0.4; + --spectrum-transparent-black-400: rgba(var(--spectrum-transparent-black-400-rgb), var(--spectrum-transparent-black-400-opacity)); + --spectrum-transparent-black-500-rgb: + 0, + 0, + 0; + --spectrum-transparent-black-500-opacity: 0.55; + --spectrum-transparent-black-500: rgba(var(--spectrum-transparent-black-500-rgb), var(--spectrum-transparent-black-500-opacity)); + --spectrum-transparent-black-600-rgb: + 0, + 0, + 0; + --spectrum-transparent-black-600-opacity: 0.7; + --spectrum-transparent-black-600: rgba(var(--spectrum-transparent-black-600-rgb), var(--spectrum-transparent-black-600-opacity)); + --spectrum-transparent-black-700-rgb: + 0, + 0, + 0; + --spectrum-transparent-black-700-opacity: 0.8; + --spectrum-transparent-black-700: rgba(var(--spectrum-transparent-black-700-rgb), var(--spectrum-transparent-black-700-opacity)); + --spectrum-transparent-black-800-rgb: + 0, + 0, + 0; + --spectrum-transparent-black-800-opacity: 0.9; + --spectrum-transparent-black-800: rgba(var(--spectrum-transparent-black-800-rgb), var(--spectrum-transparent-black-800-opacity)); + --spectrum-transparent-black-900-rgb: + 0, + 0, + 0; + --spectrum-transparent-black-900: rgba(var(--spectrum-transparent-black-900-rgb)); + --spectrum-icon-color-inverse: var(--spectrum-gray-50); + --spectrum-icon-color-primary-default: var(--spectrum-neutral-content-color-default); + --spectrum-asterisk-icon-size-75: 8px; + --spectrum-radio-button-selection-indicator: 4px; + --spectrum-field-label-top-margin-small: 0px; + --spectrum-field-label-to-component: 0px; + --spectrum-help-text-to-component: 0px; + --spectrum-status-light-dot-size-small: 8px; + --spectrum-action-button-edge-to-hold-icon-extra-small: 3px; + --spectrum-action-button-edge-to-hold-icon-small: 3px; + --spectrum-button-minimum-width-multiplier: 2.25; + --spectrum-divider-thickness-small: 1px; + --spectrum-divider-thickness-medium: 2px; + --spectrum-divider-thickness-large: 4px; + --spectrum-swatch-rectangle-width-multiplier: 2; + --spectrum-swatch-slash-thickness-extra-small: 2px; + --spectrum-swatch-slash-thickness-small: 3px; + --spectrum-swatch-slash-thickness-medium: 4px; + --spectrum-swatch-slash-thickness-large: 5px; + --spectrum-progress-bar-minimum-width: 48px; + --spectrum-progress-bar-maximum-width: 768px; + --spectrum-meter-minimum-width: 48px; + --spectrum-meter-maximum-width: 768px; + --spectrum-meter-default-width: var(--spectrum-meter-width); + --spectrum-in-line-alert-minimum-width: 240px; + --spectrum-popover-tip-width: 16px; + --spectrum-popover-tip-height: 8px; + --spectrum-menu-item-label-to-description: 1px; + --spectrum-menu-item-section-divider-height: 8px; + --spectrum-picker-minimum-width-multiplier: 2; + --spectrum-picker-end-edge-to-disclousure-icon-quiet: var(--spectrum-picker-end-edge-to-disclosure-icon-quiet); + --spectrum-picker-end-edge-to-disclosure-icon-quiet: 0px; + --spectrum-text-field-minimum-width-multiplier: 1.5; + --spectrum-combo-box-minimum-width-multiplier: 2.5; + --spectrum-combo-box-quiet-minimum-width-multiplier: 2; + --spectrum-combo-box-visual-to-field-button-quiet: 0px; + --spectrum-alert-dialog-minimum-width: 288px; + --spectrum-alert-dialog-maximum-width: 480px; + --spectrum-contextual-help-minimum-width: 268px; + --spectrum-breadcrumbs-height: var(--spectrum-component-height-300); + --spectrum-breadcrumbs-height-compact: var(--spectrum-component-height-200); + --spectrum-breadcrumbs-end-edge-to-text: 0px; + --spectrum-breadcrumbs-truncated-menu-to-separator-icon: 0px; + --spectrum-breadcrumbs-start-edge-to-truncated-menu: 0px; + --spectrum-breadcrumbs-truncated-menu-to-bottom-text: 0px; + --spectrum-alert-banner-to-top-workflow-icon: var(--spectrum-alert-banner-top-to-workflow-icon); + --spectrum-alert-banner-to-top-text: var(--spectrum-alert-banner-top-to-text); + --spectrum-alert-banner-to-bottom-text: var(--spectrum-alert-banner-bottom-to-text); + --spectrum-color-area-border-width: var(--spectrum-border-width-100); + --spectrum-color-area-border-rounding: var(--spectrum-corner-radius-100); + --spectrum-color-wheel-color-area-margin: 12px; + --spectrum-color-slider-border-width: 1px; + --spectrum-color-slider-border-rounding: 4px; + --spectrum-floating-action-button-drop-shadow-blur: 12px; + --spectrum-floating-action-button-drop-shadow-y: 4px; + --spectrum-illustrated-message-maximum-width: 380px; + --spectrum-search-field-minimum-width-multiplier: 3; + --spectrum-color-loupe-height: 64px; + --spectrum-color-loupe-width: 48px; + --spectrum-color-loupe-bottom-to-color-handle: 12px; + --spectrum-color-loupe-outer-border-width: var(--spectrum-border-width-200); + --spectrum-color-loupe-inner-border-width: 1px; + --spectrum-color-loupe-drop-shadow-y: 2px; + --spectrum-color-loupe-drop-shadow-blur: 8px; + --spectrum-card-minimum-width: 100px; + --spectrum-card-preview-minimum-height: 130px; + --spectrum-card-selection-background-size: 40px; + --spectrum-drop-zone-width: 428px; + --spectrum-drop-zone-content-maximum-width: var(--spectrum-illustrated-message-maximum-width); + --spectrum-drop-zone-border-dash-length: 8px; + --spectrum-drop-zone-border-dash-gap: 4px; + --spectrum-drop-zone-title-size: var(--spectrum-illustrated-message-title-size); + --spectrum-drop-zone-cjk-title-size: var(--spectrum-illustrated-message-cjk-title-size); + --spectrum-drop-zone-body-size: var(--spectrum-illustrated-message-body-size); + --spectrum-accordion-top-to-text-compact-small: 2px; + --spectrum-accordion-top-to-text-compact-medium: 4px; + --spectrum-accordion-disclosure-indicator-to-text: 0px; + --spectrum-accordion-edge-to-disclosure-indicator: 0px; + --spectrum-accordion-edge-to-text: 0px; + --spectrum-accordion-focus-indicator-gap: 0px; + --spectrum-color-handle-border-width: var(--spectrum-border-width-200); + --spectrum-color-handle-inner-border-width: 1px; + --spectrum-color-handle-outer-border-width: 1px; + --spectrum-color-handle-drop-shadow-x: 0; + --spectrum-color-handle-drop-shadow-y: 0; + --spectrum-color-handle-drop-shadow-blur: 0; + --spectrum-table-row-height-small-compact: var(--spectrum-component-height-75); + --spectrum-table-row-height-medium-compact: var(--spectrum-component-height-100); + --spectrum-table-row-height-large-compact: var(--spectrum-component-height-200); + --spectrum-table-row-height-extra-large-compact: var(--spectrum-component-height-300); + --spectrum-table-row-top-to-text-small-compact: var(--spectrum-component-top-to-text-75); + --spectrum-table-row-top-to-text-medium-compact: var(--spectrum-component-top-to-text-100); + --spectrum-table-row-top-to-text-large-compact: var(--spectrum-component-top-to-text-200); + --spectrum-table-row-top-to-text-extra-large-compact: var(--spectrum-component-top-to-text-300); + --spectrum-table-row-bottom-to-text-small-compact: var(--spectrum-component-bottom-to-text-75); + --spectrum-table-row-bottom-to-text-medium-compact: var(--spectrum-component-bottom-to-text-100); + --spectrum-table-row-bottom-to-text-large-compact: var(--spectrum-component-bottom-to-text-200); + --spectrum-table-row-bottom-to-text-extra-large-compact: var(--spectrum-component-bottom-to-text-300); + --spectrum-table-edge-to-content: 16px; + --spectrum-table-border-divider-width: 1px; + --spectrum-tab-item-height-small: var(--spectrum-component-height-200); + --spectrum-tab-item-height-medium: var(--spectrum-component-height-300); + --spectrum-tab-item-height-large: var(--spectrum-component-height-400); + --spectrum-tab-item-height-extra-large: var(--spectrum-component-height-500); + --spectrum-tab-item-compact-height-small: var(--spectrum-component-height-75); + --spectrum-tab-item-compact-height-medium: var(--spectrum-component-height-100); + --spectrum-tab-item-compact-height-large: var(--spectrum-component-height-200); + --spectrum-tab-item-compact-height-extra-large: var(--spectrum-component-height-300); + --spectrum-tab-item-start-to-edge-quiet: 0px; + --spectrum-in-field-button-width-stacked-small: 20px; + --spectrum-in-field-button-width-stacked-medium: 28px; + --spectrum-in-field-button-width-stacked-large: 36px; + --spectrum-in-field-button-width-stacked-extra-large: 44px; + --spectrum-in-field-button-edge-to-disclosure-icon-stacked-small: 7px; + --spectrum-in-field-button-edge-to-disclosure-icon-stacked-medium: 9px; + --spectrum-in-field-button-edge-to-disclosure-icon-stacked-large: 13px; + --spectrum-in-field-button-edge-to-disclosure-icon-stacked-extra-large: 16px; + --spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-small: 3px; + --spectrum-android-elevation: 2dp; + --spectrum-spacing-50: 2px; + --spectrum-spacing-75: 4px; + --spectrum-spacing-100: 8px; + --spectrum-spacing-200: 12px; + --spectrum-spacing-300: 16px; + --spectrum-spacing-400: 24px; + --spectrum-spacing-500: 32px; + --spectrum-spacing-600: 40px; + --spectrum-spacing-700: 48px; + --spectrum-spacing-800: 64px; + --spectrum-spacing-900: 80px; + --spectrum-spacing-1000: 96px; + --spectrum-focus-indicator-thickness: 2px; + --spectrum-focus-indicator-gap: 2px; + --spectrum-border-width-200: 2px; + --spectrum-border-width-400: 4px; + --spectrum-field-edge-to-text-quiet: 0px; + --spectrum-field-edge-to-visual-quiet: 0px; + --spectrum-field-edge-to-border-quiet: 0px; + --spectrum-field-edge-to-alert-icon-quiet: 0px; + --spectrum-field-edge-to-validation-icon-quiet: 0px; + --spectrum-text-underline-thickness: 1px; + --spectrum-text-underline-gap: 1px; + --spectrum-informative-color-100: var(--spectrum-blue-100); + --spectrum-informative-color-200: var(--spectrum-blue-200); + --spectrum-informative-color-300: var(--spectrum-blue-300); + --spectrum-informative-color-400: var(--spectrum-blue-400); + --spectrum-informative-color-500: var(--spectrum-blue-500); + --spectrum-informative-color-600: var(--spectrum-blue-600); + --spectrum-informative-color-700: var(--spectrum-blue-700); + --spectrum-informative-color-800: var(--spectrum-blue-800); + --spectrum-informative-color-900: var(--spectrum-blue-900); + --spectrum-informative-color-1000: var(--spectrum-blue-1000); + --spectrum-informative-color-1100: var(--spectrum-blue-1100); + --spectrum-informative-color-1200: var(--spectrum-blue-1200); + --spectrum-informative-color-1300: var(--spectrum-blue-1300); + --spectrum-informative-color-1400: var(--spectrum-blue-1400); + --spectrum-negative-color-100: var(--spectrum-red-100); + --spectrum-negative-color-200: var(--spectrum-red-200); + --spectrum-negative-color-300: var(--spectrum-red-300); + --spectrum-negative-color-400: var(--spectrum-red-400); + --spectrum-negative-color-500: var(--spectrum-red-500); + --spectrum-negative-color-600: var(--spectrum-red-600); + --spectrum-negative-color-700: var(--spectrum-red-700); + --spectrum-negative-color-800: var(--spectrum-red-800); + --spectrum-negative-color-900: var(--spectrum-red-900); + --spectrum-negative-color-1000: var(--spectrum-red-1000); + --spectrum-negative-color-1100: var(--spectrum-red-1100); + --spectrum-negative-color-1200: var(--spectrum-red-1200); + --spectrum-negative-color-1300: var(--spectrum-red-1300); + --spectrum-negative-color-1400: var(--spectrum-red-1400); + --spectrum-notice-color-100: var(--spectrum-orange-100); + --spectrum-notice-color-200: var(--spectrum-orange-200); + --spectrum-notice-color-300: var(--spectrum-orange-300); + --spectrum-notice-color-400: var(--spectrum-orange-400); + --spectrum-notice-color-500: var(--spectrum-orange-500); + --spectrum-notice-color-600: var(--spectrum-orange-600); + --spectrum-notice-color-700: var(--spectrum-orange-700); + --spectrum-notice-color-800: var(--spectrum-orange-800); + --spectrum-notice-color-900: var(--spectrum-orange-900); + --spectrum-notice-color-1000: var(--spectrum-orange-1000); + --spectrum-notice-color-1100: var(--spectrum-orange-1100); + --spectrum-notice-color-1200: var(--spectrum-orange-1200); + --spectrum-notice-color-1300: var(--spectrum-orange-1300); + --spectrum-notice-color-1400: var(--spectrum-orange-1400); + --spectrum-positive-color-100: var(--spectrum-green-100); + --spectrum-positive-color-200: var(--spectrum-green-200); + --spectrum-positive-color-300: var(--spectrum-green-300); + --spectrum-positive-color-400: var(--spectrum-green-400); + --spectrum-positive-color-500: var(--spectrum-green-500); + --spectrum-positive-color-600: var(--spectrum-green-600); + --spectrum-positive-color-700: var(--spectrum-green-700); + --spectrum-positive-color-800: var(--spectrum-green-800); + --spectrum-positive-color-900: var(--spectrum-green-900); + --spectrum-positive-color-1000: var(--spectrum-green-1000); + --spectrum-positive-color-1100: var(--spectrum-green-1100); + --spectrum-positive-color-1200: var(--spectrum-green-1200); + --spectrum-positive-color-1300: var(--spectrum-green-1300); + --spectrum-positive-color-1400: var(--spectrum-green-1400); + --spectrum-default-font-family: var(--spectrum-sans-serif-font-family); + --spectrum-sans-serif-font-family: Adobe Clean; + --spectrum-serif-font-family: Adobe Clean Serif; + --spectrum-cjk-font-family: Adobe Clean Han; + --spectrum-light-font-weight: 300; + --spectrum-regular-font-weight: 400; + --spectrum-medium-font-weight: 500; + --spectrum-bold-font-weight: 700; + --spectrum-extra-bold-font-weight: 800; + --spectrum-black-font-weight: 900; + --spectrum-italic-font-style: italic; + --spectrum-default-font-style: normal; + --spectrum-line-height-100: 1.3; + --spectrum-line-height-200: 1.5; + --spectrum-cjk-line-height-100: 1.5; + --spectrum-cjk-line-height-200: 1.7; + --spectrum-cjk-letter-spacing: 0.05em; + --spectrum-heading-sans-serif-font-family: var(--spectrum-sans-serif-font-family); + --spectrum-heading-serif-font-family: var(--spectrum-serif-font-family); + --spectrum-heading-cjk-font-family: var(--spectrum-cjk-font-family); + --spectrum-heading-sans-serif-light-font-weight: var(--spectrum-light-font-weight); + --spectrum-heading-sans-serif-light-font-style: var(--spectrum-default-font-style); + --spectrum-heading-serif-light-font-weight: var(--spectrum-regular-font-weight); + --spectrum-heading-serif-light-font-style: var(--spectrum-default-font-style); + --spectrum-heading-cjk-light-font-weight: var(--spectrum-light-font-weight); + --spectrum-heading-cjk-light-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-font-style: var(--spectrum-default-font-style); + --spectrum-heading-serif-font-style: var(--spectrum-default-font-style); + --spectrum-heading-cjk-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-heavy-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-sans-serif-heavy-font-style: var(--spectrum-default-font-style); + --spectrum-heading-serif-heavy-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-serif-heavy-font-style: var(--spectrum-default-font-style); + --spectrum-heading-cjk-heavy-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-heavy-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-light-strong-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-sans-serif-light-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-serif-light-strong-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-serif-light-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-cjk-light-strong-font-weight: var(--spectrum-extra-bold-font-weight); + --spectrum-heading-cjk-light-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-sans-serif-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-serif-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-serif-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-cjk-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-heavy-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-sans-serif-heavy-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-serif-heavy-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-serif-heavy-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-cjk-heavy-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-heavy-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-light-emphasized-font-weight: var(--spectrum-light-font-weight); + --spectrum-heading-sans-serif-light-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-serif-light-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-heading-serif-light-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-cjk-light-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-heading-cjk-light-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-serif-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-cjk-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-heavy-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-sans-serif-heavy-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-serif-heavy-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-serif-heavy-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-cjk-heavy-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-heavy-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-light-strong-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-sans-serif-light-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-serif-light-strong-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-serif-light-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-cjk-light-strong-emphasized-font-weight: var(--spectrum-extra-bold-font-weight); + --spectrum-heading-cjk-light-strong-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-sans-serif-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-serif-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-serif-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-cjk-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-strong-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-heavy-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-sans-serif-heavy-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-serif-heavy-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-serif-heavy-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-cjk-heavy-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-heavy-strong-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-heading-size-xxxl: var(--spectrum-font-size-1300); + --spectrum-heading-size-xxl: var(--spectrum-font-size-1100); + --spectrum-heading-size-xl: var(--spectrum-font-size-900); + --spectrum-heading-size-l: var(--spectrum-font-size-700); + --spectrum-heading-size-m: var(--spectrum-font-size-500); + --spectrum-heading-size-s: var(--spectrum-font-size-300); + --spectrum-heading-size-xs: var(--spectrum-font-size-200); + --spectrum-heading-size-xxs: var(--spectrum-font-size-100); + --spectrum-heading-cjk-size-xxxl: var(--spectrum-font-size-1300); + --spectrum-heading-cjk-size-xxl: var(--spectrum-font-size-900); + --spectrum-heading-cjk-size-xl: var(--spectrum-font-size-800); + --spectrum-heading-cjk-size-l: var(--spectrum-font-size-600); + --spectrum-heading-cjk-size-m: var(--spectrum-font-size-400); + --spectrum-heading-cjk-size-s: var(--spectrum-font-size-300); + --spectrum-heading-cjk-size-xs: var(--spectrum-font-size-200); + --spectrum-heading-cjk-size-xxs: var(--spectrum-font-size-100); + --spectrum-heading-line-height: var(--spectrum-line-height-100); + --spectrum-heading-cjk-line-height: var(--spectrum-cjk-line-height-100); + --spectrum-heading-margin-top-multiplier: 0.88888889; + --spectrum-heading-margin-bottom-multiplier: 0.25; + --spectrum-heading-color: var(--spectrum-gray-900); + --spectrum-body-sans-serif-font-family: var(--spectrum-sans-serif-font-family); + --spectrum-body-serif-font-family: var(--spectrum-serif-font-family); + --spectrum-body-cjk-font-family: var(--spectrum-cjk-font-family); + --spectrum-body-sans-serif-font-weight: var(--spectrum-regular-font-weight); + --spectrum-body-sans-serif-font-style: var(--spectrum-default-font-style); + --spectrum-body-serif-font-weight: var(--spectrum-regular-font-weight); + --spectrum-body-serif-font-style: var(--spectrum-default-font-style); + --spectrum-body-cjk-font-weight: var(--spectrum-regular-font-weight); + --spectrum-body-cjk-font-style: var(--spectrum-default-font-style); + --spectrum-body-sans-serif-strong-font-weight: var(--spectrum-bold-font-weight); + --spectrum-body-sans-serif-strong-font-style: var(--spectrum-default-font-style); + --spectrum-body-serif-strong-font-weight: var(--spectrum-bold-font-weight); + --spectrum-body-serif-strong-font-style: var(--spectrum-default-font-style); + --spectrum-body-cjk-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-body-cjk-strong-font-style: var(--spectrum-default-font-style); + --spectrum-body-sans-serif-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-body-sans-serif-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-body-serif-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-body-serif-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-body-cjk-emphasized-font-weight: var(--spectrum-extra-bold-font-weight); + --spectrum-body-cjk-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-body-sans-serif-strong-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-body-sans-serif-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-body-serif-strong-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-body-serif-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-body-cjk-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-body-cjk-strong-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-body-size-xxxl: var(--spectrum-font-size-600); + --spectrum-body-size-xxl: var(--spectrum-font-size-500); + --spectrum-body-size-xl: var(--spectrum-font-size-400); + --spectrum-body-size-l: var(--spectrum-font-size-300); + --spectrum-body-size-m: var(--spectrum-font-size-200); + --spectrum-body-size-s: var(--spectrum-font-size-100); + --spectrum-body-size-xs: var(--spectrum-font-size-75); + --spectrum-body-line-height: var(--spectrum-line-height-200); + --spectrum-body-cjk-line-height: var(--spectrum-cjk-line-height-200); + --spectrum-body-margin-multiplier: 0.75; + --spectrum-body-color: var(--spectrum-gray-800); + --spectrum-detail-sans-serif-font-family: var(--spectrum-sans-serif-font-family); + --spectrum-detail-serif-font-family: var(--spectrum-serif-font-family); + --spectrum-detail-cjk-font-family: var(--spectrum-cjk-font-family); + --spectrum-detail-sans-serif-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-sans-serif-font-style: var(--spectrum-default-font-style); + --spectrum-detail-serif-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-serif-font-style: var(--spectrum-default-font-style); + --spectrum-detail-cjk-font-weight: var(--spectrum-extra-bold-font-weight); + --spectrum-detail-cjk-font-style: var(--spectrum-default-font-style); + --spectrum-detail-sans-serif-light-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-sans-serif-light-font-style: var(--spectrum-default-font-style); + --spectrum-detail-serif-light-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-serif-light-font-style: var(--spectrum-default-font-style); + --spectrum-detail-cjk-light-font-weight: var(--spectrum-light-font-weight); + --spectrum-detail-cjk-light-font-style: var(--spectrum-default-font-style); + --spectrum-detail-sans-serif-strong-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-sans-serif-strong-font-style: var(--spectrum-default-font-style); + --spectrum-detail-serif-strong-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-serif-strong-font-style: var(--spectrum-default-font-style); + --spectrum-detail-cjk-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-detail-cjk-strong-font-style: var(--spectrum-default-font-style); + --spectrum-detail-sans-serif-light-strong-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-sans-serif-light-strong-font-style: var(--spectrum-default-font-style); + --spectrum-detail-serif-light-strong-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-serif-light-strong-font-style: var(--spectrum-default-font-style); + --spectrum-detail-cjk-light-strong-font-weight: var(--spectrum-extra-bold-font-weight); + --spectrum-detail-cjk-light-strong-font-style: var(--spectrum-default-font-style); + --spectrum-detail-sans-serif-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-sans-serif-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-serif-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-serif-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-cjk-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-detail-cjk-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-detail-sans-serif-light-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-sans-serif-light-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-serif-light-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-serif-light-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-cjk-light-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-cjk-light-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-detail-sans-serif-strong-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-sans-serif-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-serif-strong-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-serif-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-cjk-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-detail-cjk-strong-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-detail-sans-serif-light-strong-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-sans-serif-light-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-serif-light-strong-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-serif-light-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-cjk-light-strong-emphasized-font-weight: var(--spectrum-extra-bold-font-weight); + --spectrum-detail-cjk-light-strong-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-detail-size-xl: var(--spectrum-font-size-200); + --spectrum-detail-size-l: var(--spectrum-font-size-100); + --spectrum-detail-size-m: var(--spectrum-font-size-75); + --spectrum-detail-size-s: var(--spectrum-font-size-50); + --spectrum-detail-line-height: var(--spectrum-line-height-100); + --spectrum-detail-cjk-line-height: var(--spectrum-cjk-line-height-100); + --spectrum-detail-margin-top-multiplier: 0.88888889; + --spectrum-detail-margin-bottom-multiplier: 0.25; + --spectrum-detail-letter-spacing: 0.06em; + --spectrum-detail-sans-serif-text-transform: uppercase; + --spectrum-detail-serif-text-transform: uppercase; + --spectrum-detail-color: var(--spectrum-gray-900); + --spectrum-code-font-family: Source Code Pro; + --spectrum-code-cjk-font-family: var(--spectrum-code-font-family); + --spectrum-code-font-weight: var(--spectrum-regular-font-weight); + --spectrum-code-font-style: var(--spectrum-default-font-style); + --spectrum-code-cjk-font-weight: var(--spectrum-regular-font-weight); + --spectrum-code-cjk-font-style: var(--spectrum-default-font-style); + --spectrum-code-strong-font-weight: var(--spectrum-bold-font-weight); + --spectrum-code-strong-font-style: var(--spectrum-default-font-style); + --spectrum-code-cjk-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-code-cjk-strong-font-style: var(--spectrum-default-font-style); + --spectrum-code-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-code-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-code-cjk-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-code-cjk-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-code-strong-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-code-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-code-cjk-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-code-cjk-strong-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-code-size-xl: var(--spectrum-font-size-400); + --spectrum-code-size-l: var(--spectrum-font-size-300); + --spectrum-code-size-m: var(--spectrum-font-size-200); + --spectrum-code-size-s: var(--spectrum-font-size-100); + --spectrum-code-size-xs: var(--spectrum-font-size-75); + --spectrum-code-line-height: var(--spectrum-line-height-200); + --spectrum-code-cjk-line-height: var(--spectrum-cjk-line-height-200); + --spectrum-code-color: var(--spectrum-gray-800); +} +.spectrum--large { + --spectrum-workflow-icon-size-50: 18px; + --spectrum-workflow-icon-size-75: 20px; + --spectrum-workflow-icon-size-100: 22px; + --spectrum-workflow-icon-size-200: 24px; + --spectrum-workflow-icon-size-300: 28px; + --spectrum-arrow-icon-size-75: 12px; + --spectrum-arrow-icon-size-100: 14px; + --spectrum-arrow-icon-size-200: 16px; + --spectrum-arrow-icon-size-300: 16px; + --spectrum-arrow-icon-size-400: 18px; + --spectrum-arrow-icon-size-500: 22px; + --spectrum-arrow-icon-size-600: 24px; + --spectrum-asterisk-icon-size-100: 10px; + --spectrum-asterisk-icon-size-200: 12px; + --spectrum-asterisk-icon-size-300: 12px; + --spectrum-checkmark-icon-size-50: 12px; + --spectrum-checkmark-icon-size-75: 12px; + --spectrum-checkmark-icon-size-100: 14px; + --spectrum-checkmark-icon-size-200: 14px; + --spectrum-checkmark-icon-size-300: 16px; + --spectrum-checkmark-icon-size-400: 18px; + --spectrum-checkmark-icon-size-500: 20px; + --spectrum-checkmark-icon-size-600: 24px; + --spectrum-chevron-icon-size-50: 8px; + --spectrum-chevron-icon-size-75: 12px; + --spectrum-chevron-icon-size-100: 14px; + --spectrum-chevron-icon-size-200: 14px; + --spectrum-chevron-icon-size-300: 16px; + --spectrum-chevron-icon-size-400: 18px; + --spectrum-chevron-icon-size-500: 20px; + --spectrum-chevron-icon-size-600: 24px; + --spectrum-corner-triangle-icon-size-75: 6px; + --spectrum-corner-triangle-icon-size-100: 7px; + --spectrum-corner-triangle-icon-size-200: 8px; + --spectrum-corner-triangle-icon-size-300: 8px; + --spectrum-cross-icon-size-75: 10px; + --spectrum-cross-icon-size-100: 10px; + --spectrum-cross-icon-size-200: 12px; + --spectrum-cross-icon-size-300: 14px; + --spectrum-cross-icon-size-400: 16px; + --spectrum-cross-icon-size-500: 16px; + --spectrum-cross-icon-size-600: 18px; + --spectrum-dash-icon-size-50: 10px; + --spectrum-dash-icon-size-75: 10px; + --spectrum-dash-icon-size-100: 12px; + --spectrum-dash-icon-size-200: 14px; + --spectrum-dash-icon-size-300: 16px; + --spectrum-dash-icon-size-400: 18px; + --spectrum-dash-icon-size-500: 20px; + --spectrum-dash-icon-size-600: 22px; + --spectrum-field-label-text-to-asterisk-small: 5px; + --spectrum-field-label-text-to-asterisk-medium: 5px; + --spectrum-field-label-text-to-asterisk-large: 6px; + --spectrum-field-label-text-to-asterisk-extra-large: 6px; + --spectrum-field-label-top-to-asterisk-small: 11px; + --spectrum-field-label-top-to-asterisk-medium: 15px; + --spectrum-field-label-top-to-asterisk-large: 19px; + --spectrum-field-label-top-to-asterisk-extra-large: 24px; + --spectrum-field-label-top-margin-medium: 5px; + --spectrum-field-label-top-margin-large: 6px; + --spectrum-field-label-top-margin-extra-large: 6px; + --spectrum-field-label-to-component-quiet-small: -10px; + --spectrum-field-label-to-component-quiet-medium: -10px; + --spectrum-field-label-to-component-quiet-large: -15px; + --spectrum-field-label-to-component-quiet-extra-large: -19px; + --spectrum-help-text-top-to-workflow-icon-small: 5px; + --spectrum-help-text-top-to-workflow-icon-medium: 4px; + --spectrum-help-text-top-to-workflow-icon-large: 8px; + --spectrum-help-text-top-to-workflow-icon-extra-large: 11px; + --spectrum-status-light-dot-size-medium: 10px; + --spectrum-status-light-dot-size-large: 12px; + --spectrum-status-light-dot-size-extra-large: 12px; + --spectrum-status-light-top-to-dot-small: 11px; + --spectrum-status-light-top-to-dot-medium: 15px; + --spectrum-status-light-top-to-dot-large: 19px; + --spectrum-status-light-top-to-dot-extra-large: 24px; + --spectrum-action-button-edge-to-hold-icon-medium: 5px; + --spectrum-action-button-edge-to-hold-icon-large: 6px; + --spectrum-action-button-edge-to-hold-icon-extra-large: 7px; + --spectrum-tooltip-tip-width: 10px; + --spectrum-tooltip-tip-height: 5px; + --spectrum-tooltip-maximum-width: 200px; + --spectrum-progress-circle-size-small: 20px; + --spectrum-progress-circle-size-medium: 40px; + --spectrum-progress-circle-size-large: 80px; + --spectrum-progress-circle-thickness-small: 3px; + --spectrum-progress-circle-thickness-medium: 4px; + --spectrum-progress-circle-thickness-large: 5px; + --spectrum-toast-height: 56px; + --spectrum-toast-maximum-width: 420px; + --spectrum-toast-top-to-workflow-icon: 17px; + --spectrum-toast-top-to-text: 16px; + --spectrum-toast-bottom-to-text: 19px; + --spectrum-action-bar-height: 56px; + --spectrum-action-bar-top-to-item-counter: 16px; + --spectrum-swatch-size-extra-small: 20px; + --spectrum-swatch-size-small: 30px; + --spectrum-swatch-size-medium: 40px; + --spectrum-swatch-size-large: 50px; + --spectrum-progress-bar-thickness-small: 5px; + --spectrum-progress-bar-thickness-medium: 8px; + --spectrum-progress-bar-thickness-large: 10px; + --spectrum-progress-bar-thickness-extra-large: 13px; + --spectrum-meter-width: 240px; + --spectrum-meter-thickness-small: 5px; + --spectrum-meter-thickness-large: 8px; + --spectrum-tag-top-to-avatar-small: 5px; + --spectrum-tag-top-to-avatar-medium: 7px; + --spectrum-tag-top-to-avatar-large: 11px; + --spectrum-tag-top-to-cross-icon-small: 10px; + --spectrum-tag-top-to-cross-icon-medium: 15px; + --spectrum-tag-top-to-cross-icon-large: 19px; + --spectrum-popover-top-to-content-area: 5px; + --spectrum-menu-item-edge-to-content-not-selected-small: 24px; + --spectrum-menu-item-edge-to-content-not-selected-medium: 42px; + --spectrum-menu-item-edge-to-content-not-selected-large: 47px; + --spectrum-menu-item-edge-to-content-not-selected-extra-large: 54px; + --spectrum-menu-item-top-to-disclosure-icon-small: 9px; + --spectrum-menu-item-top-to-disclosure-icon-medium: 13px; + --spectrum-menu-item-top-to-disclosure-icon-large: 17px; + --spectrum-menu-item-top-to-disclosure-icon-extra-large: 22px; + --spectrum-menu-item-top-to-selected-icon-small: 9px; + --spectrum-menu-item-top-to-selected-icon-medium: 13px; + --spectrum-menu-item-top-to-selected-icon-large: 17px; + --spectrum-menu-item-top-to-selected-icon-extra-large: 22px; + --spectrum-slider-control-to-field-label-small: 6px; + --spectrum-slider-control-to-field-label-medium: 10px; + --spectrum-slider-control-to-field-label-large: 14px; + --spectrum-slider-control-to-field-label-extra-large: 17px; + --spectrum-picker-visual-to-disclosure-icon-small: 9px; + --spectrum-picker-visual-to-disclosure-icon-medium: 10px; + --spectrum-picker-visual-to-disclosure-icon-large: 11px; + --spectrum-picker-visual-to-disclosure-icon-extra-large: 13px; + --spectrum-text-area-minimum-width: 140px; + --spectrum-text-area-minimum-height: 70px; + --spectrum-combo-box-visual-to-field-button-small: 9px; + --spectrum-combo-box-visual-to-field-button-medium: 10px; + --spectrum-combo-box-visual-to-field-button-large: 11px; + --spectrum-combo-box-visual-to-field-button-extra-large: 13px; + --spectrum-thumbnail-size-50: 20px; + --spectrum-thumbnail-size-75: 22px; + --spectrum-thumbnail-size-100: 26px; + --spectrum-thumbnail-size-200: 28px; + --spectrum-thumbnail-size-300: 32px; + --spectrum-thumbnail-size-400: 36px; + --spectrum-thumbnail-size-500: 40px; + --spectrum-thumbnail-size-600: 46px; + --spectrum-thumbnail-size-700: 50px; + --spectrum-thumbnail-size-800: 55px; + --spectrum-thumbnail-size-900: 62px; + --spectrum-thumbnail-size-1000: 70px; + --spectrum-alert-dialog-title-size: var(--spectrum-heading-size-xs); + --spectrum-alert-dialog-description-size: var(--spectrum-body-size-xs); + --spectrum-opacity-checkerboard-square-size: 10px; + --spectrum-contextual-help-title-size: var(--spectrum-heading-size-xxs); + --spectrum-contextual-help-body-size: var(--spectrum-body-size-xs); + --spectrum-breadcrumbs-height-multiline: 84px; + --spectrum-breadcrumbs-top-to-text: 17px; + --spectrum-breadcrumbs-top-to-text-compact: 16px; + --spectrum-breadcrumbs-top-to-text-multiline: 15px; + --spectrum-breadcrumbs-bottom-to-text: 19px; + --spectrum-breadcrumbs-bottom-to-text-compact: 19px; + --spectrum-breadcrumbs-bottom-to-text-multiline: 10px; + --spectrum-breadcrumbs-start-edge-to-text: 9px; + --spectrum-breadcrumbs-top-text-to-bottom-text: 11px; + --spectrum-breadcrumbs-top-to-separator-icon: 25px; + --spectrum-breadcrumbs-top-to-separator-icon-compact: 23px; + --spectrum-breadcrumbs-top-to-separator-icon-multiline: 20px; + --spectrum-breadcrumbs-separator-icon-to-bottom-text-multiline: 15px; + --spectrum-breadcrumbs-top-to-truncated-menu: 10px; + --spectrum-breadcrumbs-top-to-truncated-menu-compact: 5px; + --spectrum-avatar-size-50: 20px; + --spectrum-avatar-size-75: 22px; + --spectrum-avatar-size-100: 26px; + --spectrum-avatar-size-200: 28px; + --spectrum-avatar-size-300: 32px; + --spectrum-avatar-size-400: 36px; + --spectrum-avatar-size-500: 40px; + --spectrum-avatar-size-600: 46px; + --spectrum-avatar-size-700: 50px; + --spectrum-alert-banner-minimum-height: 64px; + --spectrum-alert-banner-width: 680px; + --spectrum-alert-banner-top-to-workflow-icon: 21px; + --spectrum-alert-banner-top-to-text: 21px; + --spectrum-alert-banner-bottom-to-text: 22px; + --spectrum-rating-indicator-width: 22px; + --spectrum-rating-indicator-to-icon: 5px; + --spectrum-color-area-width: 240px; + --spectrum-color-area-minimum-width: 80px; + --spectrum-color-area-height: 240px; + --spectrum-color-area-minimum-height: 80px; + --spectrum-color-wheel-width: 240px; + --spectrum-color-wheel-minimum-width: 219px; + --spectrum-color-slider-length: 240px; + --spectrum-color-slider-minimum-length: 100px; + --spectrum-illustrated-message-title-size: var(--spectrum-heading-size-s); + --spectrum-illustrated-message-cjk-title-size: var(--spectrum-heading-cjk-size-s); + --spectrum-illustrated-message-body-size: var(--spectrum-body-size-xs); + --spectrum-coach-mark-width: 216px; + --spectrum-coach-mark-minimum-width: 216px; + --spectrum-coach-mark-maximum-width: 248px; + --spectrum-coach-mark-edge-to-content: var(--spectrum-spacing-300); + --spectrum-coach-mark-pagination-text-to-bottom-edge: 22px; + --spectrum-coach-mark-media-height: 162px; + --spectrum-coach-mark-media-minimum-height: 121px; + --spectrum-coach-mark-title-size: var(--spectrum-heading-size-xxs); + --spectrum-coach-mark-body-size: var(--spectrum-body-size-xs); + --spectrum-coach-mark-pagination-body-size: var(--spectrum-body-size-xs); + --spectrum-accordion-top-to-text-regular-small: 7px; + --spectrum-accordion-small-top-to-text-spacious: 12px; + --spectrum-accordion-top-to-text-regular-medium: 9px; + --spectrum-accordion-top-to-text-spacious-medium: 14px; + --spectrum-accordion-top-to-text-compact-large: 7px; + --spectrum-accordion-top-to-text-regular-large: 12px; + --spectrum-accordion-top-to-text-spacious-large: 14px; + --spectrum-accordion-top-to-text-compact-extra-large: 7px; + --spectrum-accordion-top-to-text-regular-extra-large: 12px; + --spectrum-accordion-top-to-text-spacious-extra-large: 14px; + --spectrum-accordion-bottom-to-text-compact-small: 4px; + --spectrum-accordion-bottom-to-text-regular-small: 9px; + --spectrum-accordion-bottom-to-text-spacious-small: 14px; + --spectrum-accordion-bottom-to-text-compact-medium: 8px; + --spectrum-accordion-bottom-to-text-regular-medium: 13px; + --spectrum-accordion-bottom-to-text-spacious-medium: 18px; + --spectrum-accordion-bottom-to-text-compact-large: 9px; + --spectrum-accordion-bottom-to-text-regular-large: 14px; + --spectrum-accordion-bottom-to-text-spacious-large: 19px; + --spectrum-accordion-bottom-to-text-compact-extra-large: 10px; + --spectrum-accordion-bottom-to-text-regular-extra-large: 15px; + --spectrum-accordion-bottom-to-text-spacious-extra-large: 21px; + --spectrum-accordion-minimum-width: 250px; + --spectrum-accordion-content-area-top-to-content: 10px; + --spectrum-accordion-content-area-bottom-to-content: 20px; + --spectrum-color-handle-size: 20px; + --spectrum-color-handle-size-key-focus: 40px; + --spectrum-table-column-header-row-top-to-text-small: 10px; + --spectrum-table-column-header-row-top-to-text-medium: 9px; + --spectrum-table-column-header-row-top-to-text-large: 13px; + --spectrum-table-column-header-row-top-to-text-extra-large: 16px; + --spectrum-table-column-header-row-bottom-to-text-small: 11px; + --spectrum-table-column-header-row-bottom-to-text-medium: 10px; + --spectrum-table-column-header-row-bottom-to-text-large: 13px; + --spectrum-table-column-header-row-bottom-to-text-extra-large: 17px; + --spectrum-table-row-height-small-regular: 40px; + --spectrum-table-row-height-medium-regular: 50px; + --spectrum-table-row-height-large-regular: 60px; + --spectrum-table-row-height-extra-large-regular: 70px; + --spectrum-table-row-height-small-spacious: 50px; + --spectrum-table-row-height-medium-spacious: 60px; + --spectrum-table-row-height-large-spacious: 70px; + --spectrum-table-row-height-extra-large-spacious: 80px; + --spectrum-table-row-top-to-text-small-regular: 10px; + --spectrum-table-row-top-to-text-medium-regular: 14px; + --spectrum-table-row-top-to-text-large-regular: 18px; + --spectrum-table-row-top-to-text-extra-large-regular: 21px; + --spectrum-table-row-bottom-to-text-small-regular: 11px; + --spectrum-table-row-bottom-to-text-medium-regular: 15px; + --spectrum-table-row-bottom-to-text-large-regular: 18px; + --spectrum-table-row-bottom-to-text-extra-large-regular: 22px; + --spectrum-table-row-top-to-text-small-spacious: 15px; + --spectrum-table-row-top-to-text-medium-spacious: 18px; + --spectrum-table-row-top-to-text-large-spacious: 23px; + --spectrum-table-row-top-to-text-extra-large-spacious: 26px; + --spectrum-table-row-bottom-to-text-small-spacious: 16px; + --spectrum-table-row-bottom-to-text-medium-spacious: 18px; + --spectrum-table-row-bottom-to-text-large-spacious: 23px; + --spectrum-table-row-bottom-to-text-extra-large-spacious: 27px; + --spectrum-table-checkbox-to-text: 30px; + --spectrum-table-header-row-checkbox-to-top-small: 14px; + --spectrum-table-header-row-checkbox-to-top-medium: 13px; + --spectrum-table-header-row-checkbox-to-top-large: 17px; + --spectrum-table-header-row-checkbox-to-top-extra-large: 21px; + --spectrum-table-row-checkbox-to-top-small-compact: 9px; + --spectrum-table-row-checkbox-to-top-small-regular: 14px; + --spectrum-table-row-checkbox-to-top-small-spacious: 19px; + --spectrum-table-row-checkbox-to-top-medium-compact: 13px; + --spectrum-table-row-checkbox-to-top-medium-regular: 18px; + --spectrum-table-row-checkbox-to-top-medium-spacious: 23px; + --spectrum-table-row-checkbox-to-top-large-compact: 17px; + --spectrum-table-row-checkbox-to-top-large-regular: 22px; + --spectrum-table-row-checkbox-to-top-large-spacious: 27px; + --spectrum-table-row-checkbox-to-top-extra-large-compact: 21px; + --spectrum-table-row-checkbox-to-top-extra-large-regular: 26px; + --spectrum-table-row-checkbox-to-top-extra-large-spacious: 31px; + --spectrum-table-section-header-row-height-small: 30px; + --spectrum-table-section-header-row-height-medium: 40px; + --spectrum-table-section-header-row-height-large: 50px; + --spectrum-table-section-header-row-height-extra-large: 60px; + --spectrum-table-thumbnail-to-top-minimum-small-compact: 5px; + --spectrum-table-thumbnail-to-top-minimum-medium-compact: 6px; + --spectrum-table-thumbnail-to-top-minimum-large-compact: 9px; + --spectrum-table-thumbnail-to-top-minimum-extra-large-compact: 10px; + --spectrum-table-thumbnail-to-top-minimum-small-regular: 6px; + --spectrum-table-thumbnail-to-top-minimum-medium-regular: 9px; + --spectrum-table-thumbnail-to-top-minimum-large-regular: 10px; + --spectrum-table-thumbnail-to-top-minimum-extra-large-regular: 10px; + --spectrum-table-thumbnail-to-top-minimum-small-spacious: 9px; + --spectrum-table-thumbnail-to-top-minimum-medium-spacious: 10px; + --spectrum-table-thumbnail-to-top-minimum-large-spacious: 10px; + --spectrum-table-thumbnail-to-top-minimum-extra-large-spacious: 12px; + --spectrum-tab-item-to-tab-item-horizontal-small: 27px; + --spectrum-tab-item-to-tab-item-horizontal-medium: 30px; + --spectrum-tab-item-to-tab-item-horizontal-large: 33px; + --spectrum-tab-item-to-tab-item-horizontal-extra-large: 36px; + --spectrum-tab-item-to-tab-item-vertical-small: 5px; + --spectrum-tab-item-to-tab-item-vertical-medium: 5px; + --spectrum-tab-item-to-tab-item-vertical-large: 6px; + --spectrum-tab-item-to-tab-item-vertical-extra-large: 6px; + --spectrum-tab-item-start-to-edge-small: 13px; + --spectrum-tab-item-start-to-edge-medium: 15px; + --spectrum-tab-item-start-to-edge-large: 17px; + --spectrum-tab-item-start-to-edge-extra-large: 19px; + --spectrum-tab-item-top-to-text-small: 14px; + --spectrum-tab-item-bottom-to-text-small: 15px; + --spectrum-tab-item-top-to-text-medium: 18px; + --spectrum-tab-item-bottom-to-text-medium: 19px; + --spectrum-tab-item-top-to-text-large: 22px; + --spectrum-tab-item-bottom-to-text-large: 22px; + --spectrum-tab-item-top-to-text-extra-large: 25px; + --spectrum-tab-item-bottom-to-text-extra-large: 25px; + --spectrum-tab-item-top-to-text-compact-small: 5px; + --spectrum-tab-item-bottom-to-text-compact-small: 6px; + --spectrum-tab-item-top-to-text-compact-medium: 9px; + --spectrum-tab-item-bottom-to-text-compact-medium: 10px; + --spectrum-tab-item-top-to-text-compact-large: 12px; + --spectrum-tab-item-bottom-to-text-compact-large: 14px; + --spectrum-tab-item-top-to-text-compact-extra-large: 15px; + --spectrum-tab-item-bottom-to-text-compact-extra-large: 17px; + --spectrum-tab-item-top-to-workflow-icon-small: 15px; + --spectrum-tab-item-top-to-workflow-icon-medium: 19px; + --spectrum-tab-item-top-to-workflow-icon-large: 23px; + --spectrum-tab-item-top-to-workflow-icon-extra-large: 26px; + --spectrum-tab-item-top-to-workflow-icon-compact-small: 5px; + --spectrum-tab-item-top-to-workflow-icon-compact-medium: 9px; + --spectrum-tab-item-top-to-workflow-icon-compact-large: 13px; + --spectrum-tab-item-top-to-workflow-icon-compact-extra-large: 16px; + --spectrum-tab-item-focus-indicator-gap-small: 9px; + --spectrum-tab-item-focus-indicator-gap-medium: 10px; + --spectrum-tab-item-focus-indicator-gap-large: 11px; + --spectrum-tab-item-focus-indicator-gap-extra-large: 12px; + --spectrum-side-navigation-width: 240px; + --spectrum-side-navigation-minimum-width: 200px; + --spectrum-side-navigation-maximum-width: 300px; + --spectrum-side-navigation-second-level-edge-to-text: 30px; + --spectrum-side-navigation-third-level-edge-to-text: 45px; + --spectrum-side-navigation-with-icon-second-level-edge-to-text: 62px; + --spectrum-side-navigation-with-icon-third-level-edge-to-text: 77px; + --spectrum-side-navigation-item-to-item: 5px; + --spectrum-side-navigation-item-to-header: 30px; + --spectrum-side-navigation-header-to-item: 10px; + --spectrum-side-navigation-bottom-to-text: 10px; + --spectrum-tray-top-to-content-area: 5px; + --spectrum-accordion-top-to-text-spacious-small: 12px; + --spectrum-text-to-visual-50: 8px; + --spectrum-text-to-visual-75: 9px; + --spectrum-text-to-visual-100: 10px; + --spectrum-text-to-visual-200: 11px; + --spectrum-text-to-visual-300: 13px; + --spectrum-text-to-control-75: 11px; + --spectrum-text-to-control-100: 13px; + --spectrum-text-to-control-200: 14px; + --spectrum-text-to-control-300: 16px; + --spectrum-component-height-50: 26px; + --spectrum-component-height-75: 30px; + --spectrum-component-height-100: 40px; + --spectrum-component-height-200: 50px; + --spectrum-component-height-300: 60px; + --spectrum-component-height-400: 70px; + --spectrum-component-height-500: 80px; + --spectrum-component-pill-edge-to-visual-75: 13px; + --spectrum-component-pill-edge-to-visual-100: 17px; + --spectrum-component-pill-edge-to-visual-200: 22px; + --spectrum-component-pill-edge-to-visual-300: 27px; + --spectrum-component-pill-edge-to-visual-only-75: 5px; + --spectrum-component-pill-edge-to-visual-only-100: 9px; + --spectrum-component-pill-edge-to-visual-only-200: 13px; + --spectrum-component-pill-edge-to-visual-only-300: 16px; + --spectrum-component-pill-edge-to-text-75: 15px; + --spectrum-component-pill-edge-to-text-100: 20px; + --spectrum-component-pill-edge-to-text-200: 25px; + --spectrum-component-pill-edge-to-text-300: 30px; + --spectrum-component-edge-to-visual-50: 7px; + --spectrum-component-edge-to-visual-75: 9px; + --spectrum-component-edge-to-visual-100: 12px; + --spectrum-component-edge-to-visual-200: 16px; + --spectrum-component-edge-to-visual-300: 19px; + --spectrum-component-edge-to-visual-only-50: 4px; + --spectrum-component-edge-to-visual-only-75: 5px; + --spectrum-component-edge-to-visual-only-100: 9px; + --spectrum-component-edge-to-visual-only-200: 13px; + --spectrum-component-edge-to-visual-only-300: 16px; + --spectrum-component-edge-to-text-50: 10px; + --spectrum-component-edge-to-text-75: 11px; + --spectrum-component-edge-to-text-100: 15px; + --spectrum-component-edge-to-text-200: 19px; + --spectrum-component-edge-to-text-300: 22px; + --spectrum-component-top-to-workflow-icon-50: 4px; + --spectrum-component-top-to-workflow-icon-75: 5px; + --spectrum-component-top-to-workflow-icon-100: 9px; + --spectrum-component-top-to-workflow-icon-200: 13px; + --spectrum-component-top-to-workflow-icon-300: 16px; + --spectrum-component-top-to-text-50: 4px; + --spectrum-component-top-to-text-75: 5px; + --spectrum-component-top-to-text-100: 8px; + --spectrum-component-top-to-text-200: 12px; + --spectrum-component-top-to-text-300: 15px; + --spectrum-component-bottom-to-text-50: 6px; + --spectrum-component-bottom-to-text-75: 6px; + --spectrum-component-bottom-to-text-100: 11px; + --spectrum-component-bottom-to-text-200: 14px; + --spectrum-component-bottom-to-text-300: 18px; + --spectrum-component-to-menu-small: 7px; + --spectrum-component-to-menu-medium: 8px; + --spectrum-component-to-menu-large: 9px; + --spectrum-component-to-menu-extra-large: 10px; + --spectrum-field-edge-to-disclosure-icon-75: 9px; + --spectrum-field-edge-to-disclosure-icon-100: 13px; + --spectrum-field-edge-to-disclosure-icon-200: 17px; + --spectrum-field-edge-to-disclosure-icon-300: 22px; + --spectrum-field-end-edge-to-disclosure-icon-75: 9px; + --spectrum-field-end-edge-to-disclosure-icon-100: 13px; + --spectrum-field-end-edge-to-disclosure-icon-200: 17px; + --spectrum-field-end-edge-to-disclosure-icon-300: 22px; + --spectrum-field-top-to-disclosure-icon-75: 9px; + --spectrum-field-top-to-disclosure-icon-100: 13px; + --spectrum-field-top-to-disclosure-icon-200: 17px; + --spectrum-field-top-to-disclosure-icon-300: 22px; + --spectrum-field-top-to-alert-icon-small: 5px; + --spectrum-field-top-to-alert-icon-medium: 9px; + --spectrum-field-top-to-alert-icon-large: 13px; + --spectrum-field-top-to-alert-icon-extra-large: 16px; + --spectrum-field-top-to-validation-icon-small: 9px; + --spectrum-field-top-to-validation-icon-medium: 13px; + --spectrum-field-top-to-validation-icon-large: 17px; + --spectrum-field-top-to-validation-icon-extra-large: 22px; + --spectrum-field-top-to-progress-circle-small: 7px; + --spectrum-field-top-to-progress-circle-medium: 12px; + --spectrum-field-top-to-progress-circle-large: 17px; + --spectrum-field-top-to-progress-circle-extra-large: 22px; + --spectrum-field-edge-to-alert-icon-small: 11px; + --spectrum-field-edge-to-alert-icon-medium: 15px; + --spectrum-field-edge-to-alert-icon-large: 19px; + --spectrum-field-edge-to-alert-icon-extra-large: 22px; + --spectrum-field-edge-to-validation-icon-small: 11px; + --spectrum-field-edge-to-validation-icon-medium: 15px; + --spectrum-field-edge-to-validation-icon-large: 19px; + --spectrum-field-edge-to-validation-icon-extra-large: 22px; + --spectrum-field-text-to-alert-icon-small: 10px; + --spectrum-field-text-to-alert-icon-medium: 15px; + --spectrum-field-text-to-alert-icon-large: 19px; + --spectrum-field-text-to-alert-icon-extra-large: 22px; + --spectrum-field-text-to-validation-icon-small: 10px; + --spectrum-field-text-to-validation-icon-medium: 15px; + --spectrum-field-text-to-validation-icon-large: 19px; + --spectrum-field-text-to-validation-icon-extra-large: 22px; + --spectrum-field-width: 240px; + --spectrum-character-count-to-field-quiet-small: -4px; + --spectrum-character-count-to-field-quiet-medium: -4px; + --spectrum-character-count-to-field-quiet-large: -4px; + --spectrum-character-count-to-field-quiet-extra-large: -5px; + --spectrum-side-label-character-count-to-field: 15px; + --spectrum-side-label-character-count-top-margin-small: 5px; + --spectrum-side-label-character-count-top-margin-medium: 10px; + --spectrum-side-label-character-count-top-margin-large: 14px; + --spectrum-side-label-character-count-top-margin-extra-large: 18px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-small: 9px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-medium: 13px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-large: 17px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-extra-large: 22px; + --spectrum-navigational-indicator-top-to-back-icon-small: 7px; + --spectrum-navigational-indicator-top-to-back-icon-medium: 12px; + --spectrum-navigational-indicator-top-to-back-icon-large: 16px; + --spectrum-navigational-indicator-top-to-back-icon-extra-large: 19px; + --spectrum-color-control-track-width: 30px; + --spectrum-font-size-50: 13px; + --spectrum-font-size-75: 15px; + --spectrum-font-size-100: 17px; + --spectrum-font-size-200: 19px; + --spectrum-font-size-300: 22px; + --spectrum-font-size-400: 24px; + --spectrum-font-size-500: 27px; + --spectrum-font-size-600: 31px; + --spectrum-font-size-700: 34px; + --spectrum-font-size-800: 39px; + --spectrum-font-size-900: 44px; + --spectrum-font-size-1000: 49px; + --spectrum-font-size-1100: 55px; + --spectrum-font-size-1200: 62px; + --spectrum-font-size-1300: 70px; +} +.spectrum--light, +.spectrum--lightest { + --spectrum-overlay-opacity: 0.4; + --spectrum-drop-shadow-color-rgb: + 0, + 0, + 0; + --spectrum-drop-shadow-color-opacity: 0.15; + --spectrum-drop-shadow-color: rgba(var(--spectrum-drop-shadow-color-rgb), var(--spectrum-drop-shadow-color-opacity)); + --spectrum-background-base-color: var(--spectrum-gray-200); + --spectrum-background-layer-1-color: var(--spectrum-gray-100); + --spectrum-background-layer-2-color: var(--spectrum-gray-50); + --spectrum-neutral-background-color-default: var(--spectrum-gray-800); + --spectrum-neutral-background-color-hover: var(--spectrum-gray-900); + --spectrum-neutral-background-color-down: var(--spectrum-gray-900); + --spectrum-neutral-background-color-key-focus: var(--spectrum-gray-900); + --spectrum-neutral-subdued-background-color-default: var(--spectrum-gray-600); + --spectrum-neutral-subdued-background-color-hover: var(--spectrum-gray-700); + --spectrum-neutral-subdued-background-color-down: var(--spectrum-gray-800); + --spectrum-neutral-subdued-background-color-key-focus: var(--spectrum-gray-700); + --spectrum-accent-background-color-default: var(--spectrum-accent-color-900); + --spectrum-accent-background-color-hover: var(--spectrum-accent-color-1000); + --spectrum-accent-background-color-down: var(--spectrum-accent-color-1100); + --spectrum-accent-background-color-key-focus: var(--spectrum-accent-color-1000); + --spectrum-informative-background-color-default: var(--spectrum-informative-color-900); + --spectrum-informative-background-color-hover: var(--spectrum-informative-color-1000); + --spectrum-informative-background-color-down: var(--spectrum-informative-color-1100); + --spectrum-informative-background-color-key-focus: var(--spectrum-informative-color-1000); + --spectrum-negative-background-color-default: var(--spectrum-negative-color-900); + --spectrum-negative-background-color-hover: var(--spectrum-negative-color-1000); + --spectrum-negative-background-color-down: var(--spectrum-negative-color-1100); + --spectrum-negative-background-color-key-focus: var(--spectrum-negative-color-1000); + --spectrum-positive-background-color-default: var(--spectrum-positive-color-900); + --spectrum-positive-background-color-hover: var(--spectrum-positive-color-1000); + --spectrum-positive-background-color-down: var(--spectrum-positive-color-1100); + --spectrum-positive-background-color-key-focus: var(--spectrum-positive-color-1000); + --spectrum-notice-background-color-default: var(--spectrum-notice-color-600); + --spectrum-gray-background-color-default: var(--spectrum-gray-700); + --spectrum-red-background-color-default: var(--spectrum-red-900); + --spectrum-orange-background-color-default: var(--spectrum-orange-600); + --spectrum-yellow-background-color-default: var(--spectrum-yellow-400); + --spectrum-chartreuse-background-color-default: var(--spectrum-chartreuse-500); + --spectrum-celery-background-color-default: var(--spectrum-celery-600); + --spectrum-green-background-color-default: var(--spectrum-green-900); + --spectrum-seafoam-background-color-default: var(--spectrum-seafoam-900); + --spectrum-cyan-background-color-default: var(--spectrum-cyan-900); + --spectrum-blue-background-color-default: var(--spectrum-blue-900); + --spectrum-indigo-background-color-default: var(--spectrum-indigo-900); + --spectrum-purple-background-color-default: var(--spectrum-purple-900); + --spectrum-fuchsia-background-color-default: var(--spectrum-fuchsia-900); + --spectrum-magenta-background-color-default: var(--spectrum-magenta-900); + --spectrum-neutral-visual-color: var(--spectrum-gray-500); + --spectrum-accent-visual-color: var(--spectrum-accent-color-800); + --spectrum-informative-visual-color: var(--spectrum-informative-color-800); + --spectrum-negative-visual-color: var(--spectrum-negative-color-800); + --spectrum-notice-visual-color: var(--spectrum-notice-color-700); + --spectrum-positive-visual-color: var(--spectrum-positive-color-700); + --spectrum-gray-visual-color: var(--spectrum-gray-500); + --spectrum-red-visual-color: var(--spectrum-red-800); + --spectrum-orange-visual-color: var(--spectrum-orange-700); + --spectrum-yellow-visual-color: var(--spectrum-yellow-600); + --spectrum-chartreuse-visual-color: var(--spectrum-chartreuse-600); + --spectrum-celery-visual-color: var(--spectrum-celery-700); + --spectrum-green-visual-color: var(--spectrum-green-700); + --spectrum-seafoam-visual-color: var(--spectrum-seafoam-700); + --spectrum-cyan-visual-color: var(--spectrum-cyan-600); + --spectrum-blue-visual-color: var(--spectrum-blue-800); + --spectrum-indigo-visual-color: var(--spectrum-indigo-800); + --spectrum-purple-visual-color: var(--spectrum-purple-800); + --spectrum-fuchsia-visual-color: var(--spectrum-fuchsia-800); + --spectrum-magenta-visual-color: var(--spectrum-magenta-800); + --spectrum-opacity-checkerboard-square-dark: var(--spectrum-gray-200); + --spectrum-gray-50-rgb: + 255, + 255, + 255; + --spectrum-gray-50: rgba(var(--spectrum-gray-50-rgb)); + --spectrum-gray-75-rgb: + 253, + 253, + 253; + --spectrum-gray-75: rgba(var(--spectrum-gray-75-rgb)); + --spectrum-gray-100-rgb: + 248, + 248, + 248; + --spectrum-gray-100: rgba(var(--spectrum-gray-100-rgb)); + --spectrum-gray-200-rgb: + 230, + 230, + 230; + --spectrum-gray-200: rgba(var(--spectrum-gray-200-rgb)); + --spectrum-gray-300-rgb: + 213, + 213, + 213; + --spectrum-gray-300: rgba(var(--spectrum-gray-300-rgb)); + --spectrum-gray-400-rgb: + 177, + 177, + 177; + --spectrum-gray-400: rgba(var(--spectrum-gray-400-rgb)); + --spectrum-gray-500-rgb: + 144, + 144, + 144; + --spectrum-gray-500: rgba(var(--spectrum-gray-500-rgb)); + --spectrum-gray-600-rgb: + 109, + 109, + 109; + --spectrum-gray-600: rgba(var(--spectrum-gray-600-rgb)); + --spectrum-gray-700-rgb: + 70, + 70, + 70; + --spectrum-gray-700: rgba(var(--spectrum-gray-700-rgb)); + --spectrum-gray-800-rgb: + 34, + 34, + 34; + --spectrum-gray-800: rgba(var(--spectrum-gray-800-rgb)); + --spectrum-gray-900-rgb: + 0, + 0, + 0; + --spectrum-gray-900: rgba(var(--spectrum-gray-900-rgb)); + --spectrum-blue-100-rgb: + 224, + 242, + 255; + --spectrum-blue-100: rgba(var(--spectrum-blue-100-rgb)); + --spectrum-blue-200-rgb: + 202, + 232, + 255; + --spectrum-blue-200: rgba(var(--spectrum-blue-200-rgb)); + --spectrum-blue-300-rgb: + 181, + 222, + 255; + --spectrum-blue-300: rgba(var(--spectrum-blue-300-rgb)); + --spectrum-blue-400-rgb: + 150, + 206, + 253; + --spectrum-blue-400: rgba(var(--spectrum-blue-400-rgb)); + --spectrum-blue-500-rgb: + 120, + 187, + 250; + --spectrum-blue-500: rgba(var(--spectrum-blue-500-rgb)); + --spectrum-blue-600-rgb: + 89, + 167, + 246; + --spectrum-blue-600: rgba(var(--spectrum-blue-600-rgb)); + --spectrum-blue-700-rgb: + 56, + 146, + 243; + --spectrum-blue-700: rgba(var(--spectrum-blue-700-rgb)); + --spectrum-blue-800-rgb: + 20, + 122, + 243; + --spectrum-blue-800: rgba(var(--spectrum-blue-800-rgb)); + --spectrum-blue-900-rgb: + 2, + 101, + 220; + --spectrum-blue-900: rgba(var(--spectrum-blue-900-rgb)); + --spectrum-blue-1000-rgb: + 0, + 84, + 182; + --spectrum-blue-1000: rgba(var(--spectrum-blue-1000-rgb)); + --spectrum-blue-1100-rgb: + 0, + 68, + 145; + --spectrum-blue-1100: rgba(var(--spectrum-blue-1100-rgb)); + --spectrum-blue-1200-rgb: + 0, + 53, + 113; + --spectrum-blue-1200: rgba(var(--spectrum-blue-1200-rgb)); + --spectrum-blue-1300-rgb: + 0, + 39, + 84; + --spectrum-blue-1300: rgba(var(--spectrum-blue-1300-rgb)); + --spectrum-blue-1400-rgb: + 0, + 28, + 60; + --spectrum-blue-1400: rgba(var(--spectrum-blue-1400-rgb)); + --spectrum-red-100-rgb: + 255, + 235, + 231; + --spectrum-red-100: rgba(var(--spectrum-red-100-rgb)); + --spectrum-red-200-rgb: + 255, + 221, + 214; + --spectrum-red-200: rgba(var(--spectrum-red-200-rgb)); + --spectrum-red-300-rgb: + 255, + 205, + 195; + --spectrum-red-300: rgba(var(--spectrum-red-300-rgb)); + --spectrum-red-400-rgb: + 255, + 183, + 169; + --spectrum-red-400: rgba(var(--spectrum-red-400-rgb)); + --spectrum-red-500-rgb: + 255, + 155, + 136; + --spectrum-red-500: rgba(var(--spectrum-red-500-rgb)); + --spectrum-red-600-rgb: + 255, + 124, + 101; + --spectrum-red-600: rgba(var(--spectrum-red-600-rgb)); + --spectrum-red-700-rgb: + 247, + 92, + 70; + --spectrum-red-700: rgba(var(--spectrum-red-700-rgb)); + --spectrum-red-800-rgb: + 234, + 56, + 41; + --spectrum-red-800: rgba(var(--spectrum-red-800-rgb)); + --spectrum-red-900-rgb: + 211, + 21, + 16; + --spectrum-red-900: rgba(var(--spectrum-red-900-rgb)); + --spectrum-red-1000-rgb: + 180, + 0, + 0; + --spectrum-red-1000: rgba(var(--spectrum-red-1000-rgb)); + --spectrum-red-1100-rgb: + 147, + 0, + 0; + --spectrum-red-1100: rgba(var(--spectrum-red-1100-rgb)); + --spectrum-red-1200-rgb: + 116, + 0, + 0; + --spectrum-red-1200: rgba(var(--spectrum-red-1200-rgb)); + --spectrum-red-1300-rgb: + 89, + 0, + 0; + --spectrum-red-1300: rgba(var(--spectrum-red-1300-rgb)); + --spectrum-red-1400-rgb: + 67, + 0, + 0; + --spectrum-red-1400: rgba(var(--spectrum-red-1400-rgb)); + --spectrum-orange-100-rgb: + 255, + 236, + 204; + --spectrum-orange-100: rgba(var(--spectrum-orange-100-rgb)); + --spectrum-orange-200-rgb: + 255, + 223, + 173; + --spectrum-orange-200: rgba(var(--spectrum-orange-200-rgb)); + --spectrum-orange-300-rgb: + 253, + 210, + 145; + --spectrum-orange-300: rgba(var(--spectrum-orange-300-rgb)); + --spectrum-orange-400-rgb: + 255, + 187, + 99; + --spectrum-orange-400: rgba(var(--spectrum-orange-400-rgb)); + --spectrum-orange-500-rgb: + 255, + 160, + 55; + --spectrum-orange-500: rgba(var(--spectrum-orange-500-rgb)); + --spectrum-orange-600-rgb: + 246, + 133, + 17; + --spectrum-orange-600: rgba(var(--spectrum-orange-600-rgb)); + --spectrum-orange-700-rgb: + 228, + 111, + 0; + --spectrum-orange-700: rgba(var(--spectrum-orange-700-rgb)); + --spectrum-orange-800-rgb: + 203, + 93, + 0; + --spectrum-orange-800: rgba(var(--spectrum-orange-800-rgb)); + --spectrum-orange-900-rgb: + 177, + 76, + 0; + --spectrum-orange-900: rgba(var(--spectrum-orange-900-rgb)); + --spectrum-orange-1000-rgb: + 149, + 61, + 0; + --spectrum-orange-1000: rgba(var(--spectrum-orange-1000-rgb)); + --spectrum-orange-1100-rgb: + 122, + 47, + 0; + --spectrum-orange-1100: rgba(var(--spectrum-orange-1100-rgb)); + --spectrum-orange-1200-rgb: + 97, + 35, + 0; + --spectrum-orange-1200: rgba(var(--spectrum-orange-1200-rgb)); + --spectrum-orange-1300-rgb: + 73, + 25, + 1; + --spectrum-orange-1300: rgba(var(--spectrum-orange-1300-rgb)); + --spectrum-orange-1400-rgb: + 53, + 18, + 1; + --spectrum-orange-1400: rgba(var(--spectrum-orange-1400-rgb)); + --spectrum-yellow-100-rgb: + 251, + 241, + 152; + --spectrum-yellow-100: rgba(var(--spectrum-yellow-100-rgb)); + --spectrum-yellow-200-rgb: + 248, + 231, + 80; + --spectrum-yellow-200: rgba(var(--spectrum-yellow-200-rgb)); + --spectrum-yellow-300-rgb: + 248, + 217, + 4; + --spectrum-yellow-300: rgba(var(--spectrum-yellow-300-rgb)); + --spectrum-yellow-400-rgb: + 232, + 198, + 0; + --spectrum-yellow-400: rgba(var(--spectrum-yellow-400-rgb)); + --spectrum-yellow-500-rgb: + 215, + 179, + 0; + --spectrum-yellow-500: rgba(var(--spectrum-yellow-500-rgb)); + --spectrum-yellow-600-rgb: + 196, + 159, + 0; + --spectrum-yellow-600: rgba(var(--spectrum-yellow-600-rgb)); + --spectrum-yellow-700-rgb: + 176, + 140, + 0; + --spectrum-yellow-700: rgba(var(--spectrum-yellow-700-rgb)); + --spectrum-yellow-800-rgb: + 155, + 120, + 0; + --spectrum-yellow-800: rgba(var(--spectrum-yellow-800-rgb)); + --spectrum-yellow-900-rgb: + 133, + 102, + 0; + --spectrum-yellow-900: rgba(var(--spectrum-yellow-900-rgb)); + --spectrum-yellow-1000-rgb: + 112, + 83, + 0; + --spectrum-yellow-1000: rgba(var(--spectrum-yellow-1000-rgb)); + --spectrum-yellow-1100-rgb: + 91, + 67, + 0; + --spectrum-yellow-1100: rgba(var(--spectrum-yellow-1100-rgb)); + --spectrum-yellow-1200-rgb: + 72, + 51, + 0; + --spectrum-yellow-1200: rgba(var(--spectrum-yellow-1200-rgb)); + --spectrum-yellow-1300-rgb: + 54, + 37, + 0; + --spectrum-yellow-1300: rgba(var(--spectrum-yellow-1300-rgb)); + --spectrum-yellow-1400-rgb: + 40, + 26, + 0; + --spectrum-yellow-1400: rgba(var(--spectrum-yellow-1400-rgb)); + --spectrum-chartreuse-100-rgb: + 219, + 252, + 110; + --spectrum-chartreuse-100: rgba(var(--spectrum-chartreuse-100-rgb)); + --spectrum-chartreuse-200-rgb: + 203, + 244, + 67; + --spectrum-chartreuse-200: rgba(var(--spectrum-chartreuse-200-rgb)); + --spectrum-chartreuse-300-rgb: + 188, + 233, + 42; + --spectrum-chartreuse-300: rgba(var(--spectrum-chartreuse-300-rgb)); + --spectrum-chartreuse-400-rgb: + 170, + 216, + 22; + --spectrum-chartreuse-400: rgba(var(--spectrum-chartreuse-400-rgb)); + --spectrum-chartreuse-500-rgb: + 152, + 197, + 10; + --spectrum-chartreuse-500: rgba(var(--spectrum-chartreuse-500-rgb)); + --spectrum-chartreuse-600-rgb: + 135, + 177, + 3; + --spectrum-chartreuse-600: rgba(var(--spectrum-chartreuse-600-rgb)); + --spectrum-chartreuse-700-rgb: + 118, + 156, + 0; + --spectrum-chartreuse-700: rgba(var(--spectrum-chartreuse-700-rgb)); + --spectrum-chartreuse-800-rgb: + 103, + 136, + 0; + --spectrum-chartreuse-800: rgba(var(--spectrum-chartreuse-800-rgb)); + --spectrum-chartreuse-900-rgb: + 87, + 116, + 0; + --spectrum-chartreuse-900: rgba(var(--spectrum-chartreuse-900-rgb)); + --spectrum-chartreuse-1000-rgb: + 72, + 96, + 0; + --spectrum-chartreuse-1000: rgba(var(--spectrum-chartreuse-1000-rgb)); + --spectrum-chartreuse-1100-rgb: + 58, + 77, + 0; + --spectrum-chartreuse-1100: rgba(var(--spectrum-chartreuse-1100-rgb)); + --spectrum-chartreuse-1200-rgb: + 44, + 59, + 0; + --spectrum-chartreuse-1200: rgba(var(--spectrum-chartreuse-1200-rgb)); + --spectrum-chartreuse-1300-rgb: + 33, + 44, + 0; + --spectrum-chartreuse-1300: rgba(var(--spectrum-chartreuse-1300-rgb)); + --spectrum-chartreuse-1400-rgb: + 24, + 31, + 0; + --spectrum-chartreuse-1400: rgba(var(--spectrum-chartreuse-1400-rgb)); + --spectrum-celery-100-rgb: + 205, + 252, + 191; + --spectrum-celery-100: rgba(var(--spectrum-celery-100-rgb)); + --spectrum-celery-200-rgb: + 174, + 246, + 157; + --spectrum-celery-200: rgba(var(--spectrum-celery-200-rgb)); + --spectrum-celery-300-rgb: + 150, + 238, + 133; + --spectrum-celery-300: rgba(var(--spectrum-celery-300-rgb)); + --spectrum-celery-400-rgb: + 114, + 224, + 106; + --spectrum-celery-400: rgba(var(--spectrum-celery-400-rgb)); + --spectrum-celery-500-rgb: + 78, + 207, + 80; + --spectrum-celery-500: rgba(var(--spectrum-celery-500-rgb)); + --spectrum-celery-600-rgb: + 39, + 187, + 54; + --spectrum-celery-600: rgba(var(--spectrum-celery-600-rgb)); + --spectrum-celery-700-rgb: + 7, + 167, + 33; + --spectrum-celery-700: rgba(var(--spectrum-celery-700-rgb)); + --spectrum-celery-800-rgb: + 0, + 145, + 18; + --spectrum-celery-800: rgba(var(--spectrum-celery-800-rgb)); + --spectrum-celery-900-rgb: + 0, + 124, + 15; + --spectrum-celery-900: rgba(var(--spectrum-celery-900-rgb)); + --spectrum-celery-1000-rgb: + 0, + 103, + 15; + --spectrum-celery-1000: rgba(var(--spectrum-celery-1000-rgb)); + --spectrum-celery-1100-rgb: + 0, + 83, + 13; + --spectrum-celery-1100: rgba(var(--spectrum-celery-1100-rgb)); + --spectrum-celery-1200-rgb: + 0, + 64, + 10; + --spectrum-celery-1200: rgba(var(--spectrum-celery-1200-rgb)); + --spectrum-celery-1300-rgb: + 0, + 48, + 7; + --spectrum-celery-1300: rgba(var(--spectrum-celery-1300-rgb)); + --spectrum-celery-1400-rgb: + 0, + 34, + 5; + --spectrum-celery-1400: rgba(var(--spectrum-celery-1400-rgb)); + --spectrum-green-100-rgb: + 206, + 248, + 224; + --spectrum-green-100: rgba(var(--spectrum-green-100-rgb)); + --spectrum-green-200-rgb: + 173, + 244, + 206; + --spectrum-green-200: rgba(var(--spectrum-green-200-rgb)); + --spectrum-green-300-rgb: + 137, + 236, + 188; + --spectrum-green-300: rgba(var(--spectrum-green-300-rgb)); + --spectrum-green-400-rgb: + 103, + 222, + 168; + --spectrum-green-400: rgba(var(--spectrum-green-400-rgb)); + --spectrum-green-500-rgb: + 73, + 204, + 147; + --spectrum-green-500: rgba(var(--spectrum-green-500-rgb)); + --spectrum-green-600-rgb: + 47, + 184, + 128; + --spectrum-green-600: rgba(var(--spectrum-green-600-rgb)); + --spectrum-green-700-rgb: + 21, + 164, + 110; + --spectrum-green-700: rgba(var(--spectrum-green-700-rgb)); + --spectrum-green-800-rgb: + 0, + 143, + 93; + --spectrum-green-800: rgba(var(--spectrum-green-800-rgb)); + --spectrum-green-900-rgb: + 0, + 122, + 77; + --spectrum-green-900: rgba(var(--spectrum-green-900-rgb)); + --spectrum-green-1000-rgb: + 0, + 101, + 62; + --spectrum-green-1000: rgba(var(--spectrum-green-1000-rgb)); + --spectrum-green-1100-rgb: + 0, + 81, + 50; + --spectrum-green-1100: rgba(var(--spectrum-green-1100-rgb)); + --spectrum-green-1200-rgb: + 5, + 63, + 39; + --spectrum-green-1200: rgba(var(--spectrum-green-1200-rgb)); + --spectrum-green-1300-rgb: + 10, + 46, + 29; + --spectrum-green-1300: rgba(var(--spectrum-green-1300-rgb)); + --spectrum-green-1400-rgb: + 10, + 32, + 21; + --spectrum-green-1400: rgba(var(--spectrum-green-1400-rgb)); + --spectrum-seafoam-100-rgb: + 206, + 247, + 243; + --spectrum-seafoam-100: rgba(var(--spectrum-seafoam-100-rgb)); + --spectrum-seafoam-200-rgb: + 170, + 241, + 234; + --spectrum-seafoam-200: rgba(var(--spectrum-seafoam-200-rgb)); + --spectrum-seafoam-300-rgb: + 140, + 233, + 226; + --spectrum-seafoam-300: rgba(var(--spectrum-seafoam-300-rgb)); + --spectrum-seafoam-400-rgb: + 101, + 218, + 210; + --spectrum-seafoam-400: rgba(var(--spectrum-seafoam-400-rgb)); + --spectrum-seafoam-500-rgb: + 63, + 201, + 193; + --spectrum-seafoam-500: rgba(var(--spectrum-seafoam-500-rgb)); + --spectrum-seafoam-600-rgb: + 15, + 181, + 174; + --spectrum-seafoam-600: rgba(var(--spectrum-seafoam-600-rgb)); + --spectrum-seafoam-700-rgb: + 0, + 161, + 154; + --spectrum-seafoam-700: rgba(var(--spectrum-seafoam-700-rgb)); + --spectrum-seafoam-800-rgb: + 0, + 140, + 135; + --spectrum-seafoam-800: rgba(var(--spectrum-seafoam-800-rgb)); + --spectrum-seafoam-900-rgb: + 0, + 119, + 114; + --spectrum-seafoam-900: rgba(var(--spectrum-seafoam-900-rgb)); + --spectrum-seafoam-1000-rgb: + 0, + 99, + 95; + --spectrum-seafoam-1000: rgba(var(--spectrum-seafoam-1000-rgb)); + --spectrum-seafoam-1100-rgb: + 12, + 79, + 76; + --spectrum-seafoam-1100: rgba(var(--spectrum-seafoam-1100-rgb)); + --spectrum-seafoam-1200-rgb: + 18, + 60, + 58; + --spectrum-seafoam-1200: rgba(var(--spectrum-seafoam-1200-rgb)); + --spectrum-seafoam-1300-rgb: + 18, + 44, + 43; + --spectrum-seafoam-1300: rgba(var(--spectrum-seafoam-1300-rgb)); + --spectrum-seafoam-1400-rgb: + 15, + 31, + 30; + --spectrum-seafoam-1400: rgba(var(--spectrum-seafoam-1400-rgb)); + --spectrum-cyan-100-rgb: + 197, + 248, + 255; + --spectrum-cyan-100: rgba(var(--spectrum-cyan-100-rgb)); + --spectrum-cyan-200-rgb: + 164, + 240, + 255; + --spectrum-cyan-200: rgba(var(--spectrum-cyan-200-rgb)); + --spectrum-cyan-300-rgb: + 136, + 231, + 250; + --spectrum-cyan-300: rgba(var(--spectrum-cyan-300-rgb)); + --spectrum-cyan-400-rgb: + 96, + 216, + 243; + --spectrum-cyan-400: rgba(var(--spectrum-cyan-400-rgb)); + --spectrum-cyan-500-rgb: + 51, + 197, + 232; + --spectrum-cyan-500: rgba(var(--spectrum-cyan-500-rgb)); + --spectrum-cyan-600-rgb: + 18, + 176, + 218; + --spectrum-cyan-600: rgba(var(--spectrum-cyan-600-rgb)); + --spectrum-cyan-700-rgb: + 1, + 156, + 200; + --spectrum-cyan-700: rgba(var(--spectrum-cyan-700-rgb)); + --spectrum-cyan-800-rgb: + 0, + 134, + 180; + --spectrum-cyan-800: rgba(var(--spectrum-cyan-800-rgb)); + --spectrum-cyan-900-rgb: + 0, + 113, + 159; + --spectrum-cyan-900: rgba(var(--spectrum-cyan-900-rgb)); + --spectrum-cyan-1000-rgb: + 0, + 93, + 137; + --spectrum-cyan-1000: rgba(var(--spectrum-cyan-1000-rgb)); + --spectrum-cyan-1100-rgb: + 0, + 74, + 115; + --spectrum-cyan-1100: rgba(var(--spectrum-cyan-1100-rgb)); + --spectrum-cyan-1200-rgb: + 0, + 57, + 93; + --spectrum-cyan-1200: rgba(var(--spectrum-cyan-1200-rgb)); + --spectrum-cyan-1300-rgb: + 0, + 42, + 70; + --spectrum-cyan-1300: rgba(var(--spectrum-cyan-1300-rgb)); + --spectrum-cyan-1400-rgb: + 0, + 30, + 51; + --spectrum-cyan-1400: rgba(var(--spectrum-cyan-1400-rgb)); + --spectrum-indigo-100-rgb: + 237, + 238, + 255; + --spectrum-indigo-100: rgba(var(--spectrum-indigo-100-rgb)); + --spectrum-indigo-200-rgb: + 224, + 226, + 255; + --spectrum-indigo-200: rgba(var(--spectrum-indigo-200-rgb)); + --spectrum-indigo-300-rgb: + 211, + 213, + 255; + --spectrum-indigo-300: rgba(var(--spectrum-indigo-300-rgb)); + --spectrum-indigo-400-rgb: + 193, + 196, + 255; + --spectrum-indigo-400: rgba(var(--spectrum-indigo-400-rgb)); + --spectrum-indigo-500-rgb: + 172, + 175, + 255; + --spectrum-indigo-500: rgba(var(--spectrum-indigo-500-rgb)); + --spectrum-indigo-600-rgb: + 149, + 153, + 255; + --spectrum-indigo-600: rgba(var(--spectrum-indigo-600-rgb)); + --spectrum-indigo-700-rgb: + 126, + 132, + 252; + --spectrum-indigo-700: rgba(var(--spectrum-indigo-700-rgb)); + --spectrum-indigo-800-rgb: + 104, + 109, + 244; + --spectrum-indigo-800: rgba(var(--spectrum-indigo-800-rgb)); + --spectrum-indigo-900-rgb: + 82, + 88, + 228; + --spectrum-indigo-900: rgba(var(--spectrum-indigo-900-rgb)); + --spectrum-indigo-1000-rgb: + 64, + 70, + 202; + --spectrum-indigo-1000: rgba(var(--spectrum-indigo-1000-rgb)); + --spectrum-indigo-1100-rgb: + 50, + 54, + 168; + --spectrum-indigo-1100: rgba(var(--spectrum-indigo-1100-rgb)); + --spectrum-indigo-1200-rgb: + 38, + 41, + 134; + --spectrum-indigo-1200: rgba(var(--spectrum-indigo-1200-rgb)); + --spectrum-indigo-1300-rgb: + 27, + 30, + 100; + --spectrum-indigo-1300: rgba(var(--spectrum-indigo-1300-rgb)); + --spectrum-indigo-1400-rgb: + 20, + 22, + 72; + --spectrum-indigo-1400: rgba(var(--spectrum-indigo-1400-rgb)); + --spectrum-purple-100-rgb: + 246, + 235, + 255; + --spectrum-purple-100: rgba(var(--spectrum-purple-100-rgb)); + --spectrum-purple-200-rgb: + 238, + 221, + 255; + --spectrum-purple-200: rgba(var(--spectrum-purple-200-rgb)); + --spectrum-purple-300-rgb: + 230, + 208, + 255; + --spectrum-purple-300: rgba(var(--spectrum-purple-300-rgb)); + --spectrum-purple-400-rgb: + 219, + 187, + 254; + --spectrum-purple-400: rgba(var(--spectrum-purple-400-rgb)); + --spectrum-purple-500-rgb: + 204, + 164, + 253; + --spectrum-purple-500: rgba(var(--spectrum-purple-500-rgb)); + --spectrum-purple-600-rgb: + 189, + 139, + 252; + --spectrum-purple-600: rgba(var(--spectrum-purple-600-rgb)); + --spectrum-purple-700-rgb: + 174, + 114, + 249; + --spectrum-purple-700: rgba(var(--spectrum-purple-700-rgb)); + --spectrum-purple-800-rgb: + 157, + 87, + 244; + --spectrum-purple-800: rgba(var(--spectrum-purple-800-rgb)); + --spectrum-purple-900-rgb: + 137, + 61, + 231; + --spectrum-purple-900: rgba(var(--spectrum-purple-900-rgb)); + --spectrum-purple-1000-rgb: + 115, + 38, + 211; + --spectrum-purple-1000: rgba(var(--spectrum-purple-1000-rgb)); + --spectrum-purple-1100-rgb: + 93, + 19, + 183; + --spectrum-purple-1100: rgba(var(--spectrum-purple-1100-rgb)); + --spectrum-purple-1200-rgb: + 71, + 12, + 148; + --spectrum-purple-1200: rgba(var(--spectrum-purple-1200-rgb)); + --spectrum-purple-1300-rgb: + 51, + 16, + 106; + --spectrum-purple-1300: rgba(var(--spectrum-purple-1300-rgb)); + --spectrum-purple-1400-rgb: + 35, + 15, + 73; + --spectrum-purple-1400: rgba(var(--spectrum-purple-1400-rgb)); + --spectrum-fuchsia-100-rgb: + 255, + 233, + 252; + --spectrum-fuchsia-100: rgba(var(--spectrum-fuchsia-100-rgb)); + --spectrum-fuchsia-200-rgb: + 255, + 218, + 250; + --spectrum-fuchsia-200: rgba(var(--spectrum-fuchsia-200-rgb)); + --spectrum-fuchsia-300-rgb: + 254, + 199, + 248; + --spectrum-fuchsia-300: rgba(var(--spectrum-fuchsia-300-rgb)); + --spectrum-fuchsia-400-rgb: + 251, + 174, + 246; + --spectrum-fuchsia-400: rgba(var(--spectrum-fuchsia-400-rgb)); + --spectrum-fuchsia-500-rgb: + 245, + 146, + 243; + --spectrum-fuchsia-500: rgba(var(--spectrum-fuchsia-500-rgb)); + --spectrum-fuchsia-600-rgb: + 237, + 116, + 237; + --spectrum-fuchsia-600: rgba(var(--spectrum-fuchsia-600-rgb)); + --spectrum-fuchsia-700-rgb: + 224, + 85, + 226; + --spectrum-fuchsia-700: rgba(var(--spectrum-fuchsia-700-rgb)); + --spectrum-fuchsia-800-rgb: + 205, + 58, + 206; + --spectrum-fuchsia-800: rgba(var(--spectrum-fuchsia-800-rgb)); + --spectrum-fuchsia-900-rgb: + 182, + 34, + 183; + --spectrum-fuchsia-900: rgba(var(--spectrum-fuchsia-900-rgb)); + --spectrum-fuchsia-1000-rgb: + 157, + 3, + 158; + --spectrum-fuchsia-1000: rgba(var(--spectrum-fuchsia-1000-rgb)); + --spectrum-fuchsia-1100-rgb: + 128, + 0, + 129; + --spectrum-fuchsia-1100: rgba(var(--spectrum-fuchsia-1100-rgb)); + --spectrum-fuchsia-1200-rgb: + 100, + 6, + 100; + --spectrum-fuchsia-1200: rgba(var(--spectrum-fuchsia-1200-rgb)); + --spectrum-fuchsia-1300-rgb: + 71, + 14, + 70; + --spectrum-fuchsia-1300: rgba(var(--spectrum-fuchsia-1300-rgb)); + --spectrum-fuchsia-1400-rgb: + 50, + 13, + 49; + --spectrum-fuchsia-1400: rgba(var(--spectrum-fuchsia-1400-rgb)); + --spectrum-magenta-100-rgb: + 255, + 234, + 241; + --spectrum-magenta-100: rgba(var(--spectrum-magenta-100-rgb)); + --spectrum-magenta-200-rgb: + 255, + 220, + 232; + --spectrum-magenta-200: rgba(var(--spectrum-magenta-200-rgb)); + --spectrum-magenta-300-rgb: + 255, + 202, + 221; + --spectrum-magenta-300: rgba(var(--spectrum-magenta-300-rgb)); + --spectrum-magenta-400-rgb: + 255, + 178, + 206; + --spectrum-magenta-400: rgba(var(--spectrum-magenta-400-rgb)); + --spectrum-magenta-500-rgb: + 255, + 149, + 189; + --spectrum-magenta-500: rgba(var(--spectrum-magenta-500-rgb)); + --spectrum-magenta-600-rgb: + 250, + 119, + 170; + --spectrum-magenta-600: rgba(var(--spectrum-magenta-600-rgb)); + --spectrum-magenta-700-rgb: + 239, + 90, + 152; + --spectrum-magenta-700: rgba(var(--spectrum-magenta-700-rgb)); + --spectrum-magenta-800-rgb: + 222, + 61, + 130; + --spectrum-magenta-800: rgba(var(--spectrum-magenta-800-rgb)); + --spectrum-magenta-900-rgb: + 200, + 34, + 105; + --spectrum-magenta-900: rgba(var(--spectrum-magenta-900-rgb)); + --spectrum-magenta-1000-rgb: + 173, + 9, + 85; + --spectrum-magenta-1000: rgba(var(--spectrum-magenta-1000-rgb)); + --spectrum-magenta-1100-rgb: + 142, + 0, + 69; + --spectrum-magenta-1100: rgba(var(--spectrum-magenta-1100-rgb)); + --spectrum-magenta-1200-rgb: + 112, + 0, + 55; + --spectrum-magenta-1200: rgba(var(--spectrum-magenta-1200-rgb)); + --spectrum-magenta-1300-rgb: + 84, + 3, + 42; + --spectrum-magenta-1300: rgba(var(--spectrum-magenta-1300-rgb)); + --spectrum-magenta-1400-rgb: + 60, + 6, + 29; + --spectrum-magenta-1400: rgba(var(--spectrum-magenta-1400-rgb)); + --spectrum-icon-color-blue-primary-default: var(--spectrum-blue-900); + --spectrum-icon-color-green-primary-default: var(--spectrum-green-900); + --spectrum-icon-color-red-primary-default: var(--spectrum-red-900); + --spectrum-icon-color-yellow-primary-default: var(--spectrum-yellow-400); +} +.spectrum--medium { + --spectrum-workflow-icon-size-50: 14px; + --spectrum-workflow-icon-size-75: 16px; + --spectrum-workflow-icon-size-100: 18px; + --spectrum-workflow-icon-size-200: 20px; + --spectrum-workflow-icon-size-300: 22px; + --spectrum-arrow-icon-size-75: 10px; + --spectrum-arrow-icon-size-100: 10px; + --spectrum-arrow-icon-size-200: 12px; + --spectrum-arrow-icon-size-300: 14px; + --spectrum-arrow-icon-size-400: 16px; + --spectrum-arrow-icon-size-500: 18px; + --spectrum-arrow-icon-size-600: 20px; + --spectrum-asterisk-icon-size-100: 8px; + --spectrum-asterisk-icon-size-200: 10px; + --spectrum-asterisk-icon-size-300: 10px; + --spectrum-checkmark-icon-size-50: 10px; + --spectrum-checkmark-icon-size-75: 10px; + --spectrum-checkmark-icon-size-100: 10px; + --spectrum-checkmark-icon-size-200: 12px; + --spectrum-checkmark-icon-size-300: 14px; + --spectrum-checkmark-icon-size-400: 16px; + --spectrum-checkmark-icon-size-500: 16px; + --spectrum-checkmark-icon-size-600: 18px; + --spectrum-chevron-icon-size-50: 6px; + --spectrum-chevron-icon-size-75: 10px; + --spectrum-chevron-icon-size-100: 10px; + --spectrum-chevron-icon-size-200: 12px; + --spectrum-chevron-icon-size-300: 14px; + --spectrum-chevron-icon-size-400: 16px; + --spectrum-chevron-icon-size-500: 16px; + --spectrum-chevron-icon-size-600: 18px; + --spectrum-corner-triangle-icon-size-75: 5px; + --spectrum-corner-triangle-icon-size-100: 5px; + --spectrum-corner-triangle-icon-size-200: 6px; + --spectrum-corner-triangle-icon-size-300: 7px; + --spectrum-cross-icon-size-75: 8px; + --spectrum-cross-icon-size-100: 8px; + --spectrum-cross-icon-size-200: 10px; + --spectrum-cross-icon-size-300: 12px; + --spectrum-cross-icon-size-400: 12px; + --spectrum-cross-icon-size-500: 14px; + --spectrum-cross-icon-size-600: 16px; + --spectrum-dash-icon-size-50: 8px; + --spectrum-dash-icon-size-75: 8px; + --spectrum-dash-icon-size-100: 10px; + --spectrum-dash-icon-size-200: 12px; + --spectrum-dash-icon-size-300: 12px; + --spectrum-dash-icon-size-400: 14px; + --spectrum-dash-icon-size-500: 16px; + --spectrum-dash-icon-size-600: 18px; + --spectrum-field-label-text-to-asterisk-small: 4px; + --spectrum-field-label-text-to-asterisk-medium: 4px; + --spectrum-field-label-text-to-asterisk-large: 5px; + --spectrum-field-label-text-to-asterisk-extra-large: 5px; + --spectrum-field-label-top-to-asterisk-small: 8px; + --spectrum-field-label-top-to-asterisk-medium: 12px; + --spectrum-field-label-top-to-asterisk-large: 15px; + --spectrum-field-label-top-to-asterisk-extra-large: 19px; + --spectrum-field-label-top-margin-medium: 4px; + --spectrum-field-label-top-margin-large: 5px; + --spectrum-field-label-top-margin-extra-large: 5px; + --spectrum-field-label-to-component-quiet-small: -8px; + --spectrum-field-label-to-component-quiet-medium: -8px; + --spectrum-field-label-to-component-quiet-large: -12px; + --spectrum-field-label-to-component-quiet-extra-large: -15px; + --spectrum-help-text-top-to-workflow-icon-small: 4px; + --spectrum-help-text-top-to-workflow-icon-medium: 3px; + --spectrum-help-text-top-to-workflow-icon-large: 6px; + --spectrum-help-text-top-to-workflow-icon-extra-large: 9px; + --spectrum-status-light-dot-size-medium: 8px; + --spectrum-status-light-dot-size-large: 10px; + --spectrum-status-light-dot-size-extra-large: 10px; + --spectrum-status-light-top-to-dot-small: 8px; + --spectrum-status-light-top-to-dot-medium: 12px; + --spectrum-status-light-top-to-dot-large: 15px; + --spectrum-status-light-top-to-dot-extra-large: 19px; + --spectrum-action-button-edge-to-hold-icon-medium: 4px; + --spectrum-action-button-edge-to-hold-icon-large: 5px; + --spectrum-action-button-edge-to-hold-icon-extra-large: 6px; + --spectrum-tooltip-tip-width: 8px; + --spectrum-tooltip-tip-height: 4px; + --spectrum-tooltip-maximum-width: 160px; + --spectrum-progress-circle-size-small: 16px; + --spectrum-progress-circle-size-medium: 32px; + --spectrum-progress-circle-size-large: 64px; + --spectrum-progress-circle-thickness-small: 2px; + --spectrum-progress-circle-thickness-medium: 3px; + --spectrum-progress-circle-thickness-large: 4px; + --spectrum-toast-height: 48px; + --spectrum-toast-maximum-width: 336px; + --spectrum-toast-top-to-workflow-icon: 15px; + --spectrum-toast-top-to-text: 14px; + --spectrum-toast-bottom-to-text: 17px; + --spectrum-action-bar-height: 48px; + --spectrum-action-bar-top-to-item-counter: 14px; + --spectrum-swatch-size-extra-small: 16px; + --spectrum-swatch-size-small: 24px; + --spectrum-swatch-size-medium: 32px; + --spectrum-swatch-size-large: 40px; + --spectrum-progress-bar-thickness-small: 4px; + --spectrum-progress-bar-thickness-medium: 6px; + --spectrum-progress-bar-thickness-large: 8px; + --spectrum-progress-bar-thickness-extra-large: 10px; + --spectrum-meter-width: 192px; + --spectrum-meter-thickness-small: 4px; + --spectrum-meter-thickness-large: 6px; + --spectrum-tag-top-to-avatar-small: 4px; + --spectrum-tag-top-to-avatar-medium: 6px; + --spectrum-tag-top-to-avatar-large: 9px; + --spectrum-tag-top-to-cross-icon-small: 8px; + --spectrum-tag-top-to-cross-icon-medium: 12px; + --spectrum-tag-top-to-cross-icon-large: 15px; + --spectrum-popover-top-to-content-area: 4px; + --spectrum-menu-item-edge-to-content-not-selected-small: 28px; + --spectrum-menu-item-edge-to-content-not-selected-medium: 32px; + --spectrum-menu-item-edge-to-content-not-selected-large: 38px; + --spectrum-menu-item-edge-to-content-not-selected-extra-large: 45px; + --spectrum-menu-item-top-to-disclosure-icon-small: 7px; + --spectrum-menu-item-top-to-disclosure-icon-medium: 11px; + --spectrum-menu-item-top-to-disclosure-icon-large: 14px; + --spectrum-menu-item-top-to-disclosure-icon-extra-large: 17px; + --spectrum-menu-item-top-to-selected-icon-small: 7px; + --spectrum-menu-item-top-to-selected-icon-medium: 11px; + --spectrum-menu-item-top-to-selected-icon-large: 14px; + --spectrum-menu-item-top-to-selected-icon-extra-large: 17px; + --spectrum-slider-control-to-field-label-small: 5px; + --spectrum-slider-control-to-field-label-medium: 8px; + --spectrum-slider-control-to-field-label-large: 11px; + --spectrum-slider-control-to-field-label-extra-large: 14px; + --spectrum-picker-visual-to-disclosure-icon-small: 7px; + --spectrum-picker-visual-to-disclosure-icon-medium: 8px; + --spectrum-picker-visual-to-disclosure-icon-large: 9px; + --spectrum-picker-visual-to-disclosure-icon-extra-large: 10px; + --spectrum-text-area-minimum-width: 112px; + --spectrum-text-area-minimum-height: 56px; + --spectrum-combo-box-visual-to-field-button-small: 7px; + --spectrum-combo-box-visual-to-field-button-medium: 8px; + --spectrum-combo-box-visual-to-field-button-large: 9px; + --spectrum-combo-box-visual-to-field-button-extra-large: 10px; + --spectrum-thumbnail-size-50: 16px; + --spectrum-thumbnail-size-75: 18px; + --spectrum-thumbnail-size-100: 20px; + --spectrum-thumbnail-size-200: 22px; + --spectrum-thumbnail-size-300: 26px; + --spectrum-thumbnail-size-400: 28px; + --spectrum-thumbnail-size-500: 32px; + --spectrum-thumbnail-size-600: 36px; + --spectrum-thumbnail-size-700: 40px; + --spectrum-thumbnail-size-800: 44px; + --spectrum-thumbnail-size-900: 50px; + --spectrum-thumbnail-size-1000: 56px; + --spectrum-alert-dialog-title-size: var(--spectrum-heading-size-s); + --spectrum-alert-dialog-description-size: var(--spectrum-body-size-s); + --spectrum-opacity-checkerboard-square-size: 8px; + --spectrum-contextual-help-title-size: var(--spectrum-heading-size-xs); + --spectrum-contextual-help-body-size: var(--spectrum-body-size-s); + --spectrum-breadcrumbs-height-multiline: 72px; + --spectrum-breadcrumbs-top-to-text: 13px; + --spectrum-breadcrumbs-top-to-text-compact: 11px; + --spectrum-breadcrumbs-top-to-text-multiline: 12px; + --spectrum-breadcrumbs-bottom-to-text: 15px; + --spectrum-breadcrumbs-bottom-to-text-compact: 12px; + --spectrum-breadcrumbs-bottom-to-text-multiline: 9px; + --spectrum-breadcrumbs-start-edge-to-text: 8px; + --spectrum-breadcrumbs-top-text-to-bottom-text: 9px; + --spectrum-breadcrumbs-top-to-separator-icon: 19px; + --spectrum-breadcrumbs-top-to-separator-icon-compact: 15px; + --spectrum-breadcrumbs-top-to-separator-icon-multiline: 15px; + --spectrum-breadcrumbs-separator-icon-to-bottom-text-multiline: 11px; + --spectrum-breadcrumbs-top-to-truncated-menu: 8px; + --spectrum-breadcrumbs-top-to-truncated-menu-compact: 4px; + --spectrum-avatar-size-50: 16px; + --spectrum-avatar-size-75: 18px; + --spectrum-avatar-size-100: 20px; + --spectrum-avatar-size-200: 22px; + --spectrum-avatar-size-300: 26px; + --spectrum-avatar-size-400: 28px; + --spectrum-avatar-size-500: 32px; + --spectrum-avatar-size-600: 36px; + --spectrum-avatar-size-700: 40px; + --spectrum-alert-banner-minimum-height: 48px; + --spectrum-alert-banner-width: 832px; + --spectrum-alert-banner-top-to-workflow-icon: 15px; + --spectrum-alert-banner-top-to-text: 14px; + --spectrum-alert-banner-bottom-to-text: 17px; + --spectrum-rating-indicator-width: 18px; + --spectrum-rating-indicator-to-icon: 4px; + --spectrum-color-area-width: 192px; + --spectrum-color-area-minimum-width: 64px; + --spectrum-color-area-height: 192px; + --spectrum-color-area-minimum-height: 64px; + --spectrum-color-wheel-width: 192px; + --spectrum-color-wheel-minimum-width: 175px; + --spectrum-color-slider-length: 192px; + --spectrum-color-slider-minimum-length: 80px; + --spectrum-illustrated-message-title-size: var(--spectrum-heading-size-m); + --spectrum-illustrated-message-cjk-title-size: var(--spectrum-heading-cjk-size-m); + --spectrum-illustrated-message-body-size: var(--spectrum-body-size-s); + --spectrum-coach-mark-width: 296px; + --spectrum-coach-mark-minimum-width: 296px; + --spectrum-coach-mark-maximum-width: 380px; + --spectrum-coach-mark-edge-to-content: var(--spectrum-spacing-400); + --spectrum-coach-mark-pagination-text-to-bottom-edge: 33px; + --spectrum-coach-mark-media-height: 222px; + --spectrum-coach-mark-media-minimum-height: 166px; + --spectrum-coach-mark-title-size: var(--spectrum-heading-size-xs); + --spectrum-coach-mark-body-size: var(--spectrum-body-size-s); + --spectrum-coach-mark-pagination-body-size: var(--spectrum-body-size-s); + --spectrum-accordion-top-to-text-regular-small: 5px; + --spectrum-accordion-small-top-to-text-spacious: 9px; + --spectrum-accordion-top-to-text-regular-medium: 8px; + --spectrum-accordion-top-to-text-spacious-medium: 12px; + --spectrum-accordion-top-to-text-compact-large: 4px; + --spectrum-accordion-top-to-text-regular-large: 9px; + --spectrum-accordion-top-to-text-spacious-large: 12px; + --spectrum-accordion-top-to-text-compact-extra-large: 5px; + --spectrum-accordion-top-to-text-regular-extra-large: 9px; + --spectrum-accordion-top-to-text-spacious-extra-large: 13px; + --spectrum-accordion-bottom-to-text-compact-small: 2px; + --spectrum-accordion-bottom-to-text-regular-small: 7px; + --spectrum-accordion-bottom-to-text-spacious-small: 11px; + --spectrum-accordion-bottom-to-text-compact-medium: 5px; + --spectrum-accordion-bottom-to-text-regular-medium: 9px; + --spectrum-accordion-bottom-to-text-spacious-medium: 13px; + --spectrum-accordion-bottom-to-text-compact-large: 8px; + --spectrum-accordion-bottom-to-text-regular-large: 11px; + --spectrum-accordion-bottom-to-text-spacious-large: 16px; + --spectrum-accordion-bottom-to-text-compact-extra-large: 8px; + --spectrum-accordion-bottom-to-text-regular-extra-large: 12px; + --spectrum-accordion-bottom-to-text-spacious-extra-large: 16px; + --spectrum-accordion-minimum-width: 200px; + --spectrum-accordion-content-area-top-to-content: 8px; + --spectrum-accordion-content-area-bottom-to-content: 16px; + --spectrum-color-handle-size: 16px; + --spectrum-color-handle-size-key-focus: 32px; + --spectrum-table-column-header-row-top-to-text-small: 8px; + --spectrum-table-column-header-row-top-to-text-medium: 7px; + --spectrum-table-column-header-row-top-to-text-large: 10px; + --spectrum-table-column-header-row-top-to-text-extra-large: 13px; + --spectrum-table-column-header-row-bottom-to-text-small: 9px; + --spectrum-table-column-header-row-bottom-to-text-medium: 8px; + --spectrum-table-column-header-row-bottom-to-text-large: 10px; + --spectrum-table-column-header-row-bottom-to-text-extra-large: 13px; + --spectrum-table-row-height-small-regular: 32px; + --spectrum-table-row-height-medium-regular: 40px; + --spectrum-table-row-height-large-regular: 48px; + --spectrum-table-row-height-extra-large-regular: 56px; + --spectrum-table-row-height-small-spacious: 40px; + --spectrum-table-row-height-medium-spacious: 48px; + --spectrum-table-row-height-large-spacious: 56px; + --spectrum-table-row-height-extra-large-spacious: 64px; + --spectrum-table-row-top-to-text-small-regular: 8px; + --spectrum-table-row-top-to-text-medium-regular: 11px; + --spectrum-table-row-top-to-text-large-regular: 14px; + --spectrum-table-row-top-to-text-extra-large-regular: 17px; + --spectrum-table-row-bottom-to-text-small-regular: 9px; + --spectrum-table-row-bottom-to-text-medium-regular: 12px; + --spectrum-table-row-bottom-to-text-large-regular: 14px; + --spectrum-table-row-bottom-to-text-extra-large-regular: 17px; + --spectrum-table-row-top-to-text-small-spacious: 12px; + --spectrum-table-row-top-to-text-medium-spacious: 15px; + --spectrum-table-row-top-to-text-large-spacious: 18px; + --spectrum-table-row-top-to-text-extra-large-spacious: 21px; + --spectrum-table-row-bottom-to-text-small-spacious: 13px; + --spectrum-table-row-bottom-to-text-medium-spacious: 16px; + --spectrum-table-row-bottom-to-text-large-spacious: 18px; + --spectrum-table-row-bottom-to-text-extra-large-spacious: 21px; + --spectrum-table-checkbox-to-text: 24px; + --spectrum-table-header-row-checkbox-to-top-small: 10px; + --spectrum-table-header-row-checkbox-to-top-medium: 9px; + --spectrum-table-header-row-checkbox-to-top-large: 12px; + --spectrum-table-header-row-checkbox-to-top-extra-large: 15px; + --spectrum-table-row-checkbox-to-top-small-compact: 6px; + --spectrum-table-row-checkbox-to-top-small-regular: 10px; + --spectrum-table-row-checkbox-to-top-small-spacious: 14px; + --spectrum-table-row-checkbox-to-top-medium-compact: 9px; + --spectrum-table-row-checkbox-to-top-medium-regular: 13px; + --spectrum-table-row-checkbox-to-top-medium-spacious: 17px; + --spectrum-table-row-checkbox-to-top-large-compact: 12px; + --spectrum-table-row-checkbox-to-top-large-regular: 16px; + --spectrum-table-row-checkbox-to-top-large-spacious: 20px; + --spectrum-table-row-checkbox-to-top-extra-large-compact: 15px; + --spectrum-table-row-checkbox-to-top-extra-large-regular: 19px; + --spectrum-table-row-checkbox-to-top-extra-large-spacious: 23px; + --spectrum-table-section-header-row-height-small: 24px; + --spectrum-table-section-header-row-height-medium: 32px; + --spectrum-table-section-header-row-height-large: 40px; + --spectrum-table-section-header-row-height-extra-large: 48px; + --spectrum-table-thumbnail-to-top-minimum-small-compact: 4px; + --spectrum-table-thumbnail-to-top-minimum-medium-compact: 5px; + --spectrum-table-thumbnail-to-top-minimum-large-compact: 7px; + --spectrum-table-thumbnail-to-top-minimum-extra-large-compact: 8px; + --spectrum-table-thumbnail-to-top-minimum-small-regular: 5px; + --spectrum-table-thumbnail-to-top-minimum-medium-regular: 7px; + --spectrum-table-thumbnail-to-top-minimum-large-regular: 8px; + --spectrum-table-thumbnail-to-top-minimum-extra-large-regular: 8px; + --spectrum-table-thumbnail-to-top-minimum-small-spacious: 7px; + --spectrum-table-thumbnail-to-top-minimum-medium-spacious: 8px; + --spectrum-table-thumbnail-to-top-minimum-large-spacious: 8px; + --spectrum-table-thumbnail-to-top-minimum-extra-large-spacious: 10px; + --spectrum-tab-item-to-tab-item-horizontal-small: 21px; + --spectrum-tab-item-to-tab-item-horizontal-medium: 24px; + --spectrum-tab-item-to-tab-item-horizontal-large: 27px; + --spectrum-tab-item-to-tab-item-horizontal-extra-large: 30px; + --spectrum-tab-item-to-tab-item-vertical-small: 4px; + --spectrum-tab-item-to-tab-item-vertical-medium: 4px; + --spectrum-tab-item-to-tab-item-vertical-large: 5px; + --spectrum-tab-item-to-tab-item-vertical-extra-large: 5px; + --spectrum-tab-item-start-to-edge-small: 12px; + --spectrum-tab-item-start-to-edge-medium: 12px; + --spectrum-tab-item-start-to-edge-large: 13px; + --spectrum-tab-item-start-to-edge-extra-large: 13px; + --spectrum-tab-item-top-to-text-small: 11px; + --spectrum-tab-item-bottom-to-text-small: 12px; + --spectrum-tab-item-top-to-text-medium: 14px; + --spectrum-tab-item-bottom-to-text-medium: 14px; + --spectrum-tab-item-top-to-text-large: 16px; + --spectrum-tab-item-bottom-to-text-large: 18px; + --spectrum-tab-item-top-to-text-extra-large: 19px; + --spectrum-tab-item-bottom-to-text-extra-large: 20px; + --spectrum-tab-item-top-to-text-compact-small: 4px; + --spectrum-tab-item-bottom-to-text-compact-small: 5px; + --spectrum-tab-item-top-to-text-compact-medium: 6px; + --spectrum-tab-item-bottom-to-text-compact-medium: 8px; + --spectrum-tab-item-top-to-text-compact-large: 10px; + --spectrum-tab-item-bottom-to-text-compact-large: 12px; + --spectrum-tab-item-top-to-text-compact-extra-large: 12px; + --spectrum-tab-item-bottom-to-text-compact-extra-large: 13px; + --spectrum-tab-item-top-to-workflow-icon-small: 13px; + --spectrum-tab-item-top-to-workflow-icon-medium: 15px; + --spectrum-tab-item-top-to-workflow-icon-large: 17px; + --spectrum-tab-item-top-to-workflow-icon-extra-large: 19px; + --spectrum-tab-item-top-to-workflow-icon-compact-small: 3px; + --spectrum-tab-item-top-to-workflow-icon-compact-medium: 7px; + --spectrum-tab-item-top-to-workflow-icon-compact-large: 9px; + --spectrum-tab-item-top-to-workflow-icon-compact-extra-large: 11px; + --spectrum-tab-item-focus-indicator-gap-small: 7px; + --spectrum-tab-item-focus-indicator-gap-medium: 8px; + --spectrum-tab-item-focus-indicator-gap-large: 9px; + --spectrum-tab-item-focus-indicator-gap-extra-large: 10px; + --spectrum-side-navigation-width: 192px; + --spectrum-side-navigation-minimum-width: 160px; + --spectrum-side-navigation-maximum-width: 240px; + --spectrum-side-navigation-second-level-edge-to-text: 24px; + --spectrum-side-navigation-third-level-edge-to-text: 36px; + --spectrum-side-navigation-with-icon-second-level-edge-to-text: 50px; + --spectrum-side-navigation-with-icon-third-level-edge-to-text: 62px; + --spectrum-side-navigation-item-to-item: 4px; + --spectrum-side-navigation-item-to-header: 24px; + --spectrum-side-navigation-header-to-item: 8px; + --spectrum-side-navigation-bottom-to-text: 8px; + --spectrum-tray-top-to-content-area: 4px; + --spectrum-accordion-top-to-text-spacious-small: 9px; + --spectrum-text-to-visual-50: 6px; + --spectrum-text-to-visual-75: 7px; + --spectrum-text-to-visual-100: 8px; + --spectrum-text-to-visual-200: 9px; + --spectrum-text-to-visual-300: 10px; + --spectrum-text-to-control-75: 9px; + --spectrum-text-to-control-100: 10px; + --spectrum-text-to-control-200: 11px; + --spectrum-text-to-control-300: 13px; + --spectrum-component-height-50: 20px; + --spectrum-component-height-75: 24px; + --spectrum-component-height-100: 32px; + --spectrum-component-height-200: 40px; + --spectrum-component-height-300: 48px; + --spectrum-component-height-400: 56px; + --spectrum-component-height-500: 64px; + --spectrum-component-pill-edge-to-visual-75: 10px; + --spectrum-component-pill-edge-to-visual-100: 14px; + --spectrum-component-pill-edge-to-visual-200: 18px; + --spectrum-component-pill-edge-to-visual-300: 21px; + --spectrum-component-pill-edge-to-visual-only-75: 4px; + --spectrum-component-pill-edge-to-visual-only-100: 7px; + --spectrum-component-pill-edge-to-visual-only-200: 10px; + --spectrum-component-pill-edge-to-visual-only-300: 13px; + --spectrum-component-pill-edge-to-text-75: 12px; + --spectrum-component-pill-edge-to-text-100: 16px; + --spectrum-component-pill-edge-to-text-200: 20px; + --spectrum-component-pill-edge-to-text-300: 24px; + --spectrum-component-edge-to-visual-50: 6px; + --spectrum-component-edge-to-visual-75: 7px; + --spectrum-component-edge-to-visual-100: 10px; + --spectrum-component-edge-to-visual-200: 13px; + --spectrum-component-edge-to-visual-300: 15px; + --spectrum-component-edge-to-visual-only-50: 3px; + --spectrum-component-edge-to-visual-only-75: 4px; + --spectrum-component-edge-to-visual-only-100: 7px; + --spectrum-component-edge-to-visual-only-200: 10px; + --spectrum-component-edge-to-visual-only-300: 13px; + --spectrum-component-edge-to-text-50: 8px; + --spectrum-component-edge-to-text-75: 9px; + --spectrum-component-edge-to-text-100: 12px; + --spectrum-component-edge-to-text-200: 15px; + --spectrum-component-edge-to-text-300: 18px; + --spectrum-component-top-to-workflow-icon-50: 3px; + --spectrum-component-top-to-workflow-icon-75: 4px; + --spectrum-component-top-to-workflow-icon-100: 7px; + --spectrum-component-top-to-workflow-icon-200: 10px; + --spectrum-component-top-to-workflow-icon-300: 13px; + --spectrum-component-top-to-text-50: 3px; + --spectrum-component-top-to-text-75: 4px; + --spectrum-component-top-to-text-100: 6px; + --spectrum-component-top-to-text-200: 9px; + --spectrum-component-top-to-text-300: 12px; + --spectrum-component-bottom-to-text-50: 3px; + --spectrum-component-bottom-to-text-75: 5px; + --spectrum-component-bottom-to-text-100: 9px; + --spectrum-component-bottom-to-text-200: 11px; + --spectrum-component-bottom-to-text-300: 14px; + --spectrum-component-to-menu-small: 6px; + --spectrum-component-to-menu-medium: 6px; + --spectrum-component-to-menu-large: 7px; + --spectrum-component-to-menu-extra-large: 8px; + --spectrum-field-edge-to-disclosure-icon-75: 7px; + --spectrum-field-edge-to-disclosure-icon-100: 11px; + --spectrum-field-edge-to-disclosure-icon-200: 14px; + --spectrum-field-edge-to-disclosure-icon-300: 17px; + --spectrum-field-end-edge-to-disclosure-icon-75: 7px; + --spectrum-field-end-edge-to-disclosure-icon-100: 11px; + --spectrum-field-end-edge-to-disclosure-icon-200: 14px; + --spectrum-field-end-edge-to-disclosure-icon-300: 17px; + --spectrum-field-top-to-disclosure-icon-75: 7px; + --spectrum-field-top-to-disclosure-icon-100: 11px; + --spectrum-field-top-to-disclosure-icon-200: 14px; + --spectrum-field-top-to-disclosure-icon-300: 17px; + --spectrum-field-top-to-alert-icon-small: 4px; + --spectrum-field-top-to-alert-icon-medium: 7px; + --spectrum-field-top-to-alert-icon-large: 10px; + --spectrum-field-top-to-alert-icon-extra-large: 13px; + --spectrum-field-top-to-validation-icon-small: 7px; + --spectrum-field-top-to-validation-icon-medium: 11px; + --spectrum-field-top-to-validation-icon-large: 14px; + --spectrum-field-top-to-validation-icon-extra-large: 17px; + --spectrum-field-top-to-progress-circle-small: 4px; + --spectrum-field-top-to-progress-circle-medium: 8px; + --spectrum-field-top-to-progress-circle-large: 12px; + --spectrum-field-top-to-progress-circle-extra-large: 16px; + --spectrum-field-edge-to-alert-icon-small: 9px; + --spectrum-field-edge-to-alert-icon-medium: 12px; + --spectrum-field-edge-to-alert-icon-large: 15px; + --spectrum-field-edge-to-alert-icon-extra-large: 18px; + --spectrum-field-edge-to-validation-icon-small: 9px; + --spectrum-field-edge-to-validation-icon-medium: 12px; + --spectrum-field-edge-to-validation-icon-large: 15px; + --spectrum-field-edge-to-validation-icon-extra-large: 18px; + --spectrum-field-text-to-alert-icon-small: 8px; + --spectrum-field-text-to-alert-icon-medium: 12px; + --spectrum-field-text-to-alert-icon-large: 15px; + --spectrum-field-text-to-alert-icon-extra-large: 18px; + --spectrum-field-text-to-validation-icon-small: 8px; + --spectrum-field-text-to-validation-icon-medium: 12px; + --spectrum-field-text-to-validation-icon-large: 15px; + --spectrum-field-text-to-validation-icon-extra-large: 18px; + --spectrum-field-width: 192px; + --spectrum-character-count-to-field-quiet-small: -3px; + --spectrum-character-count-to-field-quiet-medium: -3px; + --spectrum-character-count-to-field-quiet-large: -3px; + --spectrum-character-count-to-field-quiet-extra-large: -4px; + --spectrum-side-label-character-count-to-field: 12px; + --spectrum-side-label-character-count-top-margin-small: 4px; + --spectrum-side-label-character-count-top-margin-medium: 8px; + --spectrum-side-label-character-count-top-margin-large: 11px; + --spectrum-side-label-character-count-top-margin-extra-large: 14px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-small: 7px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-medium: 11px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-large: 14px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-extra-large: 17px; + --spectrum-navigational-indicator-top-to-back-icon-small: 6px; + --spectrum-navigational-indicator-top-to-back-icon-medium: 9px; + --spectrum-navigational-indicator-top-to-back-icon-large: 12px; + --spectrum-navigational-indicator-top-to-back-icon-extra-large: 15px; + --spectrum-color-control-track-width: 24px; + --spectrum-font-size-50: 11px; + --spectrum-font-size-75: 12px; + --spectrum-font-size-100: 14px; + --spectrum-font-size-200: 16px; + --spectrum-font-size-300: 18px; + --spectrum-font-size-400: 20px; + --spectrum-font-size-500: 22px; + --spectrum-font-size-600: 25px; + --spectrum-font-size-700: 28px; + --spectrum-font-size-800: 32px; + --spectrum-font-size-900: 36px; + --spectrum-font-size-1000: 40px; + --spectrum-font-size-1100: 45px; + --spectrum-font-size-1200: 50px; + --spectrum-font-size-1300: 60px; +} +.spectrum--dark { + --spectrum-menu-item-background-color-default-rgb: + 255, + 255, + 255; + --spectrum-menu-item-background-color-default-opacity: 0; + --spectrum-menu-item-background-color-default: rgba(var(--spectrum-menu-item-background-color-default-rgb), var(--spectrum-menu-item-background-color-default-opacity)); + --spectrum-menu-item-background-color-hover: var(--spectrum-transparent-white-200); + --spectrum-menu-item-background-color-down: var(--spectrum-transparent-white-200); + --spectrum-menu-item-background-color-key-focus: var(--spectrum-transparent-white-200); + --spectrum-drop-zone-background-color-rgb: var(--spectrum-blue-900-rgb); + --spectrum-dropindicator-color: var(--spectrum-blue-700); + --spectrum-calendar-day-background-color-selected: rgba(var(--spectrum-blue-800-rgb), 0.15); + --spectrum-calendar-day-background-color-hover: rgba(var(--spectrum-white-rgb), 0.07); + --spectrum-calendar-day-today-background-color-selected-hover: rgba(var(--spectrum-blue-800-rgb), 0.25); + --spectrum-calendar-day-background-color-selected-hover: rgba(var(--spectrum-blue-800-rgb), 0.25); + --spectrum-calendar-day-background-color-down: var(--spectrum-transparent-white-200); + --spectrum-calendar-day-background-color-cap-selected: rgba(var(--spectrum-blue-800-rgb), 0.25); + --spectrum-calendar-day-background-color-key-focus: rgba(var(--spectrum-white-rgb), 0.07); + --spectrum-calendar-day-border-color-key-focus: var(--spectrum-blue-700); + --spectrum-card-selected-background-color-rgb: var(--spectrum-blue-500-rgb); + --spectrum-badge-label-icon-color-primary: var(--spectrum-black); + --spectrum-coach-indicator-ring-default-color: var(--spectrum-blue-700); + --spectrum-coach-indicator-ring-dark-color: var(--spectrum-gray-900); + --spectrum-coach-indicator-ring-light-color: var(--spectrum-gray-50); + --spectrum-well-border-color: rgba(var(--spectrum-white-rgb), 0.05); + --spectrum-steplist-current-marker-color-key-focus: var(--spectrum-blue-700); + --spectrum-treeview-item-background-color-quiet-selected: rgba(var(--spectrum-gray-900-rgb), 0.07); + --spectrum-treeview-item-background-color-selected: rgba(var(--spectrum-blue-800-rgb), 0.15); + --spectrum-logic-button-and-background-color: var(--spectrum-blue-800); + --spectrum-logic-button-and-border-color: var(--spectrum-blue-800); + --spectrum-logic-button-and-background-color-hover: var(--spectrum-blue-1000); + --spectrum-logic-button-and-border-color-hover: var(--spectrum-blue-1000); + --spectrum-logic-button-or-background-color: var(--spectrum-magenta-700); + --spectrum-logic-button-or-border-color: var(--spectrum-magenta-700); + --spectrum-logic-button-or-background-color-hover: var(--spectrum-magenta-900); + --spectrum-logic-button-or-border-color-hover: var(--spectrum-magenta-900); + --spectrum-assetcard-border-color-selected: var(--spectrum-blue-800); + --spectrum-assetcard-border-color-selected-hover: var(--spectrum-blue-800); + --spectrum-assetcard-border-color-selected-down: var(--spectrum-blue-900); + --spectrum-assetcard-selectionindicator-background-color-ordered: var(--spectrum-blue-800); + --spectrum-assestcard-focus-indicator-color: var(--spectrum-blue-700); + --spectrum-assetlist-item-background-color-selected-hover: rgba(var(--spectrum-blue-800-rgb), 0.25); + --spectrum-assetlist-item-background-color-selected: rgba(var(--spectrum-blue-800-rgb), 0.15); + --spectrum-assetlist-border-color-key-focus: var(--spectrum-blue-700); + --spectrum-swatch-border-color-rgb: + 255, + 255, + 255; + --spectrum-swatch-border-color-opacity: 0.51; + --spectrum-swatch-border-color: rgba(var(--spectrum-swatch-border-color-rgb), var(--spectrum-swatch-border-color-opacity)); + --spectrum-swatch-border-color-light-rgb: + 255, + 255, + 255; + --spectrum-swatch-border-color-light-opacity: 0.2; + --spectrum-swatch-border-color-light: rgba(var(--spectrum-swatch-border-color-light-rgb), var(--spectrum-swatch-border-color-light-opacity)); +} +.spectrum--darkest { + --spectrum-menu-item-background-color-default-rgb: + 255, + 255, + 255; + --spectrum-menu-item-background-color-default-opacity: 0; + --spectrum-menu-item-background-color-default: rgba(var(--spectrum-menu-item-background-color-default-rgb), var(--spectrum-menu-item-background-color-default-opacity)); + --spectrum-menu-item-background-color-hover: var(--spectrum-transparent-white-200); + --spectrum-menu-item-background-color-down: var(--spectrum-transparent-white-200); + --spectrum-menu-item-background-color-key-focus: var(--spectrum-transparent-white-200); + --spectrum-drop-zone-background-color-rgb: var(--spectrum-blue-900-rgb); + --spectrum-dropindicator-color: var(--spectrum-blue-700); + --spectrum-calendar-day-background-color-selected: rgba(var(--spectrum-blue-800-rgb), 0.2); + --spectrum-calendar-day-background-color-hover: rgba(var(--spectrum-white-rgb), 0.08); + --spectrum-calendar-day-today-background-color-selected-hover: rgba(var(--spectrum-blue-800-rgb), 0.3); + --spectrum-calendar-day-background-color-selected-hover: rgba(var(--spectrum-blue-800-rgb), 0.3); + --spectrum-calendar-day-background-color-down: rgba(var(--spectrum-white-rgb), 0.15); + --spectrum-calendar-day-background-color-cap-selected: rgba(var(--spectrum-blue-800-rgb), 0.3); + --spectrum-calendar-day-background-color-key-focus: rgba(var(--spectrum-white-rgb), 0.08); + --spectrum-calendar-day-border-color-key-focus: var(--spectrum-blue-700); + --spectrum-card-selected-background-color-rgb: var(--spectrum-blue-600-rgb); + --spectrum-badge-label-icon-color-primary: var(--spectrum-black); + --spectrum-coach-indicator-ring-default-color: var(--spectrum-blue-700); + --spectrum-coach-indicator-ring-dark-color: var(--spectrum-gray-900); + --spectrum-coach-indicator-ring-light-color: var(--spectrum-gray-50); + --spectrum-well-border-color: rgba(var(--spectrum-white-rgb), 0.05); + --spectrum-steplist-current-marker-color-key-focus: var(--spectrum-blue-700); + --spectrum-treeview-item-background-color-quiet-selected: rgba(var(--spectrum-gray-900-rgb), 0.08); + --spectrum-treeview-item-background-color-selected: rgba(var(--spectrum-blue-800-rgb), 0.2); + --spectrum-logic-button-and-background-color: var(--spectrum-blue-800); + --spectrum-logic-button-and-border-color: var(--spectrum-blue-800); + --spectrum-logic-button-and-background-color-hover: var(--spectrum-blue-1000); + --spectrum-logic-button-and-border-color-hover: var(--spectrum-blue-1000); + --spectrum-logic-button-or-background-color: var(--spectrum-magenta-700); + --spectrum-logic-button-or-border-color: var(--spectrum-magenta-700); + --spectrum-logic-button-or-background-color-hover: var(--spectrum-magenta-900); + --spectrum-logic-button-or-border-color-hover: var(--spectrum-magenta-900); + --spectrum-assetcard-border-color-selected: var(--spectrum-blue-800); + --spectrum-assetcard-border-color-selected-hover: var(--spectrum-blue-800); + --spectrum-assetcard-border-color-selected-down: var(--spectrum-blue-900); + --spectrum-assetcard-selectionindicator-background-color-ordered: var(--spectrum-blue-800); + --spectrum-assestcard-focus-indicator-color: var(--spectrum-blue-700); + --spectrum-assetlist-item-background-color-selected-hover: rgba(var(--spectrum-blue-800-rgb), 0.3); + --spectrum-assetlist-item-background-color-selected: rgba(var(--spectrum-blue-800-rgb), 0.2); + --spectrum-assetlist-border-color-key-focus: var(--spectrum-blue-700); + --spectrum-swatch-border-color-rgb: + 255, + 255, + 255; + --spectrum-swatch-border-color-opacity: 0.51; + --spectrum-swatch-border-color: rgba(var(--spectrum-swatch-border-color-rgb), var(--spectrum-swatch-border-color-opacity)); + --spectrum-swatch-border-color-light-rgb: + 255, + 255, + 255; + --spectrum-swatch-border-color-light-opacity: 0.2; + --spectrum-swatch-border-color-light: rgba(var(--spectrum-swatch-border-color-light-rgb), var(--spectrum-swatch-border-color-light-opacity)); +} +.spectrum { + --spectrum-neutral-background-color-selected-default: var(--spectrum-gray-700); + --spectrum-neutral-background-color-selected-hover: var(--spectrum-gray-800); + --spectrum-neutral-background-color-selected-down: var(--spectrum-gray-900); + --spectrum-neutral-background-color-selected-key-focus: var(--spectrum-gray-800); + --spectrum-slider-track-thickness: 2px; + --spectrum-slider-handle-gap: 4px; + --spectrum-picker-border-width: var(--spectrum-border-width-100); + --spectrum-in-field-button-fill-stacked-inner-border-rounding: 0px; + --spectrum-in-field-button-edge-to-fill: 0px; + --spectrum-in-field-button-stacked-inner-edge-to-fill: 0px; + --spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-medium: 3px; + --spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-large: 4px; + --spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-extra-large: 5px; + --spectrum-in-field-button-inner-edge-to-disclosure-icon-stacked-small: var(--spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-small); + --spectrum-in-field-button-inner-edge-to-disclosure-icon-stacked-medium: var(--spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-medium); + --spectrum-in-field-button-inner-edge-to-disclosure-icon-stacked-large: var(--spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-large); + --spectrum-in-field-button-inner-edge-to-disclosure-icon-stacked-extra-large: var(--spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-extra-large); + --spectrum-corner-radius-75: 2px; + --spectrum-drop-shadow-x: 0px; + --spectrum-border-width-100: 1px; + --spectrum-accent-color-100: var(--spectrum-blue-100); + --spectrum-accent-color-200: var(--spectrum-blue-200); + --spectrum-accent-color-300: var(--spectrum-blue-300); + --spectrum-accent-color-400: var(--spectrum-blue-400); + --spectrum-accent-color-500: var(--spectrum-blue-500); + --spectrum-accent-color-600: var(--spectrum-blue-600); + --spectrum-accent-color-700: var(--spectrum-blue-700); + --spectrum-accent-color-800: var(--spectrum-blue-800); + --spectrum-accent-color-900: var(--spectrum-blue-900); + --spectrum-accent-color-1000: var(--spectrum-blue-1000); + --spectrum-accent-color-1100: var(--spectrum-blue-1100); + --spectrum-accent-color-1200: var(--spectrum-blue-1200); + --spectrum-accent-color-1300: var(--spectrum-blue-1300); + --spectrum-accent-color-1400: var(--spectrum-blue-1400); + --spectrum-heading-sans-serif-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-serif-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-cjk-font-weight: var(--spectrum-extra-bold-font-weight); + --spectrum-heading-sans-serif-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-serif-emphasized-font-weight: var(--spectrum-bold-font-weight); + --system: spectrum; + --spectrum-animation-linear: cubic-bezier(0, 0, 1, 1); + --spectrum-animation-duration-0: 0ms; + --spectrum-animation-duration-100: 130ms; + --spectrum-animation-duration-200: 160ms; + --spectrum-animation-duration-300: 190ms; + --spectrum-animation-duration-400: 220ms; + --spectrum-animation-duration-500: 250ms; + --spectrum-animation-duration-600: 300ms; + --spectrum-animation-duration-700: 350ms; + --spectrum-animation-duration-800: 400ms; + --spectrum-animation-duration-900: 450ms; + --spectrum-animation-duration-1000: 500ms; + --spectrum-animation-duration-2000: 1000ms; + --spectrum-animation-duration-4000: 2000ms; + --spectrum-animation-duration-6000: 3000ms; + --spectrum-animation-ease-in-out: cubic-bezier(0.45, 0, 0.4, 1); + --spectrum-animation-ease-in: cubic-bezier(0.5, 0, 1, 1); + --spectrum-animation-ease-out: cubic-bezier(0, 0, 0.4, 1); + --spectrum-animation-ease-linear: cubic-bezier(0, 0, 1, 1); + --spectrum-sans-font-family-stack: + adobe-clean, + var(--spectrum-sans-serif-font-family), + "Source Sans Pro", + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + Ubuntu, + "Trebuchet MS", + "Lucida Grande", + sans-serif; + --spectrum-sans-serif-font: var(--spectrum-sans-font-family-stack); + --spectrum-serif-font-family-stack: + adobe-clean-serif, + var(--spectrum-serif-font-family), + "Source Serif Pro", + Georgia, + serif; + --spectrum-serif-font: var(--spectrum-serif-font-family-stack); + --spectrum-code-font-family-stack: + "Source Code Pro", + Monaco, + monospace; + --spectrum-font-family-ar: + myriad-arabic, + adobe-clean, + "Source Sans Pro", + -apple-system, + blinkmacsystemfont, + "Segoe UI", + roboto, + ubuntu, + "Trebuchet MS", + "Lucida Grande", + sans-serif; + --spectrum-font-family-he: + myriad-hebrew, + adobe-clean, + "Source Sans Pro", + -apple-system, + blinkmacsystemfont, + "Segoe UI", + roboto, + ubuntu, + "Trebuchet MS", + "Lucida Grande", + sans-serif; + --spectrum-font-family: var(--spectrum-sans-font-family-stack); + --spectrum-font-style: var(--spectrum-default-font-style); + --spectrum-font-size: var(--spectrum-font-size-100); + --spectrum-cjk-font-family-stack: + adobe-clean-han-japanese, + var(--spectrum-cjk-font-family), + sans-serif; + --spectrum-cjk-font: var(--spectrum-code-font-family-stack); + --spectrum-docs-static-white-background-color-rgb: + 15, + 121, + 125; + --spectrum-docs-static-white-background-color: rgba(var(--spectrum-docs-static-white-background-color-rgb)); + --spectrum-docs-static-black-background-color-rgb: + 181, + 209, + 211; + --spectrum-docs-static-black-background-color: rgba(var(--spectrum-docs-static-black-background-color-rgb)); + --spectrum-coach-indicator-ring-static-white-color: var(--spectrum-white); +} +.spectrum--large { + --spectrum-checkbox-control-size-small: 16px; + --spectrum-checkbox-control-size-medium: 18px; + --spectrum-checkbox-control-size-large: 20px; + --spectrum-checkbox-control-size-extra-large: 22px; + --spectrum-checkbox-top-to-control-small: 7px; + --spectrum-checkbox-top-to-control-medium: 11px; + --spectrum-checkbox-top-to-control-large: 15px; + --spectrum-checkbox-top-to-control-extra-large: 19px; + --spectrum-switch-control-width-small: 32px; + --spectrum-switch-control-width-medium: 36px; + --spectrum-switch-control-width-large: 41px; + --spectrum-switch-control-width-extra-large: 46px; + --spectrum-switch-control-height-small: 16px; + --spectrum-switch-control-height-medium: 18px; + --spectrum-switch-control-height-large: 20px; + --spectrum-switch-control-height-extra-large: 22px; + --spectrum-switch-top-to-control-small: 7px; + --spectrum-switch-top-to-control-medium: 11px; + --spectrum-switch-top-to-control-large: 15px; + --spectrum-switch-top-to-control-extra-large: 19px; + --spectrum-radio-button-control-size-small: 16px; + --spectrum-radio-button-control-size-medium: 18px; + --spectrum-radio-button-control-size-large: 20px; + --spectrum-radio-button-control-size-extra-large: 22px; + --spectrum-radio-button-top-to-control-small: 7px; + --spectrum-radio-button-top-to-control-medium: 11px; + --spectrum-radio-button-top-to-control-large: 15px; + --spectrum-radio-button-top-to-control-extra-large: 19px; + --spectrum-slider-control-height-small: 18px; + --spectrum-slider-control-height-medium: 20px; + --spectrum-slider-control-height-large: 22px; + --spectrum-slider-control-height-extra-large: 26px; + --spectrum-slider-handle-size-small: 18px; + --spectrum-slider-handle-size-medium: 20px; + --spectrum-slider-handle-size-large: 22px; + --spectrum-slider-handle-size-extra-large: 26px; + --spectrum-slider-handle-border-width-down-small: 7px; + --spectrum-slider-handle-border-width-down-medium: 8px; + --spectrum-slider-handle-border-width-down-large: 9px; + --spectrum-slider-handle-border-width-down-extra-large: 11px; + --spectrum-slider-bottom-to-handle-small: 6px; + --spectrum-slider-bottom-to-handle-medium: 10px; + --spectrum-slider-bottom-to-handle-large: 14px; + --spectrum-slider-bottom-to-handle-extra-large: 17px; + --spectrum-corner-radius-100: 5px; + --spectrum-corner-radius-200: 10px; + --spectrum-drop-shadow-y: 2px; + --spectrum-drop-shadow-blur: 6px; + --spectrum-slider-tick-mark-height: 13px; + --spectrum-slider-ramp-track-height: 20px; + --spectrum-colorwheel-path: "M 119 119 m -119 0 a 119 119 0 1 0 238 0 a 119 119 0 1 0 -238 0.2 M 119 119 m -91 0 a 91 91 0 1 0 182 0 a 91 91 0 1 0 -182 0"; + --spectrum-colorwheel-path-borders: "M 120 120 m -120 0 a 120 120 0 1 0 240 0 a 120 120 0 1 0 -240 0.2 M 120 120 m -90 0 a 90 90 0 1 0 180 0 a 90 90 0 1 0 -180 0"; + --spectrum-colorwheel-colorarea-container-size: 182px; + --spectrum-colorloupe-checkerboard-fill: url(#checkerboard-secondary); + --spectrum-contextual-help-content-spacing: var(--spectrum-spacing-200); + --spectrum-menu-item-selectable-edge-to-text-not-selected-small: 34px; + --spectrum-menu-item-selectable-edge-to-text-not-selected-medium: 42px; + --spectrum-menu-item-selectable-edge-to-text-not-selected-large: 47px; + --spectrum-menu-item-selectable-edge-to-text-not-selected-extra-large: 54px; + --spectrum-menu-item-checkmark-height-small: 12px; + --spectrum-menu-item-checkmark-height-medium: 14px; + --spectrum-menu-item-checkmark-height-large: 16px; + --spectrum-menu-item-checkmark-height-extra-large: 16px; + --spectrum-menu-item-checkmark-width-small: 12px; + --spectrum-menu-item-checkmark-width-medium: 14px; + --spectrum-menu-item-checkmark-width-large: 16px; + --spectrum-menu-item-checkmark-width-extra-large: 16px; + --spectrum-rating-icon-spacing: var(--spectrum-spacing-100); + --spectrum-button-top-to-text-small: 6px; + --spectrum-button-bottom-to-text-small: 5px; + --spectrum-button-top-to-text-medium: 9px; + --spectrum-button-bottom-to-text-medium: 10px; + --spectrum-button-top-to-text-large: 12px; + --spectrum-button-bottom-to-text-large: 13px; + --spectrum-button-top-to-text-extra-large: 16px; + --spectrum-button-bottom-to-text-extra-large: 17px; + --spectrum-alert-banner-close-button-spacing: var(--spectrum-spacing-200); + --spectrum-alert-banner-edge-to-divider: var(--spectrum-spacing-200); + --spectrum-alert-banner-edge-to-button: var(--spectrum-spacing-200); + --spectrum-alert-banner-text-to-button-vertical: var(--spectrum-spacing-200); + --spectrum-alert-dialog-padding: var(--spectrum-spacing-400); + --spectrum-alert-dialog-description-to-buttons: var(--spectrum-spacing-600); + --spectrum-coach-indicator-gap: 8px; + --spectrum-coach-indicator-ring-diameter: 20px; + --spectrum-coach-indicator-quiet-ring-diameter: 10px; + --spectrum-coachmark-buttongroup-display: none; + --spectrum-coachmark-buttongroup-mobile-display: flex; + --spectrum-coachmark-menu-display: none; + --spectrum-coachmark-menu-mobile-display: inline-flex; + --spectrum-well-padding: 20px; + --spectrum-well-margin-top: 5px; + --spectrum-well-min-width: 300px; + --spectrum-well-border-radius: 5px; + --spectrum-workflow-icon-size-xxl: 40px; + --spectrum-workflow-icon-size-xxs: 15px; + --spectrum-treeview-item-indentation-medium: 20px; + --spectrum-treeview-item-indentation-small: 15px; + --spectrum-treeview-item-indentation-large: 25px; + --spectrum-treeview-item-indentation-extra-large: 30px; + --spectrum-treeview-indicator-inset-block-start: 6px; + --spectrum-treeview-item-min-block-size-thumbnail-offset-medium: 2px; + --spectrum-dialog-confirm-entry-animation-distance: 25px; + --spectrum-dialog-confirm-hero-height: 160px; + --spectrum-dialog-confirm-border-radius: 5px; + --spectrum-dialog-confirm-title-text-size: 19px; + --spectrum-dialog-confirm-description-text-size: 15px; + --spectrum-dialog-confirm-padding-grid: 24px; + --spectrum-datepicker-initial-width: 160px; + --spectrum-datepicker-generic-padding: 15px; + --spectrum-datepicker-dash-line-height: 30px; + --spectrum-datepicker-width-quiet-first: 90px; + --spectrum-datepicker-width-quiet-second: 20px; + --spectrum-datepicker-datetime-width-first: 45px; + --spectrum-datepicker-invalid-icon-to-button: 10px; + --spectrum-datepicker-invalid-icon-to-button-quiet: 9px; + --spectrum-datepicker-input-datetime-width: 30px; + --spectrum-pagination-textfield-width: 60px; + --spectrum-pagination-item-inline-spacing: 6px; + --spectrum-dial-border-radius: 20px; + --spectrum-dial-handle-position: 10px; + --spectrum-dial-handle-block-margin: 20px; + --spectrum-dial-handle-inline-margin: 20px; + --spectrum-dial-controls-margin: 10px; + --spectrum-dial-label-gap-y: 6px; + --spectrum-dial-label-container-top-to-text: 5px; + --spectrum-assetcard-focus-ring-border-radius: 9px; + --spectrum-assetcard-selectionindicator-margin: 15px; + --spectrum-assetcard-title-font-size: var(--spectrum-heading-size-xxs); + --spectrum-assetcard-header-content-font-size: var(--spectrum-heading-size-xxs); + --spectrum-assetcard-content-font-size: var(--spectrum-body-size-xs); + --spectrum-tooltip-animation-distance: 5px; + --spectrum-ui-icon-medium-display: none; + --spectrum-ui-icon-large-display: block; +} +.spectrum--light, +.spectrum--lightest { + --spectrum-menu-item-background-color-default-rgb: + 0, + 0, + 0; + --spectrum-menu-item-background-color-default-opacity: 0; + --spectrum-menu-item-background-color-default: rgba(var(--spectrum-menu-item-background-color-default-rgb), var(--spectrum-menu-item-background-color-default-opacity)); + --spectrum-menu-item-background-color-hover: var(--spectrum-transparent-black-200); + --spectrum-menu-item-background-color-down: var(--spectrum-transparent-black-200); + --spectrum-menu-item-background-color-key-focus: var(--spectrum-transparent-black-200); + --spectrum-drop-zone-background-color-rgb: var(--spectrum-blue-800-rgb); + --spectrum-dropindicator-color: var(--spectrum-blue-800); + --spectrum-calendar-day-background-color-selected: rgba(var(--spectrum-blue-900-rgb), 0.1); + --spectrum-calendar-day-background-color-hover: rgba(var(--spectrum-black-rgb), 0.06); + --spectrum-calendar-day-today-background-color-selected-hover: rgba(var(--spectrum-blue-900-rgb), 0.2); + --spectrum-calendar-day-background-color-selected-hover: rgba(var(--spectrum-blue-900-rgb), 0.2); + --spectrum-calendar-day-background-color-down: var(--spectrum-transparent-black-200); + --spectrum-calendar-day-background-color-cap-selected: rgba(var(--spectrum-blue-900-rgb), 0.2); + --spectrum-calendar-day-background-color-key-focus: rgba(var(--spectrum-black-rgb), 0.06); + --spectrum-calendar-day-border-color-key-focus: var(--spectrum-blue-800); + --spectrum-card-selected-background-color-rgb: var(--spectrum-blue-900-rgb); + --spectrum-badge-label-icon-color-primary: var(--spectrum-white); + --spectrum-coach-indicator-ring-default-color: var(--spectrum-blue-800); + --spectrum-coach-indicator-ring-dark-color: var(--spectrum-gray-900); + --spectrum-coach-indicator-ring-light-color: var(--spectrum-gray-50); + --spectrum-well-border-color: var(--spectrum-black); + --spectrum-steplist-current-marker-color-key-focus: var(--spectrum-blue-800); + --spectrum-treeview-item-background-color-quiet-selected: rgba(var(--spectrum-gray-900-rgb), 0.06); + --spectrum-treeview-item-background-color-selected: rgba(var(--spectrum-blue-900-rgb), 0.1); + --spectrum-logic-button-and-background-color: var(--spectrum-blue-900); + --spectrum-logic-button-and-border-color: var(--spectrum-blue-900); + --spectrum-logic-button-and-background-color-hover: var(--spectrum-blue-1100); + --spectrum-logic-button-and-border-color-hover: var(--spectrum-blue-1100); + --spectrum-logic-button-or-background-color: var(--spectrum-magenta-900); + --spectrum-logic-button-or-border-color: var(--spectrum-magenta-900); + --spectrum-logic-button-or-background-color-hover: var(--spectrum-magenta-1100); + --spectrum-logic-button-or-border-color-hover: var(--spectrum-magenta-1100); + --spectrum-assetcard-border-color-selected: var(--spectrum-blue-900); + --spectrum-assetcard-border-color-selected-hover: var(--spectrum-blue-900); + --spectrum-assetcard-border-color-selected-down: var(--spectrum-blue-1000); + --spectrum-assetcard-selectionindicator-background-color-ordered: var(--spectrum-blue-900); + --spectrum-assestcard-focus-indicator-color: var(--spectrum-blue-800); + --spectrum-assetlist-item-background-color-selected-hover: rgba(var(--spectrum-blue-900-rgb), 0.2); + --spectrum-assetlist-item-background-color-selected: rgba(var(--spectrum-blue-900-rgb), 0.1); + --spectrum-assetlist-border-color-key-focus: var(--spectrum-blue-800); + --spectrum-swatch-border-color-rgb: + 0, + 0, + 0; + --spectrum-swatch-border-color-opacity: 0.51; + --spectrum-swatch-border-color: rgba(var(--spectrum-swatch-border-color-rgb), var(--spectrum-swatch-border-color-opacity)); + --spectrum-swatch-border-color-light-rgb: + 0, + 0, + 0; + --spectrum-swatch-border-color-light-opacity: 0.2; + --spectrum-swatch-border-color-light: rgba(var(--spectrum-swatch-border-color-light-rgb), var(--spectrum-swatch-border-color-light-opacity)); +} +.spectrum--medium { + --spectrum-checkbox-control-size-small: 12px; + --spectrum-checkbox-control-size-medium: 14px; + --spectrum-checkbox-control-size-large: 16px; + --spectrum-checkbox-control-size-extra-large: 18px; + --spectrum-checkbox-top-to-control-small: 6px; + --spectrum-checkbox-top-to-control-medium: 9px; + --spectrum-checkbox-top-to-control-large: 12px; + --spectrum-checkbox-top-to-control-extra-large: 15px; + --spectrum-switch-control-width-small: 23px; + --spectrum-switch-control-width-medium: 26px; + --spectrum-switch-control-width-large: 29px; + --spectrum-switch-control-width-extra-large: 33px; + --spectrum-switch-control-height-small: 12px; + --spectrum-switch-control-height-medium: 14px; + --spectrum-switch-control-height-large: 16px; + --spectrum-switch-control-height-extra-large: 18px; + --spectrum-switch-top-to-control-small: 6px; + --spectrum-switch-top-to-control-medium: 9px; + --spectrum-switch-top-to-control-large: 12px; + --spectrum-switch-top-to-control-extra-large: 15px; + --spectrum-radio-button-control-size-small: 12px; + --spectrum-radio-button-control-size-medium: 14px; + --spectrum-radio-button-control-size-large: 16px; + --spectrum-radio-button-control-size-extra-large: 18px; + --spectrum-radio-button-top-to-control-small: 6px; + --spectrum-radio-button-top-to-control-medium: 9px; + --spectrum-radio-button-top-to-control-large: 12px; + --spectrum-radio-button-top-to-control-extra-large: 15px; + --spectrum-slider-control-height-small: 14px; + --spectrum-slider-control-height-medium: 16px; + --spectrum-slider-control-height-large: 18px; + --spectrum-slider-control-height-extra-large: 20px; + --spectrum-slider-handle-size-small: 14px; + --spectrum-slider-handle-size-medium: 16px; + --spectrum-slider-handle-size-large: 18px; + --spectrum-slider-handle-size-extra-large: 20px; + --spectrum-slider-handle-border-width-down-small: 5px; + --spectrum-slider-handle-border-width-down-medium: 6px; + --spectrum-slider-handle-border-width-down-large: 7px; + --spectrum-slider-handle-border-width-down-extra-large: 8px; + --spectrum-slider-bottom-to-handle-small: 5px; + --spectrum-slider-bottom-to-handle-medium: 8px; + --spectrum-slider-bottom-to-handle-large: 11px; + --spectrum-slider-bottom-to-handle-extra-large: 14px; + --spectrum-corner-radius-100: 4px; + --spectrum-corner-radius-200: 8px; + --spectrum-drop-shadow-y: 1px; + --spectrum-drop-shadow-blur: 4px; + --spectrum-slider-tick-mark-height: 10px; + --spectrum-slider-ramp-track-height: 16px; + --spectrum-colorwheel-path: "M 95 95 m -95 0 a 95 95 0 1 0 190 0 a 95 95 0 1 0 -190 0.2 M 95 95 m -73 0 a 73 73 0 1 0 146 0 a 73 73 0 1 0 -146 0"; + --spectrum-colorwheel-path-borders: "M 96 96 m -96 0 a 96 96 0 1 0 192 0 a 96 96 0 1 0 -192 0.2 M 96 96 m -72 0 a 72 72 0 1 0 144 0 a 72 72 0 1 0 -144 0"; + --spectrum-colorwheel-colorarea-container-size: 144px; + --spectrum-colorloupe-checkerboard-fill: url(#checkerboard-primary); + --spectrum-contextual-help-content-spacing: var(--spectrum-spacing-100); + --spectrum-menu-item-selectable-edge-to-text-not-selected-small: 28px; + --spectrum-menu-item-selectable-edge-to-text-not-selected-medium: 32px; + --spectrum-menu-item-selectable-edge-to-text-not-selected-large: 38px; + --spectrum-menu-item-selectable-edge-to-text-not-selected-extra-large: 45px; + --spectrum-menu-item-checkmark-height-small: 10px; + --spectrum-menu-item-checkmark-height-medium: 10px; + --spectrum-menu-item-checkmark-height-large: 12px; + --spectrum-menu-item-checkmark-height-extra-large: 14px; + --spectrum-menu-item-checkmark-width-small: 10px; + --spectrum-menu-item-checkmark-width-medium: 10px; + --spectrum-menu-item-checkmark-width-large: 12px; + --spectrum-menu-item-checkmark-width-extra-large: 14px; + --spectrum-rating-icon-spacing: var(--spectrum-spacing-75); + --spectrum-button-top-to-text-small: 5px; + --spectrum-button-bottom-to-text-small: 4px; + --spectrum-button-top-to-text-medium: 7px; + --spectrum-button-bottom-to-text-medium: 8px; + --spectrum-button-top-to-text-large: 10px; + --spectrum-button-bottom-to-text-large: 10px; + --spectrum-button-top-to-text-extra-large: 13px; + --spectrum-button-bottom-to-text-extra-large: 13px; + --spectrum-alert-banner-close-button-spacing: var(--spectrum-spacing-100); + --spectrum-alert-banner-edge-to-divider: var(--spectrum-spacing-100); + --spectrum-alert-banner-edge-to-button: var(--spectrum-spacing-100); + --spectrum-alert-banner-text-to-button-vertical: var(--spectrum-spacing-100); + --spectrum-alert-dialog-padding: var(--spectrum-spacing-500); + --spectrum-alert-dialog-description-to-buttons: var(--spectrum-spacing-700); + --spectrum-coach-indicator-gap: 6px; + --spectrum-coach-indicator-ring-diameter: var(--spectrum-spacing-300); + --spectrum-coach-indicator-quiet-ring-diameter: var(--spectrum-spacing-100); + --spectrum-coachmark-buttongroup-display: flex; + --spectrum-coachmark-buttongroup-mobile-display: none; + --spectrum-coachmark-menu-display: inline-flex; + --spectrum-coachmark-menu-mobile-display: none; + --spectrum-well-padding: var(--spectrum-spacing-300); + --spectrum-well-margin-top: var(--spectrum-spacing-75); + --spectrum-well-min-width: 240px; + --spectrum-well-border-radius: var(--spectrum-spacing-75); + --spectrum-workflow-icon-size-xxl: 32px; + --spectrum-workflow-icon-size-xxs: 12px; + --spectrum-treeview-item-indentation-medium: var(--spectrum-spacing-300); + --spectrum-treeview-item-indentation-small: var(--spectrum-spacing-200); + --spectrum-treeview-item-indentation-large: 20px; + --spectrum-treeview-item-indentation-extra-large: var(--spectrum-spacing-400); + --spectrum-treeview-indicator-inset-block-start: 5px; + --spectrum-treeview-item-min-block-size-thumbnail-offset-medium: 0px; + --spectrum-dialog-confirm-entry-animation-distance: 20px; + --spectrum-dialog-confirm-hero-height: 128px; + --spectrum-dialog-confirm-border-radius: 4px; + --spectrum-dialog-confirm-title-text-size: 18px; + --spectrum-dialog-confirm-description-text-size: 14px; + --spectrum-dialog-confirm-padding-grid: 40px; + --spectrum-datepicker-initial-width: 128px; + --spectrum-datepicker-generic-padding: var(--spectrum-spacing-200); + --spectrum-datepicker-dash-line-height: 24px; + --spectrum-datepicker-width-quiet-first: 72px; + --spectrum-datepicker-width-quiet-second: 16px; + --spectrum-datepicker-datetime-width-first: 36px; + --spectrum-datepicker-invalid-icon-to-button: 8px; + --spectrum-datepicker-invalid-icon-to-button-quiet: 7px; + --spectrum-datepicker-input-datetime-width: var(--spectrum-spacing-400); + --spectrum-pagination-textfield-width: var(--spectrum-spacing-700); + --spectrum-pagination-item-inline-spacing: 5px; + --spectrum-dial-border-radius: 16px; + --spectrum-dial-handle-position: 8px; + --spectrum-dial-handle-block-margin: 16px; + --spectrum-dial-handle-inline-margin: 16px; + --spectrum-dial-controls-margin: 8px; + --spectrum-dial-label-gap-y: 5px; + --spectrum-dial-label-container-top-to-text: 4px; + --spectrum-assetcard-focus-ring-border-radius: 8px; + --spectrum-assetcard-selectionindicator-margin: 12px; + --spectrum-assetcard-title-font-size: var(--spectrum-heading-size-xs); + --spectrum-assetcard-header-content-font-size: var(--spectrum-heading-size-xs); + --spectrum-assetcard-content-font-size: var(--spectrum-body-size-s); + --spectrum-tooltip-animation-distance: var(--spectrum-spacing-75); + --spectrum-ui-icon-medium-display: block; + --spectrum-ui-icon-large-display: none; +} +.spectrum--express.spectrum--dark, +.spectrum--express.spectrum--darkest { + --spectrum-drop-zone-background-color-rgb: var(--spectrum-indigo-900-rgb); + --spectrum-well-border-color: rgba(var(--spectrum-white-rgb), 0.05); + --spectrum-assetcard-border-color-selected: var(--spectrum-indigo-700); + --spectrum-assetcard-border-color-selected-hover: var(--spectrum-indigo-700); + --spectrum-assetcard-border-color-selected-down: var(--spectrum-indigo-800); + --spectrum-assetcard-selectionindicator-background-color-ordered: var(--spectrum-indigo-700); +} +.spectrum--express { + --spectrum-neutral-background-color-selected-default: var(--spectrum-gray-800); + --spectrum-neutral-background-color-selected-hover: var(--spectrum-gray-900); + --spectrum-neutral-background-color-selected-down: var(--spectrum-gray-900); + --spectrum-neutral-background-color-selected-key-focus: var(--spectrum-gray-900); + --spectrum-slider-track-thickness: 4px; + --spectrum-slider-handle-gap: 0px; + --spectrum-picker-border-width: 0; + --spectrum-in-field-button-fill-stacked-inner-border-rounding: 1px; + --spectrum-in-field-button-edge-to-fill: 4px; + --spectrum-in-field-button-stacked-inner-edge-to-fill: 1px; + --spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-medium: 5px; + --spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-large: 7px; + --spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-extra-large: 8px; + --spectrum-in-field-button-inner-edge-to-disclosure-icon-stacked-small: 1px; + --spectrum-in-field-button-inner-edge-to-disclosure-icon-stacked-medium: 1px; + --spectrum-in-field-button-inner-edge-to-disclosure-icon-stacked-large: 3px; + --spectrum-in-field-button-inner-edge-to-disclosure-icon-stacked-extra-large: 4px; + --spectrum-border-width-100: 2px; + --spectrum-accent-color-100: var(--spectrum-indigo-100); + --spectrum-accent-color-200: var(--spectrum-indigo-200); + --spectrum-accent-color-300: var(--spectrum-indigo-300); + --spectrum-accent-color-400: var(--spectrum-indigo-400); + --spectrum-accent-color-500: var(--spectrum-indigo-500); + --spectrum-accent-color-600: var(--spectrum-indigo-600); + --spectrum-accent-color-700: var(--spectrum-indigo-700); + --spectrum-accent-color-800: var(--spectrum-indigo-800); + --spectrum-accent-color-900: var(--spectrum-indigo-900); + --spectrum-accent-color-1000: var(--spectrum-indigo-1000); + --spectrum-accent-color-1100: var(--spectrum-indigo-1100); + --spectrum-accent-color-1200: var(--spectrum-indigo-1200); + --spectrum-accent-color-1300: var(--spectrum-indigo-1300); + --spectrum-accent-color-1400: var(--spectrum-indigo-1400); + --spectrum-heading-sans-serif-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-serif-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-sans-serif-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-serif-emphasized-font-weight: var(--spectrum-black-font-weight); + --system: express; +} +.spectrum--express.spectrum--large { + --spectrum-checkbox-control-size-small: 18px; + --spectrum-checkbox-control-size-medium: 20px; + --spectrum-checkbox-control-size-large: 22px; + --spectrum-checkbox-control-size-extra-large: 26px; + --spectrum-checkbox-top-to-control-small: 6px; + --spectrum-checkbox-top-to-control-medium: 10px; + --spectrum-checkbox-top-to-control-large: 14px; + --spectrum-checkbox-top-to-control-extra-large: 17px; + --spectrum-switch-control-width-small: 32px; + --spectrum-switch-control-width-medium: 36px; + --spectrum-switch-control-width-large: 41px; + --spectrum-switch-control-width-extra-large: 46px; + --spectrum-switch-control-height-small: 18px; + --spectrum-switch-control-height-medium: 20px; + --spectrum-switch-control-height-large: 22px; + --spectrum-switch-control-height-extra-large: 26px; + --spectrum-switch-top-to-control-small: 6px; + --spectrum-switch-top-to-control-medium: 10px; + --spectrum-switch-top-to-control-large: 14px; + --spectrum-switch-top-to-control-extra-large: 17px; + --spectrum-radio-button-control-size-small: 18px; + --spectrum-radio-button-control-size-medium: 20px; + --spectrum-radio-button-control-size-large: 22px; + --spectrum-radio-button-control-size-extra-large: 26px; + --spectrum-radio-button-top-to-control-small: 6px; + --spectrum-radio-button-top-to-control-medium: 10px; + --spectrum-radio-button-top-to-control-large: 14px; + --spectrum-radio-button-top-to-control-extra-large: 17px; + --spectrum-slider-control-height-small: 22px; + --spectrum-slider-control-height-medium: 24px; + --spectrum-slider-control-height-large: 28px; + --spectrum-slider-control-height-extra-large: 30px; + --spectrum-slider-handle-size-small: 22px; + --spectrum-slider-handle-size-medium: 24px; + --spectrum-slider-handle-size-large: 28px; + --spectrum-slider-handle-size-extra-large: 30px; + --spectrum-slider-handle-border-width-down-small: var(--spectrum-border-width-200); + --spectrum-slider-handle-border-width-down-medium: var(--spectrum-border-width-200); + --spectrum-slider-handle-border-width-down-large: var(--spectrum-border-width-200); + --spectrum-slider-handle-border-width-down-extra-large: var(--spectrum-border-width-200); + --spectrum-slider-bottom-to-handle-small: 4px; + --spectrum-slider-bottom-to-handle-medium: 8px; + --spectrum-slider-bottom-to-handle-large: 12px; + --spectrum-slider-bottom-to-handle-extra-large: 15px; + --spectrum-corner-radius-75: 4px; + --spectrum-corner-radius-100: 8px; + --spectrum-corner-radius-200: 16px; + --spectrum-drop-shadow-x: 0px; + --spectrum-drop-shadow-y: 4px; + --spectrum-drop-shadow-blur: 16px; + --spectrum-colorwheel-path: "M 118 118 m -118 0 a 118 118 0 1 0 236 0 a 118 118 0 1 0 -236 0.2 M 118 118 m -92 0 a 92 92 0 1 0 184 0 a 92 92 0 1 0 -184 0"; + --spectrum-colorwheel-path-borders: "M 120 120 m -120 0 a 120 120 0 1 0 240 0 a 120 120 0 1 0 -240 0.2 M 120 120 m -90 0 a 90 90 0 1 0 180 0 a 90 90 0 1 0 -180 0"; + --spectrum-dialog-confirm-border-radius: 8px; + --spectrum-dial-border-radius: 15px; + --spectrum-assetcard-focus-ring-border-radius: 12px; +} +.spectrum--express.spectrum--light, +.spectrum--express.spectrum--lightest { + --spectrum-drop-zone-background-color-rgb: var(--spectrum-indigo-800-rgb); + --spectrum-well-border-color: rgba(var(--spectrum-black-rgb), 0.05); + --spectrum-assetcard-border-color-selected: var(--spectrum-indigo-900); + --spectrum-assetcard-border-color-selected-hover: var(--spectrum-indigo-900); + --spectrum-assetcard-border-color-selected-down: var(--spectrum-indigo-1000); + --spectrum-assetcard-selectionindicator-background-color-ordered: var(--spectrum-indigo-900); +} +.spectrum--express.spectrum--medium { + --spectrum-checkbox-control-size-small: 14px; + --spectrum-checkbox-control-size-medium: 16px; + --spectrum-checkbox-control-size-large: 18px; + --spectrum-checkbox-control-size-extra-large: 20px; + --spectrum-checkbox-top-to-control-small: 5px; + --spectrum-checkbox-top-to-control-medium: 8px; + --spectrum-checkbox-top-to-control-large: 11px; + --spectrum-checkbox-top-to-control-extra-large: 14px; + --spectrum-switch-control-width-small: 25px; + --spectrum-switch-control-width-medium: 28px; + --spectrum-switch-control-width-large: 32px; + --spectrum-switch-control-width-extra-large: 35px; + --spectrum-switch-control-height-small: 14px; + --spectrum-switch-control-height-medium: 16px; + --spectrum-switch-control-height-large: 18px; + --spectrum-switch-control-height-extra-large: 20px; + --spectrum-switch-top-to-control-small: 5px; + --spectrum-switch-top-to-control-medium: 8px; + --spectrum-switch-top-to-control-large: 11px; + --spectrum-switch-top-to-control-extra-large: 14px; + --spectrum-radio-button-control-size-small: 14px; + --spectrum-radio-button-control-size-medium: 16px; + --spectrum-radio-button-control-size-large: 18px; + --spectrum-radio-button-control-size-extra-large: 20px; + --spectrum-radio-button-top-to-control-small: 5px; + --spectrum-radio-button-top-to-control-medium: 8px; + --spectrum-radio-button-top-to-control-large: 11px; + --spectrum-radio-button-top-to-control-extra-large: 14px; + --spectrum-slider-control-height-small: 18px; + --spectrum-slider-control-height-medium: 20px; + --spectrum-slider-control-height-large: 22px; + --spectrum-slider-control-height-extra-large: 24px; + --spectrum-slider-handle-size-small: 18px; + --spectrum-slider-handle-size-medium: 20px; + --spectrum-slider-handle-size-large: 22px; + --spectrum-slider-handle-size-extra-large: 24px; + --spectrum-slider-handle-border-width-down-small: var(--spectrum-border-width-200); + --spectrum-slider-handle-border-width-down-medium: var(--spectrum-border-width-200); + --spectrum-slider-handle-border-width-down-large: var(--spectrum-border-width-200); + --spectrum-slider-handle-border-width-down-extra-large: var(--spectrum-border-width-200); + --spectrum-slider-bottom-to-handle-small: 3px; + --spectrum-slider-bottom-to-handle-medium: 6px; + --spectrum-slider-bottom-to-handle-large: 9px; + --spectrum-slider-bottom-to-handle-extra-large: 12px; + --spectrum-corner-radius-75: 3px; + --spectrum-corner-radius-100: 6px; + --spectrum-corner-radius-200: 12px; + --spectrum-drop-shadow-x: 0px; + --spectrum-drop-shadow-y: 4px; + --spectrum-drop-shadow-blur: 16px; + --spectrum-colorwheel-path: "M 94 94 m -94 0 a 94 94 0 1 0 188 0 a 94 94 0 1 0 -188 0.2 M 94 94 m -74 0 a 74 74 0 1 0 148 0 a 74 74 0 1 0 -148 0"; + --spectrum-colorwheel-path-borders: "M 96 96 m -96 0 a 96 96 0 1 0 192 0 a 96 96 0 1 0 -192 0.2 M 96 96 m -72 0 a 72 72 0 1 0 144 0 a 72 72 0 1 0 -144 0"; + --spectrum-dialog-confirm-border-radius: 6px; + --spectrum-dial-border-radius: 12px; + --spectrum-assetcard-focus-ring-border-radius: 10px; +} + +/* ../../node_modules/@spectrum-css/typography/dist/index.css */ +.spectrum { + --spectrum-font-family-ar: + myriad-arabic, + adobe-clean, + "Source Sans Pro", + -apple-system, + blinkmacsystemfont, + "Segoe UI", + roboto, + ubuntu, + "Trebuchet MS", + "Lucida Grande", + sans-serif; + --spectrum-font-family-he: + myriad-hebrew, + adobe-clean, + "Source Sans Pro", + -apple-system, + blinkmacsystemfont, + "Segoe UI", + roboto, + ubuntu, + "Trebuchet MS", + "Lucida Grande", + sans-serif; + --spectrum-font-family: var(--spectrum-sans-font-family-stack); + --spectrum-font-style: var(--spectrum-default-font-style); + --spectrum-font-size: var(--spectrum-font-size-100); + font-family: var(--spectrum-font-family); + font-style: var(--spectrum-font-style); + font-size: var(--spectrum-font-size); +} +.spectrum:lang(ar) { + font-family: var(--spectrum-font-family-ar); +} +.spectrum:lang(he) { + font-family: var(--spectrum-font-family-he); +} +.spectrum-Heading { + --spectrum-heading-sans-serif-font-family: var(--spectrum-sans-font-family-stack); + --spectrum-heading-serif-font-family: var(--spectrum-serif-font-family-stack); + --spectrum-heading-cjk-font-family: var(--spectrum-cjk-font-family-stack); + --spectrum-heading-cjk-letter-spacing: var(--spectrum-cjk-letter-spacing); + --spectrum-heading-font-color: var(--spectrum-heading-color); + --spectrum-heading-margin-start: calc(var(--mod-heading-font-size, var(--spectrum-heading-font-size)) * var(--spectrum-heading-margin-top-multiplier)); + --spectrum-heading-margin-end: calc(var(--mod-heading-font-size, var(--spectrum-heading-font-size)) * var(--spectrum-heading-margin-bottom-multiplier)); +} +.spectrum-Heading--sizeXXS { + --spectrum-heading-font-size: var(--spectrum-heading-size-xxs); + --spectrum-heading-cjk-font-size: var(--spectrum-heading-cjk-size-xxs); +} +.spectrum-Heading--sizeXS { + --spectrum-heading-font-size: var(--spectrum-heading-size-xs); + --spectrum-heading-cjk-font-size: var(--spectrum-heading-cjk-size-xs); +} +.spectrum-Heading--sizeS { + --spectrum-heading-font-size: var(--spectrum-heading-size-s); + --spectrum-heading-cjk-font-size: var(--spectrum-heading-cjk-size-s); +} +.spectrum-Heading--sizeM { + --spectrum-heading-font-size: var(--spectrum-heading-size-m); + --spectrum-heading-cjk-font-size: var(--spectrum-heading-cjk-size-m); +} +.spectrum-Heading--sizeL { + --spectrum-heading-font-size: var(--spectrum-heading-size-l); + --spectrum-heading-cjk-font-size: var(--spectrum-heading-cjk-size-l); +} +.spectrum-Heading--sizeXL { + --spectrum-heading-font-size: var(--spectrum-heading-size-xl); + --spectrum-heading-cjk-font-size: var(--spectrum-heading-cjk-size-xl); +} +.spectrum-Heading--sizeXXL { + --spectrum-heading-font-size: var(--spectrum-heading-size-xxl); + --spectrum-heading-cjk-font-size: var(--spectrum-heading-cjk-size-xxl); +} +.spectrum-Heading--sizeXXXL { + --spectrum-heading-font-size: var(--spectrum-heading-size-xxxl); + --spectrum-heading-cjk-font-size: var(--spectrum-heading-cjk-size-xxxl); +} +.spectrum-Heading { + font-family: var(--mod-heading-sans-serif-font-family, var(--spectrum-heading-sans-serif-font-family)); + font-style: var(--mod-heading-sans-serif-font-style, var(--spectrum-heading-sans-serif-font-style)); + font-weight: var(--mod-heading-sans-serif-font-weight, var(--spectrum-heading-sans-serif-font-weight)); + font-size: var(--mod-heading-font-size, var(--spectrum-heading-font-size)); + color: var(--highcontrast-heading-font-color, var(--mod-heading-font-color, var(--spectrum-heading-font-color))); + line-height: var(--mod-heading-line-height, var(--spectrum-heading-line-height)); + margin-block-start: 0; + margin-block-end: 0; +} +.spectrum-Heading .spectrum-Heading-strong, +.spectrum-Heading strong { + font-style: var(--mod-heading-sans-serif-strong-font-style, var(--spectrum-heading-sans-serif-strong-font-style)); + font-weight: var(--mod-heading-sans-serif-strong-font-weight, var(--spectrum-heading-sans-serif-strong-font-weight)); +} +.spectrum-Heading .spectrum-Heading-emphasized, +.spectrum-Heading em { + font-style: var(--mod-heading-sans-serif-emphasized-font-style, var(--spectrum-heading-sans-serif-emphasized-font-style)); + font-weight: var(--mod-heading-sans-serif-emphasized-font-weight, var(--spectrum-heading-sans-serif-emphasized-font-weight)); +} +.spectrum-Heading .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading em strong, +.spectrum-Heading strong em { + font-style: var(--mod-heading-sans-serif-strong-emphasized-font-style, var(--spectrum-heading-sans-serif-strong-emphasized-font-style)); + font-weight: var(--mod-heading-sans-serif-strong-emphasized-font-weight, var(--spectrum-heading-sans-serif-strong-emphasized-font-weight)); +} +.spectrum-Heading:lang(ja), +.spectrum-Heading:lang(ko), +.spectrum-Heading:lang(zh) { + font-family: var(--mod-heading-cjk-font-family, var(--spectrum-heading-cjk-font-family)); + font-style: var(--mod-heading-cjk-font-style, var(--spectrum-heading-cjk-font-style)); + font-weight: var(--mod-heading-cjk-font-weight, var(--spectrum-heading-cjk-font-weight)); + font-size: var(--mod-heading-cjk-font-size, var(--spectrum-heading-cjk-font-size)); + line-height: var(--mod-heading-cjk-line-height, var(--spectrum-heading-cjk-line-height)); + letter-spacing: var(--mod-heading-cjk-letter-spacing, var(--spectrum-heading-cjk-letter-spacing)); +} +.spectrum-Heading:lang(ja) .spectrum-Heading-emphasized, +.spectrum-Heading:lang(ja) em, +.spectrum-Heading:lang(ko) .spectrum-Heading-emphasized, +.spectrum-Heading:lang(ko) em, +.spectrum-Heading:lang(zh) .spectrum-Heading-emphasized, +.spectrum-Heading:lang(zh) em { + font-style: var(--mod-heading-cjk-emphasized-font-style, var(--spectrum-heading-cjk-emphasized-font-style)); + font-weight: var(--mod-heading-cjk-emphasized-font-weight, var(--spectrum-heading-cjk-emphasized-font-weight)); +} +.spectrum-Heading:lang(ja) .spectrum-Heading-strong, +.spectrum-Heading:lang(ja) strong, +.spectrum-Heading:lang(ko) .spectrum-Heading-strong, +.spectrum-Heading:lang(ko) strong, +.spectrum-Heading:lang(zh) .spectrum-Heading-strong, +.spectrum-Heading:lang(zh) strong { + font-style: var(--mod-heading-cjk-strong-font-style, var(--spectrum-heading-cjk-strong-font-style)); + font-weight: var(--mod-heading-cjk-strong-font-weight, var(--spectrum-heading-cjk-strong-font-weight)); +} +.spectrum-Heading:lang(ja) .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading:lang(ja) em strong, +.spectrum-Heading:lang(ja) strong em, +.spectrum-Heading:lang(ko) .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading:lang(ko) em strong, +.spectrum-Heading:lang(ko) strong em, +.spectrum-Heading:lang(zh) .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading:lang(zh) em strong, +.spectrum-Heading:lang(zh) strong em { + font-style: var(--mod-heading-cjk-strong-emphasized-font-style, var(--spectrum-heading-cjk-strong-emphasized-font-style)); + font-weight: var(--mod-heading-cjk-strong-emphasized-font-weight, var(--spectrum-heading-cjk-strong-emphasized-font-weight)); +} +.spectrum-Heading--heavy { + font-style: var(--mod-heading-sans-serif-heavy-font-style, var(--spectrum-heading-sans-serif-heavy-font-style)); + font-weight: var(--mod-heading-sans-serif-heavy-font-weight, var(--spectrum-heading-sans-serif-heavy-font-weight)); +} +.spectrum-Heading--heavy .spectrum-Heading-strong, +.spectrum-Heading--heavy strong { + font-style: var(--mod-heading-sans-serif-heavy-strong-font-style, var(--spectrum-heading-sans-serif-heavy-strong-font-style)); + font-weight: var(--mod-heading-sans-serif-heavy-strong-font-weight, var(--spectrum-heading-sans-serif-heavy-strong-font-weight)); +} +.spectrum-Heading--heavy .spectrum-Heading-emphasized, +.spectrum-Heading--heavy em { + font-style: var(--mod-heading-sans-serif-heavy-emphasized-font-style, var(--spectrum-heading-sans-serif-heavy-emphasized-font-style)); + font-weight: var(--mod-heading-sans-serif-heavy-emphasized-font-weight, var(--spectrum-heading-sans-serif-heavy-emphasized-font-weight)); +} +.spectrum-Heading--heavy .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading--heavy em strong, +.spectrum-Heading--heavy strong em { + font-style: var(--mod-heading-sans-serif-heavy-strong-emphasized-font-style, var(--spectrum-heading-sans-serif-heavy-strong-emphasized-font-style)); + font-weight: var(--mod-heading-sans-serif-heavy-strong-emphasized-font-weight, var(--spectrum-heading-sans-serif-heavy-strong-emphasized-font-weight)); +} +.spectrum-Heading--heavy:lang(ja), +.spectrum-Heading--heavy:lang(ko), +.spectrum-Heading--heavy:lang(zh) { + font-style: var(--mod-heading-cjk-heavy-font-style, var(--spectrum-heading-cjk-heavy-font-style)); + font-weight: var(--mod-heading-cjk-heavy-font-weight, var(--spectrum-heading-cjk-heavy-font-weight)); +} +.spectrum-Heading--heavy:lang(ja) .spectrum-Heading-emphasized, +.spectrum-Heading--heavy:lang(ja) em, +.spectrum-Heading--heavy:lang(ko) .spectrum-Heading-emphasized, +.spectrum-Heading--heavy:lang(ko) em, +.spectrum-Heading--heavy:lang(zh) .spectrum-Heading-emphasized, +.spectrum-Heading--heavy:lang(zh) em { + font-style: var(--mod-heading-cjk-heavy-emphasized-font-style, var(--spectrum-heading-cjk-heavy-emphasized-font-style)); + font-weight: var(--mod-heading-cjk-heavy-emphasized-font-weight, var(--spectrum-heading-cjk-heavy-emphasized-font-weight)); +} +.spectrum-Heading--heavy:lang(ja) .spectrum-Heading-strong, +.spectrum-Heading--heavy:lang(ja) strong, +.spectrum-Heading--heavy:lang(ko) .spectrum-Heading-strong, +.spectrum-Heading--heavy:lang(ko) strong, +.spectrum-Heading--heavy:lang(zh) .spectrum-Heading-strong, +.spectrum-Heading--heavy:lang(zh) strong { + font-style: var(--mod-heading-cjk-heavy-strong-font-style, var(--spectrum-heading-cjk-heavy-strong-font-style)); + font-weight: var(--mod-heading-cjk-heavy-strong-font-weight, var(--spectrum-heading-cjk-heavy-strong-font-weight)); +} +.spectrum-Heading--heavy:lang(ja) .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading--heavy:lang(ja) em strong, +.spectrum-Heading--heavy:lang(ja) strong em, +.spectrum-Heading--heavy:lang(ko) .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading--heavy:lang(ko) em strong, +.spectrum-Heading--heavy:lang(ko) strong em, +.spectrum-Heading--heavy:lang(zh) .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading--heavy:lang(zh) em strong, +.spectrum-Heading--heavy:lang(zh) strong em { + font-style: var(--mod-heading-cjk-heavy-strong-emphasized-font-style, var(--spectrum-heading-cjk-heavy-strong-emphasized-font-style)); + font-weight: var(--mod-heading-cjk-heavy-strong-emphasized-font-weight, var(--spectrum-heading-cjk-heavy-strong-emphasized-font-weight)); +} +.spectrum-Heading--light { + font-style: var(--mod-heading-sans-serif-light-font-style, var(--spectrum-heading-sans-serif-light-font-style)); + font-weight: var(--mod-heading-sans-serif-light-font-weight, var(--spectrum-heading-sans-serif-light-font-weight)); +} +.spectrum-Heading--light .spectrum-Heading-emphasized, +.spectrum-Heading--light em { + font-style: var(--mod-heading-sans-serif-light-emphasized-font-style, var(--spectrum-heading-sans-serif-light-emphasized-font-style)); + font-weight: var(--mod-heading-sans-serif-light-emphasized-font-weight, var(--spectrum-heading-sans-serif-light-emphasized-font-weight)); +} +.spectrum-Heading--light .spectrum-Heading-strong, +.spectrum-Heading--light strong { + font-style: var(--mod-heading-sans-serif-light-strong-font-style, var(--spectrum-heading-sans-serif-light-strong-font-style)); + font-weight: var(--mod-heading-sans-serif-light-strong-font-weight, var(--spectrum-heading-sans-serif-light-strong-font-weight)); +} +.spectrum-Heading--light .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading--light em strong, +.spectrum-Heading--light strong em { + font-style: var(--mod-heading-sans-serif-light-strong-emphasized-font-style, var(--spectrum-heading-sans-serif-light-strong-emphasized-font-style)); + font-weight: var(--mod-heading-sans-serif-light-strong-emphasized-font-weight, var(--spectrum-heading-sans-serif-light-strong-emphasized-font-weight)); +} +.spectrum-Heading--light:lang(ja), +.spectrum-Heading--light:lang(ko), +.spectrum-Heading--light:lang(zh) { + font-style: var(--mod-heading-cjk-light-font-style, var(--spectrum-heading-cjk-light-font-style)); + font-weight: var(--mod-heading-cjk-light-font-weight, var(--spectrum-heading-cjk-light-font-weight)); +} +.spectrum-Heading--light:lang(ja) .spectrum-Heading-strong, +.spectrum-Heading--light:lang(ja) strong, +.spectrum-Heading--light:lang(ko) .spectrum-Heading-strong, +.spectrum-Heading--light:lang(ko) strong, +.spectrum-Heading--light:lang(zh) .spectrum-Heading-strong, +.spectrum-Heading--light:lang(zh) strong { + font-style: var(--mod-heading-cjk-light-strong-font-style, var(--spectrum-heading-cjk-light-strong-font-style)); + font-weight: var(--mod-heading-cjk-light-strong-font-weight, var(--spectrum-heading-cjk-light-strong-font-weight)); +} +.spectrum-Heading--light:lang(ja) .spectrum-Heading-emphasized, +.spectrum-Heading--light:lang(ja) em, +.spectrum-Heading--light:lang(ko) .spectrum-Heading-emphasized, +.spectrum-Heading--light:lang(ko) em, +.spectrum-Heading--light:lang(zh) .spectrum-Heading-emphasized, +.spectrum-Heading--light:lang(zh) em { + font-style: var(--mod-heading-cjk-light-emphasized-font-style, var(--spectrum-heading-cjk-light-emphasized-font-style)); + font-weight: var(--mod-heading-cjk-light-emphasized-font-weight, var(--spectrum-heading-cjk-light-emphasized-font-weight)); +} +.spectrum-Heading--light:lang(ja) .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading--light:lang(ja) em strong, +.spectrum-Heading--light:lang(ja) strong em, +.spectrum-Heading--light:lang(ko) .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading--light:lang(ko) em strong, +.spectrum-Heading--light:lang(ko) strong em, +.spectrum-Heading--light:lang(zh) .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading--light:lang(zh) em strong, +.spectrum-Heading--light:lang(zh) strong em { + font-style: var(--mod-heading-cjk-light-strong-emphasized-font-style, var(--spectrum-heading-cjk-light-strong-emphasized-font-style)); + font-weight: var(--mod-heading-cjk-light-strong-emphasized-font-weight, var(--spectrum-heading-cjk-light-strong-emphasized-font-weight)); +} +.spectrum-Heading--serif { + font-family: var(--mod-heading-serif-font-family, var(--spectrum-heading-serif-font-family)); + font-style: var(--mod-heading-serif-font-style, var(--spectrum-heading-serif-font-style)); + font-weight: var(--mod-heading-serif-font-weight, var(--spectrum-heading-serif-font-weight)); +} +.spectrum-Heading--serif .spectrum-Heading-emphasized, +.spectrum-Heading--serif em { + font-style: var(--mod-heading-serif-emphasized-font-style, var(--spectrum-heading-serif-emphasized-font-style)); + font-weight: var(--mod-heading-serif-emphasized-font-weight, var(--spectrum-heading-serif-emphasized-font-weight)); +} +.spectrum-Heading--serif .spectrum-Heading-strong, +.spectrum-Heading--serif strong { + font-style: var(--mod-heading-serif-strong-font-style, var(--spectrum-heading-serif-strong-font-style)); + font-weight: var(--mod-heading-serif-strong-font-weight, var(--spectrum-heading-serif-strong-font-weight)); +} +.spectrum-Heading--serif .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading--serif em strong, +.spectrum-Heading--serif strong em { + font-style: var(--mod-heading-serif-strong-emphasized-font-style, var(--spectrum-heading-serif-strong-emphasized-font-style)); + font-weight: var(--mod-heading-serif-strong-emphasized-font-weight, var(--spectrum-heading-serif-strong-emphasized-font-weight)); +} +.spectrum-Heading--serif.spectrum-Heading--heavy { + font-style: var(--mod-heading-serif-heavy-font-style, var(--spectrum-heading-serif-heavy-font-style)); + font-weight: var(--mod-heading-serif-heavy-font-weight, var(--spectrum-heading-serif-heavy-font-weight)); +} +.spectrum-Heading--serif.spectrum-Heading--heavy .spectrum-Heading-strong, +.spectrum-Heading--serif.spectrum-Heading--heavy strong { + font-style: var(--mod-heading-serif-heavy-strong-font-style, var(--spectrum-heading-serif-heavy-strong-font-style)); + font-weight: var(--mod-heading-serif-heavy-strong-font-weight, var(--spectrum-heading-serif-heavy-strong-font-weight)); +} +.spectrum-Heading--serif.spectrum-Heading--heavy .spectrum-Heading-emphasized, +.spectrum-Heading--serif.spectrum-Heading--heavy em { + font-style: var(--mod-heading-serif-heavy-emphasized-font-style, var(--spectrum-heading-serif-heavy-emphasized-font-style)); + font-weight: var(--mod-heading-serif-heavy-emphasized-font-weight, var(--spectrum-heading-serif-heavy-emphasized-font-weight)); +} +.spectrum-Heading--serif.spectrum-Heading--heavy .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading--serif.spectrum-Heading--heavy em strong, +.spectrum-Heading--serif.spectrum-Heading--heavy strong em { + font-style: var(--mod-heading-serif-heavy-strong-emphasized-font-style, var(--spectrum-heading-serif-heavy-strong-emphasized-font-style)); + font-weight: var(--mod-heading-serif-heavy-strong-emphasized-font-weight, var(--spectrum-heading-serif-heavy-strong-emphasized-font-weight)); +} +.spectrum-Heading--serif.spectrum-Heading--light { + font-style: var(--mod-heading-serif-light-font-style, var(--spectrum-heading-serif-light-font-style)); + font-weight: var(--mod-heading-serif-light-font-weight, var(--spectrum-heading-serif-light-font-weight)); +} +.spectrum-Heading--serif.spectrum-Heading--light .spectrum-Heading-emphasized, +.spectrum-Heading--serif.spectrum-Heading--light em { + font-style: var(--mod-heading-serif-light-emphasized-font-style, var(--spectrum-heading-serif-light-emphasized-font-style)); + font-weight: var(--mod-heading-serif-light-emphasized-font-weight, var(--spectrum-heading-serif-light-emphasized-font-weight)); +} +.spectrum-Heading--serif.spectrum-Heading--light .spectrum-Heading-strong, +.spectrum-Heading--serif.spectrum-Heading--light strong { + font-style: var(--mod-heading-serif-light-strong-font-style, var(--spectrum-heading-serif-light-strong-font-style)); + font-weight: var(--mod-heading-serif-light-strong-font-weight, var(--spectrum-heading-serif-light-strong-font-weight)); +} +.spectrum-Heading--serif.spectrum-Heading--light .spectrum-Heading-strong.spectrum-Heading-emphasized, +.spectrum-Heading--serif.spectrum-Heading--light em strong, +.spectrum-Heading--serif.spectrum-Heading--light strong em { + font-style: var(--mod-heading-serif-light-strong-emphasized-font-style, var(--spectrum-heading-serif-light-strong-emphasized-font-style)); + font-weight: var(--mod-heading-serif-light-strong-emphasized-font-weight, var(--spectrum-heading-serif-light-strong-emphasized-font-weight)); +} +.spectrum-Typography .spectrum-Heading { + margin-block-start: var(--mod-heading-margin-start, var(--spectrum-heading-margin-start)); + margin-block-end: var(--mod-heading-margin-end, var(--spectrum-heading-margin-end)); +} +.spectrum-Body { + --spectrum-body-sans-serif-font-family: var(--spectrum-sans-font-family-stack); + --spectrum-body-serif-font-family: var(--spectrum-serif-font-family-stack); + --spectrum-body-cjk-font-family: var(--spectrum-cjk-font-family-stack); + --spectrum-body-cjk-letter-spacing: var(--spectrum-cjk-letter-spacing); + --spectrum-body-margin: calc(var(--mod-body-font-size, var(--spectrum-body-font-size)) * var(--spectrum-body-margin-multiplier)); + --spectrum-body-font-color: var(--spectrum-body-color); +} +.spectrum-Body--sizeXS { + --spectrum-body-font-size: var(--spectrum-body-size-xs); +} +.spectrum-Body--sizeS { + --spectrum-body-font-size: var(--spectrum-body-size-s); +} +.spectrum-Body--sizeM { + --spectrum-body-font-size: var(--spectrum-body-size-m); +} +.spectrum-Body--sizeL { + --spectrum-body-font-size: var(--spectrum-body-size-l); +} +.spectrum-Body--sizeXL { + --spectrum-body-font-size: var(--spectrum-body-size-xl); +} +.spectrum-Body--sizeXXL { + --spectrum-body-font-size: var(--spectrum-body-size-xxl); +} +.spectrum-Body--sizeXXXL { + --spectrum-body-font-size: var(--spectrum-body-size-xxxl); +} +.spectrum-Body { + font-family: var(--mod-body-sans-serif-font-family, var(--spectrum-body-sans-serif-font-family)); + font-style: var(--mod-body-sans-serif-font-style, var(--spectrum-body-sans-serif-font-style)); + font-weight: var(--mod-body-sans-serif-font-weight, var(--spectrum-body-sans-serif-font-weight)); + font-size: var(--mod-body-font-size, var(--spectrum-body-font-size)); + color: var(--highcontrast-body-font-color, var(--mod-body-font-color, var(--spectrum-body-font-color))); + margin-block-start: 0; + margin-block-end: 0; + line-height: var(--mod-body-line-height, var(--spectrum-body-line-height)); +} +.spectrum-Body .spectrum-Body-strong, +.spectrum-Body strong { + font-style: var(--mod-body-sans-serif-strong-font-style, var(--spectrum-body-sans-serif-strong-font-style)); + font-weight: var(--mod-body-sans-serif-strong-font-weight, var(--spectrum-body-sans-serif-strong-font-weight)); +} +.spectrum-Body .spectrum-Body-emphasized, +.spectrum-Body em { + font-style: var(--mod-body-sans-serif-emphasized-font-style, var(--spectrum-body-sans-serif-emphasized-font-style)); + font-weight: var(--mod-body-sans-serif-emphasized-font-weight, var(--spectrum-body-sans-serif-emphasized-font-weight)); +} +.spectrum-Body .spectrum-Body-strong.spectrum-Body-emphasized, +.spectrum-Body em strong, +.spectrum-Body strong em { + font-style: var(--mod-body-sans-serif-strong-emphasized-font-style, var(--spectrum-body-sans-serif-strong-emphasized-font-style)); + font-weight: var(--mod-body-sans-serif-strong-emphasized-font-weight, var(--spectrum-body-sans-serif-strong-emphasized-font-weight)); +} +.spectrum-Body:lang(ja), +.spectrum-Body:lang(ko), +.spectrum-Body:lang(zh) { + font-family: var(--mod-body-cjk-font-family, var(--spectrum-body-cjk-font-family)); + font-style: var(--mod-body-cjk-font-style, var(--spectrum-body-cjk-font-style)); + font-weight: var(--mod-body-cjk-font-weight, var(--spectrum-body-cjk-font-weight)); + line-height: var(--mod-body-cjk-line-height, var(--spectrum-body-cjk-line-height)); + letter-spacing: var(--mod-body-cjk-letter-spacing, var(--spectrum-body-cjk-letter-spacing)); +} +.spectrum-Body:lang(ja) .spectrum-Body-strong, +.spectrum-Body:lang(ja) strong, +.spectrum-Body:lang(ko) .spectrum-Body-strong, +.spectrum-Body:lang(ko) strong, +.spectrum-Body:lang(zh) .spectrum-Body-strong, +.spectrum-Body:lang(zh) strong { + font-style: var(--mod-body-cjk-strong-font-style, var(--spectrum-body-cjk-strong-font-style)); + font-weight: var(--mod-body-cjk-strong-font-weight, var(--spectrum-body-cjk-strong-font-weight)); +} +.spectrum-Body:lang(ja) .spectrum-Body-emphasized, +.spectrum-Body:lang(ja) em, +.spectrum-Body:lang(ko) .spectrum-Body-emphasized, +.spectrum-Body:lang(ko) em, +.spectrum-Body:lang(zh) .spectrum-Body-emphasized, +.spectrum-Body:lang(zh) em { + font-style: var(--mod-body-cjk-emphasized-font-style, var(--spectrum-body-cjk-emphasized-font-style)); + font-weight: var(--mod-body-cjk-emphasized-font-weight, var(--spectrum-body-cjk-emphasized-font-weight)); +} +.spectrum-Body:lang(ja) .spectrum-Body-strong.spectrum-Body-emphasized, +.spectrum-Body:lang(ja) em strong, +.spectrum-Body:lang(ja) strong em, +.spectrum-Body:lang(ko) .spectrum-Body-strong.spectrum-Body-emphasized, +.spectrum-Body:lang(ko) em strong, +.spectrum-Body:lang(ko) strong em, +.spectrum-Body:lang(zh) .spectrum-Body-strong.spectrum-Body-emphasized, +.spectrum-Body:lang(zh) em strong, +.spectrum-Body:lang(zh) strong em { + font-style: var(--mod-body-cjk-strong-emphasized-font-style, var(--spectrum-body-cjk-strong-emphasized-font-style)); + font-weight: var(--mod-body-cjk-strong-emphasized-font-weight, var(--spectrum-body-cjk-strong-emphasized-font-weight)); +} +.spectrum-Body--serif { + font-family: var(--mod-body-serif-font-family, var(--spectrum-body-serif-font-family)); + font-weight: var(--mod-body-serif-font-weight, var(--spectrum-body-serif-font-weight)); + font-style: var(--mod-body-serif-font-style, var(--spectrum-body-serif-font-style)); +} +.spectrum-Body--serif .spectrum-Body-strong, +.spectrum-Body--serif strong { + font-style: var(--mod-body-serif-strong-font-style, var(--spectrum-body-serif-strong-font-style)); + font-weight: var(--mod-body-serif-strong-font-weight, var(--spectrum-body-serif-strong-font-weight)); +} +.spectrum-Body--serif .spectrum-Body-emphasized, +.spectrum-Body--serif em { + font-style: var(--mod-body-serif-emphasized-font-style, var(--spectrum-body-serif-emphasized-font-style)); + font-weight: var(--mod-body-serif-emphasized-font-weight, var(--spectrum-body-serif-emphasized-font-weight)); +} +.spectrum-Body--serif .spectrum-Body-strong.spectrum-Body-emphasized, +.spectrum-Body--serif em strong, +.spectrum-Body--serif strong em { + font-style: var(--mod-body-serif-strong-emphasized-font-style, var(--spectrum-body-serif-strong-emphasized-font-style)); + font-weight: var(--mod-body-serif-strong-emphasized-font-weight, var(--spectrum-body-serif-strong-emphasized-font-weight)); +} +.spectrum-Typography .spectrum-Body { + margin-block-end: var(--mod-body-margin, var(--spectrum-body-margin)); +} +.spectrum-Detail { + --spectrum-detail-sans-serif-font-family: var(--spectrum-sans-font-family-stack); + --spectrum-detail-serif-font-family: var(--spectrum-serif-font-family-stack); + --spectrum-detail-cjk-font-family: var(--spectrum-cjk-font-family-stack); + --spectrum-detail-margin-start: calc(var(--mod-detail-font-size, var(--spectrum-detail-font-size)) * var(--spectrum-detail-margin-top-multiplier)); + --spectrum-detail-margin-end: calc(var(--mod-detail-font-size, var(--spectrum-detail-font-size)) * var(--spectrum-detail-margin-bottom-multiplier)); + --spectrum-detail-font-color: var(--spectrum-detail-color); +} +.spectrum-Detail--sizeS { + --spectrum-detail-font-size: var(--spectrum-detail-size-s); +} +.spectrum-Detail--sizeM { + --spectrum-detail-font-size: var(--spectrum-detail-size-m); +} +.spectrum-Detail--sizeL { + --spectrum-detail-font-size: var(--spectrum-detail-size-l); +} +.spectrum-Detail--sizeXL { + --spectrum-detail-font-size: var(--spectrum-detail-size-xl); +} +.spectrum-Detail { + font-family: var(--mod-detail-sans-serif-font-family, var(--spectrum-detail-sans-serif-font-family)); + font-style: var(--mod-detail-sans-serif-font-style, var(--spectrum-detail-sans-serif-font-style)); + font-weight: var(--mod-detail-sans-serif-font-weight, var(--spectrum-detail-sans-serif-font-weight)); + font-size: var(--mod-detail-font-size, var(--spectrum-detail-font-size)); + margin-block-start: 0; + margin-block-end: 0; + color: var(--highcontrast-detail-font-color, var(--mod-detail-font-color, var(--spectrum-detail-font-color))); + line-height: var(--mod-detail-line-height, var(--spectrum-detail-line-height)); + letter-spacing: var(--mod-detail-letter-spacing, var(--spectrum-detail-letter-spacing)); + text-transform: uppercase; +} +.spectrum-Detail .spectrum-Detail-strong, +.spectrum-Detail strong { + font-style: var(--mod-detail-sans-serif-strong-font-style, var(--spectrum-detail-sans-serif-strong-font-style)); + font-weight: var(--mod-detail-sans-serif-strong-font-weight, var(--spectrum-detail-sans-serif-strong-font-weight)); +} +.spectrum-Detail .spectrum-Detail-emphasized, +.spectrum-Detail em { + font-style: var(--mod-detail-sans-serif-emphasized-font-style, var(--spectrum-detail-sans-serif-emphasized-font-style)); + font-weight: var(--mod-detail-sans-serif-emphasized-font-weight, var(--spectrum-detail-sans-serif-emphasized-font-weight)); +} +.spectrum-Detail .spectrum-Detail-strong.spectrum-Detail-emphasized, +.spectrum-Detail em strong, +.spectrum-Detail strong em { + font-style: var(--mod-detail-sans-serif-strong-emphasized-font-style, var(--spectrum-detail-sans-serif-strong-emphasized-font-style)); + font-weight: var(--mod-detail-sans-serif-strong-emphasized-font-weight, var(--spectrum-detail-sans-serif-strong-emphasized-font-weight)); +} +.spectrum-Detail:lang(ja), +.spectrum-Detail:lang(ko), +.spectrum-Detail:lang(zh) { + font-family: var(--mod-detail-cjk-font-family, var(--spectrum-detail-cjk-font-family)); + font-style: var(--mod-detail-cjk-font-style, var(--spectrum-detail-cjk-font-style)); + font-weight: var(--mod-detail-cjk-font-weight, var(--spectrum-detail-cjk-font-weight)); + line-height: var(--mod-detail-cjk-line-height, var(--spectrum-detail-cjk-line-height)); +} +.spectrum-Detail:lang(ja) .spectrum-Detail-strong, +.spectrum-Detail:lang(ja) strong, +.spectrum-Detail:lang(ko) .spectrum-Detail-strong, +.spectrum-Detail:lang(ko) strong, +.spectrum-Detail:lang(zh) .spectrum-Detail-strong, +.spectrum-Detail:lang(zh) strong { + font-style: var(--mod-detail-cjk-strong-font-style, var(--spectrum-detail-cjk-strong-font-style)); + font-weight: var(--mod-detail-cjk-strong-font-weight, var(--spectrum-detail-cjk-strong-font-weight)); +} +.spectrum-Detail:lang(ja) .spectrum-Detail-emphasized, +.spectrum-Detail:lang(ja) em, +.spectrum-Detail:lang(ko) .spectrum-Detail-emphasized, +.spectrum-Detail:lang(ko) em, +.spectrum-Detail:lang(zh) .spectrum-Detail-emphasized, +.spectrum-Detail:lang(zh) em { + font-style: var(--mod-detail-cjk-emphasized-font-style, var(--spectrum-detail-cjk-emphasized-font-style)); + font-weight: var(--mod-detail-cjk-emphasized-font-weight, var(--spectrum-detail-cjk-emphasized-font-weight)); +} +.spectrum-Detail:lang(ja) .spectrum-Detail-strong.spectrum-Detail-emphasized, +.spectrum-Detail:lang(ja) em strong, +.spectrum-Detail:lang(ja) strong em, +.spectrum-Detail:lang(ko) .spectrum-Detail-strong.spectrum-Detail-emphasized, +.spectrum-Detail:lang(ko) em strong, +.spectrum-Detail:lang(ko) strong em, +.spectrum-Detail:lang(zh) .spectrum-Detail-strong.spectrum-Detail-emphasized, +.spectrum-Detail:lang(zh) em strong, +.spectrum-Detail:lang(zh) strong em { + font-style: var(--mod-detail-cjk-strong-emphasized-font-style, var(--spectrum-detail-cjk-strong-emphasized-font-style)); + font-weight: var(--mod-detail-cjk-strong-emphasized-font-weight, var(--spectrum-detail-cjk-strong-emphasized-font-weight)); +} +.spectrum-Detail--serif { + font-family: var(--mod-detail-serif-font-family, var(--spectrum-detail-serif-font-family)); + font-style: var(--mod-detail-serif-font-style, var(--spectrum-detail-serif-font-style)); + font-weight: var(--mod-detail-serif-font-weight, var(--spectrum-detail-serif-font-weight)); +} +.spectrum-Detail--serif .spectrum-Detail-strong, +.spectrum-Detail--serif strong { + font-style: var(--mod-detail-serif-strong-font-style, var(--spectrum-detail-serif-strong-font-style)); + font-weight: var(--mod-detail-serif-strong-font-weight, var(--spectrum-detail-serif-strong-font-weight)); +} +.spectrum-Detail--serif .spectrum-Detail-emphasized, +.spectrum-Detail--serif em { + font-style: var(--mod-detail-serif-emphasized-font-style, var(--spectrum-detail-serif-emphasized-font-style)); + font-weight: var(--mod-detail-serif-emphasized-font-weight, var(--spectrum-detail-serif-emphasized-font-weight)); +} +.spectrum-Detail--serif .spectrum-Detail-strong.spectrum-Detail-emphasized, +.spectrum-Detail--serif em strong, +.spectrum-Detail--serif strong em { + font-style: var(--mod-detail-serif-strong-emphasized-font-style, var(--spectrum-detail-serif-strong-emphasized-font-style)); + font-weight: var(--mod-detail-serif-strong-emphasized-font-weight, var(--spectrum-detail-serif-strong-emphasized-font-weight)); +} +.spectrum-Detail--light { + font-style: var(--mod-detail-sans-serif-light-font-style, var(--spectrum-detail-sans-serif-light-font-style)); + font-weight: var(--spectrum-detail-sans-serif-light-font-weight, var(--spectrum-detail-sans-serif-light-font-weight)); +} +.spectrum-Detail--light .spectrum-Detail-strong, +.spectrum-Detail--light strong { + font-style: var(--mod-detail-sans-serif-light-strong-font-style, var(--spectrum-detail-sans-serif-light-strong-font-style)); + font-weight: var(--mod-detail-sans-serif-light-strong-font-weight, var(--spectrum-detail-sans-serif-light-strong-font-weight)); +} +.spectrum-Detail--light .spectrum-Detail-emphasized, +.spectrum-Detail--light em { + font-style: var(--mod-detail-sans-serif-light-emphasized-font-style, var(--spectrum-detail-sans-serif-light-emphasized-font-style)); + font-weight: var(--mod-detail-sans-serif-light-emphasized-font-weight, var(--spectrum-detail-sans-serif-light-emphasized-font-weight)); +} +.spectrum-Detail--light .spectrum-Detail-strong.spectrum-Body-emphasized, +.spectrum-Detail--light em strong, +.spectrum-Detail--light strong em { + font-style: var(--mod-detail-sans-serif-light-strong-emphasized-font-style, var(--spectrum-detail-sans-serif-light-strong-emphasized-font-style)); + font-weight: var(--mod-detail-sans-serif-light-strong-emphasized-font-weight, var(--spectrum-detail-sans-serif-light-strong-emphasized-font-weight)); +} +.spectrum-Detail--light:lang(ja), +.spectrum-Detail--light:lang(ko), +.spectrum-Detail--light:lang(zh) { + font-style: var(--mod-detail-cjk-light-font-style, var(--spectrum-detail-cjk-light-font-style)); + font-weight: var(--mod-detail-cjk-light-font-weight, var(--spectrum-detail-cjk-light-font-weight)); +} +.spectrum-Detail--light:lang(ja) .spectrum-Detail-strong, +.spectrum-Detail--light:lang(ja) strong, +.spectrum-Detail--light:lang(ko) .spectrum-Detail-strong, +.spectrum-Detail--light:lang(ko) strong, +.spectrum-Detail--light:lang(zh) .spectrum-Detail-strong, +.spectrum-Detail--light:lang(zh) strong { + font-style: var(--mod-detail-cjk-light-strong-font-style, var(--spectrum-detail-cjk-light-strong-font-style)); + font-weight: var(--mod-detail-cjk-light-strong-font-weight, var(--spectrum-detail-cjk-light-strong-font-weight)); +} +.spectrum-Detail--light:lang(ja) .spectrum-Detail-emphasized, +.spectrum-Detail--light:lang(ja) em, +.spectrum-Detail--light:lang(ko) .spectrum-Detail-emphasized, +.spectrum-Detail--light:lang(ko) em, +.spectrum-Detail--light:lang(zh) .spectrum-Detail-emphasized, +.spectrum-Detail--light:lang(zh) em { + font-style: var(--mod-detail-cjk-light-emphasized-font-style, var(--spectrum-detail-cjk-light-emphasized-font-style)); + font-weight: var(--mod-detail-cjk-light-emphasized-font-weight, var(--spectrum-detail-cjk-light-emphasized-font-weight)); +} +.spectrum-Detail--light:lang(ja) .spectrum-Detail-strong.spectrum-Detail-emphasized, +.spectrum-Detail--light:lang(ko) .spectrum-Detail-strong.spectrum-Detail-emphasized, +.spectrum-Detail--light:lang(zh) .spectrum-Detail-strong.spectrum-Detail-emphasized { + font-style: var(--mod-detail-cjk-light-strong-emphasized-font-style, var(--spectrum-detail-cjk-light-strong-emphasized-font-style)); + font-weight: var(--mod-detail-cjk-light-strong-emphasized-font-weight, var(--spectrum-detail-cjk-light-strong-emphasized-font-weight)); +} +.spectrum-Detail--serif.spectrum-Detail--light { + font-style: var(--mod-detail-serif-light-font-style, var(--spectrum-detail-serif-light-font-style)); + font-weight: var(--mod-detail-serif-light-font-weight, var(--spectrum-detail-serif-light-font-weight)); +} +.spectrum-Detail--serif.spectrum-Detail--light .spectrum-Detail-strong, +.spectrum-Detail--serif.spectrum-Detail--light strong { + font-style: var(--mod-detail-serif-light-strong-font-style, var(--spectrum-detail-serif-light-strong-font-style)); + font-weight: var(--mod-detail-serif-light-strong-font-weight, var(--spectrum-detail-serif-light-strong-font-weight)); +} +.spectrum-Detail--serif.spectrum-Detail--light .spectrum-Detail-emphasized, +.spectrum-Detail--serif.spectrum-Detail--light em { + font-style: var(--mod-detail-serif-light-emphasized-font-style, var(--spectrum-detail-serif-light-emphasized-font-style)); + font-weight: var(--mod-detail-serif-light-emphasized-font-weight, var(--spectrum-detail-serif-light-emphasized-font-weight)); +} +.spectrum-Detail--serif.spectrum-Detail--light .spectrum-Detail-strong.spectrum-Body-emphasized, +.spectrum-Detail--serif.spectrum-Detail--light em strong, +.spectrum-Detail--serif.spectrum-Detail--light strong em { + font-style: var(--mod-detail-serif-light-strong-emphasized-font-style, var(--spectrum-detail-serif-light-strong-emphasized-font-style)); + font-weight: var(--mod-detail-serif-light-strong-emphasized-font-weight, var(--spectrum-detail-serif-light-strong-emphasized-font-weight)); +} +.spectrum-Typography .spectrum-Detail { + margin-block-start: var(--mod-detail-margin-start, var(--spectrum-detail-margin-start)); + margin-block-end: var(--mod-detail-margin-end, var(--spectrum-detail-margin-end)); +} +.spectrum-Code { + --spectrum-code-font-family: var(--spectrum-code-font-family-stack); + --spectrum-code-cjk-letter-spacing: var(--spectrum-cjk-letter-spacing); + --spectrum-code-font-color: var(--spectrum-code-color); +} +@media (forced-colors: active) { + .spectrum-Heading { + --highcontrast-heading-font-color: Text; + } + .spectrum-Body { + --highcontrast-body-font-color: Text; + } + .spectrum-Detail { + --highcontrast-detail-font-color: Text; + } + .spectrum-Code { + --highcontrast-code-font-color: Text; + } +} +.spectrum-Code--sizeXS { + --spectrum-code-font-size: var(--spectrum-code-size-xs); +} +.spectrum-Code--sizeS { + --spectrum-code-font-size: var(--spectrum-code-size-s); +} +.spectrum-Code--sizeM { + --spectrum-code-font-size: var(--spectrum-code-size-m); +} +.spectrum-Code--sizeL { + --spectrum-code-font-size: var(--spectrum-code-size-l); +} +.spectrum-Code--sizeXL { + --spectrum-code-font-size: var(--spectrum-code-size-xl); +} +.spectrum-Code { + font-family: var(--mod-code-font-family, var(--spectrum-code-font-family)); + font-style: var(--mod-code-font-style, var(--spectrum-code-font-style)); + font-weight: var(--mod-code-font-weight, var(--spectrum-code-font-weight)); + font-size: var(--mod-code-font-size, var(--spectrum-code-font-size)); + margin-block-start: 0; + margin-block-end: 0; + line-height: var(--mod-code-line-height, var(--spectrum-code-line-height)); + color: var(--highcontrast-code-font-color, var(--mod-code-font-color, var(--spectrum-code-font-color))); +} +.spectrum-Code .spectrum-Code-strong, +.spectrum-Code strong { + font-style: var(--mod-code-strong-font-style, var(--spectrum-code-strong-font-style)); + font-weight: var(--mod-code-strong-font-weight, var(--spectrum-code-strong-font-weight)); +} +.spectrum-Code .spectrum-Code-emphasized, +.spectrum-Code em { + font-style: var(--mod-code-emphasized-font-style, var(--spectrum-code-emphasized-font-style)); + font-weight: var(--mod-code-emphasized-font-weight, var(--spectrum-code-emphasized-font-weight)); +} +.spectrum-Code .spectrum-Code-strong.spectrum-Code-emphasized, +.spectrum-Code em strong, +.spectrum-Code strong em { + font-style: var(--mod-code-strong-emphasized-font-style, var(--spectrum-code-strong-emphasized-font-style)); + font-weight: var(--mod-code-strong-emphasized-font-weight, var(--spectrum-code-strong-emphasized-font-weight)); +} +.spectrum-Code:lang(ja), +.spectrum-Code:lang(ko), +.spectrum-Code:lang(zh) { + font-family: var(--mod-code-cjk-font-family, var(--spectrum-code-cjk-font-family)); + font-style: var(--mod-code-cjk-font-style, var(--spectrum-code-cjk-font-style)); + font-weight: var(--mod-code-cjk-font-weight, var(--spectrum-code-cjk-font-weight)); + line-height: var(--mod-code-cjk-line-height, var(--spectrum-code-cjk-line-height)); + letter-spacing: var(--mod-code-cjk-letter-spacing, var(--spectrum-code-cjk-letter-spacing)); +} +.spectrum-Code:lang(ja) .spectrum-Code-strong, +.spectrum-Code:lang(ja) strong, +.spectrum-Code:lang(ko) .spectrum-Code-strong, +.spectrum-Code:lang(ko) strong, +.spectrum-Code:lang(zh) .spectrum-Code-strong, +.spectrum-Code:lang(zh) strong { + font-style: var(--mod-code-cjk-strong-font-style, var(--spectrum-code-cjk-strong-font-style)); + font-weight: var(--mod-code-cjk-strong-font-weight, var(--spectrum-code-cjk-strong-font-weight)); +} +.spectrum-Code:lang(ja) .spectrum-Code-emphasized, +.spectrum-Code:lang(ja) em, +.spectrum-Code:lang(ko) .spectrum-Code-emphasized, +.spectrum-Code:lang(ko) em, +.spectrum-Code:lang(zh) .spectrum-Code-emphasized, +.spectrum-Code:lang(zh) em { + font-style: var(--mod-code-cjk-emphasized-font-style, var(--spectrum-code-cjk-emphasized-font-style)); + font-weight: var(--mod-code-cjk-emphasized-font-weight, var(--spectrum-code-cjk-emphasized-font-weight)); +} +.spectrum-Code:lang(ja) .spectrum-Code-strong.spectrum-Code-emphasized, +.spectrum-Code:lang(ja) em strong, +.spectrum-Code:lang(ja) strong em, +.spectrum-Code:lang(ko) .spectrum-Code-strong.spectrum-Code-emphasized, +.spectrum-Code:lang(ko) em strong, +.spectrum-Code:lang(ko) strong em, +.spectrum-Code:lang(zh) .spectrum-Code-strong.spectrum-Code-emphasized, +.spectrum-Code:lang(zh) em strong, +.spectrum-Code:lang(zh) strong em { + font-style: var(--mod-code-cjk-strong-emphasized-font-style, var(--spectrum-code-cjk-strong-emphasized-font-style)); + font-weight: var(--mod-code-cjk-strong-emphasized-font-weight, var(--spectrum-code-cjk-strong-emphasized-font-weight)); +} +/*! Bundled license information: + +@spectrum-css/button/dist/index-base.css: + (*! + * Copyright 2024 Adobe. All rights reserved. + * + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + *) + +@spectrum-css/button/dist/themes/spectrum.css: + (*! + * Copyright 2024 Adobe. All rights reserved. + * + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + *) + +@spectrum-css/link/dist/index-base.css: + (*! + * Copyright 2024 Adobe. All rights reserved. + * + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + *) + +@spectrum-css/page/dist/index.css: + (*! + * Copyright 2024 Adobe. All rights reserved. + * + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + *) + +@spectrum-css/tokens/dist/index.css: + (*! + * Copyright 2024 Adobe. All rights reserved. + * + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + *) + +@spectrum-css/typography/dist/index.css: + (*! + * Copyright 2024 Adobe. All rights reserved. + * + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + *) +*/ diff --git a/libs/features/mas/docs/spectrum.js b/libs/features/mas/docs/spectrum.js new file mode 100644 index 00000000000..8afef300663 --- /dev/null +++ b/libs/features/mas/docs/spectrum.js @@ -0,0 +1,2 @@ +(() => { +})(); diff --git a/libs/features/mas/build-docs.mjs b/libs/features/mas/docs/src/build-docs.mjs similarity index 70% rename from libs/features/mas/build-docs.mjs rename to libs/features/mas/docs/src/build-docs.mjs index a35e1341234..5ebac568d3a 100644 --- a/libs/features/mas/build-docs.mjs +++ b/libs/features/mas/docs/src/build-docs.mjs @@ -25,8 +25,6 @@ if (!targetFile) { process.exit(1); } -const skipMas = process.argv.includes('--skip-mas'); - // Initialize markdown-it with desired plugins const md = markdownIt({ html: true, @@ -53,6 +51,11 @@ const outputPath = path.join(targetFile); // Read the Markdown file const inputContent = fs.readFileSync(inputPath, 'utf8'); +// depending on surface, load either Milo consonant or Spectrum styles +const styleDependecy = ['plans.md'].includes(sourceFile) + ? '' + : ''; + // Render Markdown to HTML const htmlContent = md.render(inputContent); @@ -64,38 +67,32 @@ const htmlTemplate = ` M@S Web Components - + ${styleDependecy} + + - - - - - - - - - + - + +
      ${htmlContent} @@ -111,6 +108,7 @@ ${htmlContent} const scriptTags = targetContainer.getElementsByTagName('script'); for (let i = 0; i < scriptTags.length; i++) { const script = document.createElement('script'); + script.type = 'module'; script.text = scriptTags[i].text; document.body.appendChild(script); // Appends to the document to execute scriptTags[i].remove(); // Remove the script tag diff --git a/libs/features/mas/docs/src/build-docs.sh b/libs/features/mas/docs/src/build-docs.sh new file mode 100755 index 00000000000..93359cbb3e6 --- /dev/null +++ b/libs/features/mas/docs/src/build-docs.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +node ./build-docs.mjs inline-price.md ../inline-price.html +node ./build-docs.mjs checkout-link.md ../checkout-link.html +node ./build-docs.mjs checkout-button.md ../checkout-button.html +node ./build-docs.mjs mas.md ../mas.html +node ./build-docs.mjs mas.js.md ../mas.js.html +node ./build-docs.mjs merch-card.md ../merch-card.html +node ./build-docs.mjs plans.md ../plans.html +npx esbuild --bundle --outfile=../spectrum.js ./spectrum.mjs diff --git a/libs/features/mas/docs/src/checkout-button.md b/libs/features/mas/docs/src/checkout-button.md new file mode 100644 index 00000000000..17d3a6e701b --- /dev/null +++ b/libs/features/mas/docs/src/checkout-button.md @@ -0,0 +1,218 @@ +# checkout-button {#checkout-button} + +## Introduction {#introduction} + +This custom element renders a checkout button supporting most of the features documented at https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=businessservices&title=UCv3+button+Creation+Guide.
      + +Behind the scene, it uses https://git.corp.adobe.com/PandoraUI/commerce-core to generate the checkout url. + +It requires an Offer Selector ID to retrieve the offer details from WCS. + +See [MAS](mas.html#terminology) to learn more. + +â„šī¸ Unlike `checkout-link`, in order to prevent the default click event from redirecting to checkout url, register the click event using `{capture: true}`. +
      See the demo at the [end](#example-2) + +### Example + +```html {.demo} + +``` + +## Attributes {#attributes} + +| Attribute | Description | Default Value | Required | Provider | +| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------- | -------- | ----------------------- | +| `data-wcs-osi` | Offer Selector ID, can be multiple, separeted by comma | | `true` | mas.js or consumer code | +| `data-checkout-workflow` | Target checkout workflow for the generation of checkout urls | UCv3 | `false` | mas.js | +| `data-checkout-workflow-step` | [workflow step](https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=businessservices&title=UCv3+button+Creation+Guide#UCv3buttonCreationGuide-RegularWorkflow) to land on the unified checkout page | email | `false` | mas.js | +| `data-extra-options` | additional query params to append to the url, see: [Table of public query params](https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=businessservices&title=UCv3+button+Creation+Guide#UCv3buttonCreationGuide-Tableofpublicqueryparams) | {} | `false` | mas.js | +| `data-ims-country` | the ims country to code of the user if signed in, overrides the locale country in the generated checkout url | | `false` | mas.js or consumer code | +| `data-perpetual` | whether this is a perpetual offer `true\|false` | | `false` | mas.js | +| `data-promotion-code` | Flex promotion code, if applicable | | `false` | mas.js | +| `data-quantity` | Quantity of the offer to purchase | 1 | `false` | mas.js or consumer code | +| `data-entitlement` | `entitlement` flag for client side interpretation | `false` | `false` | mas.js | +| `data-upgrade` | `upgrade` flag for client side interpretation | `false` | `false` | mas.js | +| `data-modal` | `modal` flag for client side interpretation | `false` | `false` | mas.js | +| `data-analytics-id` | human-readable, non-translatable button id for analytics. Authored in Studio in button Editor. | `false` | `false` | mas.js | +| `daa-ll` | martech-compatible button id for analytics. Format: '${data-analytics-id}-${#}', where # is the position of the button within a card. E.g. : see-terms-1, buy-now-2 | `false` | `false` | mas.js | + +### Examples {#examples} + +#### Custom Workflow Step + +```html {.demo} + +``` + +#### Multiple Quantities + +Two photoshop and three acrobat pro single apps (TEAMS): + +```html {.demo} + +``` + +#### Custom query params + +```html {.demo} + +``` + +#### IMS Country + +```html {.demo} + +``` + +## Properties {#properties} + +| Property | Description | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `isCheckoutButton` | on checkout button elements, it will return `true` | +| `onceSettled` | promise that resolves when the custom-element either resolves or fails to resolve the offer | +| `options` | JSON object with the complete set of properties used to resolve the offer | +| `value` | The actual offer that is used to render the checkout button. In some cases WCS can return multiple offers but only one will be picked to render for a single app. | + +### Example + +```html {.demo} + + +``` + +#### value property + +```json {#coValue} + +``` + +#### options property + +```json {#coOptions} + +``` + +## Methods {#methods} + +| Property | Description | +| ------------------------------ | -------------------------------------------------------------------------------------------------------------- | +| `requestUpdate(true \| false)` | Causes a re-render using the actual options, force = false by default, meaning if no change is found will skip | + +## Events {#events} + +| Event | Description | +| -------------- | -------------------------------------------------- | +| `mas:pending` | fires when checkout button starts loading | +| `mas:resolved` | fires when the offer is successfully resolved | +| `mas:failed` | fires when the offer could not be found or fetched | + +
      + +For each event, the following css classes are toggled on the element: `placeholder-pending`, `placeholder-resolved`, `placeholder-failed`. + +### Example + +```html {.demo} +
      +
      + + +``` + +#### Logs + +```html {#log} + +``` diff --git a/libs/features/mas/commerce/checkout-link.md b/libs/features/mas/docs/src/checkout-link.md similarity index 74% rename from libs/features/mas/commerce/checkout-link.md rename to libs/features/mas/docs/src/checkout-link.md index 36605122bae..8cac95f8c02 100644 --- a/libs/features/mas/commerce/checkout-link.md +++ b/libs/features/mas/docs/src/checkout-link.md @@ -25,19 +25,21 @@ See [MAS](mas.html#terminology) to learn more. ## Attributes {#attributes} -| Attribute | Description | Default Value | Required | -| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -------- | -| `data-wcs-osi` | Offer Selector ID, can be multiple, separeted by comma | | `true` | -| `data-checkout-workflow` | Target checkout workflow for the generation of checkout urls | UCv3 | `false` | -| `data-checkout-workflow-step` | [workflow step](https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=businessservices&title=UCv3+Link+Creation+Guide#UCv3LinkCreationGuide-RegularWorkflow) to land on the unified checkout page | email | `false` | -| `data-extra-options` | additional query params to append to the url, see: [Table of public query params](https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=businessservices&title=UCv3+Link+Creation+Guide#UCv3LinkCreationGuide-Tableofpublicqueryparams) | {} | `false` | -| `data-ims-country` | the ims country to code of the user if signed in, overrides the locale country in the generated checkout url | | `false` | -| `data-perpetual` | whether this is a perpetual offer `true\|false` | | `false` | -| `data-promotion-code` | Flex promotion code, if applicable | | `false` | -| `data-quantity` | Quantity of the offer to purchase | 1 | `false` | -| `data-entitlement` | `entitlement` flag for client side interpretation | `false` | `false` | -| `data-upgrade` | `upgrade` flag for client side interpretation | `false` | `false` | -| `data-modal` | `modal` flag for client side interpretation | `false` | `false` | +| Attribute | Description | Default Value | Required | Provider | +| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -------- | ----------------------- | +| `data-wcs-osi` | Offer Selector ID, can be multiple, separeted by comma | | `true` | mas.js or consumer code | +| `data-checkout-workflow` | Target checkout workflow for the generation of checkout urls | UCv3 | `false` | mas.js | +| `data-checkout-workflow-step` | [workflow step](https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=businessservices&title=UCv3+Link+Creation+Guide#UCv3LinkCreationGuide-RegularWorkflow) to land on the unified checkout page | email | `false` | mas.js | +| `data-extra-options` | additional query params to append to the url, see: [Table of public query params](https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=businessservices&title=UCv3+Link+Creation+Guide#UCv3LinkCreationGuide-Tableofpublicqueryparams) | {} | `false` | mas.js | +| `data-ims-country` | the ims country to code of the user if signed in, overrides the locale country in the generated checkout url | | `false` | mas.js or consumer code | +| `data-perpetual` | whether this is a perpetual offer `true\|false` | | `false` | mas.js | +| `data-promotion-code` | Flex promotion code, if applicable | | `false` | mas.js | +| `data-quantity` | Quantity of the offer to purchase | 1 | `false` | mas.js or consumer code | +| `data-entitlement` | `entitlement` flag for client side interpretation | `false` | `false` | mas.js | +| `data-upgrade` | `upgrade` flag for client side interpretation | `false` | `false` | mas.js | +| `data-modal` | `modal` flag for client side interpretation | `false` | `false` | mas.js | +| `data-analytics-id` | human-readable, non-translatable link id for analytics. Authored in Studio in Link Editor. | `false` | `false` | mas.js | +| `daa-ll` | martech-compatible link id for analytics. Format: '${data-analytics-id}-${#}', where # is the position of the link within a card. E.g. : see-terms-1, buy-now-2 | `false` | `false` | mas.js | ### Examples {#examples} @@ -155,38 +157,57 @@ Two photoshop and three acrobat pro single apps (TEAMS): | `mas:pending` | fires when checkout link starts loading | | `mas:resolved` | fires when the offer is successfully resolved | | `mas:failed` | fires when the offer could not be found or fetched | -| `click` | native click event on the `a` element |
      -For each event except `click`, the following css classes are toggled on the element: `placeholder-pending`, `placeholder-resolved`, `placeholder-failed`. +For each event, the following css classes are toggled on the element: `placeholder-pending`, `placeholder-resolved`, `placeholder-failed`. ### Example ```html {.demo} -Buy now (click me) + ``` diff --git a/libs/features/mas/commerce/inline-price.md b/libs/features/mas/docs/src/inline-price.md similarity index 100% rename from libs/features/mas/commerce/inline-price.md rename to libs/features/mas/docs/src/inline-price.md diff --git a/libs/features/mas/mas/mas.js.md b/libs/features/mas/docs/src/mas.js.md similarity index 85% rename from libs/features/mas/mas/mas.js.md rename to libs/features/mas/docs/src/mas.js.md index 08a2073393b..1d68c31a389 100644 --- a/libs/features/mas/mas/mas.js.md +++ b/libs/features/mas/docs/src/mas.js.md @@ -8,29 +8,46 @@ mas.js includes the followings custom elements: - [inline-price](/libs/features/mas/docs/inline-price.html) - [checkout-link](/libs/features/mas/docs/checkout-link.html) +- [checkout-button](/libs/features/mas/docs/checkout-button.html) - [merch-card](/libs/features/mas/docs/merch-card.html) -- [CCD Gallery](/libs/features/mas/docs/ccd.html) ## Enablement `mas-commerce-service` +âš ī¸ Safari does not support customized built-in elements. Therefore, you need to load the following polyfill before `mas.js` for browser compatibility (not required for in-app usage). +```html + +``` -You do need to have mas.js on your page / application, including it can be done like the following +To add `mas.js` to your page or application, include it as shown below: ```html - + ``` ### Attributes -| Name | Description | Default Value | Required | -| ------------------------ | --------------------------------------------------------------------------------------------------- | ---------------------------- | -------- | -| `allow-override` | enables override of commerce env/landscape via query parameters(commerce.env/commerce.landscape) |  `false` |  `false` | -| `checkout-client-id` | checkout client id |  `false` |  `false` | -| `checkout-workflow-step` | default checkout workflow step | `CheckoutWorkflowStep.EMAIL` | `false` | -| `country` | country of the offers to retrieve from WCS, determines the currency, price format, etc. | US or locale country if set | `false` | -|  `env` | commerce environment you want this page to use, either `stage` or `prod` |  `prod` |  `false` | -|  `force-tax-exclusive` | force all price display to be tax exclusive |  `false` |  `false` | -| `locale` | currency & price locale you need, must belong to one of the [supported locales](#supported-locales) | `en_US` | `false` | -| `language` | language of the price literal, e.g: per license | en or locale langauge if set | `false` | +| Name | Description | Default Value | Required | +| ------------------------ | --------------------------------------------------------------------------------------------------- | -------------------------------- | -------- | +| `allow-override` | enables override of commerce env/landscape via query parameters(commerce.env/commerce.landscape) |  `false` |  `false` | +| `checkout-client-id` | checkout client id |  `false` |  `false` | +| `checkout-workflow-step` | default checkout workflow step | `CheckoutWorkflowStep.EMAIL` | `false` | +| `country` | country of the offers to retrieve from WCS, determines the currency, price format, etc. | US or locale country if set | `false` | +|  `env` | commerce environment you want this page to use, either `stage` or `prod` |  `prod` |  `false` | +|  `host-env` | host environment, either `stage` or `prod` |  `prod` |  `false` | +|  `force-tax-exclusive` | force all price display to be tax exclusive |  `false` |  `false` | +| `locale` | currency & price locale you need, must belong to one of the [supported locales](#supported-locales) | `en_US` | `false` | +| `language` | language of the price literal, e.g: per license | en or locale langauge if set | `false` | +| `wcs-api-key` | api key used for making WCS calls | `wcms-commerce-ims-ro-user-milo` | `false` | +| `lana-tags` | Enables logging via lana[^1][^2] with the given tags. e.g:`ccd`. | | `false` | +| `lana-sample-rate` | Sets the sampling rate, see [^1] for details. | 1 | `false` | + +[^1]: https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=WCMSOps&title=LANA+-+Log+Always+Never+Assume + +[^2]: https://github.com/adobecom/milo/blob/stage/libs/utils/lana.js ### Methods @@ -64,6 +81,12 @@ You do need to have mas.js on your page / application, including it can be done + + + ``` you can play around with below price, either adding locale, language or env as parameters that will be injected to `mas-commerce-service` as attributes, and then it will be activated. diff --git a/libs/features/mas/mas.md b/libs/features/mas/docs/src/mas.md similarity index 72% rename from libs/features/mas/mas.md rename to libs/features/mas/docs/src/mas.md index 40378f339a7..df9b311161f 100644 --- a/libs/features/mas/mas.md +++ b/libs/features/mas/docs/src/mas.md @@ -32,7 +32,7 @@ MAS includes the following key components: - Core commerce for basic functionality - UI components for user interface elements -5. **mas.js**: A JavaScript library to enable "4" on any page. [mas.js documentation](/libs/features/mas/docs/mas.js.html){.con-button .blue} +5. **mas.js**: A JavaScript library to enable "4" on any page. [mas.js documentation](/libs/features/mas/docs/mas.js.html){.con-button .primary-link} ## Terminology @@ -56,3 +56,13 @@ MAS integrates its components to provide a seamless commerce experience: 2. The Offer Selector Tool helps in selecting appropriate offers. 3. Web Components and mas.js are used to implement the commerce functionality. 4. WCS provides the necessary commerce data through its APIs. + +## Analytics +For analytics purposes, every `` tag can be tagged with 'PRODUCT_CODE' tag in Studio. When `PRODUCT_CODE` tag is present on the card, `` will reflect the tag value in the 'daa-lh' attribute. It is a non-translatable, human-readable card id. +To set a non-translatable, human-readable id on link - open Link editor in Studio and select the value from the dropdown. +Once value is set, every link will have 2 attributes: +* data-analytics-id - the value set in studio, without changes e.g. 'buy-now' +* daa-ll - the value set in studio + position of the link within the card, e.g. 'free-trial-1', 'buy-now-2' + +Example: if you have 5 cards with buy-now cta on your page, you can take a combination of merch-card daa-lh and link daa-ll: +${daa-lh}--${daa-ll}: will result in 'phlt--buy-now-2'. diff --git a/libs/features/mas/web-components/merch-card.md b/libs/features/mas/docs/src/merch-card.md similarity index 50% rename from libs/features/mas/web-components/merch-card.md rename to libs/features/mas/docs/src/merch-card.md index 93dda22c986..38798b2fddb 100644 --- a/libs/features/mas/web-components/merch-card.md +++ b/libs/features/mas/docs/src/merch-card.md @@ -1,3 +1,5 @@ + + # merch-card custom element ## Introduction @@ -6,15 +8,23 @@ This custom element implements all the merch-card variants provided in acom and A `merch-card` can be rendered using either static html markup or `aem-fragment` custom element to retrieve a card from Odin/AEM. +The CTAs styles depend on Spectrum CSS that must be provided by the consumer. + Designs: **ACOM**: https://www.figma.com/design/tiEUQLJ1hVlosqwzAATVXZ/Cards-(Merch)?node-id=1086-17994&t=LeMR0vbaBoEKaKln-1 **CCD**: https://www.figma.com/proto/7tUtNgFelfMjgPoJ5QcE1k/Merch%40Scale-Frameworks?node-id=2077-63597&t=cWfdzWlga79eyjyI-1 -## Examples +**Adobe Home**: https://www.figma.com/design/7tUtNgFelfMjgPoJ5QcE1k/Merch%40Scale-Frameworks?node-id=2081-22654&m=dev + +**CCD Gallery**: [/libs/features/mas/docs/ccd.html](/libs/features/mas/docs/ccd.html) +CCD Gallery provides a comprehensive list of all supported card variants in CCD. -### With an Odin/AEM Fragment (VPN required) +**Adobe Home Gallery**: [/libs/features/mas/docs/adobe-home.html](/libs/features/mas/docs/adobe-home.html) +Adobe Home Gallery provides a comprehensive list of all supported card variants in Adobe Home. + +## Examples ```html {.demo .light} @@ -26,43 +36,43 @@ Designs: ``` #### Logs -```html {#log} +```html {#log1} ``` @@ -90,16 +100,17 @@ Designs: ### Attributes -| Name | Description | Default Value | Required | -| ----------- | ----------------------------------------------------------------------------------------- | ------------------------------------ | -------- | -| `variant` | Variant in terms design. Not required when used with an `aem-fragment` | | `false` | -| `consonant` | Whether to use consonant styles without sp-button decorator around the footer CTAs. | `true` if `aem-fragment` is not used | `false` | -| `size` | card width; a card can span over 2 columns or entire row on a css grid `wide\|super-wide` | | `false` | +| Name | Description | Default Value | Required | Provider | +| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -------- | -------- | +| `variant` | Variant in terms design. Not required when used with an `aem-fragment` | | `false` | mas.js | +| `consonant` | Uses Consonant for the footer CTA styles during hydration from an aem fragment | `false` | `false` | mas.js | +| `spectrum` | Uses Spectrum for the footer CTA styles during hydration from an aem fragment. (options: `css`, `swc`) | `css` | `false` | mas.js | +| `size` | card width; a card can span over 2 columns or entire row on a css grid `wide\|super-wide` | | `false` | mas.js | +| `daa-lh` | Analytics identifier of a card. Value is coming from the 'PRODUCT_CODE' tag set on the card (for now manual authoring required, later will be tagged automatically). Sample values: 'ccsn' or 'phlt'. | | `false` | mas.js | #### Active variants: - `catalog` -- `ccd-action` - `image` - `inline-heading` - `mini-compare-chart` @@ -109,15 +120,20 @@ Designs: - `special-offers` - `twp` - `ccd-slice` +- `ccd-suggested` +- `ah-try-buy-widget` ### Properties -| Name | Description | -| ---------------- | ---------------------------------------------------------------- | -| `updateComplete` | a promise that resolves when the `merch-card` finishes to execute render method. Doesn't mean that card is ready, for that use 'mas:ready' or 'mas:error' event. method. Doesn’t mean that card is ready, for that use ‘mas:ready’ or ‘mas:error’ event. | +| Name | Description | +| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `updateComplete` | a promise that resolves when the `merch-card` finishes to execute render method. Doesn't mean that card is ready, for that use 'mas:ready' or 'mas:error' event. | ### Events +We recommend to listen to events on the container, so that listener is attached before the merch card is appended to DOM. +The reason is that some merch cards are resolved very quickly and event could dispatch before event listener is attached by consumer code. + | Name | Description | | ----------- | ---------------------------------------------------------------------------- | | `mas:ready` | fires when all the prices & checkout links are resolved & renderered | @@ -173,10 +189,12 @@ Designs: log(target, `${e.target.nodeName}: ${e.detail}`), ); - card.addEventListener('mas:ready', () => - card.classList.add('ready'), - ); + card.addEventListener('mas:ready', () => { + card.classList.add('ready'); + card.classList.remove('error'); + }); card.addEventListener('mas:error', (e) => { + card.classList.remove('ready'); card.classList.add('error'); log(target, `${e.target.nodeName}: ${e.detail}`); }); @@ -197,15 +215,65 @@ Designs: ``` +### spectrum = 'swc' + +The `spectrum` attribute is used to specify the Spectrum technology to use for rendering the CTAs. +With `swc` the checkout buttons are rendered as Spectrum SWC sp-button and the click event is directed to actual checkout-button web component that is kept off the DOM. +However, it can be accessed via `e.target.source` property. + +```html {.demo .light} + + + + + +``` + +```html {#log3} + +``` + ## aem-fragment custom element ### Attributes -| Name | Description | Default Value | Required | -| ---------- | ---------------------------------------------------------------------------------------- | ------------- | -------- | -| `fragment` | Fragment id. The copy/use feature in M@S Studio will copy the id/markup to the clipboard | | `true` | -| `title` | Informative title | | `false` | -| `ims` | attempts to use an IMS access token via `window.adobeid.authorize()` to fetch a fragment | | `false` | +| Name | Description | Default Value | Required | Provider | +| ---------- | ---------------------------------------------------------------------------------------- | ------------- | -------- | ------------- | +| `fragment` | Fragment id. The copy/use feature in M@S Studio will copy the id/markup to the clipboard | | `true` | consumer code | +| `title` | Informative title | | `false` | consumer code | +| `ims` | attempts to use an IMS access token via `window.adobeid.authorize()` to fetch a fragment | | `false` | mas.js | ### Properties @@ -236,14 +304,17 @@ Designs: ``` -```html {#log3} +```html {#log4} + +``` + +## Extending merch-card + +The `merch-card` custom element renders content in its default slot, allowing consumers to seamlessly extend it with additional UI capabilities. + +### Example +In the demo below, the `aem-fragment` custom element is headless and does not render any content. +The `sp-action-button` custom element renders into the default slot as no explicit slot is provided. + +```html {.demo .light} + + + + + + ``` diff --git a/libs/features/mas/docs/src/plans.md b/libs/features/mas/docs/src/plans.md new file mode 100644 index 00000000000..c38d040185d --- /dev/null +++ b/libs/features/mas/docs/src/plans.md @@ -0,0 +1,22 @@ + diff --git a/libs/features/mas/docs/src/spectrum.mjs b/libs/features/mas/docs/src/spectrum.mjs new file mode 100644 index 00000000000..76a80a85baf --- /dev/null +++ b/libs/features/mas/docs/src/spectrum.mjs @@ -0,0 +1,6 @@ +import '@spectrum-css/button/dist/index-base.css'; +import '@spectrum-css/button/dist/themes/spectrum.css'; +import '@spectrum-css/link/dist/index-base.css'; +import '@spectrum-css/page/dist/index.css'; +import '@spectrum-css/tokens/dist/index.css'; +import '@spectrum-css/typography/dist/index.css'; diff --git a/libs/features/mas/docs/styles.css b/libs/features/mas/docs/styles.css index 896087e7792..0c556fd0bf1 100644 --- a/libs/features/mas/docs/styles.css +++ b/libs/features/mas/docs/styles.css @@ -1,143 +1,290 @@ +body { + margin: 0; + padding: 0; + display: flex; + min-height: 100vh; +} + +body.spectrum--darkest { + background-color: #1e1e1e; +} + +.sidenav { + width: 105px; + background-color: #f4f4f4; + padding: 5px; + box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1); + flex-shrink: 0; +} + +.sidenav a { + display: block; + padding: 5px 5px; + text-decoration: none; + color: #333; + font-size: 13px; + font-weight: bold; /* Makes text bold */ + text-transform: uppercase; /* Converts text to uppercase */ +} + +.sidenav a:hover { + background-color: #ddd; + color: #000; +} + main { - display: flex; - justify-content: center; - margin: 0 16px; -} - -sp-theme { - width: 100%; - max-width: 1200px; - font-family: - adobe-clean, - var( - --mod-body-sans-serif-font-family, - var(--spectrum-body-sans-serif-font-family) - ); - font-style: - var( - --mod-body-sans-serif-font-style, - var(--spectrum-body-sans-serif-font-style) - ); - font-weight: - var( - --mod-body-sans-serif-font-weight, - var(--spectrum-body-sans-serif-font-weight) - ); - font-size: var(--mod-body-font-size, var(--spectrum-body-font-size)); - color: - var( - --highcontrast-body-font-color, - var(--mod-body-font-color, var(--spectrum-body-font-color)) - ); - line-height: var(--mod-body-line-height, var(--spectrum-body-line-height)); - margin-block: 0; + display: flex; + background: var(--spectrum-gray-50); + flex: 1; + justify-content: center; + margin: 0 16px; + padding: 20px; +} + +/* Media query for small screens */ +@media (max-width: 768px) { + body { + flex-direction: column; /* Stack content vertically */ + } + + .sidenav { + width: 100%; /* Make sidenav take full width */ + box-shadow: none; /* Remove shadow for bottom layout */ + } +} + +.container { + width: 100%; + max-width: 966px; + font-family: adobe-clean, var(--spectrum-body-sans-serif-font-family); + font-style: var(--spectrum-body-sans-serif-font-style); + font-weight: var(--spectrum-body-sans-serif-font-weight); + line-height: var(--spectrum-body-line-height); + margin-block: 0; } table { - width: 100%; - border-collapse: collapse; + width: 100%; + border-collapse: collapse; } th, td { - border: 1px solid #ddd; - padding: 8px; + border: 1px solid #ddd; + padding: 8px; } th { - background-color: #f2f2f2; - text-align: left; + background-color: #f2f2f2; + text-align: left; } tr:nth-child(even) { - background-color: #f9f9f9; + background-color: #f9f9f9; } .warning { - padding: 15px; - background-color: #fff3cd; - border-left: 6px solid #ffeeba; - margin-bottom: 20px; - border-radius: 4px; + padding: 15px; + background-color: #fff3cd; + border-left: 6px solid #ffeeba; + margin-bottom: 20px; + border-radius: 4px; } .warning p { - margin: 0; + margin: 0; } .price-unit-type::before, .price-tax-inclusivity::before { - content: " "; + content: ' '; } .example { - margin: 20px 0; - background-color: var(--spectrum-global-color-gray-300); + margin: 20px 0; + background-color: var(--spectrum-global-color-gray-300); } .placeholder-failed { - display: inline-block; - border: 1px solid #f00; - padding: 0 10px; + display: inline-block; + border: 1px solid #f00; + padding: 0 10px; } span.placeholder-failed::after { - content: "failed"; + content: 'failed'; +} + +merch-card { + justify-self: stretch; } merch-card:not([variant]) { - display: none; + visibility: hidden; } pre { - max-height: 500px; - overflow: scroll; - background-color: var(--spectrum-global-color-gray-300); + max-height: 500px; + overflow: scroll; + background-color: var(--spectrum-global-color-gray-300); } .demo-container { - display: flex; - padding: 16px; - flex-direction: column; - background-color: var(--spectrum-global-color-gray-300); + display: flex; + padding: 16px; + flex-direction: column; + background-color: var(--spectrum-global-color-gray-300); } .light .demo-container { - background-color: var(--spectrum-global-color-gray-100); + background-color: var(--spectrum-global-color-gray-100); } #log, +#log1, #log2, -#log3 { +#log3, +#log4 { display: block; } button { - margin-top: 16px; + margin-top: 16px; } .gallery-content { - background-color: var(--spectrum-gray-100); - color: var(--spectrum-gray-800); + display: block; padding: 30px; } -.gallery-grid-3 { - display: grid; - grid-template-columns: repeat(3, 1fr); /* 3 cards per row */ - gap: 20px; - margin: 0 auto; +code { + max-width: 90vw; +} + +.spectrum--darkest .gallery-content { + color: #fbecec; +} + +.gallery-content .three-merch-cards { + justify-content: start; +} + +.three-merch-cards.ccd-suggested { + grid-template-columns: minmax(270px, 305px); +} + +@media screen and (min-width: 644px) { + .three-merch-cards.ccd-suggested { + grid-template-columns: repeat(2, minmax(270px, 305px)); + } +} + +@media screen and (min-width: 966px) { + .three-merch-cards.ccd-suggested { + grid-template-columns: repeat(3, minmax(270px, 305px)); + } +} + +merch-card[variant='ccd-slice'][size='wide'] { + grid-column: span 2; +} + +.three-merch-cards.ccd-slice { + grid-template-columns: minmax(290px, 322px); +} + +.benchmarks.three-merch-cards.ah-try-buy-widget { + grid-template-columns: minmax(156px, 484px); +} + +@media screen and (min-width: 644px) { + .three-merch-cards.ccd-slice { + grid-template-columns: repeat(2, minmax(290px, 322px)); + } + + .benchmarks.three-merch-cards.ah-try-buy-widget { + grid-template-columns: repeat(2, 156px); + } +} + +@media screen and (min-width: 966px) { + .three-merch-cards.ccd-slice { + grid-template-columns: repeat(3, minmax(290px, 322px)); + } + + .benchmarks.three-merch-cards.ah-try-buy-widget { + grid-template-columns: repeat(3, minmax(156px, min-content)); + } +} + +/* Adobe Home */ + +h1, +h2, +h3, +h4, +h5 { + color: var(--spectrum-gray-900); +} + +.theme-selection { + color: var(--spectrum-gray-900); +} + +.adobe-home-container { + display: flex; + padding: 20px; + flex-direction: column; + align-items: flex-start; + gap: 16px; + border-radius: 16px; + background: var(--spectrum-gray-100); + box-shadow: 0px 2px 8px 0px rgba(0, 0, 0, 0.16); + margin-top: 16px; +} + +.size-header { + margin: 0; +} + +.one-merch-card.ah-try-buy-widget { + grid-template-columns: minmax(484px, 0); +} + +.two-merch-cards.ah-try-buy-widget { + grid-template-columns: repeat(2, minmax(238px, 0px)); + gap: 8px; +} + +.three-merch-cards.ah-try-buy-widget { + grid-template-columns: repeat(3, minmax(156px, 0px)); + gap: 8px; +} + +.theme-toggle { + color: var(--spectrum-gray-900); +} + +.flex-cards { + display: flex; + flex-wrap: wrap; + gap: 32px; +} + +/* benchmark stuff */ +.benchmark-mask { + font-size: larger; + font-weight: bold; + display: flex; + justify-content: center; + align-items: center; + color: white; } -.gallery-grid-2 { - display: grid; - grid-template-columns: repeat(2, 1fr); /* 3 cards per row */ - gap: 20px; - margin: 0 auto; +.benchmark-mask-over-limit { + background: rgba(217, 109, 109, 0.7); } -.gallery-grid-1 { - display: grid; - grid-template-columns: 1fr; - gap: 20px; +.benchmark-mask-under-limit { + background: rgba(133, 215, 133, 0.7); } diff --git a/libs/features/mas/commerce/internal/data-models-odm-0.5.4.tgz b/libs/features/mas/internal/data-models-odm-0.5.4.tgz similarity index 100% rename from libs/features/mas/commerce/internal/data-models-odm-0.5.4.tgz rename to libs/features/mas/internal/data-models-odm-0.5.4.tgz diff --git a/libs/features/mas/commerce/internal/data-source-utils-0.3.1.tgz b/libs/features/mas/internal/data-source-utils-0.3.1.tgz similarity index 100% rename from libs/features/mas/commerce/internal/data-source-utils-0.3.1.tgz rename to libs/features/mas/internal/data-source-utils-0.3.1.tgz diff --git a/libs/features/mas/commerce/internal/fetch-1.3.4.tgz b/libs/features/mas/internal/fetch-1.3.4.tgz similarity index 100% rename from libs/features/mas/commerce/internal/fetch-1.3.4.tgz rename to libs/features/mas/internal/fetch-1.3.4.tgz diff --git a/libs/features/mas/commerce/internal/logger-1.3.0.tgz b/libs/features/mas/internal/logger-1.3.0.tgz similarity index 100% rename from libs/features/mas/commerce/internal/logger-1.3.0.tgz rename to libs/features/mas/internal/logger-1.3.0.tgz diff --git a/libs/features/mas/internal/tacocat-core-1.13.1.tgz b/libs/features/mas/internal/tacocat-core-1.13.1.tgz new file mode 100644 index 00000000000..8dd565d374a Binary files /dev/null and b/libs/features/mas/internal/tacocat-core-1.13.1.tgz differ diff --git a/libs/features/mas/mas/.gitignore b/libs/features/mas/mas/.gitignore deleted file mode 100644 index 2a61e8973e4..00000000000 --- a/libs/features/mas/mas/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -mas.json -stats.json -*.tgz - diff --git a/libs/features/mas/mas/build.mjs b/libs/features/mas/mas/build.mjs deleted file mode 100644 index 0e29b2ad1f7..00000000000 --- a/libs/features/mas/mas/build.mjs +++ /dev/null @@ -1,30 +0,0 @@ -import { build } from 'esbuild'; -import fs from 'node:fs'; - -const defaults = { - alias: { - react: '../mocks/react.js', - }, - bundle: true, - format: 'esm', - metafile: true, - minify: true, - platform: 'browser', - target: ['es2020'], - external: [], - sourcemap: false, -}; - -let { metafile } = await build({ - ...defaults, - entryPoints: ['./src/mas.js'], - outfile: '../../../deps/mas/mas.js', -}); - -await build({ - ...defaults, - entryPoints: ['./src/mas.js'], - outfile: './dist/mas.js', -}); - -fs.writeFileSync('mas.json', JSON.stringify(metafile)); diff --git a/libs/features/mas/mas/dist/mas.js b/libs/features/mas/mas/dist/mas.js deleted file mode 100644 index 884431c55f4..00000000000 --- a/libs/features/mas/mas/dist/mas.js +++ /dev/null @@ -1,2114 +0,0 @@ -var us=Object.create;var Yt=Object.defineProperty;var ms=Object.getOwnPropertyDescriptor;var ps=Object.getOwnPropertyNames;var fs=Object.getPrototypeOf,gs=Object.prototype.hasOwnProperty;var Vi=e=>{throw TypeError(e)};var xs=(e,t,r)=>t in e?Yt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var vs=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),bs=(e,t)=>{for(var r in t)Yt(e,r,{get:t[r],enumerable:!0})},As=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ps(t))!gs.call(e,i)&&i!==r&&Yt(e,i,{get:()=>t[i],enumerable:!(n=ms(t,i))||n.enumerable});return e};var Es=(e,t,r)=>(r=e!=null?us(fs(e)):{},As(t||!e||!e.__esModule?Yt(r,"default",{value:e,enumerable:!0}):r,e));var p=(e,t,r)=>xs(e,typeof t!="symbol"?t+"":t,r),Mr=(e,t,r)=>t.has(e)||Vi("Cannot "+r);var M=(e,t,r)=>(Mr(e,t,"read from private field"),r?r.call(e):t.get(e)),j=(e,t,r)=>t.has(e)?Vi("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),fe=(e,t,r,n)=>(Mr(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r),ze=(e,t,r)=>(Mr(e,t,"access private method"),r);var Yo=vs((pu,ml)=>{ml.exports={total:38,offset:0,limit:38,data:[{lang:"ar",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u0627\u0644\u0634\u0647\u0631} YEAR {/\u0627\u0644\u0639\u0627\u0645} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u0643\u0644 \u0634\u0647\u0631} YEAR {\u0643\u0644 \u0639\u0627\u0645} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u0644\u0643\u0644 \u062A\u0631\u062E\u064A\u0635} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u0644\u0643\u0644 \u062A\u0631\u062E\u064A\u0635} other {}}",freeLabel:"\u0645\u062C\u0627\u0646\u064B\u0627",freeAriaLabel:"\u0645\u062C\u0627\u0646\u064B\u0627",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"\u0623\u0648 \u0628\u062F\u0644\u0627\u064B \u0645\u0646 \u0630\u0644\u0643 \u0628\u0642\u064A\u0645\u0629 {alternativePrice}",strikethroughAriaLabel:"\u0628\u0634\u0643\u0644 \u0645\u0646\u062A\u0638\u0645 \u0628\u0642\u064A\u0645\u0629 {strikethroughPrice}"},{lang:"bg",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u043C\u0435\u0441.} YEAR {/\u0433\u043E\u0434.} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u043D\u0430 \u043C\u0435\u0441\u0435\u0446} YEAR {\u043D\u0430 \u0433\u043E\u0434\u0438\u043D\u0430} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u043D\u0430 \u043B\u0438\u0446\u0435\u043D\u0437} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u043D\u0430 \u043B\u0438\u0446\u0435\u043D\u0437} other {}}",freeLabel:"\u0411\u0435\u0437\u043F\u043B\u0430\u0442\u043D\u043E",freeAriaLabel:"\u0411\u0435\u0437\u043F\u043B\u0430\u0442\u043D\u043E",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"\u0410\u043B\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u043E \u043D\u0430 {alternativePrice}",strikethroughAriaLabel:"\u0420\u0435\u0434\u043E\u0432\u043D\u043E \u043D\u0430 {strikethroughPrice}"},{lang:"cs",recurrenceLabel:"{recurrenceTerm, select, MONTH {/m\u011Bs\xEDc} YEAR {/rok} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {za m\u011Bs\xEDc} YEAR {za rok} other {}}",perUnitLabel:"{perUnit, select, LICENSE {za licenci} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {za licenci} other {}}",freeLabel:"Zdarma",freeAriaLabel:"Zdarma",taxExclusiveLabel:"{taxTerm, select, GST {bez dan\u011B ze zbo\u017E\xED a slu\u017Eeb} VAT {bez DPH} TAX {bez dan\u011B} IVA {bez IVA} SST {bez SST} KDV {bez KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {v\u010Detn\u011B dan\u011B ze zbo\u017E\xED a slu\u017Eeb} VAT {v\u010Detn\u011B DPH} TAX {v\u010Detn\u011B dan\u011B} IVA {v\u010Detn\u011B IVA} SST {v\u010Detn\u011B SST} KDV {v\u010Detn\u011B KDV} other {}}",alternativePriceAriaLabel:"P\u0159\xEDpadn\u011B za {alternativePrice}",strikethroughAriaLabel:"Pravideln\u011B za {strikethroughPrice}"},{lang:"da",recurrenceLabel:"{recurrenceTerm, select, MONTH {/md} YEAR {/\xE5r} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {pr. m\xE5ned} YEAR {pr. \xE5r} other {}}",perUnitLabel:"{perUnit, select, LICENSE {pr. licens} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {pr. licens} other {}}",freeLabel:"Gratis",freeAriaLabel:"Gratis",taxExclusiveLabel:"{taxTerm, select, GST {ekskl. GST} VAT {ekskl. moms} TAX {ekskl. skat} IVA {ekskl. IVA} SST {ekskl. SST} KDV {ekskl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {inkl. GST} VAT {inkl. moms} TAX {inkl. skat} IVA {inkl. IVA} SST {inkl. SST} KDV {inkl. KDV} other {}}",alternativePriceAriaLabel:"Alternativt til {alternativePrice}",strikethroughAriaLabel:"Normalpris {strikethroughPrice}"},{lang:"de",recurrenceLabel:"{recurrenceTerm, select, MONTH {/Monat} YEAR {/Jahr} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {pro Monat} YEAR {pro Jahr} other {}}",perUnitLabel:"{perUnit, select, LICENSE {pro Lizenz} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {pro Lizenz} other {}}",freeLabel:"Kostenlos",freeAriaLabel:"Kostenlos",taxExclusiveLabel:"{taxTerm, select, GST {zzgl. GST} VAT {zzgl. MwSt.} TAX {zzgl. Steuern} IVA {zzgl. IVA} SST {zzgl. SST} KDV {zzgl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {inkl. GST} VAT {inkl. MwSt.} TAX {inkl. Steuern} IVA {inkl. IVA} SST {inkl. SST} KDV {inkl. KDV} other {}}",alternativePriceAriaLabel:"Alternativ: {alternativePrice}",strikethroughAriaLabel:"Regul\xE4r: {strikethroughPrice}"},{lang:"en",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mo} YEAR {/yr} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per month} YEAR {per year} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per license} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per license} other {}}",freeLabel:"Free",freeAriaLabel:"Free",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Alternatively at {alternativePrice}",strikethroughAriaLabel:"Regularly at {strikethroughPrice}"},{lang:"et",recurrenceLabel:"{recurrenceTerm, select, MONTH {kuus} YEAR {aastas} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {kuus} YEAR {aastas} other {}}",perUnitLabel:"{perUnit, select, LICENSE {litsentsi kohta} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {litsentsi kohta} other {}}",freeLabel:"Tasuta",freeAriaLabel:"Tasuta",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Teise v\xF5imalusena hinnaga {alternativePrice}",strikethroughAriaLabel:"Tavahind {strikethroughPrice}"},{lang:"fi",recurrenceLabel:"{recurrenceTerm, select, MONTH {/kk} YEAR {/v} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {kuukausittain} YEAR {vuosittain} other {}}",perUnitLabel:"{perUnit, select, LICENSE {k\xE4ytt\xF6oikeutta kohti} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {k\xE4ytt\xF6oikeutta kohti} other {}}",freeLabel:"Maksuton",freeAriaLabel:"Maksuton",taxExclusiveLabel:"{taxTerm, select, GST {ilman GST:t\xE4} VAT {ilman ALV:t\xE4} TAX {ilman veroja} IVA {ilman IVA:ta} SST {ilman SST:t\xE4} KDV {ilman KDV:t\xE4} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {sis. GST:n} VAT {sis. ALV:n} TAX {sis. verot} IVA {sis. IVA:n} SST {sis. SST:n} KDV {sis. KDV:n} other {}}",alternativePriceAriaLabel:"Vaihtoehtoisesti hintaan {alternativePrice}",strikethroughAriaLabel:"S\xE4\xE4nn\xF6llisesti hintaan {strikethroughPrice}"},{lang:"fr",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mois} YEAR {/an} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {par mois} YEAR {par an} other {}}",perUnitLabel:"{perUnit, select, LICENSE {par licence} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {par licence} other {}}",freeLabel:"Gratuit",freeAriaLabel:"Gratuit",taxExclusiveLabel:"{taxTerm, select, GST {hors TPS} VAT {hors TVA} TAX {hors taxes} IVA {hors IVA} SST {hors SST} KDV {hors KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {TPS comprise} VAT {TVA comprise} TAX {taxes comprises} IVA {IVA comprise} SST {SST comprise} KDV {KDV comprise} other {}}",alternativePriceAriaLabel:"Autre prix {alternativePrice}",strikethroughAriaLabel:"Prix habituel {strikethroughPrice}"},{lang:"he",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u05D7\u05D5\u05D3\u05E9} YEAR {/\u05E9\u05E0\u05D4} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u05DC\u05D7\u05D5\u05D3\u05E9} YEAR {\u05DC\u05E9\u05E0\u05D4} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u05DC\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u05DC\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF} other {}}",freeLabel:"\u05D7\u05D9\u05E0\u05DD",freeAriaLabel:"\u05D7\u05D9\u05E0\u05DD",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"\u05DC\u05D7\u05DC\u05D5\u05E4\u05D9\u05DF \u05D1-{alternativePrice}",strikethroughAriaLabel:"\u05D1\u05D0\u05D5\u05E4\u05DF \u05E7\u05D1\u05D5\u05E2 \u05D1-{strikethroughPrice}"},{lang:"hu",recurrenceLabel:"{recurrenceTerm, select, MONTH {/h\xF3} YEAR {/\xE9v} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {havonta} YEAR {\xE9vente} other {}}",perUnitLabel:"{perUnit, select, LICENSE {licencenk\xE9nt} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {licencenk\xE9nt} other {}}",freeLabel:"Ingyenes",freeAriaLabel:"Ingyenes",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"M\xE1sik lehet\u0151s\xE9g: {alternativePrice}",strikethroughAriaLabel:"\xC1ltal\xE1ban {strikethroughPrice} \xE1ron"},{lang:"it",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mese} YEAR {/anno} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {al mese} YEAR {all'anno} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per licenza} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per licenza} other {}}",freeLabel:"Gratuito",freeAriaLabel:"Gratuito",taxExclusiveLabel:"{taxTerm, select, GST {escl. GST} VAT {escl. IVA.} TAX {escl. imposte} IVA {escl. IVA} SST {escl. SST} KDV {escl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. IVA} TAX {incl. imposte} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"In alternativa a {alternativePrice}",strikethroughAriaLabel:"Regolarmente a {strikethroughPrice}"},{lang:"ja",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u6708} YEAR {/\u5E74} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u6BCE\u6708} YEAR {\u6BCE\u5E74} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u30E9\u30A4\u30BB\u30F3\u30B9\u3054\u3068} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u30E9\u30A4\u30BB\u30F3\u30B9\u3054\u3068} other {}}",freeLabel:"\u7121\u6599",freeAriaLabel:"\u7121\u6599",taxExclusiveLabel:"{taxTerm, select, GST {GST \u5225} VAT {VAT \u5225} TAX {\u7A0E\u5225} IVA {IVA \u5225} SST {SST \u5225} KDV {KDV \u5225} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {GST \u8FBC} VAT {VAT \u8FBC} TAX {\u7A0E\u8FBC} IVA {IVA \u8FBC} SST {SST \u8FBC} KDV {KDV \u8FBC} other {}}",alternativePriceAriaLabel:"\u7279\u5225\u4FA1\u683C : {alternativePrice}",strikethroughAriaLabel:"\u901A\u5E38\u4FA1\u683C : {strikethroughPrice}"},{lang:"ko",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\uC6D4} YEAR {/\uB144} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\uC6D4\uAC04} YEAR {\uC5F0\uAC04} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\uB77C\uC774\uC120\uC2A4\uB2F9} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\uB77C\uC774\uC120\uC2A4\uB2F9} other {}}",freeLabel:"\uBB34\uB8CC",freeAriaLabel:"\uBB34\uB8CC",taxExclusiveLabel:"{taxTerm, select, GST {GST \uC81C\uC678} VAT {VAT \uC81C\uC678} TAX {\uC138\uAE08 \uC81C\uC678} IVA {IVA \uC81C\uC678} SST {SST \uC81C\uC678} KDV {KDV \uC81C\uC678} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {GST \uD3EC\uD568} VAT {VAT \uD3EC\uD568} TAX {\uC138\uAE08 \uD3EC\uD568} IVA {IVA \uD3EC\uD568} SST {SST \uD3EC\uD568} KDV {KDV \uD3EC\uD568} other {}}",alternativePriceAriaLabel:"\uB610\uB294 {alternativePrice}\uC5D0",strikethroughAriaLabel:"\uB610\uB294 {alternativePrice}\uC5D0"},{lang:"lt",recurrenceLabel:"{recurrenceTerm, select, MONTH { per m\u0117n.} YEAR { per metus} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per m\u0117n.} YEAR {per metus} other {}}",perUnitLabel:"{perUnit, select, LICENSE {u\u017E licencij\u0105} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {u\u017E licencij\u0105} other {}}",freeLabel:"Nemokamai",freeAriaLabel:"Nemokamai",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Arba u\u017E {alternativePrice}",strikethroughAriaLabel:"Normaliai u\u017E {strikethroughPrice}"},{lang:"lv",recurrenceLabel:"{recurrenceTerm, select, MONTH {m\u0113nes\u012B} YEAR {gad\u0101} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {m\u0113nes\u012B} YEAR {gad\u0101} other {}}",perUnitLabel:"{perUnit, select, LICENSE {vienai licencei} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {vienai licencei} other {}}",freeLabel:"Bezmaksas",freeAriaLabel:"Bezmaksas",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Alternat\u012Bvi par {alternativePrice}",strikethroughAriaLabel:"Regul\u0101ri par {strikethroughPrice}"},{lang:"nb",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mnd.} YEAR {/\xE5r} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per m\xE5ned} YEAR {per \xE5r} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per lisens} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per lisens} other {}}",freeLabel:"Fri",freeAriaLabel:"Fri",taxExclusiveLabel:"{taxTerm, select, GST {ekskl. GST} VAT {ekskl. moms} TAX {ekskl. avgift} IVA {ekskl. IVA} SST {ekskl. SST} KDV {ekskl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {inkl. GST} VAT {inkl. moms} TAX {inkl. avgift} IVA {inkl. IVA} SST {inkl. SST} KDV {inkl. KDV} other {}}",alternativePriceAriaLabel:"Alternativt til {alternativePrice}",strikethroughAriaLabel:"Regelmessig til {strikethroughPrice}"},{lang:"nl",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mnd} YEAR {/jr} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per maand} YEAR {per jaar} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per licentie} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per licentie} other {}}",freeLabel:"Gratis",freeAriaLabel:"Gratis",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. btw} TAX {excl. belasting} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. btw} TAX {incl. belasting} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Nu {alternativePrice}",strikethroughAriaLabel:"Normaal {strikethroughPrice}"},{lang:"pl",recurrenceLabel:"{recurrenceTerm, select, MONTH { / mies.} YEAR { / rok} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH { / miesi\u0105c} YEAR { / rok} other {}}",perUnitLabel:"{perUnit, select, LICENSE {za licencj\u0119} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {za licencj\u0119} other {}}",freeLabel:"Bezp\u0142atne",freeAriaLabel:"Bezp\u0142atne",taxExclusiveLabel:"{taxTerm, select, GST {bez GST} VAT {bez VAT} TAX {netto} IVA {bez IVA} SST {bez SST} KDV {bez KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {z GST} VAT {z VAT} TAX {brutto} IVA {z IVA} SST {z SST} KDV {z KDV} other {}}",alternativePriceAriaLabel:"Lub za {alternativePrice}",strikethroughAriaLabel:"Cena zwyk\u0142a: {strikethroughPrice}"},{lang:"pt",recurrenceLabel:"{recurrenceTerm, select, MONTH {/m\xEAs} YEAR {/ano} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {por m\xEAs} YEAR {por ano} other {}}",perUnitLabel:"{perUnit, select, LICENSE {por licen\xE7a} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {por licen\xE7a} other {}}",freeLabel:"Gratuito",freeAriaLabel:"Gratuito",taxExclusiveLabel:"{taxTerm, select, GST {ICMS n\xE3o incluso} VAT {IVA n\xE3o incluso} TAX {impostos n\xE3o inclusos} IVA {IVA n\xE3o incluso} SST { SST n\xE3o incluso} KDV {KDV n\xE3o incluso} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {ICMS incluso} VAT {IVA incluso} TAX {impostos inclusos} IVA {IVA incluso} SST {SST incluso} KDV {KDV incluso} other {}}",alternativePriceAriaLabel:"Ou a {alternativePrice}",strikethroughAriaLabel:"Pre\xE7o normal: {strikethroughPrice}"},{lang:"ro",recurrenceLabel:"{recurrenceTerm, select, MONTH {/lun\u0103} YEAR {/an} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {pe lun\u0103} YEAR {pe an} other {}}",perUnitLabel:"{perUnit, select, LICENSE {pe licen\u021B\u0103} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {pe licen\u021B\u0103} other {}}",freeLabel:"Gratuit",freeAriaLabel:"Gratuit",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Alternativ, la {alternativePrice}",strikethroughAriaLabel:"\xCEn mod normal, la {strikethroughPrice}"},{lang:"ru",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u043C\u0435\u0441.} YEAR {/\u0433.} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u0432 \u043C\u0435\u0441\u044F\u0446} YEAR {\u0432 \u0433\u043E\u0434} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u0437\u0430 \u043B\u0438\u0446\u0435\u043D\u0437\u0438\u044E} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u0437\u0430 \u043B\u0438\u0446\u0435\u043D\u0437\u0438\u044E} other {}}",freeLabel:"\u0411\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u043E",freeAriaLabel:"\u0411\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u043E",taxExclusiveLabel:"{taxTerm, select, GST {\u0438\u0441\u043A\u043B. \u043D\u0430\u043B\u043E\u0433 \u043D\u0430 \u0442\u043E\u0432\u0430\u0440\u044B \u0438 \u0443\u0441\u043B\u0443\u0433\u0438} VAT {\u0438\u0441\u043A\u043B. \u041D\u0414\u0421} TAX {\u0438\u0441\u043A\u043B. \u043D\u0430\u043B\u043E\u0433} IVA {\u0438\u0441\u043A\u043B. \u0418\u0412\u0410} SST {\u0438\u0441\u043A\u043B. SST} KDV {\u0438\u0441\u043A\u043B. \u041A\u0414\u0412} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {\u0432\u043A\u043B. \u043D\u0430\u043B\u043E\u0433 \u043D\u0430 \u0442\u043E\u0432\u0430\u0440\u044B \u0438 \u0443\u0441\u043B\u0443\u0433\u0438} VAT {\u0432\u043A\u043B. \u041D\u0414\u0421} TAX {\u0432\u043A\u043B. \u043D\u0430\u043B\u043E\u0433} IVA {\u0432\u043A\u043B. \u0418\u0412\u0410} SST {\u0432\u043A\u043B. SST} KDV {\u0432\u043A\u043B. \u041A\u0414\u0412} other {}}",alternativePriceAriaLabel:"\u0410\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u0437\u0430 {alternativePrice}",strikethroughAriaLabel:"\u0420\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u043E \u043F\u043E \u0446\u0435\u043D\u0435 {strikethroughPrice}"},{lang:"sk",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mesiac} YEAR {/rok} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {za mesiac} YEAR {za rok} other {}}",perUnitLabel:"{perUnit, select, LICENSE {za licenciu} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {za licenciu} other {}}",freeLabel:"Zadarmo",freeAriaLabel:"Zadarmo",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Pr\xEDpadne za {alternativePrice}",strikethroughAriaLabel:"Pravidelne za {strikethroughPrice}"},{lang:"sl",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mesec} YEAR {/leto} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {na mesec} YEAR {na leto} other {}}",perUnitLabel:"{perUnit, select, LICENSE {na licenco} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {na licenco} other {}}",freeLabel:"Brezpla\u010Dno",freeAriaLabel:"Brezpla\u010Dno",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Druga mo\u017Enost je: {alternativePrice}",strikethroughAriaLabel:"Redno po {strikethroughPrice}"},{lang:"sv",recurrenceLabel:"{recurrenceTerm, select, MONTH {/m\xE5n} YEAR {/\xE5r} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per m\xE5nad} YEAR {per \xE5r} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per licens} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per licens} other {}}",freeLabel:"Kostnadsfritt",freeAriaLabel:"Kostnadsfritt",taxExclusiveLabel:"{taxTerm, select, GST {exkl. GST} VAT {exkl. moms} TAX {exkl. skatt} IVA {exkl. IVA} SST {exkl. SST} KDV {exkl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {inkl. GST} VAT {inkl. moms} TAX {inkl. skatt} IVA {inkl. IVA} SST {inkl. SST} KDV {inkl. KDV} other {}}",alternativePriceAriaLabel:"Alternativt f\xF6r {alternativePrice}",strikethroughAriaLabel:"Normalpris {strikethroughPrice}"},{lang:"tr",recurrenceLabel:"{recurrenceTerm, select, MONTH {/ay} YEAR {/y\u0131l} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {(ayl\u0131k)} YEAR {(y\u0131ll\u0131k)} other {}}",perUnitLabel:"{perUnit, select, LICENSE {(lisans ba\u015F\u0131na)} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {(lisans ba\u015F\u0131na)} other {}}",freeLabel:"\xDCcretsiz",freeAriaLabel:"\xDCcretsiz",taxExclusiveLabel:"{taxTerm, select, GST {GST hari\xE7} VAT {KDV hari\xE7} TAX {vergi hari\xE7} IVA {IVA hari\xE7} SST {SST hari\xE7} KDV {KDV hari\xE7} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {GST dahil} VAT {KDV dahil} TAX {vergi dahil} IVA {IVA dahil} SST {SST dahil} KDV {KDV dahil} other {}}",alternativePriceAriaLabel:"Ya da {alternativePrice}",strikethroughAriaLabel:"Standart fiyat: {strikethroughPrice}"},{lang:"uk",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u043C\u0456\u0441.} YEAR {/\u0440\u0456\u043A} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u043D\u0430 \u043C\u0456\u0441\u044F\u0446\u044C} YEAR {\u043D\u0430 \u0440\u0456\u043A} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u0437\u0430 \u043B\u0456\u0446\u0435\u043D\u0437\u0456\u044E} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u0437\u0430 \u043B\u0456\u0446\u0435\u043D\u0437\u0456\u044E} other {}}",freeLabel:"\u0411\u0435\u0437\u043A\u043E\u0448\u0442\u043E\u0432\u043D\u043E",freeAriaLabel:"\u0411\u0435\u0437\u043A\u043E\u0448\u0442\u043E\u0432\u043D\u043E",taxExclusiveLabel:"{taxTerm, select, GST {\u0431\u0435\u0437 GST} VAT {\u0431\u0435\u0437 \u041F\u0414\u0412} TAX {\u0431\u0435\u0437 \u043F\u043E\u0434\u0430\u0442\u043A\u0443} IVA {\u0431\u0435\u0437 IVA} SST {\u0431\u0435\u0437 SST} KDV {\u0431\u0435\u0437 KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {\u0440\u0430\u0437\u043E\u043C \u0456\u0437 GST} VAT {\u0440\u0430\u0437\u043E\u043C \u0456\u0437 \u041F\u0414\u0412} TAX {\u0440\u0430\u0437\u043E\u043C \u0456\u0437 \u043F\u043E\u0434\u0430\u0442\u043A\u043E\u043C} IVA {\u0440\u0430\u0437\u043E\u043C \u0437 IVA} SST {\u0440\u0430\u0437\u043E\u043C \u0456\u0437 SST} KDV {\u0440\u0430\u0437\u043E\u043C \u0456\u0437 KDV} other {}}",alternativePriceAriaLabel:"\u0410\u0431\u043E \u0437\u0430 {alternativePrice}",strikethroughAriaLabel:"\u0417\u0432\u0438\u0447\u0430\u0439\u043D\u0430 \u0446\u0456\u043D\u0430 {strikethroughPrice}"},{lang:"zh-hans",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u6708} YEAR {/\u5E74} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u6BCF\u6708} YEAR {\u6BCF\u5E74} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u6BCF\u4E2A\u8BB8\u53EF\u8BC1} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u6BCF\u4E2A\u8BB8\u53EF\u8BC1} other {}}",freeLabel:"\u514D\u8D39",freeAriaLabel:"\u514D\u8D39",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"\u6216\u5B9A\u4EF7 {alternativePrice}",strikethroughAriaLabel:"\u6B63\u5E38\u4EF7 {strikethroughPrice}"},{lang:"zh-hant",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u6708} YEAR {/\u5E74} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u6BCF\u6708} YEAR {\u6BCF\u5E74} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u6BCF\u500B\u6388\u6B0A} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u6BCF\u500B\u6388\u6B0A} other {}}",freeLabel:"\u514D\u8CBB",freeAriaLabel:"\u514D\u8CBB",taxExclusiveLabel:"{taxTerm, select, GST {\u4E0D\u542B GST} VAT {\u4E0D\u542B VAT} TAX {\u4E0D\u542B\u7A05} IVA {\u4E0D\u542B IVA} SST {\u4E0D\u542B SST} KDV {\u4E0D\u542B KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {\u542B GST} VAT {\u542B VAT} TAX {\u542B\u7A05} IVA {\u542B IVA} SST {\u542B SST} KDV {\u542B KDV} other {}}",alternativePriceAriaLabel:"\u6216\u8005\u5728 {alternativePrice}",strikethroughAriaLabel:"\u6A19\u6E96\u50F9\u683C\u70BA {strikethroughPrice}"},{lang:"es",recurrenceLabel:"{recurrenceTerm, select, MONTH {/mes} YEAR {/a\xF1o} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {al mes} YEAR {al a\xF1o} other {}}",perUnitLabel:"{perUnit, select, LICENSE {por licencia} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {por licencia} other {}}",freeLabel:"Gratuito",freeAriaLabel:"Gratuito",taxExclusiveLabel:"{taxTerm, select, GST {GST no incluido} VAT {IVA no incluido} TAX {Impuestos no incluidos} IVA {IVA no incluido} SST {SST no incluido} KDV {KDV no incluido} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {GST incluido} VAT {IVA incluido} TAX {Impuestos incluidos} IVA {IVA incluido} SST {SST incluido} KDV {KDV incluido} other {}}",alternativePriceAriaLabel:"Alternativamente por {alternativePrice}",strikethroughAriaLabel:"Normalmente a {strikethroughPrice}"},{lang:"in",recurrenceLabel:"{recurrenceTerm, select, MONTH {/bulan} YEAR {/tahun} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per bulan} YEAR {per tahun} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per lisensi} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per lisensi} other {}}",freeLabel:"Gratis",freeAriaLabel:"Gratis",taxExclusiveLabel:"{taxTerm, select, GST {tidak termasuk PBJ} VAT {tidak termasuk PPN} TAX {tidak termasuk pajak} IVA {tidak termasuk IVA} SST {tidak termasuk SST} KDV {tidak termasuk KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {termasuk PBJ} VAT {termasuk PPN} TAX {termasuk pajak} IVA {termasuk IVA} SST {termasuk SST} KDV {termasuk KDV} other {}}",alternativePriceAriaLabel:"Atau seharga {alternativePrice}",strikethroughAriaLabel:"Normalnya seharga {strikethroughPrice}"},{lang:"vi",recurrenceLabel:"{recurrenceTerm, select, MONTH {/th\xE1ng} YEAR {/n\u0103m} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {m\u1ED7i th\xE1ng} YEAR {m\u1ED7i n\u0103m} other {}}",perUnitLabel:"{perUnit, select, LICENSE {m\u1ED7i gi\u1EA5y ph\xE9p} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {m\u1ED7i gi\u1EA5y ph\xE9p} other {}}",freeLabel:"Mi\u1EC5n ph\xED",freeAriaLabel:"Mi\u1EC5n ph\xED",taxExclusiveLabel:"{taxTerm, select, GST {ch\u01B0a bao g\u1ED3m thu\u1EBF h\xE0ng h\xF3a v\xE0 d\u1ECBch v\u1EE5} VAT {ch\u01B0a bao g\u1ED3m thu\u1EBF GTGT} TAX {ch\u01B0a bao g\u1ED3m thu\u1EBF} IVA {ch\u01B0a bao g\u1ED3m IVA} SST {ch\u01B0a bao g\u1ED3m SST} KDV {ch\u01B0a bao g\u1ED3m KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {(\u0111\xE3 bao g\u1ED3m thu\u1EBF h\xE0ng h\xF3a v\xE0 d\u1ECBch v\u1EE5)} VAT {(\u0111\xE3 bao g\u1ED3m thu\u1EBF GTGT)} TAX {(\u0111\xE3 bao g\u1ED3m thu\u1EBF)} IVA {(\u0111\xE3 bao g\u1ED3m IVA)} SST {(\u0111\xE3 bao g\u1ED3m SST)} KDV {(\u0111\xE3 bao g\u1ED3m KDV)} other {}}",alternativePriceAriaLabel:"Gi\xE1 \u01B0u \u0111\xE3i {alternativePrice}",strikethroughAriaLabel:"Gi\xE1 th\xF4ng th\u01B0\u1EDDng {strikethroughPrice}"},{lang:"th",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u0E40\u0E14\u0E37\u0E2D\u0E19} YEAR {/\u0E1B\u0E35} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u0E15\u0E48\u0E2D\u0E40\u0E14\u0E37\u0E2D\u0E19} YEAR {\u0E15\u0E48\u0E2D\u0E1B\u0E35} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u0E15\u0E48\u0E2D\u0E2A\u0E34\u0E17\u0E18\u0E34\u0E4C\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u0E15\u0E48\u0E2D\u0E2A\u0E34\u0E17\u0E18\u0E34\u0E4C\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19} other {}}",freeLabel:"\u0E1F\u0E23\u0E35",freeAriaLabel:"\u0E1F\u0E23\u0E35",taxExclusiveLabel:"{taxTerm, select, GST {\u0E44\u0E21\u0E48\u0E23\u0E27\u0E21\u0E20\u0E32\u0E29\u0E35 GST} VAT {\u0E44\u0E21\u0E48\u0E23\u0E27\u0E21 VAT} TAX {\u0E44\u0E21\u0E48\u0E23\u0E27\u0E21\u0E20\u0E32\u0E29\u0E35} IVA {\u0E44\u0E21\u0E48\u0E23\u0E27\u0E21 IVA} SST {\u0E44\u0E21\u0E48\u0E23\u0E27\u0E21 SST} KDV {\u0E44\u0E21\u0E48\u0E23\u0E27\u0E21 KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {\u0E23\u0E27\u0E21\u0E20\u0E32\u0E29\u0E35 GST} VAT {\u0E23\u0E27\u0E21 VAT} TAX {\u0E23\u0E27\u0E21\u0E20\u0E32\u0E29\u0E35} IVA {\u0E23\u0E27\u0E21 IVA} SST {\u0E23\u0E27\u0E21 SST} KDV {\u0E23\u0E27\u0E21 KDV} other {}}",alternativePriceAriaLabel:"\u0E23\u0E32\u0E04\u0E32\u0E1E\u0E34\u0E40\u0E28\u0E29 {alternativePrice}",strikethroughAriaLabel:"\u0E23\u0E32\u0E04\u0E32\u0E1B\u0E01\u0E15\u0E34 {strikethroughPrice}"},{lang:"el",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u03BC\u03AE\u03BD\u03B1} YEAR {/\u03AD\u03C4\u03BF\u03C2} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u03BA\u03AC\u03B8\u03B5 \u03BC\u03AE\u03BD\u03B1} YEAR {\u03B1\u03BD\u03AC \u03AD\u03C4\u03BF\u03C2} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u03B1\u03BD\u03AC \u03AC\u03B4\u03B5\u03B9\u03B1 \u03C7\u03C1\u03AE\u03C3\u03B7\u03C2} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u03B1\u03BD\u03AC \u03AC\u03B4\u03B5\u03B9\u03B1 \u03C7\u03C1\u03AE\u03C3\u03B7\u03C2} other {}}",freeLabel:"\u0394\u03C9\u03C1\u03B5\u03AC\u03BD",freeAriaLabel:"\u0394\u03C9\u03C1\u03B5\u03AC\u03BD",taxExclusiveLabel:"{taxTerm, select, GST {(\u03BC\u03B7 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 GST)} VAT {(\u03BC\u03B7 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03A6\u03A0\u0391)} TAX {(\u03BC\u03B7 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C6\u03CC\u03C1\u03BF)} IVA {(\u03BC\u03B7 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 IVA)} SST {(\u03BC\u03B7 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 SST)} KDV {(\u03BC\u03B7 \u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 KDV)} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {(\u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C4\u03BF\u03C5 GST)} VAT {(\u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03A6\u03A0\u0391)} TAX {(\u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C4\u03BF\u03C5 \u03C6\u03CC\u03C1\u03BF\u03C5)} IVA {(\u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C4\u03BF\u03C5 IVA)} SST {(\u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C4\u03BF\u03C5 SST)} KDV {(\u03C3\u03C5\u03BC\u03C0\u03B5\u03C1\u03B9\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C4\u03BF\u03C5 KDV)} other {}}",alternativePriceAriaLabel:"\u0394\u03B9\u03B1\u03C6\u03BF\u03C1\u03B5\u03C4\u03B9\u03BA\u03AC, {alternativePrice}",strikethroughAriaLabel:"\u039A\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03AE \u03C4\u03B9\u03BC\u03AE {strikethroughPrice}"},{lang:"fil",recurrenceLabel:"{recurrenceTerm, select, MONTH {/buwan} YEAR {/taon} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per buwan} YEAR {per taon} other {}}",perUnitLabel:"{perUnit, select, LICENSE {kada lisensya} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {kada lisensya} other {}}",freeLabel:"Libre",freeAriaLabel:"Libre",taxExclusiveLabel:"{taxTerm, select, GST {hindi kasama ang GST} VAT {hindi kasama ang VAT} TAX {hindi kasama ang Buwis} IVA {hindi kasama ang IVA} SST {hindi kasama ang SST} KDV {hindi kasama ang KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {kasama ang GST} VAT {kasama ang VAT} TAX {kasama ang Buwis} IVA {kasama ang IVA} SST {kasama ang SST} KDV {kasama ang KDV} other {}}",alternativePriceAriaLabel:"Alternatibong nasa halagang {alternativePrice}",strikethroughAriaLabel:"Regular na nasa halagang {strikethroughPrice}"},{lang:"ms",recurrenceLabel:"{recurrenceTerm, select, MONTH {/bulan} YEAR {/tahun} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per bulan} YEAR {per tahun} other {}}",perUnitLabel:"{perUnit, select, LICENSE {setiap lesen} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {setiap lesen} other {}}",freeLabel:"Percuma",freeAriaLabel:"Percuma",taxExclusiveLabel:"{taxTerm, select, GST {kecuali GST} VAT {kecuali VAT} TAX {kecuali Cukai} IVA {kecuali IVA} SST {kecuali SST} KDV {kecuali KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {termasuk GST} VAT {termasuk VAT} TAX {termasuk Cukai} IVA {termasuk IVA} SST {termasuk SST} KDV {termasuk KDV} other {}}",alternativePriceAriaLabel:"Secara alternatif pada {alternativePrice}",strikethroughAriaLabel:"Biasanya pada {strikethroughPrice}"},{lang:"hi",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u092E\u093E\u0939} YEAR {/\u0935\u0930\u094D\u0937} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per \u092E\u093E\u0939} YEAR {per \u0935\u0930\u094D\u0937} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u092A\u094D\u0930\u0924\u093F \u0932\u093E\u0907\u0938\u0947\u0902\u0938} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u092A\u094D\u0930\u0924\u093F \u0932\u093E\u0907\u0938\u0947\u0902\u0938} other {}}",freeLabel:"\u092B\u093C\u094D\u0930\u0940",freeAriaLabel:"\u092B\u093C\u094D\u0930\u0940",taxExclusiveLabel:"{taxTerm, select, GST {GST \u0905\u0924\u093F\u0930\u093F\u0915\u094D\u0924} VAT {VAT \u0905\u0924\u093F\u0930\u093F\u0915\u094D\u0924} TAX {\u0915\u0930 \u0905\u0924\u093F\u0930\u093F\u0915\u094D\u0924} IVA {IVA \u0905\u0924\u093F\u0930\u093F\u0915\u094D\u0924} SST {SST \u0905\u0924\u093F\u0930\u093F\u0915\u094D\u0924} KDV {KDV \u0905\u0924\u093F\u0930\u093F\u0915\u094D\u0924} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {GST \u0938\u0939\u093F\u0924} VAT {VAT \u0938\u0939\u093F\u0924} TAX {\u0915\u0930 \u0938\u0939\u093F\u0924} IVA {IVA \u0938\u0939\u093F\u0924} SST {SST \u0938\u0939\u093F\u0924} KDV {KDV \u0938\u0939\u093F\u0924} other {}}",alternativePriceAriaLabel:"\u0935\u0948\u0915\u0932\u094D\u092A\u093F\u0915 \u0930\u0942\u092A \u0938\u0947 \u0907\u0938 \u092A\u0930 {alternativePrice}",strikethroughAriaLabel:"\u0928\u093F\u092F\u092E\u093F\u0924 \u0930\u0942\u092A \u0938\u0947 \u0907\u0938 \u092A\u0930 {strikethroughPrice}"},{lang:"iw",recurrenceLabel:"{recurrenceTerm, select, MONTH {/\u05D7\u05D5\u05D3\u05E9} YEAR {/\u05E9\u05E0\u05D4} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {\u05DC\u05D7\u05D5\u05D3\u05E9} YEAR {\u05DC\u05E9\u05E0\u05D4} other {}}",perUnitLabel:"{perUnit, select, LICENSE {\u05DC\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {\u05DC\u05E8\u05D9\u05E9\u05D9\u05D5\u05DF} other {}}",freeLabel:"\u05D7\u05D9\u05E0\u05DD",freeAriaLabel:"\u05D7\u05D9\u05E0\u05DD",taxExclusiveLabel:'{taxTerm, select, GST {\u05DC\u05DC\u05D0 GST} VAT {\u05DC\u05DC\u05D0 \u05DE\u05E2"\u05DE} TAX {\u05DC\u05DC\u05D0 \u05DE\u05E1} IVA {\u05DC\u05DC\u05D0 IVA} SST {\u05DC\u05DC\u05D0 SST} KDV {\u05DC\u05DC\u05D0 KDV} other {}}',taxInclusiveLabel:'{taxTerm, select, GST {\u05DB\u05D5\u05DC\u05DC GST} VAT {\u05DB\u05D5\u05DC\u05DC \u05DE\u05E2"\u05DE} TAX {\u05DB\u05D5\u05DC\u05DC \u05DE\u05E1} IVA {\u05DB\u05D5\u05DC\u05DC IVA} SST {\u05DB\u05D5\u05DC\u05DC SST} KDV {\u05DB\u05D5\u05DC\u05DC KDV} other {}}',alternativePriceAriaLabel:"\u05DC\u05D7\u05DC\u05D5\u05E4\u05D9\u05DF \u05D1-{alternativePrice}",strikethroughAriaLabel:"\u05D1\u05D0\u05D5\u05E4\u05DF \u05E7\u05D1\u05D5\u05E2 \u05D1-{strikethroughPrice}"}],":type":"sheet"}});var xt;(function(e){e.STAGE="STAGE",e.PRODUCTION="PRODUCTION",e.LOCAL="LOCAL"})(xt||(xt={}));var Ur;(function(e){e.STAGE="STAGE",e.PRODUCTION="PROD",e.LOCAL="LOCAL"})(Ur||(Ur={}));var vt;(function(e){e.DRAFT="DRAFT",e.PUBLISHED="PUBLISHED"})(vt||(vt={}));var Te;(function(e){e.V2="UCv2",e.V3="UCv3"})(Te||(Te={}));var q;(function(e){e.CHECKOUT="checkout",e.CHECKOUT_EMAIL="checkout/email",e.SEGMENTATION="segmentation",e.BUNDLE="bundle",e.COMMITMENT="commitment",e.RECOMMENDATION="recommendation",e.EMAIL="email",e.PAYMENT="payment",e.CHANGE_PLAN_TEAM_PLANS="change-plan/team-upgrade/plans",e.CHANGE_PLAN_TEAM_PAYMENT="change-plan/team-upgrade/payment"})(q||(q={}));var Dr=function(e){var t;return(t=Ss.get(e))!==null&&t!==void 0?t:e},Ss=new Map([["countrySpecific","cs"],["quantity","q"],["authCode","code"],["checkoutPromoCode","apc"],["rurl","rUrl"],["curl","cUrl"],["ctxrturl","ctxRtUrl"],["country","co"],["language","lang"],["clientId","cli"],["context","ctx"],["productArrangementCode","pa"],["offerType","ot"],["marketSegment","ms"]]);var $i=function(e){var t=typeof Symbol=="function"&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},Mi=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],a;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(s){a={error:s}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return o};function Fe(e,t,r){var n,i;try{for(var o=$i(Object.entries(e)),a=o.next();!a.done;a=o.next()){var s=Mi(a.value,2),c=s[0],l=s[1],h=Dr(c);l!=null&&r.has(h)&&t.set(h,l)}}catch(d){n={error:d}}finally{try{a&&!a.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}}function Xt(e){switch(e){case xt.PRODUCTION:return"https://commerce.adobe.com";default:return"https://commerce-stg.adobe.com"}}function Wt(e,t){var r,n;for(var i in e){var o=e[i];try{for(var a=(r=void 0,$i(Object.entries(o))),s=a.next();!s.done;s=a.next()){var c=Mi(s.value,2),l=c[0],h=c[1];if(h!=null){var d=Dr(l);t.set("items["+i+"]["+d+"]",h)}}}catch(u){r={error:u}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}}}var ys=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(e);i=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};function Ui(e){ws(e);var t=e.env,r=e.items,n=e.workflowStep,i=ys(e,["env","items","workflowStep"]),o=new URL(Xt(t));return o.pathname=n+"/",Wt(r,o.searchParams),Fe(i,o.searchParams,Ls),o.toString()}var Ls=new Set(["cli","co","lang","ctx","cUrl","mv","nglwfdata","otac","promoid","rUrl","sdid","spint","trackingid","code","campaignid","appctxid"]),_s=["env","workflowStep","clientId","country","items"];function ws(e){var t,r;try{for(var n=Ts(_s),i=n.next();!i.done;i=n.next()){var o=i.value;if(!e[o])throw new Error('Argument "checkoutData" is not valid, missing: '+o)}}catch(a){t={error:a}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}return!0}var Ps=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(e);i=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},Ns="p_draft_landscape",Is="/store/";function Hr(e){Os(e);var t=e.env,r=e.items,n=e.workflowStep,i=e.ms,o=e.marketSegment,a=e.ot,s=e.offerType,c=e.pa,l=e.productArrangementCode,h=e.landscape,d=Ps(e,["env","items","workflowStep","ms","marketSegment","ot","offerType","pa","productArrangementCode","landscape"]),u={marketSegment:o??i,offerType:s??a,productArrangementCode:l??c},m=new URL(Xt(t));return m.pathname=""+Is+n,n!==q.SEGMENTATION&&n!==q.CHANGE_PLAN_TEAM_PLANS&&Wt(r,m.searchParams),n===q.SEGMENTATION&&Fe(u,m.searchParams,Gr),Fe(d,m.searchParams,Gr),h===vt.DRAFT&&Fe({af:Ns},m.searchParams,Gr),m.toString()}var Gr=new Set(["af","ai","apc","appctxid","cli","co","csm","ctx","ctxRtUrl","DCWATC","dp","fr","gsp","ijt","lang","lo","mal","ms","mv","mv2","nglwfdata","ot","otac","pa","pcid","promoid","q","rf","sc","scl","sdid","sid","spint","svar","th","thm","trackingid","usid","workflowid","context.guid","so.ca","so.su","so.tr","so.va"]),ks=["env","workflowStep","clientId","country"];function Os(e){var t,r;try{for(var n=Cs(ks),i=n.next();!i.done;i=n.next()){var o=i.value;if(!e[o])throw new Error('Argument "checkoutData" is not valid, missing: '+o)}}catch(a){t={error:a}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}if(e.workflowStep!==q.SEGMENTATION&&e.workflowStep!==q.CHANGE_PLAN_TEAM_PLANS&&!e.items)throw new Error('Argument "checkoutData" is not valid, missing: items');return!0}function zr(e,t){switch(e){case Te.V2:return Ui(t);case Te.V3:return Hr(t);default:return console.warn("Unsupported CheckoutType, will use UCv3 as default. Given type: "+e),Hr(t)}}var Fr;(function(e){e.BASE="BASE",e.TRIAL="TRIAL",e.PROMOTION="PROMOTION"})(Fr||(Fr={}));var $;(function(e){e.MONTH="MONTH",e.YEAR="YEAR",e.TWO_YEARS="TWO_YEARS",e.THREE_YEARS="THREE_YEARS",e.PERPETUAL="PERPETUAL",e.TERM_LICENSE="TERM_LICENSE",e.ACCESS_PASS="ACCESS_PASS",e.THREE_MONTHS="THREE_MONTHS",e.SIX_MONTHS="SIX_MONTHS"})($||($={}));var k;(function(e){e.ANNUAL="ANNUAL",e.MONTHLY="MONTHLY",e.TWO_YEARS="TWO_YEARS",e.THREE_YEARS="THREE_YEARS",e.P1D="P1D",e.P1Y="P1Y",e.P3Y="P3Y",e.P10Y="P10Y",e.P15Y="P15Y",e.P3D="P3D",e.P7D="P7D",e.P30D="P30D",e.HALF_YEARLY="HALF_YEARLY",e.QUARTERLY="QUARTERLY"})(k||(k={}));var Kr;(function(e){e.INDIVIDUAL="INDIVIDUAL",e.TEAM="TEAM",e.ENTERPRISE="ENTERPRISE"})(Kr||(Kr={}));var Br;(function(e){e.COM="COM",e.EDU="EDU",e.GOV="GOV"})(Br||(Br={}));var jr;(function(e){e.DIRECT="DIRECT",e.INDIRECT="INDIRECT"})(jr||(jr={}));var Yr;(function(e){e.ENTERPRISE_PRODUCT="ENTERPRISE_PRODUCT",e.ETLA="ETLA",e.RETAIL="RETAIL",e.VIP="VIP",e.VIPMP="VIPMP",e.FREE="FREE"})(Yr||(Yr={}));var Di="tacocat.js";var qt=(e,t)=>String(e??"").toLowerCase()==String(t??"").toLowerCase(),Gi=e=>`${e??""}`.replace(/[&<>'"]/g,t=>({"&":"&","<":"<",">":">","'":"'",'"':"""})[t]??t)??"";function O(e,t={},{metadata:r=!0,search:n=!0,storage:i=!0}={}){let o;if(n&&o==null){let a=new URLSearchParams(window.location.search),s=Ke(n)?n:e;o=a.get(s)}if(i&&o==null){let a=Ke(i)?i:e;o=window.sessionStorage.getItem(a)??window.localStorage.getItem(a)}if(r&&o==null){let a=Rs(Ke(r)?r:e);o=document.documentElement.querySelector(`meta[name="${a}"]`)?.content}return o??t[e]}var Be=()=>{};var Hi=e=>typeof e=="boolean",bt=e=>typeof e=="function",Zt=e=>typeof e=="number",zi=e=>e!=null&&typeof e=="object";var Ke=e=>typeof e=="string",Xr=e=>Ke(e)&&e,je=e=>Zt(e)&&Number.isFinite(e)&&e>0;function Ye(e,t=r=>r==null||r===""){return e!=null&&Object.entries(e).forEach(([r,n])=>{t(n)&&delete e[r]}),e}function E(e,t){if(Hi(e))return e;let r=String(e);return r==="1"||r==="true"?!0:r==="0"||r==="false"?!1:t}function ge(e,t,r){let n=Object.values(t);return n.find(i=>qt(i,e))??r??n[0]}function Rs(e=""){return String(e).replace(/(\p{Lowercase_Letter})(\p{Uppercase_Letter})/gu,(t,r,n)=>`${r}-${n}`).replace(/\W+/gu,"-").toLowerCase()}function Xe(e,t=1){return Zt(e)||(e=Number.parseInt(e,10)),!Number.isNaN(e)&&e>0&&Number.isFinite(e)?e:t}var Vs=Date.now(),Wr=()=>`(+${Date.now()-Vs}ms)`,Jt=new Set,$s=E(O("tacocat.debug",{},{metadata:!1}),typeof process<"u"&&process.env?.DEBUG);function Fi(e){let t=`[${Di}/${e}]`,r=(a,s,...c)=>a?!0:(i(s,...c),!1),n=$s?(a,...s)=>{console.debug(`${t} ${a}`,...s,Wr())}:()=>{},i=(a,...s)=>{let c=`${t} ${a}`;Jt.forEach(([l])=>l(c,...s))};return{assert:r,debug:n,error:i,warn:(a,...s)=>{let c=`${t} ${a}`;Jt.forEach(([,l])=>l(c,...s))}}}function Ms(e,t){let r=[e,t];return Jt.add(r),()=>{Jt.delete(r)}}Ms((e,...t)=>{console.error(e,...t,Wr())},(e,...t)=>{console.warn(e,...t,Wr())});var Us="no promo",Ki="promo-tag",Ds="yellow",Gs="neutral",Hs=(e,t,r)=>{let n=o=>o||Us,i=r?` (was "${n(t)}")`:"";return`${n(e)}${i}`},zs="cancel-context",At=(e,t)=>{let r=e===zs,n=!r&&e?.length>0,i=(n||r)&&(t&&t!=e||!t&&!r),o=i&&n||!i&&!!t,a=o?e||t:void 0;return{effectivePromoCode:a,overridenPromoCode:e,className:o?Ki:`${Ki} no-promo`,text:Hs(a,t,i),variant:o?Ds:Gs,isOverriden:i}};var qr="ABM",Zr="PUF",Jr="M2M",Qr="PERPETUAL",en="P3Y",Fs="TAX_INCLUSIVE_DETAILS",Ks="TAX_EXCLUSIVE",Bi={ABM:qr,PUF:Zr,M2M:Jr,PERPETUAL:Qr,P3Y:en},_h={[qr]:{commitment:$.YEAR,term:k.MONTHLY},[Zr]:{commitment:$.YEAR,term:k.ANNUAL},[Jr]:{commitment:$.MONTH,term:k.MONTHLY},[Qr]:{commitment:$.PERPETUAL,term:void 0},[en]:{commitment:$.THREE_MONTHS,term:k.P3Y}},ji="Value is not an offer",Qt=e=>{if(typeof e!="object")return ji;let{commitment:t,term:r}=e,n=Bs(t,r);return{...e,planType:n}};var Bs=(e,t)=>{switch(e){case void 0:return ji;case"":return"";case $.YEAR:return t===k.MONTHLY?qr:t===k.ANNUAL?Zr:"";case $.MONTH:return t===k.MONTHLY?Jr:"";case $.PERPETUAL:return Qr;case $.TERM_LICENSE:return t===k.P3Y?en:"";default:return""}};function tn(e){let{priceDetails:t}=e,{price:r,priceWithoutDiscount:n,priceWithoutTax:i,priceWithoutDiscountAndTax:o,taxDisplay:a}=t;if(a!==Fs)return e;let s={...e,priceDetails:{...t,price:i??r,priceWithoutDiscount:o??n,taxDisplay:Ks}};return s.offerType==="TRIAL"&&s.priceDetails.price===0&&(s.priceDetails.price=s.priceDetails.priceWithoutDiscount),s}var rn=function(e,t){return rn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[i]=n[i])},rn(e,t)};function Et(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");rn(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}var S=function(){return S=Object.assign||function(t){for(var r,n=1,i=arguments.length;n0}),r=[],n=0,i=t;n1)throw new RangeError("integer-width stems only accept a single optional option");i.options[0].replace(Xs,function(s,c,l,h,d,u){if(c)t.minimumIntegerDigits=l.length;else{if(h&&d)throw new Error("We currently do not support maximum integer digits");if(u)throw new Error("We currently do not support exact integer digits")}return""});continue}if(ro.test(i.stem)){t.minimumIntegerDigits=i.stem.length;continue}if(Zi.test(i.stem)){if(i.options.length>1)throw new RangeError("Fraction-precision stems only accept a single optional option");i.stem.replace(Zi,function(s,c,l,h,d,u){return l==="*"?t.minimumFractionDigits=c.length:h&&h[0]==="#"?t.maximumFractionDigits=h.length:d&&u?(t.minimumFractionDigits=d.length,t.maximumFractionDigits=d.length+u.length):(t.minimumFractionDigits=c.length,t.maximumFractionDigits=c.length),""}),i.options.length&&(t=S(S({},t),Ji(i.options[0])));continue}if(to.test(i.stem)){t=S(S({},t),Ji(i.stem));continue}var o=no(i.stem);o&&(t=S(S({},t),o));var a=Ws(i.stem);a&&(t=S(S({},t),a))}return t}var an,qs=new RegExp("^"+on.source+"*"),Zs=new RegExp(on.source+"*$");function b(e,t){return{start:e,end:t}}var Js=!!String.prototype.startsWith,Qs=!!String.fromCodePoint,ec=!!Object.fromEntries,tc=!!String.prototype.codePointAt,rc=!!String.prototype.trimStart,nc=!!String.prototype.trimEnd,ic=!!Number.isSafeInteger,oc=ic?Number.isSafeInteger:function(e){return typeof e=="number"&&isFinite(e)&&Math.floor(e)===e&&Math.abs(e)<=9007199254740991},cn=!0;try{oo=lo("([^\\p{White_Space}\\p{Pattern_Syntax}]*)","yu"),cn=((an=oo.exec("a"))===null||an===void 0?void 0:an[0])==="a"}catch{cn=!1}var oo,ao=Js?function(t,r,n){return t.startsWith(r,n)}:function(t,r,n){return t.slice(n,n+r.length)===r},ln=Qs?String.fromCodePoint:function(){for(var t=[],r=0;ro;){if(a=t[o++],a>1114111)throw RangeError(a+" is not a valid code point");n+=a<65536?String.fromCharCode(a):String.fromCharCode(((a-=65536)>>10)+55296,a%1024+56320)}return n},so=ec?Object.fromEntries:function(t){for(var r={},n=0,i=t;n=n)){var i=t.charCodeAt(r),o;return i<55296||i>56319||r+1===n||(o=t.charCodeAt(r+1))<56320||o>57343?i:(i-55296<<10)+(o-56320)+65536}},ac=rc?function(t){return t.trimStart()}:function(t){return t.replace(qs,"")},sc=nc?function(t){return t.trimEnd()}:function(t){return t.replace(Zs,"")};function lo(e,t){return new RegExp(e,t)}var hn;cn?(sn=lo("([^\\p{White_Space}\\p{Pattern_Syntax}]*)","yu"),hn=function(t,r){var n;sn.lastIndex=r;var i=sn.exec(t);return(n=i[1])!==null&&n!==void 0?n:""}):hn=function(t,r){for(var n=[];;){var i=co(t,r);if(i===void 0||uo(i)||hc(i))break;n.push(i),r+=i>=65536?2:1}return ln.apply(void 0,n)};var sn,ho=function(){function e(t,r){r===void 0&&(r={}),this.message=t,this.position={offset:0,line:1,column:1},this.ignoreTag=!!r.ignoreTag,this.requiresOtherClause=!!r.requiresOtherClause,this.shouldParseSkeletons=!!r.shouldParseSkeletons}return e.prototype.parse=function(){if(this.offset()!==0)throw Error("parser can only be used once");return this.parseMessage(0,"",!1)},e.prototype.parseMessage=function(t,r,n){for(var i=[];!this.isEOF();){var o=this.char();if(o===123){var a=this.parseArgument(t,n);if(a.err)return a;i.push(a.val)}else{if(o===125&&t>0)break;if(o===35&&(r==="plural"||r==="selectordinal")){var s=this.clonePosition();this.bump(),i.push({type:C.pound,location:b(s,this.clonePosition())})}else if(o===60&&!this.ignoreTag&&this.peek()===47){if(n)break;return this.error(v.UNMATCHED_CLOSING_TAG,b(this.clonePosition(),this.clonePosition()))}else if(o===60&&!this.ignoreTag&&dn(this.peek()||0)){var a=this.parseTag(t,r);if(a.err)return a;i.push(a.val)}else{var a=this.parseLiteral(t,r);if(a.err)return a;i.push(a.val)}}}return{val:i,err:null}},e.prototype.parseTag=function(t,r){var n=this.clonePosition();this.bump();var i=this.parseTagName();if(this.bumpSpace(),this.bumpIf("/>"))return{val:{type:C.literal,value:"<"+i+"/>",location:b(n,this.clonePosition())},err:null};if(this.bumpIf(">")){var o=this.parseMessage(t+1,r,!0);if(o.err)return o;var a=o.val,s=this.clonePosition();if(this.bumpIf("")?{val:{type:C.tag,value:i,children:a,location:b(n,this.clonePosition())},err:null}:this.error(v.INVALID_TAG,b(s,this.clonePosition())))}else return this.error(v.UNCLOSED_TAG,b(n,this.clonePosition()))}else return this.error(v.INVALID_TAG,b(n,this.clonePosition()))},e.prototype.parseTagName=function(){var t=this.offset();for(this.bump();!this.isEOF()&&lc(this.char());)this.bump();return this.message.slice(t,this.offset())},e.prototype.parseLiteral=function(t,r){for(var n=this.clonePosition(),i="";;){var o=this.tryParseQuote(r);if(o){i+=o;continue}var a=this.tryParseUnquoted(t,r);if(a){i+=a;continue}var s=this.tryParseLeftAngleBracket();if(s){i+=s;continue}break}var c=b(n,this.clonePosition());return{val:{type:C.literal,value:i,location:c},err:null}},e.prototype.tryParseLeftAngleBracket=function(){return!this.isEOF()&&this.char()===60&&(this.ignoreTag||!cc(this.peek()||0))?(this.bump(),"<"):null},e.prototype.tryParseQuote=function(t){if(this.isEOF()||this.char()!==39)return null;switch(this.peek()){case 39:return this.bump(),this.bump(),"'";case 123:case 60:case 62:case 125:break;case 35:if(t==="plural"||t==="selectordinal")break;return null;default:return null}this.bump();var r=[this.char()];for(this.bump();!this.isEOF();){var n=this.char();if(n===39)if(this.peek()===39)r.push(39),this.bump();else{this.bump();break}else r.push(n);this.bump()}return ln.apply(void 0,r)},e.prototype.tryParseUnquoted=function(t,r){if(this.isEOF())return null;var n=this.char();return n===60||n===123||n===35&&(r==="plural"||r==="selectordinal")||n===125&&t>0?null:(this.bump(),ln(n))},e.prototype.parseArgument=function(t,r){var n=this.clonePosition();if(this.bump(),this.bumpSpace(),this.isEOF())return this.error(v.EXPECT_ARGUMENT_CLOSING_BRACE,b(n,this.clonePosition()));if(this.char()===125)return this.bump(),this.error(v.EMPTY_ARGUMENT,b(n,this.clonePosition()));var i=this.parseIdentifierIfPossible().value;if(!i)return this.error(v.MALFORMED_ARGUMENT,b(n,this.clonePosition()));if(this.bumpSpace(),this.isEOF())return this.error(v.EXPECT_ARGUMENT_CLOSING_BRACE,b(n,this.clonePosition()));switch(this.char()){case 125:return this.bump(),{val:{type:C.argument,value:i,location:b(n,this.clonePosition())},err:null};case 44:return this.bump(),this.bumpSpace(),this.isEOF()?this.error(v.EXPECT_ARGUMENT_CLOSING_BRACE,b(n,this.clonePosition())):this.parseArgumentOptions(t,r,i,n);default:return this.error(v.MALFORMED_ARGUMENT,b(n,this.clonePosition()))}},e.prototype.parseIdentifierIfPossible=function(){var t=this.clonePosition(),r=this.offset(),n=hn(this.message,r),i=r+n.length;this.bumpTo(i);var o=this.clonePosition(),a=b(t,o);return{value:n,location:a}},e.prototype.parseArgumentOptions=function(t,r,n,i){var o,a=this.clonePosition(),s=this.parseIdentifierIfPossible().value,c=this.clonePosition();switch(s){case"":return this.error(v.EXPECT_ARGUMENT_TYPE,b(a,c));case"number":case"date":case"time":{this.bumpSpace();var l=null;if(this.bumpIf(",")){this.bumpSpace();var h=this.clonePosition(),d=this.parseSimpleArgStyleIfPossible();if(d.err)return d;var u=sc(d.val);if(u.length===0)return this.error(v.EXPECT_ARGUMENT_STYLE,b(this.clonePosition(),this.clonePosition()));var m=b(h,this.clonePosition());l={style:u,styleLocation:m}}var x=this.tryParseArgumentClose(i);if(x.err)return x;var f=b(i,this.clonePosition());if(l&&ao(l?.style,"::",0)){var _=ac(l.style.slice(2));if(s==="number"){var d=this.parseNumberSkeletonFromString(_,l.styleLocation);return d.err?d:{val:{type:C.number,value:n,location:f,style:d.val},err:null}}else{if(_.length===0)return this.error(v.EXPECT_DATE_TIME_SKELETON,f);var u={type:Le.dateTime,pattern:_,location:l.styleLocation,parsedOptions:this.shouldParseSkeletons?Wi(_):{}},N=s==="date"?C.date:C.time;return{val:{type:N,value:n,location:f,style:u},err:null}}}return{val:{type:s==="number"?C.number:s==="date"?C.date:C.time,value:n,location:f,style:(o=l?.style)!==null&&o!==void 0?o:null},err:null}}case"plural":case"selectordinal":case"select":{var A=this.clonePosition();if(this.bumpSpace(),!this.bumpIf(","))return this.error(v.EXPECT_SELECT_ARGUMENT_OPTIONS,b(A,S({},A)));this.bumpSpace();var T=this.parseIdentifierIfPossible(),V=0;if(s!=="select"&&T.value==="offset"){if(!this.bumpIf(":"))return this.error(v.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,b(this.clonePosition(),this.clonePosition()));this.bumpSpace();var d=this.tryParseDecimalInteger(v.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,v.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);if(d.err)return d;this.bumpSpace(),T=this.parseIdentifierIfPossible(),V=d.val}var L=this.tryParsePluralOrSelectOptions(t,s,r,T);if(L.err)return L;var x=this.tryParseArgumentClose(i);if(x.err)return x;var K=b(i,this.clonePosition());return s==="select"?{val:{type:C.select,value:n,options:so(L.val),location:K},err:null}:{val:{type:C.plural,value:n,options:so(L.val),offset:V,pluralType:s==="plural"?"cardinal":"ordinal",location:K},err:null}}default:return this.error(v.INVALID_ARGUMENT_TYPE,b(a,c))}},e.prototype.tryParseArgumentClose=function(t){return this.isEOF()||this.char()!==125?this.error(v.EXPECT_ARGUMENT_CLOSING_BRACE,b(t,this.clonePosition())):(this.bump(),{val:!0,err:null})},e.prototype.parseSimpleArgStyleIfPossible=function(){for(var t=0,r=this.clonePosition();!this.isEOF();){var n=this.char();switch(n){case 39:{this.bump();var i=this.clonePosition();if(!this.bumpUntil("'"))return this.error(v.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE,b(i,this.clonePosition()));this.bump();break}case 123:{t+=1,this.bump();break}case 125:{if(t>0)t-=1;else return{val:this.message.slice(r.offset,this.offset()),err:null};break}default:this.bump();break}}return{val:this.message.slice(r.offset,this.offset()),err:null}},e.prototype.parseNumberSkeletonFromString=function(t,r){var n=[];try{n=eo(t)}catch{return this.error(v.INVALID_NUMBER_SKELETON,r)}return{val:{type:Le.number,tokens:n,location:r,parsedOptions:this.shouldParseSkeletons?io(n):{}},err:null}},e.prototype.tryParsePluralOrSelectOptions=function(t,r,n,i){for(var o,a=!1,s=[],c=new Set,l=i.value,h=i.location;;){if(l.length===0){var d=this.clonePosition();if(r!=="select"&&this.bumpIf("=")){var u=this.tryParseDecimalInteger(v.EXPECT_PLURAL_ARGUMENT_SELECTOR,v.INVALID_PLURAL_ARGUMENT_SELECTOR);if(u.err)return u;h=b(d,this.clonePosition()),l=this.message.slice(d.offset,this.offset())}else break}if(c.has(l))return this.error(r==="select"?v.DUPLICATE_SELECT_ARGUMENT_SELECTOR:v.DUPLICATE_PLURAL_ARGUMENT_SELECTOR,h);l==="other"&&(a=!0),this.bumpSpace();var m=this.clonePosition();if(!this.bumpIf("{"))return this.error(r==="select"?v.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT:v.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT,b(this.clonePosition(),this.clonePosition()));var x=this.parseMessage(t+1,r,n);if(x.err)return x;var f=this.tryParseArgumentClose(m);if(f.err)return f;s.push([l,{value:x.val,location:b(m,this.clonePosition())}]),c.add(l),this.bumpSpace(),o=this.parseIdentifierIfPossible(),l=o.value,h=o.location}return s.length===0?this.error(r==="select"?v.EXPECT_SELECT_ARGUMENT_SELECTOR:v.EXPECT_PLURAL_ARGUMENT_SELECTOR,b(this.clonePosition(),this.clonePosition())):this.requiresOtherClause&&!a?this.error(v.MISSING_OTHER_CLAUSE,b(this.clonePosition(),this.clonePosition())):{val:s,err:null}},e.prototype.tryParseDecimalInteger=function(t,r){var n=1,i=this.clonePosition();this.bumpIf("+")||this.bumpIf("-")&&(n=-1);for(var o=!1,a=0;!this.isEOF();){var s=this.char();if(s>=48&&s<=57)o=!0,a=a*10+(s-48),this.bump();else break}var c=b(i,this.clonePosition());return o?(a*=n,oc(a)?{val:a,err:null}:this.error(r,c)):this.error(t,c)},e.prototype.offset=function(){return this.position.offset},e.prototype.isEOF=function(){return this.offset()===this.message.length},e.prototype.clonePosition=function(){return{offset:this.position.offset,line:this.position.line,column:this.position.column}},e.prototype.char=function(){var t=this.position.offset;if(t>=this.message.length)throw Error("out of bound");var r=co(this.message,t);if(r===void 0)throw Error("Offset "+t+" is at invalid UTF-16 code unit boundary");return r},e.prototype.error=function(t,r){return{val:null,err:{kind:t,message:this.message,location:r}}},e.prototype.bump=function(){if(!this.isEOF()){var t=this.char();t===10?(this.position.line+=1,this.position.column=1,this.position.offset+=1):(this.position.column+=1,this.position.offset+=t<65536?1:2)}},e.prototype.bumpIf=function(t){if(ao(this.message,t,this.offset())){for(var r=0;r=0?(this.bumpTo(n),!0):(this.bumpTo(this.message.length),!1)},e.prototype.bumpTo=function(t){if(this.offset()>t)throw Error("targetOffset "+t+" must be greater than or equal to the current offset "+this.offset());for(t=Math.min(t,this.message.length);;){var r=this.offset();if(r===t)break;if(r>t)throw Error("targetOffset "+t+" is at invalid UTF-16 code unit boundary");if(this.bump(),this.isEOF())break}},e.prototype.bumpSpace=function(){for(;!this.isEOF()&&uo(this.char());)this.bump()},e.prototype.peek=function(){if(this.isEOF())return null;var t=this.char(),r=this.offset(),n=this.message.charCodeAt(r+(t>=65536?2:1));return n??null},e}();function dn(e){return e>=97&&e<=122||e>=65&&e<=90}function cc(e){return dn(e)||e===47}function lc(e){return e===45||e===46||e>=48&&e<=57||e===95||e>=97&&e<=122||e>=65&&e<=90||e==183||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8255&&e<=8256||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function uo(e){return e>=9&&e<=13||e===32||e===133||e>=8206&&e<=8207||e===8232||e===8233}function hc(e){return e>=33&&e<=35||e===36||e>=37&&e<=39||e===40||e===41||e===42||e===43||e===44||e===45||e>=46&&e<=47||e>=58&&e<=59||e>=60&&e<=62||e>=63&&e<=64||e===91||e===92||e===93||e===94||e===96||e===123||e===124||e===125||e===126||e===161||e>=162&&e<=165||e===166||e===167||e===169||e===171||e===172||e===174||e===176||e===177||e===182||e===187||e===191||e===215||e===247||e>=8208&&e<=8213||e>=8214&&e<=8215||e===8216||e===8217||e===8218||e>=8219&&e<=8220||e===8221||e===8222||e===8223||e>=8224&&e<=8231||e>=8240&&e<=8248||e===8249||e===8250||e>=8251&&e<=8254||e>=8257&&e<=8259||e===8260||e===8261||e===8262||e>=8263&&e<=8273||e===8274||e===8275||e>=8277&&e<=8286||e>=8592&&e<=8596||e>=8597&&e<=8601||e>=8602&&e<=8603||e>=8604&&e<=8607||e===8608||e>=8609&&e<=8610||e===8611||e>=8612&&e<=8613||e===8614||e>=8615&&e<=8621||e===8622||e>=8623&&e<=8653||e>=8654&&e<=8655||e>=8656&&e<=8657||e===8658||e===8659||e===8660||e>=8661&&e<=8691||e>=8692&&e<=8959||e>=8960&&e<=8967||e===8968||e===8969||e===8970||e===8971||e>=8972&&e<=8991||e>=8992&&e<=8993||e>=8994&&e<=9e3||e===9001||e===9002||e>=9003&&e<=9083||e===9084||e>=9085&&e<=9114||e>=9115&&e<=9139||e>=9140&&e<=9179||e>=9180&&e<=9185||e>=9186&&e<=9254||e>=9255&&e<=9279||e>=9280&&e<=9290||e>=9291&&e<=9311||e>=9472&&e<=9654||e===9655||e>=9656&&e<=9664||e===9665||e>=9666&&e<=9719||e>=9720&&e<=9727||e>=9728&&e<=9838||e===9839||e>=9840&&e<=10087||e===10088||e===10089||e===10090||e===10091||e===10092||e===10093||e===10094||e===10095||e===10096||e===10097||e===10098||e===10099||e===10100||e===10101||e>=10132&&e<=10175||e>=10176&&e<=10180||e===10181||e===10182||e>=10183&&e<=10213||e===10214||e===10215||e===10216||e===10217||e===10218||e===10219||e===10220||e===10221||e===10222||e===10223||e>=10224&&e<=10239||e>=10240&&e<=10495||e>=10496&&e<=10626||e===10627||e===10628||e===10629||e===10630||e===10631||e===10632||e===10633||e===10634||e===10635||e===10636||e===10637||e===10638||e===10639||e===10640||e===10641||e===10642||e===10643||e===10644||e===10645||e===10646||e===10647||e===10648||e>=10649&&e<=10711||e===10712||e===10713||e===10714||e===10715||e>=10716&&e<=10747||e===10748||e===10749||e>=10750&&e<=11007||e>=11008&&e<=11055||e>=11056&&e<=11076||e>=11077&&e<=11078||e>=11079&&e<=11084||e>=11085&&e<=11123||e>=11124&&e<=11125||e>=11126&&e<=11157||e===11158||e>=11159&&e<=11263||e>=11776&&e<=11777||e===11778||e===11779||e===11780||e===11781||e>=11782&&e<=11784||e===11785||e===11786||e===11787||e===11788||e===11789||e>=11790&&e<=11798||e===11799||e>=11800&&e<=11801||e===11802||e===11803||e===11804||e===11805||e>=11806&&e<=11807||e===11808||e===11809||e===11810||e===11811||e===11812||e===11813||e===11814||e===11815||e===11816||e===11817||e>=11818&&e<=11822||e===11823||e>=11824&&e<=11833||e>=11834&&e<=11835||e>=11836&&e<=11839||e===11840||e===11841||e===11842||e>=11843&&e<=11855||e>=11856&&e<=11857||e===11858||e>=11859&&e<=11903||e>=12289&&e<=12291||e===12296||e===12297||e===12298||e===12299||e===12300||e===12301||e===12302||e===12303||e===12304||e===12305||e>=12306&&e<=12307||e===12308||e===12309||e===12310||e===12311||e===12312||e===12313||e===12314||e===12315||e===12316||e===12317||e>=12318&&e<=12319||e===12320||e===12336||e===64830||e===64831||e>=65093&&e<=65094}function un(e){e.forEach(function(t){if(delete t.location,ir(t)||or(t))for(var r in t.options)delete t.options[r].location,un(t.options[r].value);else tr(t)&&sr(t.style)||(rr(t)||nr(t))&&St(t.style)?delete t.style.location:ar(t)&&un(t.children)})}function mo(e,t){t===void 0&&(t={}),t=S({shouldParseSkeletons:!0,requiresOtherClause:!0},t);var r=new ho(e,t).parse();if(r.err){var n=SyntaxError(v[r.err.kind]);throw n.location=r.err.location,n.originalMessage=r.err.message,n}return t?.captureLocation||un(r.val),r.val}function yt(e,t){var r=t&&t.cache?t.cache:gc,n=t&&t.serializer?t.serializer:fc,i=t&&t.strategy?t.strategy:uc;return i(e,{cache:r,serializer:n})}function dc(e){return e==null||typeof e=="number"||typeof e=="boolean"}function po(e,t,r,n){var i=dc(n)?n:r(n),o=t.get(i);return typeof o>"u"&&(o=e.call(this,n),t.set(i,o)),o}function fo(e,t,r){var n=Array.prototype.slice.call(arguments,3),i=r(n),o=t.get(i);return typeof o>"u"&&(o=e.apply(this,n),t.set(i,o)),o}function mn(e,t,r,n,i){return r.bind(t,e,n,i)}function uc(e,t){var r=e.length===1?po:fo;return mn(e,this,r,t.cache.create(),t.serializer)}function mc(e,t){return mn(e,this,fo,t.cache.create(),t.serializer)}function pc(e,t){return mn(e,this,po,t.cache.create(),t.serializer)}var fc=function(){return JSON.stringify(arguments)};function pn(){this.cache=Object.create(null)}pn.prototype.get=function(e){return this.cache[e]};pn.prototype.set=function(e,t){this.cache[e]=t};var gc={create:function(){return new pn}},cr={variadic:mc,monadic:pc};var _e;(function(e){e.MISSING_VALUE="MISSING_VALUE",e.INVALID_VALUE="INVALID_VALUE",e.MISSING_INTL_API="MISSING_INTL_API"})(_e||(_e={}));var Tt=function(e){Et(t,e);function t(r,n,i){var o=e.call(this,r)||this;return o.code=n,o.originalMessage=i,o}return t.prototype.toString=function(){return"[formatjs Error: "+this.code+"] "+this.message},t}(Error);var fn=function(e){Et(t,e);function t(r,n,i,o){return e.call(this,'Invalid values for "'+r+'": "'+n+'". Options are "'+Object.keys(i).join('", "')+'"',_e.INVALID_VALUE,o)||this}return t}(Tt);var go=function(e){Et(t,e);function t(r,n,i){return e.call(this,'Value for "'+r+'" must be of type '+n,_e.INVALID_VALUE,i)||this}return t}(Tt);var xo=function(e){Et(t,e);function t(r,n){return e.call(this,'The intl string context variable "'+r+'" was not provided to the string "'+n+'"',_e.MISSING_VALUE,n)||this}return t}(Tt);var z;(function(e){e[e.literal=0]="literal",e[e.object=1]="object"})(z||(z={}));function xc(e){return e.length<2?e:e.reduce(function(t,r){var n=t[t.length-1];return!n||n.type!==z.literal||r.type!==z.literal?t.push(r):n.value+=r.value,t},[])}function vc(e){return typeof e=="function"}function Lt(e,t,r,n,i,o,a){if(e.length===1&&nn(e[0]))return[{type:z.literal,value:e[0].value}];for(var s=[],c=0,l=e;c0?e.substring(0,n):"";let i=Ao(e.split("").reverse().join("")),o=r-i,a=e.substring(o,o+1),s=o+(a==="."||a===","?1:0);t.suffix=i>0?e.substring(s,r):"",t.mask=e.substring(n,s),t.maskHasNegativeSign=t.mask.charAt(0)==="-",t.maskHasPositiveSign=t.mask.charAt(0)==="+";let c=t.mask.match(yc);return t.decimal=c&&c[c.length-1]||".",t.separator=c&&c[1]&&c[0]||",",c=t.mask.split(t.decimal),t.integer=c[0],t.fraction=c[1],t}function Lc(e,t,r){let n=!1,i={value:e};e<0&&(n=!0,i.value=-i.value),i.sign=n?"-":"",i.value=Number(i.value).toFixed(t.fraction&&t.fraction.length),i.value=Number(i.value).toString();let o=t.fraction&&t.fraction.lastIndexOf("0"),[a="0",s=""]=i.value.split(".");return(!s||s&&s.length<=o)&&(s=o<0?"":(+("0."+s)).toFixed(o+1).replace("0.","")),i.integer=a,i.fraction=s,_c(i,t),(i.result==="0"||i.result==="")&&(n=!1,i.sign=""),!n&&t.maskHasPositiveSign?i.sign="+":n&&t.maskHasPositiveSign?i.sign="-":n&&(i.sign=r&&r.enforceMaskSign&&!t.maskHasNegativeSign?"":"-"),i}function _c(e,t){e.result="";let r=t.integer.split(t.separator),n=r.join(""),i=n&&n.indexOf("0");if(i>-1)for(;e.integer.lengthMath.round(e*20)/20},xn=(e,t)=>({accept:e,round:t}),Ic=[xn(({divisor:e,price:t})=>t%e==0,({divisor:e,price:t})=>t/e),xn(({usePrecision:e})=>e,({divisor:e,price:t})=>Math.ceil(Math.floor(t*1e4/e)/100)/100),xn(()=>!0,({divisor:e,price:t})=>Math.ceil(Math.floor(t*100/e)/100))],vn={[$.YEAR]:{[k.MONTHLY]:_t.MONTH,[k.ANNUAL]:_t.YEAR},[$.MONTH]:{[k.MONTHLY]:_t.MONTH}},kc=(e,t)=>e.indexOf(`'${t}'`)===0,Oc=(e,t=!0)=>{let r=e.replace(/'.*?'/,"").trim(),n=wo(r);return!!n?t||(r=r.replace(/[,\.]0+/,n)):r=r.replace(/\s?(#.*0)(?!\s)?/,"$&"+Vc(e)),r},Rc=e=>{let t=$c(e),r=kc(e,t),n=e.replace(/'.*?'/,""),i=To.test(n)||Lo.test(n);return{currencySymbol:t,isCurrencyFirst:r,hasCurrencySpace:i}},_o=e=>e.replace(To,yo).replace(Lo,yo),Vc=e=>e.match(/#(.?)#/)?.[1]===So?Pc:So,$c=e=>e.match(/'(.*?)'/)?.[1]??"",wo=e=>e.match(/0(.?)0/)?.[1]??"";function lr({formatString:e,price:t,usePrecision:r,isIndianPrice:n=!1},i,o=a=>a){let{currencySymbol:a,isCurrencyFirst:s,hasCurrencySpace:c}=Rc(e),l=r?wo(e):"",h=Oc(e,r),d=r?2:0,u=o(t,{currencySymbol:a}),m=n?u.toLocaleString("hi-IN",{minimumFractionDigits:d,maximumFractionDigits:d}):Eo(h,u),x=r?m.lastIndexOf(l):m.length,f=m.substring(0,x),_=m.substring(x+1);return{accessiblePrice:e.replace(/'.*?'/,"SYMBOL").replace(/#.*0/,m).replace(/SYMBOL/,a),currencySymbol:a,decimals:_,decimalsDelimiter:l,hasCurrencySpace:c,integer:f,isCurrencyFirst:s,recurrenceTerm:i}}var Po=e=>{let{commitment:t,term:r,usePrecision:n}=e,i=Cc[r]??1;return lr(e,i>1?_t.MONTH:vn[t]?.[r],(o,{currencySymbol:a})=>{let s={divisor:i,price:o,usePrecision:n},{round:c}=Ic.find(({accept:h})=>h(s));if(!c)throw new Error(`Missing rounding rule for: ${JSON.stringify(s)}`);return(Nc[a]??(h=>h))(c(s))})},Co=({commitment:e,term:t,...r})=>lr(r,vn[e]?.[t]),No=e=>{let{commitment:t,term:r}=e;return t===$.YEAR&&r===k.MONTHLY?lr(e,_t.YEAR,n=>n*12):lr(e,vn[t]?.[r])};var Mc={recurrenceLabel:"{recurrenceTerm, select, MONTH {/mo} YEAR {/yr} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per month} YEAR {per year} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per license} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per license} other {}}",freeLabel:"Free",freeAriaLabel:"Free",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Alternatively at {alternativePrice}",strikethroughAriaLabel:"Regularly at {strikethroughPrice}"},Uc=Fi("ConsonantTemplates/price"),Dc=/<.+?>/g,H={container:"price",containerOptical:"price-optical",containerStrikethrough:"price-strikethrough",containerAnnual:"price-annual",containerAnnualPrefix:"price-annual-prefix",containerAnnualSuffix:"price-annual-suffix",disabled:"disabled",currencySpace:"price-currency-space",currencySymbol:"price-currency-symbol",decimals:"price-decimals",decimalsDelimiter:"price-decimals-delimiter",integer:"price-integer",recurrence:"price-recurrence",taxInclusivity:"price-tax-inclusivity",unitType:"price-unit-type"},we={perUnitLabel:"perUnitLabel",perUnitAriaLabel:"perUnitAriaLabel",recurrenceLabel:"recurrenceLabel",recurrenceAriaLabel:"recurrenceAriaLabel",taxExclusiveLabel:"taxExclusiveLabel",taxInclusiveLabel:"taxInclusiveLabel",strikethroughAriaLabel:"strikethroughAriaLabel"},Gc="TAX_EXCLUSIVE",Hc=e=>zi(e)?Object.entries(e).filter(([,t])=>Ke(t)||Zt(t)||t===!0).reduce((t,[r,n])=>t+` ${r}${n===!0?"":'="'+Gi(n)+'"'}`,""):"",B=(e,t,r,n=!1)=>`${n?_o(t):t??""}`;function zc(e,{accessibleLabel:t,currencySymbol:r,decimals:n,decimalsDelimiter:i,hasCurrencySpace:o,integer:a,isCurrencyFirst:s,recurrenceLabel:c,perUnitLabel:l,taxInclusivityLabel:h},d={}){let u=B(H.currencySymbol,r),m=B(H.currencySpace,o?" ":""),x="";return s&&(x+=u+m),x+=B(H.integer,a),x+=B(H.decimalsDelimiter,i),x+=B(H.decimals,n),s||(x+=m+u),x+=B(H.recurrence,c,null,!0),x+=B(H.unitType,l,null,!0),x+=B(H.taxInclusivity,h,!0),B(e,x,{...d,"aria-label":t})}var Y=({displayOptical:e=!1,displayStrikethrough:t=!1,displayAnnual:r=!1}={})=>({country:n,displayFormatted:i=!0,displayRecurrence:o=!0,displayPerUnit:a=!1,displayTax:s=!1,language:c,literals:l={}}={},{commitment:h,formatString:d,price:u,priceWithoutDiscount:m,taxDisplay:x,taxTerm:f,term:_,usePrecision:N}={},A={})=>{Object.entries({country:n,formatString:d,language:c,price:u}).forEach(([oe,Vr])=>{if(Vr==null)throw new Error(`Argument "${oe}" is missing`)});let T={...Mc,...l},V=`${c.toLowerCase()}-${n.toUpperCase()}`;function L(oe,Vr){let $r=T[oe];if($r==null)return"";try{return new bo($r.replace(Dc,""),V).format(Vr)}catch{return Uc.error("Failed to format literal:",$r),""}}let K=t&&m?m:u,F=e?Po:Co;r&&(F=No);let{accessiblePrice:ue,recurrenceTerm:me,...Ge}=F({commitment:h,formatString:d,term:_,price:e?u:K,usePrecision:N,isIndianPrice:n==="IN"}),J=ue,ye="";if(E(o)&&me){let oe=L(we.recurrenceAriaLabel,{recurrenceTerm:me});oe&&(J+=" "+oe),ye=L(we.recurrenceLabel,{recurrenceTerm:me})}let pe="";if(E(a)){pe=L(we.perUnitLabel,{perUnit:"LICENSE"});let oe=L(we.perUnitAriaLabel,{perUnit:"LICENSE"});oe&&(J+=" "+oe)}let W="";E(s)&&f&&(W=L(x===Gc?we.taxExclusiveLabel:we.taxInclusiveLabel,{taxTerm:f}),W&&(J+=" "+W)),t&&(J=L(we.strikethroughAriaLabel,{strikethroughPrice:J}));let Q=H.container;if(e&&(Q+=" "+H.containerOptical),t&&(Q+=" "+H.containerStrikethrough),r&&(Q+=" "+H.containerAnnual),E(i))return zc(Q,{...Ge,accessibleLabel:J,recurrenceLabel:ye,perUnitLabel:pe,taxInclusivityLabel:W},A);let{currencySymbol:jt,decimals:ss,decimalsDelimiter:cs,hasCurrencySpace:Ri,integer:ls,isCurrencyFirst:hs}=Ge,He=[ls,cs,ss];hs?(He.unshift(Ri?"\xA0":""),He.unshift(jt)):(He.push(Ri?"\xA0":""),He.push(jt)),He.push(ye,pe,W);let ds=He.join("");return B(Q,ds,A)},Io=()=>(e,t,r)=>{let i=(e.displayOldPrice===void 0||E(e.displayOldPrice))&&t.priceWithoutDiscount&&t.priceWithoutDiscount!=t.price;return`${Y()(e,t,r)}${i?" "+Y({displayStrikethrough:!0})(e,t,r):""}`},ko=()=>(e,t,r)=>{let n={...e,displayTax:!1,displayPerUnit:!1};return`${(e.displayOldPrice===void 0||E(e.displayOldPrice))&&t.priceWithoutDiscount&&t.priceWithoutDiscount!=t.price?Y({displayStrikethrough:!0})(n,t,r)+" ":""}${Y()(e,t,r)}${B(H.containerAnnualPrefix," (")}${Y({displayAnnual:!0})(n,t,r)}${B(H.containerAnnualSuffix,")")}`},Oo=()=>(e,t,r)=>{let n={...e,displayTax:!1,displayPerUnit:!1};return`${Y()(e,t,r)}${B(H.containerAnnualPrefix," (")}${Y({displayAnnual:!0})(n,t,r)}${B(H.containerAnnualSuffix,")")}`};var bn=Y(),An=Io(),En=Y({displayOptical:!0}),Sn=Y({displayStrikethrough:!0}),yn=Y({displayAnnual:!0}),Tn=Oo(),Ln=ko();var Fc=(e,t)=>{if(!(!je(e)||!je(t)))return Math.floor((t-e)/t*100)},Ro=()=>(e,t,r)=>{let{price:n,priceWithoutDiscount:i}=t,o=Fc(n,i);return o===void 0?'':`${o}%`};var _n=Ro();var{freeze:wt}=Object,ee=wt({...Te}),te=wt({...q}),Pe={STAGE:"STAGE",PRODUCTION:"PRODUCTION",LOCAL:"LOCAL"},wn=wt({...$}),Pn=wt({...Bi}),Cn=wt({...k});var zn={};bs(zn,{CLASS_NAME_FAILED:()=>Nn,CLASS_NAME_PENDING:()=>In,CLASS_NAME_RESOLVED:()=>kn,ERROR_MESSAGE_BAD_REQUEST:()=>hr,ERROR_MESSAGE_MISSING_LITERALS_URL:()=>Kc,ERROR_MESSAGE_OFFER_NOT_FOUND:()=>On,EVENT_TYPE_ERROR:()=>Bc,EVENT_TYPE_FAILED:()=>Rn,EVENT_TYPE_PENDING:()=>Vn,EVENT_TYPE_READY:()=>We,EVENT_TYPE_RESOLVED:()=>$n,LOG_NAMESPACE:()=>Mn,Landscape:()=>Ce,PARAM_AOS_API_KEY:()=>jc,PARAM_ENV:()=>Un,PARAM_LANDSCAPE:()=>Dn,PARAM_WCS_API_KEY:()=>Yc,STATE_FAILED:()=>ae,STATE_PENDING:()=>se,STATE_RESOLVED:()=>ce,WCS_PROD_URL:()=>Gn,WCS_STAGE_URL:()=>Hn});var Nn="placeholder-failed",In="placeholder-pending",kn="placeholder-resolved",hr="Bad WCS request",On="Commerce offer not found",Kc="Literals URL not provided",Bc="mas:error",Rn="mas:failed",Vn="mas:pending",We="mas:ready",$n="mas:resolved",Mn="mas/commerce",Un="commerce.env",Dn="commerce.landscape",jc="commerce.aosKey",Yc="commerce.wcsKey",Gn="https://www.adobe.com/web_commerce_artifact",Hn="https://www.stage.adobe.com/web_commerce_artifact_stage",ae="failed",se="pending",ce="resolved",Ce={DRAFT:"DRAFT",PUBLISHED:"PUBLISHED"};var Vo="mas-commerce-service";function $o(e,{once:t=!1}={}){let r=null;function n(){let i=document.querySelector(Vo);i!==r&&(r=i,i&&e(i))}return document.addEventListener(We,n,{once:t}),xe(n),()=>document.removeEventListener(We,n)}function Pt(e,{country:t,forceTaxExclusive:r,perpetual:n}){let i;if(e.length<2)i=e;else{let o=t==="GB"||n?"EN":"MULT",[a,s]=e;i=[a.language===o?a:s]}return r&&(i=i.map(tn)),i}var xe=e=>window.setTimeout(e);function qe(e,t=1){if(e==null)return[t];let r=(Array.isArray(e)?e:String(e).split(",")).map(Xe).filter(je);return r.length||(r=[t]),r}function dr(e){return e==null?[]:(Array.isArray(e)?e:String(e).split(",")).filter(Xr)}function X(){return document.getElementsByTagName(Vo)?.[0]}var Xc={[ae]:Nn,[se]:In,[ce]:kn},Wc={[ae]:Rn,[se]:Vn,[ce]:$n},Ze=class{constructor(t){p(this,"changes",new Map);p(this,"connected",!1);p(this,"dispose",Be);p(this,"error");p(this,"log");p(this,"options");p(this,"promises",[]);p(this,"state",se);p(this,"timer",null);p(this,"value");p(this,"version",0);p(this,"wrapperElement");this.wrapperElement=t}update(){[ae,se,ce].forEach(t=>{this.wrapperElement.classList.toggle(Xc[t],t===this.state)})}notify(){(this.state===ce||this.state===ae)&&(this.state===ce?this.promises.forEach(({resolve:t})=>t(this.wrapperElement)):this.state===ae&&this.promises.forEach(({reject:t})=>t(this.error)),this.promises=[]),this.wrapperElement.dispatchEvent(new CustomEvent(Wc[this.state],{bubbles:!0}))}attributeChangedCallback(t,r,n){this.changes.set(t,n),this.requestUpdate()}connectedCallback(){this.dispose=$o(()=>this.requestUpdate(!0))}disconnectedCallback(){this.connected&&(this.connected=!1,this.log?.debug("Disconnected:",{element:this.wrapperElement})),this.dispose(),this.dispose=Be}onceSettled(){let{error:t,promises:r,state:n}=this;return ce===n?Promise.resolve(this.wrapperElement):ae===n?Promise.reject(t):new Promise((i,o)=>{r.push({resolve:i,reject:o})})}toggleResolved(t,r,n){return t!==this.version?!1:(n!==void 0&&(this.options=n),this.state=ce,this.value=r,this.update(),this.log?.debug("Resolved:",{element:this.wrapperElement,value:r}),xe(()=>this.notify()),!0)}toggleFailed(t,r,n){return t!==this.version?!1:(n!==void 0&&(this.options=n),this.error=r,this.state=ae,this.update(),this.log?.error("Failed:",{element:this.wrapperElement,error:r}),xe(()=>this.notify()),!0)}togglePending(t){return this.version++,t&&(this.options=t),this.state=se,this.update(),xe(()=>this.notify()),this.version}requestUpdate(t=!1){if(!this.wrapperElement.isConnected||!X()||this.timer)return;let{error:r,options:n,state:i,value:o,version:a}=this;this.state=se,this.timer=xe(async()=>{this.timer=null;let s=null;if(this.changes.size&&(s=Object.fromEntries(this.changes.entries()),this.changes.clear()),this.connected?this.log?.debug("Updated:",{element:this.wrapperElement,changes:s}):(this.connected=!0,this.log?.debug("Connected:",{element:this.wrapperElement,changes:s})),s||t)try{await this.wrapperElement.render?.()===!1&&this.state===se&&this.version===a&&(this.state=i,this.error=r,this.value=o,this.update(),this.notify())}catch(c){this.toggleFailed(this.version,c,n)}})}};function Mo(e={}){return Object.entries(e).forEach(([t,r])=>{(r==null||r===""||r?.length===0)&&delete e[t]}),e}function ur(e,t={}){let{tag:r,is:n}=e,i=document.createElement(r,{is:n});return i.setAttribute("is",n),Object.assign(i.dataset,Mo(t)),i}function mr(e,t={}){return e instanceof HTMLElement?(Object.assign(e.dataset,Mo(t)),e):null}var qc="download",Zc="upgrade",Ne,Ct=class Ct extends HTMLAnchorElement{constructor(){super();j(this,Ne);p(this,"masElement",new Ze(this));this.handleClick=this.handleClick.bind(this)}attributeChangedCallback(r,n,i){this.masElement.attributeChangedCallback(r,n,i)}connectedCallback(){this.masElement.connectedCallback(),this.addEventListener("click",this.handleClick)}disconnectedCallback(){this.masElement.disconnectedCallback(),this.removeEventListener("click",this.handleClick)}onceSettled(){return this.masElement.onceSettled()}get value(){return this.masElement.value}get options(){return this.masElement.options}requestUpdate(r=!1){return this.masElement.requestUpdate(r)}static get observedAttributes(){return["data-checkout-workflow","data-checkout-workflow-step","data-extra-options","data-ims-country","data-perpetual","data-promotion-code","data-quantity","data-template","data-wcs-osi","data-entitlement","data-upgrade","data-modal"]}static createCheckoutLink(r={},n=""){let i=X();if(!i)return null;let{checkoutMarketSegment:o,checkoutWorkflow:a,checkoutWorkflowStep:s,entitlement:c,upgrade:l,modal:h,perpetual:d,promotionCode:u,quantity:m,wcsOsi:x,extraOptions:f}=i.collectCheckoutOptions(r),_=ur(Ct,{checkoutMarketSegment:o,checkoutWorkflow:a,checkoutWorkflowStep:s,entitlement:c,upgrade:l,modal:h,perpetual:d,promotionCode:u,quantity:m,wcsOsi:x,extraOptions:f});return n&&(_.innerHTML=`${n}`),_}get isCheckoutLink(){return!0}handleClick(r){var n;if(r.target!==this){r.preventDefault(),r.stopImmediatePropagation(),this.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window}));return}(n=M(this,Ne))==null||n.call(this,r)}async render(r={}){if(!this.isConnected)return!1;let n=X();if(!n)return!1;this.dataset.imsCountry||n.imsCountryPromise.then(h=>{h&&(this.dataset.imsCountry=h)},Be),r.imsCountry=null;let i=n.collectCheckoutOptions(r,this);if(!i.wcsOsi.length)return!1;let o;try{o=JSON.parse(i.extraOptions??"{}")}catch(h){this.masElement.log?.error("cannot parse exta checkout options",h)}let a=this.masElement.togglePending(i);this.href="";let s=n.resolveOfferSelectors(i),c=await Promise.all(s);c=c.map(h=>Pt(h,i)),i.country=this.dataset.imsCountry||i.country;let l=await n.buildCheckoutAction?.(c.flat(),{...o,...i},this);return this.renderOffers(c.flat(),i,{},l,a)}renderOffers(r,n,i={},o=void 0,a=void 0){if(!this.isConnected)return!1;let s=X();if(!s)return!1;if(n={...JSON.parse(this.dataset.extraOptions??"null"),...n,...i},a??(a=this.masElement.togglePending(n)),M(this,Ne)&&fe(this,Ne,void 0),o){this.classList.remove(qc,Zc),this.masElement.toggleResolved(a,r,n);let{url:l,text:h,className:d,handler:u}=o;return l&&(this.href=l),h&&(this.firstElementChild.innerHTML=h),d&&this.classList.add(...d.split(" ")),u&&(this.setAttribute("href","#"),fe(this,Ne,u.bind(this))),!0}else if(r.length){if(this.masElement.toggleResolved(a,r,n)){let l=s.buildCheckoutURL(r,n);return this.setAttribute("href",l),!0}}else{let l=new Error(`Not provided: ${n?.wcsOsi??"-"}`);if(this.masElement.toggleFailed(a,l,n))return this.setAttribute("href","#"),!0}}updateOptions(r={}){let n=X();if(!n)return!1;let{checkoutMarketSegment:i,checkoutWorkflow:o,checkoutWorkflowStep:a,entitlement:s,upgrade:c,modal:l,perpetual:h,promotionCode:d,quantity:u,wcsOsi:m}=n.collectCheckoutOptions(r);return mr(this,{checkoutMarketSegment:i,checkoutWorkflow:o,checkoutWorkflowStep:a,entitlement:s,upgrade:c,modal:l,perpetual:h,promotionCode:d,quantity:u,wcsOsi:m}),!0}};Ne=new WeakMap,p(Ct,"is","checkout-link"),p(Ct,"tag","a");var re=Ct;window.customElements.get(re.is)||window.customElements.define(re.is,re,{extends:re.tag});var y=Object.freeze({checkoutClientId:"adobe_com",checkoutWorkflow:ee.V3,checkoutWorkflowStep:te.EMAIL,country:"US",displayOldPrice:!0,displayPerUnit:!1,displayRecurrence:!0,displayTax:!1,env:Pe.PRODUCTION,forceTaxExclusive:!1,language:"en",entitlement:!1,extraOptions:{},modal:!1,promotionCode:"",quantity:1,wcsApiKey:"wcms-commerce-ims-ro-user-milo",wcsBufferDelay:1,wcsURL:"https://www.adobe.com/web_commerce_artifact",landscape:Ce.PUBLISHED,wcsBufferLimit:1});function Uo({providers:e,settings:t}){function r(o,a){let{checkoutClientId:s,checkoutWorkflow:c,checkoutWorkflowStep:l,country:h,language:d,promotionCode:u,quantity:m}=t,{checkoutMarketSegment:x,checkoutWorkflow:f=c,checkoutWorkflowStep:_=l,imsCountry:N,country:A=N??h,language:T=d,quantity:V=m,entitlement:L,upgrade:K,modal:F,perpetual:ue,promotionCode:me=u,wcsOsi:Ge,extraOptions:J,...ye}=Object.assign({},a?.dataset??{},o??{}),pe=ge(f,ee,y.checkoutWorkflow),W=te.CHECKOUT;pe===ee.V3&&(W=ge(_,te,y.checkoutWorkflowStep));let Q=Ye({...ye,extraOptions:J,checkoutClientId:s,checkoutMarketSegment:x,country:A,quantity:qe(V,y.quantity),checkoutWorkflow:pe,checkoutWorkflowStep:W,language:T,entitlement:E(L),upgrade:E(K),modal:E(F),perpetual:E(ue),promotionCode:At(me).effectivePromoCode,wcsOsi:dr(Ge)});if(a)for(let jt of e.checkout)jt(a,Q);return Q}function n(o,a){if(!Array.isArray(o)||!o.length||!a)return"";let{env:s,landscape:c}=t,{checkoutClientId:l,checkoutMarketSegment:h,checkoutWorkflow:d,checkoutWorkflowStep:u,country:m,promotionCode:x,quantity:f,..._}=r(a),N=window.frameElement?"if":"fp",A={checkoutPromoCode:x,clientId:l,context:N,country:m,env:s,items:[],marketSegment:h,workflowStep:u,landscape:c,..._};if(o.length===1){let[{offerId:T,offerType:V,productArrangementCode:L}]=o,{marketSegments:[K]}=o[0];Object.assign(A,{marketSegment:K,offerType:V,productArrangementCode:L}),A.items.push(f[0]===1?{id:T}:{id:T,quantity:f[0]})}else A.items.push(...o.map(({offerId:T},V)=>({id:T,quantity:f[V]??y.quantity})));return zr(d,A)}let{createCheckoutLink:i}=re;return{CheckoutLink:re,CheckoutWorkflow:ee,CheckoutWorkflowStep:te,buildCheckoutURL:n,collectCheckoutOptions:r,createCheckoutLink:i}}var Fn={clientId:"merch-at-scale",delimiter:"\xB6",ignoredProperties:["analytics","literals"],serializableTypes:["Array","Object"],sampleRate:30,tags:"consumer=milo/commerce"},Do=new Set,Jc=e=>e instanceof Error||typeof e.originatingRequest=="string";function Go(e){if(e==null)return;let t=typeof e;if(t==="function"){let{name:r}=e;return r?`${t} ${r}`:t}if(t==="object"){if(e instanceof Error)return e.message;if(typeof e.originatingRequest=="string"){let{message:n,originatingRequest:i,status:o}=e;return[n,o,i].filter(a=>a).join(" ")}let r=e[Symbol.toStringTag]??Object.getPrototypeOf(e).constructor.name;if(!Fn.serializableTypes.includes(r))return r}return e}function Qc(e,t){if(!Fn.ignoredProperties.includes(e))return Go(t)}var Kn={append(e){let{delimiter:t,sampleRate:r,tags:n,clientId:i}=Fn,{message:o,params:a}=e,s=[],c=o,l=[];a.forEach(u=>{u!=null&&(Jc(u)?s:l).push(u)}),s.length&&(c+=" ",c+=s.map(Go).join(" "));let{pathname:h,search:d}=window.location;c+=`${t}page=`,c+=h+d,l.length&&(c+=`${t}facts=`,c+=JSON.stringify(l,Qc)),Do.has(c)||(Do.add(c),window.lana?.log(c,{sampleRate:r,tags:n,clientId:i}))}};var Bn=Object.freeze({LOCAL:"local",PROD:"prod",STAGE:"stage"});function el({locale:e=void 0,country:t=void 0,language:r=void 0}={}){return r??(r=e?.split("_")?.[0]||y.language),t??(t=e?.split("_")?.[1]||y.country),e??(e=`${r}_${t}`),{locale:e,country:t,language:r}}function jn(e={}){let{commerce:t={}}=e,r=Pe.PRODUCTION,n=Gn,i=O("checkoutClientId",t)??y.checkoutClientId,o=ge(O("checkoutWorkflow",t),ee,y.checkoutWorkflow),a=te.CHECKOUT;o===ee.V3&&(a=ge(O("checkoutWorkflowStep",t),te,y.checkoutWorkflowStep));let s=E(O("displayOldPrice",t),y.displayOldPrice),c=E(O("displayPerUnit",t),y.displayPerUnit),l=E(O("displayRecurrence",t),y.displayRecurrence),h=E(O("displayTax",t),y.displayTax),d=E(O("entitlement",t),y.entitlement),u=E(O("modal",t),y.modal),m=E(O("forceTaxExclusive",t),y.forceTaxExclusive),x=O("promotionCode",t)??y.promotionCode,f=qe(O("quantity",t)),_=O("wcsApiKey",t)??y.wcsApiKey,N=t?.env==="stage",A=Ce.PUBLISHED;["true",""].includes(t.allowOverride)&&(N=(O(Un,t,{metadata:!1})?.toLowerCase()??t?.env)==="stage",A=ge(O(Dn,t),Ce,A)),N&&(r=Pe.STAGE,n=Hn);let V=Xe(O("wcsBufferDelay",t),y.wcsBufferDelay),L=Xe(O("wcsBufferLimit",t),y.wcsBufferLimit);return{...el(e),displayOldPrice:s,checkoutClientId:i,checkoutWorkflow:o,checkoutWorkflowStep:a,displayPerUnit:c,displayRecurrence:l,displayTax:h,entitlement:d,extraOptions:y.extraOptions,modal:u,env:r,forceTaxExclusive:m,promotionCode:x,quantity:f,wcsApiKey:_,wcsBufferDelay:V,wcsBufferLimit:L,wcsURL:n,landscape:A}}var zo="debug",tl="error",rl="info",nl="warn",il=Date.now(),Yn=new Set,Xn=new Set,Ho=new Map,Nt=Object.freeze({DEBUG:zo,ERROR:tl,INFO:rl,WARN:nl}),Fo={append({level:e,message:t,params:r,timestamp:n,source:i}){console[e](`${n}ms [${i}] %c${t}`,"font-weight: bold;",...r)}},Ko={filter:({level:e})=>e!==zo},ol={filter:()=>!1};function al(e,t,r,n,i){return{level:e,message:t,namespace:r,get params(){if(n.length===1){let[o]=n;bt(o)&&(n=o(),Array.isArray(n)||(n=[n]))}return n},source:i,timestamp:Date.now()-il}}function sl(e){[...Xn].every(t=>t(e))&&Yn.forEach(t=>t(e))}function Bo(e){let t=(Ho.get(e)??0)+1;Ho.set(e,t);let r=`${e} #${t}`,n=o=>(a,...s)=>sl(al(o,a,e,s,r)),i=Object.seal({id:r,namespace:e,module(o){return Bo(`${i.namespace}/${o}`)},debug:n(Nt.DEBUG),error:n(Nt.ERROR),info:n(Nt.INFO),warn:n(Nt.WARN)});return i}function pr(...e){e.forEach(t=>{let{append:r,filter:n}=t;bt(n)?Xn.add(n):bt(r)&&Yn.add(r)})}function cl(e={}){let{name:t}=e,r=E(O("commerce.debug",{search:!0,storage:!0}),t===Bn.LOCAL);return pr(r?Fo:Ko),t===Bn.PROD&&pr(Kn),Z}function ll(){Yn.clear(),Xn.clear()}var Z={...Bo(Mn),Level:Nt,Plugins:{consoleAppender:Fo,debugFilter:Ko,quietFilter:ol,lanaAppender:Kn},init:cl,reset:ll,use:pr};function hl({interval:e=200,maxAttempts:t=25}={}){let r=Z.module("ims");return new Promise(n=>{r.debug("Waing for IMS to be ready");let i=0;function o(){window.adobeIMS?.initialized?n():++i>t?(r.debug("Timeout"),n()):setTimeout(o,e)}o()})}function dl(e){return e.then(()=>window.adobeIMS?.isSignedInUser()??!1)}function ul(e){let t=Z.module("ims");return e.then(r=>r?window.adobeIMS.getProfile().then(({countryCode:n})=>(t.debug("Got user country:",n),n),n=>{t.error("Unable to get user country:",n)}):null)}function jo({}){let e=hl(),t=dl(e),r=ul(t);return{imsReadyPromise:e,imsSignedInPromise:t,imsCountryPromise:r}}async function Xo(e,t){let{data:r}=t||await Promise.resolve().then(()=>Es(Yo(),1));if(Array.isArray(r)){let n=o=>r.find(a=>qt(a.lang,o)),i=n(e.language)??n(y.language);if(i)return Object.freeze(i)}return{}}var Wo=["GB_en","AU_en","FR_fr","AT_de","BE_en","BE_fr","BE_nl","BG_bg","CH_de","CH_fr","CH_it","CZ_cs","DE_de","DK_da","EE_et","EG_ar","EG_en","ES_es","FI_fi","FR_fr","GR_el","GR_en","HU_hu","IE_en","IT_it","LU_de","LU_en","LU_fr","NL_nl","NO_nb","PL_pl","PT_pt","RO_ro","SE_sv","SI_sl","SK_sk","TR_tr","UA_uk","ID_en","ID_in","IN_en","IN_hi","JP_ja","MY_en","MY_ms","NZ_en","TH_en","TH_th"],pl={INDIVIDUAL_COM:["ZA_en","LT_lt","LV_lv","NG_en","SA_ar","SA_en","ZA_en","SG_en","KR_ko"],TEAM_COM:["ZA_en","LT_lt","LV_lv","NG_en","ZA_en","CO_es","KR_ko"],INDIVIDUAL_EDU:["LT_lt","LV_lv","SA_en","SG_en"],TEAM_EDU:["SG_en","KR_ko"]},It=class It extends HTMLSpanElement{constructor(){super();p(this,"masElement",new Ze(this));this.handleClick=this.handleClick.bind(this)}static get observedAttributes(){return["data-display-old-price","data-display-per-unit","data-display-recurrence","data-display-tax","data-perpetual","data-promotion-code","data-tax-exclusive","data-template","data-wcs-osi"]}static createInlinePrice(r){let n=X();if(!n)return null;let{displayOldPrice:i,displayPerUnit:o,displayRecurrence:a,displayTax:s,forceTaxExclusive:c,perpetual:l,promotionCode:h,quantity:d,template:u,wcsOsi:m}=n.collectPriceOptions(r);return ur(It,{displayOldPrice:i,displayPerUnit:o,displayRecurrence:a,displayTax:s,forceTaxExclusive:c,perpetual:l,promotionCode:h,quantity:d,template:u,wcsOsi:m})}get isInlinePrice(){return!0}attributeChangedCallback(r,n,i){this.masElement.attributeChangedCallback(r,n,i)}connectedCallback(){this.masElement.connectedCallback(),this.addEventListener("click",this.handleClick)}disconnectedCallback(){this.masElement.disconnectedCallback(),this.removeEventListener("click",this.handleClick)}handleClick(r){r.target!==this&&(r.stopImmediatePropagation(),this.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window})))}onceSettled(){return this.masElement.onceSettled()}get value(){return this.masElement.value}requestUpdate(r=!1){return this.masElement.requestUpdate(r)}resolveDisplayTaxForGeoAndSegment(r,n,i,o){let a=`${r}_${n}`;if(Wo.includes(r)||Wo.includes(a))return!0;let s=pl[`${i}_${o}`];return s?!!(s.includes(r)||s.includes(a)):!1}async resolveDisplayTax(r,n){let[i]=await r.resolveOfferSelectors(n),o=Pt(await i,n);if(o?.length){let{country:a,language:s}=n,c=o[0],[l=""]=c.marketSegments;return this.resolveDisplayTaxForGeoAndSegment(a,s,c.customerSegment,l)}}async render(r={}){if(!this.isConnected)return!1;let n=X();if(!n)return!1;let i=n.collectPriceOptions(r,this);if(!i.wcsOsi.length)return!1;let o=this.masElement.togglePending(i);this.innerHTML="";let[a]=n.resolveOfferSelectors(i);return this.renderOffers(Pt(await a,i),i,o)}renderOffers(r,n={},i=void 0){if(!this.isConnected)return;let o=X();if(!o)return!1;let a=o.collectPriceOptions({...this.dataset,...n},this);if(i??(i=this.masElement.togglePending(a)),r.length){if(this.masElement.toggleResolved(i,r,a))return this.innerHTML=o.buildPriceHTML(r,a),!0}else{let s=new Error(`Not provided: ${a?.wcsOsi??"-"}`);if(this.masElement.toggleFailed(i,s,a))return this.innerHTML="",!0}return!1}updateOptions(r){let n=X();if(!n)return!1;let{displayOldPrice:i,displayPerUnit:o,displayRecurrence:a,displayTax:s,forceTaxExclusive:c,perpetual:l,promotionCode:h,quantity:d,template:u,wcsOsi:m}=n.collectPriceOptions(r);return mr(this,{displayOldPrice:i,displayPerUnit:o,displayRecurrence:a,displayTax:s,forceTaxExclusive:c,perpetual:l,promotionCode:h,quantity:d,template:u,wcsOsi:m}),!0}};p(It,"is","inline-price"),p(It,"tag","span");var ne=It;window.customElements.get(ne.is)||window.customElements.define(ne.is,ne,{extends:ne.tag});function qo({literals:e,providers:t,settings:r}){function n(a,s){let{country:c,displayOldPrice:l,displayPerUnit:h,displayRecurrence:d,displayTax:u,forceTaxExclusive:m,language:x,promotionCode:f,quantity:_}=r,{displayOldPrice:N=l,displayPerUnit:A=h,displayRecurrence:T=d,displayTax:V=u,forceTaxExclusive:L=m,country:K=c,language:F=x,perpetual:ue,promotionCode:me=f,quantity:Ge=_,template:J,wcsOsi:ye,...pe}=Object.assign({},s?.dataset??{},a??{}),W=Ye({...pe,country:K,displayOldPrice:E(N),displayPerUnit:E(A),displayRecurrence:E(T),displayTax:E(V),forceTaxExclusive:E(L),language:F,perpetual:E(ue),promotionCode:At(me).effectivePromoCode,quantity:qe(Ge,y.quantity),template:J,wcsOsi:dr(ye)});if(s)for(let Q of t.price)Q(s,W);return W}function i(a,s){if(!Array.isArray(a)||!a.length||!s)return"";let{template:c}=s,l;switch(c){case"discount":l=_n;break;case"strikethrough":l=Sn;break;case"optical":l=En;break;case"annual":l=yn;break;default:s.country==="AU"&&a[0].planType==="ABM"?l=s.promotionCode?Ln:Tn:l=s.promotionCode?An:bn}let h=n(s);h.literals=Object.assign({},e.price,Ye(s.literals??{}));let[d]=a;return d={...d,...d.priceDetails},l(h,d)}let{createInlinePrice:o}=ne;return{InlinePrice:ne,buildPriceHTML:i,collectPriceOptions:n,createInlinePrice:o}}function Zo({settings:e}){let t=Z.module("wcs"),{env:r,wcsApiKey:n}=e,i=new Map,o=new Map,a;async function s(d,u,m=!0){let x=On;t.debug("Fetching:",d);try{d.offerSelectorIds=d.offerSelectorIds.sort();let f=new URL(e.wcsURL);f.searchParams.set("offer_selector_ids",d.offerSelectorIds.join(",")),f.searchParams.set("country",d.country),f.searchParams.set("locale",d.locale),f.searchParams.set("landscape",r===Pe.STAGE?"ALL":e.landscape),f.searchParams.set("api_key",n),d.language&&f.searchParams.set("language",d.language),d.promotionCode&&f.searchParams.set("promotion_code",d.promotionCode),d.currency&&f.searchParams.set("currency",d.currency);let _=await fetch(f.toString(),{credentials:"omit"});if(_.ok){let N=await _.json();t.debug("Fetched:",d,N);let A=N.resolvedOffers??[];A=A.map(Qt),u.forEach(({resolve:T},V)=>{let L=A.filter(({offerSelectorIds:K})=>K.includes(V)).flat();L.length&&(u.delete(V),T(L))})}else _.status===404&&d.offerSelectorIds.length>1?(t.debug("Multi-osi 404, fallback to fetch-by-one strategy"),await Promise.allSettled(d.offerSelectorIds.map(N=>s({...d,offerSelectorIds:[N]},u,!1)))):(x=hr,t.error(x,d))}catch(f){x=hr,t.error(x,d,f)}m&&u.size&&(t.debug("Missing:",{offerSelectorIds:[...u.keys()]}),u.forEach(f=>{f.reject(new Error(x))}))}function c(){clearTimeout(a);let d=[...o.values()];o.clear(),d.forEach(({options:u,promises:m})=>s(u,m))}function l(){let d=i.size;i.clear(),t.debug(`Flushed ${d} cache entries`)}function h({country:d,language:u,perpetual:m=!1,promotionCode:x="",wcsOsi:f=[]}){let _=`${u}_${d}`;d!=="GB"&&(u=m?"EN":"MULT");let N=[d,u,x].filter(A=>A).join("-").toLowerCase();return f.map(A=>{let T=`${A}-${N}`;if(!i.has(T)){let V=new Promise((L,K)=>{let F=o.get(N);if(!F){let ue={country:d,locale:_,offerSelectorIds:[]};d!=="GB"&&(ue.language=u),F={options:ue,promises:new Map},o.set(N,F)}x&&(F.options.promotionCode=x),F.options.offerSelectorIds.push(A),F.promises.set(A,{resolve:L,reject:K}),F.options.offerSelectorIds.length>=e.wcsBufferLimit?c():(t.debug("Queued:",F.options),a||(a=setTimeout(c,e.wcsBufferDelay)))});i.set(T,V)}return i.get(T)})}return{WcsCommitment:wn,WcsPlanType:Pn,WcsTerm:Cn,resolveOfferSelectors:h,flushWcsCache:l}}var Wn="mas-commerce-service",gr,Jo,fr=class extends HTMLElement{constructor(){super(...arguments);j(this,gr);p(this,"promise",null)}async registerCheckoutAction(r){typeof r=="function"&&(this.buildCheckoutAction=async(n,i,o)=>{let a=await r?.(n,i,this.imsSignedInPromise,o);return a||null})}async activate(){let r=M(this,gr,Jo),n=Z.init(r.env).module("service");n.debug("Activating:",r);let i=Object.freeze(jn(r)),o={price:{}};try{o.price=await Xo(i,r.commerce.priceLiterals)}catch{}let a={checkout:new Set,price:new Set},s={literals:o,providers:a,settings:i};Object.defineProperties(this,Object.getOwnPropertyDescriptors({...Uo(s),...jo(s),...qo(s),...Zo(s),...zn,Log:Z,get defaults(){return y},get log(){return Z},get providers(){return{checkout(c){return a.checkout.add(c),()=>a.checkout.delete(c)},price(c){return a.price.add(c),()=>a.price.delete(c)}}},get settings(){return i}})),n.debug("Activated:",{literals:o,settings:i}),xe(()=>{let c=new CustomEvent(We,{bubbles:!0,cancelable:!1,detail:this});this.dispatchEvent(c)})}connectedCallback(){this.readyPromise||(this.readyPromise=this.activate())}disconnectedCallback(){this.readyPromise=null}flushWcsCache(){this.flushWcsCache(),this.log.debug("Flushed WCS cache")}refreshOffers(){this.flushWcsCache(),document.querySelectorAll('span[is="inline-price"],a[is="checkout-link"]').forEach(r=>r.requestUpdate(!0)),this.log.debug("Refreshed WCS offers")}refreshFragments(){this.flushWcsCache(),document.querySelectorAll("aem-fragment").forEach(r=>r.refresh()),this.log.debug("Refreshed AEM fragments")}};gr=new WeakSet,Jo=function(){let r={commerce:{env:this.getAttribute("env")}};return["locale","country","language"].forEach(n=>{let i=this.getAttribute(n);i&&(r[n]=i)}),["checkout-workflow-step","force-tax-exclusive","checkout-client-id","allow-override"].forEach(n=>{let i=this.getAttribute(n);if(i!=null){let o=n.replace(/-([a-z])/g,a=>a[1].toUpperCase());r.commerce[o]=i}}),r},p(fr,"instance");window.customElements.get(Wn)||window.customElements.define(Wn,fr);var xr=window,br=xr.ShadowRoot&&(xr.ShadyCSS===void 0||xr.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,ea=Symbol(),Qo=new WeakMap,vr=class{constructor(t,r,n){if(this._$cssResult$=!0,n!==ea)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=r}get styleSheet(){let t=this.o,r=this.t;if(br&&t===void 0){let n=r!==void 0&&r.length===1;n&&(t=Qo.get(r)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),n&&Qo.set(r,t))}return t}toString(){return this.cssText}},ta=e=>new vr(typeof e=="string"?e:e+"",void 0,ea);var qn=(e,t)=>{br?e.adoptedStyleSheets=t.map(r=>r instanceof CSSStyleSheet?r:r.styleSheet):t.forEach(r=>{let n=document.createElement("style"),i=xr.litNonce;i!==void 0&&n.setAttribute("nonce",i),n.textContent=r.cssText,e.appendChild(n)})},Ar=br?e=>e:e=>e instanceof CSSStyleSheet?(t=>{let r="";for(let n of t.cssRules)r+=n.cssText;return ta(r)})(e):e;var Zn,Er=window,ra=Er.trustedTypes,fl=ra?ra.emptyScript:"",na=Er.reactiveElementPolyfillSupport,Qn={toAttribute(e,t){switch(t){case Boolean:e=e?fl:null;break;case Object:case Array:e=e==null?e:JSON.stringify(e)}return e},fromAttribute(e,t){let r=e;switch(t){case Boolean:r=e!==null;break;case Number:r=e===null?null:Number(e);break;case Object:case Array:try{r=JSON.parse(e)}catch{r=null}}return r}},ia=(e,t)=>t!==e&&(t==t||e==e),Jn={attribute:!0,type:String,converter:Qn,reflect:!1,hasChanged:ia},ei="finalized",Ie=class extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this._$Eu()}static addInitializer(t){var r;this.finalize(),((r=this.h)!==null&&r!==void 0?r:this.h=[]).push(t)}static get observedAttributes(){this.finalize();let t=[];return this.elementProperties.forEach((r,n)=>{let i=this._$Ep(n,r);i!==void 0&&(this._$Ev.set(i,n),t.push(i))}),t}static createProperty(t,r=Jn){if(r.state&&(r.attribute=!1),this.finalize(),this.elementProperties.set(t,r),!r.noAccessor&&!this.prototype.hasOwnProperty(t)){let n=typeof t=="symbol"?Symbol():"__"+t,i=this.getPropertyDescriptor(t,n,r);i!==void 0&&Object.defineProperty(this.prototype,t,i)}}static getPropertyDescriptor(t,r,n){return{get(){return this[r]},set(i){let o=this[t];this[r]=i,this.requestUpdate(t,o,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||Jn}static finalize(){if(this.hasOwnProperty(ei))return!1;this[ei]=!0;let t=Object.getPrototypeOf(this);if(t.finalize(),t.h!==void 0&&(this.h=[...t.h]),this.elementProperties=new Map(t.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){let r=this.properties,n=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let i of n)this.createProperty(i,r[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){let r=[];if(Array.isArray(t)){let n=new Set(t.flat(1/0).reverse());for(let i of n)r.unshift(Ar(i))}else t!==void 0&&r.push(Ar(t));return r}static _$Ep(t,r){let n=r.attribute;return n===!1?void 0:typeof n=="string"?n:typeof t=="string"?t.toLowerCase():void 0}_$Eu(){var t;this._$E_=new Promise(r=>this.enableUpdating=r),this._$AL=new Map,this._$Eg(),this.requestUpdate(),(t=this.constructor.h)===null||t===void 0||t.forEach(r=>r(this))}addController(t){var r,n;((r=this._$ES)!==null&&r!==void 0?r:this._$ES=[]).push(t),this.renderRoot!==void 0&&this.isConnected&&((n=t.hostConnected)===null||n===void 0||n.call(t))}removeController(t){var r;(r=this._$ES)===null||r===void 0||r.splice(this._$ES.indexOf(t)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach((t,r)=>{this.hasOwnProperty(r)&&(this._$Ei.set(r,this[r]),delete this[r])})}createRenderRoot(){var t;let r=(t=this.shadowRoot)!==null&&t!==void 0?t:this.attachShadow(this.constructor.shadowRootOptions);return qn(r,this.constructor.elementStyles),r}connectedCallback(){var t;this.renderRoot===void 0&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(t=this._$ES)===null||t===void 0||t.forEach(r=>{var n;return(n=r.hostConnected)===null||n===void 0?void 0:n.call(r)})}enableUpdating(t){}disconnectedCallback(){var t;(t=this._$ES)===null||t===void 0||t.forEach(r=>{var n;return(n=r.hostDisconnected)===null||n===void 0?void 0:n.call(r)})}attributeChangedCallback(t,r,n){this._$AK(t,n)}_$EO(t,r,n=Jn){var i;let o=this.constructor._$Ep(t,n);if(o!==void 0&&n.reflect===!0){let a=(((i=n.converter)===null||i===void 0?void 0:i.toAttribute)!==void 0?n.converter:Qn).toAttribute(r,n.type);this._$El=t,a==null?this.removeAttribute(o):this.setAttribute(o,a),this._$El=null}}_$AK(t,r){var n;let i=this.constructor,o=i._$Ev.get(t);if(o!==void 0&&this._$El!==o){let a=i.getPropertyOptions(o),s=typeof a.converter=="function"?{fromAttribute:a.converter}:((n=a.converter)===null||n===void 0?void 0:n.fromAttribute)!==void 0?a.converter:Qn;this._$El=o,this[o]=s.fromAttribute(r,a.type),this._$El=null}}requestUpdate(t,r,n){let i=!0;t!==void 0&&(((n=n||this.constructor.getPropertyOptions(t)).hasChanged||ia)(this[t],r)?(this._$AL.has(t)||this._$AL.set(t,r),n.reflect===!0&&this._$El!==t&&(this._$EC===void 0&&(this._$EC=new Map),this._$EC.set(t,n))):i=!1),!this.isUpdatePending&&i&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(r){Promise.reject(r)}let t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach((i,o)=>this[o]=i),this._$Ei=void 0);let r=!1,n=this._$AL;try{r=this.shouldUpdate(n),r?(this.willUpdate(n),(t=this._$ES)===null||t===void 0||t.forEach(i=>{var o;return(o=i.hostUpdate)===null||o===void 0?void 0:o.call(i)}),this.update(n)):this._$Ek()}catch(i){throw r=!1,this._$Ek(),i}r&&this._$AE(n)}willUpdate(t){}_$AE(t){var r;(r=this._$ES)===null||r===void 0||r.forEach(n=>{var i;return(i=n.hostUpdated)===null||i===void 0?void 0:i.call(n)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(t){return!0}update(t){this._$EC!==void 0&&(this._$EC.forEach((r,n)=>this._$EO(n,this[n],r)),this._$EC=void 0),this._$Ek()}updated(t){}firstUpdated(t){}};Ie[ei]=!0,Ie.elementProperties=new Map,Ie.elementStyles=[],Ie.shadowRootOptions={mode:"open"},na?.({ReactiveElement:Ie}),((Zn=Er.reactiveElementVersions)!==null&&Zn!==void 0?Zn:Er.reactiveElementVersions=[]).push("1.6.3");var ti,Sr=window,Je=Sr.trustedTypes,oa=Je?Je.createPolicy("lit-html",{createHTML:e=>e}):void 0,ni="$lit$",ve=`lit$${(Math.random()+"").slice(9)}$`,ua="?"+ve,gl=`<${ua}>`,Re=document,yr=()=>Re.createComment(""),Ot=e=>e===null||typeof e!="object"&&typeof e!="function",ma=Array.isArray,xl=e=>ma(e)||typeof e?.[Symbol.iterator]=="function",ri=`[ -\f\r]`,kt=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,aa=/-->/g,sa=/>/g,ke=RegExp(`>|${ri}(?:([^\\s"'>=/]+)(${ri}*=${ri}*(?:[^ -\f\r"'\`<>=]|("|')|))|$)`,"g"),ca=/'/g,la=/"/g,pa=/^(?:script|style|textarea|title)$/i,fa=e=>(t,...r)=>({_$litType$:e,strings:t,values:r}),nm=fa(1),im=fa(2),Rt=Symbol.for("lit-noChange"),U=Symbol.for("lit-nothing"),ha=new WeakMap,Oe=Re.createTreeWalker(Re,129,null,!1);function ga(e,t){if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return oa!==void 0?oa.createHTML(t):t}var vl=(e,t)=>{let r=e.length-1,n=[],i,o=t===2?"":"",a=kt;for(let s=0;s"?(a=i??kt,d=-1):h[1]===void 0?d=-2:(d=a.lastIndex-h[2].length,l=h[1],a=h[3]===void 0?ke:h[3]==='"'?la:ca):a===la||a===ca?a=ke:a===aa||a===sa?a=kt:(a=ke,i=void 0);let m=a===ke&&e[s+1].startsWith("/>")?" ":"";o+=a===kt?c+gl:d>=0?(n.push(l),c.slice(0,d)+ni+c.slice(d)+ve+m):c+ve+(d===-2?(n.push(void 0),s):m)}return[ga(e,o+(e[r]||"")+(t===2?"":"")),n]},Vt=class e{constructor({strings:t,_$litType$:r},n){let i;this.parts=[];let o=0,a=0,s=t.length-1,c=this.parts,[l,h]=vl(t,r);if(this.el=e.createElement(l,n),Oe.currentNode=this.el.content,r===2){let d=this.el.content,u=d.firstChild;u.remove(),d.append(...u.childNodes)}for(;(i=Oe.nextNode())!==null&&c.length0){i.textContent=Je?Je.emptyScript:"";for(let m=0;m2||n[0]!==""||n[1]!==""?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=U}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,r=this,n,i){let o=this.strings,a=!1;if(o===void 0)t=Qe(this,t,r,0),a=!Ot(t)||t!==this._$AH&&t!==Rt,a&&(this._$AH=t);else{let s=t,c,l;for(t=o[0],c=0;cnew $t(typeof e=="string"?e:e+"",void 0,li),w=(e,...t)=>{let r=e.length===1?e[0]:t.reduce((n,i,o)=>n+(a=>{if(a._$cssResult$===!0)return a.cssText;if(typeof a=="number")return a;throw Error("Value passed to 'css' function must be a 'css' function result: "+a+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+e[o+1],e[0]);return new $t(r,e,li)},hi=(e,t)=>{_r?e.adoptedStyleSheets=t.map(r=>r instanceof CSSStyleSheet?r:r.styleSheet):t.forEach(r=>{let n=document.createElement("style"),i=Lr.litNonce;i!==void 0&&n.setAttribute("nonce",i),n.textContent=r.cssText,e.appendChild(n)})},wr=_r?e=>e:e=>e instanceof CSSStyleSheet?(t=>{let r="";for(let n of t.cssRules)r+=n.cssText;return be(r)})(e):e;var di,Pr=window,va=Pr.trustedTypes,Al=va?va.emptyScript:"",ba=Pr.reactiveElementPolyfillSupport,mi={toAttribute(e,t){switch(t){case Boolean:e=e?Al:null;break;case Object:case Array:e=e==null?e:JSON.stringify(e)}return e},fromAttribute(e,t){let r=e;switch(t){case Boolean:r=e!==null;break;case Number:r=e===null?null:Number(e);break;case Object:case Array:try{r=JSON.parse(e)}catch{r=null}}return r}},Aa=(e,t)=>t!==e&&(t==t||e==e),ui={attribute:!0,type:String,converter:mi,reflect:!1,hasChanged:Aa},pi="finalized",le=class extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this._$Eu()}static addInitializer(t){var r;this.finalize(),((r=this.h)!==null&&r!==void 0?r:this.h=[]).push(t)}static get observedAttributes(){this.finalize();let t=[];return this.elementProperties.forEach((r,n)=>{let i=this._$Ep(n,r);i!==void 0&&(this._$Ev.set(i,n),t.push(i))}),t}static createProperty(t,r=ui){if(r.state&&(r.attribute=!1),this.finalize(),this.elementProperties.set(t,r),!r.noAccessor&&!this.prototype.hasOwnProperty(t)){let n=typeof t=="symbol"?Symbol():"__"+t,i=this.getPropertyDescriptor(t,n,r);i!==void 0&&Object.defineProperty(this.prototype,t,i)}}static getPropertyDescriptor(t,r,n){return{get(){return this[r]},set(i){let o=this[t];this[r]=i,this.requestUpdate(t,o,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||ui}static finalize(){if(this.hasOwnProperty(pi))return!1;this[pi]=!0;let t=Object.getPrototypeOf(this);if(t.finalize(),t.h!==void 0&&(this.h=[...t.h]),this.elementProperties=new Map(t.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){let r=this.properties,n=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let i of n)this.createProperty(i,r[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){let r=[];if(Array.isArray(t)){let n=new Set(t.flat(1/0).reverse());for(let i of n)r.unshift(wr(i))}else t!==void 0&&r.push(wr(t));return r}static _$Ep(t,r){let n=r.attribute;return n===!1?void 0:typeof n=="string"?n:typeof t=="string"?t.toLowerCase():void 0}_$Eu(){var t;this._$E_=new Promise(r=>this.enableUpdating=r),this._$AL=new Map,this._$Eg(),this.requestUpdate(),(t=this.constructor.h)===null||t===void 0||t.forEach(r=>r(this))}addController(t){var r,n;((r=this._$ES)!==null&&r!==void 0?r:this._$ES=[]).push(t),this.renderRoot!==void 0&&this.isConnected&&((n=t.hostConnected)===null||n===void 0||n.call(t))}removeController(t){var r;(r=this._$ES)===null||r===void 0||r.splice(this._$ES.indexOf(t)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach((t,r)=>{this.hasOwnProperty(r)&&(this._$Ei.set(r,this[r]),delete this[r])})}createRenderRoot(){var t;let r=(t=this.shadowRoot)!==null&&t!==void 0?t:this.attachShadow(this.constructor.shadowRootOptions);return hi(r,this.constructor.elementStyles),r}connectedCallback(){var t;this.renderRoot===void 0&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(t=this._$ES)===null||t===void 0||t.forEach(r=>{var n;return(n=r.hostConnected)===null||n===void 0?void 0:n.call(r)})}enableUpdating(t){}disconnectedCallback(){var t;(t=this._$ES)===null||t===void 0||t.forEach(r=>{var n;return(n=r.hostDisconnected)===null||n===void 0?void 0:n.call(r)})}attributeChangedCallback(t,r,n){this._$AK(t,n)}_$EO(t,r,n=ui){var i;let o=this.constructor._$Ep(t,n);if(o!==void 0&&n.reflect===!0){let a=(((i=n.converter)===null||i===void 0?void 0:i.toAttribute)!==void 0?n.converter:mi).toAttribute(r,n.type);this._$El=t,a==null?this.removeAttribute(o):this.setAttribute(o,a),this._$El=null}}_$AK(t,r){var n;let i=this.constructor,o=i._$Ev.get(t);if(o!==void 0&&this._$El!==o){let a=i.getPropertyOptions(o),s=typeof a.converter=="function"?{fromAttribute:a.converter}:((n=a.converter)===null||n===void 0?void 0:n.fromAttribute)!==void 0?a.converter:mi;this._$El=o,this[o]=s.fromAttribute(r,a.type),this._$El=null}}requestUpdate(t,r,n){let i=!0;t!==void 0&&(((n=n||this.constructor.getPropertyOptions(t)).hasChanged||Aa)(this[t],r)?(this._$AL.has(t)||this._$AL.set(t,r),n.reflect===!0&&this._$El!==t&&(this._$EC===void 0&&(this._$EC=new Map),this._$EC.set(t,n))):i=!1),!this.isUpdatePending&&i&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(r){Promise.reject(r)}let t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach((i,o)=>this[o]=i),this._$Ei=void 0);let r=!1,n=this._$AL;try{r=this.shouldUpdate(n),r?(this.willUpdate(n),(t=this._$ES)===null||t===void 0||t.forEach(i=>{var o;return(o=i.hostUpdate)===null||o===void 0?void 0:o.call(i)}),this.update(n)):this._$Ek()}catch(i){throw r=!1,this._$Ek(),i}r&&this._$AE(n)}willUpdate(t){}_$AE(t){var r;(r=this._$ES)===null||r===void 0||r.forEach(n=>{var i;return(i=n.hostUpdated)===null||i===void 0?void 0:i.call(n)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(t){return!0}update(t){this._$EC!==void 0&&(this._$EC.forEach((r,n)=>this._$EO(n,this[n],r)),this._$EC=void 0),this._$Ek()}updated(t){}firstUpdated(t){}};le[pi]=!0,le.elementProperties=new Map,le.elementStyles=[],le.shadowRootOptions={mode:"open"},ba?.({ReactiveElement:le}),((di=Pr.reactiveElementVersions)!==null&&di!==void 0?di:Pr.reactiveElementVersions=[]).push("1.6.3");var fi,Cr=window,tt=Cr.trustedTypes,Ea=tt?tt.createPolicy("lit-html",{createHTML:e=>e}):void 0,xi="$lit$",Ae=`lit$${(Math.random()+"").slice(9)}$`,Pa="?"+Ae,El=`<${Pa}>`,Me=document,Ut=()=>Me.createComment(""),Dt=e=>e===null||typeof e!="object"&&typeof e!="function",Ca=Array.isArray,Sl=e=>Ca(e)||typeof e?.[Symbol.iterator]=="function",gi=`[ -\f\r]`,Mt=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Sa=/-->/g,ya=/>/g,Ve=RegExp(`>|${gi}(?:([^\\s"'>=/]+)(${gi}*=${gi}*(?:[^ -\f\r"'\`<>=]|("|')|))|$)`,"g"),Ta=/'/g,La=/"/g,Na=/^(?:script|style|textarea|title)$/i,Ia=e=>(t,...r)=>({_$litType$:e,strings:t,values:r}),g=Ia(1),hm=Ia(2),Ue=Symbol.for("lit-noChange"),D=Symbol.for("lit-nothing"),_a=new WeakMap,$e=Me.createTreeWalker(Me,129,null,!1);function ka(e,t){if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return Ea!==void 0?Ea.createHTML(t):t}var yl=(e,t)=>{let r=e.length-1,n=[],i,o=t===2?"":"",a=Mt;for(let s=0;s"?(a=i??Mt,d=-1):h[1]===void 0?d=-2:(d=a.lastIndex-h[2].length,l=h[1],a=h[3]===void 0?Ve:h[3]==='"'?La:Ta):a===La||a===Ta?a=Ve:a===Sa||a===ya?a=Mt:(a=Ve,i=void 0);let m=a===Ve&&e[s+1].startsWith("/>")?" ":"";o+=a===Mt?c+El:d>=0?(n.push(l),c.slice(0,d)+xi+c.slice(d)+Ae+m):c+Ae+(d===-2?(n.push(void 0),s):m)}return[ka(e,o+(e[r]||"")+(t===2?"":"")),n]},Gt=class e{constructor({strings:t,_$litType$:r},n){let i;this.parts=[];let o=0,a=0,s=t.length-1,c=this.parts,[l,h]=yl(t,r);if(this.el=e.createElement(l,n),$e.currentNode=this.el.content,r===2){let d=this.el.content,u=d.firstChild;u.remove(),d.append(...u.childNodes)}for(;(i=$e.nextNode())!==null&&c.length0){i.textContent=tt?tt.emptyScript:"";for(let m=0;m2||n[0]!==""||n[1]!==""?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=D}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,r=this,n,i){let o=this.strings,a=!1;if(o===void 0)t=rt(this,t,r,0),a=!Dt(t)||t!==this._$AH&&t!==Ue,a&&(this._$AH=t);else{let s=t,c,l;for(t=o[0],c=0;c{var n,i;let o=(n=r?.renderBefore)!==null&&n!==void 0?n:t,a=o._$litPart$;if(a===void 0){let s=(i=r?.renderBefore)!==null&&i!==void 0?i:null;o._$litPart$=a=new Ht(t.insertBefore(Ut(),s),s,void 0,r??{})}return a._$AI(e),a};var yi,Ti;var ie=class extends le{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var t,r;let n=super.createRenderRoot();return(t=(r=this.renderOptions).renderBefore)!==null&&t!==void 0||(r.renderBefore=n.firstChild),n}update(t){let r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=Oa(r,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),(t=this._$Do)===null||t===void 0||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),(t=this._$Do)===null||t===void 0||t.setConnected(!1)}render(){return Ue}};ie.finalized=!0,ie._$litElement$=!0,(yi=globalThis.litElementHydrateSupport)===null||yi===void 0||yi.call(globalThis,{LitElement:ie});var Ra=globalThis.litElementPolyfillSupport;Ra?.({LitElement:ie});((Ti=globalThis.litElementVersions)!==null&&Ti!==void 0?Ti:globalThis.litElementVersions=[]).push("3.3.3");var Ee="(max-width: 767px)",Nr="(max-width: 1199px)",R="(min-width: 768px)",I="(min-width: 1200px)",G="(min-width: 1600px)";var Va=w` - :host { - position: relative; - display: flex; - flex-direction: column; - text-align: start; - background-color: var(--merch-card-background-color); - grid-template-columns: repeat(auto-fit, minmax(300px, max-content)); - background-color: var(--merch-card-background-color); - font-family: var(--merch-body-font-family, 'Adobe Clean'); - border-radius: var(--consonant-merch-spacing-xs); - border: 1px solid var(--spectrum-gray-200, var(--consonant-merch-card-border-color)); - box-sizing: border-box; - } - - :host(.placeholder) { - visibility: hidden; - } - - :host([aria-selected]) { - outline: none; - box-sizing: border-box; - box-shadow: inset 0 0 0 2px var(--color-accent); - } - - .invisible { - visibility: hidden; - } - - :host(:hover) .invisible, - :host(:active) .invisible, - :host(:focus) .invisible { - visibility: visible; - background-image: var(--ellipsis-icon); - cursor: pointer; - } - - .action-menu.always-visible { - visibility: visible; - background-image: var(--ellipsis-icon); - cursor: pointer; - } - - .top-section { - display: flex; - justify-content: flex-start; - align-items: flex-start; - gap: 16px; - } - - .top-section.badge { - min-height: 32px; - } - - .body { - flex: 1; - display: flex; - flex-direction: column; - justify-content: flex-start; - height: 100%; - gap: var(--consonant-merch-spacing-xxs); - padding: var(--consonant-merch-spacing-xs); - } - - footer { - display: flex; - justify-content: flex-end; - box-sizing: border-box; - align-items: flex-end; - width: 100%; - flex-flow: wrap; - gap: var(--consonant-merch-spacing-xs); - - padding: var(--consonant-merch-spacing-xs); - } - - hr { - background-color: var(--merch-color-grey-200); - border: none; - height: 1px; - width: auto; - margin-top: 0; - margin-bottom: 0; - margin-left: var(--consonant-merch-spacing-xs); - margin-right: var(--consonant-merch-spacing-xs); - } - - div[class$='-badge'] { - position: absolute; - top: 16px; - right: 0; - font-size: var(--type-heading-xxs-size); - font-weight: 500; - max-width: 180px; - line-height: 16px; - text-align: center; - padding: 8px 11px; - border-radius: 5px 0 0 5px; - } - - div[class$='-badge']:dir(rtl) { - left: 0; - right: initial; - padding: 8px 11px; - border-radius: 0 5px 5px 0; - } - - .detail-bg-container { - right: 0; - padding: var(--consonant-merch-spacing-xs); - border-radius: 5px; - font-size: var(--consonant-merch-card-body-font-size); - margin: var(--consonant-merch-spacing-xs); - } - - .action-menu { - display: flex; - width: 32px; - height: 32px; - position: absolute; - top: 16px; - right: 16px; - background-color: #f6f6f6; - background-repeat: no-repeat; - background-position: center; - background-size: 16px 16px; - font-size: 0; - } - .hidden { - visibility: hidden; - } - - #stock-checkbox, - .secure-transaction-label { - font-size: var(--consonant-merch-card-body-xxs-font-size); - line-height: 1.3; - color: var(--merch-color-grey-600); - } - - #stock-checkbox { - display: inline-flex; - align-items: center; - cursor: pointer; - gap: 10px; /*same as spectrum */ - } - - #stock-checkbox > input { - display: none; - } - - #stock-checkbox > span { - display: inline-block; - box-sizing: border-box; - border: 2px solid rgb(117, 117, 117); - border-radius: 2px; - width: 14px; - height: 14px; - } - - #stock-checkbox > input:checked + span { - background: var(--checkmark-icon) no-repeat var(--color-accent); - border-color: var(--color-accent); - } - - .secure-transaction-label { - white-space: nowrap; - display: inline-flex; - gap: var(--consonant-merch-spacing-xxs); - align-items: center; - flex: 1; - line-height: normal; - align-self: center; - } - - .secure-transaction-label::before { - display: inline-block; - content: ''; - width: 12px; - height: 15px; - background: var(--secure-icon) no-repeat; - background-position: center; - background-size: contain; - } - - .checkbox-container { - display: flex; - align-items: center; - gap: var(--consonant-merch-spacing-xxs); - } - - .checkbox-container input[type='checkbox']:checked + .checkmark { - background-color: var(--color-accent); - background-image: var(--checkmark-icon); - border-color: var(--color-accent); - } - - .checkbox-container input[type='checkbox'] { - display: none; - } - - .checkbox-container .checkmark { - position: relative; - display: inline-block; - width: 12px; - height: 12px; - border: 2px solid #757575; - background: #fff; - border-radius: 2px; - cursor: pointer; - margin-top: 2px; - } - - slot[name='icons'] { - display: flex; - gap: 8px; - } -`,$a=()=>[w` - /* Tablet */ - @media screen and ${be(R)} { - :host([size='wide']), - :host([size='super-wide']) { - width: 100%; - grid-column: 1 / -1; - } - } - - /* Laptop */ - @media screen and ${be(I)} { - :host([size='wide']) { - grid-column: span 2; - } - `];var it,zt=class zt{constructor(t){p(this,"card");j(this,it);this.card=t,this.insertVariantStyle()}getContainer(){return fe(this,it,M(this,it)??this.card.closest('[class*="-merch-cards"]')??this.card.parentElement),M(this,it)}insertVariantStyle(){if(!zt.styleMap[this.card.variant]){zt.styleMap[this.card.variant]=!0;let t=document.createElement("style");t.innerHTML=this.getGlobalCSS(),document.head.appendChild(t)}}updateCardElementMinHeight(t,r){if(!t)return;let n=`--consonant-merch-card-${this.card.variant}-${r}-height`,i=Math.max(0,parseInt(window.getComputedStyle(t).height)||0),o=parseInt(this.getContainer().style.getPropertyValue(n))||0;i>o&&this.getContainer().style.setProperty(n,`${i}px`)}get badge(){let t;if(!(!this.card.badgeBackgroundColor||!this.card.badgeColor||!this.card.badgeText))return this.evergreen&&(t=`border: 1px solid ${this.card.badgeBackgroundColor}; border-right: none;`),g` -
      - ${this.card.badgeText} -
      - `}get cardImage(){return g`
      - - ${this.badge} -
      `}getGlobalCSS(){return""}get theme(){return document.querySelector("sp-theme")}get evergreen(){return this.card.classList.contains("intro-pricing")}get promoBottom(){return this.card.classList.contains("promo-bottom")}get headingSelector(){return'[slot="heading-xs"]'}get stripStyle(){if(this.card.backgroundImage){let t=new Image;return t.src=this.card.backgroundImage,t.onload=()=>{t.width>8?this.card.classList.add("wide-strip"):t.width===8&&this.card.classList.add("thin-strip")},` - background: url("${this.card.backgroundImage}"); - background-size: auto 100%; - background-repeat: no-repeat; - background-position: ${this.card.theme.dir==="ltr"?"left":"right"}; - `}return""}get secureLabelFooter(){let t=this.card.secureLabel?g`${this.card.secureLabel}`:"";return g`
      ${t}
      `}async adjustTitleWidth(){let t=this.card.getBoundingClientRect().width,r=this.card.badgeElement?.getBoundingClientRect().width||0;t===0||r===0||this.card.style.setProperty("--consonant-merch-card-heading-xs-max-width",`${Math.round(t-r-16)}px`)}postCardUpdateHook(){}connectedCallbackHook(){}disconnectedCallbackHook(){}renderLayout(){}get aemFragmentMapping(){}};it=new WeakMap,p(zt,"styleMap",{});var P=zt;function he(e,t={},r){let n=document.createElement(e);r instanceof HTMLElement?n.appendChild(r):n.innerHTML=r;for(let[i,o]of Object.entries(t))n.setAttribute(i,o);return n}function Ir(){return window.matchMedia("(max-width: 767px)").matches}function Ma(){return window.matchMedia("(max-width: 1024px)").matches}var Ua="merch-offer-select:ready",Da="merch-card:ready",Ga="merch-card:action-menu-toggle";var Li="merch-storage:change",_i="merch-quantity-selector:change";var ot="aem:load",at="aem:error",Ha="mas:ready",za="mas:error";var Fa=` -:root { - --consonant-merch-card-catalog-width: 276px; - --consonant-merch-card-catalog-icon-size: 40px; -} -.one-merch-card.catalog, -.two-merch-cards.catalog, -.three-merch-cards.catalog, -.four-merch-cards.catalog { - grid-template-columns: var(--consonant-merch-card-catalog-width); -} - -@media screen and ${R} { - :root { - --consonant-merch-card-catalog-width: 302px; - } - - .two-merch-cards.catalog, - .three-merch-cards.catalog, - .four-merch-cards.catalog { - grid-template-columns: repeat(2, var(--consonant-merch-card-catalog-width)); - } -} - -@media screen and ${I} { - :root { - --consonant-merch-card-catalog-width: 276px; - } - - .three-merch-cards.catalog, - .four-merch-cards.catalog { - grid-template-columns: repeat(3, var(--consonant-merch-card-catalog-width)); - } -} - -@media screen and ${G} { - .four-merch-cards.catalog { - grid-template-columns: repeat(4, var(--consonant-merch-card-catalog-width)); - } -} - -merch-card[variant="catalog"] [slot="action-menu-content"] { - background-color: #000; - color: var(--color-white, #fff); - font-size: var(--consonant-merch-card-body-xs-font-size); - width: fit-content; - padding: var(--consonant-merch-spacing-xs); - border-radius: var(--consonant-merch-spacing-xxxs); - position: absolute; - top: 55px; - right: 15px; - line-height: var(--consonant-merch-card-body-line-height); -} - -merch-card[variant="catalog"] [slot="action-menu-content"] ul { - padding-left: 0; - padding-bottom: var(--consonant-merch-spacing-xss); - margin-top: 0; - margin-bottom: 0; - list-style-position: inside; - list-style-type: '\u2022 '; -} - -merch-card[variant="catalog"] [slot="action-menu-content"] ul li { - padding-left: 0; - line-height: var(--consonant-merch-card-body-line-height); -} - -merch-card[variant="catalog"] [slot="action-menu-content"] ::marker { - margin-right: 0; -} - -merch-card[variant="catalog"] [slot="action-menu-content"] p { - color: var(--color-white, #fff); -} - -merch-card[variant="catalog"] [slot="action-menu-content"] a { - color: var(--merch-card-background-color); - text-decoration: underline; -} - -merch-card[variant="catalog"] .payment-details { - font-size: var(--consonant-merch-card-body-font-size); - font-style: italic; - font-weight: 400; - line-height: var(--consonant-merch-card-body-line-height); -}`;var Ll={title:{tag:"h3",slot:"heading-xs"},prices:{tag:"h3",slot:"heading-xs"},description:{tag:"div",slot:"body-xs"},ctas:{slot:"footer",size:"m"},allowedSizes:["wide","super-wide"]},st=class extends P{constructor(r){super(r);p(this,"dispatchActionMenuToggle",()=>{this.card.dispatchEvent(new CustomEvent(Ga,{bubbles:!0,composed:!0,detail:{card:this.card.name,type:"action-menu"}}))});p(this,"toggleActionMenu",r=>{let n=this.card.shadowRoot.querySelector('slot[name="action-menu-content"]');!n||!r||r.type!=="click"&&r.code!=="Space"&&r.code!=="Enter"||(r.preventDefault(),n.classList.toggle("hidden"),n.classList.contains("hidden")||this.dispatchActionMenuToggle())});p(this,"toggleActionMenuFromCard",r=>{let n=r?.type==="mouseleave"?!0:void 0,i=this.card.shadowRoot,o=i.querySelector(".action-menu");this.card.blur(),o?.classList.remove("always-visible");let a=i.querySelector('slot[name="action-menu-content"]');a&&(n||this.dispatchActionMenuToggle(),a.classList.toggle("hidden",n))});p(this,"hideActionMenu",r=>{this.card.shadowRoot.querySelector('slot[name="action-menu-content"]')?.classList.add("hidden")});p(this,"focusEventHandler",r=>{let n=this.card.shadowRoot.querySelector(".action-menu");n&&(n.classList.add("always-visible"),(r.relatedTarget?.nodeName==="MERCH-CARD-COLLECTION"||r.relatedTarget?.nodeName==="MERCH-CARD"&&r.target.nodeName!=="MERCH-ICON")&&n.classList.remove("always-visible"))})}get aemFragmentMapping(){return Ll}renderLayout(){return g`
      -
      - ${this.badge} -
      Action Menu
      -
      - ${this.card.actionMenuContent} - - - - - ${this.promoBottom?"":g``} - - ${this.promoBottom?g``:""} -
      - ${this.secureLabelFooter} - `}getGlobalCSS(){return Fa}connectedCallbackHook(){this.card.addEventListener("mouseleave",this.toggleActionMenuFromCard),this.card.addEventListener("focusout",this.focusEventHandler)}disconnectedCallbackHook(){this.card.removeEventListener("mouseleave",this.toggleActionMenuFromCard),this.card.removeEventListener("focusout",this.focusEventHandler)}};p(st,"variantStyle",w` - :host([variant='catalog']) { - min-height: 330px; - width: var(--consonant-merch-card-catalog-width); - } - - .body .catalog-badge { - display: flex; - height: fit-content; - flex-direction: column; - width: fit-content; - max-width: 140px; - border-radius: 5px; - position: relative; - top: 0; - margin-left: var(--consonant-merch-spacing-xxs); - box-sizing: border-box; - } - `);var Ka=` -:root { - --consonant-merch-card-ccd-action-width: 276px; - --consonant-merch-card-ccd-action-min-height: 320px; -} - -.one-merch-card.ccd-action, -.two-merch-cards.ccd-action, -.three-merch-cards.ccd-action, -.four-merch-cards.ccd-action { - grid-template-columns: var(--consonant-merch-card-ccd-action-width); -} - -merch-card[variant="ccd-action"] .price-strikethrough { - font-size: 18px; -} - -@media screen and ${R} { - .two-merch-cards.ccd-action, - .three-merch-cards.ccd-action, - .four-merch-cards.ccd-action { - grid-template-columns: repeat(2, var(--consonant-merch-card-ccd-action-width)); - } -} - -@media screen and ${I} { - .three-merch-cards.ccd-action, - .four-merch-cards.ccd-action { - grid-template-columns: repeat(3, var(--consonant-merch-card-ccd-action-width)); - } -} - -@media screen and ${G} { - .four-merch-cards.ccd-action { - grid-template-columns: repeat(4, var(--consonant-merch-card-ccd-action-width)); - } -} -`;var _l={title:{tag:"h3",slot:"heading-xs"},prices:{tag:"h3",slot:"heading-xs"},description:{tag:"div",slot:"body-xs"},ctas:{slot:"footer",size:"l"}},ct=class extends P{constructor(t){super(t)}getGlobalCSS(){return Ka}get aemFragmentMapping(){return _l}renderLayout(){return g`
      - ${this.badge} - - - ${this.promoBottom?g``:g``} -
      - -
      `}};p(ct,"variantStyle",w` - :host([variant='ccd-action']:not([size])) { - width: var(--consonant-merch-card-ccd-action-width); - } - `);var Ba=` -:root { - --consonant-merch-card-image-width: 300px; -} - -.one-merch-card.image, -.two-merch-cards.image, -.three-merch-cards.image, -.four-merch-cards.image { - grid-template-columns: var(--consonant-merch-card-image-width); -} - -@media screen and ${R} { - .two-merch-cards.image, - .three-merch-cards.image, - .four-merch-cards.image { - grid-template-columns: repeat(2, var(--consonant-merch-card-image-width)); - } -} - -@media screen and ${I} { - :root { - --consonant-merch-card-image-width: 378px; - } - - .three-merch-cards.image, - .four-merch-cards.image { - grid-template-columns: repeat(3, var(--consonant-merch-card-image-width)); - } -} - -@media screen and ${G} { - .four-merch-cards.image { - grid-template-columns: repeat(4, var(--consonant-merch-card-image-width)); - } -} -`;var kr=class extends P{constructor(t){super(t)}getGlobalCSS(){return Ba}renderLayout(){return g`${this.cardImage} -
      - - - - ${this.promoBottom?g``:g``} -
      - ${this.evergreen?g` -
      - -
      - `:g` -
      - ${this.secureLabelFooter} - `}`}};var ja=` -:root { - --consonant-merch-card-inline-heading-width: 300px; -} - -.one-merch-card.inline-heading, -.two-merch-cards.inline-heading, -.three-merch-cards.inline-heading, -.four-merch-cards.inline-heading { - grid-template-columns: var(--consonant-merch-card-inline-heading-width); -} - -@media screen and ${R} { - .two-merch-cards.inline-heading, - .three-merch-cards.inline-heading, - .four-merch-cards.inline-heading { - grid-template-columns: repeat(2, var(--consonant-merch-card-inline-heading-width)); - } -} - -@media screen and ${I} { - :root { - --consonant-merch-card-inline-heading-width: 378px; - } - - .three-merch-cards.inline-heading, - .four-merch-cards.inline-heading { - grid-template-columns: repeat(3, var(--consonant-merch-card-inline-heading-width)); - } -} - -@media screen and ${G} { - .four-merch-cards.inline-heading { - grid-template-columns: repeat(4, var(--consonant-merch-card-inline-heading-width)); - } -} -`;var Or=class extends P{constructor(t){super(t)}getGlobalCSS(){return ja}renderLayout(){return g` ${this.badge} -
      -
      - - -
      - -
      - ${this.card.customHr?"":g`
      `} ${this.secureLabelFooter}`}};var Ya=` - :root { - --consonant-merch-card-mini-compare-chart-icon-size: 32px; - --consonant-merch-card-mini-compare-mobile-cta-font-size: 15px; - --consonant-merch-card-mini-compare-mobile-cta-width: 75px; - --consonant-merch-card-mini-compare-badge-mobile-max-width: 50px; - } - - merch-card[variant="mini-compare-chart"] [slot="heading-m"] { - padding: 0 var(--consonant-merch-spacing-s) 0; - } - - merch-card[variant="mini-compare-chart"] [slot="body-m"] { - padding: var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-s); - } - - merch-card[variant="mini-compare-chart"] [is="inline-price"] { - display: inline-block; - min-height: 30px; - min-width: 1px; - } - - merch-card[variant="mini-compare-chart"] [slot='callout-content'] { - padding: var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-s) 0px; - } - - merch-card[variant="mini-compare-chart"] [slot='callout-content'] [is="inline-price"] { - min-height: unset; - } - - merch-card[variant="mini-compare-chart"] [slot="price-commitment"] { - font-size: var(--consonant-merch-card-body-xs-font-size); - padding: 0 var(--consonant-merch-spacing-s); - } - - merch-card[variant="mini-compare-chart"] [slot="price-commitment"] a { - display: inline-block; - height: 27px; - } - - merch-card[variant="mini-compare-chart"] [slot="offers"] { - font-size: var(--consonant-merch-card-body-xs-font-size); - } - - merch-card[variant="mini-compare-chart"] [slot="body-xxs"] { - font-size: var(--consonant-merch-card-body-xs-font-size); - padding: var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-s) 0; - } - - merch-card[variant="mini-compare-chart"] [slot="promo-text"] { - font-size: var(--consonant-merch-card-body-m-font-size); - padding: var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-s) 0; - } - - merch-card[variant="mini-compare-chart"] [slot="promo-text"] a { - text-decoration: underline; - } - - merch-card[variant="mini-compare-chart"] .footer-row-icon { - display: flex; - place-items: center; - } - - merch-card[variant="mini-compare-chart"] .footer-row-icon img { - max-width: initial; - width: var(--consonant-merch-card-mini-compare-chart-icon-size); - height: var(--consonant-merch-card-mini-compare-chart-icon-size); - } - - merch-card[variant="mini-compare-chart"] .footer-row-cell { - border-top: 1px solid var(--consonant-merch-card-border-color); - display: flex; - gap: var(--consonant-merch-spacing-xs); - justify-content: start; - place-items: center; - padding: var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-s); - margin-block: 0px; - } - - merch-card[variant="mini-compare-chart"] .footer-row-cell-description { - font-size: var(--consonant-merch-card-body-s-font-size); - line-height: var(--consonant-merch-card-body-s-line-height); - } - - merch-card[variant="mini-compare-chart"] .footer-row-cell-description p { - color: var(--merch-color-grey-80); - vertical-align: bottom; - } - - merch-card[variant="mini-compare-chart"] .footer-row-cell-description a { - color: var(--color-accent); - text-decoration: solid; - } - -.one-merch-card.mini-compare-chart { - grid-template-columns: var(--consonant-merch-card-mini-compare-chart-wide-width); - gap: var(--consonant-merch-spacing-xs); -} - -.two-merch-cards.mini-compare-chart, -.three-merch-cards.mini-compare-chart, -.four-merch-cards.mini-compare-chart { - grid-template-columns: repeat(2, var(--consonant-merch-card-mini-compare-chart-width)); - gap: var(--consonant-merch-spacing-xs); -} - -/* mini compare mobile */ -@media screen and ${Ee} { - :root { - --consonant-merch-card-mini-compare-chart-width: 302px; - --consonant-merch-card-mini-compare-chart-wide-width: 302px; - } - - .two-merch-cards.mini-compare-chart, - .three-merch-cards.mini-compare-chart, - .four-merch-cards.mini-compare-chart { - grid-template-columns: var(--consonant-merch-card-mini-compare-chart-width); - gap: var(--consonant-merch-spacing-xs); - } - - merch-card[variant="mini-compare-chart"] [slot='heading-m'] { - font-size: var(--consonant-merch-card-body-s-font-size); - line-height: var(--consonant-merch-card-body-s-line-height); - } - - merch-card[variant="mini-compare-chart"] [slot='heading-m-price'] { - font-size: var(--consonant-merch-card-body-s-font-size); - line-height: var(--consonant-merch-card-body-s-line-height); - } - - merch-card[variant="mini-compare-chart"] [slot='body-m'] { - font-size: var(--consonant-merch-card-body-xs-font-size); - line-height: var(--consonant-merch-card-body-xs-line-height); - } - - merch-card[variant="mini-compare-chart"] [slot="promo-text"] { - font-size: var(--consonant-merch-card-body-xs-font-size); - line-height: var(--consonant-merch-card-body-xs-line-height); - } - merch-card[variant="mini-compare-chart"] .footer-row-cell-description { - font-size: var(--consonant-merch-card-body-xs-font-size); - line-height: var(--consonant-merch-card-body-xs-line-height); - } -} - -@media screen and ${Nr} { - .three-merch-cards.mini-compare-chart merch-card [slot="footer"] a, - .four-merch-cards.mini-compare-chart merch-card [slot="footer"] a { - flex: 1; - } - - merch-card[variant="mini-compare-chart"] [slot='heading-m'] { - font-size: var(--consonant-merch-card-body-s-font-size); - line-height: var(--consonant-merch-card-body-s-line-height); - } - - merch-card[variant="mini-compare-chart"] [slot='heading-m-price'] { - font-size: var(--consonant-merch-card-body-s-font-size); - line-height: var(--consonant-merch-card-body-s-line-height); - } - - merch-card[variant="mini-compare-chart"] [slot='body-m'] { - font-size: var(--consonant-merch-card-body-xs-font-size); - line-height: var(--consonant-merch-card-body-xs-line-height); - } - - merch-card[variant="mini-compare-chart"] [slot="promo-text"] { - font-size: var(--consonant-merch-card-body-xs-font-size); - line-height: var(--consonant-merch-card-body-xs-line-height); - } - - merch-card[variant="mini-compare-chart"] .footer-row-cell-description { - font-size: var(--consonant-merch-card-body-xs-font-size); - line-height: var(--consonant-merch-card-body-xs-line-height); - } -} -@media screen and ${R} { - :root { - --consonant-merch-card-mini-compare-chart-width: 302px; - --consonant-merch-card-mini-compare-chart-wide-width: 302px; - } - - .two-merch-cards.mini-compare-chart { - grid-template-columns: repeat(2, minmax(var(--consonant-merch-card-mini-compare-chart-width), var(--consonant-merch-card-mini-compare-chart-wide-width))); - gap: var(--consonant-merch-spacing-m); - } - - .three-merch-cards.mini-compare-chart, - .four-merch-cards.mini-compare-chart { - grid-template-columns: repeat(2, minmax(var(--consonant-merch-card-mini-compare-chart-width), var(--consonant-merch-card-mini-compare-chart-wide-width))); - } -} - -/* desktop */ -@media screen and ${I} { - :root { - --consonant-merch-card-mini-compare-chart-width: 378px; - --consonant-merch-card-mini-compare-chart-wide-width: 484px; - } - .one-merch-card.mini-compare-chart { - grid-template-columns: var(--consonant-merch-card-mini-compare-chart-wide-width); - } - - .two-merch-cards.mini-compare-chart { - grid-template-columns: repeat(2, var(--consonant-merch-card-mini-compare-chart-wide-width)); - gap: var(--consonant-merch-spacing-m); - } - - .three-merch-cards.mini-compare-chart, - .four-merch-cards.mini-compare-chart { - grid-template-columns: repeat(3, var(--consonant-merch-card-mini-compare-chart-width)); - gap: var(--consonant-merch-spacing-m); - } -} - -@media screen and ${G} { - .four-merch-cards.mini-compare-chart { - grid-template-columns: repeat(4, var(--consonant-merch-card-mini-compare-chart-width)); - } -} - -merch-card .footer-row-cell:nth-child(1) { - min-height: var(--consonant-merch-card-footer-row-1-min-height); -} - -merch-card .footer-row-cell:nth-child(2) { - min-height: var(--consonant-merch-card-footer-row-2-min-height); -} - -merch-card .footer-row-cell:nth-child(3) { - min-height: var(--consonant-merch-card-footer-row-3-min-height); -} - -merch-card .footer-row-cell:nth-child(4) { - min-height: var(--consonant-merch-card-footer-row-4-min-height); -} - -merch-card .footer-row-cell:nth-child(5) { - min-height: var(--consonant-merch-card-footer-row-5-min-height); -} - -merch-card .footer-row-cell:nth-child(6) { - min-height: var(--consonant-merch-card-footer-row-6-min-height); -} - -merch-card .footer-row-cell:nth-child(7) { - min-height: var(--consonant-merch-card-footer-row-7-min-height); -} - -merch-card .footer-row-cell:nth-child(8) { - min-height: var(--consonant-merch-card-footer-row-8-min-height); -} -`;var wl=32,lt=class extends P{constructor(r){super(r);p(this,"getRowMinHeightPropertyName",r=>`--consonant-merch-card-footer-row-${r}-min-height`);p(this,"getMiniCompareFooter",()=>{let r=this.card.secureLabel?g` - ${this.card.secureLabel}`:g``;return g`
      ${r}
      `})}getGlobalCSS(){return Ya}adjustMiniCompareBodySlots(){if(this.card.getBoundingClientRect().width<=2)return;this.updateCardElementMinHeight(this.card.shadowRoot.querySelector(".top-section"),"top-section"),["heading-m","body-m","heading-m-price","body-xxs","price-commitment","offers","promo-text","callout-content"].forEach(i=>this.updateCardElementMinHeight(this.card.shadowRoot.querySelector(`slot[name="${i}"]`),i)),this.updateCardElementMinHeight(this.card.shadowRoot.querySelector("footer"),"footer");let n=this.card.shadowRoot.querySelector(".mini-compare-chart-badge");n&&n.textContent!==""&&this.getContainer().style.setProperty("--consonant-merch-card-mini-compare-chart-top-section-mobile-height","32px")}adjustMiniCompareFooterRows(){if(this.card.getBoundingClientRect().width===0)return;[...this.card.querySelector('[slot="footer-rows"]')?.children].forEach((n,i)=>{let o=Math.max(wl,parseFloat(window.getComputedStyle(n).height)||0),a=parseFloat(this.getContainer().style.getPropertyValue(this.getRowMinHeightPropertyName(i+1)))||0;o>a&&this.getContainer().style.setProperty(this.getRowMinHeightPropertyName(i+1),`${o}px`)})}removeEmptyRows(){this.card.querySelectorAll(".footer-row-cell").forEach(n=>{let i=n.querySelector(".footer-row-cell-description");i&&!i.textContent.trim()&&n.remove()})}renderLayout(){return g`
      - ${this.badge} -
      - - - - - - - - - ${this.getMiniCompareFooter()} - `}async postCardUpdateHook(){Ir()?this.removeEmptyRows():(await Promise.all(this.card.prices.map(r=>r.onceSettled())),this.adjustMiniCompareBodySlots(),this.adjustMiniCompareFooterRows())}};p(lt,"variantStyle",w` - :host([variant='mini-compare-chart']) > slot:not([name='icons']) { - display: block; - } - :host([variant='mini-compare-chart']) footer { - min-height: var(--consonant-merch-card-mini-compare-chart-footer-height); - padding: var(--consonant-merch-spacing-xs); - } - - /* mini-compare card */ - :host([variant='mini-compare-chart']) .top-section { - padding-top: var(--consonant-merch-spacing-s); - padding-inline-start: var(--consonant-merch-spacing-s); - height: var(--consonant-merch-card-mini-compare-chart-top-section-height); - } - - @media screen and ${be(Nr)} { - [class*'-merch-cards'] :host([variant='mini-compare-chart']) footer { - flex-direction: column; - align-items: stretch; - text-align: center; - } - } - - @media screen and ${be(I)} { - :host([variant='mini-compare-chart']) footer { - padding: var(--consonant-merch-spacing-xs) - var(--consonant-merch-spacing-s) - var(--consonant-merch-spacing-s) - var(--consonant-merch-spacing-s); - } - } - - :host([variant='mini-compare-chart']) slot[name='footer-rows'] { - flex: 1; - display: flex; - flex-direction: column; - justify-content: end; - } - /* mini-compare card heights for the slots: heading-m, body-m, heading-m-price, price-commitment, offers, promo-text, footer */ - :host([variant='mini-compare-chart']) slot[name='heading-m'] { - min-height: var(--consonant-merch-card-mini-compare-chart-heading-m-height); - } - :host([variant='mini-compare-chart']) slot[name='body-m'] { - min-height: var(--consonant-merch-card-mini-compare-chart-body-m-height); - } - :host([variant='mini-compare-chart']) slot[name='heading-m-price'] { - min-height: var( - --consonant-merch-card-mini-compare-chart-heading-m-price-height - ); - } - :host([variant='mini-compare-chart']) slot[name='body-xxs'] { - min-height: var( - --consonant-merch-card-mini-compare-chart-body-xxs-height - ); - } - :host([variant='mini-compare-chart']) slot[name='price-commitment'] { - min-height: var( - --consonant-merch-card-mini-compare-chart-price-commitment-height - ); - } - :host([variant='mini-compare-chart']) slot[name='offers'] { - min-height: var(--consonant-merch-card-mini-compare-chart-offers-height); - } - :host([variant='mini-compare-chart']) slot[name='promo-text'] { - min-height: var(--consonant-merch-card-mini-compare-chart-promo-text-height); - } - :host([variant='mini-compare-chart']) slot[name='callout-content'] { - min-height: var( - --consonant-merch-card-mini-compare-chart-callout-content-height - ); - } - `);var Xa=` -:root { - --consonant-merch-card-plans-width: 300px; - --consonant-merch-card-plans-icon-size: 40px; -} - -merch-card[variant="plans"] [slot="description"] { - min-height: 84px; -} - -merch-card[variant="plans"] [slot="quantity-select"] { - display: flex; - justify-content: flex-start; - box-sizing: border-box; - width: 100%; - padding: var(--consonant-merch-spacing-xs); -} - -.one-merch-card.plans, -.two-merch-cards.plans, -.three-merch-cards.plans, -.four-merch-cards.plans { - grid-template-columns: var(--consonant-merch-card-plans-width); -} - -/* Tablet */ -@media screen and ${R} { - :root { - --consonant-merch-card-plans-width: 302px; - } - .two-merch-cards.plans, - .three-merch-cards.plans, - .four-merch-cards.plans { - grid-template-columns: repeat(2, var(--consonant-merch-card-plans-width)); - } -} - -/* desktop */ -@media screen and ${I} { - :root { - --consonant-merch-card-plans-width: 276px; - } - .three-merch-cards.plans, - .four-merch-cards.plans { - grid-template-columns: repeat(3, var(--consonant-merch-card-plans-width)); - } -} - -/* Large desktop */ - @media screen and ${G} { - .four-merch-cards.plans { - grid-template-columns: repeat(4, var(--consonant-merch-card-plans-width)); - } -} -`;var ht=class extends P{constructor(t){super(t)}getGlobalCSS(){return Xa}postCardUpdateHook(){this.adjustTitleWidth()}get stockCheckbox(){return this.card.checkboxLabel?g``:""}renderLayout(){return g` ${this.badge} -
      - - - - - ${this.promoBottom?"":g` `} - - ${this.promoBottom?g` `:""} - ${this.stockCheckbox} -
      - - ${this.secureLabelFooter}`}};p(ht,"variantStyle",w` - :host([variant='plans']) { - min-height: 348px; - } - - :host([variant='plans']) ::slotted([slot='heading-xs']) { - max-width: var(--consonant-merch-card-heading-xs-max-width, 100%); - } - `);var Wa=` -:root { - --consonant-merch-card-product-width: 300px; -} - -/* grid style for product */ -.one-merch-card.product, -.two-merch-cards.product, -.three-merch-cards.product, -.four-merch-cards.product { - grid-template-columns: var(--consonant-merch-card-product-width); -} - -/* Tablet */ -@media screen and ${R} { - .two-merch-cards.product, - .three-merch-cards.product, - .four-merch-cards.product { - grid-template-columns: repeat(2, var(--consonant-merch-card-product-width)); - } -} - -/* desktop */ -@media screen and ${I} { - :root { - --consonant-merch-card-product-width: 378px; - } - - .three-merch-cards.product, - .four-merch-cards.product { - grid-template-columns: repeat(3, var(--consonant-merch-card-product-width)); - } -} - -/* Large desktop */ -@media screen and ${G} { - .four-merch-cards.product { - grid-template-columns: repeat(4, var(--consonant-merch-card-product-width)); - } -} -`;var De=class extends P{constructor(t){super(t)}getGlobalCSS(){return Wa}adjustProductBodySlots(){if(this.card.getBoundingClientRect().width===0)return;["heading-xs","body-xxs","body-xs","promo-text","callout-content","body-lower"].forEach(r=>this.updateCardElementMinHeight(this.card.shadowRoot.querySelector(`slot[name="${r}"]`),r))}renderLayout(){return g` ${this.badge} -
      - - - - ${this.promoBottom?"":g``} - - ${this.promoBottom?g``:""} - - -
      - ${this.secureLabelFooter}`}connectedCallbackHook(){super.connectedCallbackHook(),window.addEventListener("resize",this.postCardUpdateHook.bind(this))}postCardUpdateHook(){Ir()||this.adjustProductBodySlots(),this.adjustTitleWidth()}};p(De,"variantStyle",w` - :host([variant='product']) > slot:not([name='icons']) { - display: block; - } - :host([variant='product']) slot[name='body-xs'] { - min-height: var(--consonant-merch-card-product-body-xs-height); - display: block; - } - :host([variant='product']) slot[name='heading-xs'] { - min-height: var(--consonant-merch-card-product-heading-xs-height); - display: block; - } - :host([variant='product']) slot[name='body-xxs'] { - min-height: var(--consonant-merch-card-product-body-xxs-height); - display: block; - } - :host([variant='product']) slot[name='promo-text'] { - min-height: var(--consonant-merch-card-product-promo-text-height); - display: block; - } - :host([variant='product']) slot[name='callout-content'] { - min-height: var(--consonant-merch-card-product-callout-content-height); - display: block; - } - - :host([variant='product']) ::slotted([slot='heading-xs']) { - max-width: var(--consonant-merch-card-heading-xs-max-width, 100%); - } - `);var qa=` -:root { - --consonant-merch-card-segment-width: 378px; -} - -/* grid style for segment */ -.one-merch-card.segment, -.two-merch-cards.segment, -.three-merch-cards.segment, -.four-merch-cards.segment { - grid-template-columns: minmax(276px, var(--consonant-merch-card-segment-width)); -} - -/* Mobile */ -@media screen and ${Ee} { - :root { - --consonant-merch-card-segment-width: 276px; - } -} - -@media screen and ${R} { - :root { - --consonant-merch-card-segment-width: 276px; - } - - .two-merch-cards.segment, - .three-merch-cards.segment, - .four-merch-cards.segment { - grid-template-columns: repeat(2, minmax(276px, var(--consonant-merch-card-segment-width))); - } -} - -/* desktop */ -@media screen and ${I} { - :root { - --consonant-merch-card-segment-width: 302px; - } - - .three-merch-cards.segment { - grid-template-columns: repeat(3, minmax(276px, var(--consonant-merch-card-segment-width))); - } - - .four-merch-cards.segment { - grid-template-columns: repeat(4, minmax(276px, var(--consonant-merch-card-segment-width))); - } -} -`;var dt=class extends P{constructor(t){super(t)}getGlobalCSS(){return qa}postCardUpdateHook(){this.adjustTitleWidth()}renderLayout(){return g` ${this.badge} -
      - - - ${this.promoBottom?"":g``} - - ${this.promoBottom?g``:""} -
      -
      - ${this.secureLabelFooter}`}};p(dt,"variantStyle",w` - :host([variant='segment']) { - min-height: 214px; - } - :host([variant='segment']) ::slotted([slot='heading-xs']) { - max-width: var(--consonant-merch-card-heading-xs-max-width, 100%); - } - `);var Za=` -:root { - --consonant-merch-card-special-offers-width: 378px; -} - -merch-card[variant="special-offers"] span[is="inline-price"][data-template="strikethrough"] { - font-size: var(--consonant-merch-card-body-xs-font-size); -} - -/* grid style for special-offers */ -.one-merch-card.special-offers, -.two-merch-cards.special-offers, -.three-merch-cards.special-offers, -.four-merch-cards.special-offers { - grid-template-columns: minmax(300px, var(--consonant-merch-card-special-offers-width)); -} - -@media screen and ${Ee} { - :root { - --consonant-merch-card-special-offers-width: 302px; - } -} - -@media screen and ${R} { - :root { - --consonant-merch-card-special-offers-width: 302px; - } - - .two-merch-cards.special-offers, - .three-merch-cards.special-offers, - .four-merch-cards.special-offers { - grid-template-columns: repeat(2, minmax(300px, var(--consonant-merch-card-special-offers-width))); - } -} - -/* desktop */ -@media screen and ${I} { - .three-merch-cards.special-offers, - .four-merch-cards.special-offers { - grid-template-columns: repeat(3, minmax(300px, var(--consonant-merch-card-special-offers-width))); - } -} - -@media screen and ${G} { - .four-merch-cards.special-offers { - grid-template-columns: repeat(4, minmax(300px, var(--consonant-merch-card-special-offers-width))); - } -} -`;var Pl={name:{tag:"h4",slot:"detail-m"},title:{tag:"h4",slot:"detail-m"},backgroundImage:{tag:"div",slot:"bg-image"},prices:{tag:"h3",slot:"heading-xs"},description:{tag:"div",slot:"body-xs"},ctas:{slot:"footer",size:"l"}},ut=class extends P{constructor(t){super(t)}getGlobalCSS(){return Za}get headingSelector(){return'[slot="detail-m"]'}get aemFragmentMapping(){return Pl}renderLayout(){return g`${this.cardImage} -
      - - - -
      - ${this.evergreen?g` -
      - -
      - `:g` -
      - ${this.secureLabelFooter} - `} - `}};p(ut,"variantStyle",w` - :host([variant='special-offers']) { - min-height: 439px; - } - - :host([variant='special-offers']) { - width: var(--consonant-merch-card-special-offers-width); - } - - :host([variant='special-offers'].center) { - text-align: center; - } - `);var Ja=` -:root { - --consonant-merch-card-twp-width: 268px; - --consonant-merch-card-twp-mobile-width: 300px; - --consonant-merch-card-twp-mobile-height: 358px; -} - -merch-card[variant="twp"] div[class$='twp-badge'] { - padding: 4px 10px 5px 10px; -} - -merch-card[variant="twp"] [slot="body-xs-top"] { - font-size: var(--consonant-merch-card-body-xs-font-size); - line-height: var(--consonant-merch-card-body-xs-line-height); - color: var(--merch-color-grey-80); -} - -merch-card[variant="twp"] [slot="body-xs"] ul { - padding: 0; - margin: 0; -} - -merch-card[variant="twp"] [slot="body-xs"] ul li { - list-style-type: none; - padding-left: 0; -} - -merch-card[variant="twp"] [slot="body-xs"] ul li::before { - content: '\xB7'; - font-size: 20px; - padding-right: 5px; - font-weight: bold; -} - -merch-card[variant="twp"] [slot="footer"] { - font-size: var(--consonant-merch-card-body-xs-font-size); - line-height: var(--consonant-merch-card-body-xs-line-height); - padding: var(--consonant-merch-spacing-s); - var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-xs); - color: var(--merch-color-grey-80); - display: flex; - flex-flow: wrap; -} - -merch-card[variant='twp'] merch-quantity-select, -merch-card[variant='twp'] merch-offer-select { - display: none; -} - -.one-merch-card.twp, -.two-merch-cards.twp, -.three-merch-cards.twp { - grid-template-columns: var(--consonant-merch-card-image-width); -} - -@media screen and ${Ee} { - :root { - --consonant-merch-card-twp-width: 300px; - } - .one-merch-card.twp, - .two-merch-cards.twp, - .three-merch-cards.twp { - grid-template-columns: repeat(1, var(--consonant-merch-card-twp-mobile-width)); - } -} - -@media screen and ${R} { - :root { - --consonant-merch-card-twp-width: 268px; - } - .one-merch-card.twp, - .two-merch-cards.twp { - grid-template-columns: repeat(2, var(--consonant-merch-card-twp-width)); - } - .three-merch-cards.twp { - grid-template-columns: repeat(3, var(--consonant-merch-card-twp-width)); - } -} - -@media screen and ${I} { - :root { - --consonant-merch-card-twp-width: 268px; - } - .one-merch-card.twp - .two-merch-cards.twp { - grid-template-columns: repeat(2, var(--consonant-merch-card-twp-width)); - } - .three-merch-cards.twp { - grid-template-columns: repeat(3, var(--consonant-merch-card-twp-width)); - } -} - -@media screen and ${G} { - .one-merch-card.twp - .two-merch-cards.twp { - grid-template-columns: repeat(2, var(--consonant-merch-card-twp-width)); - } - .three-merch-cards.twp { - grid-template-columns: repeat(3, var(--consonant-merch-card-twp-width)); - } -} -`;var mt=class extends P{constructor(t){super(t)}getGlobalCSS(){return Ja}renderLayout(){return g`${this.badge} -
      - - - -
      -
      - -
      -
      `}};p(mt,"variantStyle",w` - :host([variant='twp']) { - padding: 4px 10px 5px 10px; - } - .twp-badge { - padding: 4px 10px 5px 10px; - } - - :host([variant='twp']) ::slotted(merch-offer-select) { - display: none; - } - - :host([variant='twp']) .top-section { - flex: 0; - display: flex; - flex-direction: column; - justify-content: flex-start; - height: 100%; - gap: var(--consonant-merch-spacing-xxs); - padding: var(--consonant-merch-spacing-xs) - var(--consonant-merch-spacing-xs) var(--consonant-merch-spacing-xs) - var(--consonant-merch-spacing-xs); - align-items: flex-start; - } - - :host([variant='twp']) .body { - padding: 0 var(--consonant-merch-spacing-xs); - } - - :host([aria-selected]) .twp-badge { - margin-inline-end: 2px; - padding-inline-end: 9px; - } - - :host([variant='twp']) footer { - gap: var(--consonant-merch-spacing-xxs); - flex-direction: column; - align-self: flex-start; - } - `);var Qa=` -:root { - --merch-card-ccd-suggested-width: 305px; - --merch-card-ccd-suggested-height: 205px; - --merch-card-ccd-suggested-background-img-size: 119px; -} - -sp-theme[color='light'] merch-card[variant="ccd-suggested"] { - background-color: var(--ccd-gray-100-light, #F8F8F8); - color: var(--ccd-gray-700-dark, #464646); - border: 1px solid var(--ccd-gray-200-light, #E6E6E6); -} - -sp-theme[color='light'] merch-card[variant="ccd-suggested"] [slot="body-xs"] { - color: var(--ccd-gray-700-dark, #464646); -} - -sp-theme[color='dark'] merch-card[variant="ccd-suggested"] [slot="body-xs"] { - color: var(--ccd-gray-100-light, #F8F8F8); -} - -sp-theme[color='dark'] merch-card[variant="ccd-suggested"] { - background-color: var(--ccd-gray-800-dark, #222); - color: var(--ccd-gray-100-light, #F8F8F8); - border: 1px solid var(--ccd-gray-700-dark, #464646); -} - -merch-card[variant="ccd-suggested"] [slot="detail-s"] { - color: var(--merch-color-grey-60); -} - -merch-card[variant="ccd-suggested"] [slot="heading-xs"] { - color: var(--spectrum-gray-800, #F8F8F8); - font-size: var(--merch-card-heading-xxs-font-size); - line-height: var(--merch-card-heading-xxs-line-height); -} - -merch-card[variant="ccd-suggested"] [slot="body-xs"] a { - font-size: var(--consonant-merch-card-body-xxs-font-size); - line-height: var(--consonant-merch-card-body-xxs-line-height); - text-decoration: underline; - color: var(--spectrum-blue-800, var(--color-accent)); -} - -merch-card[variant="ccd-suggested"] [slot="price"] span.placeholder-resolved[data-template="priceStrikethrough"], -merch-card[variant="ccd-suggested"] [slot="price"] span.placeholder-resolved[data-template="strikethrough"] { - text-decoration: line-through; - color: var(--ccd-gray-600-light, var(--merch-color-grey-60)); -} - -merch-card[variant="ccd-suggested"] [slot="cta"] a { - font-size: var(--consonant-merch-card-body-xs-font-size); - line-height: normal; - text-decoration: none; - color: var(--spectrum-gray-800, var(--merch-color-grey-80)); - font-weight: 700; -} - -sp-theme[color='dark'] merch-card[variant="ccd-suggested"] [slot="cta"] sp-button[treatment="outline"] { - color: var(--ccd-gray-200-light, #E6E6E6); - border: 2px solid var(--ccd-gray-200-light, #E6E6E6); -} -`;var Cl={mnemonics:{size:"l"},subtitle:{tag:"h4",slot:"detail-s"},title:{tag:"h3",slot:"heading-xs"},prices:{tag:"p",slot:"price"},description:{tag:"div",slot:"body-xs"},ctas:{slot:"cta",size:"m"}},pt=class extends P{getGlobalCSS(){return Qa}get aemFragmentMapping(){return Cl}renderLayout(){return g` -
      -
      -
      - - ${this.badge} -
      -
      - - -
      -
      - - -
      - `}};p(pt,"variantStyle",w` - :host([variant='ccd-suggested']) { - width: var(--merch-card-ccd-suggested-width); - min-width: var(--merch-card-ccd-suggested-width); - min-height: var(--merch-card-ccd-suggested-height); - border-radius: 4px; - display: flex; - flex-flow: wrap; - overflow: hidden; - } - - :host([variant='ccd-suggested']) .body { - height: auto; - padding: 20px; - gap: 0; - } - - :host([variant='ccd-suggested'].thin-strip) .body { - padding: 20px 20px 20px 28px; - } - - :host([variant='ccd-suggested']) .header { - display: flex; - flex-flow: wrap; - place-self: flex-start; - flex-wrap: nowrap; - } - - :host([variant='ccd-suggested']) .headings { - padding-inline-start: var(--consonant-merch-spacing-xxs); - display: flex; - flex-direction: column; - gap: 2px; - } - - :host([variant='ccd-suggested']) ::slotted([slot='icons']) { - place-self: center; - } - - :host([variant='ccd-suggested']) ::slotted([slot='heading-xs']) { - font-size: var(--merch-card-heading-xxs-font-size); - line-height: var(--merch-card-heading-xxs-line-height); - } - - :host([variant='ccd-suggested']) ::slotted([slot='detail-m']) { - line-height: var(--consonant-merch-card-detail-m-line-height); - } - - :host([variant='ccd-suggested']) ::slotted([slot='body-xs']) { - color: var(--ccd-gray-700-dark, #464646); - padding-top: 6px; - } - - :host([variant='ccd-suggested'].wide-strip) ::slotted([slot='body-xs']) { - padding-inline-start: 48px; - } - - :host([variant='ccd-suggested'].wide-strip) ::slotted([slot='price']) { - padding-inline-start: 48px; - } - - :host([variant='ccd-suggested']) ::slotted([slot='price']) { - display: flex; - align-items: center; - color: var(--spectrum-gray-800, #F8F8F8); - font-size: var(--consonant-merch-card-body-xs-font-size); - line-height: var(--consonant-merch-card-body-xs-line-height); - min-width: fit-content; - } - - :host([variant='ccd-suggested']) ::slotted([slot='price']) span.placeholder-resolved[data-template="priceStrikethrough"] { - text-decoration: line-through; - } - - :host([variant='ccd-suggested']) ::slotted([slot='cta']) { - display: flex; - align-items: center; - min-width: fit-content; - } - - :host([variant='ccd-suggested']) .footer { - display: flex; - justify-content: space-between; - flex-grow: 0; - margin-top: auto; - align-items: center; - } - - :host([variant='ccd-suggested']) div[class$='-badge'] { - position: static; - border-radius: 4px; - } - - :host([variant='ccd-suggested']) .top-section { - align-items: center; - } - `);var es=` -:root { - --consonant-merch-card-ccd-slice-single-width: 322px; - --consonant-merch-card-ccd-slice-icon-size: 30px; - --consonant-merch-card-ccd-slice-wide-width: 600px; - --consonant-merch-card-ccd-slice-single-height: 154px; - --consonant-merch-card-ccd-slice-background-img-size: 119px; -} -sp-theme[color='light'] merch-card[variant="ccd-slice"] { - background-color: var(--ccd-gray-100-light, #F8F8F8); - color: var(--ccd-gray-800-dark, #222); - border: 1px solid var(--ccd-gray-200-light, #E6E6E6) -} - -sp-theme[color='dark'] merch-card[variant="ccd-slice"] { - background-color: var(--ccd-gray-800-dark, #222); - color: var(--ccd-gray-100-light, #F8F8F8); - border: 1px solid var(--ccd-gray-700-dark, #464646); -} - -merch-card[variant="ccd-slice"] [slot='body-s'] a:not(.con-button) { - font-size: var(--consonant-merch-card-body-xxs-font-size); - font-style: normal; - font-weight: 400; - line-height: var(--consonant-merch-card-body-xxs-line-height); - text-decoration-line: underline; - color: var(--spectrum-gray-800, var(--merch-color-grey-80)); -} - -merch-card[variant="ccd-slice"] [slot="body-s"] span.placeholder-resolved[data-template="priceStrikethrough"], -merch-card[variant="ccd-slice"] [slot="body-s"] span.placeholder-resolved[data-template="strikethrough"] { - text-decoration: line-through; - color: var(--ccd-gray-600-light, var(--merch-color-grey-60)); -} - -merch-card[variant="ccd-slice"] [slot='image'] img { - overflow: hidden; - border-radius: 50%; -} -`;var Nl={mnemonics:{size:"m"},backgroundImage:{tag:"div",slot:"image"},description:{tag:"div",slot:"body-s"},ctas:{slot:"footer",size:"s"},allowedSizes:["wide"]},ft=class extends P{getGlobalCSS(){return es}get aemFragmentMapping(){return Nl}renderLayout(){return g`
      -
      - - ${this.badge} -
      - - -
      - - `}};p(ft,"variantStyle",w` - :host([variant='ccd-slice']) { - min-width: var(--consonant-merch-card-ccd-slice-single-width); - max-width: var(--consonant-merch-card-ccd-slice-single-width); - max-height: var(--consonant-merch-card-ccd-slice-single-height); - height: var(--consonant-merch-card-ccd-slice-single-height); - border: 1px solid var(--spectrum-gray-700); - border-radius: 4px; - display: flex; - flex-flow: wrap; - } - - :host([variant='ccd-slice']) ::slotted([slot='body-s']) { - font-size: var(--consonant-merch-card-body-xs-font-size); - line-height: var(--consonant-merch-card-body-xxs-line-height); - max-width: 154px; - } - - :host([variant='ccd-slice'][size='wide']) ::slotted([slot='body-s']) { - max-width: 425px; - } - - :host([variant='ccd-slice'][size='wide']) { - width: var(--consonant-merch-card-ccd-slice-wide-width); - max-width: var(--consonant-merch-card-ccd-slice-wide-width); - } - - :host([variant='ccd-slice']) .content { - display: flex; - gap: var(--consonant-merch-spacing-xxs); - padding: 15px; - padding-inline-end: 0; - width: 154px; - flex-direction: column; - justify-content: space-between; - align-items: flex-start; - flex: 1 0 0; - } - - :host([variant='ccd-slice']) - ::slotted([slot='body-s']) - ::slotted(a:not(.con-button)) { - font-size: var(--consonant-merch-card-body-xxs-font-size); - font-style: normal; - font-weight: 400; - line-height: var(--consonant-merch-card-body-xxs-line-height); - text-decoration-line: underline; - color: var(--spectrum-gray-800, var(--merch-color-grey-80)); - } - - :host([variant='ccd-slice']) ::slotted([slot='image']) { - display: flex; - justify-content: center; - flex-shrink: 0; - width: var(--consonant-merch-card-ccd-slice-background-img-size); - height: var(--consonant-merch-card-ccd-slice-background-img-size); - overflow: hidden; - border-radius: 50%; - padding: 15px; - align-self: center; - padding-inline-start: 0; - } - - :host([variant='ccd-slice']) ::slotted([slot='image']) img { - overflow: hidden; - border-radius: 50%; - width: inherit; - height: inherit; - } - - :host([variant='ccd-slice']) div[class$='-badge'] { - font-size: var(--consonant-merch-card-body-xxs-font-size); - position: static; - border-radius: 4px; - font-style: normal; - font-weight: 400; - line-height: normal; - padding: 4px 9px; - } - - :host([variant='ccd-slice']) .top-section { - align-items: center; - gap: 8px; - } - `);var wi=(e,t=!1)=>{switch(e.variant){case"catalog":return new st(e);case"ccd-action":return new ct(e);case"image":return new kr(e);case"inline-heading":return new Or(e);case"mini-compare-chart":return new lt(e);case"plans":return new ht(e);case"product":return new De(e);case"segment":return new dt(e);case"special-offers":return new ut(e);case"twp":return new mt(e);case"ccd-suggested":return new pt(e);case"ccd-slice":return new ft(e);default:return t?void 0:new De(e)}},ts=()=>{let e=[];return e.push(st.variantStyle),e.push(ct.variantStyle),e.push(lt.variantStyle),e.push(De.variantStyle),e.push(ht.variantStyle),e.push(dt.variantStyle),e.push(ut.variantStyle),e.push(mt.variantStyle),e.push(pt.variantStyle),e.push(ft.variantStyle),e};var rs=document.createElement("style");rs.innerHTML=` -:root { - --consonant-merch-card-detail-font-size: 12px; - --consonant-merch-card-detail-font-weight: 500; - --consonant-merch-card-detail-letter-spacing: 0.8px; - - --consonant-merch-card-heading-font-size: 18px; - --consonant-merch-card-heading-line-height: 22.5px; - --consonant-merch-card-heading-secondary-font-size: 14px; - --consonant-merch-card-body-font-size: 14px; - --consonant-merch-card-body-line-height: 21px; - --consonant-merch-card-promo-text-height: var(--consonant-merch-card-body-font-size); - - /* Fonts */ - --merch-body-font-family: 'Adobe Clean', adobe-clean, 'Trebuchet MS', sans-serif; - - /* spacing */ - --consonant-merch-spacing-xxxs: 4px; - --consonant-merch-spacing-xxs: 8px; - --consonant-merch-spacing-xs: 16px; - --consonant-merch-spacing-s: 24px; - --consonant-merch-spacing-m: 32px; - - /* cta */ - --consonant-merch-card-cta-font-size: 15px; - - /* headings */ - --merch-card-heading-xxs-font-size: 16px; - --merch-card-heading-xxs-line-height: 20px; - --consonant-merch-card-heading-xs-font-size: 18px; - --consonant-merch-card-heading-xs-line-height: 22.5px; - --consonant-merch-card-heading-s-font-size: 20px; - --consonant-merch-card-heading-s-line-height: 25px; - --consonant-merch-card-heading-m-font-size: 24px; - --consonant-merch-card-heading-m-line-height: 30px; - --consonant-merch-card-heading-l-font-size: 20px; - --consonant-merch-card-heading-l-line-height: 30px; - --consonant-merch-card-heading-xl-font-size: 36px; - --consonant-merch-card-heading-xl-line-height: 45px; - - /* detail */ - --merch-card-detail-s-font-size: 11px; - --merch-card-detail-s-line-height: 14px; - --consonant-merch-card-detail-m-font-size: 12px; - --consonant-merch-card-detail-m-line-height: 15px; - --consonant-merch-card-detail-m-font-weight: 700; - --consonant-merch-card-detail-m-letter-spacing: 1px; - - /* body */ - --consonant-merch-card-body-xxs-font-size: 12px; - --consonant-merch-card-body-xxs-line-height: 18px; - --consonant-merch-card-body-xxs-letter-spacing: 1px; - --consonant-merch-card-body-xs-font-size: 14px; - --consonant-merch-card-body-xs-line-height: 21px; - --consonant-merch-card-body-s-font-size: 16px; - --consonant-merch-card-body-s-line-height: 24px; - --consonant-merch-card-body-m-font-size: 18px; - --consonant-merch-card-body-m-line-height: 27px; - --consonant-merch-card-body-l-font-size: 20px; - --consonant-merch-card-body-l-line-height: 30px; - --consonant-merch-card-body-xl-font-size: 22px; - --consonant-merch-card-body-xl-line-height: 33px; - - - --consonant-merch-card-heading-padding: 0; - - /* colors */ - --merch-card-background-color: var(--spectrum-gray-background-color-default, #fff); - --consonant-merch-card-border-color: #eaeaea; - --color-accent: #1473E6; - --merch-color-focus-ring: #1473E6; - --merch-color-grey-10: #f6f6f6; - --merch-color-grey-60: #6D6D6D; - --merch-color-grey-80: #2c2c2c; - --merch-color-grey-200: #E8E8E8; - --merch-color-grey-600: #686868; - --merch-color-green-promo: #2D9D78; - - /* ccd colors */ - --ccd-gray-100-light: #F8F8F8; - --ccd-gray-200-light: #E6E6E6; - --ccd-gray-800-dark: #222; - --ccd-gray-700-dark: #464646; - --ccd-gray-600-light: #6D6D6D; - --ccd-gray-200-dark: #3F3F3F; - - - - - /* merch card generic */ - --consonant-merch-card-max-width: 300px; - --transition: cmax-height 0.3s linear, opacity 0.3s linear; - - /* background image */ - --consonant-merch-card-bg-img-height: 180px; - - /* inline SVGs */ - --checkmark-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'%3E%3Cpath fill='%23fff' d='M3.788 9A.999.999 0 0 1 3 8.615l-2.288-3a1 1 0 1 1 1.576-1.23l1.5 1.991 3.924-4.991a1 1 0 1 1 1.576 1.23l-4.712 6A.999.999 0 0 1 3.788 9z' class='spectrum-UIIcon--medium'/%3E%3C/svg%3E%0A"); - - --secure-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23757575' viewBox='0 0 12 15'%3E%3Cpath d='M11.5 6H11V5A5 5 0 1 0 1 5v1H.5a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h11a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5ZM3 5a3 3 0 1 1 6 0v1H3Zm4 6.111V12.5a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1.389a1.5 1.5 0 1 1 2 0Z'/%3E%3C/svg%3E"); - - --info-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 36 36'>'); - - /* callout */ - --consonant-merch-card-callout-line-height: 21px; - --consonant-merch-card-callout-font-size: 14px; - --consonant-merch-card-callout-font-color: #2C2C2C; - --consonant-merch-card-callout-icon-size: 16px; - --consonant-merch-card-callout-icon-top: 6px; - --consonant-merch-card-callout-icon-right: 8px; - --consonant-merch-card-callout-letter-spacing: 0px; - --consonant-merch-card-callout-icon-padding: 34px; - --consonant-merch-card-callout-spacing-xxs: 8px; -} - -merch-card-collection { - display: contents; -} - -merch-card-collection > merch-card:not([style]) { - display: none; -} - -merch-card-collection > p[slot], -merch-card-collection > div[slot] p { - margin: 0; -} - -.one-merch-card, -.two-merch-cards, -.three-merch-cards, -.four-merch-cards { - display: grid; - justify-content: center; - justify-items: stretch; - align-items: normal; - gap: var(--consonant-merch-spacing-m); - padding: var(--spacing-m); -} - -merch-card.background-opacity-70 { - background-color: rgba(255 255 255 / 70%); -} - -merch-card.has-divider hr { - margin-bottom: var(--consonant-merch-spacing-xs); - height: 1px; - border: none; -} - -merch-card p, merch-card h3, merch-card h4 { - margin: 0; -} - -merch-card span[is=inline-price] { - display: inline-block; -} - -merch-card [slot^='heading-'] { - color: var(--spectrum-gray-800, var(--merch-color-grey-80)); - font-weight: 700; -} - -merch-card [slot='heading-xs'] { - font-size: var(--consonant-merch-card-heading-xs-font-size); - line-height: var(--consonant-merch-card-heading-xs-line-height); - margin: 0; -} - -merch-card.dc-pricing [slot='heading-xs'] { - margin-bottom: var(--consonant-merch-spacing-xxs); -} - -merch-card:not([variant='inline-heading']) [slot='heading-xs'] a { - color: var(--merch-color-grey-80); -} - -merch-card div.starting-at { - font-size: var(--consonant-merch-card-body-xs-font-size); - line-height: var(--consonant-merch-card-body-xs-line-height); - font-weight: 500; -} - -merch-card [slot='heading-xs'] a:not(:hover) { - text-decoration: inherit; -} - -merch-card [slot='heading-s'] { - font-size: var(--consonant-merch-card-heading-s-font-size); - line-height: var(--consonant-merch-card-heading-s-line-height); - margin: 0; -} - -merch-card [slot='heading-m'] { - font-size: var(--consonant-merch-card-heading-m-font-size); - line-height: var(--consonant-merch-card-heading-m-line-height); - margin: 0; -} - -merch-card [slot='heading-m-price'] { - font-size: var(--consonant-merch-card-heading-m-font-size); - line-height: var(--consonant-merch-card-heading-m-line-height); - padding: 0 var(--consonant-merch-spacing-s); - margin: 0; - color: var(--spectrum-gray-800, #2c2c2c); -} - -merch-card [slot='offers'] { - padding: var(--consonant-merch-spacing-xxs) var(--consonant-merch-spacing-s); -} - -merch-card [slot='heading-l'] { - font-size: var(--consonant-merch-card-heading-l-font-size); - line-height: var(--consonant-merch-card-heading-l-line-height); - margin: 0; -} - -merch-card [slot='heading-xl'] { - font-size: var(--consonant-merch-card-heading-xl-font-size); - line-height: var(--consonant-merch-card-heading-xl-line-height); - margin: 0; -} - -merch-card [slot='callout-content'] { - display: flex; - flex-direction: column; - margin: var(--consonant-merch-spacing-xxxs) 0px; - gap: var(--consonant-merch-card-callout-spacing-xxs); -} - -merch-card [slot='callout-content'] > div { - display: flex; - flex-direction: column; - margin: var(--consonant-merch-spacing-xxxs) 0px; - gap: var(--consonant-merch-card-callout-spacing-xxs); - align-items: flex-start; -} - -merch-card [slot='callout-content'] > div > div { - display: flex; - background: rgba(203 203 203 / 50%); - border-radius: var(--consonant-merch-spacing-xxxs); - padding: var(--consonant-merch-spacing-xxxs) var(--consonant-merch-spacing-xxxs) var(--consonant-merch-spacing-xxxs) var(--consonant-merch-spacing-xxs); -} - -merch-card [slot='callout-content'] > div > div > div { - display: inline-block; - text-align: start; - font: normal normal normal var(--consonant-merch-card-callout-font-size)/var(--consonant-merch-card-callout-line-height) var(--body-font-family, 'Adobe Clean'); - letter-spacing: var(--consonant-merch-card-callout-letter-spacing); - color: var(--consonant-merch-card-callout-font-color); -} - -merch-card [slot='callout-content'] img { - width: var(--consonant-merch-card-callout-icon-size); - height: var(--consonant-merch-card-callout-icon-size); - margin-inline-end: 2.5px; - margin-inline-start: 9px; - margin-block-start: 2.5px; -} - -merch-card [slot='detail-s'] { - font-size: var(--merch-card-detail-s-font-size); - line-height: var(--merch-card-detail-s-line-height); - letter-spacing: 0.66px; - font-weight: 700; - text-transform: uppercase; - color: var(--spectrum-gray-600, var(--merch-color-grey-600)); -} - -merch-card [slot='detail-m'] { - font-size: var(--consonant-merch-card-detail-m-font-size); - letter-spacing: var(--consonant-merch-card-detail-m-letter-spacing); - font-weight: var(--consonant-merch-card-detail-m-font-weight); - text-transform: uppercase; - margin: 0; - color: var(--merch-color-grey-80); -} - -merch-card [slot="body-xxs"] { - font-size: var(--consonant-merch-card-body-xxs-font-size); - line-height: var(--consonant-merch-card-body-xxs-line-height); - font-weight: normal; - letter-spacing: var(--consonant-merch-card-body-xxs-letter-spacing); - margin: 0; - color: var(--merch-color-grey-80); -} - -merch-card [slot="body-xs"] { - font-size: var(--consonant-merch-card-body-xs-font-size); - line-height: var(--consonant-merch-card-body-xs-line-height); - color: var(--merch-color-grey-80); -} - -merch-card [slot="body-m"] { - font-size: var(--consonant-merch-card-body-m-font-size); - line-height: var(--consonant-merch-card-body-m-line-height); - color: var(--merch-color-grey-80); -} - -merch-card [slot="body-l"] { - font-size: var(--consonant-merch-card-body-l-font-size); - line-height: var(--consonant-merch-card-body-l-line-height); - color: var(--merch-color-grey-80); -} - -merch-card [slot="body-xl"] { - font-size: var(--consonant-merch-card-body-xl-font-size); - line-height: var(--consonant-merch-card-body-xl-line-height); - color: var(--merch-color-grey-80); -} - -merch-card a.primary-link { - color: var(--spectrum-global-color-blue-700); -} - -[slot="cci-footer"] p, -[slot="cct-footer"] p, -[slot="cce-footer"] p { - margin: 0; -} - -merch-card [slot="promo-text"] { - color: var(--merch-color-green-promo); - font-size: var(--consonant-merch-card-promo-text-height); - font-weight: 700; - line-height: var(--consonant-merch-card-promo-text-height); - margin: 0; - min-height: var(--consonant-merch-card-promo-text-height); - padding: 0; -} - -div[slot="footer"] { - display: contents; -} - -[slot="footer"] a { - word-wrap: break-word; - text-align: center; -} - -[slot="footer"] a:not([class]) { - font-weight: 700; - font-size: var(--consonant-merch-card-cta-font-size); -} - -div[slot='bg-image'] img { - position: relative; - width: 100%; - min-height: var(--consonant-merch-card-bg-img-height); - max-height: var(--consonant-merch-card-bg-img-height); - object-fit: cover; - border-top-left-radius: 16px; - border-top-right-radius: 16px; -} - -span[is="inline-price"][data-template='strikethrough'] { - text-decoration: line-through; -} - -merch-card sp-button a { - text-decoration: none; - color: var( - --highcontrast-button-content-color-default, - var( - --mod-button-content-color-default, - var(--spectrum-button-content-color-default) - ) - ); -} - -merch-card span.placeholder-resolved[data-template='strikethrough'], -merch-card span.price.price-strikethrough { - font-size: var(--consonant-merch-card-body-xs-font-size); - font-weight: normal; -} - -/* merch-offer-select */ -merch-offer-select[variant="subscription-options"] merch-offer span[is="inline-price"][data-display-tax='true'] .price-tax-inclusivity { - font-size: 12px; - font-style: italic; - font-weight: normal; - position: absolute; - left: 0; - top: 20px; -} - -body.merch-modal { - overflow: hidden; - scrollbar-gutter: stable; - height: 100vh; -} -`;document.head.appendChild(rs);var Il="#000000",kl="#F8D904",Ol=/(accent|primary|secondary)(-(outline|link))?/;function Rl(e){return e.fields.reduce((t,{name:r,multiple:n,values:i})=>(t[r]=n?i:i[0],t),{id:e.id})}function Vl(e,t,r){let n=e.mnemonicIcon?.map((i,o)=>({icon:i,alt:e.mnemonicAlt[o]??"",link:e.mnemonicLink[o]??""}));return n?.forEach(({icon:i,alt:o,link:a})=>{if(!/^https?:/.test(a))try{a=new URL(`https://${a}`).href.toString()}catch{a="#"}let s=he("merch-icon",{slot:"icons",src:i,alt:o,href:a,size:r.mnemonics?.size??"l"});t.append(s)}),n}function $l(e,t){e.badge&&(t.setAttribute("badge-text",e.badge),t.setAttribute("badge-color",e.badgeColor||Il),t.setAttribute("badge-background-color",e.badgeBackgroundColor||kl))}function Ml(e,t,r){r?.includes(e.size)&&t.setAttribute("size",e.size)}function Ul(e,t,r){e.cardTitle&&r&&t.append(he(r.tag,{slot:r.slot},e.cardTitle))}function Dl(e,t,r){e.subtitle&&r&&t.append(he(r.tag,{slot:r.slot},e.subtitle))}function Gl(e,t,r,n){if(e.backgroundImage)switch(n){case"ccd-slice":r&&t.append(he(r.tag,{slot:r.slot},``));break;case"ccd-suggested":t.setAttribute("background-image",e.backgroundImage);break}}function Hl(e,t,r){if(e.prices&&r){let n=he(r.tag,{slot:r.slot},e.prices);t.append(n)}}function zl(e,t,r){if(e.description&&r){let n=he(r.tag,{slot:r.slot},e.description);t.append(n)}}function Fl(e,t,r,n){n==="ccd-suggested"&&!e.className&&(e.className="primary-link");let i=Ol.exec(e.className)?.[0]??"accent",o=i.includes("accent"),a=i.includes("primary"),s=i.includes("secondary"),c=i.includes("-outline");if(i.includes("-link"))return e;let h="fill",d;o||t?d="accent":a?d="primary":s&&(d="secondary"),c&&(h="outline");let u=he("sp-button",{treatment:h,variant:d,tabIndex:-1,size:r.ctas.size??"m"},e);return u.addEventListener("click",m=>{m.target!==e&&(m.stopPropagation(),e.click())}),u}function Kl(e,t){return e.classList.add("con-button"),t&&e.classList.add("blue"),e}function Bl(e,t,r,n){if(e.ctas){let{slot:i}=r.ctas,o=he("div",{slot:i},e.ctas),a=[...o.querySelectorAll("a")].map(s=>{let c=s.parentElement.tagName==="STRONG";return t.consonant?Kl(s,c):Fl(s,c,r,n)});o.innerHTML="",o.append(...a),t.append(o)}}async function ns(e,t){let r=Rl(e),{variant:n}=r;if(!n)return;t.querySelectorAll("[slot]").forEach(a=>{a.remove()}),t.removeAttribute("background-image"),t.removeAttribute("badge-background-color"),t.removeAttribute("badge-color"),t.removeAttribute("badge-text"),t.removeAttribute("size"),t.variant=n,await t.updateComplete;let{aemFragmentMapping:i}=t.variantLayout;if(!i)return;let o=Vl(r,t,i);e.computed={mnemonics:o},$l(r,t),Ml(r,t,i.allowedSizes),Ul(r,t,i.title),Dl(r,t,i.subtitle),Gl(r,t,i.backgroundImage,n),Hl(r,t,i.prices),zl(r,t,i.description),Bl(r,t,i,n)}var jl="merch-card",Yl=2e3,Ci,Kt,Pi,Ft=class extends ie{constructor(){super();j(this,Kt);p(this,"customerSegment");p(this,"marketSegment");p(this,"variantLayout");j(this,Ci,!1);this.filters={},this.types="",this.selected=!1,this.handleAemFragmentEvents=this.handleAemFragmentEvents.bind(this)}firstUpdated(){this.variantLayout=wi(this,!1),this.variantLayout?.connectedCallbackHook(),this.aemFragment?.updateComplete.catch(()=>{this.style.display="none"})}willUpdate(r){(r.has("variant")||!this.variantLayout)&&(this.variantLayout=wi(this),this.variantLayout.connectedCallbackHook())}updated(r){(r.has("badgeBackgroundColor")||r.has("borderColor"))&&(this.style.border=this.computedBorderStyle),this.variantLayout?.postCardUpdateHook(this)}get theme(){return this.closest("sp-theme")}get prices(){return Array.from(this.querySelectorAll('span[is="inline-price"][data-wcs-osi]'))}render(){if(!(!this.isConnected||!this.variantLayout||this.style.display==="none"))return this.variantLayout.renderLayout()}get computedBorderStyle(){return["twp","ccd-slice","ccd-suggested"].includes(this.variant)?"":`1px solid ${this.borderColor?this.borderColor:this.badgeBackgroundColor}`}get badgeElement(){return this.shadowRoot.getElementById("badge")}get headingmMSlot(){return this.shadowRoot.querySelector('slot[name="heading-m"]').assignedElements()[0]}get footerSlot(){return this.shadowRoot.querySelector('slot[name="footer"]')?.assignedElements()[0]}get price(){return this.headingmMSlot?.querySelector('span[is="inline-price"]')}get checkoutLinks(){return[...this.footerSlot?.querySelectorAll('a[is="checkout-link"]')??[]]}async toggleStockOffer({target:r}){if(!this.stockOfferOsis)return;let n=this.checkoutLinks;if(n.length!==0)for(let i of n){await i.onceSettled();let o=i.value?.[0]?.planType;if(!o)return;let a=this.stockOfferOsis[o];if(!a)return;let s=i.dataset.wcsOsi.split(",").filter(c=>c!==a);r.checked&&s.push(a),i.dataset.wcsOsi=s.join(",")}}handleQuantitySelection(r){let n=this.checkoutLinks;for(let i of n)i.dataset.quantity=r.detail.option}get titleElement(){return this.querySelector(this.variantLayout?.headingSelector||".card-heading")}get title(){return this.titleElement?.textContent?.trim()}get description(){return this.querySelector('[slot="body-xs"]')?.textContent?.trim()}updateFilters(r){let n={...this.filters};Object.keys(n).forEach(i=>{if(r){n[i].order=Math.min(n[i].order||2,2);return}let o=n[i].order;o===1||isNaN(o)||(n[i].order=Number(o)+1)}),this.filters=n}includes(r){return this.textContent.match(new RegExp(r,"i"))!==null}connectedCallback(){super.connectedCallback(),this.addEventListener(_i,this.handleQuantitySelection),this.addEventListener(Ua,this.merchCardReady,{once:!0}),this.updateComplete.then(()=>{this.merchCardReady()}),this.storageOptions?.addEventListener("change",this.handleStorageChange),this.addEventListener(at,this.handleAemFragmentEvents),this.addEventListener(ot,this.handleAemFragmentEvents),this.aemFragment||setTimeout(()=>this.checkReady(),0)}disconnectedCallback(){super.disconnectedCallback(),this.variantLayout.disconnectedCallbackHook(),this.removeEventListener(_i,this.handleQuantitySelection),this.storageOptions?.removeEventListener(Li,this.handleStorageChange),this.removeEventListener(at,this.handleAemFragmentEvents),this.removeEventListener(ot,this.handleAemFragmentEvents)}async handleAemFragmentEvents(r){if(r.type===at&&ze(this,Kt,Pi).call(this,"AEM fragment cannot be loaded"),r.type===ot&&r.target.nodeName==="AEM-FRAGMENT"){let n=r.detail;await ns(n,this),this.checkReady()}}async checkReady(){let r=Promise.all([...this.querySelectorAll('span[is="inline-price"][data-wcs-osi],a[is="checkout-link"][data-wcs-osi]')].map(o=>o.onceSettled().catch(()=>o))).then(o=>o.every(a=>a.classList.contains("placeholder-resolved"))),n=new Promise(o=>setTimeout(()=>o(!1),Yl));if(await Promise.race([r,n])===!0){this.dispatchEvent(new CustomEvent(Ha,{bubbles:!0,composed:!0}));return}ze(this,Kt,Pi).call(this,"Contains unresolved offers")}get aemFragment(){return this.querySelector("aem-fragment")}get storageOptions(){return this.querySelector("sp-radio-group#storage")}get storageSpecificOfferSelect(){let r=this.storageOptions?.selected;if(r){let n=this.querySelector(`merch-offer-select[storage="${r}"]`);if(n)return n}return this.querySelector("merch-offer-select")}get offerSelect(){return this.storageOptions?this.storageSpecificOfferSelect:this.querySelector("merch-offer-select")}get quantitySelect(){return this.querySelector("merch-quantity-select")}merchCardReady(){this.offerSelect&&!this.offerSelect.planType||this.dispatchEvent(new CustomEvent(Da,{bubbles:!0}))}handleStorageChange(){let r=this.closest("merch-card")?.offerSelect.cloneNode(!0);r&&this.dispatchEvent(new CustomEvent(Li,{detail:{offerSelect:r},bubbles:!0}))}get dynamicPrice(){return this.querySelector('[slot="price"]')}selectMerchOffer(r){if(r===this.merchOffer)return;this.merchOffer=r;let n=this.dynamicPrice;if(r.price&&n){let i=r.price.cloneNode(!0);n.onceSettled?n.onceSettled().then(()=>{n.replaceWith(i)}):n.replaceWith(i)}}};Ci=new WeakMap,Kt=new WeakSet,Pi=function(r){this.dispatchEvent(new CustomEvent(za,{detail:r,bubbles:!0,composed:!0}))},p(Ft,"properties",{name:{type:String,attribute:"name",reflect:!0},variant:{type:String,reflect:!0},size:{type:String,attribute:"size",reflect:!0},badgeColor:{type:String,attribute:"badge-color",reflect:!0},borderColor:{type:String,attribute:"border-color",reflect:!0},badgeBackgroundColor:{type:String,attribute:"badge-background-color",reflect:!0},backgroundImage:{type:String,attribute:"background-image",reflect:!0},badgeText:{type:String,attribute:"badge-text"},actionMenu:{type:Boolean,attribute:"action-menu"},customHr:{type:Boolean,attribute:"custom-hr"},consonant:{type:Boolean,attribute:"consonant"},detailBg:{type:String,attribute:"detail-bg"},secureLabel:{type:String,attribute:"secure-label"},checkboxLabel:{type:String,attribute:"checkbox-label"},selected:{type:Boolean,attribute:"aria-selected",reflect:!0},storageOption:{type:String,attribute:"storage",reflect:!0},stockOfferOsis:{type:Object,attribute:"stock-offer-osis",converter:{fromAttribute:r=>{let[n,i,o]=r.split(",");return{PUF:n,ABM:i,M2M:o}}}},filters:{type:String,reflect:!0,converter:{fromAttribute:r=>Object.fromEntries(r.split(",").map(n=>{let[i,o,a]=n.split(":"),s=Number(o);return[i,{order:isNaN(s)?void 0:s,size:a}]})),toAttribute:r=>Object.entries(r).map(([n,{order:i,size:o}])=>[n,i,o].filter(a=>a!=null).join(":")).join(",")}},types:{type:String,attribute:"types",reflect:!0},merchOffer:{type:Object}}),p(Ft,"styles",[Va,ts(),...$a()]);customElements.define(jl,Ft);var gt=class extends ie{constructor(){super(),this.size="m",this.alt=""}render(){let{href:t}=this;return t?g` - ${this.alt} - `:g` ${this.alt}`}};p(gt,"properties",{size:{type:String,attribute:!0},src:{type:String,attribute:!0},alt:{type:String,attribute:!0},href:{type:String,attribute:!0}}),p(gt,"styles",w` - :host { - --img-width: 32px; - --img-height: 32px; - display: block; - width: var(--img-width); - height: var(--img-height); - } - - :host([size='s']) { - --img-width: 24px; - --img-height: 24px; - } - - :host([size='m']) { - --img-width: 30px; - --img-height: 30px; - } - - :host([size='l']) { - --img-width: 40px; - --img-height: 40px; - } - - img { - width: var(--img-width); - height: var(--img-height); - } - `);customElements.define("merch-icon",gt);async function Xl(e){let t=e.headers.get("Etag"),r=await e.json();return r.etag=t,r}async function is(e,t,r){let n=await fetch(`${e}/adobe/sites/cf/fragments/${t}`,{headers:r});if(!n.ok)throw new Error(`Failed to get fragment: ${n.status} ${n.statusText}`);return await Xl(n)}var as=new CSSStyleSheet;as.replaceSync(":host { display: contents; }");var Wl=document.querySelector('meta[name="aem-base-url"]')?.content??"https://odin.adobe.com",os="fragment",ql="ims",Ni,Se,Ii=class{constructor(){j(this,Se,new Map)}clear(){M(this,Se).clear()}add(...t){t.forEach(r=>{let{id:n}=r;n&&M(this,Se).set(n,r)})}has(t){return M(this,Se).has(t)}get(t){return M(this,Se).get(t)}remove(t){M(this,Se).delete(t)}};Se=new WeakMap;var Rr=new Ii,de,Bt,Oi,ki=class extends HTMLElement{constructor(){super();j(this,Bt);p(this,"cache",Rr);p(this,"data");p(this,"fragmentId");p(this,"consonant",!1);p(this,"ims",!1);j(this,de);this.attachShadow({mode:"open"}),this.shadowRoot.adoptedStyleSheets=[as];let r=this.getAttribute(ql);["",!0].includes(r)?(this.ims=!0,Ni||(Ni={Authorization:`Bearer ${window.adobeid?.authorize?.()}`,pragma:"no-cache","cache-control":"no-cache"})):this.ims=!1}static get observedAttributes(){return[os]}attributeChangedCallback(r,n,i){r===os&&(this.fragmentId=i,this.refresh(!1))}connectedCallback(){if(!this.fragmentId){ze(this,Bt,Oi).call(this,"Missing fragment id");return}}async refresh(r=!0){M(this,de)&&!await Promise.race([M(this,de),Promise.resolve(!1)])||(r&&Rr.remove(this.fragmentId),fe(this,de,this.fetchData().then(()=>(this.dispatchEvent(new CustomEvent(ot,{detail:this.data,bubbles:!0,composed:!0})),!0)).catch(()=>(ze(this,Bt,Oi).call(this,"Network error: failed to load fragment"),fe(this,de,null),!1))),M(this,de))}async fetchData(){let r=Rr.get(this.fragmentId);r||(r=await is(Wl,this.fragmentId,this.ims?Ni:void 0),Rr.add(r)),this.data=r}get updateComplete(){return M(this,de)??Promise.reject(new Error("AEM fragment cannot be loaded"))}};de=new WeakMap,Bt=new WeakSet,Oi=function(r){this.classList.add("error"),this.dispatchEvent(new CustomEvent(at,{detail:r,bubbles:!0,composed:!0}))};customElements.define("aem-fragment",ki); -/*! Bundled license information: - -@lit/reactive-element/css-tag.js: - (** - * @license - * Copyright 2019 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - *) - -@lit/reactive-element/reactive-element.js: - (** - * @license - * Copyright 2017 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - *) - -lit-html/lit-html.js: - (** - * @license - * Copyright 2017 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - *) - -@lit/reactive-element/css-tag.js: - (** - * @license - * Copyright 2019 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - *) - -@lit/reactive-element/reactive-element.js: - (** - * @license - * Copyright 2017 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - *) - -lit-html/lit-html.js: - (** - * @license - * Copyright 2017 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - *) - -lit-element/lit-element.js: - (** - * @license - * Copyright 2017 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - *) - -lit-html/is-server.js: - (** - * @license - * Copyright 2022 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - *) -*/ diff --git a/libs/features/mas/mas/package.json b/libs/features/mas/mas/package.json deleted file mode 100644 index 4d6f6cb1c3d..00000000000 --- a/libs/features/mas/mas/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "@adobecom/mas-js", - "version": "0.0.6", - "description": "Merch at Scale commerce & web components", - "scripts": { - "test:ci": "echo", - "build": "node build.mjs" - }, - "type": "module", - "main": "dist/mas.js", - "files": [ - "src", - "dist" - ], - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": {}, - "devDependencies": { - "@web/test-runner": "^0.13.27", - "@web/test-runner-commands": "^0.6.1", - "esbuild": "^0.21.5", - "esbuild-node-externals": "^1.13.1" - } -} diff --git a/libs/features/mas/mas/src/mas.js b/libs/features/mas/mas/src/mas.js deleted file mode 100644 index d619f8a2ee0..00000000000 --- a/libs/features/mas/mas/src/mas.js +++ /dev/null @@ -1,4 +0,0 @@ -import '../../commerce/src/index.js'; -import '../../web-components/src/merch-card.js'; -import '../../web-components/src/merch-icon.js'; -import '../../web-components/src/aem-fragment.js'; diff --git a/libs/features/mas/mocks/aem.js b/libs/features/mas/mocks/aem.js deleted file mode 100644 index c38e489fa5e..00000000000 --- a/libs/features/mas/mocks/aem.js +++ /dev/null @@ -1,23 +0,0 @@ -export async function withAem(originalFetch) { - return async ({ pathname }) => { - if (/cf\/fragments\//.test(pathname)) { - const fragmentId = pathname.split('/').pop(); - const item = await originalFetch( - '/test/mocks/sites/cf/fragments/search/authorPayload.json', - ) - .then((res) => res.json()) - .then(({ items }) => - items.find((item) => item.id === fragmentId), - ); - if (item) { - return Promise.resolve({ - ok: true, - status: 200, - headers: { get: () => ({}) }, - json: () => Promise.resolve(item), - }); - } - } - return false; - }; -} diff --git a/libs/features/mas/mocks/sites/cf/fragments/search/authorPayload.json b/libs/features/mas/mocks/sites/cf/fragments/search/authorPayload.json deleted file mode 100644 index 5b8d98d46ed..00000000000 --- a/libs/features/mas/mocks/sites/cf/fragments/search/authorPayload.json +++ /dev/null @@ -1,887 +0,0 @@ -{ - "items": [ - { - "path": "/content/dam/sandbox/mas/creative-cloud", - "title": "Creative Cloud All Apps", - "description": "", - "id": "f4aafcef-d410-4092-9f77-a72b9234c224", - "created": { - "at": "2024-09-11T07:36:46.63Z", - "by": "johndoe@adobe.com", - "fullName": "John Doe" - }, - "modified": { - "at": "2024-09-11T08:41:22.433Z", - "by": "johndoe@adobe.com", - "fullName": "John Doe" - }, - "published": { - "at": "2024-09-11T08:27:19.117Z", - "by": "johndoe@adobe.com", - "fullName": "John Doe" - }, - "status": "MODIFIED", - "fields": [ - { - "name": "mnemonicIcon", - "type": "text", - "multiple": true, - "locked": false, - "values": ["/test/mocks/img/creative-cloud.svg"] - }, - { - "name": "mnemonicAlt", - "type": "text", - "multiple": true, - "locked": false, - "values": ["Creative Cloud Product Icon"] - }, - { - "name": "mnemonicLink", - "type": "text", - "multiple": true, - "locked": false, - "values": [ - "https://www.adobe.com/creativecloud/all-apps.html" - ] - }, - { - "name": "badge", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "cardTitle", - "type": "text", - "multiple": false, - "locked": false, - "values": ["Creative Cloud All Apps"] - }, - { - "name": "cardTitleLink", - "type": "text", - "multiple": false, - "locked": false, - "values": [ - "https://www.adobe.com/creativecloud/all-apps.html" - ] - }, - { - "name": "prices", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "" - ] - }, - { - "name": "shortDescription", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "description", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "

      Get 25 apps and games plus fonts, storage, templates, and tutorials for less than the price of Acrobat Pro, Photoshop, and Premiere Pro sold separately. (Substance 3D apps not included.)

      " - ] - }, - { - "name": "ctas", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "Buy nowFree trial" - ] - }, - { - "name": "variant", - "type": "text", - "multiple": false, - "locked": false, - "values": ["ccd-action"] - }, - { - "name": "parent", - "type": "content-fragment", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "product", - "type": "content-reference", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "stockOffer", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "secure", - "type": "boolean", - "multiple": false, - "locked": false, - "values": [false] - }, - { - "name": "promoCode", - "type": "text", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "size", - "type": "text", - "multiple": false, - "locked": false, - "values": [] - } - ], - "variations": [], - "tags": [], - "references": [], - "model": { - "id": "L2NvbmYvbWFzL3NldHRpbmdzL2RhbS9jZm0vbW9kZWxzL2NhcmQ", - "path": "/conf/mas/settings/dam/cfm/models/card", - "name": "Card", - "title": "Card", - "description": "universal m@s card model" - }, - "validationStatus": [], - "fieldTags": [], - "etag": "\"18d6aa75a4d2d0d594ee363257f808f4\"" - }, - { - "path": "/content/dam/sandbox/mas/photoshop", - "title": "Photoshop", - "description": "", - "id": "d52dcff2-9dea-439e-a7a4-a53099ec9315", - "created": { - "at": "2024-05-08T12:05:04.785Z", - "by": "johndoe@adobe.com", - "fullName": "John Doe" - }, - "modified": { - "at": "2024-06-13T11:10:20.455Z", - "by": "johndoe@adobe.com", - "fullName": "John Doe" - }, - "published": { - "at": "2024-06-13T11:11:01.224Z", - "by": "johndoe@adobe.com", - "fullName": "John Doe" - }, - "status": "PUBLISHED", - "fields": [ - { - "name": "mnemonicIcon", - "type": "text", - "multiple": true, - "locked": false, - "values": ["/test/mocks/img/photoshop.svg"] - }, - { - "name": "mnemonicAlt", - "type": "text", - "multiple": true, - "locked": false, - "values": ["Photoshop Icon"] - }, - { - "name": "mnemonicLink", - "type": "text", - "multiple": true, - "locked": false, - "values": ["https://www.adobe.com/products/photoshop.html"] - }, - { - "name": "badge", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "cardTitle", - "type": "text", - "multiple": false, - "locked": false, - "values": ["Photoshop"] - }, - { - "name": "cardTitleLink", - "type": "text", - "multiple": false, - "locked": false, - "values": ["https://www.adobe.com/products/photoshop.html"] - }, - { - "name": "prices", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "" - ] - }, - { - "name": "shortDescription", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "description", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "

      Edit, composite, and create beautiful images, graphics, and art on desktop and iPad.

      " - ] - }, - { - "name": "ctas", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "Buy nowFree trial" - ] - }, - { - "name": "variant", - "type": "text", - "multiple": false, - "locked": false, - "values": ["ccd-action"] - }, - { - "name": "parent", - "type": "content-fragment", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "product", - "type": "content-reference", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "stockOffer", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "secure", - "type": "boolean", - "multiple": false, - "locked": false, - "values": [false] - }, - { - "name": "promoCode", - "type": "text", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "size", - "type": "text", - "multiple": false, - "locked": false, - "values": [] - } - ], - "variations": [], - "tags": [], - "references": [], - "model": { - "id": "L2NvbmYvc2FuZGJveC9zZXR0aW5ncy9kYW0vY2ZtL21vZGVscy9tZXJjaC1jYXJk", - "path": "/conf/sandbox/settings/dam/cfm/models/merch-card", - "name": "Merch Card", - "title": "Merch Card", - "description": "content for adobe.com merch-card web component." - }, - "validationStatus": [], - "fieldTags": [], - "etag": "\"343f00d61244effce6e55c31cc90d4f9\"" - }, - { - "path": "/content/dam/sandbox/mas/special-offers-students-and-teachers", - "title": "Special Offers Students and Teachers", - "description": "", - "id": "64382bf2-6308-4245-85c6-ea43e0edb287", - "created": { - "at": "2024-08-15T21:48:42.597Z", - "by": "johndoe@adobe.com", - "fullName": "John Doe" - }, - "modified": { - "at": "2024-08-27T11:58:39.08Z", - "by": "johndoe@adobe.com", - "fullName": "John Doe" - }, - "published": { - "at": "2024-08-26T09:22:58.047Z", - "by": "johndoe@adobe.com", - "fullName": "John Doe" - }, - "status": "MODIFIED", - "fields": [ - { - "name": "mnemonicIcon", - "type": "text", - "multiple": true, - "locked": false, - "values": [] - }, - { - "name": "mnemonicAlt", - "type": "text", - "multiple": true, - "locked": false, - "values": [] - }, - { - "name": "mnemonicLink", - "type": "text", - "multiple": true, - "locked": false, - "values": [] - }, - { - "name": "badge", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "backgroundImage", - "type": "text", - "multiple": false, - "locked": false, - "values": ["/test/img/special-offers-img2.png"] - }, - { - "name": "cardTitle", - "type": "text", - "multiple": false, - "locked": false, - "values": ["Save over 30% on Creative Cloud All Apps."] - }, - { - "name": "cardTitleLink", - "type": "text", - "multiple": false, - "locked": false, - "values": [ - "https://www.adobe.com/products/special-offers.html" - ] - }, - { - "name": "prices", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "" - ] - }, - { - "name": "shortDescription", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "description", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "

      Join us for the creative event of the year Oct 14-16. Register by August 31 and save US$200 on a full conference pass.

      See termsīģŋ

      " - ] - }, - { - "name": "ctas", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "

      Buy nowīģŋ

      " - ] - }, - { - "name": "variant", - "type": "text", - "multiple": false, - "locked": false, - "values": ["special-offers"] - }, - { - "name": "parent", - "type": "content-fragment", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "product", - "type": "content-reference", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "stockOffer", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "secure", - "type": "boolean", - "multiple": false, - "locked": false, - "values": [false] - }, - { - "name": "promoCode", - "type": "text", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "size", - "type": "text", - "multiple": false, - "locked": false, - "values": [] - } - ], - "variations": [], - "tags": [], - "references": [], - "model": { - "id": "L2NvbmYvc2FuZGJveC9zZXR0aW5ncy9kYW0vY2ZtL21vZGVscy9tZXJjaC1jYXJk", - "path": "/conf/sandbox/settings/dam/cfm/models/merch-card", - "name": "Merch Card", - "title": "Merch Card", - "description": "content for adobe.com merch-card web component." - }, - "fieldTags": [] - }, - { - "path": "/content/dam/sandbox/mas/with-wrong-price-and-checkout-osis", - "title": "with wrong price and checkout osis", - "description": "", - "id": "with-wrong-price-and-checkout-osis", - "created": { - "at": "2024-08-15T21:48:42.597Z", - "by": "johndoe@adobe.com", - "fullName": "John Doe" - }, - "modified": { - "at": "2024-08-27T11:58:39.08Z", - "by": "johndoe@adobe.com", - "fullName": "John Doe" - }, - "published": { - "at": "2024-08-26T09:22:58.047Z", - "by": "johndoe@adobe.com", - "fullName": "John Doe" - }, - "status": "MODIFIED", - "fields": [ - { - "name": "mnemonicIcon", - "type": "text", - "multiple": true, - "locked": false, - "values": [] - }, - { - "name": "mnemonicAlt", - "type": "text", - "multiple": true, - "locked": false, - "values": [] - }, - { - "name": "mnemonicLink", - "type": "text", - "multiple": true, - "locked": false, - "values": [] - }, - { - "name": "badge", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "backgroundImage", - "type": "text", - "multiple": false, - "locked": false, - "values": ["/test/img/special-offers-img2.png"] - }, - { - "name": "cardTitle", - "type": "text", - "multiple": false, - "locked": false, - "values": ["Save over 30% on Creative Cloud All Apps."] - }, - { - "name": "cardTitleLink", - "type": "text", - "multiple": false, - "locked": false, - "values": [ - "https://www.adobe.com/products/special-offers.html" - ] - }, - { - "name": "prices", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "" - ] - }, - { - "name": "shortDescription", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "description", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "

      Join us for the creative event of the year Oct 14-16. Register by August 31 and save US$200 on a full conference pass.

      See termsīģŋ

      " - ] - }, - { - "name": "ctas", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "

      Buy now

      " - ] - }, - { - "name": "variant", - "type": "text", - "multiple": false, - "locked": false, - "values": ["special-offers"] - }, - { - "name": "parent", - "type": "content-fragment", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "product", - "type": "content-reference", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "stockOffer", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "secure", - "type": "boolean", - "multiple": false, - "locked": false, - "values": [false] - }, - { - "name": "promoCode", - "type": "text", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "size", - "type": "text", - "multiple": false, - "locked": false, - "values": [] - } - ], - "variations": [], - "tags": [], - "references": [], - "model": { - "id": "L2NvbmYvc2FuZGJveC9zZXR0aW5ncy9kYW0vY2ZtL21vZGVscy9tZXJjaC1jYXJk", - "path": "/conf/sandbox/settings/dam/cfm/models/merch-card", - "name": "Merch Card", - "title": "Merch Card", - "description": "content for adobe.com merch-card web component." - }, - "fieldTags": [] - }, - { - "path": "/content/dam/mas/nala/ccd/slice-cc-allapps31211221", - "title": "CCD Suggested CC All Apps", - "description": "", - "id": "31205553-b453-4c9e-a2ef-7b6aa7bfdc72", - "created": { - "at": "2024-10-15T15:04:32.956Z", - "by": "sling-distribution-importer", - "fullName": "sling-distribution-importer" - }, - "modified": { - "at": "2024-10-15T14:56:59.693Z", - "by": "lukianet@adobe.com", - "fullName": "lukianet@adobe.com" - }, - "status": "DRAFT", - "fields": [ - { - "name": "variant", - "type": "text", - "multiple": false, - "locked": false, - "values": [ - "ccd-slice" - ] - }, - { - "name": "osi", - "type": "text", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "size", - "type": "text", - "multiple": false, - "locked": false, - "values": [ - "wide" - ] - }, - { - "name": "mnemonicIcon", - "type": "text", - "multiple": true, - "locked": false, - "values": [ - "https://www.adobe.com/cc-shared/assets/img/product-icons/svg/photoshop.svg" - ] - }, - { - "name": "mnemonicAlt", - "type": "text", - "multiple": true, - "locked": false, - "values": [] - }, - { - "name": "mnemonicLink", - "type": "text", - "multiple": true, - "locked": false, - "values": [] - }, - { - "name": "badge", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "High savings" - ] - }, - { - "name": "backgroundImage", - "type": "text", - "multiple": false, - "locked": false, - "values": [ - "https://milo.adobe.com/assets/img/commerce/media_10bef5ec21c22fd7fe201cb02735082df13bf4960.jpeg" - ] - }, - { - "name": "cardTitle", - "type": "text", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "cardTitleLink", - "type": "text", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "subtitle", - "type": "text", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "prices", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "shortDescription", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "description", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "

      Save 25% on Photoshop next month..

      See terms

      " - ] - }, - { - "name": "ctas", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [ - "

      Buy now

      " - ] - }, - { - "name": "parent", - "type": "content-fragment", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "product", - "type": "content-reference", - "multiple": false, - "locked": false, - "values": [] - }, - { - "name": "stockOffer", - "type": "long-text", - "multiple": false, - "locked": false, - "mimeType": "text/html", - "values": [] - }, - { - "name": "secure", - "type": "boolean", - "multiple": false, - "locked": false, - "values": [ - false - ] - }, - { - "name": "promoCode", - "type": "text", - "multiple": false, - "locked": false, - "values": [] - } - ], - "variations": [], - "tags": [], - "references": [], - "model": { - "id": "L2NvbmYvbWFzL3NldHRpbmdzL2RhbS9jZm0vbW9kZWxzL2NhcmQ", - "path": "/conf/mas/settings/dam/cfm/models/card", - "name": "Card", - "title": "Card", - "description": "universal m@s card model" - }, - "validationStatus": [], - "fieldTags": [] - } - ] -} diff --git a/libs/features/mas/mocks/snapshots.js b/libs/features/mas/mocks/snapshots.js deleted file mode 100644 index 21102aabeff..00000000000 --- a/libs/features/mas/mocks/snapshots.js +++ /dev/null @@ -1,169 +0,0 @@ -// HTML snapshots to compare with `innerHTML` of rendered web components - -const price = ` - - US$ - - 599 - . - 88 - /yr - - - -`; - -const strikethrough = ` - - US$ - - 599 - . - 88 - /yr - - - -`; - -const optical = ` - - US$ - - 49 - . - 99 - /mo - per license - excl. tax - -`; - -const annual = ` - - US$ - - 659 - . - 88 - /yr - - - -`; - -const promo = ` - - US$ - - 43 - . - 99 - /mo - - - -`; - -const promoStikethrough = ` - - US$ - - 43 - . - 99 - /mo - - - -  - - US$ - - 54 - . - 99 - /mo - - - -`; - -const customLiterals = ` - - US$ - - 54 - . - 99 - every month - - - -`; - -const taxExclusive = ` - - 41 - , - 65 -   - â‚Ŧ - /mo - - - -  - - 52 - , - 06 -   - â‚Ŧ - /mo - - - -`; - -const discount = `20%`; -const noDiscount = ``; - -const auAbmAnnual = ` - - A$ - - 32 - . - 98 - - - - - ( - - A$ - - 32 - . - 98 - - - - -) -`; - -export default { - customLiterals, - optical, - annual, - price, - promo, - promoStikethrough, - strikethrough, - taxExclusive, - discount, - noDiscount, - auAbmAnnual, -}; diff --git a/libs/features/mas/package-lock.json b/libs/features/mas/package-lock.json index 6f7deee15f2..41dc63a0a89 100644 --- a/libs/features/mas/package-lock.json +++ b/libs/features/mas/package-lock.json @@ -1,18 +1,25 @@ { - "name": "@adobecom/mas-platform", - "version": "0.0.1", + "name": "@adobecom/mas", + "version": "0.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@adobecom/mas-platform", - "version": "0.0.1", - "workspaces": [ - "commerce", - "mas", - "web-components" - ], - "dependencies": { + "name": "@adobecom/mas", + "version": "0.3.0", + "devDependencies": { + "@dexter/tacocat-core": "file:./internal/tacocat-core-1.13.1.tgz", + "@esm-bundle/chai": "4.3.4-fix.0", + "@esm-bundle/chai-as-promised": "7.1.1", + "@pandora/data-models-odm": "file:./internal/data-models-odm-0.5.4.tgz", + "@pandora/data-source-utils": "file:./internal/data-source-utils-0.3.1.tgz", + "@pandora/fetch": "file:./internal/fetch-1.3.4.tgz", + "@pandora/logger": "file:./internal/logger-1.3.0.tgz", + "@spectrum-css/button": "^13.5.0", + "@spectrum-css/link": "^5.2.0", + "@spectrum-css/page": "^8.2.0", + "@spectrum-css/tokens": "^14.6.0", + "@spectrum-css/typography": "^6.2.0", "@spectrum-web-components/action-button": "^0.46.0", "@spectrum-web-components/action-menu": "^0.46.0", "@spectrum-web-components/alert-dialog": "^0.46.0", @@ -50,112 +57,31 @@ "@spectrum-web-components/tooltip": "^0.46.0", "@spectrum-web-components/tray": "^0.46.0", "@spectrum-web-components/underlay": "^0.46.0", - "lit": "^2.8.0", - "markdown-it": "^14.1.0", - "markdown-it-anchor": "^9.2.0", - "markdown-it-attrs": "^4.2.0", - "markdown-it-container": "^4.0.0", - "markdown-it-highlightjs": "^4.2.0" - }, - "devDependencies": { - "@esm-bundle/chai": "4.3.4-fix.0", - "@esm-bundle/chai-as-promised": "7.1.1", "@types/chai-as-promised": "7.1.5", "@types/sinon": "10.0.15", + "@web/dev-server-import-maps": "^0.2.1", + "@web/test-runner": "^0.18.2", + "@web/test-runner-commands": "^0.9.0", + "esbuild": "^0.24.0", "eslint": "^9.5.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.1.3", "husky": "^9.0.11", + "intl-messageformat": "^9.9.0", + "lit": "^2.8.0", + "markdown-it": "^14.1.0", + "markdown-it-anchor": "^9.2.0", + "markdown-it-attrs": "^4.2.0", + "markdown-it-container": "^4.0.0", + "markdown-it-highlightjs": "^4.2.0", "prettier": "^3.3.2", "sinon": "13.0.1" } }, - "commerce": { - "name": "@adobecom/mas-commerce", - "version": "2.0.0", - "dependencies": { - "@dexter/tacocat-consonant-templates": "file:./internal/tacocat-consonant-templates-1.14.0.tgz", - "@dexter/tacocat-core": "file:./internal/tacocat-core-1.13.0.tgz", - "@pandora/commerce-checkout-url-builder": "file:./internal/commerce-checkout-url-builder-1.6.0.tgz", - "@pandora/data-models-odm": "file:./internal/data-models-odm-0.5.4.tgz", - "@pandora/data-source-utils": "file:./internal/data-source-utils-0.3.1.tgz", - "@pandora/fetch": "file:./internal/fetch-1.3.4.tgz", - "@pandora/logger": "file:./internal/logger-1.3.0.tgz" - }, - "devDependencies": { - "@web/dev-server-import-maps": "^0.1.1", - "@web/test-runner": "^0.13.27", - "@web/test-runner-commands": "^0.6.1", - "@web/test-runner-visual-regression": "^0.9.0", - "esbuild": "0.18.11" - } - }, - "mas": { - "name": "@adobecom/mas-js", - "version": "0.0.6", - "license": "ISC", - "devDependencies": { - "@web/test-runner": "^0.13.27", - "@web/test-runner-commands": "^0.6.1", - "esbuild": "^0.21.5", - "esbuild-node-externals": "^1.13.1" - } - }, - "mas/node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/@adobecom/mas-commerce": { - "resolved": "commerce", - "link": true - }, - "node_modules/@adobecom/mas-js": { - "resolved": "mas", - "link": true - }, - "node_modules/@adobecom/mas-web-components": { - "resolved": "web-components", - "link": true - }, "node_modules/@babel/code-frame": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.0.tgz", - "integrity": "sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -179,8 +105,7 @@ }, "node_modules/@browser-bunyan/console-formatted-stream": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@browser-bunyan/console-formatted-stream/-/console-formatted-stream-1.8.0.tgz", - "integrity": "sha512-Lg5SC2uXrvZ6aLwLZT6SErfN1Is4NcrTOb5km4BW/BfL8Lv0CfpsYuhuD7ltdURL6awTYBUiT+BwhKw1Xd9glQ==", + "dev": true, "license": "MIT", "dependencies": { "@browser-bunyan/levels": "^1.8.0" @@ -188,8 +113,7 @@ }, "node_modules/@browser-bunyan/console-plain-stream": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@browser-bunyan/console-plain-stream/-/console-plain-stream-1.8.0.tgz", - "integrity": "sha512-S0WNsH5zvMfkbayIx90wANGHQ8l3Bvd7mjgy95/bYmUzcI+Mwkv2eJcSufdTP/MbdHBhjv/lEdLDOXEPBi+w3A==", + "dev": true, "license": "MIT", "dependencies": { "@browser-bunyan/levels": "^1.8.0" @@ -197,8 +121,7 @@ }, "node_modules/@browser-bunyan/console-raw-stream": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@browser-bunyan/console-raw-stream/-/console-raw-stream-1.8.0.tgz", - "integrity": "sha512-6M/xEiNckbFslQMaS1BHAxvuvN1Wtbh/aq4UzQD3fjEPFCxtubvf4KyzwPxUXA5CXq7leVZ+cibEUCRBsm5bzg==", + "dev": true, "license": "MIT", "dependencies": { "@browser-bunyan/levels": "^1.8.0" @@ -206,29 +129,19 @@ }, "node_modules/@browser-bunyan/levels": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@browser-bunyan/levels/-/levels-1.8.0.tgz", - "integrity": "sha512-f9oSDik8kAl+4rhVyHqIr012P1boHFUKc7D9nzA5+lDsFoP90UQnDwpseqBdF2mTaWYju10E7h+GdH8u+7MHOQ==", + "dev": true, "license": "MIT" }, - "node_modules/@dexter/tacocat-consonant-templates": { - "version": "1.14.0", - "resolved": "file:commerce/internal/tacocat-consonant-templates-1.14.0.tgz", - "integrity": "sha512-QTN7+QAsDPJXVtPD3Dva1b/ko69DscS2WcGVOAAZfHy0RndvzPGrKvY3WCj6nDn+YExmcPThXe51mSRUFeCfWQ==", - "dependencies": { - "@dexter/tacocat-core": "^1.0.0", - "@pandora/data-models-odm": "0.5.4", - "intl-messageformat": "9.9.0" - } - }, "node_modules/@dexter/tacocat-core": { - "version": "1.13.0", - "resolved": "file:commerce/internal/tacocat-core-1.13.0.tgz", - "integrity": "sha512-3XWBVZk8/pvFxE+qcwcDHgpSYVrhK1Sm8I4PfMELpCxP2l0MbcxiBSMXAyLJZXbjSVT5gCzG45aHZEIAerBjBw==" + "version": "1.13.1", + "resolved": "file:internal/tacocat-core-1.13.1.tgz", + "integrity": "sha512-OaLzvaixggcD7Yl6I8NbznvCjZXfQsTg/ni40ZwUnoUmcVNK8f75+ZbhsrPF24k2jt7FfnHFwMNOc7CRLCxvxA==", + "dev": true }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", "cpu": [ "ppc64" ], @@ -239,13 +152,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", "cpu": [ "arm" ], @@ -256,13 +169,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", "cpu": [ "arm64" ], @@ -273,13 +186,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", "cpu": [ "x64" ], @@ -290,13 +203,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", "cpu": [ "arm64" ], @@ -307,13 +220,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", "cpu": [ "x64" ], @@ -324,13 +237,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", "cpu": [ "arm64" ], @@ -341,13 +254,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", "cpu": [ "x64" ], @@ -358,13 +271,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", "cpu": [ "arm" ], @@ -375,13 +288,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", "cpu": [ "arm64" ], @@ -392,13 +305,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", "cpu": [ "ia32" ], @@ -409,13 +322,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", "cpu": [ "loong64" ], @@ -426,13 +339,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", "cpu": [ "mips64el" ], @@ -443,13 +356,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", "cpu": [ "ppc64" ], @@ -460,13 +373,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", "cpu": [ "riscv64" ], @@ -477,13 +390,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", "cpu": [ "s390x" ], @@ -494,13 +407,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", "cpu": [ "x64" ], @@ -511,13 +424,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", "cpu": [ "x64" ], @@ -528,13 +441,30 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", "cpu": [ "x64" ], @@ -545,13 +475,13 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", "cpu": [ "x64" ], @@ -562,13 +492,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", "cpu": [ "arm64" ], @@ -579,13 +509,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", "cpu": [ "ia32" ], @@ -596,13 +526,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", "cpu": [ "x64" ], @@ -613,13 +543,11 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, "license": "MIT", "dependencies": { @@ -637,8 +565,6 @@ }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -650,8 +576,6 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -660,8 +584,6 @@ }, "node_modules/@eslint/config-array": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -675,8 +597,6 @@ }, "node_modules/@eslint/core": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", - "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -685,8 +605,6 @@ }, "node_modules/@eslint/eslintrc": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, "license": "MIT", "dependencies": { @@ -709,8 +627,6 @@ }, "node_modules/@eslint/js": { "version": "9.13.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz", - "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==", "dev": true, "license": "MIT", "engines": { @@ -719,8 +635,6 @@ }, "node_modules/@eslint/object-schema": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -729,8 +643,6 @@ }, "node_modules/@eslint/plugin-kit": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", - "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -742,8 +654,6 @@ }, "node_modules/@esm-bundle/chai": { "version": "4.3.4-fix.0", - "resolved": "https://registry.npmjs.org/@esm-bundle/chai/-/chai-4.3.4-fix.0.tgz", - "integrity": "sha512-26SKdM4uvDWlY8/OOOxSB1AqQWeBosCX3wRYUZO7enTAj03CtVxIiCimYVG2WpULcyV51qapK4qTovwkUr5Mlw==", "dev": true, "license": "MIT", "dependencies": { @@ -752,15 +662,12 @@ }, "node_modules/@esm-bundle/chai-as-promised": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@esm-bundle/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-qhDeW3gK3ITAzzhZj8QfvuhX7iNqyzooVZJnoW5bjIotxxJM92O9EKxdxBg4B35hjh3tV1chlEgC/pfR9cVRlA==", "dev": true, "license": "MIT" }, "node_modules/@floating-ui/core": { "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", - "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "dev": true, "license": "MIT", "dependencies": { "@floating-ui/utils": "^0.2.8" @@ -768,8 +675,7 @@ }, "node_modules/@floating-ui/dom": { "version": "1.6.12", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", - "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "dev": true, "license": "MIT", "dependencies": { "@floating-ui/core": "^1.6.0", @@ -778,54 +684,58 @@ }, "node_modules/@floating-ui/utils": { "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", - "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", + "dev": true, "license": "MIT" }, "node_modules/@formatjs/ecma402-abstract": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.9.7.tgz", - "integrity": "sha512-Lu05JjSlL4QbXLiJHcljmWLSSKoxc4ed6aAz4ZPIJn7HsgzoObR4wKllFVcEWnIfiW8FIWITOZjXjoZ8MamSJA==", + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", + "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", + "dev": true, "license": "MIT", "dependencies": { - "@formatjs/intl-localematcher": "0.2.20", + "@formatjs/intl-localematcher": "0.2.25", "tslib": "^2.1.0" } }, "node_modules/@formatjs/fast-memoize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.0.tgz", - "integrity": "sha512-fObitP9Tlc31SKrPHgkPgQpGo4+4yXfQQITTCNH8AZdEqB7Mq4nPrjpUL/tNGN3lEeJcFxDbi0haX8HM7QvQ8w==", - "license": "ISC", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz", + "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==", + "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.10.tgz", - "integrity": "sha512-X1HTDTs0sdLVFFJLZuJ4+YfMMWv7/wGsoE7yIQkzKlck3HrAA/dBZDR1sOwcxH7Rz8NY1K+oUOkPe/f1sa7Q8g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz", + "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==", + "dev": true, "license": "MIT", "dependencies": { - "@formatjs/ecma402-abstract": "1.9.7", - "@formatjs/icu-skeleton-parser": "1.2.11", + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/icu-skeleton-parser": "1.3.6", "tslib": "^2.1.0" } }, "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.2.11.tgz", - "integrity": "sha512-nvme882npz//T17BR5S1xdNqv10CSlHsaPZ1iUxVrDTlotQHcr7O5qkX6JjpQ6qPflTt2s4k0W9nkMcFIfDuFg==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz", + "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==", + "dev": true, "license": "MIT", "dependencies": { - "@formatjs/ecma402-abstract": "1.9.7", + "@formatjs/ecma402-abstract": "1.11.4", "tslib": "^2.1.0" } }, "node_modules/@formatjs/intl-localematcher": { - "version": "0.2.20", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.20.tgz", - "integrity": "sha512-/Ro85goRZnCojzxOegANFYL0LaDIpdPjAukR7xMTjOtRx+3yyjR0ifGTOW3/Kjhmab3t6GnyHBYWZSudxEOxPA==", + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.1.0" @@ -840,8 +750,6 @@ }, "node_modules/@humanfs/core": { "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -850,8 +758,6 @@ }, "node_modules/@humanfs/node": { "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -864,8 +770,6 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -878,8 +782,6 @@ }, "node_modules/@humanwhocodes/retry": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -897,10 +799,37 @@ "dev": true, "license": "MIT" }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@lit-labs/observers": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@lit-labs/observers/-/observers-2.0.4.tgz", - "integrity": "sha512-x95jhDPGb+HtYU3hEdqkcLxb6v2JBP3tcajaiOijs1F/ZmOgRT0pRPn0v+jhhk8mAAbEO12SZJjPCmuysunssQ==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@lit/reactive-element": "^1.0.0 || ^2.0.0", @@ -909,26 +838,17 @@ }, "node_modules/@lit-labs/ssr-dom-shim": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.1.tgz", - "integrity": "sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@lit/reactive-element": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", - "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.2.0" } }, - "node_modules/@mdn/browser-compat-data": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.2.1.tgz", - "integrity": "sha512-EWUguj2kd7ldmrF9F+vI5hUOralPd+sdsUnYbRy33vZTuZkduC1shE9TtEMEjAQwyfyMb4ole5KtjF8MsnQOlA==", - "dev": true, - "license": "CC0-1.0" - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -969,32 +889,24 @@ }, "node_modules/@opentelemetry/api": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=8.0.0" } }, - "node_modules/@pandora/commerce-checkout-url-builder": { - "version": "1.6.0", - "resolved": "file:commerce/internal/commerce-checkout-url-builder-1.6.0.tgz", - "integrity": "sha512-AFWqTieWnkSNhb7qfLkSzjExEvkHrgC0cuPQKDb9ZxVHxbNlUHd+Mjx2i1UhhPKYPSHihvcurUGA7HY32Ur8zg==", - "license": "SEE LICENSE IN license.txt", - "dependencies": { - "@pandora/data-source-utils": "^0.3.1" - } - }, "node_modules/@pandora/data-models-odm": { "version": "0.5.4", - "resolved": "file:commerce/internal/data-models-odm-0.5.4.tgz", + "resolved": "file:internal/data-models-odm-0.5.4.tgz", "integrity": "sha512-6H0DPaHiT+6/Bsrrumn67xfEWMmfS2Xp+80csEadsY2m/my/wYa5wpYblOnw0pEoFzXc6FCUp3TZHVFeulbkEQ==", + "dev": true, "license": "SEE LICENSE IN license.txt" }, "node_modules/@pandora/data-source-utils": { "version": "0.3.1", - "resolved": "file:commerce/internal/data-source-utils-0.3.1.tgz", + "resolved": "file:internal/data-source-utils-0.3.1.tgz", "integrity": "sha512-BL73lgHIV/R1o5oJ5ZZlYkA0q9hKL/W0r6e+C10tEyF2fTlGGIQIfAxDhWLxQk5hFFCO9d9TznsdfFExxxFLrg==", + "dev": true, "license": "SEE LICENSE IN license.txt", "dependencies": { "@pandora/fetch": "^1.0.1" @@ -1002,8 +914,9 @@ }, "node_modules/@pandora/fetch": { "version": "1.3.4", - "resolved": "file:commerce/internal/fetch-1.3.4.tgz", + "resolved": "file:internal/fetch-1.3.4.tgz", "integrity": "sha512-ZV4CH/lFgFhQ76Ek54z9swQGTdKfRjYlIMLo+PNPCUbWmEVlIqPUZBuYkwe+77nrkXsyRf4oVhehDjQaeMz8Ow==", + "dev": true, "license": "SEE LICENSE IN license.txt", "dependencies": { "@opentelemetry/api": "^1.6.0", @@ -1014,8 +927,9 @@ }, "node_modules/@pandora/logger": { "version": "1.3.0", - "resolved": "file:commerce/internal/logger-1.3.0.tgz", + "resolved": "file:internal/logger-1.3.0.tgz", "integrity": "sha512-pFHi7CCUTEg3+PGgF7gvpOneB9qlkfwfSbGIwMhp47Me4uIGgHocnyqKxn2AUtIR2DKN26zESGRIypuKttA+aw==", + "dev": true, "license": "Proprietary. Adobe.", "dependencies": { "browser-bunyan": "^1.5.3", @@ -1026,8 +940,6 @@ }, "node_modules/@pkgr/core": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, "license": "MIT", "engines": { @@ -1037,6 +949,29 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@puppeteer/browsers": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.3.0.tgz", + "integrity": "sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.3.5", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.0.tgz", @@ -1098,78 +1033,388 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz", + "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==", + "cpu": [ + "arm" + ], "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } + "license": "MIT", + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz", + "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } + "license": "MIT", + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@sinonjs/samsam": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.3.tgz", - "integrity": "sha512-nhOb2dWPeb1sd3IQXL/dVPnKHDOAFfvichtBf4xV00/rU1QbPCQqKMbvIheIjqwVjh7qIgf2AHTHi391yMOMpQ==", + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz", + "integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.6.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" - } + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", - "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz", + "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "(Unlicense OR Apache-2.0)" - }, - "node_modules/@spectrum-web-components/action-button": { - "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/action-button/-/action-button-0.46.0.tgz", - "integrity": "sha512-UH5zTb/+l0/pgz5zyf7kcuDLNPx1rOvewlGDGBdppEfGFYiouS8LeIxCoiy4pfvJ+07rdld0DTaTAIsFTgdnDw==", - "license": "Apache-2.0", - "dependencies": { - "@spectrum-web-components/base": "^0.46.0", - "@spectrum-web-components/button": "^0.46.0", - "@spectrum-web-components/icon": "^0.46.0", - "@spectrum-web-components/icons-ui": "^0.46.0", - "@spectrum-web-components/shared": "^0.46.0" - } + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@spectrum-web-components/action-menu": { - "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/action-menu/-/action-menu-0.46.0.tgz", - "integrity": "sha512-U0umNJiYH97JG0vEX6JrFfk/3g6kxW/dQjaQj5G3Bp1CALtaYAd/42teVhb+MAMKfuBC+8Fkk9ghYfZYGkH5tQ==", - "license": "Apache-2.0", - "dependencies": { - "@spectrum-web-components/action-button": "^0.46.0", - "@spectrum-web-components/base": "^0.46.0", - "@spectrum-web-components/icon": "^0.46.0", - "@spectrum-web-components/icons-workflow": "^0.46.0", - "@spectrum-web-components/picker": "^0.46.0", - "@spectrum-web-components/shared": "^0.46.0" - } + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz", + "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@spectrum-web-components/alert-dialog": { - "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/alert-dialog/-/alert-dialog-0.46.0.tgz", - "integrity": "sha512-WRbQ1TJuiBNH+0w73LkZvdh7ysvAcxGps77QiK3g+Be+/WvRbK6US0fo/hgICdUF++vPexlZy7ytNZf1H6DdPg==", - "license": "Apache-2.0", - "dependencies": { + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz", + "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz", + "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz", + "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz", + "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz", + "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz", + "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz", + "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz", + "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz", + "integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz", + "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz", + "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz", + "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz", + "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "6.1.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.3", + "dev": true, + "license": "(Unlicense OR Apache-2.0)" + }, + "node_modules/@spectrum-css/button": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@spectrum-css/button/-/button-13.5.0.tgz", + "integrity": "sha512-0uKR1y3q/kI84vUXwAEl3SFUzNpd9+wJoRwJNx6F0m8mziJJknEhiEu077R0RuIU1eSZ+BOEkmaP0MLA49HRmg==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "@spectrum-css/icon": ">=7", + "@spectrum-css/progresscircle": ">=3", + "@spectrum-css/tokens": ">=14" + }, + "peerDependenciesMeta": { + "@spectrum-css/icon": { + "optional": true + }, + "@spectrum-css/progresscircle": { + "optional": true + } + } + }, + "node_modules/@spectrum-css/icon": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@spectrum-css/icon/-/icon-7.2.0.tgz", + "integrity": "sha512-P3mnpMxqNZ+YJGhjAHKrcUpKp9wLa2RnuZVYtUsh8bweb4MlYm/4/a2VzeQunrgziU17YNG5KrXyRHpWHv1U9w==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "peer": true, + "peerDependencies": { + "@spectrum-css/tokens": ">=14" + } + }, + "node_modules/@spectrum-css/link": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@spectrum-css/link/-/link-5.2.0.tgz", + "integrity": "sha512-v2jo3rejLOlQvIQrXFG/otmF3rLQlbbXPsB3zx62u8JXZa83MExRToEFZJ62BtO/h62cAW6EJ5zK4sN63YO47g==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "@spectrum-css/tokens": ">=14" + } + }, + "node_modules/@spectrum-css/page": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@spectrum-css/page/-/page-8.2.0.tgz", + "integrity": "sha512-zEOaGprMKsDCGf0e4o6KMDi6WJdQ29tHYjOzghFSLMN4V0Pilr/jSifWts12e6vtqAQDhhgRTfQrGIQrLCnXTA==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "@spectrum-css/tokens": ">=14" + } + }, + "node_modules/@spectrum-css/tokens": { + "version": "14.6.0", + "resolved": "https://registry.npmjs.org/@spectrum-css/tokens/-/tokens-14.6.0.tgz", + "integrity": "sha512-v/ko2A2i2v4ShHizSdRkOs0fYBVLdiQe5yN/ECFBjpamd0YJHfZGh4uBIGSG+uZjwWpHbKhRusdCRFJKJ+WNYQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@spectrum-css/typography": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@spectrum-css/typography/-/typography-6.2.0.tgz", + "integrity": "sha512-yaqc4wFY3asUhh3zzdqRI5dVJow7xJ2nL2bo4AADDLT305Dtje5PYO89m+f3nTVf2utKE3H8nlJbWUG57QpFqw==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "@spectrum-css/tokens": ">=14.5.0" + } + }, + "node_modules/@spectrum-web-components/action-button": { + "version": "0.46.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@spectrum-web-components/base": "^0.46.0", + "@spectrum-web-components/button": "^0.46.0", + "@spectrum-web-components/icon": "^0.46.0", + "@spectrum-web-components/icons-ui": "^0.46.0", + "@spectrum-web-components/shared": "^0.46.0" + } + }, + "node_modules/@spectrum-web-components/action-menu": { + "version": "0.46.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@spectrum-web-components/action-button": "^0.46.0", + "@spectrum-web-components/base": "^0.46.0", + "@spectrum-web-components/icon": "^0.46.0", + "@spectrum-web-components/icons-workflow": "^0.46.0", + "@spectrum-web-components/picker": "^0.46.0", + "@spectrum-web-components/shared": "^0.46.0" + } + }, + "node_modules/@spectrum-web-components/alert-dialog": { + "version": "0.46.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { "@lit-labs/observers": "^2.0.2", "@spectrum-web-components/base": "^0.46.0", "@spectrum-web-components/button": "^0.46.0", @@ -1181,8 +1426,7 @@ }, "node_modules/@spectrum-web-components/base": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/base/-/base-0.46.0.tgz", - "integrity": "sha512-WSyCnUDw8ecCio6nM4wDvLWlmDZxhoKSn57iBvWqXvn61IewYOY3P8E77uGg+dcfL8DixQph6+FGThh5T7hukQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { "lit": "^2.5.0 || ^3.1.3" @@ -1190,8 +1434,7 @@ }, "node_modules/@spectrum-web-components/button": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/button/-/button-0.46.0.tgz", - "integrity": "sha512-wUcp258sFJ7u+CNm0Rw8pPXHtagdYJiqyqcZcNiNG/ODXxXDo5PpKH38gV6DHqH0XWY/cUe4CibiFlXvDcv87w==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1205,8 +1448,7 @@ }, "node_modules/@spectrum-web-components/button-group": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/button-group/-/button-group-0.46.0.tgz", - "integrity": "sha512-u84QGFxKHmcRRTmDw/I/MTjX7LLju1LJnrwQuO6YlWntoapVEXhiye5TJeoCckvTSEGTuZIeg3vdTErds0dQag==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1215,8 +1457,7 @@ }, "node_modules/@spectrum-web-components/checkbox": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/checkbox/-/checkbox-0.46.0.tgz", - "integrity": "sha512-0D00lpv39IXfiVOKW1yz5G9tY4TJdqBh8xODOS1FmbXftPW0vm6RNqVzurdeQRzoJrvsD/CPy8j9PKCa70/yXA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1227,8 +1468,7 @@ }, "node_modules/@spectrum-web-components/clear-button": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/clear-button/-/clear-button-0.46.0.tgz", - "integrity": "sha512-63m2lN6MZymUJonaElxUP4LRfJ4Z9B+JP7RnZNrOhWP4WKfYo/8d7zjGAbuZwRFlBKFqYvdk2rLjE2Orpf0QTg==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0" @@ -1236,8 +1476,7 @@ }, "node_modules/@spectrum-web-components/close-button": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/close-button/-/close-button-0.46.0.tgz", - "integrity": "sha512-fBQVrC5zEpshehdfoWTLvNzCsDMBln+PibsKLsRkCrTqDvK/WibeRbcERjwGZxD1Y6NTZavVaOxYrFY7UqVVKA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0" @@ -1245,8 +1484,7 @@ }, "node_modules/@spectrum-web-components/dialog": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/dialog/-/dialog-0.46.0.tgz", - "integrity": "sha512-Yawwt53UnrGYFA+gKw9pIGq4wCqMlrZCxFv603esdUMdkJuXx9DHAwT2zGNi6N0irReEQMSw1gzAdNAkYeD/3g==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/alert-dialog": "^0.46.0", @@ -1262,8 +1500,7 @@ }, "node_modules/@spectrum-web-components/divider": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/divider/-/divider-0.46.0.tgz", - "integrity": "sha512-kCs1/LBCXIbjaVQtnten4CBSn9ZbS9vyO0w1qFUqcMe2MlZutuEqCKCDhkIpuE3CRBQkpHsz4Ny8mDZreaXEPA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0" @@ -1271,8 +1508,7 @@ }, "node_modules/@spectrum-web-components/field-group": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/field-group/-/field-group-0.46.0.tgz", - "integrity": "sha512-LDvQsFmQq6uPEkq5mrgUT6zJl/bWXYuRbT0Q+t8hXuzSCvMmAoPe6026IBAuQcKmePj0BQja/2nAwBlli8nzIw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1281,8 +1517,7 @@ }, "node_modules/@spectrum-web-components/field-label": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/field-label/-/field-label-0.46.0.tgz", - "integrity": "sha512-3sw0lGIflHYxGI+V7iUEOVYAk4o7xXo1DOxaIDrjcLXihHdXPpjadX4t/4Jdzg/TDsZu2yfotoNtWO2zI7cP2g==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1294,8 +1529,7 @@ }, "node_modules/@spectrum-web-components/help-text": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/help-text/-/help-text-0.46.0.tgz", - "integrity": "sha512-n45Ib5oV9sAZvp7JVY7akKzfuilKBw3zuJxo/sRplGCwwQYfo9+/sMhAnwCNNLixeXTZyuKkuPXD4vk5OeDc7w==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1305,8 +1539,7 @@ }, "node_modules/@spectrum-web-components/icon": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/icon/-/icon-0.46.0.tgz", - "integrity": "sha512-iPxEXVzyOYwnsmv955fpqHbcrL0lrPXNzT8HDoZiRur5XD+emfwC7yFs5Vmr4vunSV7jShZKH4DqFKI5mqH/QQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1315,8 +1548,7 @@ }, "node_modules/@spectrum-web-components/icons": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/icons/-/icons-0.46.0.tgz", - "integrity": "sha512-7cU57zv0hHqKuFoE5DZaKK3kkOzkrneyMaQRfiqN+4kMCESRfd8i1FX8zki8sBys5g2RDGiMVcndBPh7nLOKOA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1325,8 +1557,7 @@ }, "node_modules/@spectrum-web-components/icons-ui": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/icons-ui/-/icons-ui-0.46.0.tgz", - "integrity": "sha512-uUsdxq6FGL24+/x0VLMtjfQfjgysuukDANJYdCTBBmZhmaRJpsAQBJkJOis/7tGp/V82NOQLtl2qInicu6W8nQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1336,8 +1567,7 @@ }, "node_modules/@spectrum-web-components/icons-workflow": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/icons-workflow/-/icons-workflow-0.46.0.tgz", - "integrity": "sha512-/c28yimF5mrGCG6dPueDUxFRq1be9Z1zBQOyODNtvDACDCa083+dTRFe5LOVufSbBylzIji+zHJPZWjqraQeSA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1346,8 +1576,7 @@ }, "node_modules/@spectrum-web-components/iconset": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/iconset/-/iconset-0.46.0.tgz", - "integrity": "sha512-TamL40x6SAK/utL9udAJcWxQl2zmpTlyOkA5Y4PoHYLsQfYagA98tGUCCfXcHUktoa3FF5TANZQeKSr/B7/6aA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0" @@ -1355,8 +1584,7 @@ }, "node_modules/@spectrum-web-components/link": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/link/-/link-0.46.0.tgz", - "integrity": "sha512-FL8PR6pEx/rDVDF0CKqPSzKQIe6xKMmZ5t11MzU8du3l1oL+KsPsy1rMx8vj8kNu1IB7EV6fTeAj6v+AWDLdmw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1365,8 +1593,7 @@ }, "node_modules/@spectrum-web-components/menu": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/menu/-/menu-0.46.0.tgz", - "integrity": "sha512-yIn4rPin76h9oNd1kAqXUX/3UMwp9KxxyH/xo/Ec45/hrIy6OgYh3N0UJjbXpnU5IrlRn1GPBV8B1R3p3OXYbQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@lit-labs/observers": "^2.0.2", @@ -1383,8 +1610,7 @@ }, "node_modules/@spectrum-web-components/modal": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/modal/-/modal-0.46.0.tgz", - "integrity": "sha512-lCirDmLbQbO5rEEw8DKEKw+f/aUTjXs47cmWasvntQ+98Mw6v++IPeWHLemGK7gcpahTppubrAm2+x//u677oA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0" @@ -1392,8 +1618,7 @@ }, "node_modules/@spectrum-web-components/overlay": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/overlay/-/overlay-0.46.0.tgz", - "integrity": "sha512-DgRqNOmJEGsgfsXZhdgEbtq8eShpgiQjQyIixrm02trp0Lu9JzhaZk1Rd58JNVRvpQ3mlPxnbul02WdSqowbWA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@floating-ui/dom": "^1.6.1", @@ -1407,8 +1632,7 @@ }, "node_modules/@spectrum-web-components/picker": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/picker/-/picker-0.46.0.tgz", - "integrity": "sha512-Up2dMkLnk3wJugRpfnzv612lLS4nG+E8UHq1ddde1YFKGUZwIHMcP7l+8PQOfFYogUE1kTDeEAIsXgiMcMRAUA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1429,8 +1653,7 @@ }, "node_modules/@spectrum-web-components/popover": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/popover/-/popover-0.46.0.tgz", - "integrity": "sha512-go0rWNjWW3xCA/3jbCRHgZnZU3gicAMSA2JSJqL84ADAIgbmbD932C6LDJOFljT+Dat98HjFOI6JbPsYsF9RBA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1439,8 +1662,7 @@ }, "node_modules/@spectrum-web-components/progress-circle": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/progress-circle/-/progress-circle-0.46.0.tgz", - "integrity": "sha512-CF27VS0NtCWa7qKj2Ol26pF9xv3ZmPCYyrGGt8R98ht6viMUfeq2DqyM53eGIAt5xzSaJLrR1rCx+NtXUukc/A==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1449,8 +1671,7 @@ }, "node_modules/@spectrum-web-components/radio": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/radio/-/radio-0.46.0.tgz", - "integrity": "sha512-CvQkkbtq9a2ZcaRjZIpQB10dHMWMxqUN9HlAesAwWWk3K34JvwHpyT3EOluG3fgkSmQUc3ZzyVTwz9lUKt0chA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1462,8 +1683,7 @@ }, "node_modules/@spectrum-web-components/reactive-controllers": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/reactive-controllers/-/reactive-controllers-0.46.0.tgz", - "integrity": "sha512-Fggd8tlpjVEwu76N6lQtrQwT1gIrcxfE2DDISdQm7CyCCt92Ag4g1VJxd/EusMzWID3dR7K0kMGNKh2mTRCNqw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "lit": "^3.1.3" @@ -1471,8 +1691,7 @@ }, "node_modules/@spectrum-web-components/reactive-controllers/node_modules/lit": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.2.1.tgz", - "integrity": "sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@lit/reactive-element": "^2.0.4", @@ -1482,8 +1701,7 @@ }, "node_modules/@spectrum-web-components/reactive-controllers/node_modules/lit-element": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", - "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.2.0", @@ -1493,8 +1711,7 @@ }, "node_modules/@spectrum-web-components/search": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/search/-/search-0.46.0.tgz", - "integrity": "sha512-Cpv7+SXtu63yMRrIK0RNoTvwA8R/Y+ze4U7CWr1IqA55TkHf1Osm/etjGQ0qCqWcf4YCIXW06Hl041i7E7h9Dw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1506,8 +1723,7 @@ }, "node_modules/@spectrum-web-components/shared": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/shared/-/shared-0.46.0.tgz", - "integrity": "sha512-+Ol2Mo/GQsZybq8O+7rbF6K5WsFByI8inNg4nQt9H4dIYCyxgLVCQTX+yk/kywcdPXbaRELlJtrecMuBYwRAzw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@lit-labs/observers": "^2.0.2", @@ -1517,8 +1733,7 @@ }, "node_modules/@spectrum-web-components/sidenav": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/sidenav/-/sidenav-0.46.0.tgz", - "integrity": "sha512-yj/0Ly/5lHZQFbBvSA0mi0eTOKU0/nxXlO3zD76ZWEYRTefzF+lK0AoS7bLwnHYVdD1QiieTcSAKB/ruj1UDrw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1528,8 +1743,7 @@ }, "node_modules/@spectrum-web-components/split-button": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/split-button/-/split-button-0.46.0.tgz", - "integrity": "sha512-5zI0IO9VSGdF89J4CxZmzSObeTHAPu2/NRg+/2mlFlxbd3q/lCjXUE4qh/LMUsvRYi8N+A8L8uib5P51nyOXWQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1545,8 +1759,7 @@ }, "node_modules/@spectrum-web-components/styles": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/styles/-/styles-0.46.0.tgz", - "integrity": "sha512-gQWvHV+vUAfRKTg3EWDRyo2HaOKCJmScjeCk42s/SPzDOvJKUWFKa61E4M8eIpsHcGOrhLdA/Tou0eNoQ8MQrQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0" @@ -1554,8 +1767,7 @@ }, "node_modules/@spectrum-web-components/tabs": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/tabs/-/tabs-0.46.0.tgz", - "integrity": "sha512-2HWYPx/BRio9UVhIKmQe/kJQQKiTHokYIjNcl/SNmsNG4QtyUHOPPp145B0Th3brCHYyuBrev1Khba5Q9I1RxA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@lit-labs/observers": "^2.0.2", @@ -1568,8 +1780,7 @@ }, "node_modules/@spectrum-web-components/textfield": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/textfield/-/textfield-0.46.0.tgz", - "integrity": "sha512-YdLV0i3/5tVvVzIRhLndhLRh1kFK1UsvaZzbbK/IV+fid876dkuTf6t9wdmC+nP03BZm9Niw9Ip/UNs+Y7bj7g==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1582,8 +1793,7 @@ }, "node_modules/@spectrum-web-components/theme": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/theme/-/theme-0.46.0.tgz", - "integrity": "sha512-WSVpLhZ3lpSvLriLEhAdaypE+hMM0klU/GAd1XqIZHdlPplqKZTe1KPvYb4Y9zS6hlg7rR7b7Xo2guYy5xwXig==", + "dev": true, "license": "ISC", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1592,8 +1802,7 @@ }, "node_modules/@spectrum-web-components/toast": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/toast/-/toast-0.46.0.tgz", - "integrity": "sha512-2WC6AxCaRvrWT1OsyuxQUnG6NJlOgef5czZD3nn4l7GeQzJEOeQntMjeJgrBFXEX3HXM1AanId43INz4h7xAhg==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1605,8 +1814,7 @@ }, "node_modules/@spectrum-web-components/tooltip": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/tooltip/-/tooltip-0.46.0.tgz", - "integrity": "sha512-G0MKxiBtX9+Q4Xh71lTj7J8EE9ZuBtuTiJmqQu1NUv2XpQXGtbpl0FunIbmKN0e28TrbZSjAUHvjqvbaL8O8rA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1617,8 +1825,7 @@ }, "node_modules/@spectrum-web-components/tray": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/tray/-/tray-0.46.0.tgz", - "integrity": "sha512-NaAGJaJSkZi3ybUsRdTzNgS5UFnR0OVTyid7biEBX8HLhdqMBD3hD7CsTVUspyRCNwYw6TOnxzYsETaNnIIT6A==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0", @@ -1630,13 +1837,19 @@ }, "node_modules/@spectrum-web-components/underlay": { "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@spectrum-web-components/underlay/-/underlay-0.46.0.tgz", - "integrity": "sha512-qsV6WwTtlEI4SsDE6C3QyzxSN/oni+gRzObjKuCZttV42VZi9FOCVoh5/EXBv5mfhYcoM7jvJRjoLTpWcgoAZw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@spectrum-web-components/base": "^0.46.0" } }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", @@ -1667,15 +1880,11 @@ }, "node_modules/@types/chai": { "version": "4.3.20", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", - "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", "dev": true, "license": "MIT" }, "node_modules/@types/chai-as-promised": { "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", - "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1746,8 +1955,6 @@ }, "node_modules/@types/estree": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true, "license": "MIT" }, @@ -1765,9 +1972,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz", - "integrity": "sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz", + "integrity": "sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==", "dev": true, "license": "MIT", "dependencies": { @@ -1820,8 +2027,6 @@ }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, @@ -1861,15 +2066,13 @@ }, "node_modules/@types/linkify-it": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, "license": "MIT", "peer": true }, "node_modules/@types/markdown-it": { "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", - "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -1879,8 +2082,7 @@ }, "node_modules/@types/mdurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, "license": "MIT", "peer": true }, @@ -1891,27 +2093,10 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/mkdirp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-1.0.2.tgz", - "integrity": "sha512-o0K1tSO0Dx5X6xlU5F1D6625FawhC3dU3iqr25lluNv/+/QIVH8RLNEiVokgIZo+mz+87w/3Mkg/VvQS+J51fQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mocha": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", - "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/node": { - "version": "22.8.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.4.tgz", - "integrity": "sha512-SpNNxkftTJOPk0oN+y2bIqurEXHTA2AOZ3EJDDKeJ5VzkvvORSvmQXGQarcOzWV1ac7DCaPBEdMDxBsM+d8jWw==", + "version": "22.9.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.3.tgz", + "integrity": "sha512-F3u1fs/fce3FFk+DAxbxc78DF8x0cY09RRL8GnXLmkJ1jvx3TtPdWoTT5/NiYfI5ASqXBmfqJi9dZ3gxMx4lzw==", "dev": true, "license": "MIT", "dependencies": { @@ -1925,30 +2110,10 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/pixelmatch": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/@types/pixelmatch/-/pixelmatch-5.2.6.tgz", - "integrity": "sha512-wC83uexE5KGuUODn6zkm9gMzTwdY5L0chiK+VrKcDfEjzxh1uadlWTvOmAbCpnM9zx/Ww3f8uKlYQVnO/TrqVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/pngjs": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/@types/pngjs/-/pngjs-6.0.5.tgz", - "integrity": "sha512-0k5eKfrA83JOZPppLtS2C7OUtyNAl2wKNxfyYl9Q5g9lPkgBl/9hNyAu6HuEH2J4XmIv2znEpkDd0SaZVxW6iQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/qs": { - "version": "6.9.16", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", - "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", + "version": "6.9.17", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", + "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", "dev": true, "license": "MIT" }, @@ -1991,8 +2156,6 @@ }, "node_modules/@types/sinon": { "version": "10.0.15", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.15.tgz", - "integrity": "sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2001,15 +2164,12 @@ }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.5", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", - "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", "dev": true, "license": "MIT" }, "node_modules/@types/trusted-types": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, "license": "MIT" }, "node_modules/@types/ws": { @@ -2034,49 +2194,46 @@ } }, "node_modules/@web/browser-logs": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.2.6.tgz", - "integrity": "sha512-CNjNVhd4FplRY8PPWIAt02vAowJAVcOoTNrR/NNb/o9pka7yI9qdjpWrWhEbPr2pOXonWb52AeAgdK66B8ZH7w==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.4.0.tgz", + "integrity": "sha512-/EBiDAUCJ2DzZhaFxTPRIznEPeafdLbXShIL6aTu7x73x7ZoxSDv7DGuTsh2rWNMUa4+AKli4UORrpyv6QBOiA==", "dev": true, "license": "MIT", "dependencies": { "errorstacks": "^2.2.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.0.0" } }, "node_modules/@web/config-loader": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.2.2.tgz", - "integrity": "sha512-HhoXMGivHbQ880MKQ1JChYCjWsMS4MUNOF35ktLV/0pZiX+J7oobybsPuyhS+gTnZsU7Duqnk3+HQYB7cNS4fA==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.3.2.tgz", + "integrity": "sha512-Vrjv/FexBGmAdnCYpJKLHX1dfT1UaUdvHmX1JRaWos9OvDf/tFznYJ5SpJwww3Rl87/ewvLSYG7kfsMqEAsizQ==", "dev": true, "license": "MIT", - "dependencies": { - "semver": "^7.3.4" - }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@web/dev-server": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.3.7.tgz", - "integrity": "sha512-He/QTO1C+zWJesgOmGbuBX5p5OEbH9hxgELDVIscQAdOq91PpQN/4s8PJ3LIRpkbXAZBxdwCoRUZHENxHgOtjg==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.4.6.tgz", + "integrity": "sha512-jj/1bcElAy5EZet8m2CcUdzxT+CRvUjIXGh8Lt7vxtthkN9PzY9wlhWx/9WOs5iwlnG1oj0VGo6f/zvbPO0s9w==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.11", "@types/command-line-args": "^5.0.0", - "@web/config-loader": "^0.2.2", - "@web/dev-server-core": "^0.6.3", - "@web/dev-server-rollup": "^0.5.4", + "@web/config-loader": "^0.3.0", + "@web/dev-server-core": "^0.7.2", + "@web/dev-server-rollup": "^0.6.1", "camelcase": "^6.2.0", "command-line-args": "^5.1.1", "command-line-usage": "^7.0.1", "debounce": "^1.2.0", "deepmerge": "^4.2.2", - "ip": "^1.1.5", + "internal-ip": "^6.2.0", "nanocolors": "^0.2.1", "open": "^8.0.2", "portfinder": "^1.0.32" @@ -2086,20 +2243,20 @@ "web-dev-server": "dist/bin.js" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@web/dev-server-core": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.6.3.tgz", - "integrity": "sha512-BWlgxIXQbg3RqUdz9Cfeh3XqFv0KcjQi4DLaZy9s63IlXgNZTzesTfDzliP/mIdWd5r8KZYh/P3n6LMi7CLPjQ==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.7.4.tgz", + "integrity": "sha512-nHSNrJ1J9GjmSceKNHpWRMjvpfE2NTV9EYUffPIr7j0sIV59gK7NI/4+9slotJ/ODXw0+e1gSeJshTOhjjVNxQ==", "dev": true, "license": "MIT", "dependencies": { "@types/koa": "^2.11.6", "@types/ws": "^7.4.0", - "@web/parse5-utils": "^2.0.2", - "chokidar": "^3.4.3", + "@web/parse5-utils": "^2.1.0", + "chokidar": "^4.0.1", "clone": "^2.1.2", "es-module-lexer": "^1.0.0", "get-stream": "^6.0.0", @@ -2113,1245 +2270,220 @@ "mime-types": "^2.1.27", "parse5": "^6.0.1", "picomatch": "^2.2.2", - "ws": "^7.4.2" + "ws": "^7.5.10" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@web/dev-server-esbuild": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@web/dev-server-esbuild/-/dev-server-esbuild-0.4.4.tgz", - "integrity": "sha512-gxXvj1mw0/b8HP2ARaXgQEmWH/nyPWvRuzSyEvybMm9oThe//z6K0ksj2qyffT/X7yblhEReKqWK7djCaB0M0Q==", + "node_modules/@web/dev-server-import-maps": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-import-maps/-/dev-server-import-maps-0.2.1.tgz", + "integrity": "sha512-iGM7s4qenmTDUWC2iV0HoQ1NR5lAyRxVHOpWzTsFH/TnUZzP+YuL6QIFtB2v2v7URfhGL2l2WPIibmliToITcg==", "dev": true, "license": "MIT", "dependencies": { - "@mdn/browser-compat-data": "^4.0.0", - "@web/dev-server-core": "^0.6.2", - "esbuild": "^0.16 || ^0.17", + "@import-maps/resolve": "^1.0.1", + "@types/parse5": "^6.0.1", + "@web/dev-server-core": "^0.7.2", + "@web/parse5-utils": "^2.1.0", "parse5": "^6.0.1", - "ua-parser-js": "^1.0.33" + "picomatch": "^2.2.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], + "node_modules/@web/dev-server-rollup": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.6.4.tgz", + "integrity": "sha512-sJZfTGCCrdku5xYnQQG51odGI092hKY9YFM0X3Z0tRY3iXKXcYRaLZrErw5KfCxr6g0JRuhe4BBhqXTA5Q2I3Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@rollup/plugin-node-resolve": "^15.0.1", + "@web/dev-server-core": "^0.7.2", + "nanocolors": "^0.2.1", + "parse5": "^6.0.1", + "rollup": "^4.4.0", + "whatwg-url": "^14.0.0" + }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], + "node_modules/@web/parse5-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.1.0.tgz", + "integrity": "sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], + "node_modules/@web/test-runner": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.18.3.tgz", + "integrity": "sha512-QkVK8Qguw3Zhyu8SYR7F4VdcjyXBeJNr8W8L++s4zO/Ok7DR/Wu7+rLswn3H7OH3xYoCHRmwteehcFejefz6ew==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@web/browser-logs": "^0.4.0", + "@web/config-loader": "^0.3.0", + "@web/dev-server": "^0.4.0", + "@web/test-runner-chrome": "^0.16.0", + "@web/test-runner-commands": "^0.9.0", + "@web/test-runner-core": "^0.13.0", + "@web/test-runner-mocha": "^0.9.0", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^7.0.1", + "convert-source-map": "^2.0.0", + "diff": "^5.0.0", + "globby": "^11.0.1", + "nanocolors": "^0.2.1", + "portfinder": "^1.0.32", + "source-map": "^0.7.3" + }, + "bin": { + "web-test-runner": "dist/bin.js", + "wtr": "dist/bin.js" + }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], + "node_modules/@web/test-runner-chrome": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.16.0.tgz", + "integrity": "sha512-Edc6Y49aVB6k18S5IOj9OCX3rEf8F3jptIu0p95+imqxmcutFEh1GNmlAk2bQGnXS0U6uVY7Xbf61fiaXUQqhg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@web/test-runner-core": "^0.13.0", + "@web/test-runner-coverage-v8": "^0.8.0", + "async-mutex": "0.4.0", + "chrome-launcher": "^0.15.0", + "puppeteer-core": "^22.0.0" + }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], + "node_modules/@web/test-runner-commands": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.9.0.tgz", + "integrity": "sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@web/test-runner-core": "^0.13.0", + "mkdirp": "^1.0.4" + }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], + "node_modules/@web/test-runner-core": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.13.4.tgz", + "integrity": "sha512-84E1025aUSjvZU1j17eCTwV7m5Zg3cZHErV3+CaJM9JPCesZwLraIa0ONIQ9w4KLgcDgJFw9UnJ0LbFf42h6tg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^2.0.0", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.4.0", + "@web/dev-server-core": "^0.7.3", + "chokidar": "^4.0.1", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^2.0.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "internal-ip": "^6.2.0", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" + }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], + "node_modules/@web/test-runner-coverage-v8": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.8.0.tgz", + "integrity": "sha512-PskiucYpjUtgNfR2zF2AWqWwjXL7H3WW/SnCAYmzUrtob7X9o/+BjdyZ4wKbOxWWSbJO4lEdGIDLu+8X2Xw+lA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "@web/test-runner-core": "^0.13.0", + "istanbul-lib-coverage": "^3.0.0", + "lru-cache": "^8.0.4", + "picomatch": "^2.2.2", + "v8-to-istanbul": "^9.0.1" + }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], + "node_modules/@web/test-runner-mocha": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.9.0.tgz", + "integrity": "sha512-ZL9F6FXd0DBQvo/h/+mSfzFTSRVxzV9st/AHhpgABtUtV/AIpVE9to6+xdkpu6827kwjezdpuadPfg+PlrBWqQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@web/test-runner-core": "^0.13.0" + }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, "engines": { - "node": ">=12" + "node": ">= 0.6" } }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], + "node_modules/acorn": { + "version": "8.14.0", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=12" + "node": ">=0.4.0" } }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@web/dev-server-esbuild/node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@web/dev-server-esbuild/node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "node_modules/@web/dev-server-import-maps": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@web/dev-server-import-maps/-/dev-server-import-maps-0.1.3.tgz", - "integrity": "sha512-0eUS6ruDCOs58rXjugeDu5GCAoWHzlKLKWNTLow3qyzGkhwhj7HW9K4+zG84A1SASOLqIzB2XqrMHQEslojomg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@import-maps/resolve": "^1.0.1", - "@types/parse5": "^6.0.1", - "@web/dev-server-core": "^0.6.2", - "@web/parse5-utils": "^2.0.2", - "parse5": "^6.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@web/dev-server-rollup": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.5.4.tgz", - "integrity": "sha512-lIN+lwj84Oh8Whe4vHijjMVe7NLJUzLxiiUsOleUtrBp1b7Us9QyUNCJK/iYitHJJDhCw6JcLJbCJ5H+vW969Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/plugin-node-resolve": "^15.0.1", - "@web/dev-server-core": "^0.6.2", - "nanocolors": "^0.2.1", - "parse5": "^6.0.1", - "rollup": "^3.15.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@web/parse5-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.1.0.tgz", - "integrity": "sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse5": "^6.0.1", - "parse5": "^6.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@web/test-runner": { - "version": "0.13.31", - "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.13.31.tgz", - "integrity": "sha512-QMj/25U25AkhN4ffBoMMPdpQLNojL8cAzlyIh/oyVp385Cjmd4Hz8S0u4PvWJmDRmPerbJRNtsWafB8/EcQ1rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@web/browser-logs": "^0.2.2", - "@web/config-loader": "^0.1.3", - "@web/dev-server": "^0.1.32", - "@web/test-runner-chrome": "^0.10.7", - "@web/test-runner-commands": "^0.6.3", - "@web/test-runner-core": "^0.10.27", - "@web/test-runner-mocha": "^0.7.5", - "camelcase": "^6.2.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.1", - "convert-source-map": "^1.7.0", - "diff": "^5.0.0", - "globby": "^11.0.1", - "nanocolors": "^0.2.1", - "portfinder": "^1.0.28", - "source-map": "^0.7.3" - }, - "bin": { - "web-test-runner": "dist/bin.js", - "wtr": "dist/bin.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@web/test-runner-chrome": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.10.7.tgz", - "integrity": "sha512-DKJVHhHh3e/b6/erfKOy0a4kGfZ47qMoQRgROxi9T4F9lavEY3E5/MQ7hapHFM2lBF4vDrm+EWjtBdOL8o42tw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@web/test-runner-core": "^0.10.20", - "@web/test-runner-coverage-v8": "^0.4.8", - "chrome-launcher": "^0.15.0", - "puppeteer-core": "^13.1.3" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@web/test-runner-commands": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.6.6.tgz", - "integrity": "sha512-2DcK/+7f8QTicQpGFq/TmvKHDK/6Zald6rn1zqRlmj3pcH8fX6KHNVMU60Za9QgAKdorMBPfd8dJwWba5otzdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@web/test-runner-core": "^0.10.29", - "mkdirp": "^1.0.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@web/test-runner-core": { - "version": "0.10.29", - "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.10.29.tgz", - "integrity": "sha512-0/ZALYaycEWswHhpyvl5yqo0uIfCmZe8q14nGPi1dMmNiqLcHjyFGnuIiLexI224AW74ljHcHllmDlXK9FUKGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.11", - "@types/babel__code-frame": "^7.0.2", - "@types/co-body": "^6.1.0", - "@types/convert-source-map": "^2.0.0", - "@types/debounce": "^1.2.0", - "@types/istanbul-lib-coverage": "^2.0.3", - "@types/istanbul-reports": "^3.0.0", - "@web/browser-logs": "^0.2.6", - "@web/dev-server-core": "^0.4.1", - "chokidar": "^3.4.3", - "cli-cursor": "^3.1.0", - "co-body": "^6.1.0", - "convert-source-map": "^2.0.0", - "debounce": "^1.2.0", - "dependency-graph": "^0.11.0", - "globby": "^11.0.1", - "ip": "^1.1.5", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.0.2", - "log-update": "^4.0.0", - "nanocolors": "^0.2.1", - "nanoid": "^3.1.25", - "open": "^8.0.2", - "picomatch": "^2.2.2", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@web/test-runner-core/node_modules/@web/dev-server-core": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.4.1.tgz", - "integrity": "sha512-KdYwejXZwIZvb6tYMCqU7yBiEOPfKLQ3V9ezqqEz8DA9V9R3oQWaowckvCpFB9IxxPfS/P8/59OkdzGKQjcIUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/koa": "^2.11.6", - "@types/ws": "^7.4.0", - "@web/parse5-utils": "^1.3.1", - "chokidar": "^3.4.3", - "clone": "^2.1.2", - "es-module-lexer": "^1.0.0", - "get-stream": "^6.0.0", - "is-stream": "^2.0.0", - "isbinaryfile": "^5.0.0", - "koa": "^2.13.0", - "koa-etag": "^4.0.0", - "koa-send": "^5.0.1", - "koa-static": "^5.0.0", - "lru-cache": "^6.0.0", - "mime-types": "^2.1.27", - "parse5": "^6.0.1", - "picomatch": "^2.2.2", - "ws": "^7.4.2" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@web/test-runner-core/node_modules/@web/parse5-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-1.3.1.tgz", - "integrity": "sha512-haCgDchZrAOB9EhBJ5XqiIjBMsS/exsM5Ru7sCSyNkXVEJWskyyKuKMFk66BonnIGMPpDtqDrTUfYEis5Zi3XA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse5": "^6.0.1", - "parse5": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@web/test-runner-core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@web/test-runner-core/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@web/test-runner-coverage-v8": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.4.9.tgz", - "integrity": "sha512-y9LWL4uY25+fKQTljwr0XTYjeWIwU4h8eYidVuLoW3n1CdFkaddv+smrGzzF5j8XY+Mp6TmV9NdxjvMWqVkDdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@web/test-runner-core": "^0.10.20", - "istanbul-lib-coverage": "^3.0.0", - "picomatch": "^2.2.2", - "v8-to-istanbul": "^8.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@web/test-runner-mocha": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.7.5.tgz", - "integrity": "sha512-12/OBq6efPCAvJpcz3XJs2OO5nHe7GtBibZ8Il1a0QtsGpRmuJ4/m1EF0Fj9f6KHg7JdpGo18A37oE+5hXjHwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mocha": "^8.2.0", - "@web/test-runner-core": "^0.10.20" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@web/test-runner-visual-regression": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-visual-regression/-/test-runner-visual-regression-0.9.0.tgz", - "integrity": "sha512-06M1WffLy+BJo08s57RumKYUULD/UB8u7DgZ8/MJZYCt+7r4Vt54w34CwSGHCpeDLY8Z/YkxecafvzDjuLnEJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mkdirp": "^1.0.1", - "@types/pixelmatch": "^5.2.2", - "@types/pngjs": "^6.0.0", - "@web/test-runner-commands": "^0.9.0", - "@web/test-runner-core": "^0.13.0", - "mkdirp": "^1.0.4", - "pixelmatch": "^5.2.1", - "pngjs": "^7.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@web/test-runner-visual-regression/node_modules/@web/browser-logs": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.4.0.tgz", - "integrity": "sha512-/EBiDAUCJ2DzZhaFxTPRIznEPeafdLbXShIL6aTu7x73x7ZoxSDv7DGuTsh2rWNMUa4+AKli4UORrpyv6QBOiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "errorstacks": "^2.2.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@web/test-runner-visual-regression/node_modules/@web/dev-server-core": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.7.3.tgz", - "integrity": "sha512-GS+Ok6HiqNZOsw2oEv5V2OISZ2s/6icJodyGjUuD3RChr0G5HiESbKf2K8mZV4shTz9sRC9KSQf8qvno2gPKrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/koa": "^2.11.6", - "@types/ws": "^7.4.0", - "@web/parse5-utils": "^2.1.0", - "chokidar": "^4.0.1", - "clone": "^2.1.2", - "es-module-lexer": "^1.0.0", - "get-stream": "^6.0.0", - "is-stream": "^2.0.0", - "isbinaryfile": "^5.0.0", - "koa": "^2.13.0", - "koa-etag": "^4.0.0", - "koa-send": "^5.0.1", - "koa-static": "^5.0.0", - "lru-cache": "^8.0.4", - "mime-types": "^2.1.27", - "parse5": "^6.0.1", - "picomatch": "^2.2.2", - "ws": "^7.5.10" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@web/test-runner-visual-regression/node_modules/@web/test-runner-commands": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.9.0.tgz", - "integrity": "sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@web/test-runner-core": "^0.13.0", - "mkdirp": "^1.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@web/test-runner-visual-regression/node_modules/@web/test-runner-core": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.13.4.tgz", - "integrity": "sha512-84E1025aUSjvZU1j17eCTwV7m5Zg3cZHErV3+CaJM9JPCesZwLraIa0ONIQ9w4KLgcDgJFw9UnJ0LbFf42h6tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.11", - "@types/babel__code-frame": "^7.0.2", - "@types/co-body": "^6.1.0", - "@types/convert-source-map": "^2.0.0", - "@types/debounce": "^1.2.0", - "@types/istanbul-lib-coverage": "^2.0.3", - "@types/istanbul-reports": "^3.0.0", - "@web/browser-logs": "^0.4.0", - "@web/dev-server-core": "^0.7.3", - "chokidar": "^4.0.1", - "cli-cursor": "^3.1.0", - "co-body": "^6.1.0", - "convert-source-map": "^2.0.0", - "debounce": "^1.2.0", - "dependency-graph": "^0.11.0", - "globby": "^11.0.1", - "internal-ip": "^6.2.0", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.0.2", - "log-update": "^4.0.0", - "nanocolors": "^0.2.1", - "nanoid": "^3.1.25", - "open": "^8.0.2", - "picomatch": "^2.2.2", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@web/test-runner-visual-regression/node_modules/chokidar": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", - "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@web/test-runner-visual-regression/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@web/test-runner-visual-regression/node_modules/readdirp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", - "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@web/test-runner/node_modules/@rollup/plugin-node-resolve": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz", - "integrity": "sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^2.42.0" - } - }, - "node_modules/@web/test-runner/node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@web/test-runner/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@web/test-runner/node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@web/test-runner/node_modules/@web/config-loader": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.1.3.tgz", - "integrity": "sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.3.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@web/test-runner/node_modules/@web/dev-server": { - "version": "0.1.38", - "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.38.tgz", - "integrity": "sha512-WUq7Zi8KeJ5/UZmmpZ+kzUpUlFlMP/rcreJKYg9Lxiz998KYl4G5Rv24akX0piTuqXG7r6h+zszg8V/hdzjCoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.11", - "@types/command-line-args": "^5.0.0", - "@web/config-loader": "^0.1.3", - "@web/dev-server-core": "^0.4.1", - "@web/dev-server-rollup": "^0.4.1", - "camelcase": "^6.2.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^7.0.1", - "debounce": "^1.2.0", - "deepmerge": "^4.2.2", - "ip": "^1.1.5", - "nanocolors": "^0.2.1", - "open": "^8.0.2", - "portfinder": "^1.0.32" - }, - "bin": { - "wds": "dist/bin.js", - "web-dev-server": "dist/bin.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@web/test-runner/node_modules/@web/dev-server-core": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.4.1.tgz", - "integrity": "sha512-KdYwejXZwIZvb6tYMCqU7yBiEOPfKLQ3V9ezqqEz8DA9V9R3oQWaowckvCpFB9IxxPfS/P8/59OkdzGKQjcIUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/koa": "^2.11.6", - "@types/ws": "^7.4.0", - "@web/parse5-utils": "^1.3.1", - "chokidar": "^3.4.3", - "clone": "^2.1.2", - "es-module-lexer": "^1.0.0", - "get-stream": "^6.0.0", - "is-stream": "^2.0.0", - "isbinaryfile": "^5.0.0", - "koa": "^2.13.0", - "koa-etag": "^4.0.0", - "koa-send": "^5.0.1", - "koa-static": "^5.0.0", - "lru-cache": "^6.0.0", - "mime-types": "^2.1.27", - "parse5": "^6.0.1", - "picomatch": "^2.2.2", - "ws": "^7.4.2" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@web/test-runner/node_modules/@web/dev-server-rollup": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.4.1.tgz", - "integrity": "sha512-Ebsv7Ovd9MufeH3exvikBJ7GmrZA5OmHnOgaiHcwMJ2eQBJA5/I+/CbRjsLX97ICj/ZwZG//p2ITRz8W3UfSqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/plugin-node-resolve": "^13.0.4", - "@web/dev-server-core": "^0.4.1", - "nanocolors": "^0.2.1", - "parse5": "^6.0.1", - "rollup": "^2.67.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@web/test-runner/node_modules/@web/dev-server/node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.17" - } - }, - "node_modules/@web/test-runner/node_modules/@web/dev-server/node_modules/command-line-usage": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz", - "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^6.2.2", - "chalk-template": "^0.4.0", - "table-layout": "^4.1.0", - "typical": "^7.1.1" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/@web/test-runner/node_modules/@web/dev-server/node_modules/typical": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.2.0.tgz", - "integrity": "sha512-W1+HdVRUl8fS3MZ9ogD51GOb46xMmhAZzR0WPw5jcgIZQJVvkddYzAl4YTU6g5w33Y1iRQLdIi2/1jhi2RNL0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.17" - } - }, - "node_modules/@web/test-runner/node_modules/@web/parse5-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-1.3.1.tgz", - "integrity": "sha512-haCgDchZrAOB9EhBJ5XqiIjBMsS/exsM5Ru7sCSyNkXVEJWskyyKuKMFk66BonnIGMPpDtqDrTUfYEis5Zi3XA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse5": "^6.0.1", - "parse5": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@web/test-runner/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@web/test-runner/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@web/test-runner/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@web/test-runner/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@web/test-runner/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@web/test-runner/node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@web/test-runner/node_modules/command-line-usage/node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@web/test-runner/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@web/test-runner/node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@web/test-runner/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@web/test-runner/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@web/test-runner/node_modules/rollup": { - "version": "2.79.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", - "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/@web/test-runner/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@web/test-runner/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@web/test-runner/node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "license": "MIT", - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/acorn-jsx": { + "version": "5.3.2", "dev": true, "license": "MIT", "peerDependencies": { @@ -3359,22 +2491,20 @@ } }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "license": "MIT", "dependencies": { - "debug": "4" + "debug": "^4.3.4" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -3416,8 +2546,6 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -3430,24 +2558,9 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, "license": "Python-2.0" }, "node_modules/array-back": { @@ -3470,6 +2583,19 @@ "node": ">=8" } }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -3490,13 +2616,79 @@ "lodash": "^4.17.14" } }, + "node_modules/async-mutex": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", + "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true, + "dev": true, "license": "MIT" }, + "node_modules/bare-events": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/bare-fs": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", + "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.0.0", + "bare-path": "^2.0.0", + "bare-stream": "^2.0.0" + } + }, + "node_modules/bare-os": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", + "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/bare-path": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^2.1.0" + } + }, + "node_modules/bare-stream": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.4.2.tgz", + "integrity": "sha512-XZ4ln/KV4KT+PXdIWTKjsLY+quqCaEtqqtgGJVPw9AoM73By03ij64YjepK0aQvHSWDb6AfAZwqKaFu68qkrdA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.20.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -3518,36 +2710,19 @@ ], "license": "MIT" }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "node": ">=10.0.0" } }, "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -3569,8 +2744,7 @@ }, "node_modules/browser-bunyan": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/browser-bunyan/-/browser-bunyan-1.8.0.tgz", - "integrity": "sha512-Et1TaRUm8m2oy4OTi69g0qAM8wqpofACUgkdBnj1Kq2aC8Wpl8w+lNevebPG6zKH2w0Aq+BHiAXWwjm0/QbkaQ==", + "dev": true, "dependencies": { "@browser-bunyan/console-formatted-stream": "^1.8.0", "@browser-bunyan/console-plain-stream": "^1.8.0", @@ -3613,23 +2787,9 @@ "node": "*" } }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/bunyan": { "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", + "dev": true, "engines": [ "node >=0.10.0" ], @@ -3675,1029 +2835,663 @@ "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk-template": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true, - "license": "ISC" - }, - "node_modules/chrome-launcher": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", - "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/co-body": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.2.0.tgz", - "integrity": "sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@hapi/bourne": "^3.0.0", - "inflation": "^2.0.0", - "qs": "^6.5.2", - "raw-body": "^2.3.3", - "type-is": "^1.6.16" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz", - "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^6.2.2", - "chalk-template": "^0.4.0", - "table-layout": "^4.1.0", - "typical": "^7.1.1" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.17" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.2.0.tgz", - "integrity": "sha512-W1+HdVRUl8fS3MZ9ogD51GOb46xMmhAZzR0WPw5jcgIZQJVvkddYzAl4YTU6g5w33Y1iRQLdIi2/1jhi2RNL0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.17" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/callsites": { + "version": "3.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookies": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", - "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "keygrip": "~1.1.0" - }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "node_modules/chalk": { + "version": "4.1.2", + "dev": true, "license": "MIT", "dependencies": { - "node-fetch": "^2.6.12" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/chalk-template": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", + "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "chalk": "^4.1.2" }, "engines": { - "node": ">= 8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" } }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "readdirp": "^4.0.1" }, "engines": { - "node": ">=6.0" + "node": ">= 14.16.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, "engines": { - "node": ">=4.0.0" + "node": ">=12.13.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/chromium-bidi": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.3.tgz", + "integrity": "sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "dependencies": { + "mitt": "3.0.1", + "urlpattern-polyfill": "10.0.0", + "zod": "3.23.8" + }, + "peerDependencies": { + "devtools-protocol": "*" + } }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "execa": "^5.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.8" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "node_modules/co-body": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.2.0.tgz", + "integrity": "sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==", "dev": true, "license": "MIT", + "dependencies": { + "@hapi/bourne": "^3.0.0", + "inflation": "^2.0.0", + "qs": "^6.5.2", + "raw-body": "^2.3.3", + "type-is": "^1.6.16" + }, "engines": { - "node": ">= 0.6.0" + "node": ">=8.0.0" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=7.0.0" } }, - "node_modules/devtools-protocol": { - "version": "0.0.981744", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", - "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "node_modules/color-name": { + "version": "1.1.4", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } + "license": "MIT" }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, "license": "MIT", "dependencies": { - "path-type": "^4.0.0" + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=4.0.0" } }, - "node_modules/dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "hasInstallScript": true, - "license": "BSD-2-Clause", - "optional": true, + "node_modules/command-line-usage": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz", + "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", + "dev": true, + "license": "MIT", "dependencies": { - "nan": "^2.14.0" + "array-back": "^6.2.2", + "chalk-template": "^0.4.0", + "table-layout": "^4.1.0", + "typical": "^7.1.1" }, "engines": { - "node": ">=0.10" + "node": ">=12.20.0" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/command-line-usage/node_modules/array-back": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=12.17" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/command-line-usage/node_modules/typical": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.3.0.tgz", + "integrity": "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==", "dev": true, "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=12.17" } }, - "node_modules/errorstacks": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.4.1.tgz", - "integrity": "sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw==", + "node_modules/concat-map": { + "version": "0.0.1", "dev": true, "license": "MIT" }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.6" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">= 0.6" } }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, - "node_modules/esbuild": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.11.tgz", - "integrity": "sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.11", - "@esbuild/android-arm64": "0.18.11", - "@esbuild/android-x64": "0.18.11", - "@esbuild/darwin-arm64": "0.18.11", - "@esbuild/darwin-x64": "0.18.11", - "@esbuild/freebsd-arm64": "0.18.11", - "@esbuild/freebsd-x64": "0.18.11", - "@esbuild/linux-arm": "0.18.11", - "@esbuild/linux-arm64": "0.18.11", - "@esbuild/linux-ia32": "0.18.11", - "@esbuild/linux-loong64": "0.18.11", - "@esbuild/linux-mips64el": "0.18.11", - "@esbuild/linux-ppc64": "0.18.11", - "@esbuild/linux-riscv64": "0.18.11", - "@esbuild/linux-s390x": "0.18.11", - "@esbuild/linux-x64": "0.18.11", - "@esbuild/netbsd-x64": "0.18.11", - "@esbuild/openbsd-x64": "0.18.11", - "@esbuild/sunos-x64": "0.18.11", - "@esbuild/win32-arm64": "0.18.11", - "@esbuild/win32-ia32": "0.18.11", - "@esbuild/win32-x64": "0.18.11" - } - }, - "node_modules/esbuild-node-externals": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/esbuild-node-externals/-/esbuild-node-externals-1.15.0.tgz", - "integrity": "sha512-lM5f3CQL9Ctv6mBwwYAEMcphK2qrjVRnemT1mufECpFaidZvFVvQDPcuno/MQfLVk4utVuSVxm1RHLyg/ONQ/A==", + "node_modules/cookies": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", + "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^5.0.0", - "tslib": "^2.4.1" + "depd": "~2.0.0", + "keygrip": "~1.1.0" }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "esbuild": "0.12 - 0.24" + "node": ">= 0.8" } }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.11.tgz", - "integrity": "sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==", - "cpu": [ - "arm" - ], + "node_modules/cross-fetch": { + "version": "4.0.0", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "dependencies": { + "node-fetch": "^2.6.12" } }, - "node_modules/esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.11.tgz", - "integrity": "sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==", - "cpu": [ - "arm64" - ], + "node_modules/cross-spawn": { + "version": "7.0.3", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.11.tgz", - "integrity": "sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==", - "cpu": [ - "x64" - ], + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=12" + "node": ">= 14" } }, - "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.11.tgz", - "integrity": "sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==", - "cpu": [ - "arm64" - ], + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.11.tgz", - "integrity": "sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==", - "cpu": [ - "x64" - ], + "node_modules/debug": { + "version": "4.3.7", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">=12" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.11.tgz", - "integrity": "sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==", - "cpu": [ - "arm64" - ], + "node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.11.tgz", - "integrity": "sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==", - "cpu": [ - "x64" - ], + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 10" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.11.tgz", - "integrity": "sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==", - "cpu": [ - "arm" - ], + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.11.tgz", - "integrity": "sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.11.tgz", - "integrity": "sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==", - "cpu": [ - "ia32" - ], + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, "engines": { - "node": ">=12" + "node": ">= 14" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.11.tgz", - "integrity": "sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==", - "cpu": [ - "loong64" - ], + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">= 0.8" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.11.tgz", - "integrity": "sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==", - "cpu": [ - "mips64el" - ], + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">= 0.6.0" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.11.tgz", - "integrity": "sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==", - "cpu": [ - "ppc64" - ], + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.11.tgz", - "integrity": "sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==", - "cpu": [ - "riscv64" - ], + "node_modules/devtools-protocol": { + "version": "0.0.1312386", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1312386.tgz", + "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "BSD-3-Clause" + }, + "node_modules/diff": { + "version": "5.2.0", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=12" + "node": ">=0.3.1" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.11.tgz", - "integrity": "sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==", - "cpu": [ - "s390x" - ], + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "path-type": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.11.tgz", - "integrity": "sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==", - "cpu": [ - "x64" - ], + "node_modules/dtrace-provider": { + "version": "0.8.8", "dev": true, - "license": "MIT", + "hasInstallScript": true, + "license": "BSD-2-Clause", "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "nan": "^2.14.0" + }, "engines": { - "node": ">=12" + "node": ">=0.10" } }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.11.tgz", - "integrity": "sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==", - "cpu": [ - "x64" - ], + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], "engines": { - "node": ">=12" + "node": ">= 0.8" } }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.11.tgz", - "integrity": "sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==", - "cpu": [ - "x64" - ], + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" + "dependencies": { + "once": "^1.4.0" } }, - "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.11.tgz", - "integrity": "sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==", - "cpu": [ - "x64" - ], + "node_modules/entities": { + "version": "4.5.0", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], + "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.11.tgz", - "integrity": "sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==", - "cpu": [ - "arm64" - ], + "node_modules/errorstacks": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.4.1.tgz", + "integrity": "sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "get-intrinsic": "^1.2.4" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.11.tgz", - "integrity": "sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==", - "cpu": [ - "ia32" - ], + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.11.tgz", - "integrity": "sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==", - "cpu": [ - "x64" - ], + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, "node_modules/escape-html": { @@ -4709,21 +3503,50 @@ }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/eslint": { "version": "9.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz", - "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==", "dev": true, "license": "MIT", "dependencies": { @@ -4783,8 +3606,6 @@ }, "node_modules/eslint-config-prettier": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "license": "MIT", "bin": { @@ -4796,8 +3617,6 @@ }, "node_modules/eslint-plugin-prettier": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, "license": "MIT", "dependencies": { @@ -4827,8 +3646,6 @@ }, "node_modules/eslint-scope": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4844,8 +3661,6 @@ }, "node_modules/eslint-visitor-keys": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4857,8 +3672,6 @@ }, "node_modules/espree": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4873,10 +3686,22 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -4888,8 +3713,6 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4901,8 +3724,6 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -4918,8 +3739,6 @@ }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -4999,18 +3818,21 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, "license": "Apache-2.0" }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -5043,15 +3865,11 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, @@ -5077,8 +3895,6 @@ }, "node_modules/file-entry-cache": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5116,8 +3932,6 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -5133,8 +3947,6 @@ }, "node_modules/flat-cache": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { @@ -5147,15 +3959,12 @@ }, "node_modules/flatted": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true, "license": "ISC" }, "node_modules/focus-visible": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/focus-visible/-/focus-visible-5.2.1.tgz", - "integrity": "sha512-8Bx950VD1bWTQJEH/AM6SpEk+SU55aVnp4Ujhuuxy3eMEBCRwBnTBnVXr9YAPvZL3/CNjCa8u4IWfNmEO53whA==", + "dev": true, "license": "W3C" }, "node_modules/fresh": { @@ -5168,19 +3977,20 @@ "node": ">= 0.6" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, - "license": "MIT" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } }, "node_modules/fsevents": { "version": "2.3.3", @@ -5207,6 +4017,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -5240,11 +4060,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-uri": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "dev": true, + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4", + "fs-extra": "^11.2.0" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/glob": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, "license": "ISC", "optional": true, "dependencies": { @@ -5260,8 +4094,6 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -5273,8 +4105,6 @@ }, "node_modules/globals": { "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", "engines": { @@ -5318,10 +4148,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -5398,8 +4233,7 @@ }, "node_modules/highlight.js": { "version": "11.10.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz", - "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=12.0.0" @@ -5453,18 +4287,32 @@ "node": ">= 0.6" } }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "6", + "agent-base": "^7.0.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -5479,8 +4327,6 @@ }, "node_modules/husky": { "version": "9.1.6", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.6.tgz", - "integrity": "sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==", "dev": true, "license": "MIT", "bin": { @@ -5529,8 +4375,6 @@ }, "node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -5539,8 +4383,6 @@ }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "license": "MIT", "dependencies": { @@ -5556,8 +4398,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -5576,11 +4416,9 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "devOptional": true, + "dev": true, "license": "ISC", + "optional": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -5588,9 +4426,7 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/internal-ip": { @@ -5613,22 +4449,31 @@ } }, "node_modules/intl-messageformat": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.9.0.tgz", - "integrity": "sha512-5+XCcCHdO55A57Emrfd5bhZ0OhB0Kc2SJCe7pFJ4hK/xYgtMteA8R+L7qnHyE0EDuD8tlNQG3TzjULKd/Zqebw==", + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz", + "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@formatjs/fast-memoize": "1.2.0", - "@formatjs/icu-messageformat-parser": "2.0.10", + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/fast-memoize": "1.2.1", + "@formatjs/icu-messageformat-parser": "2.1.0", "tslib": "^2.1.0" } }, - "node_modules/ip": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", - "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==", + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } }, "node_modules/ip-regex": { "version": "4.3.0", @@ -5650,35 +4495,6 @@ "node": ">= 0.10" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "license": "MIT", - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-core-module": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", @@ -5713,8 +4529,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { @@ -5749,8 +4563,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -5831,8 +4643,6 @@ }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "license": "ISC" }, @@ -5884,8 +4694,6 @@ }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -5895,31 +4703,43 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" + }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/just-extend": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", - "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", "dev": true, "license": "MIT" }, @@ -5938,8 +4758,6 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -6053,8 +4871,6 @@ }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6095,8 +4911,7 @@ }, "node_modules/linkify-it": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, "license": "MIT", "dependencies": { "uc.micro": "^2.0.0" @@ -6104,8 +4919,7 @@ }, "node_modules/lit": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@lit/reactive-element": "^1.6.0", @@ -6115,8 +4929,7 @@ }, "node_modules/lit-element": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.1.0", @@ -6126,8 +4939,7 @@ }, "node_modules/lit-element/node_modules/@lit/reactive-element": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", - "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.0.0" @@ -6135,8 +4947,7 @@ }, "node_modules/lit-element/node_modules/lit-html": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", - "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@types/trusted-types": "^2.0.2" @@ -6144,8 +4955,7 @@ }, "node_modules/lit-html": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", - "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@types/trusted-types": "^2.0.2" @@ -6153,8 +4963,7 @@ }, "node_modules/lit/node_modules/@lit/reactive-element": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", - "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.0.0" @@ -6162,8 +4971,7 @@ }, "node_modules/lit/node_modules/lit-html": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", - "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@types/trusted-types": "^2.0.2" @@ -6171,8 +4979,6 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -6201,21 +5007,16 @@ }, "node_modules/lodash.debounce": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, "license": "MIT" }, "node_modules/lodash.get": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "license": "MIT" }, @@ -6266,8 +5067,7 @@ }, "node_modules/markdown-it": { "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1", @@ -6283,8 +5083,7 @@ }, "node_modules/markdown-it-anchor": { "version": "9.2.0", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-9.2.0.tgz", - "integrity": "sha512-sa2ErMQ6kKOA4l31gLGYliFQrMKkqSO0ZJgGhDHKijPf0pNFM9vghjAh3gn26pS4JDRs7Iwa9S36gxm3vgZTzg==", + "dev": true, "license": "Unlicense", "peerDependencies": { "@types/markdown-it": "*", @@ -6293,8 +5092,7 @@ }, "node_modules/markdown-it-attrs": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.2.0.tgz", - "integrity": "sha512-m7svtUBythvcGFFZAv9VjMEvs8UbHri2sojJ3juJumoOzv8sdkx9a7W3KxiHbXxAbvL3Xauak8TMwCnvigVPKw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6305,14 +5103,12 @@ }, "node_modules/markdown-it-container": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-4.0.0.tgz", - "integrity": "sha512-HaNccxUH0l7BNGYbFbjmGpf5aLHAMTinqRZQAEQbMr2cdD3z91Q6kIo1oUn1CQndkT03jat6ckrdRYuwwqLlQw==", + "dev": true, "license": "MIT" }, "node_modules/markdown-it-highlightjs": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/markdown-it-highlightjs/-/markdown-it-highlightjs-4.2.0.tgz", - "integrity": "sha512-NC7pXE8KkOl6xWJVRNt8p6wgJVznXKsE0HgYGdk6DD2tn1l4L9f0ALf3VIoGVkotNU1uGQatSxfBF1zZPUMmuQ==", + "dev": true, "license": "Unlicense", "dependencies": { "highlight.js": "^11.9.0" @@ -6327,8 +5123,7 @@ }, "node_modules/mdurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, "license": "MIT" }, "node_modules/media-typer": { @@ -6407,9 +5202,7 @@ }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -6420,14 +5213,19 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "devOptional": true, + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true, + "license": "MIT" + }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -6441,17 +5239,9 @@ "node": ">=10" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true, - "license": "MIT" - }, "node_modules/moment": { "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "dev": true, "license": "MIT", "optional": true, "engines": { @@ -6460,15 +5250,12 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, "node_modules/mv": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -6482,8 +5269,7 @@ }, "node_modules/mv/node_modules/mkdirp": { "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -6495,8 +5281,7 @@ }, "node_modules/nan": { "version": "2.22.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", - "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", + "dev": true, "license": "MIT", "optional": true }, @@ -6528,15 +5313,12 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, "node_modules/ncp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "dev": true, "license": "MIT", "optional": true, "bin": { @@ -6553,10 +5335,18 @@ "node": ">= 0.6" } }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/nise": { "version": "5.1.9", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", - "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6569,8 +5359,6 @@ }, "node_modules/nise/node_modules/@sinonjs/commons": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6579,8 +5367,6 @@ }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { "version": "11.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.3.1.tgz", - "integrity": "sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6589,8 +5375,7 @@ }, "node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -6609,36 +5394,23 @@ }, "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, "license": "MIT" }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, "license": "BSD-2-Clause" }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -6653,9 +5425,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, "license": "MIT", "engines": { @@ -6680,9 +5452,7 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -6730,8 +5500,6 @@ }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -6787,8 +5555,6 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6803,8 +5569,6 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -6819,27 +5583,48 @@ }, "node_modules/p-timeout": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz", - "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/pac-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", + "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", "dev": true, "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" + }, "engines": { - "node": ">=6" + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" } }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -6868,8 +5653,6 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -6878,9 +5661,7 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6888,8 +5669,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { @@ -6905,148 +5684,44 @@ }, "node_modules/path-to-regexp": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true, "license": "MIT" }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pixelmatch": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.3.0.tgz", - "integrity": "sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "pngjs": "^6.0.0" - }, - "bin": { - "pixelmatch": "bin/pixelmatch" - } - }, - "node_modules/pixelmatch/node_modules/pngjs": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", - "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, "engines": { "node": ">=8" } }, - "node_modules/pngjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", - "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.19.0" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/portfinder": { @@ -7089,8 +5764,6 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -7099,8 +5772,6 @@ }, "node_modules/prettier": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "license": "MIT", "bin": { @@ -7115,8 +5786,6 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "license": "MIT", "dependencies": { @@ -7136,6 +5805,36 @@ "node": ">=0.4.0" } }, + "node_modules/proxy-agent": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -7156,8 +5855,6 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -7166,161 +5863,33 @@ }, "node_modules/punycode.js": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/puppeteer-core": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.7.0.tgz", - "integrity": "sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==", + "version": "22.15.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.15.0.tgz", + "integrity": "sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.981744", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.5.0" - }, - "engines": { - "node": ">=10.18.1" - } - }, - "node_modules/puppeteer-core/node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "license": "MIT", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/puppeteer-core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/puppeteer-core/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" + "@puppeteer/browsers": "2.3.0", + "chromium-bidi": "0.6.3", + "debug": "^4.3.6", + "devtools-protocol": "0.0.1312386", + "ws": "^8.18.0" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/puppeteer-core/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/puppeteer-core/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/puppeteer-core/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "node": ">=18" } }, "node_modules/puppeteer-core/node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "license": "MIT", "engines": { @@ -7328,7 +5897,7 @@ }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -7340,9 +5909,9 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", + "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7376,6 +5945,13 @@ ], "license": "MIT" }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true, + "license": "MIT" + }, "node_modules/raw-body": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", @@ -7419,42 +5995,28 @@ "node": ">= 0.8" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "dev": true, "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, "engines": { - "node": ">=8.10.0" + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, "node_modules/resolve": { @@ -7477,8 +6039,6 @@ }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", "engines": { @@ -7566,9 +6126,7 @@ }, "node_modules/rimraf": { "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, "license": "ISC", "optional": true, "dependencies": { @@ -7579,19 +6137,40 @@ } }, "node_modules/rollup": { - "version": "3.29.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", - "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz", + "integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==", "dev": true, "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.27.4", + "@rollup/rollup-android-arm64": "4.27.4", + "@rollup/rollup-darwin-arm64": "4.27.4", + "@rollup/rollup-darwin-x64": "4.27.4", + "@rollup/rollup-freebsd-arm64": "4.27.4", + "@rollup/rollup-freebsd-x64": "4.27.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.27.4", + "@rollup/rollup-linux-arm-musleabihf": "4.27.4", + "@rollup/rollup-linux-arm64-gnu": "4.27.4", + "@rollup/rollup-linux-arm64-musl": "4.27.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4", + "@rollup/rollup-linux-riscv64-gnu": "4.27.4", + "@rollup/rollup-linux-s390x-gnu": "4.27.4", + "@rollup/rollup-linux-x64-gnu": "4.27.4", + "@rollup/rollup-linux-x64-musl": "4.27.4", + "@rollup/rollup-win32-arm64-msvc": "4.27.4", + "@rollup/rollup-win32-ia32-msvc": "4.27.4", + "@rollup/rollup-win32-x64-msvc": "4.27.4", "fsevents": "~2.3.2" } }, @@ -7642,8 +6221,7 @@ }, "node_modules/safe-json-stringify": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "dev": true, "license": "MIT", "optional": true }, @@ -7694,8 +6272,6 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { @@ -7707,8 +6283,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { @@ -7743,9 +6317,6 @@ }, "node_modules/sinon": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.1.tgz", - "integrity": "sha512-8yx2wIvkBjIq/MGY1D9h1LMraYW+z1X0mb648KZnKSdvLasvDu7maa0dFaNYdTDczFgbjNw2tOmWdTk9saVfwQ==", - "deprecated": "16.1.1", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7789,6 +6360,47 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -7799,6 +6411,13 @@ "node": ">= 8" } }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -7809,14 +6428,19 @@ "node": ">= 0.6" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/streamx": { + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.2.tgz", + "integrity": "sha512-aDGDLU+j9tJcUdPGOaHmVF1u/hhI+CsGkT02V3OKlHDV7IukOI+nTWAGkiZEKCO35rWN1wIr4tS7YFr1f4qSvA==", "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" } }, "node_modules/string-width": { @@ -7859,8 +6483,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -7872,8 +6494,6 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -7898,8 +6518,6 @@ }, "node_modules/synckit": { "version": "0.9.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", - "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", "dev": true, "license": "MIT", "dependencies": { @@ -7938,39 +6556,41 @@ } }, "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", "dev": true, "license": "MIT", "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" } }, "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, "license": "MIT", "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, + "node_modules/text-decoder": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.1.tgz", + "integrity": "sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true, "license": "MIT" }, @@ -8005,28 +6625,26 @@ } }, "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", "dev": true, "license": "MIT", "dependencies": { - "punycode": "^2.1.1" + "punycode": "^2.3.1" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/ts-log": { "version": "2.2.7", - "resolved": "https://registry.npmjs.org/ts-log/-/ts-log-2.2.7.tgz", - "integrity": "sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==", + "dev": true, "license": "MIT" }, "node_modules/tslib": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "dev": true, "license": "0BSD" }, "node_modules/tsscmp": { @@ -8041,8 +6659,6 @@ }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -8054,8 +6670,6 @@ }, "node_modules/type-detect": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "license": "MIT", "engines": { @@ -8099,37 +6713,9 @@ "node": ">=8" } }, - "node_modules/ua-parser-js": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", - "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "license": "MIT", - "bin": { - "ua-parser-js": "script/cli.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/uc.micro": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, "license": "MIT" }, "node_modules/unbzip2-stream": { @@ -8150,6 +6736,16 @@ "dev": true, "license": "MIT" }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -8162,31 +6758,29 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "node_modules/urlpattern-polyfill": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", "dev": true, "license": "MIT" }, "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, "license": "ISC", "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" @@ -8213,23 +6807,21 @@ } }, "node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", "dev": true, "license": "MIT", "dependencies": { - "tr46": "^3.0.0", + "tr46": "^5.0.0", "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { @@ -8244,8 +6836,6 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { @@ -8279,9 +6869,7 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/ws": { @@ -8306,12 +6894,44 @@ } } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } }, "node_modules/yauzl": { "version": "2.10.0", @@ -8336,8 +6956,6 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -8347,17 +6965,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "web-components": { - "name": "@adobecom/mas-web-components", - "version": "0.0.1", - "devDependencies": { - "@web/dev-server": "^0.3.1", - "@web/dev-server-esbuild": "^0.4.1", - "@web/dev-server-import-maps": "^0.1.1", - "@web/test-runner": "^0.13.27", - "@web/test-runner-commands": "^0.6.1", - "@web/test-runner-visual-regression": "^0.9.0", - "esbuild": "0.18.11" + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" } } } diff --git a/libs/features/mas/package.json b/libs/features/mas/package.json index ea330bc520d..ef21159eb7b 100644 --- a/libs/features/mas/package.json +++ b/libs/features/mas/package.json @@ -1,27 +1,37 @@ { - "name": "@adobecom/mas-platform", - "version": "0.0.1", + "name": "@adobecom/mas", + "version": "0.3.1", "type": "module", - "main": "libs/mas.js", + "main": "dist/mas.js", "private": true, - "workspaces": [ - "commerce", - "mas", - "web-components" - ], "scripts": { "lint": "eslint --fix", - "test": "npm run test:ci --workspaces", - "build": "npm run build --workspaces", - "build:docs": "./build-docs.sh" + "build": "npm run test && npm run build:bundle", + "build:docs": "cd ./docs/src && ./build-docs.sh", + "build:bundle": "node ./build.mjs", + "test:watch": "wtr --config ./web-test-runner.config.mjs --coverage --watch --debug", + "test": "wtr --config ./web-test-runner.config.mjs --coverage" }, - "dependencies": { + "dependencies": {}, + "devDependencies": { + "@dexter/tacocat-core": "file:./internal/tacocat-core-1.13.1.tgz", + "@esm-bundle/chai-as-promised": "7.1.1", + "@esm-bundle/chai": "4.3.4-fix.0", + "@pandora/data-models-odm": "file:./internal/data-models-odm-0.5.4.tgz", + "@pandora/data-source-utils": "file:./internal/data-source-utils-0.3.1.tgz", + "@pandora/fetch": "file:./internal/fetch-1.3.4.tgz", + "@pandora/logger": "file:./internal/logger-1.3.0.tgz", + "@spectrum-css/button": "^13.5.0", + "@spectrum-css/link": "^5.2.0", + "@spectrum-css/page": "^8.2.0", + "@spectrum-css/tokens": "^14.6.0", + "@spectrum-css/typography": "^6.2.0", "@spectrum-web-components/action-button": "^0.46.0", "@spectrum-web-components/action-menu": "^0.46.0", "@spectrum-web-components/alert-dialog": "^0.46.0", "@spectrum-web-components/base": "^0.46.0", - "@spectrum-web-components/button": "^0.46.0", "@spectrum-web-components/button-group": "^0.46.0", + "@spectrum-web-components/button": "^0.46.0", "@spectrum-web-components/checkbox": "^0.46.0", "@spectrum-web-components/close-button": "^0.46.0", "@spectrum-web-components/dialog": "^0.46.0", @@ -29,9 +39,9 @@ "@spectrum-web-components/field-label": "^0.46.0", "@spectrum-web-components/help-text": "^0.46.0", "@spectrum-web-components/icon": "^0.46.0", - "@spectrum-web-components/icons": "^0.46.0", "@spectrum-web-components/icons-ui": "^0.46.0", "@spectrum-web-components/icons-workflow": "^0.46.0", + "@spectrum-web-components/icons": "^0.46.0", "@spectrum-web-components/link": "^0.46.0", "@spectrum-web-components/menu": "^0.46.0", "@spectrum-web-components/modal": "^0.46.0", @@ -53,22 +63,23 @@ "@spectrum-web-components/tooltip": "^0.46.0", "@spectrum-web-components/tray": "^0.46.0", "@spectrum-web-components/underlay": "^0.46.0", - "lit": "^2.8.0", - "markdown-it": "^14.1.0", - "markdown-it-anchor": "^9.2.0", - "markdown-it-attrs": "^4.2.0", - "markdown-it-container": "^4.0.0", - "markdown-it-highlightjs": "^4.2.0" - }, - "devDependencies": { - "@esm-bundle/chai": "4.3.4-fix.0", - "@esm-bundle/chai-as-promised": "7.1.1", "@types/chai-as-promised": "7.1.5", "@types/sinon": "10.0.15", - "eslint": "^9.5.0", + "@web/dev-server-import-maps": "^0.2.1", + "@web/test-runner-commands": "^0.9.0", + "@web/test-runner": "^0.18.2", + "esbuild": "^0.24.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.1.3", + "eslint": "^9.5.0", "husky": "^9.0.11", + "intl-messageformat": "^9.9.0", + "lit": "^2.8.0", + "markdown-it-anchor": "^9.2.0", + "markdown-it-attrs": "^4.2.0", + "markdown-it-container": "^4.0.0", + "markdown-it-highlightjs": "^4.2.0", + "markdown-it": "^14.1.0", "prettier": "^3.3.2", "sinon": "13.0.1" } diff --git a/libs/features/mas/commerce/price-literals.json b/libs/features/mas/price-literals.json similarity index 100% rename from libs/features/mas/commerce/price-literals.json rename to libs/features/mas/price-literals.json diff --git a/libs/features/mas/web-components/src/aem-fragment.js b/libs/features/mas/src/aem-fragment.js similarity index 59% rename from libs/features/mas/web-components/src/aem-fragment.js rename to libs/features/mas/src/aem-fragment.js index 640941e649a..5da4cff6b9b 100644 --- a/libs/features/mas/web-components/src/aem-fragment.js +++ b/libs/features/mas/src/aem-fragment.js @@ -1,5 +1,4 @@ import { EVENT_AEM_LOAD, EVENT_AEM_ERROR } from './constants.js'; -import { getFragmentById } from './getFragmentById.js'; const sheet = new CSSStyleSheet(); sheet.replaceSync(':host { display: contents; }'); @@ -9,8 +8,36 @@ const baseUrl = 'https://odin.adobe.com'; const ATTRIBUTE_FRAGMENT = 'fragment'; +const ATTRIBUTE_AUTHOR = 'author'; const ATTRIBUTE_IMS = 'ims'; +const fail = (message) => { + throw new Error(`Failed to get fragment: ${message}`); +}; + +/** + * Get fragment by ID + * @param {string} baseUrl the aem base url + * @param {string} id fragment id + * @param {string} author should the fragment be fetched from author endpoint + * @param {Object} headers optional request headers + * @returns {Promise} the raw fragment item + */ +export async function getFragmentById(baseUrl, id, author, headers) { + const endpoint = author + ? `${baseUrl}/adobe/sites/cf/fragments/${id}` + : `${baseUrl}/adobe/sites/fragments/${id}`; + const response = await fetch(endpoint, { + cache: 'default', + credentials: 'omit', + headers, + }).catch((e) => fail(e.message)); + if (!response?.ok) { + fail(`${response.status} ${response.statusText}`); + } + return response.json(); +} + let headers; class FragmentCache { @@ -52,30 +79,28 @@ const cache = new FragmentCache(); export class AemFragment extends HTMLElement { cache = cache; - data; + #rawData; + #data; /** * @type {string} fragment id */ - fragmentId; - - /** - * Consonant styling for CTAs. - */ - consonant = false; + #fragmentId; /** * @type {boolean} whether an access token should be used via IMS. */ - ims = false; + #ims = false; /** * Internal promise to track the readiness of the web-component to render. */ #readyPromise; + #author = false; + static get observedAttributes() { - return [ATTRIBUTE_FRAGMENT]; + return [ATTRIBUTE_FRAGMENT, ATTRIBUTE_AUTHOR]; } constructor() { @@ -84,29 +109,29 @@ export class AemFragment extends HTMLElement { this.shadowRoot.adoptedStyleSheets = [sheet]; const ims = this.getAttribute(ATTRIBUTE_IMS); - if (['', true].includes(ims)) { - this.ims = true; + if (['', true, 'true'].includes(ims)) { + this.#ims = true; if (!headers) { headers = { Authorization: `Bearer ${window.adobeid?.authorize?.()}`, - pragma: 'no-cache', - 'cache-control': 'no-cache', }; } - } else { - this.ims = false; } } attributeChangedCallback(name, oldValue, newValue) { if (name === ATTRIBUTE_FRAGMENT) { - this.fragmentId = newValue; + this.#fragmentId = newValue; this.refresh(false); } + + if (name === ATTRIBUTE_AUTHOR) { + this.#author = ['', 'true'].includes(newValue); + } } connectedCallback() { - if (!this.fragmentId) { + if (!this.#fragmentId) { this.#fail('Missing fragment id'); return; } @@ -121,7 +146,7 @@ export class AemFragment extends HTMLElement { if (!ready) return; // already fetching data } if (flushCache) { - cache.remove(this.fragmentId); + cache.remove(this.#fragmentId); } this.#readyPromise = this.fetchData() .then(() => { @@ -134,8 +159,8 @@ export class AemFragment extends HTMLElement { ); return true; }) - .catch(() => { - /* c8 ignore next 3 */ + .catch((e) => { + /* c8 ignore next 3 */ this.#fail('Network error: failed to load fragment'); this.#readyPromise = null; return false; @@ -155,16 +180,19 @@ export class AemFragment extends HTMLElement { } async fetchData() { - let fragment = cache.get(this.fragmentId); + this.#rawData = null; + this.#data = null; + let fragment = cache.get(this.#fragmentId); if (!fragment) { fragment = await getFragmentById( baseUrl, - this.fragmentId, - this.ims ? headers : undefined, + this.#fragmentId, + this.#author, + this.#ims ? headers : undefined, ); cache.add(fragment); } - this.data = fragment; + this.#rawData = fragment; } get updateComplete() { @@ -173,6 +201,38 @@ export class AemFragment extends HTMLElement { Promise.reject(new Error('AEM fragment cannot be loaded')) ); } + + get data() { + if (this.#data) return this.#data; + if (this.#author) { + this.#transformAuthorData(); + } else { + this.#transformPublishData(); + } + return this.#data; + } + + #transformAuthorData() { + const { fields, id, tags } = this.#rawData; + this.#data = fields.reduce( + (acc, { name, multiple, values }) => { + acc.fields[name] = multiple ? values : values[0]; + return acc; + }, + { fields: {}, id, tags }, + ); + } + + #transformPublishData() { + const { fields, id, tags } = this.#rawData; + this.#data = Object.entries(fields).reduce( + (acc, [key, value]) => { + acc.fields[key] = value?.mimeType ? value.value : (value ?? ''); + return acc; + }, + { fields: {}, id, tags }, + ); + } } customElements.define('aem-fragment', AemFragment); diff --git a/libs/features/mas/web-components/src/bodyScrollLock.js b/libs/features/mas/src/bodyScrollLock.js similarity index 100% rename from libs/features/mas/web-components/src/bodyScrollLock.js rename to libs/features/mas/src/bodyScrollLock.js diff --git a/libs/features/mas/src/buildCheckoutUrl.js b/libs/features/mas/src/buildCheckoutUrl.js new file mode 100644 index 00000000000..afe27e973fe --- /dev/null +++ b/libs/features/mas/src/buildCheckoutUrl.js @@ -0,0 +1,172 @@ +import { Landscape, WORKFLOW_STEP, PROVIDER_ENVIRONMENT } from './constants.js'; + +const AF_DRAFT_LANDSCAPE = 'p_draft_landscape'; +const UCV3_PREFIX = '/store/'; +const PARAMETERS = new Map([ + ['countrySpecific', 'cs'], + ['customerSegment', 'cs'], + ['quantity', 'q'], + ['authCode', 'code'], + ['checkoutPromoCode', 'apc'], + ['rurl', 'rUrl'], + ['curl', 'cUrl'], + ['ctxrturl', 'ctxRtUrl'], + ['country', 'co'], + ['language', 'lang'], + ['clientId', 'cli'], + ['context', 'ctx'], + ['productArrangementCode', 'pa'], + ['offerType', 'ot'], + ['marketSegment', 'ms'], +]); +/*?* + * List of the keys that can be used to construct Checkout URL. + * Allow-listing is required because some consumers of the library don't use Typescript so they can pass any object as + * 'checkoutData'. The library will ignore any unknown key in 'checkoutData'. + */ +const ALLOWED_KEYS = new Set([ + 'af', + 'ai', + 'apc', + 'appctxid', + 'cli', + 'co', + 'cs', + 'csm', + 'ctx', + 'ctxRtUrl', + 'DCWATC', + 'dp', // Enable digital payments for iframe context + 'fr', // represents the commerce app redirecting to UC + 'gsp', + 'ijt', + 'lang', + 'lo', + 'mal', + 'ms', + 'mv', + 'mv2', + 'nglwfdata', + 'ot', + 'otac', + 'pa', + 'pcid', // Unified Paywall configuration ID for analytics + 'promoid', + 'q', + 'rf', + 'sc', + 'scl', + 'sdid', + 'sid', // x-adobe-clientsession + 'spint', + 'svar', + 'th', + 'thm', + 'trackingid', + 'usid', + 'workflowid', + 'context.guid', + 'so.ca', + 'so.su', + 'so.tr', + 'so.va', +]); +const REQUIRED_KEYS = ['env', 'workflowStep', 'clientId', 'country']; + +/** + * Maps human-readable parameter name to the name expected by Checkout Page. + * Map contains values for UC versions, UCv2, UCv3 etc. + */ +export const mapParameterName = (field) => PARAMETERS.get(field) ?? field; + +/** + * For each of the given inputParameters checks if a parameter is allow-listed and adds it to the result with a correct + * Checkout name (calling mapping in mapParameterName). + */ +export function addParameters( inputParameters, resultParameters, allowedKeys) { + for (const [key, value] of Object.entries(inputParameters)) { + const mappedKey = mapParameterName(key); + if (value != null && allowedKeys.has(mappedKey)) { + resultParameters.set(mappedKey, value); + } + } +} + +export function getHostName(env) { + switch (env) { + case PROVIDER_ENVIRONMENT.PRODUCTION: + return 'https://commerce.adobe.com'; + default: + return 'https://commerce-stg.adobe.com'; + } +} + +/** + * For each Item object iterate over the fields and add as a parameter of Checkout Url. + * Some fields need a mapping from human-readable name, e.g. countrySpecific -> cs, for this mapParameterName is called. + * @param items array of offers with their metadata + * @param parameters result array of Checkout URL parameters + */ +export function setItemsParameter(items, parameters) { + for (const idx in items) { + const item = items[idx]; + for (const [key, value] of Object.entries(item)) { + if (value == null) continue; + const parameterName = mapParameterName(key); + parameters.set(`items[${idx}][${parameterName}]`, value); + } + } +} + +/** + * Builds a UCv3 Checkout URL out of given parameters. + */ +export function buildCheckoutUrl(checkoutData) { + validateCheckoutData(checkoutData); + const { env, items, workflowStep, ms, marketSegment, ot, offerType, pa, productArrangementCode, landscape, ...rest } = + checkoutData; + const segmentationParameters = { + marketSegment: marketSegment ?? ms, + offerType: offerType ?? ot, + productArrangementCode: productArrangementCode ?? pa, + }; + const url = new URL(getHostName(env)); + url.pathname = `${UCV3_PREFIX}${workflowStep}`; + if (workflowStep !== WORKFLOW_STEP.SEGMENTATION && workflowStep !== WORKFLOW_STEP.CHANGE_PLAN_TEAM_PLANS) { + setItemsParameter(items, url.searchParams); + } + if (workflowStep === WORKFLOW_STEP.SEGMENTATION) { + addParameters(segmentationParameters, url.searchParams, ALLOWED_KEYS); + } + addParameters(rest, url.searchParams, ALLOWED_KEYS); + if (landscape === Landscape.DRAFT) { + addParameters({ af: AF_DRAFT_LANDSCAPE }, url.searchParams, ALLOWED_KEYS); + } + return url.toString(); +} + + + +/** + * Validates 'checkoutData' input in runtime. This is needed to ensure non-typescript consumers won't get false positive + * checkout URL returned. + * Iterates over the list of required fields (REQUIRED_KEYS) and checks that each of them is present in 'checkoutData'. + * If any of required fields is missing - throws and Error with a specified message. + * For WORKFLOW_STEP.SEGMENTATION and for WORKFLOW_STEP.CHANGE_PLAN_TEAM_PLANS 'items' property is not required, for rest of WorkflowStep it is. + * @param checkoutData object holding the data required to build the checkout URL + */ +function validateCheckoutData(checkoutData) { + for (const key of REQUIRED_KEYS) { + if (!checkoutData[key]) { + throw new Error('Argument "checkoutData" is not valid, missing: ' + key); + } + } + if ( + checkoutData.workflowStep !== WORKFLOW_STEP.SEGMENTATION && + checkoutData.workflowStep !== WORKFLOW_STEP.CHANGE_PLAN_TEAM_PLANS && + !checkoutData.items + ) { + throw new Error('Argument "checkoutData" is not valid, missing: items'); + } + return true; +} diff --git a/libs/features/mas/src/checkout-button.js b/libs/features/mas/src/checkout-button.js new file mode 100644 index 00000000000..fdfef99302f --- /dev/null +++ b/libs/features/mas/src/checkout-button.js @@ -0,0 +1,39 @@ +import { CheckoutMixin, createCheckoutElement } from './checkout-mixin.js'; + +export class CheckoutButton extends CheckoutMixin(HTMLButtonElement) { + static is = 'checkout-button'; + static tag = 'button'; + + static createCheckoutButton(options = {}, innerHTML = '') { + return createCheckoutElement(CheckoutButton, options, innerHTML); + } + + setCheckoutUrl(value) { + this.setAttribute('data-href', value); + } + + get href() { + return this.getAttribute('data-href'); + } + + get isCheckoutButton() { + return true; + } + + clickHandler(e) { + if (this.checkoutActionHandler) { + this.checkoutActionHandler?.(e); + return; + } + if (this.href) { + window.location.href = this.href; + } + } +} + +// Define custom DOM element +if (!window.customElements.get(CheckoutButton.is)) { + window.customElements.define(CheckoutButton.is, CheckoutButton, { + extends: CheckoutButton.tag, + }); +} diff --git a/libs/features/mas/src/checkout-link.js b/libs/features/mas/src/checkout-link.js new file mode 100644 index 00000000000..ed25d509776 --- /dev/null +++ b/libs/features/mas/src/checkout-link.js @@ -0,0 +1,33 @@ +import { createCheckoutElement } from './checkout-mixin.js'; +import { CheckoutMixin } from './checkout-mixin.js'; + +export class CheckoutLink extends CheckoutMixin(HTMLAnchorElement) { + static is = 'checkout-link'; + static tag = 'a'; + + static createCheckoutLink(options = {}, innerHTML = '') { + return createCheckoutElement(CheckoutLink, options, innerHTML); + } + + setCheckoutUrl(value) { + this.setAttribute('href', value); + } + + get isCheckoutLink() { + return true; + } + + clickHandler(e) { + if (this.checkoutActionHandler) { + this.checkoutActionHandler?.(e); + return; + } + } +} + +// Define custom DOM element +if (!window.customElements.get(CheckoutLink.is)) { + window.customElements.define(CheckoutLink.is, CheckoutLink, { + extends: CheckoutLink.tag, + }); +} diff --git a/libs/features/mas/src/checkout-mixin.js b/libs/features/mas/src/checkout-mixin.js new file mode 100644 index 00000000000..8e0ff4c0b00 --- /dev/null +++ b/libs/features/mas/src/checkout-mixin.js @@ -0,0 +1,291 @@ +import { ignore } from './external.js'; +import { + createMasElement, + updateMasElement, + MasElement, +} from './mas-element.js'; +import { selectOffers, useService } from './utilities.js'; +import { MODAL_TYPE_3_IN_1 } from '../src/constants.js'; + +export const CLASS_NAME_DOWNLOAD = 'download'; +export const CLASS_NAME_UPGRADE = 'upgrade'; + +export function createCheckoutElement(Class, options = {}, innerHTML = '') { + // eslint-disable-next-line react-hooks/rules-of-hooks + const service = useService(); + if (!service) return null; + const { + checkoutMarketSegment, + checkoutWorkflow, + checkoutWorkflowStep, + entitlement, + upgrade, + modal, + perpetual, + promotionCode, + quantity, + wcsOsi, + extraOptions, + } = service.collectCheckoutOptions(options); + + const element = createMasElement(Class, { + checkoutMarketSegment, + checkoutWorkflow, + checkoutWorkflowStep, + entitlement, + upgrade, + modal, + perpetual, + promotionCode, + quantity, + wcsOsi, + extraOptions, + }); + if (innerHTML) + element.innerHTML = `${innerHTML}`; + return element; +} + +export function CheckoutMixin(Base) { + return class CheckoutBase extends Base { + /* c8 ignore next 1 */ + checkoutActionHandler; + + masElement = new MasElement(this); + + attributeChangedCallback(name, oldValue, value) { + this.masElement.attributeChangedCallback(name, oldValue, value); + } + + connectedCallback() { + this.masElement.connectedCallback(); + this.addEventListener('click', this.clickHandler); + } + + disconnectedCallback() { + this.masElement.disconnectedCallback(); + this.removeEventListener('click', this.clickHandler); + } + + onceSettled() { + return this.masElement.onceSettled(); + } + + get value() { + return this.masElement.value; + } + + get options() { + return this.masElement.options; + } + + get opens3in1Modal() { + return Object.values(MODAL_TYPE_3_IN_1).includes(this.getAttribute('data-modal-type')) && !!this.href; + } + + requestUpdate(force = false) { + return this.masElement.requestUpdate(force); + } + + static get observedAttributes() { + return [ + 'data-checkout-workflow', + 'data-checkout-workflow-step', + 'data-extra-options', + 'data-ims-country', + 'data-perpetual', + 'data-promotion-code', + 'data-quantity', + 'data-template', + 'data-wcs-osi', + 'data-entitlement', + 'data-upgrade', + 'data-modal', + ]; + } + + async render(overrides = {}) { + // eslint-disable-next-line react-hooks/rules-of-hooks + const service = useService(); + if (!service) return false; + if (!this.dataset.imsCountry) { + service.imsCountryPromise.then((countryCode) => { + if (countryCode) this.dataset.imsCountry = countryCode; + }, ignore); + } + overrides.imsCountry = null; + const options = service.collectCheckoutOptions(overrides, this); + if (!options.wcsOsi.length) return false; + let extraOptions; + try { + extraOptions = JSON.parse(options.extraOptions ?? '{}'); + /* c8 ignore next 3 */ + } catch (e) { + this.masElement.log?.error( + 'cannot parse exta checkout options', + e, + ); + } + const version = this.masElement.togglePending(options); + this.setCheckoutUrl(''); + const promises = service.resolveOfferSelectors(options); + let offers = await Promise.all(promises); + // offer is expected to contain one or two offers at max (en, mult) + offers = offers.map((offer) => selectOffers(offer, options)); + options.country = this.dataset.imsCountry || options.country; + const checkoutAction = await service.buildCheckoutAction?.( + offers.flat(), + { ...extraOptions, ...options }, + this, + ); + return this.renderOffers( + offers.flat(), + options, + {}, + checkoutAction, + version, + ); + } + + /** + * Adds 3-in-1 modal related parameters to the URL. + * @param {string} url + * @param {'twp' | 'd2p' | 'crm'} modalType + */ + add3in1ModalParams(url, modalType) { + try { + const newUrl = new URL(url); + newUrl.searchParams.set('ctx', 'if'); + if (modalType === MODAL_TYPE_3_IN_1.CRM) { + newUrl.searchParams.set('af', 'uc_segmentation_hide_tabs,uc_new_user_iframe,uc_new_system_close'); + newUrl.searchParams.set('cli', 'creative'); + } else { + newUrl.searchParams.set('af', 'uc_new_user_iframe,uc_new_system_close'); + newUrl.searchParams.set('cli', 'mini_plans'); + } + return newUrl.toString(); + } catch (error) { + this.masElement.log?.error('Failed to add 3-in-1 modal parameters', error); + } + } + + /** + * Sets `data-modal-type` attribute and returns the modal type. + * @param {HTMLElement} el + * @param {string} url + */ + setModalType(el, url) { + try { + const newUrl = new URL(url); + const modalParam = newUrl.searchParams.get('modal'); + if ([MODAL_TYPE_3_IN_1.TWP, MODAL_TYPE_3_IN_1.D2P, MODAL_TYPE_3_IN_1.CRM].includes(modalParam)) { + el?.setAttribute('data-modal-type', modalParam); + return modalParam; + } + } catch (error) { + this.masElement.log?.error('Failed to set modal type', error); + } + } + + /** + * Renders checkout link href for provided offers into this component. + * @param {Commerce.Wcs.Offer[]} offers + * @param {Commerce.Checkout.Options} options + * @param {Commerce.Checkout.AnyOptions} overrides + * @param {Commerce.Checkout.CheckoutAction} checkoutAction + * @param {number} version + */ + renderOffers( + offers, + options, + overrides = {}, + checkoutAction = undefined, + version = undefined, + ) { + // eslint-disable-next-line react-hooks/rules-of-hooks + const service = useService(); + if (!service) return false; + const extraOptions = JSON.parse( + this.dataset.extraOptions ?? 'null', + ); + options = { ...extraOptions, ...options, ...overrides }; + version ??= this.masElement.togglePending(options); + if (this.checkoutActionHandler) { + /* c8 ignore next 2 */ + this.checkoutActionHandler = undefined; + } + let modalType; + if (checkoutAction) { + this.classList.remove(CLASS_NAME_DOWNLOAD, CLASS_NAME_UPGRADE); + this.masElement.toggleResolved(version, offers, options); + const { url, text, className, handler } = checkoutAction; + if (url) { + this.setCheckoutUrl(url); + modalType = this.setModalType(this, url) + } + if (text) this.firstElementChild.innerHTML = text; + if (className) this.classList.add(...className.split(' ')); + if (handler) { + this.setCheckoutUrl('#'); + this.checkoutActionHandler = handler.bind(this); + } + if (!modalType) return true; + } + if (offers.length) { + if (this.masElement.toggleResolved(version, offers, options)) { + const url = service.buildCheckoutURL(offers, options); + const urlToSet = checkoutAction && modalType ? this.add3in1ModalParams(url, modalType) : url; + this.setCheckoutUrl(urlToSet); + return true; + } + } else { + const error = new Error( + `Not provided: ${options?.wcsOsi ?? '-'}`, + ); + if (this.masElement.toggleFailed(version, error, options)) { + this.setCheckoutUrl('#'); + return true; + } + } + } + + setCheckoutUrl() { + // to be implemented in the subclass + } + + clickHandler(e) { + // to be implemented in the subclass + } + + updateOptions(options = {}) { + // eslint-disable-next-line react-hooks/rules-of-hooks + const service = useService(); + if (!service) return false; + const { + checkoutMarketSegment, + checkoutWorkflow, + checkoutWorkflowStep, + entitlement, + upgrade, + modal, + perpetual, + promotionCode, + quantity, + wcsOsi, + } = service.collectCheckoutOptions(options); + updateMasElement(this, { + checkoutMarketSegment, + checkoutWorkflow, + checkoutWorkflowStep, + entitlement, + upgrade, + modal, + perpetual, + promotionCode, + quantity, + wcsOsi, + }); + return true; + } + }; +} diff --git a/libs/features/mas/commerce/src/checkout.js b/libs/features/mas/src/checkout.js similarity index 97% rename from libs/features/mas/commerce/src/checkout.js rename to libs/features/mas/src/checkout.js index 43150b8a28b..351379b47b1 100644 --- a/libs/features/mas/commerce/src/checkout.js +++ b/libs/features/mas/src/checkout.js @@ -2,12 +2,12 @@ import { CheckoutLink } from './checkout-link.js'; import { CheckoutWorkflow, CheckoutWorkflowStep, - buildCheckoutUrl, computePromoStatus, omitProperties, toBoolean, toEnumeration, } from './external.js'; +import { buildCheckoutUrl } from './buildCheckoutUrl.js'; import { Defaults } from './defaults.js'; import { toOfferSelectorIds, toQuantity } from './utilities.js'; @@ -138,7 +138,7 @@ export function Checkout({ providers, settings }) { })), ); } - return buildCheckoutUrl(workflow, data); + return buildCheckoutUrl(data); } const { createCheckoutLink } = CheckoutLink; diff --git a/libs/features/mas/commerce/src/index.js b/libs/features/mas/src/commerce.js similarity index 84% rename from libs/features/mas/commerce/src/index.js rename to libs/features/mas/src/commerce.js index e7806672915..8950d3e3d67 100644 --- a/libs/features/mas/commerce/src/index.js +++ b/libs/features/mas/src/commerce.js @@ -1,4 +1,6 @@ import { CheckoutLink } from './checkout-link.js'; +import { CheckoutButton } from './checkout-button.js'; +import { UptLink } from './upt-link.js'; import { Landscape } from './constants.js'; import { Defaults } from './defaults.js'; import { TAG_NAME_SERVICE } from './mas-commerce-service.js'; @@ -17,8 +19,10 @@ import { getSettings } from './settings.js'; export { TAG_NAME_SERVICE, CheckoutLink, + CheckoutButton, CheckoutWorkflow, CheckoutWorkflowStep, + UptLink, Defaults, InlinePrice, Log, diff --git a/libs/features/mas/web-components/src/constants.js b/libs/features/mas/src/constants.js similarity index 52% rename from libs/features/mas/web-components/src/constants.js rename to libs/features/mas/src/constants.js index e456f570cd7..c714be1b563 100644 --- a/libs/features/mas/web-components/src/constants.js +++ b/libs/features/mas/src/constants.js @@ -38,16 +38,15 @@ export const EVENT_MERCH_STOCK_CHANGE = 'merch-stock:change'; export const EVENT_MERCH_STORAGE_CHANGE = 'merch-storage:change'; - export const EVENT_MERCH_QUANTITY_SELECTOR_CHANGE = -'merch-quantity-selector:change'; + 'merch-quantity-selector:change'; export const EVENT_MERCH_SEARCH_CHANGE = 'merch-search:change'; export const EVENT_MERCH_CARD_COLLECTION_SORT = 'merch-card-collection:sort'; export const EVENT_MERCH_CARD_COLLECTION_SHOWMORE = -'merch-card-collection:showmore'; + 'merch-card-collection:showmore'; export const EVENT_MERCH_SIDENAV_SELECT = 'merch-sidenav:select'; @@ -55,3 +54,57 @@ export const EVENT_AEM_LOAD = 'aem:load'; export const EVENT_AEM_ERROR = 'aem:error'; export const EVENT_MAS_READY = 'mas:ready'; export const EVENT_MAS_ERROR = 'mas:error'; + +export const CLASS_NAME_FAILED = 'placeholder-failed'; +export const CLASS_NAME_PENDING = 'placeholder-pending'; +export const CLASS_NAME_RESOLVED = 'placeholder-resolved'; + +export const ERROR_MESSAGE_BAD_REQUEST = 'Bad WCS request'; +export const ERROR_MESSAGE_OFFER_NOT_FOUND = 'Commerce offer not found'; +export const ERROR_MESSAGE_MISSING_LITERALS_URL = 'Literals URL not provided'; + +export const EVENT_TYPE_FAILED = 'mas:failed'; +export const EVENT_TYPE_RESOLVED = 'mas:resolved'; + +export const LOG_NAMESPACE = 'mas/commerce'; + +export const PARAM_ENV = 'commerce.env'; +export const PARAM_LANDSCAPE = 'commerce.landscape'; +export const PARAM_AOS_API_KEY = 'commerce.aosKey'; +export const PARAM_WCS_API_KEY = 'commerce.wcsKey'; + +export const WCS_PROD_URL = 'https://www.adobe.com/web_commerce_artifact'; +export const WCS_STAGE_URL = + 'https://www.stage.adobe.com/web_commerce_artifact_stage'; + +export const STATE_FAILED = 'failed'; +export const STATE_PENDING = 'pending'; +export const STATE_RESOLVED = 'resolved'; + +export const Landscape = { + DRAFT: 'DRAFT', + PUBLISHED: 'PUBLISHED', +}; + +export const WORKFLOW_STEP = { + CHECKOUT: 'checkout', + CHECKOUT_EMAIL: 'checkout/email', + SEGMENTATION: 'segmentation', + BUNDLE: 'bundle', + COMMITMENT: 'commitment', + RECOMMENDATION: 'recommendation', + EMAIL: 'email', + PAYMENT: 'payment', + CHANGE_PLAN_TEAM_PLANS: 'change-plan/team-upgrade/plans', + CHANGE_PLAN_TEAM_PAYMENT: 'change-plan/team-upgrade/payment', +} + +export const PROVIDER_ENVIRONMENT = { + PRODUCTION: 'PRODUCTION', +}; + +export const MODAL_TYPE_3_IN_1 = { + TWP: 'twp', + D2P: 'd2p', + CRM: 'crm', +} diff --git a/libs/features/mas/web-components/src/deeplink.js b/libs/features/mas/src/deeplink.js similarity index 100% rename from libs/features/mas/web-components/src/deeplink.js rename to libs/features/mas/src/deeplink.js diff --git a/libs/features/mas/commerce/src/defaults.js b/libs/features/mas/src/defaults.js similarity index 96% rename from libs/features/mas/commerce/src/defaults.js rename to libs/features/mas/src/defaults.js index da7ac92f14b..b0c2025292e 100644 --- a/libs/features/mas/commerce/src/defaults.js +++ b/libs/features/mas/src/defaults.js @@ -5,7 +5,6 @@ import { } from './external.js'; import { Landscape } from './constants.js'; -/** @type {Commerce.Defaults} */ export const Defaults = Object.freeze({ checkoutClientId: 'adobe_com', checkoutWorkflow: CheckoutWorkflow.V3, diff --git a/libs/features/mas/src/discount/index.js b/libs/features/mas/src/discount/index.js new file mode 100644 index 00000000000..b0e624e1d72 --- /dev/null +++ b/libs/features/mas/src/discount/index.js @@ -0,0 +1,5 @@ +import { createDiscountTemplate } from './template.js'; + +const discount = createDiscountTemplate(); + +export { discount }; diff --git a/libs/features/mas/src/discount/template.js b/libs/features/mas/src/discount/template.js new file mode 100644 index 00000000000..910ce4899c8 --- /dev/null +++ b/libs/features/mas/src/discount/template.js @@ -0,0 +1,29 @@ +import { isPositiveFiniteNumber } from '@dexter/tacocat-core'; + +const getDiscount = (price, priceWithoutDiscount) => { + if ( + !isPositiveFiniteNumber(price) || + !isPositiveFiniteNumber(priceWithoutDiscount) + ) + return; + return Math.floor( + ((priceWithoutDiscount - price) / priceWithoutDiscount) * 100, + ); +}; + +/** + * Renders the discount markup + * @param {PriceContext & PromoPriceContext} context + * @param {PriceData} value + * @param {PriceAttributes} attributes + !* @returns {string} the discount markup + !*/ +const createDiscountTemplate = () => (context, value) => { + const { price, priceWithoutDiscount } = value; + const discount = getDiscount(price, priceWithoutDiscount); + return discount === undefined + ? `` + : `${discount}%`; +}; + +export { getDiscount, createDiscountTemplate }; diff --git a/libs/features/mas/commerce/src/external.js b/libs/features/mas/src/external.js similarity index 75% rename from libs/features/mas/commerce/src/external.js rename to libs/features/mas/src/external.js index a25545ed449..37d25373eeb 100644 --- a/libs/features/mas/commerce/src/external.js +++ b/libs/features/mas/src/external.js @@ -1,9 +1,4 @@ // This file aliases and re-exports commonly used external dependencies -import { - CheckoutType, - WorkflowStep, - buildCheckoutUrl, -} from '@pandora/commerce-checkout-url-builder'; import { Term, Commitment } from '@pandora/data-models-odm'; import { @@ -12,10 +7,12 @@ import { priceOptical, priceStrikethrough, priceAnnual, - discount, priceWithAnnual, pricePromoWithAnnual, -} from '@dexter/tacocat-consonant-templates'; +} from './price/index.js'; + +import { discount } from './discount/index.js'; + import { computePromoStatus, delay, @@ -38,13 +35,26 @@ import { const { freeze } = Object; /** @type {Commerce.Checkout.CheckoutWorkflow} */ +const CheckoutType = { V2: 'UCv2', V3: 'UCv3' }; const CheckoutWorkflow = freeze({ ...CheckoutType }); /** @type {Commerce.Checkout.CheckoutWorkflowStep} */ +const WorkflowStep ={ + CHECKOUT: 'checkout', + CHECKOUT_EMAIL: 'checkout/email', + SEGMENTATION: 'segmentation', + BUNDLE: 'bundle', + COMMITMENT: 'commitment', + RECOMMENDATION: 'recommendation', + EMAIL: 'email', + PAYMENT: 'payment', + CHANGE_PLAN_TEAM_PLANS: 'change-plan/team-upgrade/plans', + CHANGE_PLAN_TEAM_PAYMENT: 'change-plan/team-upgrade/payment' +}; const CheckoutWorkflowStep = freeze({ ...WorkflowStep }); const Env = { - STAGE: "STAGE", - PRODUCTION: "PRODUCTION", - LOCAL: "LOCAL" + STAGE: 'STAGE', + PRODUCTION: 'PRODUCTION', + LOCAL: 'LOCAL', }; /** @type {Commerce.Wcs.WcsCommitment} */ const WcsCommitment = freeze({ ...Commitment }); @@ -61,7 +71,6 @@ export { WcsTerm, WcsPlanType, applyPlanType, - buildCheckoutUrl, computePromoStatus, delay, equalsCaseInsensitive, diff --git a/libs/features/mas/web-components/src/focus.js b/libs/features/mas/src/focus.js similarity index 100% rename from libs/features/mas/web-components/src/focus.js rename to libs/features/mas/src/focus.js diff --git a/libs/features/mas/web-components/src/global.css.js b/libs/features/mas/src/global.css.js similarity index 71% rename from libs/features/mas/web-components/src/global.css.js rename to libs/features/mas/src/global.css.js index 4a5c04d844b..54b048647a9 100644 --- a/libs/features/mas/web-components/src/global.css.js +++ b/libs/features/mas/src/global.css.js @@ -27,8 +27,10 @@ styles.innerHTML = ` --consonant-merch-card-cta-font-size: 15px; /* headings */ - --merch-card-heading-xxs-font-size: 16px; - --merch-card-heading-xxs-line-height: 20px; + --consonant-merch-card-heading-xxxs-font-size: 14px; + --consonant-merch-card-heading-xxxs-line-height: 18px; + --consonant-merch-card-heading-xxs-font-size: 16px; + --consonant-merch-card-heading-xxs-line-height: 20px; --consonant-merch-card-heading-xs-font-size: 18px; --consonant-merch-card-heading-xs-line-height: 22.5px; --consonant-merch-card-heading-s-font-size: 20px; @@ -41,12 +43,14 @@ styles.innerHTML = ` --consonant-merch-card-heading-xl-line-height: 45px; /* detail */ - --merch-card-detail-s-font-size: 11px; - --merch-card-detail-s-line-height: 14px; + --consonant-merch-card-detail-s-font-size: 11px; + --consonant-merch-card-detail-s-line-height: 14px; --consonant-merch-card-detail-m-font-size: 12px; --consonant-merch-card-detail-m-line-height: 15px; --consonant-merch-card-detail-m-font-weight: 700; --consonant-merch-card-detail-m-letter-spacing: 1px; + --consonant-merch-card-detail-l-line-height: 18px; + --consonant-merch-card-detail-xl-line-height: 23px; /* body */ --consonant-merch-card-body-xxs-font-size: 12px; @@ -61,34 +65,43 @@ styles.innerHTML = ` --consonant-merch-card-body-l-font-size: 20px; --consonant-merch-card-body-l-line-height: 30px; --consonant-merch-card-body-xl-font-size: 22px; + --consonant-merch-card-body-xxl-font-size: 24px; --consonant-merch-card-body-xl-line-height: 33px; --consonant-merch-card-heading-padding: 0; /* colors */ - --merch-card-background-color: var(--spectrum-gray-background-color-default, #fff); + --consonant-merch-card-background-color: inherit; --consonant-merch-card-border-color: #eaeaea; - --color-accent: #1473E6; + --color-accent: rgb(59, 99, 251); --merch-color-focus-ring: #1473E6; --merch-color-grey-10: #f6f6f6; - --merch-color-grey-60: #6D6D6D; + --merch-color-grey-50: var(--specturm-gray-50); + --merch-color-grey-60: var(--specturm-gray-600); --merch-color-grey-80: #2c2c2c; --merch-color-grey-200: #E8E8E8; --merch-color-grey-600: #686868; + --merch-color-grey-700: #464646; --merch-color-green-promo: #2D9D78; + --consonant-merch-card-body-xs-color: var(--spectrum-gray-100, var(--merch-color-grey-80)); + --merch-color-inline-price-strikethrough: initial; + --consonant-merch-card-detail-s-color: var(--spectrum-gray-600, var(--merch-color-grey-600)); + --consonant-merch-card-heading-color: var(--spectrum-gray-800, var(--merch-color-grey-80)); + --consonant-merch-card-heading-xs-color: var(--consonant-merch-card-heading-color); + --consonant-merch-card-price-color: #222222; + --consonant-merch-card-heading-xxxs-color: #131313; + --consonant-merch-card-body-xxs-color: #292929; /* ccd colors */ - --ccd-gray-100-light: #F8F8F8; --ccd-gray-200-light: #E6E6E6; --ccd-gray-800-dark: #222; --ccd-gray-700-dark: #464646; --ccd-gray-600-light: #6D6D6D; - --ccd-gray-200-dark: #3F3F3F; - - - + /* ah colors */ + --ah-gray-500: #717171; + /* merch card generic */ --consonant-merch-card-max-width: 300px; --transition: cmax-height 0.3s linear, opacity 0.3s linear; @@ -142,32 +155,53 @@ merch-card-collection > div[slot] p { padding: var(--spacing-m); } +merch-card[variant="ccd-suggested"] *, +merch-card[variant="ccd-slice"] * { + box-sizing: border-box; +} + +merch-card * { + padding: revert-layer; +} + merch-card.background-opacity-70 { background-color: rgba(255 255 255 / 70%); } merch-card.has-divider hr { - margin-bottom: var(--consonant-merch-spacing-xs); + margin: var(--consonant-merch-spacing-xs) 0; height: 1px; border: none; } +merch-card.has-divider div[slot='body-lower'] hr { + margin: 0; +} + merch-card p, merch-card h3, merch-card h4 { margin: 0; } -merch-card span[is=inline-price] { +merch-card span[is='inline-price'] { display: inline-block; } merch-card [slot^='heading-'] { - color: var(--spectrum-gray-800, var(--merch-color-grey-80)); + color: var(--consonant-merch-card-heading-color); font-weight: 700; } +merch-card [slot='heading-xxxs'] { + font-size: var(--consonant-merch-card-heading-xxxs-font-size); + line-height: var(--consonant-merch-card-heading-xxxs-line-height); + color: var(--consonant-merch-card-heading-xxxs-color); + letter-spacing: normal; +} + merch-card [slot='heading-xs'] { font-size: var(--consonant-merch-card-heading-xs-font-size); line-height: var(--consonant-merch-card-heading-xs-line-height); + color: var(--consonant-merch-card-heading-xs-color); margin: 0; } @@ -232,6 +266,28 @@ merch-card [slot='callout-content'] { gap: var(--consonant-merch-card-callout-spacing-xxs); } +merch-card [slot='callout-content'] > p { + background: rgba(203 203 203 / 50%); + border-radius: var(--consonant-merch-spacing-xxxs); + padding: var(--consonant-merch-spacing-xxxs) var(--consonant-merch-spacing-xxs); + width: fit-content; + font-size: var(--consonant-merch-card-callout-font-size); + line-height: var(--consonant-merch-card-callout-line-height); +} + +merch-card [slot='callout-content'] .icon-button { + position: relative; + top: 3px; +} + +merch-card [slot='callout-content'] .icon-button:before { + display: inline-block; + content: ''; + width: 14px; + height: 14px; + background-image: url('data:image/svg+xml,') +} + merch-card [slot='callout-content'] > div { display: flex; flex-direction: column; @@ -264,12 +320,12 @@ merch-card [slot='callout-content'] img { } merch-card [slot='detail-s'] { - font-size: var(--merch-card-detail-s-font-size); - line-height: var(--merch-card-detail-s-line-height); + font-size: var(--consonant-merch-card-detail-s-font-size); + line-height: var(--consonant-merch-card-detail-s-line-height); letter-spacing: 0.66px; font-weight: 700; text-transform: uppercase; - color: var(--spectrum-gray-600, var(--merch-color-grey-600)); + color: var(--consonant-merch-card-detail-s-color); } merch-card [slot='detail-m'] { @@ -290,10 +346,31 @@ merch-card [slot="body-xxs"] { color: var(--merch-color-grey-80); } +merch-card [slot="body-s"] { + color: var(--consonant-merch-card-body-s-color); +} + +merch-card button.spectrum-Button > a { + color: inherit; + text-decoration: none; +} + +merch-card button.spectrum-Button > a:hover { + color: inherit; +} + +merch-card button.spectrum-Button > a:active { + color: inherit; +} + +merch-card button.spectrum-Button > a:focus { + color: inherit; +} + merch-card [slot="body-xs"] { font-size: var(--consonant-merch-card-body-xs-font-size); line-height: var(--consonant-merch-card-body-xs-line-height); - color: var(--merch-color-grey-80); + color: var(--consonant-merch-card-body-xs-color); } merch-card [slot="body-m"] { @@ -314,13 +391,9 @@ merch-card [slot="body-xl"] { color: var(--merch-color-grey-80); } -merch-card a.primary-link { - color: var(--spectrum-global-color-blue-700); -} - -[slot="cci-footer"] p, -[slot="cct-footer"] p, -[slot="cce-footer"] p { +merch-card [slot="cci-footer"] p, +merch-card [slot="cct-footer"] p, +merch-card [slot="cce-footer"] p { margin: 0; } @@ -334,21 +407,33 @@ merch-card [slot="promo-text"] { padding: 0; } -div[slot="footer"] { +merch-card [slot="footer-rows"] { + min-height: var(--consonant-merch-card-footer-rows-height); +} + +merch-card div[slot="footer"] { display: contents; } -[slot="footer"] a { +merch-card.product div[slot="footer"] { + display: block; +} + +merch-card.product div[slot="footer"] a + a { + margin: 5px 0 0 5px; +} + +merch-card [slot="footer"] a { word-wrap: break-word; text-align: center; } -[slot="footer"] a:not([class]) { +merch-card [slot="footer"] a:not([class]) { font-weight: 700; font-size: var(--consonant-merch-card-cta-font-size); } -div[slot='bg-image'] img { +merch-card div[slot='bg-image'] img { position: relative; width: 100%; min-height: var(--consonant-merch-card-bg-img-height); @@ -358,25 +443,18 @@ div[slot='bg-image'] img { border-top-right-radius: 16px; } -span[is="inline-price"][data-template='strikethrough'] { - text-decoration: line-through; -} - -merch-card sp-button a { - text-decoration: none; - color: var( - --highcontrast-button-content-color-default, - var( - --mod-button-content-color-default, - var(--spectrum-button-content-color-default) - ) - ); +.price-unit-type:not(.disabled)::before, +.price-tax-inclusivity:not(.disabled)::before { + content: "\\00a0"; } +merch-card span.placeholder-resolved[data-template='priceStrikethrough'], merch-card span.placeholder-resolved[data-template='strikethrough'], merch-card span.price.price-strikethrough { font-size: var(--consonant-merch-card-body-xs-font-size); font-weight: normal; + text-decoration: line-through; + color: var(--merch-color-inline-price-strikethrough); } /* merch-offer-select */ @@ -394,5 +472,15 @@ body.merch-modal { scrollbar-gutter: stable; height: 100vh; } + +merch-sidenav-checkbox-group h3 { + font-size: 14px; + height: 32px; + letter-spacing: 0px; + line-height: 18.2px; + color: var(--color-gray-600); + margin: 0px; +} + `; document.head.appendChild(styles); diff --git a/libs/features/mas/src/hydrate.js b/libs/features/mas/src/hydrate.js new file mode 100644 index 00000000000..f80696da5f5 --- /dev/null +++ b/libs/features/mas/src/hydrate.js @@ -0,0 +1,483 @@ +import { UptLink } from './upt-link.js'; +import { createTag } from './utils.js'; + +const DEFAULT_BADGE_COLOR = '#000000'; +const DEFAULT_BADGE_BACKGROUND_COLOR = '#F8D904'; +const DEFAULT_BORDER_COLOR = '#EAEAEA'; +const CHECKOUT_STYLE_PATTERN = /(accent|primary|secondary)(-(outline|link))?/; +export const ANALYTICS_TAG = 'mas:product_code/'; +export const ANALYTICS_LINK_ATTR = 'daa-ll'; +export const ANALYTICS_SECTION_ATTR = 'daa-lh'; +const SPECTRUM_BUTTON_SIZES = ['XL', 'L', 'M', 'S']; +const TEXT_TRUNCATE_SUFFIX = '...'; + +export function appendSlot(fieldName, fields, el, mapping) { + const config = mapping[fieldName]; + if (fields[fieldName] && config) { + const attributes = { slot: config?.slot }; + let content = fields[fieldName]; + + // Handle maxCount if specified in the config + if (config.maxCount && typeof content === 'string') { + const [truncatedContent, cleanContent] = getTruncatedTextData(content, config.maxCount, config.withSuffix); + if (truncatedContent !== content) { + attributes.title = cleanContent; // Add full text as title attribute for tooltip + content = truncatedContent; + } + } + + const tag = createTag( + config.tag, + attributes, + content, + ); + el.append(tag); + } +} + +export function processMnemonics(fields, merchCard, mnemonicsConfig) { + const mnemonics = fields.mnemonicIcon?.map((icon, index) => ({ + icon, + alt: fields.mnemonicAlt[index] ?? '', + link: fields.mnemonicLink[index] ?? '', + })); + + mnemonics?.forEach(({ icon: src, alt, link: href }) => { + if (href && !/^https?:/.test(href)) { + try { + href = new URL(`https://${href}`).href.toString(); + } catch (e) { + /* c8 ignore next 2 */ + href = '#'; + } + } + + const attrs = { + slot: 'icons', + src, + loading: merchCard.loading, + size: mnemonicsConfig?.size ?? 'l', + }; + if (alt) attrs.alt = alt; + if (href) attrs.href = href; + const merchIcon = createTag('merch-icon', attrs); + merchCard.append(merchIcon); + }); +} + +function processBadge(fields, merchCard) { + if (fields.badge) { + merchCard.setAttribute('badge-text', fields.badge); + merchCard.setAttribute( + 'badge-color', + fields.badgeColor || DEFAULT_BADGE_COLOR, + ); + merchCard.setAttribute( + 'badge-background-color', + fields.badgeBackgroundColor || DEFAULT_BADGE_BACKGROUND_COLOR, + ); + merchCard.setAttribute( + 'border-color', + fields.badgeBackgroundColor || DEFAULT_BADGE_BACKGROUND_COLOR, + ); + } else { + merchCard.setAttribute( + 'border-color', + fields.borderColor || DEFAULT_BORDER_COLOR, + ); + } +} + +export function processSize(fields, merchCard, sizeConfig) { + if (sizeConfig?.includes(fields.size)) { + merchCard.setAttribute('size', fields.size); + } +} + +export function processTitle(fields, merchCard, titleConfig) { + // Use the enhanced appendSlot function for consistency + appendSlot('cardTitle', fields, merchCard, { cardTitle: titleConfig }); +} + +export function processSubtitle(fields, merchCard, mapping) { + appendSlot('subtitle', fields, merchCard, mapping); +} + +export function processBackgroundColor(fields, merchCard, allowedColors) { + if (!fields.backgroundColor || fields.backgroundColor.toLowerCase() === 'default') { + merchCard.style.removeProperty('--merch-card-custom-background-color'); + merchCard.removeAttribute('background-color'); + return; + } + + if (allowedColors?.[fields.backgroundColor]) { + merchCard.style.setProperty('--merch-card-custom-background-color', `var(${allowedColors[fields.backgroundColor]})`); + merchCard.setAttribute('background-color', fields.backgroundColor); + } +} + +export function processBorderColor(fields, merchCard, borderColorConfig) { + if (fields.borderColor && borderColorConfig && fields.borderColor !== 'transparent') { + merchCard.style.setProperty('--merch-card-custom-border-color', `var(--${fields.borderColor})`); + } +} + +export function processBackgroundImage( + fields, + merchCard, + backgroundImageConfig, +) { + if (fields.backgroundImage) { + const imgAttributes = { + loading: merchCard.loading ?? 'lazy', + src: fields.backgroundImage, + }; + if (fields.backgroundImageAltText) { + imgAttributes.alt = fields.backgroundImageAltText; + } else { + imgAttributes.role = 'none'; + } + if (!backgroundImageConfig) return; + if (backgroundImageConfig?.attribute) { + merchCard.setAttribute( + backgroundImageConfig.attribute, + fields.backgroundImage, + ); + return; + } + merchCard.append( + createTag( + backgroundImageConfig.tag, + { slot: backgroundImageConfig.slot }, + createTag('img', imgAttributes), + ), + ); + } +} + +export function processPrices(fields, merchCard, mapping) { + appendSlot('prices', fields, merchCard, mapping); +} + +export function processDescription(fields, merchCard, mapping) { + appendSlot('promoText', fields, merchCard, mapping); + appendSlot('description', fields, merchCard, mapping); + appendSlot('callout', fields, merchCard, mapping); + appendSlot('quantitySelect', fields, merchCard, mapping); +} + +export function processStockOffersAndSecureLabel(fields, merchCard, aemFragmentMapping, settings) { + // for Stock Checkbox, presence flag is set on the card, label and osi for an offer are set in settings + if (fields.showStockCheckbox && aemFragmentMapping.stockOffer) { + merchCard.setAttribute('checkbox-label', settings.stockCheckboxLabel); + merchCard.setAttribute('stock-offer-osis', settings.stockOfferOsis); + } + if (settings.secureLabel && aemFragmentMapping.secureLabel) { + merchCard.setAttribute('secure-label', settings.secureLabel); + } +} + +export function getTruncatedTextData(text, limit, withSuffix = true) { + try { + const _text = typeof text !== 'string' ? '' : text; + const cleanText = clearTags(_text); + if (cleanText.length <= limit) return [_text, cleanText]; + + let index = 0; + let inTag = false; + let remaining = withSuffix ? (limit - TEXT_TRUNCATE_SUFFIX.length < 1 ? 1 : limit - TEXT_TRUNCATE_SUFFIX.length) : limit; + let openTags = []; + + for (const char of _text) { + index++; + if (char === '<') { + inTag = true; + // Check next character + if (_text[index] === '/') { + openTags.pop(); + } + else { + let tagName = ''; + for (const tagChar of _text.substring(index)) { + if (tagChar === ' ' || tagChar === '>') break; + tagName += tagChar; + } + openTags.push(tagName); + } + } + if (char === '/') { + // Check next character + if (_text[index] === '>') { + openTags.pop(); + } + } + if (char === '>') { + inTag = false; + continue; + } + if (inTag) continue; + remaining--; + if (remaining === 0) break; + } + + let trimmedText = _text.substring(0, index).trim(); + if (openTags.length > 0) { + if (openTags[0] === 'p') openTags.shift(); + for (const tag of openTags.reverse()) { + trimmedText += `` + } + } + let truncatedText = `${trimmedText}${withSuffix ? TEXT_TRUNCATE_SUFFIX : ''}`; + return [truncatedText, cleanText]; + } catch (error) { + // Fallback to original text without truncation + const fallbackText = typeof text === 'string' ? text : ''; + const cleanFallback = clearTags(fallbackText); + return [fallbackText, cleanFallback]; + } +} + +function clearTags(text) { + if (!text) return ''; + + let result = ''; + let inTag = false; + for (const char of text) { + if (char === '<') inTag = true; + if (char === '>') { + inTag = false; + continue; + } + if (inTag) continue; + result += char; + } + return result; +} + +export function processUptLinks(fields, merchCard) { + const placeholders = merchCard.querySelectorAll('a.upt-link'); + placeholders.forEach(placeholder => { + const uptLink = UptLink.createFrom(placeholder); + placeholder.replaceWith(uptLink); + uptLink.initializeWcsData(fields.osi, fields.promoCode); + }); +} + +function createSpectrumCssButton(cta, aemFragmentMapping, isOutline, variant) { + const CheckoutButton = customElements.get('checkout-button'); + const spectrumCta = CheckoutButton.createCheckoutButton({}, cta.innerHTML); + spectrumCta.setAttribute('tabindex', 0); + for (const attr of cta.attributes) { + if (['class', 'is'].includes(attr.name)) continue; + spectrumCta.setAttribute(attr.name, attr.value); + } + spectrumCta.firstElementChild?.classList.add('spectrum-Button-label'); + const size = aemFragmentMapping.ctas.size ?? 'M'; + const variantClass = `spectrum-Button--${variant}`; + const sizeClass = SPECTRUM_BUTTON_SIZES.includes(size) + ? `spectrum-Button--size${size}` + : 'spectrum-Button--sizeM'; + const spectrumClass = ['spectrum-Button', variantClass, sizeClass]; + if (isOutline) { + spectrumClass.push('spectrum-Button--outline'); + } + + spectrumCta.classList.add(...spectrumClass); + return spectrumCta; +} + +function createSpectrumSwcButton(cta, aemFragmentMapping, isOutline, variant) { + const CheckoutButton = customElements.get('checkout-button'); + const checkoutButton = CheckoutButton.createCheckoutButton(cta.dataset); + if (cta.dataset.analyticsId) { + checkoutButton.setAttribute('data-analytics-id', cta.dataset.analyticsId); + } + checkoutButton.connectedCallback(); + checkoutButton.render(); + + let treatment = 'fill'; + + if (isOutline) { + treatment = 'outline'; + } + + const spectrumCta = createTag( + 'sp-button', + { + treatment, + variant, + tabIndex: 0, + size: aemFragmentMapping.ctas.size ?? 'm', + ...(cta.dataset.analyticsId && { 'data-analytics-id': cta.dataset.analyticsId }), + }, + cta.innerHTML, + ); + + spectrumCta.source = checkoutButton; + checkoutButton.onceSettled().then((target) => { + spectrumCta.setAttribute('data-navigation-url', target.href); + }); + + spectrumCta.addEventListener('click', (e) => { + if (e.defaultPrevented) return; + checkoutButton.click(); + }); + + return spectrumCta; +} + +function createConsonantButton(cta, isAccent) { + cta.classList.add('con-button'); + if (isAccent) { + cta.classList.add('blue'); + } + return cta; +} + +export function processCTAs(fields, merchCard, aemFragmentMapping, variant) { + if (fields.ctas) { + const { slot } = aemFragmentMapping.ctas; + const footer = createTag('div', { slot }, fields.ctas); + + const ctas = [...footer.querySelectorAll('a')].map((cta) => { + const checkoutLinkStyle = + CHECKOUT_STYLE_PATTERN.exec(cta.className)?.[0] ?? 'accent'; + const isAccent = checkoutLinkStyle.includes('accent'); + const isPrimary = checkoutLinkStyle.includes('primary'); + const isSecondary = checkoutLinkStyle.includes('secondary'); + const isOutline = checkoutLinkStyle.includes('-outline'); + const isLink = checkoutLinkStyle.includes('-link'); + if (merchCard.consonant) return createConsonantButton(cta, isAccent); + if (isLink) { + return cta; + } + + let variant; + if (isAccent) { + variant = 'accent'; + } else if (isPrimary) { + variant = 'primary'; + } else if (isSecondary) { + variant = 'secondary'; + } + + return merchCard.spectrum === 'swc' + ? createSpectrumSwcButton(cta, aemFragmentMapping, isOutline, variant) + : createSpectrumCssButton(cta, aemFragmentMapping, isOutline, variant); + }); + + footer.innerHTML = ''; + footer.append(...ctas); + merchCard.append(footer); + } +} + +export function processAnalytics(fields, merchCard) { + const { tags } = fields; + const cardAnalyticsId = tags + ?.find((tag) => tag.startsWith(ANALYTICS_TAG)) + ?.split('/') + .pop(); + if (!cardAnalyticsId) return; + merchCard.setAttribute(ANALYTICS_SECTION_ATTR, cardAnalyticsId); + const elements = [ + ...merchCard.shadowRoot.querySelectorAll(`a[data-analytics-id],button[data-analytics-id]`), + ...merchCard.querySelectorAll(`a[data-analytics-id],button[data-analytics-id]`) + ]; + elements.forEach((el, index) => { + el.setAttribute( + ANALYTICS_LINK_ATTR, + `${el.dataset.analyticsId}-${index + 1}`, + ); + }); +} + +export function updateLinksCSS(merchCard) { + if (merchCard.spectrum !== 'css') return; + [ + ['primary-link', 'primary'], + ['secondary-link', 'secondary'], + ].forEach(([className, variant]) => { + merchCard.querySelectorAll(`a.${className}`).forEach((link) => { + link.classList.remove(className); + link.classList.add('spectrum-Link', `spectrum-Link--${variant}`); + }); + }); +} + +export function cleanup(merchCard) { + // remove all previous slotted content except the default slot + merchCard.querySelectorAll('[slot]').forEach((el) => { + el.remove(); + }); + const attributesToRemove = [ + 'checkbox-label', + 'stock-offer-osis', + 'secure-label', + 'background-image', + 'background-color', + 'border-color', + 'badge-background-color', + 'badge-color', + 'badge-text', + 'size', + ANALYTICS_SECTION_ATTR, + ]; + attributesToRemove.forEach(attr => merchCard.removeAttribute(attr)); + const classesToRemove = ['wide-strip', 'thin-strip']; + merchCard.classList.remove(...classesToRemove); +} + +export async function hydrate(fragment, merchCard) { + const { fields } = fragment; + const { variant } = fields; + if (!variant) return; + // temporary hardcode for plans. this data will be coming from settings (MWPW-166756) + const settings = { + stockCheckboxLabel: 'Add a 30-day free trial of Adobe Stock.*', // to be {{stock-checkbox-label}} + stockOfferOsis: '', + secureLabel: 'Secure transaction' // to be {{secure-transaction}} + }; + cleanup(merchCard); + merchCard.id = fragment.id; + + + merchCard.removeAttribute('background-image'); + merchCard.removeAttribute('background-color'); + merchCard.removeAttribute('badge-background-color'); + merchCard.removeAttribute('badge-color'); + merchCard.removeAttribute('badge-text'); + merchCard.removeAttribute('size'); + merchCard.classList.remove('wide-strip'); + merchCard.classList.remove('thin-strip'); + merchCard.removeAttribute(ANALYTICS_SECTION_ATTR); + + merchCard.variant = variant; + await merchCard.updateComplete; + + const { aemFragmentMapping } = merchCard.variantLayout; + if (!aemFragmentMapping) return; + + if (aemFragmentMapping.style === 'consonant') { + merchCard.setAttribute('consonant', true); + } + processMnemonics(fields, merchCard, aemFragmentMapping.mnemonics); + processBadge(fields, merchCard); + processSize(fields, merchCard, aemFragmentMapping.size); + processTitle(fields, merchCard, aemFragmentMapping.title); + processSubtitle(fields, merchCard, aemFragmentMapping); + processPrices(fields, merchCard, aemFragmentMapping); + processBackgroundImage( + fields, + merchCard, + aemFragmentMapping.backgroundImage, + ); + processBackgroundColor(fields, merchCard, aemFragmentMapping.allowedColors); + processBorderColor(fields, merchCard, aemFragmentMapping.borderColor); + processDescription(fields, merchCard, aemFragmentMapping); + processStockOffersAndSecureLabel(fields, merchCard, aemFragmentMapping, settings); + processUptLinks(fields, merchCard); + processCTAs(fields, merchCard, aemFragmentMapping, variant); + processAnalytics(fields, merchCard); + updateLinksCSS(merchCard); +} diff --git a/libs/features/mas/commerce/src/ims.js b/libs/features/mas/src/ims.js similarity index 100% rename from libs/features/mas/commerce/src/ims.js rename to libs/features/mas/src/ims.js diff --git a/libs/features/mas/commerce/src/inline-price.js b/libs/features/mas/src/inline-price.js similarity index 99% rename from libs/features/mas/commerce/src/inline-price.js rename to libs/features/mas/src/inline-price.js index c0cc71b6406..8e4bbb52131 100644 --- a/libs/features/mas/commerce/src/inline-price.js +++ b/libs/features/mas/src/inline-price.js @@ -174,6 +174,10 @@ export class InlinePrice extends HTMLSpanElement { return this.masElement.value; } + get options() { + return this.masElement.options; + } + requestUpdate(force = false) { return this.masElement.requestUpdate(force); } @@ -267,7 +271,6 @@ export class InlinePrice extends HTMLSpanElement { /** * Renders price offer as HTML of this component * using consonant price template functions - * from package `@dexter/tacocat-consonant-templates`. * @param {Commerce.Wcs.Offer[]} offers * @param {Record} overrides * Optional object with properties to use as overrides diff --git a/libs/features/mas/src/lana.js b/libs/features/mas/src/lana.js new file mode 100644 index 00000000000..ee43ba93e12 --- /dev/null +++ b/libs/features/mas/src/lana.js @@ -0,0 +1,108 @@ +// Default configuration for logging system +const config = { + clientId: 'merch-at-scale', + delimiter: 'Âļ', + ignoredProperties: ['analytics', 'literals'], + serializableTypes: ['Array', 'Object'], + sampleRate: 1, + tags: 'acom', + isProdDomain: false, +}; +// total lana limit in /utils/lana.js is 2000 +const PAGE_LIMIT = 1000; + +const seenPayloads = new Set(); + +function isError(value) { + return ( + value instanceof Error || typeof value?.originatingRequest === 'string' + ); +} + +function serializeValue(value) { + if (value == null) return undefined; + const type = typeof value; + + if (type === 'function') { + return value.name ? `function ${value.name}` : 'function'; + } + + if (type === 'object') { + if (value instanceof Error) return value.message; + + if (typeof value.originatingRequest === 'string') { + const { message, originatingRequest, status } = value; + return [message, status, originatingRequest] + .filter(Boolean) + .join(' '); + } + + const objectType = + value[Symbol.toStringTag] ?? + Object.getPrototypeOf(value).constructor.name; + if (!config.serializableTypes.includes(objectType)) return objectType; + } + return value; +} + +// Custom serializer that respects ignored properties +function serializeParam(key, value) { + if (config.ignoredProperties.includes(key)) return undefined; + return serializeValue(value); +} + +const lanaAppender = { + append(entry) { + if (entry.level !== 'error') return; + const { message, params } = entry; + const errors = []; + const values = []; + let payload = message; + + params.forEach((param) => { + if (param != null) { + (isError(param) ? errors : values).push(param); + } + }); + + if (errors.length) { + payload += ' ' + errors.map(serializeValue).join(' '); + } + + const { pathname, search } = window.location; + let page = `${config.delimiter}page=${pathname}${search}`; + if (page.length > PAGE_LIMIT) { + page = `${page.slice(0, PAGE_LIMIT)}`; + } + payload += page; + + if (values.length) { + payload += `${config.delimiter}facts=`; + payload += JSON.stringify(values, serializeParam); + } + + if (!seenPayloads.has(payload)) { + seenPayloads.add(payload); + window.lana?.log(payload, config); + } + }, +}; + +// Allow dynamic config updates +function updateConfig(newConfig) { + Object.assign( + config, + Object.fromEntries( + Object.entries(newConfig).filter( + ([key, value]) => + key in config && + value !== '' && + value !== null && + value !== undefined && + !Number.isNaN(value), // Correctly exclude NaN + ), + ), + ); +} + +export { config, lanaAppender, updateConfig }; diff --git a/libs/features/mas/commerce/src/literals.js b/libs/features/mas/src/literals.js similarity index 100% rename from libs/features/mas/commerce/src/literals.js rename to libs/features/mas/src/literals.js diff --git a/libs/features/mas/src/log.js b/libs/features/mas/src/log.js new file mode 100644 index 00000000000..32280e18107 --- /dev/null +++ b/libs/features/mas/src/log.js @@ -0,0 +1,111 @@ +import { LOG_NAMESPACE } from './constants.js'; +import { getParameter, isFunction, toBoolean } from './external.js'; +import { lanaAppender, updateConfig } from './lana.js'; +import { HostEnv } from './settings.js'; + +const LogLevels = { + DEBUG: 'debug', + ERROR: 'error', + INFO: 'info', + WARN: 'warn', +}; + +const startTime = Date.now(); +const appenders = new Set(); +const filters = new Set(); +const loggerIndexes = new Map(); + +// Basic console logging for development +const consoleAppender = { + append({ level, message, params, timestamp, source }) { + console[level]( + `${timestamp}ms [${source}] %c${message}`, + 'font-weight: bold;', + ...params, + ); + }, +}; + +const debugFilter = { filter: ({ level }) => level !== LogLevels.DEBUG }; +const quietFilter = { filter: () => false }; + +function createEntry(level, message, namespace, params, source) { + return { + level, + message, + namespace, + get params() { + if (params.length === 1 && isFunction(params[0])) { + params = params[0](); + if (!Array.isArray(params)) params = [params]; + } + return params; + }, + source, + timestamp: Date.now() - startTime, + }; +} + +function handleEntry(entry) { + if ([...filters].every((filter) => filter(entry))) { + appenders.forEach((appender) => appender(entry)); + } +} + +function createLog(namespace) { + const index = (loggerIndexes.get(namespace) ?? 0) + 1; + loggerIndexes.set(namespace, index); + const id = `${namespace} #${index}`; + + const log = { + id, + namespace, + module: (name) => createLog(`${log.namespace}/${name}`), + updateConfig, + }; + + // Create logging methods for each level + Object.values(LogLevels).forEach((level) => { + log[level] = (message, ...params) => + handleEntry(createEntry(level, message, namespace, params, id)); + }); + + return Object.seal(log); +} + +// Plugin system for adding appenders and filters +function use(...plugins) { + plugins.forEach((plugin) => { + const { append, filter } = plugin; + if (isFunction(filter)) filters.add(filter); + if (isFunction(append)) appenders.add(append); + }); +} + +function init(env = {}) { + const { name } = env; + const debug = toBoolean( + getParameter('commerce.debug', { search: true, storage: true }), + name === HostEnv.LOCAL, + ); + + if (debug) use(consoleAppender); + else use(debugFilter); + if (name === HostEnv.PROD) use(lanaAppender); + + return Log; +} + +function reset() { + appenders.clear(); + filters.clear(); +} + +export const Log = { + ...createLog(LOG_NAMESPACE), + Level: LogLevels, + Plugins: { consoleAppender, debugFilter, quietFilter, lanaAppender }, + init, + reset, + use, +}; diff --git a/libs/features/mas/commerce/src/mas-commerce-service.js b/libs/features/mas/src/mas-commerce-service.js similarity index 71% rename from libs/features/mas/commerce/src/mas-commerce-service.js rename to libs/features/mas/src/mas-commerce-service.js index 15f761f7c9f..40aaf754d2b 100644 --- a/libs/features/mas/commerce/src/mas-commerce-service.js +++ b/libs/features/mas/src/mas-commerce-service.js @@ -9,9 +9,14 @@ import { Price } from './price.js'; import { getSettings } from './settings.js'; import { Wcs } from './wcs.js'; import { setImmediate } from './utilities.js'; +import { updateConfig as updateLanaConfig } from './lana.js'; export const TAG_NAME_SERVICE = 'mas-commerce-service'; + +const MARK_START = 'mas:start'; +const MARK_READY = 'mas:ready'; + /** * Custom web component to provide active instance of commerce service * to consumers, appended to the head section of current document. @@ -21,30 +26,39 @@ export class MasCommerceService extends HTMLElement { promise = null; get #config() { - const config = { - commerce: { 'env': this.getAttribute('env') }, - }; - //root parameters - ['locale', 'country', 'language'].forEach((attribute) => { - const value = this.getAttribute(attribute); - if (value) { - config[attribute] = value; - } - }); - //commerce parameters - [ - 'checkout-workflow-step', - 'force-tax-exclusive', - 'checkout-client-id', - 'allow-override', - ].forEach((attribute) => { - const value = this.getAttribute(attribute); - if (value != null) { - const camelCaseAttribute = attribute.replace(/-([a-z])/g, (g) => g[1].toUpperCase()); - config.commerce[camelCaseAttribute] = value; - } - }); - return config; + const config = { + hostEnv: { name: this.getAttribute('host-env') ?? 'prod' }, + commerce: { env: this.getAttribute('env') }, + lana: { + tags: this.getAttribute('lana-tags'), + sampleRate: parseInt(this.getAttribute('lana-sample-rate'), 10), + isProdDomain: this.getAttribute('host-env') === 'prod', + }, + }; + //root parameters + ['locale', 'country', 'language'].forEach((attribute) => { + const value = this.getAttribute(attribute); + if (value) { + config[attribute] = value; + } + }); + //commerce parameters + [ + 'checkout-workflow-step', + 'force-tax-exclusive', + 'checkout-client-id', + 'allow-override', + 'wcs-api-key', + ].forEach((attribute) => { + const value = this.getAttribute(attribute); + if (value != null) { + const camelCaseAttribute = attribute.replace(/-([a-z])/g, (g) => + g[1].toUpperCase(), + ); + config.commerce[camelCaseAttribute] = value; + } + }); + return config; } async registerCheckoutAction(action) { @@ -66,9 +80,11 @@ export class MasCommerceService extends HTMLElement { async activate() { const config = this.#config; // Load settings and literals - const log = Log.init(config.env).module('service'); - log.debug('Activating:', config); const settings = Object.freeze(getSettings(config)); + updateLanaConfig(config.lana); + const log = Log.init(config.hostEnv).module('service'); + log.debug('Activating:', config); + // Fetch price literals const literals = { price: {} }; try { @@ -126,14 +142,16 @@ export class MasCommerceService extends HTMLElement { cancelable: false, detail: this, }); + performance.mark(MARK_READY); this.dispatchEvent(event); }); } connectedCallback() { - if (!this.readyPromise) { - this.readyPromise = this.activate(); - } + if (!this.readyPromise) { + performance.mark(MARK_START); + this.readyPromise = this.activate(); + } } disconnectedCallback() { @@ -156,9 +174,7 @@ export class MasCommerceService extends HTMLElement { refreshFragments() { this.flushWcsCache(); - document - .querySelectorAll('aem-fragment') - .forEach((el) => el.refresh()); + document.querySelectorAll('aem-fragment').forEach((el) => el.refresh()); this.log.debug('Refreshed AEM fragments'); } } diff --git a/libs/features/mas/commerce/src/mas-element.js b/libs/features/mas/src/mas-element.js similarity index 95% rename from libs/features/mas/commerce/src/mas-element.js rename to libs/features/mas/src/mas-element.js index 36e897e1568..6f516ea6d7d 100644 --- a/libs/features/mas/commerce/src/mas-element.js +++ b/libs/features/mas/src/mas-element.js @@ -3,7 +3,6 @@ import { CLASS_NAME_PENDING, CLASS_NAME_RESOLVED, EVENT_TYPE_FAILED, - EVENT_TYPE_PENDING, EVENT_TYPE_RESOLVED, STATE_FAILED, STATE_PENDING, @@ -11,18 +10,7 @@ import { } from './constants.js'; import { ignore } from './external.js'; import { discoverService, setImmediate, useService } from './utilities.js'; - -const MasElementConstants = { - CLASS_NAME_FAILED, - CLASS_NAME_PENDING, - CLASS_NAME_RESOLVED, - EVENT_TYPE_FAILED, - EVENT_TYPE_PENDING, - EVENT_TYPE_RESOLVED, - STATE_FAILED, - STATE_PENDING, - STATE_RESOLVED, -}; +import { Log } from './log.js'; const StateClassName = { [STATE_FAILED]: CLASS_NAME_FAILED, @@ -32,7 +20,6 @@ const StateClassName = { const StateEventType = { [STATE_FAILED]: EVENT_TYPE_FAILED, - [STATE_PENDING]: EVENT_TYPE_PENDING, [STATE_RESOLVED]: EVENT_TYPE_RESOLVED, }; @@ -44,7 +31,7 @@ export class MasElement { log = undefined; options = undefined; promises = []; - state =STATE_PENDING; + state = STATE_PENDING; timer = null; value = undefined; version = 0; @@ -165,7 +152,7 @@ export class MasElement { if (options) this.options = options; this.state = STATE_PENDING; this.update(); - setImmediate(() => this.notify()); + this.log?.debug('Pending:', { osi: this.wrapperElement?.options?.wcsOsi }); return this.version; } @@ -180,6 +167,7 @@ export class MasElement { if (!this.wrapperElement.isConnected || !useService()) return; // Batch consecutive updates if (this.timer) return; + const log = Log.module('mas-element'); // Save current state to restore it if needed const { error, options, state, value, version } = this; // Inform `onceSettled` that `render` can follow soon @@ -217,6 +205,7 @@ export class MasElement { this.notify(); } } catch (error) { + log.error(`Failed to render mas-element: `, error); this.toggleFailed(this.version, error, options); } } diff --git a/libs/features/mas/src/mas.js b/libs/features/mas/src/mas.js new file mode 100644 index 00000000000..7c52974f59d --- /dev/null +++ b/libs/features/mas/src/mas.js @@ -0,0 +1,10 @@ +import '../../../utils/lana.js'; +import './merch-card.js'; +import './merch-icon.js'; +import './merch-quantity-select.js'; +import './aem-fragment.js'; +import { updateConfig } from './lana.js'; +updateConfig({ sampleRate: 1 }); + +export * from './commerce.js'; +export * from './constants.js'; diff --git a/libs/features/mas/web-components/src/media.js b/libs/features/mas/src/media.js similarity index 100% rename from libs/features/mas/web-components/src/media.js rename to libs/features/mas/src/media.js diff --git a/libs/features/mas/web-components/src/merch-card-collection.css.js b/libs/features/mas/src/merch-card-collection.css.js similarity index 100% rename from libs/features/mas/web-components/src/merch-card-collection.css.js rename to libs/features/mas/src/merch-card-collection.css.js diff --git a/libs/features/mas/web-components/src/merch-card-collection.js b/libs/features/mas/src/merch-card-collection.js similarity index 92% rename from libs/features/mas/web-components/src/merch-card-collection.js rename to libs/features/mas/src/merch-card-collection.js index 47f93a04d16..c951d2bc499 100644 --- a/libs/features/mas/web-components/src/merch-card-collection.js +++ b/libs/features/mas/src/merch-card-collection.js @@ -1,13 +1,12 @@ import { html, LitElement } from 'lit'; import { MatchMediaController } from '@spectrum-web-components/reactive-controllers/src/MatchMedia.js'; - import { deeplink, pushState } from './deeplink.js'; +import { EVENT_MERCH_SIDENAV_SELECT } from './constants.js'; import { EVENT_MERCH_CARD_COLLECTION_SORT, EVENT_MERCH_CARD_COLLECTION_SHOWMORE, } from './constants.js'; -import { updateLiterals } from './literals.js'; import { TABLET_DOWN } from './media.js'; import { styles } from './merch-card-collection.css.js'; import { getSlotText } from './utils.js'; @@ -32,6 +31,13 @@ const RESULT_TEXT_SLOT_NAMES = { desktop: ['noSearchResultsText', 'searchResultText', 'searchResultsText'], }; +export const updateLiterals = (el, values = {}) => { + el.querySelectorAll('span[data-placeholder]').forEach((el) => { + const { placeholder } = el.dataset; + el.innerText = values[placeholder] ?? ''; + }); +}; + const categoryFilter = (elements, { filter }) => elements.filter((element) => element.filters.hasOwnProperty(filter)); @@ -150,20 +156,19 @@ export class MerchCardCollection extends LitElement { this.hasMore = result.length > pageSize; result = result.filter(([, index]) => index < pageSize); } - - let reduced = new Map(result); + let reduced = new Map(result.reverse()); + for (const card of reduced.keys()) { + this.prepend(card); + } + children.forEach((child) => { if (reduced.has(child)) { - const index = reduced.get(child); - child.style.order = index; - child.setAttribute("tabindex", index + 1); child.size = child.filters[this.filter]?.size; child.style.removeProperty('display'); child.requestUpdate(); } else { child.style.display = 'none'; child.size = undefined; - child.style.removeProperty('order'); } }); window.scrollTo(0, lastScrollTop); @@ -175,6 +180,14 @@ export class MerchCardCollection extends LitElement { ?.firstElementChild?.assignedElements?.()?.[0]; if (!resultTextElement) return; + this.sidenav?.filters?.addEventListener(EVENT_MERCH_SIDENAV_SELECT, () => { + updateLiterals(resultTextElement, { + resultCount: this.resultCount, + searchTerm: this.search, + filter: this.sidenav?.filters.selectedText, + }); + }); + updateLiterals(resultTextElement, { resultCount: this.resultCount, searchTerm: this.search, @@ -202,11 +215,11 @@ export class MerchCardCollection extends LitElement { get header() { if (this.filtered) return; return html` -
      +
      ${this.displayResult ? html`` : ''} @@ -216,7 +229,7 @@ export class MerchCardCollection extends LitElement { get footer() { if (this.filtered) return; return html``; diff --git a/libs/features/mas/web-components/src/merch-card.css.js b/libs/features/mas/src/merch-card.css.js similarity index 83% rename from libs/features/mas/web-components/src/merch-card.css.js rename to libs/features/mas/src/merch-card.css.js index efe5a55bb77..f48d0f0d49f 100644 --- a/libs/features/mas/web-components/src/merch-card.css.js +++ b/libs/features/mas/src/merch-card.css.js @@ -3,17 +3,19 @@ import { DESKTOP_UP, TABLET_UP } from './media.js'; export const styles = css` :host { - position: relative; + --consonant-merch-card-background-color: #fff; + --consonant-merch-card-border: 1px solid var(--consonant-merch-card-border-color); + -webkit-font-smoothing: antialiased; + background-color: var(--consonant-merch-card-background-color); + border-radius: var(--consonant-merch-spacing-xs); + border: var(--consonant-merch-card-border); + box-sizing: border-box; display: flex; flex-direction: column; - text-align: start; - background-color: var(--merch-card-background-color); - grid-template-columns: repeat(auto-fit, minmax(300px, max-content)); - background-color: var(--merch-card-background-color); font-family: var(--merch-body-font-family, 'Adobe Clean'); - border-radius: var(--consonant-merch-spacing-xs); - border: 1px solid var(--spectrum-gray-200, var(--consonant-merch-card-border-color)); - box-sizing: border-box; + grid-template-columns: repeat(auto-fit, minmax(300px, max-content)); + position: relative; + text-align: start; } :host(.placeholder) { @@ -22,7 +24,6 @@ export const styles = css` :host([aria-selected]) { outline: none; - box-sizing: border-box; box-shadow: inset 0 0 0 2px var(--color-accent); } @@ -76,6 +77,14 @@ export const styles = css` padding: var(--consonant-merch-spacing-xs); } + + footer.footer-column { + flex-direction: column; + } + + footer.footer-column .secure-transaction-label { + align-self: flex-start; + } hr { background-color: var(--merch-color-grey-200); @@ -217,27 +226,32 @@ export const styles = css` display: flex; gap: 8px; } + + ::slotted([slot='price']) { + color: var(--consonant-merch-card-price-color); + } `; export const sizeStyles = () => { - const styles = [ - css` - /* Tablet */ - @media screen and ${unsafeCSS(TABLET_UP)} { - :host([size='wide']), - :host([size='super-wide']) { - width: 100%; - grid-column: 1 / -1; - } - } - - /* Laptop */ - @media screen and ${unsafeCSS(DESKTOP_UP)} { - :host([size='wide']) { - grid-column: span 2; - } - `, - ]; - - return styles; + const styles = [ + css` + /* Tablet */ + @media screen and ${unsafeCSS(TABLET_UP)} { + :host([size='wide']), + :host([size='super-wide']) { + width: 100%; + grid-column: 1 / -1; + } + } + + /* Laptop */ + @media screen and ${unsafeCSS(DESKTOP_UP)} { + :host([size='wide']) { + grid-column: span 2; + } + } + `, + ]; + + return styles; }; diff --git a/libs/features/mas/web-components/src/merch-card.js b/libs/features/mas/src/merch-card.js similarity index 85% rename from libs/features/mas/web-components/src/merch-card.js rename to libs/features/mas/src/merch-card.js index b23f5de50f1..e5764cbe3e5 100644 --- a/libs/features/mas/web-components/src/merch-card.js +++ b/libs/features/mas/src/merch-card.js @@ -1,8 +1,13 @@ import { LitElement } from 'lit'; import { sizeStyles, styles } from './merch-card.css.js'; -import { getVariantLayout, getVariantStyles } from './variants/variants.js'; +import { + getVariantLayout, + getVariantStyles, + variantFragmentMappings, +} from './variants/variants.js'; import './global.css.js'; +import './aem-fragment.js'; import { EVENT_AEM_LOAD, EVENT_MERCH_CARD_READY, @@ -14,13 +19,16 @@ import { EVENT_MAS_ERROR, } from './constants.js'; import { VariantLayout } from './variants/variant-layout.js'; -import { hydrate } from './hydrate.js'; +import { hydrate, ANALYTICS_SECTION_ATTR } from './hydrate.js'; + +const MERCH_CARD = 'merch-card'; +const MARK_START_SUFFIX = ':start'; +const MARK_READY_SUFFIX = ':ready'; -export const MERCH_CARD_NODE_NAME = 'MERCH-CARD'; -export const MERCH_CARD = 'merch-card'; +// if merch cards does not initialise in 10 seconds, it will dispatch mas:error event +const MERCH_CARD_LOAD_TIMEOUT = 10000; -// if merch cards does not initialise in 2s, it will dispatch mas:error event -const MERCH_CARD_LOAD_TIMEOUT = 2000; +const MARK_MERCH_CARD_PREFIX = 'merch-card:'; export class MerchCard extends LitElement { static properties = { @@ -34,11 +42,16 @@ export class MerchCard extends LitElement { attribute: 'badge-background-color', reflect: true, }, - backgroundImage: { type: String, attribute: 'background-image', reflect: true }, + backgroundImage: { + type: String, + attribute: 'background-image', + reflect: true, + }, badgeText: { type: String, attribute: 'badge-text' }, actionMenu: { type: Boolean, attribute: 'action-menu' }, customHr: { type: Boolean, attribute: 'custom-hr' }, consonant: { type: Boolean, attribute: 'consonant' }, + spectrum: { type: String, attribute: 'spectrum' } /* css|swc */, detailBg: { type: String, attribute: 'detail-bg' }, secureLabel: { type: String, attribute: 'secure-label' }, checkboxLabel: { type: String, attribute: 'checkbox-label' }, @@ -49,6 +62,7 @@ export class MerchCard extends LitElement { attribute: 'stock-offer-osis', converter: { fromAttribute: (value) => { + if (!value) return; const [PUF, ABM, M2M] = value.split(','); return { PUF, ABM, M2M }; }, @@ -90,6 +104,12 @@ export class MerchCard extends LitElement { reflect: true, }, merchOffer: { type: Object }, + analyticsId: { + type: String, + attribute: ANALYTICS_SECTION_ATTR, + reflect: true, + }, + loading: { type: String }, }; static styles = [styles, getVariantStyles(), ...sizeStyles()]; @@ -97,20 +117,24 @@ export class MerchCard extends LitElement { customerSegment; marketSegment; /** - * @type {VariantLayout>} + * @type {VariantLayout} */ variantLayout; - #ready = false; - constructor() { super(); this.filters = {}; this.types = ''; this.selected = false; + this.spectrum = 'css'; + this.loading = 'lazy'; this.handleAemFragmentEvents = this.handleAemFragmentEvents.bind(this); } + static getFragmentMapping(variant) { + return variantFragmentMappings[variant]; + } + firstUpdated() { this.variantLayout = getVariantLayout(this, false); this.variantLayout?.connectedCallbackHook(); @@ -131,15 +155,22 @@ export class MerchCard extends LitElement { changedProperties.has('badgeBackgroundColor') || changedProperties.has('borderColor') ) { - this.style.border = this.computedBorderStyle; + this.style.setProperty( + '--consonant-merch-card-border', + this.computedBorderStyle, + ); } - this.variantLayout?.postCardUpdateHook(this); + this.variantLayout?.postCardUpdateHook(changedProperties); } get theme() { return this.closest('sp-theme'); } + get dir() { + return this.closest('[dir]')?.getAttribute('dir') ?? 'ltr'; + } + get prices() { return Array.from( this.querySelectorAll('span[is="inline-price"][data-wcs-osi]'), @@ -263,6 +294,8 @@ export class MerchCard extends LitElement { connectedCallback() { super.connectedCallback(); + const id = this.querySelector('aem-fragment')?.getAttribute('fragment'); + performance.mark(`${MARK_MERCH_CARD_PREFIX}${id}${MARK_START_SUFFIX}`); this.addEventListener( EVENT_MERCH_QUANTITY_SELECTOR_CHANGE, this.handleQuantitySelection, @@ -285,13 +318,13 @@ export class MerchCard extends LitElement { this.addEventListener(EVENT_AEM_LOAD, this.handleAemFragmentEvents); if (!this.aemFragment) { - setTimeout(() => this.checkReady(), 0); + setTimeout(() => this.checkReady(), 0); } } disconnectedCallback() { super.disconnectedCallback(); - this.variantLayout.disconnectedCallbackHook(); + this.variantLayout?.disconnectedCallbackHook(); this.removeEventListener( EVENT_MERCH_QUANTITY_SELECTOR_CHANGE, @@ -346,6 +379,9 @@ export class MerchCard extends LitElement { ); const success = await Promise.race([successPromise, timeoutPromise]); if (success === true) { + performance.mark( + `${MARK_MERCH_CARD_PREFIX}${this.id}${MARK_READY_SUFFIX}`, + ); this.dispatchEvent( new CustomEvent(EVENT_MAS_READY, { bubbles: true, @@ -388,12 +424,23 @@ export class MerchCard extends LitElement { return this.querySelector('merch-quantity-select'); } + displayFooterElementsInColumn() { + if (!this.classList.contains('product')) return; + + const secureTransactionLabel = this.shadowRoot.querySelector('.secure-transaction-label'); + const checkoutLinkCtas = this.footerSlot?.querySelectorAll('a[is="checkout-link"].con-button') + if (checkoutLinkCtas.length === 2 && secureTransactionLabel) { + secureTransactionLabel.parentElement.classList.add('footer-column'); + } + } + merchCardReady() { if (this.offerSelect && !this.offerSelect.planType) return; // add checks for other properties if needed this.dispatchEvent( new CustomEvent(EVENT_MERCH_CARD_READY, { bubbles: true }), ); + this.displayFooterElementsInColumn(); } // TODO enable with TWP // diff --git a/libs/features/mas/web-components/src/merch-icon.js b/libs/features/mas/src/merch-icon.js similarity index 76% rename from libs/features/mas/web-components/src/merch-icon.js rename to libs/features/mas/src/merch-icon.js index d3cb402fe92..f78806220e5 100644 --- a/libs/features/mas/web-components/src/merch-icon.js +++ b/libs/features/mas/src/merch-icon.js @@ -6,21 +6,23 @@ export default class MerchIcon extends LitElement { src: { type: String, attribute: true }, alt: { type: String, attribute: true }, href: { type: String, attribute: true }, + loading: { type: String, attribute: true }, }; constructor() { super(); this.size = 'm'; this.alt = ''; + this.loading = 'lazy'; } render() { const { href } = this; return href ? html` - ${this.alt} + ${this.alt} ` - : html` ${this.alt}`; + : html` ${this.alt}`; } static styles = css` @@ -28,8 +30,8 @@ export default class MerchIcon extends LitElement { --img-width: 32px; --img-height: 32px; display: block; - width: var(--img-width); - height: var(--img-height); + width: var(--mod-img-width, var(--img-width)); + height: var(--mod-img-height, var(--img-height)); } :host([size='s']) { @@ -48,8 +50,8 @@ export default class MerchIcon extends LitElement { } img { - width: var(--img-width); - height: var(--img-height); + width: var(--mod-img-width, var(--img-width)); + height: var(--mod-img-height, var(--img-height)); } `; } diff --git a/libs/features/mas/web-components/src/merch-mnemonic-list.js b/libs/features/mas/src/merch-mnemonic-list.js similarity index 100% rename from libs/features/mas/web-components/src/merch-mnemonic-list.js rename to libs/features/mas/src/merch-mnemonic-list.js diff --git a/libs/features/mas/web-components/src/merch-offer-select.js b/libs/features/mas/src/merch-offer-select.js similarity index 99% rename from libs/features/mas/web-components/src/merch-offer-select.js rename to libs/features/mas/src/merch-offer-select.js index ea80e6d319e..9d402814984 100644 --- a/libs/features/mas/web-components/src/merch-offer-select.js +++ b/libs/features/mas/src/merch-offer-select.js @@ -37,13 +37,12 @@ class MerchOfferSelect extends LitElement { stock: { type: Boolean, reflect: true }, }; - variant = 'plans'; - #handleOfferSelectionByQuantityFn; constructor() { super(); this.defaults = {}; + this.variant = 'plans'; } /** Returns the default values for the price, cta, and description slots. @@ -210,6 +209,7 @@ class MerchOfferSelect extends LitElement { } disconnectedCallback() { + super.disconnectedCallback(); this.removeEventListener( EVENT_MERCH_QUANTITY_SELECTOR_CHANGE, this.#handleOfferSelectionByQuantityFn, diff --git a/libs/features/mas/web-components/src/merch-offer.css.js b/libs/features/mas/src/merch-offer.css.js similarity index 100% rename from libs/features/mas/web-components/src/merch-offer.css.js rename to libs/features/mas/src/merch-offer.css.js diff --git a/libs/features/mas/web-components/src/merch-offer.js b/libs/features/mas/src/merch-offer.js similarity index 100% rename from libs/features/mas/web-components/src/merch-offer.js rename to libs/features/mas/src/merch-offer.js diff --git a/libs/features/mas/web-components/src/merch-quantity-select.css.js b/libs/features/mas/src/merch-quantity-select.css.js similarity index 100% rename from libs/features/mas/web-components/src/merch-quantity-select.css.js rename to libs/features/mas/src/merch-quantity-select.css.js diff --git a/libs/features/mas/web-components/src/merch-quantity-select.js b/libs/features/mas/src/merch-quantity-select.js similarity index 89% rename from libs/features/mas/web-components/src/merch-quantity-select.js rename to libs/features/mas/src/merch-quantity-select.js index a2569a983d1..4044557c362 100644 --- a/libs/features/mas/web-components/src/merch-quantity-select.js +++ b/libs/features/mas/src/merch-quantity-select.js @@ -1,5 +1,6 @@ import { html, LitElement } from 'lit'; import { styles } from './merch-quantity-select.css.js'; +import { debounce } from './utils.js'; import { ARROW_DOWN, ARROW_UP, ENTER } from './focus.js'; import { EVENT_MERCH_QUANTITY_SELECTOR_CHANGE } from './constants.js'; @@ -43,6 +44,7 @@ export class MerchQuantitySelect extends LitElement { this.boundKeydownListener = this.handleKeydown.bind(this); this.addEventListener('keydown', this.boundKeydownListener); window.addEventListener('mousedown', this.handleClickOutside); + this.handleKeyupDebounced = debounce(this.handleKeyup.bind(this), 500); } handleKeyup() { @@ -85,22 +87,25 @@ export class MerchQuantitySelect extends LitElement { if (e.composedPath().includes(this)) e.stopPropagation(); } + adjustInput(inputField, value) { + this.selectedValue = value; + inputField.value = value; + this.highlightedIndex = this.options.indexOf(value); + } + handleInput() { const inputField = this.shadowRoot.querySelector('.text-field-input'); const inputValue = parseInt(inputField.value); + if (isNaN(inputValue)) return; if ( - !isNaN(inputValue) && inputValue > 0 && inputValue !== this.selectedValue ) { - const adjustedInputValue = - this.maxInput && inputValue > this.maxInput - ? this.maxInput - : inputValue; - this.selectedValue = adjustedInputValue; - inputField.value = adjustedInputValue; - this.highlightedIndex = this.options.indexOf(adjustedInputValue); - } + let adjustedInputValue = inputValue; + if (this.maxInput && inputValue > this.maxInput) adjustedInputValue = this.maxInput; + if (this.min && adjustedInputValue < this.min) adjustedInputValue = this.min; + this.adjustInput(inputField, adjustedInputValue); + } else this.adjustInput(inputField, this.min || 1); } disconnectedCallback() { @@ -210,7 +215,7 @@ export class MerchQuantitySelect extends LitElement { .value="${this.selectedValue}" type="number" @keydown="${this.handleKeydown}" - @keyup="${this.handleKeyup}" + @keyup="${this.handleKeyupDebounced}" /> + +
      +
      diff --git a/test/blocks/mas-autoblock/mas-autoblock.test.js b/test/blocks/mas-autoblock/mas-autoblock.test.js new file mode 100644 index 00000000000..e663c3d9803 --- /dev/null +++ b/test/blocks/mas-autoblock/mas-autoblock.test.js @@ -0,0 +1,73 @@ +import { expect } from '@esm-bundle/chai'; +import init, { getFragmentId, getTagName, createCard } from '../../../libs/blocks/mas-autoblock/mas-autoblock.js'; + +describe('mas autoblock', () => { + before(() => { + const a = document.createElement('a'); + a.setAttribute('href', 'https://mas.adobe.com/studio.html#path=acom&fragment=07b8be51-492a-4814-9953-a657fd3d9f67'); + a.textContent = 'merch-card: ACOM / Catalog / Test Card'; + init(a); + }); + + it('get fragment id', () => { + const a = document.createElement('a'); + a.setAttribute('href', 'https://mas.adobe.com/studio.html#path=acom&fragment=07b8be51-492a-4814-9953-a657fd3d9f67'); + expect(getFragmentId(a)).to.equal('07b8be51-492a-4814-9953-a657fd3d9f67'); + }); + + it('no fragment id in URL', () => { + const a = document.createElement('a'); + a.setAttribute('href', 'https://mas.adobe.com/studio.html#path=acom'); + expect(getFragmentId(a)).to.be.null; + }); + + it('no hash in URL', () => { + const a = document.createElement('a'); + a.setAttribute('href', 'https://mas.adobe.com/studio.html'); + init(a); + expect(getFragmentId(a)).to.be.null; + }); + + it('get tag name', () => { + const a = document.createElement('a'); + a.setAttribute('href', 'https://mas.adobe.com/studio.html#path=acom&fragment=07b8be51-492a-4814-9953-a657fd3d9f67'); + a.textContent = 'merch-card: ACOM / Catalog / Test Card'; + expect(getTagName(a)).to.equal('merch-card'); + }); + + it('get tag name default', () => { + const a = document.createElement('a'); + a.setAttribute('href', 'https://mas.adobe.com/studio.html#path=acom&fragment=07b8be51-492a-4814-9953-a657fd3d9f67'); + a.textContent = ''; + expect(getTagName(a)).to.equal('merch-card'); + }); + + it('get tag name collection', () => { + const a = document.createElement('a'); + a.setAttribute('href', 'https://mas.adobe.com/studio.html#path=acom&fragment=07b8be51-492a-4814-9953-a657fd3d9f67'); + a.textContent = 'merch-card-collection: ACOM / Catalog / Test Collection'; + expect(getTagName(a)).to.equal('merch-card-collection'); + }); + + it('create card', () => { + const a = document.createElement('a'); + a.setAttribute('href', 'https://mas.adobe.com/studio.html#path=acom&fragment=a657fd3d9f67'); + a.textContent = 'merch-card: ACOM / Catalog / Test Card'; + const fragmentId = getFragmentId(a); + document.body.append(a); + createCard(a, fragmentId); + const card = document.body.querySelector('merch-card'); + expect(card.outerHTML).to.equal(''); + }); + + it('create collection', () => { + const fragmentId = 'COLL_ID'; + const a = document.createElement('a'); + a.setAttribute('href', 'https://mas.adobe.com/studio.html#path=acom&fragment=COLL_ID'); + a.textContent = 'merch-card-collection: ACOM / Catalog / Test Collection'; + document.body.append(a); + createCard(a, fragmentId); + const coll = document.body.querySelector('merch-card-collection'); + expect(coll.outerHTML).to.equal(''); + }); +}); diff --git a/test/blocks/merch-card-collection/merch-card-collection.test.js b/test/blocks/merch-card-collection/merch-card-collection.test.js index 6854e6645ce..dae60aafe00 100644 --- a/test/blocks/merch-card-collection/merch-card-collection.test.js +++ b/test/blocks/merch-card-collection/merch-card-collection.test.js @@ -159,7 +159,19 @@ describe('Merch Cards', async () => { expect(merchCards.outerHTML).to.equal(merchCards.nextElementSibling.outerHTML); }); - it('should override cards when asked to', async () => { + it('should parse fragmented literals', async () => { + const merchCards = await init(document.getElementById('fragmented-literals')); + await delay(500); + expect(merchCards.outerHTML).to.equal(merchCards.nextElementSibling.outerHTML); + }); + + it('should parse literals 4 translation too', async () => { + const merchCards = await init(document.getElementById('literals-4-translation')); + await delay(500); + expect(merchCards.outerHTML).to.equal(merchCards.nextElementSibling.outerHTML); + }); + + it('MEP: should override cards when asked to', async () => { const el = document.getElementById('multipleFilters'); setConfig({ ...conf, @@ -195,6 +207,37 @@ describe('Merch Cards', async () => { expect(merchCards.dataset.overrides).to.equal('promo1.json:/override-photoshop,promo2.json:/override-express'); }); + it('MEP: should modify cards when asked to', async () => { + const el = document.getElementById('multipleFilters'); + setConfig({ + ...conf, + mep: { + preview: true, + commands: [ + { + action: 'remove', + selector: 'merch-card h3 #_include-fragments #_all', + pageFilter: '', + content: 'true', + selectorType: 'other', + manifestId: 'merchcardupdates.json', + targetManifestId: false, + modifiers: [ + 'include-fragments', + 'all', + ], + }, + ], + }, + }); + cards = [...document.querySelectorAll('#cards .merch-card')] + .map((merchCardEl) => ({ cardContent: merchCardEl.outerHTML })); // mock cards + const merchCards = await init(el); + expect(merchCards.filter).to.equal('all'); + await delay(500); + expect(merchCards.querySelectorAll('h3').length).to.equal(0); + }); + it('should localize the query-index url', async () => { setConfig({ ...conf, @@ -233,7 +276,7 @@ describe('Merch Cards', async () => { await init(el); expect(el.innerHTML).to.equal(''); expect(window.lana.log.calledOnce).to.be.true; - expect(window.lana.log.calledWith('Failed to initialize merch cards: Error: No query-index endpoint provided')).to.be.true; + expect(window.lana.log.calledWith('Failed to initialize merch cards: No query-index endpoint provided')).to.be.true; }); it('fails gracefully if query-index fetch fails ', async () => { diff --git a/test/blocks/merch-card-collection/mocks/merch-card-collection.html b/test/blocks/merch-card-collection/mocks/merch-card-collection.html index 084be8d9cf0..a91179b98d6 100644 --- a/test/blocks/merch-card-collection/mocks/merch-card-collection.html +++ b/test/blocks/merch-card-collection/mocks/merch-card-collection.html @@ -85,8 +85,8 @@

      Popularity

      Alphabetical

      0 results

      -

      1 result in filter

      -

      10 results in filter

      +

      1 result in /filter/

      +

      10 results in /filter/

      1 result for search

      10 results for search

      1 result for: search

      @@ -192,8 +192,82 @@
    • Make sure all words are spelled correctly
    • Use quotes to search for an entire phrase, such as "crop an image"
    • Show more

      - +
      +
      + query index +

      all, 18

      +
      +
      +

      Search all products

      +

      Filters

      +

      Sort

      +

      Popularity

      +

      Alphabetical

      +

      0 results

      +

      1 result in filter

      +

      10 results in filter

      +

      1 result for search

      +

      10 results for search

      +

      1 result for: search

      +

      10 results for: search

      +

      Your search for search did not yield any results

      +
      +

      Your search for search did not yield any results. Try a different search term.

      +

      Suggestions:

      +
        +
      • Make sure all words are spelled correctly
      • +
      • Use quotes to search for an entire phrase, such as "crop an image"
      • +
      +
      +

      Show more

      +
      +
      + +

      Search all products

      Filters

      Sort

      Popularity

      Alphabetical

      0 results

      1 result in

      results in

      1 result for

      results for

      1 result for:

      results for:

      Your search for did not yield any results

      Your search for did not yield any results. Try a different search term.

      Suggestions:

        +
      • Make sure all words are spelled correctly
      • +
      • Use quotes to search for an entire phrase, such as "crop an image"
      • +

      Show more

      + +
      +
      + query index +

      all, 18

      +
      +
      +
      +

      Search all products

      +

      Filters

      +

      Sort

      +

      Popularity

      +

      Alphabetical

      +

      0 results

      +

      1 result in /filter/

      +

      /10/ results in /filter/

      +

      1 result for /search/

      +

      /10/ results for /search/

      +

      1 result for: /search/

      +

      /10/ results for: /search/

      +

      Your search for /search/ did not yield any results

      +
      +

      Your search for /search/ did not yield any results. Try a different search term.

      +

      Suggestions:

      +
        +
      • Make sure all words are spelled correctly
      • +
      • Use quotes to search for an entire phrase, such as "crop an image"
      • +
      +
      +

      Show more

      +
      +
      +
      + +

      Search all products

      Filters

      Sort

      Popularity

      Alphabetical

      0 results

      1 result in

      results in

      1 result for

      results for

      1 result for:

      results for:

      Your search for did not yield any results

      Your search for did not yield any results. Try a different search term.

      Suggestions:

        +
      • Make sure all words are spelled correctly
      • +
      • Use quotes to search for an entire phrase, such as "crop an image"
      • +

      Show more

      + +
      diff --git a/test/blocks/merch-card/merch-card.test.js b/test/blocks/merch-card/merch-card.test.js index ac71a213014..b3fc2a7fc0d 100644 --- a/test/blocks/merch-card/merch-card.test.js +++ b/test/blocks/merch-card/merch-card.test.js @@ -1,6 +1,7 @@ +import { sendKeys, setViewport } from '@web/test-runner-commands'; import { expect } from '@esm-bundle/chai'; import { decorateLinks, loadStyle, setConfig } from '../../../libs/utils/utils.js'; -import { readMockText } from '../merch/mocks/fetch.js'; +import { mockFetch, readMockText } from '../merch/mocks/fetch.js'; const { default: init } = await import('../../../libs/blocks/merch-card/merch-card.js'); const delay = (duration = 100) => new Promise((resolve) => { setTimeout(resolve, duration); }); @@ -44,6 +45,8 @@ const expectToValidateHTMLAssertions = (card, assertions = {}) => { } }; +mockFetch(); + describe('Merch Card', () => { it('Shows segment card', async () => { document.body.innerHTML = await readMockText('/test/blocks/merch-card/mocks/segment-card.html'); @@ -166,6 +169,22 @@ describe('Catalog Card', () => { }); }); + it('Action menu visible', async () => { + document.body.innerHTML = await readMockText('/test/blocks/merch-card/mocks/catalog-action-menu-only.html'); + await setViewport({ width: 1025, height: 640 }); + const merchCard = await init(document.querySelector('.merch-card.ribbon')); + const actionMenu = merchCard.shadowRoot.querySelector('.action-menu'); + merchCard.dispatchEvent(new Event('focusin')); + expect(actionMenu.classList.contains('always-visible')).to.be.true; + await sendKeys({ press: 'Tab' }); + await sendKeys({ press: 'Tab' }); + await sendKeys({ press: 'Tab' }); + await sendKeys({ press: 'Tab' }); + await sendKeys({ press: 'Tab' }); + await sendKeys({ press: 'Tab' }); + expect(actionMenu.classList.contains('always-visible')).to.be.false; + }); + it('Supports Catalog card without badge', async () => { document.body.innerHTML = await readMockText('/test/blocks/merch-card/mocks/catalog.html'); const merchCard = await init(document.querySelector('.merch-card.catalog.empty-badge')); @@ -316,6 +335,71 @@ describe('Mini Compare Chart Merch Card', () => { merchCard.style.visibility = 'visible'; }, 500); }); + + it('Supports Mini Compare Chart with checkmarks footer rows', async () => { + // Test for mobile + window.matchMedia = (query) => ({ + matches: query.includes('(max-width: 767px)'), + addListener: () => {}, + removeListener: () => {}, + }); + document.body.innerHTML = await readMockText('/test/blocks/merch-card/mocks/mini-compare-chart-featured-list.html'); + const merchCards = document.querySelectorAll('.merch-card.mini-compare-chart'); + const merchCardChevonClose = await init(merchCards[0]); + expectToValidateHTMLAssertions(merchCardChevonClose, { + elements: [ + { selector: 'div[slot="footer-rows"] picture.footer-row-icon-checkmark' }, + { selector: 'div[slot="footer-rows"] .footer-row-cell-description' }, + ], + }); + const hr = merchCardChevonClose.querySelector('hr'); + expect(hr).to.exist; + expect(hr.style.backgroundColor).to.be.equals('rgb(232, 232, 232)'); + expect(merchCardChevonClose.querySelector('.checkmark-copy-container').classList.contains('close')); + const footerRowsTitle = merchCardChevonClose.querySelector('.footer-rows-title'); + expect(footerRowsTitle).to.exist; + const footerRowCellCheckmark = merchCardChevonClose.querySelectorAll('.footer-row-cell-checkmark'); + expect(footerRowCellCheckmark).to.exist; + for (let i = 0; i < footerRowCellCheckmark.length; i += 1) { + expect(footerRowCellCheckmark[i].querySelector('.footer-row-icon-checkmark')).to.exist; + } + + // Test for the second merch card (chevron open) + if (footerRowsTitle) { + footerRowsTitle.dispatchEvent(new MouseEvent('click', { bubbles: true })); + expect(merchCardChevonClose.querySelector('.checkmark-copy-container').classList.contains('open')).to.be.false; + expect(footerRowsTitle.querySelector('.chevron-icon').innerHTML).to.include('svg'); + } + + // Test for the second merch card (chevron open) + const merchCardChevonOpen = await init(merchCards[1]); + expectToValidateHTMLAssertions(merchCardChevonOpen, { + elements: [ + { selector: 'div[slot="footer-rows"] picture.footer-row-icon-checkmark' }, + { selector: 'div[slot="footer-rows"] .footer-row-cell-description' }, + ], + }); + expect(merchCardChevonOpen.querySelector('.checkmark-copy-container').classList.contains('open')).to.be.false; + + // Simulate click to test chevron toggle + const footerRowsTitleOpen = merchCardChevonOpen.querySelector('.footer-rows-title'); + expect(footerRowsTitleOpen).to.exist; + if (footerRowsTitleOpen) { + footerRowsTitleOpen.dispatchEvent(new MouseEvent('click', { bubbles: true })); + expect(merchCardChevonOpen.querySelector('.checkmark-copy-container').classList.contains('open')).to.be.true; + expect(footerRowsTitleOpen.querySelector('.chevron-icon').innerHTML).to.include('svg'); + } + + // Test for desktop + window.matchMedia = (query) => ({ + matches: query.includes('(max-width: 600px)'), + addListener: () => {}, + removeListener: () => {}, + }); + const merchCardDesktop = await init(merchCards[2]); + expect(merchCardDesktop.querySelector('.checkmark-copy-container')).to.not.be.null; + expect(merchCardChevonOpen.querySelector('.checkmark-copy-container').classList.contains('open')).to.be.true; + }); }); describe('TWP Merch Card', () => { diff --git a/test/blocks/merch-card/mocks/callout.html b/test/blocks/merch-card/mocks/callout.html index 55591fb44e9..df747e332c8 100644 --- a/test/blocks/merch-card/mocks/callout.html +++ b/test/blocks/merch-card/mocks/callout.html @@ -8,7 +8,7 @@

      New node: H6 Callout

      This is the subtext

      PRICE - ABM - Creative Cloud All Apps with 4TB

      -
      AI Assistant add-on available #ICON
      +
      AI Assistant add-on available #ICON
      For a limited time pay PRICE - ABM - Creative Cloud All Apps with 4TB when you add AI assistant to Acrobat Reader, Standard, or Pro. Ends 6/4.

      Save over 25% on 20+ apps, including Photoshop, Illustrator, and more. First year only. Ends 27.

      See what's included | Learn more

      diff --git a/test/blocks/merch-card/mocks/catalog-action-menu-only.html b/test/blocks/merch-card/mocks/catalog-action-menu-only.html new file mode 100644 index 00000000000..9f50b5b1ff6 --- /dev/null +++ b/test/blocks/merch-card/mocks/catalog-action-menu-only.html @@ -0,0 +1,43 @@ + +
      +
      +
      +
      #EDCC2D, #000000
      +
      LOREM IPSUM DOLOR
      +
      +
      +
      +

      Best for:

      +
        +
      • Photo editing
      • +
      • Compositing
      • +
      • Drawing and painting
      • +
      • Graphic design
      • +
      +

      Storage:

      +

      100 GB of cloud storage

      +

      See system requirements

      +
      +
      +
      +
      + + + + + + +

      Get 10% off Photoshop.

      +

      INDIVIDUALS

      +
      this promo is great see terms
      +

      Create gorgeous images, rich graphics, and incredible art. Save 10% for the first year. Ends Mar 20.

      +

      See terms

      +

      Learn More Save now

      +
      +
      +
      +
      diff --git a/test/blocks/merch-card/mocks/mini-compare-chart-featured-list.html b/test/blocks/merch-card/mocks/mini-compare-chart-featured-list.html new file mode 100644 index 00000000000..8cf9805b4fc --- /dev/null +++ b/test/blocks/merch-card/mocks/mini-compare-chart-featured-list.html @@ -0,0 +1,273 @@ +
      +
      +
      +
      +
      #EDCC2D, #000000
      +
      LOREM IPSUM DOLOR
      +
      +
      +
      + + + + + + +

      Illustrator

      +

      Get Illustrator on desktop and iPad as part of Creative Cloud. This is promo text

      +
        +
      • Quantity +
          +
        • Select a quantity:
        • +
        • 1,10,1
        • +
        +
      • +
      +

      PRICE - ABM - Creative Cloud All Apps with 4TB

      +

      Buy now free trial

      +
      +
      +
      +
      #E8E8E8, open
      +
      What you get:
      +
      +
      +
      + + + + + + +
      +
      Illustrator on desktop, web, and iPad
      +
      +
      +
      + + + + + + +
      +
      +

      Business features like admin tools, dedicated 24x7

      +

      support, and 1TB of cloud storage

      +
      +
      +
      +
      + + + + + + +
      +
      Adobe Express, Adobe Fresco, Adobe Portfolio, and Adobe Fonts
      +
      +
      +
      + + + + + + +
      + +
      +
      +
      +
      +
      #EDCC2D, #000000
      +
      LOREM IPSUM DOLOR
      +
      +
      +
      + + + + + + +

      Illustrator

      +
      this promo is great see terms
      +

      Get Illustrator on desktop and iPad as part of Creative Cloud. This is promo text

      +

      Cloud storage:

      + +

      PRICE - ABM - Creative Cloud All Apps with 4TB

      +

      Buy now free trial

      +
      +
      +
      +
      +
      #E8E8E8, close
      +

      What you get:

      +
      +
      +
      +
      + + + + + + +
      +
      Illustrator on desktop, web, and iPad
      +
      +
      +
      +
      +
      +
      +
      + + + + + + +
      +
      +

      Business features like admin tools, dedicated 24x7

      +

      support, and 1TB of cloud storage

      +
      +
      +
      +
      + + + + + + +
      +
      Adobe Express, Adobe Fresco, Adobe Portfolio, and Adobe Fonts
      +
      +
      +
      + + + + + + +
      + +
      +
      +
      +
      +
      #EDCC2D, #000000
      +
      LOREM IPSUM DOLOR
      +
      +
      +
      + + + + + + +

      Illustrator

      +
      this promo is great see terms
      +

      Get Illustrator on desktop and iPad as part of Creative Cloud. This is promo text

      +

      Cloud storage:

      + +

      PRICE - ABM - Creative Cloud All Apps with 4TB

      +

      Buy now free trial

      +
      +
      +
      +
      +
      #E8E8E8
      +

      What you get:

      +
      +
      +
      +
      + + + + + + +
      +
      Illustrator on desktop, web, and iPad
      +
      +
      +
      +
      +
      +
      +
      + + + + + + +
      +
      +

      Business features like admin tools, dedicated 24x7

      +

      support, and 1TB of cloud storage

      +
      +
      +
      +
      + + + + + + +
      +
      Adobe Express, Adobe Fresco, Adobe Portfolio, and Adobe Fonts
      +
      +
      +
      + + + + + + +
      + +
      +
      +
      +
      diff --git a/test/blocks/merch/merch.test.js b/test/blocks/merch/merch.test.js index c9ced0e16e3..832d77a8f90 100644 --- a/test/blocks/merch/merch.test.js +++ b/test/blocks/merch/merch.test.js @@ -9,7 +9,6 @@ import merch, { PRICE_TEMPLATE_OPTICAL, PRICE_TEMPLATE_STRIKETHROUGH, PRICE_TEMPLATE_ANNUAL, - CHECKOUT_ALLOWED_KEYS, buildCta, getCheckoutContext, initService, @@ -76,6 +75,14 @@ const CHECKOUT_LINK_CONFIGS = { PRODUCT_FAMILY: 'testProductCode', DOWNLOAD_TEXT: 'productCode', }, + { + PRODUCT_FAMILY: 'AUDITION', + DOWNLOAD_TEXT: 'Download', + DOWNLOAD_URL: 'https://creativecloud.adobe.com/apps/download/audition', + FREE_TRIAL_PATH: 'https://www.adobe.com/mini-plans/audition.html?mid=ft&web=1', + BUY_NOW_PATH: 'www.adobe.com/will/not/be/localized.html', + LOCALE: '', + }, ], }; @@ -400,19 +407,6 @@ describe('Merch Block', () => { expect(dataset.promotionCode).to.equal('nicopromo'); }); - it('renders merch link to UCv2 cta with link-level overrides', async () => { - const el = await merch(document.querySelector( - '.merch.cta.link-overrides', - )); - const { nodeName, dataset } = await el.onceSettled(); - expect(nodeName).to.equal('A'); - expect(el.getAttribute('is')).to.equal('checkout-link'); - // https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=BPS&title=UCv2+Link+Creation+Guide - expect(dataset.checkoutWorkflow).to.equal('UCv2'); - expect(dataset.checkoutWorkflowStep).to.equal('checkout'); - expect(dataset.checkoutMarketSegment).to.equal('EDU'); - }); - it('adds ims country to checkout link', async () => { await mockIms('CH'); await initService(); @@ -486,8 +480,7 @@ describe('Merch Block', () => { describe('openModal', () => { it('sets the new hash and event listener to restore the hash on close', async () => { const prevHash = window.location.hash; - const event = new CustomEvent('dummy'); - await openModal(event, 'https://www.adobe.com/mini-plans/creativecloud.html?mid=ft&web=1', 'TRIAL', 'try-photoshop'); + await openModal(new CustomEvent('test'), 'https://www.adobe.com/mini-plans/creativecloud.html?mid=ft&web=1', 'TRIAL', 'try-photoshop'); expect(window.location.hash).to.equal('#try-photoshop'); const modalCloseEvent = new CustomEvent('milo:modal:closed'); window.dispatchEvent(modalCloseEvent); @@ -495,6 +488,29 @@ describe('Merch Block', () => { document.body.querySelector('.dialog-modal').remove(); window.location.hash = prevHash; }); + + it('opens the 3-in-1 modal', async () => { + const checkoutLink = document.createElement('a'); + checkoutLink.setAttribute('is', 'checkout-link'); + checkoutLink.setAttribute('data-checkout-workflow', 'UCv3'); + checkoutLink.setAttribute('data-checkout-workflow-step', 'segmentation'); + checkoutLink.setAttribute('data-modal', 'true'); + checkoutLink.setAttribute('data-quantity', '1'); + checkoutLink.setAttribute('data-wcs-osi', 'L2C9cKHNNDaFtBVB6GVsyNI88RlyimSlzVfkMM2gH4A'); + checkoutLink.setAttribute('data-extra-options', '{}'); + checkoutLink.setAttribute('class', 'con-button placeholder-resolved'); + checkoutLink.setAttribute('href', 'https://commerce.adobe.com/store/segmentation?ms=COM&ot=TRIAL&pa=phsp_direct_individual&cli=adobe_com&ctx=if&co=US&lang=en'); + checkoutLink.setAttribute('daa-ll', 'Free trial-1--'); + checkoutLink.setAttribute('data-modal-id', 'mini-plans-web-cta-photoshop-card'); + checkoutLink.setAttribute('data-modal-type', 'twp'); + Object.defineProperty(checkoutLink, 'opens3in1Modal', { get: () => true }); + await openModal(new CustomEvent('test'), 'https://www.adobe.com/mini-plans/creativecloud.html?mid=ft&web=1', 'TRIAL', 'try-photoshop', {}, checkoutLink); + const threeInOneModal = document.querySelector('.dialog-modal.three-in-one'); + expect(threeInOneModal).to.exist; + const iFrame = document.querySelector('.dialog-modal.three-in-one iframe'); + expect(iFrame.src).to.equal('https://commerce.adobe.com/store/segmentation?ms=COM&ot=TRIAL&pa=phsp_direct_individual&cli=adobe_com&ctx=if&co=US&lang=en'); + threeInOneModal.remove(); + }); }); }); @@ -707,6 +723,34 @@ describe('Merch Block', () => { expect(action).to.be.undefined; }); + it('getModalAction: localize buy now path if it comes from us/en production', async () => { + setConfig({ + ...config, + pathname: '/fr/test.html', + locales: { fr: { ietf: 'fr-FR' } }, + prodDomains: PROD_DOMAINS, + placeholders: { download: 'TÊlÊcharger' }, + }); + fetchCheckoutLinkConfigs.promise = undefined; + setCheckoutLinkConfigs(CHECKOUT_LINK_CONFIGS); + const action = await getModalAction([{ productArrangement: { productFamily: 'ILLUSTRATOR' } }], { modal: true }); + expect(action.url).to.equal('https://www.adobe.com/fr/plans-fragments/modals/individual/modals-content-rich/illustrator/master.modal.html'); + }); + + it('getModalAction: skip modal url localization if url is invalid', async () => { + setConfig({ + ...config, + pathname: '/fr/test.html', + locales: { fr: { ietf: 'fr-FR' } }, + prodDomains: PROD_DOMAINS, + placeholders: { download: 'TÊlÊcharger' }, + }); + fetchCheckoutLinkConfigs.promise = undefined; + setCheckoutLinkConfigs(CHECKOUT_LINK_CONFIGS); + const action = await getModalAction([{ productArrangement: { productFamily: 'AUDITION' } }], { modal: true }); + expect(action.url).to.equal('www.adobe.com/will/not/be/localized.html'); + }); + it('getModalAction: returns undefined if checkout-link config is not found', async () => { fetchCheckoutLinkConfigs.promise = undefined; setCheckoutLinkConfigs(CHECKOUT_LINK_CONFIGS); @@ -745,6 +789,11 @@ describe('Merch Block', () => { plan: 'edu', urlWithPlan: 'https://www.adobe.com/mini-plans/illustrator4.html?plan=edu', }, + { + url: '/mini-plans/illustrator4.html', + plan: 'edu', + urlWithPlan: '/mini-plans/illustrator4.html?plan=edu', + }, { url: 'https://www.adobe.com/mini-plans/illustrator5.html#thisishash', plan: 'edu', @@ -765,6 +814,11 @@ describe('Merch Block', () => { plan: 'team', urlWithPlan: 'https://www.adobe.com/mini-plans/illustrator8.selector.html/resource?mid=ft&web=1&plan=team#thisishash', }, + { + url: '/mini-plans/illustrator8.selector.html/resource?mid=ft&web=1#thisishash', + plan: 'team', + urlWithPlan: '/mini-plans/illustrator8.selector.html/resource?mid=ft&web=1&plan=team#thisishash', + }, { url: 'https://www.adobe.com/mini-plans/illustrator9.sel1.sel2.html/resource#thisishash', plan: 'team', @@ -804,62 +858,6 @@ describe('Merch Block', () => { }); }); - describe('checkout link with optional params', async () => { - const checkoutUcv2Keys = [ - 'rurl', 'authCode', 'curl', - ]; - const checkoutAllowKeysMapping = { - quantity: 'q', - checkoutPromoCode: 'apc', - ctxrturl: 'ctxRtUrl', - country: 'co', - language: 'lang', - clientId: 'cli', - context: 'ctx', - productArrangementCode: 'pa', - offerType: 'ot', - marketSegment: 'ms', - authCode: 'code', - rurl: 'rUrl', - curl: 'cUrl', - }; - const segmentation = [ - 'ot', - 'pa', - 'ms', - ]; - - const keyValueMapping = { lang: 'en', ms: 'COM', ot: 'BASE', pa: 'phsp_direct_individual' }; - - const skipKeys = ['quantity', 'co', 'country', 'lang', 'language']; - - CHECKOUT_ALLOWED_KEYS.forEach((key) => { - if (skipKeys.includes(key)) return; - const mappedKey = checkoutAllowKeysMapping[key] ?? key; - it(`renders checkout link with "${mappedKey}" parameter`, async () => { - const a = document.createElement('a', { is: 'checkout-link' }); - a.classList.add('merch'); - const searchParams = new URLSearchParams(); - searchParams.set('osi', 1); - searchParams.set('type', 'checkoutUrl'); - if (checkoutUcv2Keys.includes(key)) { - searchParams.set('workflow', 'ucv2'); - } - const value = keyValueMapping[mappedKey] ?? 'test'; - searchParams.set(key, value); - if (segmentation.includes(mappedKey)) { - searchParams.set('workflowStep', 'segmentation'); - } - a.setAttribute('href', `/tools/ost?${searchParams.toString()}`); - document.body.appendChild(a); - const el = await merch(a); - await el.onceSettled(); - expect(el.getAttribute('href')).to.match(new RegExp(`https://commerce.adobe.com/.*${mappedKey}=${value}`)); - el.remove(); - }); - }); - }); - describe('locale settings', () => { it('should map correct commerce locale', async () => { [ @@ -873,19 +871,4 @@ describe('Merch Block', () => { }); }); }); - - describe('AU resources', () => { - it('Load AU styles', async () => { - setConfig({ - ...config, - pathname: '/au/test.html', - locales: { au: { ietf: 'en-AU' } }, - prodDomains: PROD_DOMAINS, - placeholders: { download: 'Download' }, - locale: { prefix: '/au' }, - }); - await mockIms('AU'); - await initService(true); - }); - }); }); diff --git a/test/blocks/merch/mocks/body.html b/test/blocks/merch/mocks/body.html index 5473a3f899c..54cc8982476 100644 --- a/test/blocks/merch/mocks/body.html +++ b/test/blocks/merch/mocks/body.html @@ -81,9 +81,6 @@

      CTAs

      CTA with metadata default:

      -

      CTA with link-level overrides: CTA Buy Now -

      Large CTA inside a marquee: Free trial + +Free trial + +Free trial + + +Buy now + +Buy now diff --git a/test/blocks/merch/three-in-one.test.js b/test/blocks/merch/three-in-one.test.js new file mode 100644 index 00000000000..a4f97eb5ea2 --- /dev/null +++ b/test/blocks/merch/three-in-one.test.js @@ -0,0 +1,124 @@ +import { expect } from '@esm-bundle/chai'; +import { readFile } from '@web/test-runner-commands'; +import sinon from 'sinon'; +import { setConfig } from '../../../libs/utils/utils.js'; +import openThreeInOneModal, { handle3in1IFrameEvents, MSG_SUBTYPE } from '../../../libs/blocks/merch/three-in-one.js'; + +document.body.innerHTML = await readFile({ path: './mocks/threeInOne.html' }); + +const config = { + codeRoot: '/libs', + env: { name: 'prod' }, +}; +setConfig(config); + +describe('Three-in-one modal', () => { + const originalOpen = window.open; + const twpLink = document.querySelector('#twp-link'); + const crmLink = document.querySelector('#crm-link'); + const d2pLink = document.querySelector('#d2p-link'); + beforeEach(async () => { + window.open = sinon.stub(window, 'open'); + }); + afterEach(() => { + window.open = originalOpen; + }); + + it('should return undefined if no href or modal type', async () => { + const checkoutLinkWithoutHref = document.querySelector('#no-href'); + const checkoutLinkWithoutModalType = document.querySelector('#no-modal-type'); + expect(await openThreeInOneModal(checkoutLinkWithoutHref)).to.be.undefined; + expect(await openThreeInOneModal(checkoutLinkWithoutModalType)).to.be.undefined; + }); + + it('should open a modal with an iframe and a loader', async () => { + const modal = await openThreeInOneModal(twpLink); + expect(modal).to.exist; + expect(modal.getAttribute('id')).to.equal('three-in-one'); + expect(modal.classList.contains('three-in-one')).to.be.true; + const iframe = modal.querySelector('iframe'); + expect(iframe).to.exist; + expect(iframe.src).to.equal('https://commerce.adobe.com/store/segmentation?ms=COM&ot=TRIAL&pa=phsp_direct_individual&cli=adobe_com&ctx=if&co=US&lang=en'); + expect(iframe.classList.contains('loading')).to.be.true; + expect(iframe.getAttribute('frameborder')).to.equal('0'); + expect(iframe.getAttribute('marginwidth')).to.equal('0'); + expect(iframe.getAttribute('marginheight')).to.equal('0'); + expect(iframe.getAttribute('allowfullscreen')).to.equal('true'); + expect(iframe.getAttribute('loading')).to.equal('lazy'); + const spTheme = modal.querySelector('sp-theme'); + expect(spTheme).to.exist; + const loader = spTheme.querySelector('sp-progress-circle'); + expect(loader).to.exist; + modal.remove(); + }); + + it('sets proper iframe title for each modal type', async () => { + [twpLink, crmLink, d2pLink].forEach(async (link) => { + const modal = await openThreeInOneModal(link); + const modalType = link.getAttribute('data-modal-type'); + const title = modalType === 'crm' ? 'Single App' : modalType; + expect(modal.querySelector('iframe').title).to.equal(title); + modal.remove(); + }); + }); + + it('should hide loader when commerce page finished loading', async () => { + const modal = await openThreeInOneModal(twpLink); + const iframe = modal.querySelector('iframe'); + const spTheme = modal.querySelector('sp-theme'); + const spProgressCircle = spTheme.querySelector('sp-progress-circle'); + expect(iframe).to.exist; + expect(spTheme).to.exist; + expect(spProgressCircle).to.exist; + handle3in1IFrameEvents({ data: `{"app":"ucv3","subType": "${MSG_SUBTYPE.AppLoaded}"}` }); + expect(iframe.classList.contains('loading')).to.be.false; + modal.remove(); + }); + + it('should open external link in a new tab', async () => { + const modal = await openThreeInOneModal(twpLink); + handle3in1IFrameEvents({ data: `{"app":"ucv3","subType": "${MSG_SUBTYPE.EXTERNAL}", "data":{"externalUrl":"https://www.google.com/maps","target":"_blank"}}` }); + expect(window.open.calledOnceWith('https://www.google.com/maps', '_blank')).to.be.true; + modal.remove(); + }); + + it('should open link in a new tab when message subtype is "switch"', async () => { + const modal = await openThreeInOneModal(twpLink); + handle3in1IFrameEvents({ data: `{"app":"ucv3","subType": "${MSG_SUBTYPE.SWITCH}", "data":{"externalUrl":"https://www.google.com/maps","target":"_blank"}}` }); + expect(window.open.calledOnceWith('https://www.google.com/maps', '_blank')).to.be.true; + modal.remove(); + }); + + it('should open link in a new tab when message subtype is "return_back"', async () => { + const modal = await openThreeInOneModal(twpLink); + handle3in1IFrameEvents({ data: `{"app":"ucv3","subType": "${MSG_SUBTYPE.RETURN_BACK}", "data":{"externalUrl":"https://www.google.com/maps","target":"_blank"}}` }); + expect(window.open.calledOnceWith('https://www.google.com/maps', '_blank')).to.be.true; + modal.remove(); + }); + + it('should close modal when message subtype is "close"', async () => { + const modal = await openThreeInOneModal(twpLink); + const spy = sinon.spy(modal, 'dispatchEvent'); + handle3in1IFrameEvents({ data: `{"app":"ucv3","subType": "${MSG_SUBTYPE.Close}"}` }); + expect(spy.calledOnce).to.be.true; + expect(spy.calledWithMatch(sinon.match.instanceOf(Event))).to.be.true; + expect(spy.calledWithMatch(sinon.match.has('type', 'closeModal'))).to.be.true; + modal.dispatchEvent.restore(); + modal.remove(); + }); + + it('should do nothing if message subtype is not recognized or message data is invalid', async () => { + const modal = await openThreeInOneModal(twpLink); + const iframe = modal.querySelector('iframe'); + handle3in1IFrameEvents('unrelevant message'); + handle3in1IFrameEvents({ data: '{"subType": "unknown"}' }); + handle3in1IFrameEvents({ data: '{"app":"ucv3","subType": "unknown"}' }); + handle3in1IFrameEvents({ data: `{"app":"ucv3","subType": "${MSG_SUBTYPE.EXTERNAL}"}` }); + handle3in1IFrameEvents({ data: `{"app":"ucv3","subType": "${MSG_SUBTYPE.SWITCH}"}` }); + handle3in1IFrameEvents({ data: `{"app":"ucv3","subType": "${MSG_SUBTYPE.RETURN_BACK}"}` }); + handle3in1IFrameEvents({ data: `{"app":"ucv3","subType": "${MSG_SUBTYPE.EXTERNAL}", "data":{}}` }); + expect(iframe.classList.contains('loading')).to.be.true; + expect(window.open.notCalled).to.be.true; + modal.remove(); + }); +}); diff --git a/test/blocks/mmm/mmm.test.js b/test/blocks/mmm/mmm.test.js new file mode 100644 index 00000000000..222f9ec18aa --- /dev/null +++ b/test/blocks/mmm/mmm.test.js @@ -0,0 +1,202 @@ +import { readFile } from '@web/test-runner-commands'; +import { expect } from '@esm-bundle/chai'; +import { stub } from 'sinon'; +import { DEBOUNCE_TIME, getLocalStorageFilter } from '../../../libs/blocks/mmm/mmm.js'; + +const delay = (ms = 0) => new Promise((resolve) => { + setTimeout(() => resolve(), ms); +}); + +document.body.innerHTML = await readFile({ path: './mocks/body.html' }); +const getFetchPromise = (data, type = 'json') => new Promise((resolve) => { + resolve({ + ok: true, + [type]: () => data, + }); +}); + +const setFetchResponse = (data, type = 'json') => { + window.fetch = stub().returns(getFetchPromise(data, type)); +}; + +async function loadJsonAndSetResponse(jsonPath) { + let json = await readFile({ path: jsonPath }); + json = JSON.parse(json); + setFetchResponse(json); +} + +describe('MMM', () => { + before(async () => { + await loadJsonAndSetResponse('./mocks/get-pages.json'); + document.body.innerHTML = await readFile({ path: './mocks/body.html' }); + const module = await import('../../../libs/blocks/mmm/mmm.js'); + await module.default(document.querySelector('.mmm')); + }); + + it('Renders with mmm class', async () => { + const mmmDl = document.querySelector('dl.mmm'); + expect(mmmDl).to.exist; + const mmmDt = mmmDl.querySelectorAll('dt'); + expect(mmmDt.length).to.equal(5); + expect(mmmDt[0].textContent).to.equal('https://www.adobe.com/1 Manifest(s) found'); + const mmmDd = mmmDl.querySelectorAll('dd'); + expect(mmmDd.length).to.equal(5); + const loading = mmmDd[0].querySelector('.loading'); + expect(loading).to.exist; + }); + + it('Expand collapse', async () => { + await loadJsonAndSetResponse('./mocks/get-page.json'); + const [firstMmmButton, secondMmmButton] = document.body.querySelectorAll('dt button'); + expect(firstMmmButton.getAttribute('aria-expanded')).to.equal('false'); + expect(secondMmmButton.getAttribute('aria-expanded')).to.equal('false'); + + // open 1st + firstMmmButton.click(); + expect(firstMmmButton.getAttribute('aria-expanded')).to.equal('true'); + expect(secondMmmButton.getAttribute('aria-expanded')).to.equal('false'); + + // open 2nd + secondMmmButton.click(); + expect(firstMmmButton.getAttribute('aria-expanded')).to.equal('false'); + expect(secondMmmButton.getAttribute('aria-expanded')).to.equal('true'); + + // close 2nd + secondMmmButton.click(); + expect(firstMmmButton.getAttribute('aria-expanded')).to.equal('false'); + expect(secondMmmButton.getAttribute('aria-expanded')).to.equal('false'); + + // re-open 1st + firstMmmButton.click(); + expect(firstMmmButton.getAttribute('aria-expanded')).to.equal('true'); + expect(secondMmmButton.getAttribute('aria-expanded')).to.equal('false'); + }); + + it('Loads page details', async () => { + const firstMmmButton = document.body.querySelector('dt button'); + await loadJsonAndSetResponse('./mocks/get-page.json'); + firstMmmButton.click(); + const firstMmmDd = document.body.querySelector('dd'); + const loading = firstMmmDd.querySelector('.loading'); + expect(loading).to.not.exist; + const mmmPopup = firstMmmDd.querySelector('.mep-popup'); + expect(mmmPopup).to.exist; + const infoColumnOne = mmmPopup.querySelector('.mep-popup-body .mep-columns > .mep-column:nth-child(1)'); + expect(infoColumnOne.querySelector('div:nth-child(1)').textContent).to.include('Target Integration'); + expect(infoColumnOne.querySelector('div:nth-child(2)').textContent).to.include('Personalization'); + expect(infoColumnOne.querySelector('div:nth-child(3)').textContent).to.include('Geo Folder'); + expect(infoColumnOne.querySelector('div:nth-child(4)').textContent).to.include('Locale'); + expect(infoColumnOne.querySelector('div:nth-child(5)').textContent).to.include('Last Seen'); + const infoColumnTwo = mmmPopup.querySelector('.mep-popup-body .mep-columns > .mep-column:nth-child(2)'); + expect(infoColumnTwo.querySelector('div:nth-child(1)').textContent).to.include('on'); + expect(infoColumnTwo.querySelector('div:nth-child(2)').textContent).to.include('on'); + expect(infoColumnTwo.querySelector('div:nth-child(3)').textContent).to.include('Nothing (US)'); + expect(infoColumnTwo.querySelector('div:nth-child(4)').textContent).to.include('en-us'); + const mepPopupBody = mmmPopup.querySelector('.mep-popup-body'); + expect(mepPopupBody).to.exist; + const radios = mepPopupBody.querySelectorAll('select'); + expect(radios.length).to.equal(3); + const checkboxes = mepPopupBody.querySelectorAll('input[type="checkbox"]'); + expect(checkboxes.length).to.equal(2); + const inputs = mepPopupBody.querySelectorAll('input[type="text"]'); + expect(inputs.length).to.equal(1); + const manifestColumnOne = mepPopupBody.querySelector('.mep-manifest-info .mep-columns > .mep-column:nth-child(1)'); + expect(manifestColumnOne.querySelector('div:nth-child(1)').textContent).to.include('Selected'); + expect(manifestColumnOne.querySelector('div:nth-child(2)').textContent).to.include('Source'); + expect(manifestColumnOne.querySelector('div:nth-child(3)').textContent).to.include('Last seen'); + const manifestColumnTwo = mepPopupBody.querySelector('.mep-manifest-info .mep-columns > .mep-column:nth-child(2)'); + expect(manifestColumnTwo.querySelector('div:nth-child(1)').textContent).to.include('Default (control)'); + expect(manifestColumnTwo.querySelector('div:nth-child(2)').textContent).to.include('target'); + const editButton = mepPopupBody.querySelector('.mep-edit-manifest'); + expect(editButton).to.exist; + expect(editButton.href).to.equal('https://main--homepage--adobecom.hlx.page/homepage/fragments/mep/hp-11-15-black-friday.json'); + const previewButton = mmmPopup.querySelector('a[data-id="preview-button"]'); + expect(previewButton).to.exist; + }); + + it('Test preview button', async () => { + const firstMmmButton = document.body.querySelector('dt button'); + await loadJsonAndSetResponse('./mocks/get-page.json'); + firstMmmButton.click(); + const firstMmmDd = document.body.querySelector('dd'); + const mmmPopup = firstMmmDd.querySelector('.mep-popup'); + const previewButton = mmmPopup.querySelector('a[data-id="preview-button"]'); + expect(previewButton).to.exist; + expect(previewButton.href).to.include('https%3A%2F%2Fmain--homepage--adobecom.hlx.page%2Fhomepage%2Ffragments%2Fmep%2Fhp-11-15-black-friday.json--default'); + const option = mmmPopup.querySelector('option[name="https://main--homepage--adobecom.hlx.page/homepage/fragments/mep/hp-11-15-black-friday.json4"][value="target-apro-twp-abdn"]'); + expect(option).to.exist; + option.click(); + expect(previewButton.href).to.include('https://www.adobe.com/?mep=https%3A%2F%2Fmain--homepage--adobecom.hlx.page%2Fhomepage%2Ffragments%2Fmep%2Fhp-11-15-black-friday.json--default'); + const addHighlight = mmmPopup.querySelector('#mepHighlightCheckbox-4'); + expect(addHighlight).to.exist; + addHighlight.click(); + expect(previewButton.href).to.include('mepHighlight=true'); + const addButtonOff = document.querySelector('#mepPreviewButtonCheckbox-4'); + expect(addButtonOff).to.exist; + addButtonOff.click(); + expect(previewButton.href).to.include('mepButton=off'); + const newManifest = mmmPopup.querySelector('.new-manifest'); + expect(newManifest).to.exist; + newManifest.value = '/added-manifest.json'; + const event = new Event('change'); + newManifest.dispatchEvent(event); + expect(previewButton.href).to.include('%2Fadded-manifest.json'); + }); + + it('Test filters', async () => { + let filterData = getLocalStorageFilter(); + expect(filterData).to.be.null; + + const copyButton = document.querySelector('.copy-to-clipboard'); + expect(copyButton).to.exist; + const event = new Event('change'); + expect(copyButton.dataset.destination).to.not.include('geos'); + expect(copyButton.dataset.destination).to.not.include('pages'); + expect(copyButton.dataset.destination).to.not.include('filter'); + + const geoDropdown = document.querySelector('#mmm-dropdown-geos'); + expect(geoDropdown).to.exist; + geoDropdown.options[1].selected = true; + geoDropdown.dispatchEvent(event); + expect(copyButton.dataset.destination).to.include('geos'); + expect(copyButton.dataset.destination).to.not.include('pages'); + expect(copyButton.dataset.destination).to.not.include('filter'); + + const pageDropdown = document.querySelector('#mmm-dropdown-pages'); + expect(pageDropdown).to.exist; + pageDropdown.options[2].selected = true; + pageDropdown.dispatchEvent(event); + expect(copyButton.dataset.destination).to.include('geos'); + expect(copyButton.dataset.destination).to.include('pages'); + expect(copyButton.dataset.destination).to.not.include('filter'); + + geoDropdown.options[0].selected = true; + geoDropdown.dispatchEvent(event); + expect(copyButton.dataset.destination).to.not.include('geos'); + expect(copyButton.dataset.destination).to.include('pages'); + expect(copyButton.dataset.destination).to.not.include('filter'); + + const lastSeenManifestDropdown = document.querySelector('#mmm-lastSeenManifest'); + lastSeenManifestDropdown.options[0].selected = true; + lastSeenManifestDropdown.dispatchEvent(event); + expect(copyButton.dataset.destination).to.include('lastSeenManifest'); + + const mmmSearchQuery = document.querySelector('#mmm-search-filter'); + expect(mmmSearchQuery).to.exist; + mmmSearchQuery.value = 'pricing'; + mmmSearchQuery.dispatchEvent(event); + await delay(DEBOUNCE_TIME + 1); // await debounce time + expect(copyButton.dataset.destination).to.not.include('geos'); + expect(copyButton.dataset.destination).to.include('pages'); + expect(copyButton.dataset.destination).to.include('filter'); + + filterData = getLocalStorageFilter(); + expect(filterData).to.not.be.null; + expect(filterData.filter).to.not.be.null; + expect(filterData.geos).to.not.be.null; + expect(filterData.pages).to.not.be.null; + expect(filterData.pageNum).to.not.be.null; + expect(filterData.subdomain).to.not.be.null; + expect(filterData.lastSeenManifest).to.not.be.null; + }); +}); diff --git a/test/blocks/mmm/mocks/body.html b/test/blocks/mmm/mocks/body.html new file mode 100644 index 00000000000..47e766446c2 --- /dev/null +++ b/test/blocks/mmm/mocks/body.html @@ -0,0 +1,128 @@ +

      +
      + +
      +
      +
      + +
      +
      + + + +
      + +
      + +
      + +
      +
      +
      Menu: geos
      +
      Top Regions/Geos
      +
      +
      +
      us,ca,ca_fr
      +
      NA region: US, CA, CA_FR
      +
      +
      +
      au,nz,kr
      +
      APAC region: AU, NZ, KR
      +
      +
      +
      mx,br
      +
      LATAM region: MX, BR
      +
      +
      +
      jp
      +
      Japan
      +
      +
      +
      us
      +
      US: United States
      +
      +
      +
      ca
      +
      CA-EN: Canada - English
      +
      +
      +
      ca_fr
      +
      CA-FR: Canada - Français
      +
      +
      +
      au
      +
      AU: Australia
      +
      +
      +
      nz
      +
      NZ: New Zealand
      +
      +
      +
      kr
      +
      KR: Korea
      +
      +
      +
      mx
      +
      MX: MÊxico
      +
      +
      +
      br
      +
      BR: Brasil
      +
      +
      +
      Menu: pages
      +
      Top Pages
      +
      +
      +
      +

      /,

      +

      /creativecloud.html,

      +

      /products/photoshop.html,

      +

      /products/illustrator.html

      +
      +
      Only top pages
      +
      +
      +
      /
      +
      Homepage
      +
      +
      +
      /creativecloud.html
      +
      CCOV
      +
      +
      +
      /products/photoshop.html
      +
      Photoshop product page
      +
      +
      +
      /products/illustrator.html
      +
      Illustrator product page
      +
      +
      +
      diff --git a/test/blocks/mmm/mocks/get-page.json b/test/blocks/mmm/mocks/get-page.json new file mode 100644 index 00000000000..fc4884f1e1a --- /dev/null +++ b/test/blocks/mmm/mocks/get-page.json @@ -0,0 +1,48 @@ +{ + "activities": [ + { + "eventEnd": null, + "lastSeen": "2024-12-06T01:22:42.000Z", + "variantNames": "target-apro-twp-abdn||target-cc-lapsed||target-smb||target-edu||target-dc||target-return||phone||all", + "targetActivityName": "PZN | US | Homepage | Logged Out - 11/15/24 - Blk-Frdy-Cybr-Mndy", + "eventStart": null, + "source": "target", + "manifestId": 6, + "url": "https://main--homepage--adobecom.hlx.page/homepage/fragments/mep/hp-11-15-black-friday.json", + "pathname": "/homepage/fragments/mep/hp-11-15-black-friday.json" + }, + { + "eventEnd": null, + "lastSeen": "2024-12-06T00:23:37.000Z", + "variantNames": "target-apro-twp-abdn||target-cc-lapsed||target-smb||target-edu||target-dc||target-return||phone", + "targetActivityName": null, + "eventStart": null, + "source": "pzn", + "manifestId": 15, + "url": "https://main--homepage--adobecom.hlx.page/homepage/fragments/mep/hp-12-09-24-cybr-tkdwn-ste.json", + "pathname": "/homepage/fragments/mep/hp-12-09-24-cybr-tkdwn-ste.json" + }, + { + "eventEnd": "2024-12-09T15:00:00.000Z", + "lastSeen": "2024-12-06T18:54:14.000Z", + "variantNames": "all", + "targetActivityName": null, + "eventStart": "2024-11-15T15:45:00.000Z", + "source": "promo", + "manifestId": 7, + "url": "https://main--homepage--adobecom.hlx.page/homepage/fragments/loggedout/promos/2024/bfcm/global/bfcm-cct-row-133146.json", + "pathname": "/homepage/fragments/loggedout/promos/2024/bfcm/global/bfcm-cct-row-133146.json" + } + ], + "page": { + "personalization": "on", + "lastSeen": "2024-12-06T21:02:46.000Z", + "geo": "", + "pageId": 4, + "page": "/", + "locale": "en-US", + "region": "us", + "url": "https://www.adobe.com/", + "target": "on" + } +} diff --git a/test/blocks/mmm/mocks/get-pages.json b/test/blocks/mmm/mocks/get-pages.json new file mode 100644 index 00000000000..bbb40e0b98e --- /dev/null +++ b/test/blocks/mmm/mocks/get-pages.json @@ -0,0 +1,47 @@ +{ + "result": [ + { + "geo": "", + "pageId": 4, + "page": "/", + "locale": "en-US", + "numOfActivities": 1, + "url": "https://www.adobe.com/" + }, + { + "geo": "", + "pageId": 7, + "page": "/acrobat/pricing.html", + "locale": "en-US", + "numOfActivities": 1, + "url": "https://www.adobe.com/acrobat/pricing.html" + }, + { + "geo": "", + "pageId": 3, + "page": "/creativecloud.html", + "locale": "en-US", + "numOfActivities": 1, + "url": "https://www.adobe.com/creativecloud.html" + }, + { + "geo": "ca_fr", + "pageId": 16, + "page": "/", + "locale": "fr-CA", + "numOfActivities": 1, + "url": "https://www.adobe.com/ca_fr/" + }, + { + "geo": "de", + "pageId": 61, + "page": "/", + "locale": "de-DE", + "numOfActivities": 1, + "url": "https://www.adobe.com/de/" + } + ], + "totalRecords": 20, + "pageNum": 1, + "perPage": 5 +} diff --git a/test/blocks/modals/modals.test.js b/test/blocks/modals/modals.test.js index 9f742bba114..cedbe27889c 100644 --- a/test/blocks/modals/modals.test.js +++ b/test/blocks/modals/modals.test.js @@ -112,7 +112,7 @@ describe('Modals', () => { const modal = document.getElementById('milo'); expect(modal).to.exist; expect(modal.getAttribute('daa-lh')).to.equal('milo-modal'); - const buttons = modal.querySelectorAll('button'); + const buttons = modal.querySelectorAll('button[id]'); expect(buttons[0].getAttribute('daa-ll')).to.equal('Milo Button 1-1--Milo'); expect(buttons[1].getAttribute('daa-ll')).to.equal('Milo Button 2-2--Milo'); window.location.hash = ''; diff --git a/test/blocks/ost/textOption.test.js b/test/blocks/ost/textOption.test.js index c1de3a4bd38..a13c65ba248 100644 --- a/test/blocks/ost/textOption.test.js +++ b/test/blocks/ost/textOption.test.js @@ -21,7 +21,8 @@ describe('test ctaTextOption', () => { { id: 'change-plan-team-payment', name: 'Change Plan Team Payment' }, { id: 'take-the-quiz', name: 'Take the quiz' }, { id: 'see-more', name: 'See more' }, - { id: 'upgrade-now', name: 'Upgrade now' }]; + { id: 'upgrade-now', name: 'Upgrade now' }, + { id: 'save-today', name: 'Save today' }]; const texts = ctaTextOption.getTexts(); expect(EXPECTED_TEXTS).to.deep.equal(texts); }); diff --git a/test/blocks/pdf-viewer/mocks/pdf-utils.js b/test/blocks/pdf-viewer/mocks/pdf-utils.js new file mode 100644 index 00000000000..cb02e2faf4a --- /dev/null +++ b/test/blocks/pdf-viewer/mocks/pdf-utils.js @@ -0,0 +1,63 @@ +import { stub } from 'sinon'; + +let config = {}; + +export function isInTextNode() { + return false; +} + +export function createTag(tag, attributes, html) { + const el = document.createElement(tag); + if (html) { + if (html instanceof HTMLElement + || html instanceof SVGElement + || html instanceof DocumentFragment) { + el.append(html); + } else if (Array.isArray(html)) { + el.append(...html); + } else { + el.insertAdjacentHTML('beforeend', html); + } + } + if (attributes) { + Object.entries(attributes).forEach(([key, val]) => { + el.setAttribute(key, val); + }); + } + return el; +} + +export function loadLink(href, { as, callback, crossorigin, rel, fetchpriority } = {}) { + let link = document.head.querySelector(`link[href="${href}"]`); + if (!link) { + link = document.createElement('link'); + link.setAttribute('rel', rel); + if (as) link.setAttribute('as', as); + if (crossorigin) link.setAttribute('crossorigin', crossorigin); + if (fetchpriority) link.setAttribute('fetchpriority', fetchpriority); + link.setAttribute('href', href); + if (callback) { + link.onload = (e) => callback(e.type); + link.onerror = (e) => callback(e.type); + } + document.head.appendChild(link); + } else if (callback) { + callback('noop'); + } + return link; +} + +export const getConfig = () => config; + +export const setConfig = (c) => { config = c; }; + +export const customFetch = stub(); + +export const loadStyle = stub(); + +export const loadScript = stub(); + +export function createIntersectionObserver({ el, callback /* , once = true, options = {} */ }) { + // fire immediately + callback(el, { target: el }); +} diff --git a/test/blocks/pdf-viewer/pdf-viewer.test.html b/test/blocks/pdf-viewer/pdf-viewer.test.html new file mode 100644 index 00000000000..9a3f5d27e3a --- /dev/null +++ b/test/blocks/pdf-viewer/pdf-viewer.test.html @@ -0,0 +1,58 @@ + + + + + + + + + diff --git a/test/blocks/pdf-viewer/pdf-viewer.test.js b/test/blocks/pdf-viewer/pdf-viewer.test.js index d6647fb5595..c686fb7badf 100644 --- a/test/blocks/pdf-viewer/pdf-viewer.test.js +++ b/test/blocks/pdf-viewer/pdf-viewer.test.js @@ -1,42 +1,153 @@ -import { readFile } from '@web/test-runner-commands'; import { expect } from '@esm-bundle/chai'; import { setConfig } from '../../../libs/utils/utils.js'; -const { default: pdfViewer, getPdfConfig } = await import('../../../libs/blocks/pdf-viewer/pdf-viewer.js'); +const { + getPdfConfig, + CLIENT_ID_PAGE, + CLIENT_ID_LIVE, + CLIENT_ID_HLX_PAGE, + CLIENT_ID_HLX_LIVE, +} = await import('../../../libs/blocks/pdf-viewer/pdf-viewer.js'); +const CONSUMER_CONFIG = { + local: { + pdfViewerClientId: 'localID', + pdfViewerReportSuite: 'localReportSuite', + }, + stage: { + pdfViewerClientId: 'stageID', + pdfViewerReportSuite: 'stageReportSuite', + }, + prod: { + pdfViewerClientId: 'prodID', + pdfViewerReportSuite: 'prodReportSuite', + }, + page: { + pdfViewerClientId: 'pageID', + pdfViewerReportSuite: 'pageReportSuite', + }, + live: { + pdfViewerClientId: 'liveID', + pdfViewerReportSuite: 'liveReportSuite', + }, + hlxPage: { + pdfViewerClientId: 'hlxPageID', + pdfViewerReportSuite: 'hlxPageReportSuite', + }, + hlxLive: { + pdfViewerClientId: 'hlxLiveID', + pdfViewerReportSuite: 'hlxLiveReportSuite', + }, +}; describe('PDF Viewer', () => { - it('does not render when there are no pdf links', async () => { - await pdfViewer(undefined); - expect(document.querySelectorAll('.pdf-container').length).to.equal(0); - }); + describe('getPdfConfig', () => { + it('gets milo local config', () => { + setConfig({}); + expect(getPdfConfig(window.location)).to.eql({ clientId: 'a76f1668fd3244d98b3838e189900a5e', reportSuiteId: undefined }); + }); - it('renders PDFs embedded onto the page', async () => { - document.body.innerHTML = await readFile({ path: './mocks/body.html' }); - const pdf = document.querySelectorAll('a'); + it('gets milo page config', () => { + const location = { host: 'main--milo--adobecom.aem.page' }; + setConfig({ clientEnv: 'stage' }); + expect(getPdfConfig(location)).to.eql({ + clientId: CLIENT_ID_PAGE, + reportSuiteId: undefined, + }); + }); - pdf.forEach(async (link) => { - await pdfViewer(link); - expect(document.querySelector('.pdf-container')).to.exist; - expect(document.querySelector('iframe')).to.exist; + it('gets milo live config', () => { + const location = { host: 'main--milo--adobecom.aem.live' }; + setConfig({ clientEnv: 'stage' }); + expect(getPdfConfig(location)).to.eql({ + clientId: CLIENT_ID_LIVE, + reportSuiteId: undefined, + }); }); - expect(document.querySelectorAll('.pdf-container').length).to.equal(2); - }); - it('gets correct config for milo', () => { - setConfig({}); - expect(getPdfConfig()).to.eql({ clientId: '600a4521c23d4c7eb9c7b039bee534a0', reportSuiteId: undefined }); - }); + it('gets milo hlxPage config', () => { + const location = { host: 'main--milo--adobecom.hlx.page' }; + setConfig({ clientEnv: 'stage' }); + expect(getPdfConfig(location)).to.eql({ + clientId: CLIENT_ID_HLX_PAGE, + reportSuiteId: undefined, + }); + }); - it('gets correct config for client', () => { - const consumer = { - pdfViewerClientId: '3b685312b5784de6943647df19f1f492', - pdfViewerReportSuite: 'adbadobedxqa', - }; - setConfig({ local: consumer }); + it('gets milo hlxLive config', () => { + const location = { host: 'main--milo--adobecom.hlx.live' }; + setConfig({ clientEnv: 'stage' }); + expect(getPdfConfig(location)).to.eql({ + clientId: CLIENT_ID_HLX_LIVE, + reportSuiteId: undefined, + }); + }); + + it('gets milo prod config', () => { + const location = { host: 'milo.adobe.com' }; + setConfig({ clientEnv: 'prod' }); + expect(getPdfConfig(location)).to.eql({ clientId: '3c0a5ddf2cc04d3198d9e48efc390fa9', reportSuiteId: undefined }); + }); + + it('gets consumer local config', () => { + setConfig(CONSUMER_CONFIG); + expect(getPdfConfig(window.location)).to.eql({ + clientId: 'localID', + reportSuiteId: 'localReportSuite', + }); + }); + + it('gets consumer page config', () => { + const location = { host: 'main--bacom--adobecom.aem.page' }; + setConfig(CONSUMER_CONFIG); + expect(getPdfConfig(location)).to.eql({ + clientId: 'pageID', + reportSuiteId: 'pageReportSuite', + }); + }); + + it('gets consumer live config', () => { + const location = { host: 'main--bacom--adobecom.aem.live' }; + setConfig(CONSUMER_CONFIG); + expect(getPdfConfig(location)).to.eql({ + clientId: 'liveID', + reportSuiteId: 'liveReportSuite', + }); + }); + + it('gets consumer hlxPage config', () => { + const location = { host: 'main--bacom--adobecom.hlx.page' }; + setConfig(CONSUMER_CONFIG); + expect(getPdfConfig(location)).to.eql({ + clientId: 'hlxPageID', + reportSuiteId: 'hlxPageReportSuite', + }); + }); + + it('gets consumer hlxLive config', () => { + const location = { host: 'main--bacom--adobecom.hlx.live' }; + setConfig(CONSUMER_CONFIG); + expect(getPdfConfig(location)).to.eql({ + clientId: 'hlxLiveID', + reportSuiteId: 'hlxLiveReportSuite', + }); + }); + + it('gets consumer stage config', () => { + const location = { host: 'business.stage.adobe.com' }; + setConfig({ ...CONSUMER_CONFIG, clientEnv: 'stage' }); + expect(getPdfConfig(location)).to.eql({ + clientId: 'stageID', + reportSuiteId: 'stageReportSuite', + }); + }); - expect(getPdfConfig()).to.eql({ - clientId: consumer.pdfViewerClientId, - reportSuiteId: consumer.pdfViewerReportSuite, + it('gets consumer prod config', () => { + const location = { host: 'business.adobe.com' }; + setConfig({ ...CONSUMER_CONFIG, clientEnv: 'prod' }); + expect(getPdfConfig(location)).to.eql({ + clientId: 'prodID', + reportSuiteId: 'prodReportSuite', + }); }); }); }); diff --git a/test/blocks/quiz-entry/mocks/index.html b/test/blocks/quiz-entry/mocks/index.html deleted file mode 100644 index 2fedf2fe642..00000000000 --- a/test/blocks/quiz-entry/mocks/index.html +++ /dev/null @@ -1,22 +0,0 @@ -
      -
      -
      data
      -
      /drafts/quiz/quiz-entry/
      -
      -
      -
      quiz
      -
      /drafts/quiz/
      -
      -
      -
      max-questions
      -
      1
      -
      -
      -
      analytics-type
      -
      cc:app-reco
      -
      -
      -
      analytics-quiz
      -
      UARv4
      -
      -
      diff --git a/test/blocks/quiz-entry/mocks/invalid-user-selection.json b/test/blocks/quiz-entry/mocks/invalid-user-selection.json deleted file mode 100644 index fc081a0f981..00000000000 --- a/test/blocks/quiz-entry/mocks/invalid-user-selection.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "selectedQuestion": { - "questions": "q-category", - "max-selections": "3", - "min-selections": "1" - }, - "selectedCards": { "invalid-option": true } -} diff --git a/test/blocks/quiz-entry/mocks/mock-data.js b/test/blocks/quiz-entry/mocks/mock-data.js deleted file mode 100644 index f369e9f0285..00000000000 --- a/test/blocks/quiz-entry/mocks/mock-data.js +++ /dev/null @@ -1,1876 +0,0 @@ -const resultsMock = { - strings: { - 'q-video': { - total: 5, - offset: 0, - limit: 5, - data: [ - { - options: 'social', - title: '', - text: 'Create, edit, and share on social', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-video/1-PR-CreateEditShare.png', - }, - { - options: 'pro', - title: '', - text: 'Make pro-level edits for high-quality results', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-video/2-PR-ProLevelEdits.png', - }, - { - options: 'movement', - title: '', - text: 'Create graphics and transitions that move', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-video/3-AE-TitlesAndTransitions.png', - }, - { - options: 'animate', - title: '', - text: 'Make animations for cartoons or games', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-video/4-AN-Animations.png', - }, - { - options: 'sound', - title: '', - text: 'Edit, mix, and add sound effects', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-video/5-AU-SoundEffects.png', - }, - ], - }, - 'q-3d': { - total: 5, - offset: 0, - limit: 5, - data: [ - { - options: 'stage', - title: '', - text: 'Assemble, stage, and render 3D scenes', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q3/3-Stager@1x.png', - }, - { - options: 'texture', - title: '', - text: 'Texture 3D assets in real time', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q3/2-Painter@1x.png', - }, - { - options: 'materials', - title: '', - text: 'Create 3D materials from real-life images', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q3/5-Sampler@1x.png', - }, - { - options: 'model', - title: '', - text: 'Create 3D models with digital clay', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q3/1-Modeler@1x.png', - }, - { - options: 'assets', - title: '', - text: 'Design 3D assets and materials', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q3/4-Designer@1x.png', - }, - ], - }, - 'q-category': { - total: 7, - offset: 0, - limit: 7, - data: [ - { - options: 'fi_code', - title: 'Describe your interest here', - text: 'Ask our AI assistant', - icon: 'https://milo.adobe.com/drafts/quiz/quiz-ai/search.svg', - image: '', - }, - { - options: 'photo', - title: 'Photography', - text: 'Edit or organize my photos', - icon: 'https://milo.adobe.com/drafts/quiz/quiz-ai/search.svg', - image: - 'https://main--milo--adobecom.hlx.page/drafts/colloyd/quiz-entry/images/photography.png', - }, - { - options: 'video', - title: 'Video', - text: 'Create and edit video or audio', - icon: '', - image: - 'https://main--milo--adobecom.hlx.page/drafts/colloyd/quiz-entry/images/video.png', - }, - { - options: 'design', - title: 'Graphic design', - text: 'Design layouts or websites', - icon: '', - image: - 'https://main--milo--adobecom.hlx.page/drafts/colloyd/quiz-entry/images/design.png', - }, - { - options: 'illustration', - title: 'Illustration', - text: 'Paint, draw, or create illustrations', - icon: '', - image: - 'https://main--milo--adobecom.hlx.page/drafts/colloyd/quiz-entry/images/illustration.png', - }, - { - options: 'pdf', - title: 'PDFs', - text: 'Create, edit, or sign PDFs', - icon: '', - image: - 'https://main--milo--adobecom.hlx.page/drafts/colloyd/quiz-entry/images/pdf.png', - }, - { - options: '3d', - title: '3D/AR', - text: 'Model, texture, and render 3D assets and scenes', - icon: '', - image: - 'https://main--milo--adobecom.hlx.page/drafts/colloyd/quiz-entry/images/3dar.png', - }, - ], - }, - questions: { - total: 10, - offset: 0, - limit: 10, - data: [ - { - q: 'q-category', - heading: 'Not sure which apps are best for you?', - 'sub-head': - 'Tell us what you’re interested in. We’ll help you figure it out.', - btn: 'Continue', - text: 'Or pick up to 3 below', - background: - 'https://milo.adobe.com/drafts/quiz/quiz-2/quiz-background.jpeg', - footerFragment: '', - }, - { - q: 'q-fallback', - heading: "We're sorry our assistant couldn't help today.", - 'sub-head': 'Please choose up to three options.', - btn: 'Next', - text: '', - background: - 'https://milo.adobe.com/drafts/quiz/quiz-2/quiz-background.jpeg', - footerFragment: '', - }, - { - q: 'q-photo', - heading: 'What do you want to do with photos?', - 'sub-head': 'Pick one.', - btn: 'Next', - text: '', - background: - 'https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-Q2-Photo%20BKGD%202X?$pjpeg$&jpegSize=300&wid=1920', - footerFragment: - 'https://milo.adobe.com/fragments/quiz/sample-uar-fragments/footer/footer1', - }, - { - q: 'q-video', - heading: 'What do you want to do with video?', - 'sub-head': 'Pick one.', - btn: 'Next', - text: '', - background: - 'https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-Q2-Photo%20BKGD%202X?$pjpeg$&jpegSize=300&wid=1920', - footerFragment: '', - }, - { - q: 'q-design', - heading: 'What do you want to do with design?', - 'sub-head': 'Pick one.', - btn: 'Next', - text: '', - background: - 'https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-Q2-Design%20BKGD%202X?$pjpeg$&jpegSize=300&wid=1920', - footerFragment: '', - }, - { - q: 'q-illustration', - heading: 'What do you want to do with illustration?', - 'sub-head': 'Pick one.', - btn: 'Next', - text: '', - background: - 'https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-Q2-Illustration%20BKGD%202X?$pjpeg$&jpegSize=300&wid=1920', - footerFragment: '', - }, - { - q: 'q-pdf', - heading: 'What do you want to do with PDFs?', - 'sub-head': 'Pick one.', - btn: 'Next', - text: '', - background: - 'https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-Q2-Acrobat%20BKGD%202X?$pjpeg$&jpegSize=300&wid=1920', - footerFragment: '', - }, - { - q: 'q-3d', - heading: 'What do you want to do with 3D/AR?', - 'sub-head': 'Pick one.', - btn: 'Next', - text: '', - background: - 'https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-3D-AR%20BKGD?$pjpeg$&jpegSize=300&wid=1920', - footerFragment: '', - }, - { - q: 'q-rather', - heading: 'For your projects, would you rather:', - 'sub-head': 'Pick one.', - btn: 'Next', - text: '', - background: - 'https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-Q3-Learn%20BKGD%202X?$pjpeg$&jpegSize=300&wid=1920', - footerFragment: '', - }, - { - q: 'q-customer', - heading: 'What else are you looking for today?', - 'sub-head': 'Pick one.', - btn: 'Get your results', - text: '', - background: - 'https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-Q4%20BKGD%202X?$pjpeg$&jpegSize=300&wid=1920', - footerFragment: - 'https://milo.adobe.com/fragments/quiz/sample-uar-fragments/footer/footer2', - }, - ], - }, - 'q-rather': { - total: 2, - offset: 0, - limit: 2, - data: [ - { - options: 'template', - title: '', - text: 'Edit quickly and customize templates', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/1-Templates.png', - }, - { - options: 'custom', - title: '', - text: 'Take the time to control every detail', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/2-CustomDesigns.png', - }, - ], - }, - 'q-photo': { - total: 5, - offset: 0, - limit: 5, - data: [ - { - options: 'organize', - title: '', - text: 'Get them sorted and organized', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-photo/1-LR-StoreAndOrganize.png', - }, - { - options: 'batch', - title: '', - text: 'Edit lots of photos quickly', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-photo/2-LR-ApplyFilters.png', - }, - { - options: 'edit', - title: '', - text: 'Edit and finesse the smallest details', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-photo/3-PS-RemoveObjects.png', - }, - { - options: 'color', - title: '', - text: 'Correct color and lighting like a pro', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-photo/4-PS-MakeDetailedColor.png', - }, - { - options: 'blend', - title: '', - text: 'Blend multiple shots into something new', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-photo/5-PS-BlendImages.png', - }, - ], - }, - 'q-fallback': { - total: 6, - offset: 0, - limit: 6, - data: [ - { - options: 'photo', - title: 'Photography', - text: 'Edit or organize my photos', - icon: 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/1-Photo%20ICON.svg', - image: '', - }, - { - options: 'video', - title: 'Video', - text: 'Create and edit video or audio', - icon: 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/2-Video%20ICON.svg', - image: '', - }, - { - options: 'design', - title: 'Graphic design', - text: 'Design layouts or websites', - icon: 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/3-Design%20ICON.svg', - image: '', - }, - { - options: 'illustration', - title: 'Illustration', - text: 'Paint, draw, or create illustrations', - icon: 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/4-Illustration%20ICON.svg', - image: '', - }, - { - options: 'pdf', - title: 'PDFs', - text: 'Create, edit, or sign PDFs', - icon: 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/5-PDF%20ICON.svg', - image: '', - }, - { - options: '3d', - title: '3D/AR', - text: 'Model, texture, and render 3D assets and scenes', - icon: 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/6-3D-AR%20ICON.svg', - image: '', - }, - ], - }, - 'q-pdf': { - total: 6, - offset: 0, - limit: 6, - data: [ - { - options: 'create', - title: '', - text: 'Create and export PDFs to Office', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-pdf/1-Ac-CreateExport.png', - }, - { - options: 'edit', - title: '', - text: 'Edit text and images in PDFs', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-pdf/2-Ac-EditText.png', - }, - { - options: 'share', - title: '', - text: 'Share PDFs with anyone', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-pdf/3-Ac-Share.png', - }, - { - options: 'secure', - title: '', - text: 'Protect and secure PDFs', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-pdf/4-Ac-Protect.png', - }, - { - options: 'sign', - title: '', - text: 'Sign PDFs wherever you are', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-pdf/5-Ac-Sign.png', - }, - { - options: 'track', - title: '', - text: 'Track signatures and progress', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-pdf/6-Ac-TrackSignatures.png', - }, - ], - }, - 'q-design': { - total: 3, - offset: 0, - limit: 3, - data: [ - { - options: 'layouts', - title: '', - text: 'Create layouts for magazines, books, or posters', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-design/1-%20Id-Layouts.png', - }, - { - options: 'images', - title: '', - text: 'Combine multiple images into new designs', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-design/2-PS-CombineImages.png', - }, - { - options: 'graphics', - title: '', - text: 'Create graphics and designs that work at any size', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-design/3-Ai-CreateGraphics.png', - }, - ], - }, - 'q-illustration': { - total: 4, - offset: 0, - limit: 4, - data: [ - { - options: 'raster', - title: '', - text: 'Paint, draw, or doodle like on paper', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-illustration/1-PS-PaintDraw.png', - }, - { - options: 'vector', - title: '', - text: 'Make illustrations that work at any size', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-illustration/2-Ai-WorkAtAnySize.png', - }, - { - options: 'crisp', - title: '', - text: 'Draw crisp lines and smooth curves', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-illustration/3-Ai-CrispLines.png', - }, - { - options: 'images', - title: '', - text: 'Blend multiple images into something new', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-illustration/4-PS-BlendImages.png', - }, - ], - }, - 'q-customer': { - total: 3, - offset: 0, - limit: 3, - data: [ - { - options: 'educational', - title: '', - text: 'A student or teacher discount', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q4/2-StudentTeacher.png', - }, - { - options: 'business', - title: '', - text: 'Licenses and business features for teams', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q4/3-Work.png', - }, - { - options: 'individual', - title: '', - text: 'Neither apply', - icon: '', - image: - 'https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q4/1-Individual.png', - }, - ], - }, - ':version': 3, - ':names': [ - 'q-video', - 'q-3d', - 'q-category', - 'questions', - 'q-rather', - 'q-photo', - 'q-fallback', - 'q-pdf', - 'q-design', - 'q-illustration', - 'q-customer', - ], - ':type': 'multi-sheet', - }, - questions: { - 'q-rather': { - total: 2, - offset: 0, - limit: 2, - data: [ - { - options: 'template', - next: 'RESET,q-customer', - 'data-analytics-title': 'ccx', - }, - { - options: 'custom', - next: 'RESULT', - 'data-analytics-title': 'Flagship', - }, - ], - }, - questions: { - total: 9, - offset: 0, - limit: 9, - data: [ - { - questions: 'q-category', - 'max-selections': '3', - 'min-selections': '1', - }, - { - questions: 'q-rather', - 'max-selections': '1', - 'min-selections': '1', - }, - { - questions: 'q-video', - 'max-selections': '1', - 'min-selections': '1', - }, - { - questions: 'q-photo', - 'max-selections': '1', - 'min-selections': '1', - }, - { - questions: 'q-customer', - 'max-selections': '1', - 'min-selections': '1', - }, - { - questions: 'q-3d', - 'max-selections': '1', - 'min-selections': '1', - }, - { - questions: 'q-pdf', - 'max-selections': '1', - 'min-selections': '1', - }, - { - questions: 'q-design', - 'max-selections': '1', - 'min-selections': '1', - }, - { - questions: 'q-illustration', - 'max-selections': '1', - 'min-selections': '1', - }, - ], - }, - 'q-3d': { - total: 5, - offset: 0, - limit: 5, - data: [ - { - options: 'stage', - next: 'q-customer', - }, - { - options: 'texture', - next: 'q-customer', - }, - { - options: 'materials', - next: 'q-customer', - }, - { - options: 'model', - next: 'q-customer', - }, - { - options: 'assets', - next: 'q-customer', - }, - ], - }, - 'q-pdf': { - total: 6, - offset: 0, - limit: 6, - data: [ - { - options: 'create', - next: 'q-customer', - }, - { - options: 'edit', - next: 'q-customer', - }, - { - options: 'share', - next: 'q-customer', - }, - { - options: 'secure', - next: 'q-customer', - }, - { - options: 'sign', - next: 'q-customer', - }, - { - options: 'track', - next: 'q-customer', - }, - ], - }, - 'q-category': { - total: 22, - offset: 0, - limit: 22, - data: [ - { - options: 'fi_code', - next: '', - type: 'form', - endpoint: 'acom-prd-recom-v01', - 'api-key': 'CCHomeMLRepo1', - threshold: '0.7', - fallback: 'photoshop_cc,illustrator_cc,premierepro_cc', - 'ac-endpoint': 'autocomplete', - 'ac-scope': 'adobe_com', - 'ac-client-id': 'adobedotcom2', - }, - { - options: 'photo', - next: 'q-rather,q-photo', - type: 'card', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'video', - next: 'RESET', - type: 'card', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'design', - next: 'q-rather,q-design', - type: 'card', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'illustration', - next: 'q-rather,q-illustration', - type: 'card', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: '3d', - next: 'NOT(q-rather),q-3d', - type: 'card', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'pdf', - next: 'q-rather,q-pdf', - type: 'card', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'acrobat_dc_pro', - next: 'q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'aftereffects_cc', - next: 'q-rather,q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'audition_cc', - next: 'q-rather,q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'flash_professional_cc', - next: 'q-rather,q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'illustrator_cc', - next: 'q-rather,q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'indesign_cc', - next: 'q-rather,q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'lightroom_cc', - next: 'q-rather,q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'photoshop_cc', - next: 'q-rather,q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'premierepro_cc', - next: 'q-rather,q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'sbst_stager', - next: 'q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'sbst_painter', - next: 'q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'sbst_alchemist', - next: 'q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'sbst_shaper', - next: 'q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'sbst_designer', - next: 'q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - { - options: 'free_spark', - next: 'q-customer', - type: 'api_return_code', - endpoint: '', - 'api-key': '', - threshold: '', - fallback: '', - 'ac-endpoint': '', - 'ac-scope': '', - 'ac-client-id': '', - }, - ], - }, - 'q-customer': { - total: 3, - offset: 0, - limit: 3, - data: [ - { - options: 'educational', - next: 'RESULT', - }, - { - options: 'business', - next: 'RESULT', - }, - { - options: 'individual', - next: 'RESULT', - }, - ], - }, - 'q-video': { - total: 5, - offset: 0, - limit: 5, - data: [ - { - options: 'social', - next: 'q-customer', - }, - { - options: 'pro', - next: 'q-customer', - }, - { - options: 'movement', - next: 'q-customer', - }, - { - options: 'animate', - next: 'q-customer', - }, - { - options: 'sound', - next: 'q-customer', - }, - ], - }, - 'q-photo': { - total: 5, - offset: 0, - limit: 5, - data: [ - { - options: 'organize', - next: 'q-customer', - }, - { - options: 'batch', - next: 'q-customer', - }, - { - options: 'edit', - next: 'q-customer', - }, - { - options: 'color', - next: 'q-customer', - }, - { - options: 'blend', - next: 'q-customer', - }, - ], - }, - 'q-design': { - total: 3, - offset: 0, - limit: 3, - data: [ - { - options: 'layouts', - next: 'q-customer', - }, - { - options: 'images', - next: 'q-customer', - }, - { - options: 'graphics', - next: 'q-customer', - }, - ], - }, - 'q-illustration': { - total: 4, - offset: 0, - limit: 4, - data: [ - { - options: 'raster', - next: 'q-customer', - }, - { - options: 'vector', - next: 'q-customer', - }, - { - options: 'crisp', - next: 'q-customer', - }, - { - options: 'images', - next: 'q-customer', - }, - ], - }, - ':version': 3, - ':names': [ - 'q-rather', - 'questions', - 'q-3d', - 'q-pdf', - 'q-category', - 'q-customer', - 'q-video', - 'q-photo', - 'q-design', - 'q-illustration', - ], - ':type': 'multi-sheet', - }, - results: { - result: { - total: 45, - offset: 0, - limit: 45, - data: [ - { - 'q#1': 'acrobat_dc_pro', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'pdf_ste', - 'result-secondary': 'ps_ste,pr_ste,ai_ste', - }, - { - 'q#1': 'acrobat_dc_pro', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'pdf_smb', - 'result-secondary': 'ps_smb,pr_smb,ai_smb', - }, - { - 'q#1': 'acrobat_dc_pro', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'pdf_indiv', - 'result-secondary': 'ps_indiv,pr_indiv,ai_indiv', - }, - { - 'q#1': 'aftereffects_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'ae_ste', - 'result-secondary': 'ps_ste,ai_ste,pr_ste', - }, - { - 'q#1': 'aftereffects_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'ae_smb', - 'result-secondary': 'ps_smb,ai_smb,pr_smb', - }, - { - 'q#1': 'aftereffects_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'ae_indiv', - 'result-secondary': 'ps_indiv,ai_indiv,pr_indiv', - }, - { - 'q#1': 'audition_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'au_ste', - 'result-secondary': 'ps_ste,ai_ste,pr_ste', - }, - { - 'q#1': 'audition_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'au_smb', - 'result-secondary': 'ps_smb,ai_smb,pr_smb', - }, - { - 'q#1': 'audition_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'au_indiv', - 'result-secondary': 'ps_indiv,ai_indiv,pr_indiv', - }, - { - 'q#1': 'flash_professional_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'an_ste', - 'result-secondary': 'ps_ste,ai_ste,pr_ste', - }, - { - 'q#1': 'flash_professional_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'an_smb', - 'result-secondary': 'ps_smb,ai_smb,pr_smb', - }, - { - 'q#1': 'flash_professional_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'an_indiv', - 'result-secondary': 'ps_indiv,ai_indiv,pr_indiv', - }, - { - 'q#1': 'illustrator_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'ai_ste', - 'result-secondary': 'ps_ste,id_ste,pr_ste', - }, - { - 'q#1': 'illustrator_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'ai_smb', - 'result-secondary': 'ps_smb,id_smb,pr_smb', - }, - { - 'q#1': 'illustrator_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'ai_indiv', - 'result-secondary': 'ps_indiv,id_indiv,pr_indiv', - }, - { - 'q#1': 'indesign_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'id_ste', - 'result-secondary': 'ps_ste,ai_ste,pr_ste', - }, - { - 'q#1': 'indesign_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'id_smb', - 'result-secondary': 'ps_smb,ai_smb,pr_smb', - }, - { - 'q#1': 'indesign_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'id_indiv', - 'result-secondary': 'ps_indiv,ai_indiv,pr_indiv', - }, - { - 'q#1': 'lightroom_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'lr_ste', - 'result-secondary': 'lr_ste,ps_ste', - }, - { - 'q#1': 'lightroom_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'lr_smb', - 'result-secondary': 'lr_smb,ps_smb', - }, - { - 'q#1': 'lightroom_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'lr_indiv', - 'result-secondary': 'lr_indiv,ps_indiv', - }, - { - 'q#1': 'photoshop_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'ps_ste', - 'result-secondary': 'ai_ste,id_ste,pr_ste', - }, - { - 'q#1': 'photoshop_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'ps_smb', - 'result-secondary': 'ai_smb,id_smb,pr_smb', - }, - { - 'q#1': 'photoshop_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'ps_indiv', - 'result-secondary': 'ai_indiv,id_indiv,pr_indiv', - }, - { - 'q#1': 'premierepro_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'pr_ste', - 'result-secondary': 'ps_ste,au_ste', - }, - { - 'q#1': 'premierepro_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'pr_smb', - 'result-secondary': 'ps_smb,au_smb,ae_smb', - }, - { - 'q#1': 'premierepro_cc', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'pr_indiv', - 'result-secondary': 'ps_indiv,au_indiv', - }, - { - 'q#1': 'sbst_stager', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'st_ste', - 'result-secondary': 'ps_ste,ai_ste,ae_ste', - }, - { - 'q#1': 'sbst_stager', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'st_smb', - 'result-secondary': 'ps_smb,ai_smb,ae_smb', - }, - { - 'q#1': 'sbst_stager', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'st_indiv', - 'result-secondary': 'ps_indiv,ai_indiv,ae_indiv', - }, - { - 'q#1': 'sbst_painter', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'pt_ste', - 'result-secondary': 'ps_ste,ai_ste,ae_ste', - }, - { - 'q#1': 'sbst_painter', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'pt_smb', - 'result-secondary': 'ps_smb,ai_smb,ae_smb', - }, - { - 'q#1': 'sbst_painter', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'pt_indiv', - 'result-secondary': 'ps_indiv,ai_indiv,ae_indiv', - }, - { - 'q#1': 'sbst_alchemist', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'sa_ste', - 'result-secondary': 'ps_ste,ai_ste,ae_ste', - }, - { - 'q#1': 'sbst_alchemist', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'sa_smb', - 'result-secondary': 'ps_smb,ai_smb,ae_smb', - }, - { - 'q#1': 'sbst_alchemist', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'sa_indiv', - 'result-secondary': 'ps_indiv,ai_indiv,ae_indiv', - }, - { - 'q#1': 'sbst_shaper', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'md_ste', - 'result-secondary': 'ps_ste,ai_ste,ae_ste', - }, - { - 'q#1': 'sbst_shaper', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'md_smb', - 'result-secondary': 'ps_smb,ai_smb,ae_smb', - }, - { - 'q#1': 'sbst_shaper', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'md_indiv', - 'result-secondary': 'ps_indiv,ai_indiv,ae_indiv', - }, - { - 'q#1': 'sbst_designer', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'ds_ste', - 'result-secondary': 'ps_ste,ai_ste,ae_ste', - }, - { - 'q#1': 'sbst_designer', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'ds_smb', - 'result-secondary': 'ps_smb,ai_smb,ae_smb', - }, - { - 'q#1': 'sbst_designer', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'ds_indiv', - 'result-secondary': 'ps_indiv,ai_indiv,ae_indiv', - }, - { - 'q#1': 'free_spark', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'ste', - 'result-primary': 'fi-ax_ste', - 'result-secondary': 'cc_allapps_2_ste,ps_ste,pr_ste', - }, - { - 'q#1': 'free_spark', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'smb', - 'result-primary': 'fi-ax_smb', - 'result-secondary': 'cc_allapps_2_smb,ps_smb,pr_smb', - }, - { - 'q#1': 'free_spark', - 'q#2': '', - 'q#3-photo': '', - 'q#3-video': '', - 'q#3-design': '', - 'q#3-illustr': '', - 'q#3-pdf': '', - 'q#3-3d': '', - 'q#4': 'indiv', - 'result-primary': 'fi-ax_indiv', - 'result-secondary': 'ps_indiv,pr_indiv,ai_indiv', - }, - ], - }, - 'result-fragments': { - total: 6, - offset: 0, - limit: 6, - data: [ - { - product: 'open-text-ax_indiv', - marquee: '/fragments/uar/marquee/ccx', - 'marquee-plan': '/fragments/uar/marquee/marquee-plan/ccx', - 'check-bullet': - '/fragments/uar/marquee/marquee-bullets/check-bullet/ax-uc1', - 'icon-bullet': 'N/A', - 'card-list': '/fragments/uar/cross-sell/card-list', - 'commerce-card': '', - 'plan-card': 'N/A', - learn: '/fragments/uar/learn/learn-express', - 'ff-banner': '/fragments/uar/banners/firefly', - 'value-prop': 'N/A', - 'social-blade': '/fragments/uar/express-social/individual', - 'legal-copy': 'N/A', - }, - { - product: 'open-text-ax_ste', - marquee: '/fragments/uar/marquee/ccx', - 'marquee-plan': '/fragments/uar/marquee/marquee-plan/ccx-ste', - 'check-bullet': - '/fragments/uar/marquee/marquee-bullets/check-bullet/ax-ste1', - 'icon-bullet': 'N/A', - 'card-list': '/fragments/uar/cross-sell/card-list', - 'commerce-card': '', - 'plan-card': 'N/A', - learn: '/fragments/uar/learn/learn-express', - 'ff-banner': '/fragments/uar/banners/firefly-ste', - 'value-prop': 'N/A', - 'social-blade': '/fragments/uar/express-social/students', - 'legal-copy': 'N/A', - }, - { - product: 'open-text-ax_smb', - marquee: '/fragments/uar/marquee/ccx', - 'marquee-plan': '/fragments/uar/marquee/marquee-plan/ccx-cct', - 'check-bullet': - '/fragments/uar/marquee/marquee-bullets/check-bullet/ax-cct1', - 'icon-bullet': 'N/A', - 'card-list': '/fragments/uar/cross-sell/card-list', - 'commerce-card': '', - 'plan-card': 'N/A', - learn: '/fragments/uar/learn/learn-express', - 'ff-banner': '/fragments/uar/banners/firefly-cct', - 'value-prop': 'N/A', - 'social-blade': '/fragments/uar/express-social/teams', - 'legal-copy': 'N/A', - }, - { - product: 'fi-ax_indiv', - marquee: '/fragments/uar/marquee/ccx', - 'marquee-plan': '/fragments/uar/marquee/marquee-plan/ccx', - 'check-bullet': - '/fragments/uar/marquee/marquee-bullets/check-bullet/ax-uc1', - 'icon-bullet': 'N/A', - 'card-list': '/fragments/uar/cross-sell/card-list', - 'commerce-card': '/fragments/uar/cross-sell/commerce-cards/cci', - 'plan-card': 'N/A', - learn: '/fragments/uar/learn/learn-express', - 'ff-banner': '/fragments/uar/banners/firefly', - 'value-prop': 'N/A', - 'social-blade': '/fragments/uar/express-social/individual', - 'legal-copy': 'N/A', - }, - { - product: 'fi-ax_ste', - marquee: '/fragments/uar/marquee/ccx', - 'marquee-plan': '/fragments/uar/marquee/marquee-plan/ccx-ste', - 'check-bullet': - '/fragments/uar/marquee/marquee-bullets/check-bullet/ax-ste1', - 'icon-bullet': 'N/A', - 'card-list': '/fragments/uar/cross-sell/card-list', - 'commerce-card': '/fragments/uar/cross-sell/commerce-cards/cci-ste', - 'plan-card': 'N/A', - learn: '/fragments/uar/learn/learn-express', - 'ff-banner': '/fragments/uar/banners/firefly-ste', - 'value-prop': 'N/A', - 'social-blade': '/fragments/uar/express-social/students', - 'legal-copy': 'N/A', - }, - { - product: 'fi-ax_smb', - marquee: '/fragments/uar/marquee/ccx', - 'marquee-plan': '/fragments/uar/marquee/marquee-plan/ccx-cct', - 'check-bullet': - '/fragments/uar/marquee/marquee-bullets/check-bullet/ax-cct1', - 'icon-bullet': 'N/A', - 'card-list': '/fragments/uar/cross-sell/card-list', - 'commerce-card': '/fragments/uar/cross-sell/commerce-cards/cci-cct', - 'plan-card': 'N/A', - learn: '/fragments/uar/learn/learn-express', - 'ff-banner': '/fragments/uar/banners/firefly-cct', - 'value-prop': 'N/A', - 'social-blade': '/fragments/uar/express-social/teams', - 'legal-copy': 'N/A', - }, - ], - }, - 'result-destination': { - total: 9, - offset: 0, - limit: 9, - data: [ - { - result: '(fi-ax_indiv)', - 'umbrella-result': '', - url: '/drafts/quiz/plan-recommender-var/quiz-results', - 'basic-fragments': 'marquee,card-list,social-blade,ff-banner,learn', - 'nested-fragments-primary': 'check-bullet,marquee-plan', - 'nested-fragments-secondary': 'commerce-card', - }, - { - result: '(fi-ax_ste)', - 'umbrella-result': '', - url: '/drafts/quiz/plan-recommender-var/quiz-results', - 'basic-fragments': 'marquee,card-list,social-blade,learn', - 'nested-fragments-primary': 'check-bullet,marquee-plan', - 'nested-fragments-secondary': 'commerce-card', - }, - { - result: '(fi-ax_smb)', - 'umbrella-result': '', - url: '/drafts/quiz/plan-recommender-var/quiz-results', - 'basic-fragments': 'marquee,card-list,social-blade,ff-banner,learn', - 'nested-fragments-primary': 'check-bullet,marquee-plan', - 'nested-fragments-secondary': 'commerce-card', - }, - { - result: - '(fi-ax_indiv,pr_indiv,ae_indiv,an_indiv,au_indiv,id_indiv,ai_indiv,ps_indiv,pdf_indiv,lr_indiv,st_indiv,pt_indiv,sa_indiv,md_indiv,ds_indiv)&(fi-ax_indiv,pr_indiv,ae_indiv,an_indiv,au_indiv,id_indiv,ai_indiv,ps_indiv,pdf_indiv,lr_indiv,st_indiv,pt_indiv,sa_indiv,md_indiv,ds_indiv)', - 'umbrella-result': 'open-text-ax_indiv', - url: '/drafts/quiz/plan-recommender-var/quiz-results', - 'basic-fragments': 'marquee,card-list,social-blade,ff-banner,learn', - 'nested-fragments-primary': 'check-bullet,marquee-plan', - 'nested-fragments-secondary': 'commerce-card', - }, - { - result: - '(fi-ax_ste,pr_ste,ae_ste,an_ste,au_ste,id_ste,ai_ste,ps_ste,pdf_ste,lr_ste,st_ste,pt_ste,sa_ste,md_ste,ds_ste)&(fi-ax_ste,pr_ste,ae_ste,an_ste,au_ste,id_ste,ai_ste,ps_ste,pdf_ste,lr_ste,st_ste,pt_ste,sa_ste,md_ste,ds_ste)', - 'umbrella-result': 'open-text-ax_ste', - url: '/drafts/quiz/plan-recommender-var/quiz-results', - 'basic-fragments': 'marquee,card-list,social-blade,learn', - 'nested-fragments-primary': 'check-bullet,marquee-plan', - 'nested-fragments-secondary': 'commerce-card', - }, - { - result: - '(fi-ax_smb,pr_smb,ae_smb,an_smb,au_smb,id_smb,ai_smb,ps_smb,pdf_smb,lr_smb,st_smb,pt_smb,sa_smb,md_smb,ds_smb,smb,smb)&(fi-ax_smb,pr_smb,ae_smb,an_smb,au_smb,id_smb,ai_smb,ps_smb,pdf_smb,lr_smb,st_smb,pt_smb,sa_smb,md_smb,ds_smb,smb,smb)', - 'umbrella-result': 'open-text-ax_smb', - url: '/drafts/quiz/plan-recommender-var/quiz-results', - 'basic-fragments': 'marquee,card-list,social-blade,ff-banner,learn', - 'nested-fragments-primary': 'check-bullet,marquee-plan', - 'nested-fragments-secondary': 'commerce-card', - }, - { - result: - '(fi-ax_indiv,pr_indiv,ae_indiv,an_indiv,au_indiv,id_indiv,ai_indiv,ps_indiv,pdf_indiv,lr_indiv,st_indiv,pt_indiv,sa_indiv,md_indiv,ds_indiv)&(fi-ax_indiv,pr_indiv,ae_indiv,an_indiv,au_indiv,id_indiv,ai_indiv,ps_indiv,pdf_indiv,lr_indiv,st_indiv,pt_indiv,sa_indiv,md_indiv,ds_indiv)&(fi-ax_indiv,pr_indiv,ae_indiv,an_indiv,au_indiv,id_indiv,ai_indiv,ps_indiv,pdf_indiv,lr_indiv,st_indiv,pt_indiv,sa_indiv,md_indiv,ds_indiv)', - 'umbrella-result': 'open-text-ax_indiv', - url: '/drafts/quiz/plan-recommender-var/quiz-results', - 'basic-fragments': 'marquee,card-list,social-blade,ff-banner,learn', - 'nested-fragments-primary': 'check-bullet,marquee-plan', - 'nested-fragments-secondary': 'commerce-card', - }, - { - result: - '(fi-ax_ste,pr_ste,ae_ste,an_ste,au_ste,id_ste,ai_ste,ps_ste,pdf_ste,lr_ste,st_ste,pt_ste,sa_ste,md_ste,ds_ste)&(fi-ax_ste,pr_ste,ae_ste,an_ste,au_ste,id_ste,ai_ste,ps_ste,pdf_ste,lr_ste,st_ste,pt_ste,sa_ste,md_ste,ds_ste)&(fi-ax_ste,pr_ste,ae_ste,an_ste,au_ste,id_ste,ai_ste,ps_ste,pdf_ste,lr_ste,st_ste,pt_ste,sa_ste,md_ste,ds_ste)', - 'umbrella-result': 'open-text-ax_ste', - url: '/drafts/quiz/plan-recommender-var/quiz-results', - 'basic-fragments': 'marquee,card-list,social-blade,learn', - 'nested-fragments-primary': 'check-bullet,marquee-plan', - 'nested-fragments-secondary': 'commerce-card', - }, - { - result: - '(fi-ax_smb,pr_smb,ae_smb,an_smb,au_smb,id_smb,ai_smb,ps_smb,pdf_smb,lr_smb,st_smb,pt_smb,sa_smb,md_smb,ds_smb,smb,smb)&(fi-ax_smb,pr_smb,ae_smb,an_smb,au_smb,id_smb,ai_smb,ps_smb,pdf_smb,lr_smb,st_smb,pt_smb,sa_smb,md_smb,ds_smb,smb,smb)&(fi-ax_smb,pr_smb,ae_smb,an_smb,au_smb,id_smb,ai_smb,ps_smb,pdf_smb,lr_smb,st_smb,pt_smb,sa_smb,md_smb,ds_smb,smb,smb)', - 'umbrella-result': 'open-text-ax_smb', - url: '/drafts/quiz/plan-recommender-var/quiz-results', - 'basic-fragments': 'marquee,card-list,social-blade,ff-banner,learn', - 'nested-fragments-primary': 'check-bullet,marquee-plan', - 'nested-fragments-secondary': 'commerce-card', - }, - ], - }, - ':version': 3, - ':names': ['result', 'result-fragments', 'result-destination'], - ':type': 'multi-sheet', - }, -}; - -export default resultsMock; diff --git a/test/blocks/quiz-entry/mocks/mock-states.js b/test/blocks/quiz-entry/mocks/mock-states.js deleted file mode 100644 index 78c45141784..00000000000 --- a/test/blocks/quiz-entry/mocks/mock-states.js +++ /dev/null @@ -1,139 +0,0 @@ -export const userSelection = [ - { - selectedQuestion: { - questions: 'q-category', - 'max-selections': '3', - 'min-selections': '1', - }, - selectedCards: { - photo: true, - video: true, - }, - }, - { - selectedQuestion: { - questions: 'q-rather', - 'max-selections': '1', - 'min-selections': '1', - }, - selectedCards: { custom: true }, - }, - { - selectedQuestion: { - questions: 'q-photo', - 'max-selections': '1', - 'min-selections': '1', - }, - selectedCards: { organize: true }, - }, - { - selectedQuestion: { - questions: 'q-video', - 'max-selections': '1', - 'min-selections': '1', - }, - selectedCards: { social: true }, - }, - { - selectedQuestion: { - questions: 'q-customer', - 'max-selections': '1', - 'min-selections': '1', - }, - selectedCards: { individual: true }, - }, -]; - -export const answers = [ - ['q-category', ['photo', 'video']], - ['q-rather', ['custom']], - ['q-photo', ['organize']], - ['q-video', ['social']], - ['q-customer', ['individual']], -]; - -export const resultRules = [ - { - result: '(ai,ai-edu,ai-bus,ai-ind,au-edu,au-bus,au-ind,an-edu,an-bus,an-ind,ae-edu,ae-bus,ae-ind,lr-edu,lr-bus,lr-ind,id,pr-edu,pr-bus,pr-ind,ps-bus,ps-edu,ps-ind,ac,pdf)&(ai,ai-edu,ai-bus,ai-ind,au-edu,au-bus,au-ind,an-edu,an-bus,an-ind,ae-edu,ae-bus,ae-ind,lr-edu,lr-bus,lr-ind,id,pr-edu,pr-bus,pr-ind,ps-bus,ps-edu,ps-ind,ac,pdf)', - 'umbrella-result': 'cc', - url: '/path/to/result', - 'basic-fragments': 'marquee, card-list', - 'nested-fragments-primary': '', - 'nested-fragments-secondary': 'marquee-product, commerce-card', - }, - { - result: '(ai,ai-edu,ai-bus,ai-ind,au-edu,au-bus,au-ind,an-edu,an-bus,an-ind,ae-edu,ae-bus,ae-ind,lr-edu,lr-bus,lr-ind,id,pr-edu,pr-bus,pr-ind,ps-bus,ps-edu,ps-ind,ac,pdf)', - 'umbrella-result': '', - url: '/path/to/result', - 'basic-fragments': 'marquee, card-list', - 'nested-fragments-primary': 'check-bullet,marquee-plan', - 'nested-fragments-secondary': 'commerce-card', - }, - { - result: '(3d,ai,ai-edu,ai-bus,ai-ind,au-edu,au-bus,au-ind,an-edu,an-bus,an-ind,ae-edu,ae-bus,ae-ind,lr-edu,lr-bus,lr-ind,id,pr-edu,pr-bus,pr-ind,ps-bus,ps-edu,ps-ind,ac,pdf)&(3d,ai,ai-edu,ai-bus,ai-ind,au-edu,au-bus,au-ind,an-edu,an-bus,an-ind,ae-edu,ae-bus,ae-ind,lr-edu,lr-bus,lr-ind,id,pr-edu,pr-bus,pr-ind,ps-bus,ps-edu,ps-ind,ac,pdf)', - 'umbrella-result': '3d-umbrella', - url: '/path/to/result', - 'basic-fragments': 'marquee, card-list', - 'nested-fragments-primary': '', - 'nested-fragments-secondary': '', - }, - { - result: 'default', - 'umbrella-result': '', - url: '/path/to/result', - 'basic-fragments': 'marquee, card-list', - 'nested-fragments-primary': '', - 'nested-fragments-secondary': 'commerce-card', - }, - { - result: 'express', - 'umbrella-result': '', - url: '/path/to/result', - 'basic-fragments': 'marquee, card-list', - 'nested-fragments-primary': '', - 'nested-fragments-secondary': 'commerce-card', - }, -]; - -export const resultData = { - primary: [ - 'lr-ind', - 'pr-ind', - ], - secondary: [ - 'ps-ind', - 'au-ind', - ], - matchedResults: [ - { - result: '(ai,ai-edu,ai-bus,ai-ind,au-edu,au-bus,au-ind,an-edu,an-bus,an-ind,ae-edu,ae-bus,ae-ind,lr-edu,lr-bus,lr-ind,id,pr-edu,pr-bus,pr-ind,ps-bus,ps-edu,ps-ind,ac,pdf)&(ai,ai-edu,ai-bus,ai-ind,au-edu,au-bus,au-ind,an-edu,an-bus,an-ind,ae-edu,ae-bus,ae-ind,lr-edu,lr-bus,lr-ind,id,pr-edu,pr-bus,pr-ind,ps-bus,ps-edu,ps-ind,ac,pdf)', - 'umbrella-result': 'cc', - url: '/path/to/result', - 'basic-fragments': 'marquee, card-list', - 'nested-fragments': 'marquee-product, commerce-card', - }, - ], -}; - -export const storedData = { - userFlow: [ - 'q-rather', - 'q-photo', - 'q-video', - 'q-design', - ], - userSelection: [ - { - selectedQuestion: { - questions: 'q-category', - 'max-selections': '3', - 'min-selections': '1', - }, - selectedCards: { - photo: true, - video: true, - design: true, - }, - }, - ], -}; diff --git a/test/blocks/quiz-entry/mocks/questions.json b/test/blocks/quiz-entry/mocks/questions.json deleted file mode 100644 index cecdffbb257..00000000000 --- a/test/blocks/quiz-entry/mocks/questions.json +++ /dev/null @@ -1,529 +0,0 @@ -{ - "q-rather": { - "total": 2, - "offset": 0, - "limit": 2, - "data": [ - { - "options": "template", - "next": "RESET,q-customer", - "data-analytics-title": "ccx" - }, - { - "options": "custom", - "next": "RESULT", - "data-analytics-title": "Flagship" - } - ] - }, - "questions": { - "total": 9, - "offset": 0, - "limit": 9, - "data": [ - { - "questions": "q-category", - "max-selections": "3", - "min-selections": "1" - }, - { - "questions": "q-rather", - "max-selections": "1", - "min-selections": "1" - }, - { - "questions": "q-video", - "max-selections": "1", - "min-selections": "1" - }, - { - "questions": "q-photo", - "max-selections": "1", - "min-selections": "1" - }, - { - "questions": "q-customer", - "max-selections": "1", - "min-selections": "1" - }, - { - "questions": "q-3d", - "max-selections": "1", - "min-selections": "1" - }, - { - "questions": "q-pdf", - "max-selections": "1", - "min-selections": "1" - }, - { - "questions": "q-design", - "max-selections": "1", - "min-selections": "1" - }, - { - "questions": "q-illustration", - "max-selections": "1", - "min-selections": "1" - } - ] - }, - "q-3d": { - "total": 5, - "offset": 0, - "limit": 5, - "data": [ - { - "options": "stage", - "next": "q-customer" - }, - { - "options": "texture", - "next": "q-customer" - }, - { - "options": "materials", - "next": "q-customer" - }, - { - "options": "model", - "next": "q-customer" - }, - { - "options": "assets", - "next": "q-customer" - } - ] - }, - "q-pdf": { - "total": 6, - "offset": 0, - "limit": 6, - "data": [ - { - "options": "create", - "next": "q-customer" - }, - { - "options": "edit", - "next": "q-customer" - }, - { - "options": "share", - "next": "q-customer" - }, - { - "options": "secure", - "next": "q-customer" - }, - { - "options": "sign", - "next": "q-customer" - }, - { - "options": "track", - "next": "q-customer" - } - ] - }, - "q-category": { - "total": 22, - "offset": 0, - "limit": 22, - "data": [ - { - "options": "fi_code", - "next": "", - "type": "form", - "endpoint": "acom-prd-recom-v01", - "api-key": "CCHomeMLRepo1", - "threshold": "0.7", - "fallback": "photoshop_cc,illustrator_cc,premierepro_cc", - "ac-endpoint": "autocomplete", - "ac-scope": "adobe_com", - "ac-client-id": "adobedotcom2" - }, - { - "options": "photo", - "next": "q-rather,q-photo", - "type": "card", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "video", - "next": "q-rather,q-video", - "type": "card", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "design", - "next": "q-rather,q-design", - "type": "card", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "illustration", - "next": "q-rather,q-illustration", - "type": "card", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "3d", - "next": "NOT(q-rather),q-3d", - "type": "card", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "pdf", - "next": "q-rather,q-pdf", - "type": "card", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "acrobat_dc_pro", - "next": "q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "aftereffects_cc", - "next": "q-rather,q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "audition_cc", - "next": "q-rather,q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "flash_professional_cc", - "next": "q-rather,q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "illustrator_cc", - "next": "q-rather,q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "indesign_cc", - "next": "q-rather,q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "lightroom_cc", - "next": "q-rather,q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "photoshop_cc", - "next": "q-rather,q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "premierepro_cc", - "next": "q-rather,q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "sbst_stager", - "next": "q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "sbst_painter", - "next": "q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "sbst_alchemist", - "next": "q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "sbst_shaper", - "next": "q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "sbst_designer", - "next": "q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - }, - { - "options": "free_spark", - "next": "q-customer", - "type": "api_return_code", - "endpoint": "", - "api-key": "", - "threshold": "", - "fallback": "", - "ac-endpoint": "", - "ac-scope": "", - "ac-client-id": "" - } - ] - }, - "q-customer": { - "total": 3, - "offset": 0, - "limit": 3, - "data": [ - { - "options": "educational", - "next": "RESULT" - }, - { - "options": "business", - "next": "RESULT" - }, - { - "options": "individual", - "next": "RESULT" - } - ] - }, - "q-video": { - "total": 5, - "offset": 0, - "limit": 5, - "data": [ - { - "options": "social", - "next": "q-customer" - }, - { - "options": "pro", - "next": "q-customer" - }, - { - "options": "movement", - "next": "q-customer" - }, - { - "options": "animate", - "next": "q-customer" - }, - { - "options": "sound", - "next": "q-customer" - } - ] - }, - "q-photo": { - "total": 5, - "offset": 0, - "limit": 5, - "data": [ - { - "options": "organize", - "next": "q-customer" - }, - { - "options": "batch", - "next": "q-customer" - }, - { - "options": "edit", - "next": "q-customer" - }, - { - "options": "color", - "next": "q-customer" - }, - { - "options": "blend", - "next": "q-customer" - } - ] - }, - "q-design": { - "total": 3, - "offset": 0, - "limit": 3, - "data": [ - { - "options": "layouts", - "next": "q-customer" - }, - { - "options": "images", - "next": "q-customer" - }, - { - "options": "graphics", - "next": "q-customer" - } - ] - }, - "q-illustration": { - "total": 4, - "offset": 0, - "limit": 4, - "data": [ - { - "options": "raster", - "next": "q-customer" - }, - { - "options": "vector", - "next": "q-customer" - }, - { - "options": "crisp", - "next": "q-customer" - }, - { - "options": "images", - "next": "q-customer" - } - ] - }, - ":version": 3, - ":names": [ - "q-rather", - "questions", - "q-3d", - "q-pdf", - "q-category", - "q-customer", - "q-video", - "q-photo", - "q-design", - "q-illustration" - ], - ":type": "multi-sheet" -} diff --git a/test/blocks/quiz-entry/mocks/quiz.html b/test/blocks/quiz-entry/mocks/quiz.html deleted file mode 100644 index 3c0aead1adc..00000000000 --- a/test/blocks/quiz-entry/mocks/quiz.html +++ /dev/null @@ -1,24 +0,0 @@ -
      -
      -
      -
      data
      -
      /drafts/colloyd/quiz-entry/
      -
      -
      -
      quiz
      -
      /drafts/colloyd/quiz/
      -
      -
      -
      max-questions
      -
      1
      -
      -
      -
      analytics-type
      -
      cc:app-reco
      -
      -
      -
      analytics-quiz
      -
      UARv4
      -
      -
      -
      diff --git a/test/blocks/quiz-entry/mocks/result-resources.json b/test/blocks/quiz-entry/mocks/result-resources.json deleted file mode 100644 index cc6929189c3..00000000000 --- a/test/blocks/quiz-entry/mocks/result-resources.json +++ /dev/null @@ -1,207 +0,0 @@ -{ - "total": 25, - "offset": 0, - "limit": 25, - "data": [ - { - "product": "ps-edu", - "marquee": "/path/to/marquee", - "card-list": "/path/to/cardlist", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "ps-bus", - "marquee": "/path/to/marquee", - "card-list": "", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "ps-ind", - "marquee": "/path/to/marquee", - "card-list": "/path/to/cardlist", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "lr-edu", - "marquee": "/path/to/marquee", - "card-list": "/path/to/cardlist", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "lr-bus", - "marquee": "/path/to/marquee", - "card-list": "", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "lr-ind", - "marquee": "/path/to/marquee", - "card-list": "/path/to/cardlist", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "pr-edu", - "marquee": "/path/to/marquee", - "card-list": "/path/to/cardlist", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "pr-bus", - "marquee": "/path/to/marquee", - "card-list": "/path/to/cardlist", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "pr-ind", - "marquee": "/path/to/marquee", - "card-list": "/path/to/cardlist", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "ae", - "marquee": "/path/to/marquee", - "card-list": "/path/to/cardlist", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "an", - "marquee": "/path/to/marquee", - "card-list": "/path/to/cardlist", - "commerce-card": "/fragments/card/animate", - "marquee-product": "", - "page": "" - }, - { - "product": "au", - "marquee": "/path/to/marquee", - "card-list": "/path/to/cardlist", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "id", - "marquee": "/path/to/marquee", - "card-list": "/path/to/cardlist", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "ai", - "marquee": "/path/to/marquee", - "card-list": "/path/to/cardlist", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "acrobat-pro", - "marquee": "/fragments/marquee/acrobat", - "card-list": "", - "commerce-card": "/fragments/card/acrobat", - "marquee-product": "", - "page": "" - }, - { - "product": "substance-3d-collection", - "marquee": "/fragments/marquee/subtance-3d", - "card-list": "", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "substance-3d-stager", - "marquee": "/fragments/marquee/subtance-3d-stager", - "card-list": "", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "substance-3d-painter", - "marquee": "/fragments/marquee/subtance-3d-painter", - "card-list": "", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "substance-3d-sampler", - "marquee": "/fragments/marquee/subtance-3d-sampler", - "card-list": "", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "substance-3d-modeler", - "marquee": "/fragments/marquee/subtance-3d-modeler", - "card-list": "", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "substance-3d-designer", - "marquee": "/fragments/marquee/subtance-3d-designer", - "card-list": "", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "express", - "marquee": "/path/to/marquee", - "card-list": "", - "commerce-card": "path-to-commerce-card", - "marquee-product": "", - "page": "" - }, - { - "product": "cc", - "marquee": "/path/to/marquee", - "card-list": "/path/to/cardlist", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "ac", - "marquee": "", - "card-list": "", - "commerce-card": "", - "marquee-product": "", - "page": "" - }, - { - "product": "3d-umbrella", - "marquee": "", - "card-list": "", - "commerce-card": "", - "marquee-product": "", - "page": "" - } - ] -} diff --git a/test/blocks/quiz-entry/mocks/results.json b/test/blocks/quiz-entry/mocks/results.json deleted file mode 100644 index 6028b524c70..00000000000 --- a/test/blocks/quiz-entry/mocks/results.json +++ /dev/null @@ -1,777 +0,0 @@ -{ - "result": { - "total": 45, - "offset": 0, - "limit": 45, - "data": [ - { - "q#1": "acrobat_dc_pro", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "pdf_ste", - "result-secondary": "ps_ste,pr_ste,ai_ste" - }, - { - "q#1": "acrobat_dc_pro", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "pdf_smb", - "result-secondary": "ps_smb,pr_smb,ai_smb" - }, - { - "q#1": "acrobat_dc_pro", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "pdf_indiv", - "result-secondary": "ps_indiv,pr_indiv,ai_indiv" - }, - { - "q#1": "aftereffects_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "ae_ste", - "result-secondary": "ps_ste,ai_ste,pr_ste" - }, - { - "q#1": "aftereffects_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "ae_smb", - "result-secondary": "ps_smb,ai_smb,pr_smb" - }, - { - "q#1": "aftereffects_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "ae_indiv", - "result-secondary": "ps_indiv,ai_indiv,pr_indiv" - }, - { - "q#1": "audition_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "au_ste", - "result-secondary": "ps_ste,ai_ste,pr_ste" - }, - { - "q#1": "audition_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "au_smb", - "result-secondary": "ps_smb,ai_smb,pr_smb" - }, - { - "q#1": "audition_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "au_indiv", - "result-secondary": "ps_indiv,ai_indiv,pr_indiv" - }, - { - "q#1": "flash_professional_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "an_ste", - "result-secondary": "ps_ste,ai_ste,pr_ste" - }, - { - "q#1": "flash_professional_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "an_smb", - "result-secondary": "ps_smb,ai_smb,pr_smb" - }, - { - "q#1": "flash_professional_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "an_indiv", - "result-secondary": "ps_indiv,ai_indiv,pr_indiv" - }, - { - "q#1": "illustrator_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "ai_ste", - "result-secondary": "ps_ste,id_ste,pr_ste" - }, - { - "q#1": "illustrator_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "ai_smb", - "result-secondary": "ps_smb,id_smb,pr_smb" - }, - { - "q#1": "illustrator_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "ai_indiv", - "result-secondary": "ps_indiv,id_indiv,pr_indiv" - }, - { - "q#1": "indesign_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "id_ste", - "result-secondary": "ps_ste,ai_ste,pr_ste" - }, - { - "q#1": "indesign_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "id_smb", - "result-secondary": "ps_smb,ai_smb,pr_smb" - }, - { - "q#1": "indesign_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "id_indiv", - "result-secondary": "ps_indiv,ai_indiv,pr_indiv" - }, - { - "q#1": "lightroom_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "lr_ste", - "result-secondary": "lr_ste,ps_ste" - }, - { - "q#1": "lightroom_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "lr_smb", - "result-secondary": "lr_smb,ps_smb" - }, - { - "q#1": "lightroom_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "lr_indiv", - "result-secondary": "lr_indiv,ps_indiv" - }, - { - "q#1": "photoshop_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "ps_ste", - "result-secondary": "ai_ste,id_ste,pr_ste" - }, - { - "q#1": "photoshop_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "ps_smb", - "result-secondary": "ai_smb,id_smb,pr_smb" - }, - { - "q#1": "photoshop_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "ps_indiv", - "result-secondary": "ai_indiv,id_indiv,pr_indiv" - }, - { - "q#1": "premierepro_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "pr_ste", - "result-secondary": "ps_ste,au_ste" - }, - { - "q#1": "premierepro_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "pr_smb", - "result-secondary": "ps_smb,au_smb,ae_smb" - }, - { - "q#1": "premierepro_cc", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "pr_indiv", - "result-secondary": "ps_indiv,au_indiv" - }, - { - "q#1": "sbst_stager", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "st_ste", - "result-secondary": "ps_ste,ai_ste,ae_ste" - }, - { - "q#1": "sbst_stager", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "st_smb", - "result-secondary": "ps_smb,ai_smb,ae_smb" - }, - { - "q#1": "sbst_stager", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "st_indiv", - "result-secondary": "ps_indiv,ai_indiv,ae_indiv" - }, - { - "q#1": "sbst_painter", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "pt_ste", - "result-secondary": "ps_ste,ai_ste,ae_ste" - }, - { - "q#1": "sbst_painter", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "pt_smb", - "result-secondary": "ps_smb,ai_smb,ae_smb" - }, - { - "q#1": "sbst_painter", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "pt_indiv", - "result-secondary": "ps_indiv,ai_indiv,ae_indiv" - }, - { - "q#1": "sbst_alchemist", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "sa_ste", - "result-secondary": "ps_ste,ai_ste,ae_ste" - }, - { - "q#1": "sbst_alchemist", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "sa_smb", - "result-secondary": "ps_smb,ai_smb,ae_smb" - }, - { - "q#1": "sbst_alchemist", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "sa_indiv", - "result-secondary": "ps_indiv,ai_indiv,ae_indiv" - }, - { - "q#1": "sbst_shaper", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "md_ste", - "result-secondary": "ps_ste,ai_ste,ae_ste" - }, - { - "q#1": "sbst_shaper", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "md_smb", - "result-secondary": "ps_smb,ai_smb,ae_smb" - }, - { - "q#1": "sbst_shaper", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "md_indiv", - "result-secondary": "ps_indiv,ai_indiv,ae_indiv" - }, - { - "q#1": "sbst_designer", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "ds_ste", - "result-secondary": "ps_ste,ai_ste,ae_ste" - }, - { - "q#1": "sbst_designer", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "ds_smb", - "result-secondary": "ps_smb,ai_smb,ae_smb" - }, - { - "q#1": "sbst_designer", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "ds_indiv", - "result-secondary": "ps_indiv,ai_indiv,ae_indiv" - }, - { - "q#1": "free_spark", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "ste", - "result-primary": "fi-ax_ste", - "result-secondary": "cc_allapps_2_ste,ps_ste,pr_ste" - }, - { - "q#1": "free_spark", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "smb", - "result-primary": "fi-ax_smb", - "result-secondary": "cc_allapps_2_smb,ps_smb,pr_smb" - }, - { - "q#1": "free_spark", - "q#2": "", - "q#3-photo": "", - "q#3-video": "", - "q#3-design": "", - "q#3-illustr": "", - "q#3-pdf": "", - "q#3-3d": "", - "q#4": "indiv", - "result-primary": "fi-ax_indiv", - "result-secondary": "ps_indiv,pr_indiv,ai_indiv" - } - ] - }, - "result-fragments": { - "total": 6, - "offset": 0, - "limit": 6, - "data": [ - { - "product": "open-text-ax_indiv", - "marquee": "/fragments/uar/marquee/ccx", - "marquee-plan": "/fragments/uar/marquee/marquee-plan/ccx", - "check-bullet": "/fragments/uar/marquee/marquee-bullets/check-bullet/ax-uc1", - "icon-bullet": "N/A", - "card-list": "/fragments/uar/cross-sell/card-list", - "commerce-card": "", - "plan-card": "N/A", - "learn": "/fragments/uar/learn/learn-express", - "ff-banner": "/fragments/uar/banners/firefly", - "value-prop": "N/A", - "social-blade": "/fragments/uar/express-social/individual", - "legal-copy": "N/A" - }, - { - "product": "open-text-ax_ste", - "marquee": "/fragments/uar/marquee/ccx", - "marquee-plan": "/fragments/uar/marquee/marquee-plan/ccx-ste", - "check-bullet": "/fragments/uar/marquee/marquee-bullets/check-bullet/ax-ste1", - "icon-bullet": "N/A", - "card-list": "/fragments/uar/cross-sell/card-list", - "commerce-card": "", - "plan-card": "N/A", - "learn": "/fragments/uar/learn/learn-express", - "ff-banner": "/fragments/uar/banners/firefly-ste", - "value-prop": "N/A", - "social-blade": "/fragments/uar/express-social/students", - "legal-copy": "N/A" - }, - { - "product": "open-text-ax_smb", - "marquee": "/fragments/uar/marquee/ccx", - "marquee-plan": "/fragments/uar/marquee/marquee-plan/ccx-cct", - "check-bullet": "/fragments/uar/marquee/marquee-bullets/check-bullet/ax-cct1", - "icon-bullet": "N/A", - "card-list": "/fragments/uar/cross-sell/card-list", - "commerce-card": "", - "plan-card": "N/A", - "learn": "/fragments/uar/learn/learn-express", - "ff-banner": "/fragments/uar/banners/firefly-cct", - "value-prop": "N/A", - "social-blade": "/fragments/uar/express-social/teams", - "legal-copy": "N/A" - }, - { - "product": "fi-ax_indiv", - "marquee": "/fragments/uar/marquee/ccx", - "marquee-plan": "/fragments/uar/marquee/marquee-plan/ccx", - "check-bullet": "/fragments/uar/marquee/marquee-bullets/check-bullet/ax-uc1", - "icon-bullet": "N/A", - "card-list": "/fragments/uar/cross-sell/card-list", - "commerce-card": "/fragments/uar/cross-sell/commerce-cards/cci", - "plan-card": "N/A", - "learn": "/fragments/uar/learn/learn-express", - "ff-banner": "/fragments/uar/banners/firefly", - "value-prop": "N/A", - "social-blade": "/fragments/uar/express-social/individual", - "legal-copy": "N/A" - }, - { - "product": "fi-ax_ste", - "marquee": "/fragments/uar/marquee/ccx", - "marquee-plan": "/fragments/uar/marquee/marquee-plan/ccx-ste", - "check-bullet": "/fragments/uar/marquee/marquee-bullets/check-bullet/ax-ste1", - "icon-bullet": "N/A", - "card-list": "/fragments/uar/cross-sell/card-list", - "commerce-card": "/fragments/uar/cross-sell/commerce-cards/cci-ste", - "plan-card": "N/A", - "learn": "/fragments/uar/learn/learn-express", - "ff-banner": "/fragments/uar/banners/firefly-ste", - "value-prop": "N/A", - "social-blade": "/fragments/uar/express-social/students", - "legal-copy": "N/A" - }, - { - "product": "fi-ax_smb", - "marquee": "/fragments/uar/marquee/ccx", - "marquee-plan": "/fragments/uar/marquee/marquee-plan/ccx-cct", - "check-bullet": "/fragments/uar/marquee/marquee-bullets/check-bullet/ax-cct1", - "icon-bullet": "N/A", - "card-list": "/fragments/uar/cross-sell/card-list", - "commerce-card": "/fragments/uar/cross-sell/commerce-cards/cci-cct", - "plan-card": "N/A", - "learn": "/fragments/uar/learn/learn-express", - "ff-banner": "/fragments/uar/banners/firefly-cct", - "value-prop": "N/A", - "social-blade": "/fragments/uar/express-social/teams", - "legal-copy": "N/A" - } - ] - }, - "result-destination": { - "total": 9, - "offset": 0, - "limit": 9, - "data": [ - { - "result": "(fi-ax_indiv)", - "umbrella-result": "", - "url": "/drafts/quiz/plan-recommender-var/quiz-results", - "basic-fragments": "marquee,card-list,social-blade,ff-banner,learn", - "nested-fragments-primary": "check-bullet,marquee-plan", - "nested-fragments-secondary": "commerce-card" - }, - { - "result": "(fi-ax_ste)", - "umbrella-result": "", - "url": "/drafts/quiz/plan-recommender-var/quiz-results", - "basic-fragments": "marquee,card-list,social-blade,learn", - "nested-fragments-primary": "check-bullet,marquee-plan", - "nested-fragments-secondary": "commerce-card" - }, - { - "result": "(fi-ax_smb)", - "umbrella-result": "", - "url": "/drafts/quiz/plan-recommender-var/quiz-results", - "basic-fragments": "marquee,card-list,social-blade,ff-banner,learn", - "nested-fragments-primary": "check-bullet,marquee-plan", - "nested-fragments-secondary": "commerce-card" - }, - { - "result": "(fi-ax_indiv,pr_indiv,ae_indiv,an_indiv,au_indiv,id_indiv,ai_indiv,ps_indiv,pdf_indiv,lr_indiv,st_indiv,pt_indiv,sa_indiv,md_indiv,ds_indiv)&(fi-ax_indiv,pr_indiv,ae_indiv,an_indiv,au_indiv,id_indiv,ai_indiv,ps_indiv,pdf_indiv,lr_indiv,st_indiv,pt_indiv,sa_indiv,md_indiv,ds_indiv)", - "umbrella-result": "open-text-ax_indiv", - "url": "/drafts/quiz/plan-recommender-var/quiz-results", - "basic-fragments": "marquee,card-list,social-blade,ff-banner,learn", - "nested-fragments-primary": "check-bullet,marquee-plan", - "nested-fragments-secondary": "commerce-card" - }, - { - "result": "(fi-ax_ste,pr_ste,ae_ste,an_ste,au_ste,id_ste,ai_ste,ps_ste,pdf_ste,lr_ste,st_ste,pt_ste,sa_ste,md_ste,ds_ste)&(fi-ax_ste,pr_ste,ae_ste,an_ste,au_ste,id_ste,ai_ste,ps_ste,pdf_ste,lr_ste,st_ste,pt_ste,sa_ste,md_ste,ds_ste)", - "umbrella-result": "open-text-ax_ste", - "url": "/drafts/quiz/plan-recommender-var/quiz-results", - "basic-fragments": "marquee,card-list,social-blade,learn", - "nested-fragments-primary": "check-bullet,marquee-plan", - "nested-fragments-secondary": "commerce-card" - }, - { - "result": "(fi-ax_smb,pr_smb,ae_smb,an_smb,au_smb,id_smb,ai_smb,ps_smb,pdf_smb,lr_smb,st_smb,pt_smb,sa_smb,md_smb,ds_smb,smb,smb)&(fi-ax_smb,pr_smb,ae_smb,an_smb,au_smb,id_smb,ai_smb,ps_smb,pdf_smb,lr_smb,st_smb,pt_smb,sa_smb,md_smb,ds_smb,smb,smb)", - "umbrella-result": "open-text-ax_smb", - "url": "/drafts/quiz/plan-recommender-var/quiz-results", - "basic-fragments": "marquee,card-list,social-blade,ff-banner,learn", - "nested-fragments-primary": "check-bullet,marquee-plan", - "nested-fragments-secondary": "commerce-card" - }, - { - "result": "(fi-ax_indiv,pr_indiv,ae_indiv,an_indiv,au_indiv,id_indiv,ai_indiv,ps_indiv,pdf_indiv,lr_indiv,st_indiv,pt_indiv,sa_indiv,md_indiv,ds_indiv)&(fi-ax_indiv,pr_indiv,ae_indiv,an_indiv,au_indiv,id_indiv,ai_indiv,ps_indiv,pdf_indiv,lr_indiv,st_indiv,pt_indiv,sa_indiv,md_indiv,ds_indiv)&(fi-ax_indiv,pr_indiv,ae_indiv,an_indiv,au_indiv,id_indiv,ai_indiv,ps_indiv,pdf_indiv,lr_indiv,st_indiv,pt_indiv,sa_indiv,md_indiv,ds_indiv)", - "umbrella-result": "open-text-ax_indiv", - "url": "/drafts/quiz/plan-recommender-var/quiz-results", - "basic-fragments": "marquee,card-list,social-blade,ff-banner,learn", - "nested-fragments-primary": "check-bullet,marquee-plan", - "nested-fragments-secondary": "commerce-card" - }, - { - "result": "(fi-ax_ste,pr_ste,ae_ste,an_ste,au_ste,id_ste,ai_ste,ps_ste,pdf_ste,lr_ste,st_ste,pt_ste,sa_ste,md_ste,ds_ste)&(fi-ax_ste,pr_ste,ae_ste,an_ste,au_ste,id_ste,ai_ste,ps_ste,pdf_ste,lr_ste,st_ste,pt_ste,sa_ste,md_ste,ds_ste)&(fi-ax_ste,pr_ste,ae_ste,an_ste,au_ste,id_ste,ai_ste,ps_ste,pdf_ste,lr_ste,st_ste,pt_ste,sa_ste,md_ste,ds_ste)", - "umbrella-result": "open-text-ax_ste", - "url": "/drafts/quiz/plan-recommender-var/quiz-results", - "basic-fragments": "marquee,card-list,social-blade,learn", - "nested-fragments-primary": "check-bullet,marquee-plan", - "nested-fragments-secondary": "commerce-card" - }, - { - "result": "(fi-ax_smb,pr_smb,ae_smb,an_smb,au_smb,id_smb,ai_smb,ps_smb,pdf_smb,lr_smb,st_smb,pt_smb,sa_smb,md_smb,ds_smb,smb,smb)&(fi-ax_smb,pr_smb,ae_smb,an_smb,au_smb,id_smb,ai_smb,ps_smb,pdf_smb,lr_smb,st_smb,pt_smb,sa_smb,md_smb,ds_smb,smb,smb)&(fi-ax_smb,pr_smb,ae_smb,an_smb,au_smb,id_smb,ai_smb,ps_smb,pdf_smb,lr_smb,st_smb,pt_smb,sa_smb,md_smb,ds_smb,smb,smb)", - "umbrella-result": "open-text-ax_smb", - "url": "/drafts/quiz/plan-recommender-var/quiz-results", - "basic-fragments": "marquee,card-list,social-blade,ff-banner,learn", - "nested-fragments-primary": "check-bullet,marquee-plan", - "nested-fragments-secondary": "commerce-card" - } - ] - }, - ":version": 3, - ":names": [ - "result", - "result-fragments", - "result-destination" - ], - ":type": "multi-sheet" -} diff --git a/test/blocks/quiz-entry/mocks/strings.json b/test/blocks/quiz-entry/mocks/strings.json deleted file mode 100644 index 4b6b7635ccf..00000000000 --- a/test/blocks/quiz-entry/mocks/strings.json +++ /dev/null @@ -1,506 +0,0 @@ -{ - "q-video": { - "total": 5, - "offset": 0, - "limit": 5, - "data": [ - { - "options": "social", - "title": "", - "text": "Create, edit, and share on social", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-video/1-PR-CreateEditShare.png" - }, - { - "options": "pro", - "title": "", - "text": "Make pro-level edits for high-quality results", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-video/2-PR-ProLevelEdits.png" - }, - { - "options": "movement", - "title": "", - "text": "Create graphics and transitions that move", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-video/3-AE-TitlesAndTransitions.png" - }, - { - "options": "animate", - "title": "", - "text": "Make animations for cartoons or games", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-video/4-AN-Animations.png" - }, - { - "options": "sound", - "title": "", - "text": "Edit, mix, and add sound effects", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-video/5-AU-SoundEffects.png" - } - ] - }, - "q-3d": { - "total": 5, - "offset": 0, - "limit": 5, - "data": [ - { - "options": "stage", - "title": "", - "text": "Assemble, stage, and render 3D scenes", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q3/3-Stager@1x.png" - }, - { - "options": "texture", - "title": "", - "text": "Texture 3D assets in real time", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q3/2-Painter@1x.png" - }, - { - "options": "materials", - "title": "", - "text": "Create 3D materials from real-life images", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q3/5-Sampler@1x.png" - }, - { - "options": "model", - "title": "", - "text": "Create 3D models with digital clay", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q3/1-Modeler@1x.png" - }, - { - "options": "assets", - "title": "", - "text": "Design 3D assets and materials", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q3/4-Designer@1x.png" - } - ] - }, - "q-category": { - "total": 7, - "offset": 0, - "limit": 7, - "data": [ - { - "options": "fi_code", - "title": "Describe your interest here", - "text": "Ask our AI assistant", - "icon": "https://milo.adobe.com/drafts/quiz/quiz-ai/search.svg", - "image": "" - }, - { - "options": "photo", - "title": "Photography", - "text": "Edit or organize my photos", - "icon": "", - "image": "https://main--milo--adobecom.hlx.page/drafts/colloyd/quiz-entry/images/photography.png" - }, - { - "options": "video", - "title": "Video", - "text": "Create and edit video or audio", - "icon": "", - "image": "https://main--milo--adobecom.hlx.page/drafts/colloyd/quiz-entry/images/video.png" - }, - { - "options": "design", - "title": "Graphic design", - "text": "Design layouts or websites", - "icon": "", - "image": "https://main--milo--adobecom.hlx.page/drafts/colloyd/quiz-entry/images/design.png" - }, - { - "options": "illustration", - "title": "Illustration", - "text": "Paint, draw, or create illustrations", - "icon": "", - "image": "https://main--milo--adobecom.hlx.page/drafts/colloyd/quiz-entry/images/illustration.png" - }, - { - "options": "pdf", - "title": "PDFs", - "text": "Create, edit, or sign PDFs", - "icon": "", - "image": "https://main--milo--adobecom.hlx.page/drafts/colloyd/quiz-entry/images/pdf.png" - }, - { - "options": "3d", - "title": "3D/AR", - "text": "Model, texture, and render 3D assets and scenes", - "icon": "", - "image": "https://main--milo--adobecom.hlx.page/drafts/colloyd/quiz-entry/images/3dar.png" - } - ] - }, - "questions": { - "total": 10, - "offset": 0, - "limit": 10, - "data": [ - { - "q": "q-category", - "heading": "Not sure which apps are best for you?", - "sub-head": "Tell us what you’re interested in. We’ll help you figure it out.", - "btn": "Continue", - "text": "Or pick up to 3 below", - "background": "https://milo.adobe.com/drafts/quiz/quiz-2/quiz-background.jpeg", - "footerFragment": "" - }, - { - "q": "q-fallback", - "heading": "We're sorry our assistant couldn't help today.", - "sub-head": "Please choose up to three options.", - "btn": "Next", - "text": "", - "background": "https://milo.adobe.com/drafts/quiz/quiz-2/quiz-background.jpeg", - "footerFragment": "" - }, - { - "q": "q-photo", - "heading": "What do you want to do with photos?", - "sub-head": "Pick one.", - "btn": "Next", - "text": "", - "background": "https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-Q2-Photo%20BKGD%202X?$pjpeg$&jpegSize=300&wid=1920", - "footerFragment": "https://milo.adobe.com/fragments/quiz/sample-uar-fragments/footer/footer1" - }, - { - "q": "q-video", - "heading": "What do you want to do with video?", - "sub-head": "Pick one.", - "btn": "Next", - "text": "", - "background": "https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-Q2-Photo%20BKGD%202X?$pjpeg$&jpegSize=300&wid=1920", - "footerFragment": "" - }, - { - "q": "q-design", - "heading": "What do you want to do with design?", - "sub-head": "Pick one.", - "btn": "Next", - "text": "", - "background": "https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-Q2-Design%20BKGD%202X?$pjpeg$&jpegSize=300&wid=1920", - "footerFragment": "" - }, - { - "q": "q-illustration", - "heading": "What do you want to do with illustration?", - "sub-head": "Pick one.", - "btn": "Next", - "text": "", - "background": "https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-Q2-Illustration%20BKGD%202X?$pjpeg$&jpegSize=300&wid=1920", - "footerFragment": "" - }, - { - "q": "q-pdf", - "heading": "What do you want to do with PDFs?", - "sub-head": "Pick one.", - "btn": "Next", - "text": "", - "background": "https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-Q2-Acrobat%20BKGD%202X?$pjpeg$&jpegSize=300&wid=1920", - "footerFragment": "" - }, - { - "q": "q-3d", - "heading": "What do you want to do with 3D/AR?", - "sub-head": "Pick one.", - "btn": "Next", - "text": "", - "background": "https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-3D-AR%20BKGD?$pjpeg$&jpegSize=300&wid=1920", - "footerFragment": "" - }, - { - "q": "q-rather", - "heading": "For your projects, would you rather:", - "sub-head": "Pick one.", - "btn": "Next", - "text": "", - "background": "https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-Q3-Learn%20BKGD%202X?$pjpeg$&jpegSize=300&wid=1920", - "footerFragment": "" - }, - { - "q": "q-customer", - "heading": "What else are you looking for today?", - "sub-head": "Pick one.", - "btn": "Get your results", - "text": "", - "background": "https://cc-prod.scene7.com/is/image/CCProdAuthor/DSK-Q4%20BKGD%202X?$pjpeg$&jpegSize=300&wid=1920", - "footerFragment": "https://milo.adobe.com/fragments/quiz/sample-uar-fragments/footer/footer2" - } - ] - }, - "q-rather": { - "total": 2, - "offset": 0, - "limit": 2, - "data": [ - { - "options": "template", - "title": "", - "text": "Edit quickly and customize templates", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/1-Templates.png" - }, - { - "options": "custom", - "title": "", - "text": "Take the time to control every detail", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/2-CustomDesigns.png" - } - ] - }, - "q-photo": { - "total": 5, - "offset": 0, - "limit": 5, - "data": [ - { - "options": "organize", - "title": "", - "text": "Get them sorted and organized", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-photo/1-LR-StoreAndOrganize.png" - }, - { - "options": "batch", - "title": "", - "text": "Edit lots of photos quickly", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-photo/2-LR-ApplyFilters.png" - }, - { - "options": "edit", - "title": "", - "text": "Edit and finesse the smallest details", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-photo/3-PS-RemoveObjects.png" - }, - { - "options": "color", - "title": "", - "text": "Correct color and lighting like a pro", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-photo/4-PS-MakeDetailedColor.png" - }, - { - "options": "blend", - "title": "", - "text": "Blend multiple shots into something new", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-photo/5-PS-BlendImages.png" - } - ] - }, - "q-fallback": { - "total": 6, - "offset": 0, - "limit": 6, - "data": [ - { - "options": "photo", - "title": "Photography", - "text": "Edit or organize my photos", - "icon": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/1-Photo%20ICON.svg", - "image": "" - }, - { - "options": "video", - "title": "Video", - "text": "Create and edit video or audio", - "icon": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/2-Video%20ICON.svg", - "image": "" - }, - { - "options": "design", - "title": "Graphic design", - "text": "Design layouts or websites", - "icon": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/3-Design%20ICON.svg", - "image": "" - }, - { - "options": "illustration", - "title": "Illustration", - "text": "Paint, draw, or create illustrations", - "icon": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/4-Illustration%20ICON.svg", - "image": "" - }, - { - "options": "pdf", - "title": "PDFs", - "text": "Create, edit, or sign PDFs", - "icon": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/5-PDF%20ICON.svg", - "image": "" - }, - { - "options": "3d", - "title": "3D/AR", - "text": "Model, texture, and render 3D assets and scenes", - "icon": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/6-3D-AR%20ICON.svg", - "image": "" - } - ] - }, - "q-pdf": { - "total": 6, - "offset": 0, - "limit": 6, - "data": [ - { - "options": "create", - "title": "", - "text": "Create and export PDFs to Office", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-pdf/1-Ac-CreateExport.png" - }, - { - "options": "edit", - "title": "", - "text": "Edit text and images in PDFs", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-pdf/2-Ac-EditText.png" - }, - { - "options": "share", - "title": "", - "text": "Share PDFs with anyone", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-pdf/3-Ac-Share.png" - }, - { - "options": "secure", - "title": "", - "text": "Protect and secure PDFs", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-pdf/4-Ac-Protect.png" - }, - { - "options": "sign", - "title": "", - "text": "Sign PDFs wherever you are", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-pdf/5-Ac-Sign.png" - }, - { - "options": "track", - "title": "", - "text": "Track signatures and progress", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-pdf/6-Ac-TrackSignatures.png" - } - ] - }, - "q-design": { - "total": 3, - "offset": 0, - "limit": 3, - "data": [ - { - "options": "layouts", - "title": "", - "text": "Create layouts for magazines, books, or posters", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-design/1-%20Id-Layouts.png" - }, - { - "options": "images", - "title": "", - "text": "Combine multiple images into new designs", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-design/2-PS-CombineImages.png" - }, - { - "options": "graphics", - "title": "", - "text": "Create graphics and designs that work at any size", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-design/3-Ai-CreateGraphics.png" - } - ] - }, - "q-illustration": { - "total": 4, - "offset": 0, - "limit": 4, - "data": [ - { - "options": "raster", - "title": "", - "text": "Paint, draw, or doodle like on paper", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-illustration/1-PS-PaintDraw.png" - }, - { - "options": "vector", - "title": "", - "text": "Make illustrations that work at any size", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-illustration/2-Ai-WorkAtAnySize.png" - }, - { - "options": "crisp", - "title": "", - "text": "Draw crisp lines and smooth curves", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-illustration/3-Ai-CrispLines.png" - }, - { - "options": "images", - "title": "", - "text": "Blend multiple images into something new", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q2-illustration/4-PS-BlendImages.png" - } - ] - }, - "q-customer": { - "total": 3, - "offset": 0, - "limit": 3, - "data": [ - { - "options": "educational", - "title": "", - "text": "A student or teacher discount", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q4/2-StudentTeacher.png" - }, - { - "options": "business", - "title": "", - "text": "Licenses and business features for teams", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q4/3-Work.png" - }, - { - "options": "individual", - "title": "", - "text": "Neither apply", - "icon": "", - "image": "https://www.adobe.com/content/dam/cc/Images/app-recommender/multi-select/quiz-question-card-thumbnails/q4/1-Individual.png" - } - ] - }, - ":version": 3, - ":names": [ - "q-video", - "q-3d", - "q-category", - "questions", - "q-rather", - "q-photo", - "q-fallback", - "q-pdf", - "q-design", - "q-illustration", - "q-customer" - ], - ":type": "multi-sheet" -} diff --git a/test/blocks/quiz-entry/quiz-entry.test.js b/test/blocks/quiz-entry/quiz-entry.test.js deleted file mode 100644 index 8a3ac889e93..00000000000 --- a/test/blocks/quiz-entry/quiz-entry.test.js +++ /dev/null @@ -1,314 +0,0 @@ -/* eslint-disable no-promise-executor-return */ -import { readFile } from '@web/test-runner-commands'; -import { expect } from '@esm-bundle/chai'; -import sinon from 'sinon'; -import init from '../../../libs/blocks/quiz-entry/quiz-entry.js'; -import { getSuggestions } from '../../../libs/blocks/quiz-entry/quizPopover.js'; - -let fetchStub; -let quizEntryElement; -const { default: mockData } = await import('./mocks/mock-data.js'); -const mockQuestionsData = mockData.questions; -const mockStringsData = mockData.strings; -const quizConfig = { - quizPath: '/drafts/quiz/quiz-entry/', - maxQuestions: 1, - analyticsQuiz: 'clientv1', - analyticsType: 'cc:app-test', - questionData: mockQuestionsData, - stringsData: mockStringsData, -}; - -describe('Quiz Entry Component', () => { - beforeEach(async () => { - window.lana = { log: sinon.stub() }; - fetchStub = sinon.stub(window, 'fetch'); - fetchStub.resolves({ - ok: true, - json: () => Promise.resolve({ suggested_completions: ['designer desk', 'design logos'] }), - }); - document.body.innerHTML = await readFile({ path: './mocks/index.html' }); - quizEntryElement = document.querySelector('.quiz-entry'); - await init(quizEntryElement, quizConfig); - await new Promise((resolve) => setTimeout(resolve, 100)); - }); - - afterEach(() => { - sinon.restore(); - }); - - it('should trigger onMLInput and update suggestions', async () => { - const mlInputField = document.querySelector('#quiz-input'); - const testInput = 'design'; - const inputEvent = new Event('input', { bubbles: true }); - mlInputField.value = testInput; - mlInputField.dispatchEvent(inputEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - const popoverContainer = document.querySelector('.popover-container'); - const suggestionItems = popoverContainer.querySelectorAll('.popover-item'); - expect(suggestionItems).to.exist; - }); - - it('Should trigger popover content on click', async () => { - const mlInputField = document.querySelector('#quiz-input'); - const testInput = 'design'; - const inputEvent = new Event('input', { bubbles: true }); - mlInputField.value = testInput; - mlInputField.dispatchEvent(inputEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - const popoverItem = document.querySelector('.popover-item'); - popoverItem.innerHTML = 'design a logo'; - popoverItem.click(); - await new Promise((resolve) => setTimeout(resolve, 100)); - const enterKeyEvent = new KeyboardEvent('keypress', { - key: 'Enter', - code: 'Enter', - keyCode: 13, - }); - mlInputField.dispatchEvent(enterKeyEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - mlInputField.value = 'design a logo'; - expect(mlInputField.value).to.equal('design a logo'); - }); - - it('should fetch suggestions and return data on successful response', async () => { - const mockApiResponse = { - ok: true, - json: () => Promise.resolve({ suggested_completions: ['suggestion1', 'suggestion2'] }), - }; - fetchStub.resolves(mockApiResponse); - const result = await getSuggestions('test-endpoint', 'test-client-id', 'query', 'test-scope'); - expect(fetchStub.calledOnce).to.be.true; - expect(result).to.deep.equal({ suggested_completions: ['suggestion1', 'suggestion2'] }); - const expectedUrl = 'https://adobesearch.adobe.io/test-endpoint/completions?q[text]=query&q[locale]=en_us&scope=test-scope'; - expect(fetchStub.calledWith(expectedUrl, { - method: 'GET', - headers: { 'x-api-key': 'test-client-id' }, - })).to.be.true; - }); - - it('should handle failed fetch attempts', async () => { - fetchStub.resolves({ ok: false }); - const result = await getSuggestions('test-endpoint', 'test-client-id', 'query', 'test-scope'); - expect(fetchStub.calledOnce).to.be.true; - expect(result).to.equal(''); - }); - - it('should initialize with provided element and display the quiz', async () => { - expect(quizEntryElement.innerHTML).to.include('quiz-container'); - }); - - it('should handle user interaction and update selection state', async () => { - const option = quizEntryElement.querySelector('.quiz-option'); - option.click(); - await new Promise((resolve) => setTimeout(resolve, 100)); - expect(option.classList.contains('selected')).to.be.true; - }); - - it('1 should trigger continueQuiz on enter key press', async () => { - const mlFieldInput = document.querySelector('#quiz-input'); - const enterKeyEvent = new KeyboardEvent('keypress', { - key: 'Enter', - code: 'Enter', - keyCode: 13, - }); - mlFieldInput.dispatchEvent(enterKeyEvent); - }); - - it('should clear the input field on clear button click', async () => { - const mlFieldInput = document.querySelector('#quiz-input'); - const clearButton = document.querySelector('#quiz-input-clear'); - mlFieldInput.value = 'test'; - clearButton.click(); - expect(mlFieldInput.value).to.equal(''); - }); - it('should have an input focus() on suggestion click', async () => { - const mlFieldInput = document.querySelector('#quiz-input'); - mlFieldInput.value = 'design a logo'; - const inputEvent = new Event('input', { bubbles: true }); - mlFieldInput.dispatchEvent(inputEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - const suggestionItem = document.querySelector('.popover-item'); - suggestionItem.click(); - expect(mlFieldInput).to.equal(document.activeElement); - }); - it('should have the selected class after clicking on an option', async () => { - const option = document.querySelector('.quiz-option'); - option.click(); - await new Promise((resolve) => setTimeout(resolve, 100)); - expect(option.classList.contains('selected')).to.be.true; - }); - it('should remove the selected class after clicking on the .quiz-option element again', async () => { - const option = document.querySelector('.quiz-option'); - option.click(); - await new Promise((resolve) => setTimeout(resolve, 100)); - option.click(); - await new Promise((resolve) => setTimeout(resolve, 100)); - expect(option.classList.contains('selected')).to.be.false; - }); - it('continue should be available after mlfield is used', async () => { - const mlFieldInput = document.querySelector('#quiz-input'); - const continueButton = document.querySelector('.quiz-button'); - mlFieldInput.value = 'design a logo'; - const inputEvent = new Event('input', { bubbles: true }); - mlFieldInput.dispatchEvent(inputEvent); - continueButton.click(); - await new Promise((resolve) => setTimeout(resolve, 100)); - expect(continueButton.classList.contains('disabled')).to.be.false; - }); - it('should navigate the carousel using keyboard commands', async () => { - const options = document.querySelectorAll('.quiz-option'); - const option = document.querySelector('.quiz-option'); - option.click(); - await new Promise((resolve) => setTimeout(resolve, 100)); - const carousel = document.querySelector('.quiz-options-container'); - const rightArrowEvent = new KeyboardEvent('keydown', { key: 'ArrowRight' }); - const leftArrowEvent = new KeyboardEvent('keydown', { key: 'ArrowLeft' }); - carousel.dispatchEvent(rightArrowEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - carousel.dispatchEvent(leftArrowEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - const leftArrow = document.querySelector('.carousel-arrow.arrow-prev'); - expect(leftArrow).to.not.exist; - - const tabKeyEvent = new KeyboardEvent('keydown', { key: 'Tab' }); - option.dispatchEvent(tabKeyEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - expect(option.classList.contains('selected')).to.be.true; - - const spaceKeyEvent = new KeyboardEvent('keydown', { key: ' ', keyCode: 32 }); - carousel.dispatchEvent(spaceKeyEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - - const enterKeyEvent = new KeyboardEvent('keydown', { - key: 'Enter', - code: 'Enter', - keyCode: 13, - }); - carousel.dispatchEvent(enterKeyEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - expect(options[1].classList.contains('selected')).to.be.false; - }); - it('should handle error and return default data if fetching quiz data fails', async () => { - // Stubbing console.error to suppress error logs in tests - const consoleErrorStub = sinon.stub(console, 'error'); - - fetchStub.rejects(new Error('Failed to load quiz data')); - - await init(quizEntryElement, {}); - - expect(fetchStub.calledOnceWith(quizEntryElement)).to.be.false; - expect(consoleErrorStub.calledOnce).to.be.true; - expect(consoleErrorStub.args[0][0]).to.equal('Failed to load quiz data:'); - }); -}); - -describe('RTL Quiz Entry', () => { - beforeEach(async () => { - window.lana = { log: sinon.stub() }; - fetchStub = sinon.stub(window, 'fetch'); - fetchStub.resolves({ - ok: true, - json: () => Promise.resolve({ suggested_completions: ['designer desk', 'design logos'] }), - }); - document.body.innerHTML = await readFile({ path: './mocks/index.html' }); - document.documentElement.setAttribute('dir', 'rtl'); - quizEntryElement = document.querySelector('.quiz-entry'); - await init(quizEntryElement, quizConfig); - await new Promise((resolve) => setTimeout(resolve, 100)); - }); - - afterEach(() => { - sinon.restore(); - }); - - it('should navigate the carousel using keyboard commands', async () => { - const options = document.querySelectorAll('.quiz-option'); - const option = document.querySelector('.quiz-option'); - option.click(); - await new Promise((resolve) => setTimeout(resolve, 100)); - const carousel = document.querySelector('.quiz-options-container'); - const rightArrowEvent = new KeyboardEvent('keydown', { key: 'ArrowRight' }); - const leftArrowEvent = new KeyboardEvent('keydown', { key: 'ArrowLeft' }); - carousel.dispatchEvent(rightArrowEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - carousel.dispatchEvent(leftArrowEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - const leftArrow = document.querySelector('.carousel-arrow.arrow-prev'); - expect(leftArrow).to.exist; - - const tabKeyEvent = new KeyboardEvent('keydown', { key: 'Tab' }); - option.dispatchEvent(tabKeyEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - expect(option.classList.contains('selected')).to.be.false; - - const spaceKeyEvent = new KeyboardEvent('keydown', { key: ' ', keyCode: 32 }); - carousel.dispatchEvent(spaceKeyEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - - const enterKeyEvent = new KeyboardEvent('keydown', { - key: 'Enter', - code: 'Enter', - keyCode: 13, - }); - carousel.dispatchEvent(enterKeyEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - expect(options[1].classList.contains('selected')).to.be.false; - }); -}); - -describe('ML Result Trigger', () => { - beforeEach(async () => { - window.lana = { log: sinon.stub() }; - fetchStub = sinon.stub(window, 'fetch'); - const mockApiResponse = { - statusCode: 200, - data: { - data: [ - { - ficode: 'illustrator_cc', - prob: '0.33', - }, - { - ficode: 'indesign_cc', - prob: '0.27', - }, - { - ficode: 'free_spark', - prob: '0.22', - }, - ], - jobName: '', - }, - }; - fetchStub.resolves({ - ok: true, - json: () => Promise.resolve(mockApiResponse.data), - }); - document.body.innerHTML = await readFile({ path: './mocks/index.html' }); - quizEntryElement = document.querySelector('.quiz-entry'); - await init(quizEntryElement, quizConfig); - await new Promise((resolve) => setTimeout(resolve, 100)); - }); - - afterEach(() => { - sinon.restore(); - }); - - it('Should trigger results fetching scenario', async () => { - const mlInputField = document.querySelector('#quiz-input'); - const testInput = 'design'; - const inputEvent = new Event('input', { bubbles: true }); - mlInputField.value = testInput; - mlInputField.dispatchEvent(inputEvent); - await new Promise((resolve) => setTimeout(resolve, 100)); - - const enterKeyEvent = new KeyboardEvent('keypress', { - key: 'Enter', - code: 'Enter', - keyCode: 13, - }); - mlInputField.dispatchEvent(enterKeyEvent); - expect(mlInputField.value).to.equal('design'); - }); -}); diff --git a/test/blocks/quiz-entry/utils.test.js b/test/blocks/quiz-entry/utils.test.js deleted file mode 100644 index a81e6d5c3b8..00000000000 --- a/test/blocks/quiz-entry/utils.test.js +++ /dev/null @@ -1,248 +0,0 @@ -/* eslint-disable no-promise-executor-return */ -import { readFile } from '@web/test-runner-commands'; -import { expect } from '@esm-bundle/chai'; -import sinon from 'sinon'; -import { handleNext, getQuizJson, handleSelections, getQuizEntryData } from '../../../libs/blocks/quiz-entry/utils.js'; // Correct the path as needed - -let fetchStub; -const path = './mocks/'; -const { default: mockData } = await import('./mocks/mock-data.js'); -const mockQuestionsData = mockData.questions; -const mockStringsData = mockData.strings; -const mockResultsData = mockData.results; -const quizConfig = { - quizPath: '/drafts/quiz/', - maxQuestions: 1, - analyticsQuiz: 'uarv4', - analyticsType: 'cc:app-reco', - questionData: undefined, - stringsData: undefined, - resultsData: undefined, -}; -const selectedQuestion = { - questions: 'q-category', - 'max-selections': '3', - 'min-selections': '1', -}; -const userInputSelections = { photo: true }; -const userInputSelectionsNot = { '3d': true }; -const userInputSelectionsReset = { video: true }; - -const userFlow = []; -const nextFlow = { nextFlow: ['q-rather', 'q-photo'] }; -const nextFlowNot = { nextFlow: ['q-3d'] }; -const nextFlowReset = { nextFlow: [] }; -const prevSelections = []; -const selections = ['photo']; -const nextSelectionsExpected = { - nextSelections: [ - { - selectedCards: [ - 'photo', - ], - selectedQuestion: { - 'max-selections': '3', - 'min-selections': '1', - questions: 'q-category', - }, - }, - ], -}; - -describe('Quiz Entry Utils', () => { - beforeEach(async () => { - window.lana = { log: sinon.stub() }; - fetchStub = sinon.stub(window, 'fetch'); - fetchStub.withArgs(`${path}questions.json`).resolves({ - ok: true, - json: () => Promise.resolve(mockQuestionsData), - }); - fetchStub.withArgs(`${path}strings.json`).resolves({ - ok: true, - json: () => Promise.resolve(mockStringsData), - }); - fetchStub.withArgs(`${path}results.json`).resolves({ - ok: true, - json: () => Promise.resolve(mockResultsData), - }); - - // Handling non-existent results.json - fetchStub.withArgs(`${path}non-existent.json`).resolves({ - ok: false, - status: 404, - json: () => Promise.reject(new Error('File not found')), - }); - }); - - afterEach(() => { - sinon.restore(); - }); - - it('should handle the next flow of questions', async () => { - const nextQuestion = handleNext( - mockQuestionsData, - selectedQuestion, - userInputSelections, - userFlow, - ); - expect(nextQuestion).to.deep.equal(nextFlow); - }); - - it('should handle the next flow of questions with not()', async () => { - const nextQuestion = handleNext( - mockQuestionsData, - selectedQuestion, - userInputSelectionsNot, - userFlow, - ); - expect(nextQuestion).to.deep.equal(nextFlowNot); - }); - - it('should handle the next flow of questions with reset()', async () => { - const nextQuestion = handleNext( - mockQuestionsData, - selectedQuestion, - userInputSelectionsReset, - userFlow, - ); - expect(nextQuestion).to.deep.equal(nextFlowReset); - }); - - it('should fetch quiz data', async () => { - const [questions, strings, results] = await getQuizJson(path); - - // Check if fetch was called with the correct paths - sinon.assert.calledWith(fetchStub, `${path}questions.json`); - sinon.assert.calledWith(fetchStub, `${path}strings.json`); - sinon.assert.calledWith(fetchStub, `${path}results.json`); - - // Check that each fetch was called once - sinon.assert.calledOnce(fetchStub.withArgs(`${path}questions.json`)); - sinon.assert.calledOnce(fetchStub.withArgs(`${path}strings.json`)); - sinon.assert.calledOnce(fetchStub.withArgs(`${path}results.json`)); - - // Assertions for the returned data - expect(questions).to.deep.equal(mockQuestionsData); - expect(strings).to.deep.equal(mockStringsData); - expect(results).to.deep.equal(mockResultsData); - }); - - it('should handle missing results.json gracefully', async () => { - fetchStub.withArgs(`${path}results.json`).resolves({ - ok: false, - status: 404, - json: () => Promise.reject(new Error('File not found')), - }); - - const [questions, strings, results] = await getQuizJson(path); - - // Check fetch calls - sinon.assert.calledWith(fetchStub, `${path}questions.json`); - sinon.assert.calledWith(fetchStub, `${path}strings.json`); - sinon.assert.calledWith(fetchStub, `${path}results.json`); - - // Assertions for the returned data, results should be empty - expect(questions).to.deep.equal(mockQuestionsData); - expect(strings).to.deep.equal(mockStringsData); - expect(results).to.deep.equal([]); - }); - - it('should log an error when fetching fails', async () => { - fetchStub.withArgs(`${path}questions.json`).resolves({ - ok: false, - status: 500, - json: () => Promise.reject(new Error('Internal server error')), - }); - - const result = await getQuizJson(path); - - // Ensure fetch was called with the correct path - sinon.assert.calledWith(fetchStub, `${path}questions.json`); - - // Result should be empty due to the error - expect(result).to.deep.equal([]); - - // Check that lana.log was called with the error message - sinon.assert.calledWith( - window.lana.log, - 'ERROR: Fetching data for quiz entry: Error: Internal server error', - ); - }); - - it('should log an info message when results.json is missing', async () => { - fetchStub.withArgs(`${path}results.json`).resolves({ - ok: false, - status: 404, - json: () => Promise.reject(new Error('File not found')), - }); - - const [questions, strings, results] = await getQuizJson(path); - - // Check fetch calls - sinon.assert.calledWith(fetchStub, `${path}questions.json`); - sinon.assert.calledWith(fetchStub, `${path}strings.json`); - sinon.assert.calledWith(fetchStub, `${path}results.json`); - - // Assertions for the returned data - expect(questions).to.deep.equal(mockQuestionsData); - expect(strings).to.deep.equal(mockStringsData); - expect(results).to.deep.equal([]); - - // Check that lana.log was called with the info message - sinon.assert.calledWith( - window.lana.log, - "INFO: results.json not found or couldn't be fetched: Error: File not found", - ); - }); -}); - -describe('Quiz Entry Utils failed request', () => { - beforeEach(async () => { - window.lana = { log: sinon.stub() }; - fetchStub = sinon.stub(window, 'fetch'); - fetchStub.resolves({ ok: false }); - }); - - afterEach(() => { - sinon.restore(); - }); - - it('should log an error when fetching quiz data fails', async () => { - await getQuizJson('./mocks/'); - expect(window.lana.log.called).to.be.true; - }); - it('should return nextSelections on handleSelections', async () => { - const nextSelections = handleSelections(prevSelections, selectedQuestion, selections); - expect(nextSelections).to.deep.equal(nextSelectionsExpected); - }); - - it('should de-dup any existing data if they use the ml field and cards.', async () => { - const prevSelectionsLength = [{ - selectedQuestion: { - 'max-selections': '3', - 'min-selections': '1', - questions: 'q-category', - }, - }]; - - const selectedQuestionPrev = [{ - selectedQuestion: { - 'max-selections': '3', - 'min-selections': '1', - questions: 'q-category', - }, - }]; - - const nextSelections = handleSelections(prevSelectionsLength, selectedQuestionPrev, selections); - await new Promise((resolve) => setTimeout(resolve, 100)); - expect(nextSelections).to.deep.equal(nextSelections); - }); - - it('should return quizPath, maxQuestions, analyticsQuiz, analyticsType, questionData', async () => { - document.body.innerHTML = await readFile({ path: './mocks/index.html' }); - const el = document.querySelector('.quiz-entry'); - - const quizEntryData = await getQuizEntryData(el); - expect(quizEntryData).to.deep.equal(quizConfig); - }); -}); diff --git a/test/blocks/region-nav/region-nav.test.js b/test/blocks/region-nav/region-nav.test.js index 82ceb0a1498..bc3c22ad3f7 100644 --- a/test/blocks/region-nav/region-nav.test.js +++ b/test/blocks/region-nav/region-nav.test.js @@ -1,9 +1,9 @@ import { readFile } from '@web/test-runner-commands'; import { expect } from '@esm-bundle/chai'; import sinon from 'sinon'; -import { setConfig, getConfig } from '../../../libs/utils/utils.js'; +import { setConfig, getConfig, createTag } from '../../../libs/utils/utils.js'; -import init from '../../../libs/blocks/region-nav/region-nav.js'; +import init, { decorateLink } from '../../../libs/blocks/region-nav/region-nav.js'; document.body.innerHTML = await readFile({ path: './mocks/regions.html' }); @@ -104,4 +104,65 @@ describe('Region Nav Block', () => { await clock.runAllAsync(); expect(window.open.calledWith(chfrPrefix)).to.be.true; }); + + it('replaces the prefix with the mapped value when prefix is NOT in locales but is in languageMap', () => { + setConfig({ + languageMap: { + ar: 'es', + at: 'de', + }, + locales: { + '': { ietf: 'en-US', tk: 'hah7vzn.css' }, + africa: { ietf: 'en', tk: 'hah7vzn.css' }, + // Notice we do NOT include 'ar' or 'at' here so that prefix is considered "not in locales". + }, + }); + + const link = createTag('a', { href: 'https://adobe.com/ar/' }); + decorateLink(link, '/path/to/some/page'); + + // Assert that the href has been transformed from '/ar/' to '/es/' due to languageMap + expect(link.href).to.equal('https://adobe.com/es/path/to/some/page'); + }); + + it('removes the prefix when prefix is NOT in locales and has an empty mapping in languageMap', () => { + setConfig({ + languageMap: { + ae_ar: '', + ae_en: '', + africa: '', + ar: '', + }, + locales: { '': { ietf: 'en-US', tk: 'hah7vzn.css' } }, + }); + + const link = createTag('a', { href: 'https://adobe.com/ar/' }); + decorateLink(link, '/some-page'); + + // Because `ar` is mapped to an empty string, the code replaces `"/ar"` with `""` + expect(link.href).to.equal('https://adobe.com/some-page'); + }); + + it('does NOT modify href if prefix is in locales (even if present in languageMap)', () => { + setConfig({ + languageMap: { ar: 'es' }, + locales: { '': { ietf: 'en-US', tk: 'hah7vzn.css' }, ar: { ietf: 'ar', tk: 'lpk1hwn.css', dir: 'rtl' } }, // Now "ar" is a valid locale + }); + + const link = createTag('a', { href: 'https://adobe.com/ar/some-page' }); + decorateLink(link, ''); + + // Since 'ar' is in locales, we should NOT transform + expect(link.href).to.equal('https://adobe.com/ar/some-page'); + }); + + it('does nothing if no languageMap is defined', () => { + setConfig({ }); + + const link = createTag('a', { href: 'https://adobe.com/ar/some-page' }); + decorateLink(link, ''); + + // No languageMap means no transformation + expect(link.href).to.equal('https://adobe.com/ar/some-page'); + }); }); diff --git a/test/blocks/rollout/mocks/body.html b/test/blocks/rollout/mocks/body.html new file mode 100644 index 00000000000..495eb5279df --- /dev/null +++ b/test/blocks/rollout/mocks/body.html @@ -0,0 +1 @@ +
      diff --git a/test/blocks/rollout/rollout.test.js b/test/blocks/rollout/rollout.test.js new file mode 100644 index 00000000000..a79927796e3 --- /dev/null +++ b/test/blocks/rollout/rollout.test.js @@ -0,0 +1,155 @@ +import { expect } from '@esm-bundle/chai'; +import { readFile } from '@web/test-runner-commands'; +import sinon from 'sinon'; + +const { default: init } = await import('../../../libs/blocks/rollout/rollout.js'); + +document.body.innerHTML = await readFile({ path: './mocks/body.html' }); + +const createTestParams = ( + referrer = 'https://main--bacom--adobecom.hlx.page/langstore/de/customer-success', + host = 'milo.adobe.com', + project = 'Milo', + overrideBranch = null, +) => { + const searchParams = new URLSearchParams(); + searchParams.append('referrer', referrer); + searchParams.append('host', host); + searchParams.append('project', project); + if (overrideBranch) searchParams.append('overrideBranch', overrideBranch); + return searchParams; +}; + +describe('Rollout', () => { + it('should initialize with valid preview URL', async () => { + const el = document.querySelector('div'); + const searchParams = createTestParams(); + const result = await init(el, `?${searchParams.toString()}`); + expect(result).to.be.true; + expect(el.querySelector('.modal')).to.exist; + expect(el.querySelector('.radio-group')).to.exist; + expect(el.querySelector('.rollout-btn')).to.exist; + }); + + it('should show error for invalid URL format', async () => { + const el = document.querySelector('div'); + const searchParams = createTestParams('invalid-url'); + const result = await init(el, `?${searchParams.toString()}`); + expect(result).to.be.false; + expect(el.innerHTML).to.equal(''); + }); + + it('should detect language code correctly', async () => { + const el = document.querySelector('div'); + const searchParams = createTestParams(); + const windowOpenStub = sinon.stub(window, 'open'); + + const result = await init(el, `?${searchParams.toString()}`); + expect(result).to.be.true; + + // select the radio button stage + const radioButtons = el.querySelectorAll('.radio-group input[type="radio"]'); + radioButtons[0].checked = true; + + // Trigger rollout button click + const rolloutBtn = el.querySelector('.rollout-btn'); + rolloutBtn.click(); + + expect(windowOpenStub.called).to.be.true; + + const lastUrl = new URL(windowOpenStub.firstCall.args[0]); + expect(lastUrl.hostname).to.equal('main--bacom--adobecom.hlx.page'); + expect(lastUrl.searchParams.get('language')).to.equal('de'); + expect(lastUrl.searchParams.get('milolibs')).to.equal('milostudio-stage'); + // Restore original window.open + windowOpenStub.restore(); + }); + + it('should handle failed initialization gracefully', async () => { + const el = null; // Force an error + const result = await init(el); + expect(result).to.be.false; + }); + + it('should handle missing required parameters', async () => { + const el = document.querySelector('div'); + const searchParams = createTestParams(''); + const result = await init(el, `?${searchParams.toString()}`); + expect(result).to.be.false; + expect(el.innerHTML).to.equal(''); + }); + + it('should handle overrideBranch parameter', async () => { + const el = document.querySelector('div'); + const searchParams = createTestParams('https://main--milo--adobecom.hlx.page/langstore/de/customer-success', 'milo.adobe.com', 'Milo', 'milostudio'); + const windowOpenStub = sinon.stub(window, 'open'); + + const result = await init(el, `?${searchParams.toString()}`); + expect(result).to.be.true; + + // Trigger rollout button click + const rolloutBtn = el.querySelector('.rollout-btn'); + rolloutBtn.click(); + + expect(windowOpenStub.called).to.be.true; + + const lastUrl = new URL(windowOpenStub.firstCall.args[0]); + expect(lastUrl.hostname).to.equal('milostudio--milo--adobecom.hlx.page'); + expect(lastUrl.searchParams.get('milolibs')).to.equal('milostudio'); + + // Restore original window.open + windowOpenStub.restore(); + }); + + it('should handle overrideBranch parameter for stage', async () => { + const el = document.querySelector('div'); + const searchParams = createTestParams('https://main--milo--adobecom.hlx.page/langstore/de/customer-success', 'milo.adobe.com', 'Milo', 'milostudio'); + const windowOpenStub = sinon.stub(window, 'open'); + + const result = await init(el, `?${searchParams.toString()}`); + expect(result).to.be.true; + + // select the radio button stage + const radioButtons = el.querySelectorAll('.radio-group input[type="radio"]'); + radioButtons[0].checked = true; + + // Trigger rollout button click + const rolloutBtn = el.querySelector('.rollout-btn'); + rolloutBtn.click(); + + expect(windowOpenStub.called).to.be.true; + + const lastUrl = new URL(windowOpenStub.firstCall.args[0]); + expect(lastUrl.hostname).to.equal('milostudio-stage--milo--adobecom.hlx.page'); + expect(lastUrl.searchParams.get('milolibs')).to.equal('milostudio-stage'); + + // Restore original window.open + windowOpenStub.restore(); + }); + + it('should handle aem.page', async () => { + const el = document.querySelector('div'); + const searchParams = createTestParams('https://main--federal--adobecom.aem.page/langstore/en/drafts/test-one-page'); + const windowOpenStub = sinon.stub(window, 'open'); + + const result = await init(el, `?${searchParams.toString()}`); + expect(result).to.be.true; + + // select the radio button stage + const radioButtons = el.querySelectorAll('.radio-group input[type="radio"]'); + radioButtons[0].checked = true; + + // Trigger rollout button click + const rolloutBtn = el.querySelector('.rollout-btn'); + rolloutBtn.click(); + + expect(windowOpenStub.called).to.be.true; + + const lastUrl = new URL(windowOpenStub.firstCall.args[0]); + expect(lastUrl.hostname).to.equal('main--federal--adobecom.aem.page'); + expect(lastUrl.searchParams.get('milolibs')).to.equal('milostudio-stage'); + + // Restore original window.open + windowOpenStub.restore(); + }); +}); diff --git a/test/blocks/section-metadata/mocks/body.html b/test/blocks/section-metadata/mocks/body.html index 923d0be2b1d..427d59ad435 100644 --- a/test/blocks/section-metadata/mocks/body.html +++ b/test/blocks/section-metadata/mocks/body.html @@ -130,6 +130,30 @@
      +
      +
      +
      +
      +
      +
      +
      +

      + + + +

      +

      Body M 18/27 Lorem ipsum dolor sit amet, consectetur adipiscing elit. no-delay

      +

      Call to action

      +
      +
      +
      + +
      +
      + +
      diff --git a/test/blocks/section-metadata/section-meta.test.js b/test/blocks/section-metadata/section-meta.test.js index e2a11f17d02..e22264529a2 100644 --- a/test/blocks/section-metadata/section-meta.test.js +++ b/test/blocks/section-metadata/section-meta.test.js @@ -83,6 +83,9 @@ describe('Section Metdata', () => { const sm = sec.querySelector('.section-metadata'); await init(sm); expect(main.lastElementChild.classList.contains('hide-sticky-section')).to.be.true; + window.scrollTo(0, document.body.scrollHeight); + await delay(500); + expect(main.lastElementChild.classList.contains('fill-sticky-section')).to.be.true; }); it('Handles delay in loading the promobar', async () => { @@ -94,6 +97,14 @@ describe('Section Metdata', () => { expect(sec.classList.contains('hide-sticky-section')).not.to.be.true; }); + it('add promobar behaviour to be visible when no-delay', async () => { + const main = document.querySelector('main'); + const sec = document.querySelector('.section.sticky-bottom-no-delay .promobar').closest('.section'); + const sm = sec.querySelector('.section-metadata'); + await init(sm); + expect(main.lastElementChild.classList.contains('hide-sticky-section')).to.be.false; + }); + it('should calculate the top position based on header height', async () => { const sec = document.querySelector('.section.sticky-top'); const header = document.createElement('header'); @@ -107,4 +118,12 @@ describe('Section Metdata', () => { await delay(700); expect(sec.style.top).to.be.eql('77px'); }); + + it('adds an anchor', async () => { + const sec = document.querySelector('.section.anchor'); + const sm = sec.querySelector('.section-metadata'); + await init(sm); + expect(sec.id).to.be.eql('anchor-test'); + expect(sec.classList.contains('section-anchor')).to.be.true; + }); }); diff --git a/test/blocks/table/mocks/body.html b/test/blocks/table/mocks/body.html index 6fb93feb80a..2d15dff0fce 100644 --- a/test/blocks/table/mocks/body.html +++ b/test/blocks/table/mocks/body.html @@ -510,7 +510,7 @@

      Add a business stamp

      -

      +

      diff --git a/test/blocks/table/mocks/placeholders.json b/test/blocks/table/mocks/placeholders.json new file mode 100644 index 00000000000..1ff68100ae0 --- /dev/null +++ b/test/blocks/table/mocks/placeholders.json @@ -0,0 +1,8 @@ +{ + "data": [ + { + "key": "choose-table-column", + "value": "choose table column" + } + ] +} diff --git a/test/blocks/table/table.test.js b/test/blocks/table/table.test.js index 0245bba6638..6810a28ca0a 100644 --- a/test/blocks/table/table.test.js +++ b/test/blocks/table/table.test.js @@ -1,10 +1,15 @@ import { readFile, sendMouse, sendKeys, resetMouse } from '@web/test-runner-commands'; import { expect } from 'chai'; -import { MILO_EVENTS } from '../../../libs/utils/utils.js'; +import { getConfig, MILO_EVENTS, setConfig } from '../../../libs/utils/utils.js'; import { delay, waitForElement } from '../../helpers/waitfor.js'; +import { replaceKey } from '../../../libs/features/placeholders.js'; document.body.innerHTML = await readFile({ path: './mocks/body.html' }); const { default: init } = await import('../../../libs/blocks/table/table.js'); +const locales = { '': { ietf: 'en-US', tk: 'hah7vzn.css' } }; +const conf = { locales, contentRoot: '/test/blocks/table/mocks' }; +setConfig(conf); +const config = getConfig(); describe('table and tablemetadata', () => { beforeEach(() => { @@ -111,5 +116,36 @@ describe('table and tablemetadata', () => { expect(tooltipHeading.childNodes.length).to.equal(2); expect(tooltipHeading.querySelector('.milo-tooltip, .icon-tooltip')).to.exist; }); + + it('should apply aria-label to all selects within .filters on mobile', async () => { + window.innerWidth = 375; + window.dispatchEvent(new Event('resize')); + const ariaLabel = await replaceKey('choose-table-column', config); + const selectElements = document.querySelectorAll('.filters select'); + + selectElements.forEach((selectElement) => { + expect(selectElement.getAttribute('aria-label')).to.equal(ariaLabel); + }); + }); + + it('should show and hide tooltip on hover, focus, and Escape key', async () => { + const tooltip = document.querySelector('.milo-tooltip'); + expect(tooltip).to.exist; + + tooltip.dispatchEvent(new Event('mouseenter')); + expect(tooltip.classList.contains('hide-tooltip')).to.be.false; + + tooltip.dispatchEvent(new Event('mouseleave')); + expect(tooltip.classList.contains('hide-tooltip')).to.be.true; + + tooltip.dispatchEvent(new Event('focus')); + expect(tooltip.classList.contains('hide-tooltip')).to.be.false; + + tooltip.dispatchEvent(new Event('blur')); + expect(tooltip.classList.contains('hide-tooltip')).to.be.true; + + await sendKeys({ press: 'Escape' }); + expect(tooltip.classList.contains('hide-tooltip')).to.be.true; + }); }); }); diff --git a/test/blocks/tabs/mocks/body.html b/test/blocks/tabs/mocks/body.html index 2763172d120..7a922eb2ac2 100644 --- a/test/blocks/tabs/mocks/body.html +++ b/test/blocks/tabs/mocks/body.html @@ -306,3 +306,114 @@

      Tab by index label free

      + +
      +

      Stacked Mobile Tabs

      +
      +
      +
      +
        +
      • Tab, stacked-1
      • +
      • Tab, stacked-2
      • +
      +
      +
      +
      +
      +
      +

      Here is Tab 1

      + +
      +
      +

      Here is Tab 2

      + +
      +

      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur posuere dignissim leo quis rhoncus. Suspendisse potenti. Nulla ac dolor dui. Vivamus posuere porttitor lectus, et vestibulum nisi varius cursus. Phasellus bibendum non lectus sit amet bibendum. Vivamus dapibus ultrices nisi. Praesent consequat lorem vitae gravida suscipit. Sed facilisis lacinia neque, ac tincidunt ex placerat a. Vivamus ultrices arcu sed laoreet tincidunt.

      + + +
      +
      +
      +
      +
        +
      1. Individuals
      2. +
      3. Business
      4. +
      5. Students
      6. +
      +
      +
      +
      +
      active tab
      +
      1
      +
      +
      +
      id
      +
      colored
      +
      +
      +
      + +
      +

      Individuals content

      + +
      + +
      +

      Business content

      + +
      + +
      +

      Students content

      + +
      + diff --git a/test/blocks/tabs/tabs.test.js b/test/blocks/tabs/tabs.test.js index 541db35ba5d..950c24f7723 100644 --- a/test/blocks/tabs/tabs.test.js +++ b/test/blocks/tabs/tabs.test.js @@ -8,7 +8,7 @@ const MOBILE_WIDTH = 375; const HEIGHT = 1500; document.body.innerHTML = await readFile({ path: './mocks/body.html' }); -const { default: init } = await import('../../../libs/blocks/tabs/tabs.js'); +const { default: init, getRedirectionUrl, assignLinkedTabs } = await import('../../../libs/blocks/tabs/tabs.js'); loadStyle('../../../libs/blocks/tabs/tabs.css'); describe('tabs', () => { @@ -24,9 +24,12 @@ describe('tabs', () => { }); it('clicks on a tabList button', async () => { - const unSelectedBtn = allTabs[0].querySelector('div[role="tablist"] button[aria-selected="false"]'); - unSelectedBtn.click(); - expect(unSelectedBtn.ariaSelected).to.equal('true'); + const selectedButton = allTabs[0].querySelector('div[role="tablist"] button[aria-selected="true"]'); + const unselectedButton = allTabs[0].querySelectorAll('div[role="tablist"] button[aria-selected="false"]'); + unselectedButton[0].click(); + expect(unselectedButton[0].ariaSelected).to.equal('true'); + expect(selectedButton.ariaSelected).to.equal('false'); + expect(unselectedButton[1].ariaSelected).to.equal('false'); }); it('focus on tabList button, ArrowRight key to next tab and Enter key to select aria', async () => { @@ -94,4 +97,78 @@ describe('tabs', () => { expect(tabList.scrollLeft).to.equal(0); }); + + describe('stacked mobile variant', () => { + it('scrolls the window to the selected tab content', async () => { + setViewport({ width: MOBILE_WIDTH, height: HEIGHT }); + window.dispatchEvent(new Event('resize')); + const oldPosition = window.scrollY; + document.querySelector('#stacked-mobile .tabList button').click(); + await delay(50); + const newPosition = window.scrollY; + expect(newPosition).to.be.above(oldPosition); + }); + }); + + describe('tabs with background color', () => { + it('sets the background color of the active tab', async () => { + const coloredTabs = document.querySelector('#colored'); + const tabs = coloredTabs.querySelectorAll('button[role="tab"]'); + expect(coloredTabs).to.exist; + expect(tabs[0].style.backgroundColor).to.equal('rgb(255, 0, 0)'); + expect(tabs[1].style.backgroundColor).to.equal(''); + expect(tabs[2].style.backgroundColor).to.equal(''); + tabs[1].click(); + expect(tabs[0].style.backgroundColor).to.equal(''); + expect(tabs[1].style.backgroundColor).to.equal('rgb(255, 255, 0)'); + expect(tabs[2].style.backgroundColor).to.equal(''); + tabs[2].click(); + expect(tabs[0].style.backgroundColor).to.equal(''); + expect(tabs[1].style.backgroundColor).to.equal(''); + expect(tabs[2].style.backgroundColor).to.equal('rgb(255, 165, 0)'); + }); + + it('sets tab panel IDs and data-nested-lh attributes', () => { + const tabPanels = document.querySelectorAll('#colored div[role="tabpanel"]'); + tabPanels.forEach((panel, index) => { + expect(panel.id).to.equal(`tab-panel-colored-${index + 1}`); + }); + expect(tabPanels[0].getAttribute('data-nested-lh')).to.equal('t1Ind'); + expect(tabPanels[1].getAttribute('data-nested-lh')).to.equal('t2Bus'); + expect(tabPanels[2].getAttribute('data-nested-lh')).to.equal('t3Stu'); + }); + }); + + describe('Tabs linked to pages', () => { + it('returns an empty string when targetId or linked page are not valid', () => { + expect(getRedirectionUrl({ 'tab-1': '/testpage-1' }, '')).to.equal(''); + expect(getRedirectionUrl({ 'tab-1': '/testpage-1' }, 'id-without-linked-page')).to.equal(''); + }); + + it('replaces window.location.pathname with the linked page url', () => { + const url = getRedirectionUrl({ 'tab-1': '/testpage-1' }, 'tab-1'); + expect(url.pathname).to.equal('/testpage-1'); + }); + + it('does not save any data to linkedTabs object if invalid input', () => { + const linkedTabsList = {}; + assignLinkedTabs(linkedTabsList, {}, '', ''); + expect(linkedTabsList).to.deep.equal({}); + assignLinkedTabs(linkedTabsList, { link: '/testpage' }, '', ''); + expect(linkedTabsList).to.deep.equal({}); + assignLinkedTabs(linkedTabsList, { link: '/testpage' }, 'id', ''); + expect(linkedTabsList).to.deep.equal({}); + assignLinkedTabs(linkedTabsList, { link: 'invalid link' }, 'id', 'val'); + expect(linkedTabsList).to.deep.equal({}); + }); + + it('saves tab id and tab link into linkedTabs object', () => { + const linkedTabsList = {}; + const metaSettings = { link: '/testpage-1' }; + const id = '1'; + const val = 'demo'; + assignLinkedTabs(linkedTabsList, metaSettings, id, val); + expect(linkedTabsList).to.deep.equal({ 'tab-1-demo': '/testpage-1' }); + }); + }); }); diff --git a/test/blocks/timeline/mocks/brokensegmentclass.html b/test/blocks/timeline/mocks/brokensegmentclass.html new file mode 100644 index 00000000000..acba31bd95a --- /dev/null +++ b/test/blocks/timeline/mocks/brokensegmentclass.html @@ -0,0 +1,22 @@ +
      +
      +
      +

      linear-gradient(to right, #E63888 0, #E9740A 100%)

      +

      Day 1

      +

      If you start your free trial today | 14 -day free trial

      +
      +
      +
      +
      +

      #FFCE2E

      +

      Day 8

      +

      Your subscription starts and billing begins | 7 -day full refund period

      +
      +
      +
      +
      +

      Day 21

      +

      Full refund period ends

      +
      +
      +
      diff --git a/test/blocks/timeline/mocks/segmentclasses.html b/test/blocks/timeline/mocks/segmentclasses.html new file mode 100644 index 00000000000..f00d2e3dd38 --- /dev/null +++ b/test/blocks/timeline/mocks/segmentclasses.html @@ -0,0 +1,22 @@ +
      +
      +
      +

      linear-gradient(to right, #E63888 0, #E9740A 100%)

      +

      Day 1

      +

      If you start your free trial today | 14 -day free trial

      +
      +
      +
      +
      +

      #FFCE2E

      +

      Day 8

      +

      Your subscription starts and billing begins | 7 -day full refund period

      +
      +
      +
      +
      +

      Day 21

      +

      Full refund period ends

      +
      +
      +
      diff --git a/test/blocks/timeline/timeline.test.js b/test/blocks/timeline/timeline.test.js index 204f3719a6b..17478d3794b 100644 --- a/test/blocks/timeline/timeline.test.js +++ b/test/blocks/timeline/timeline.test.js @@ -41,7 +41,7 @@ describe('Timeline', () => { expect(trialPeriod.textContent).to.equal('7-day free trial'); expect(refundPeriod.textContent).to.equal('14-day full refund period'); - expect(trialPeriod.style.background.includes('to right')).to.true; + expect(trialPeriod.style.background.includes('to right')).to.be.true; }); it('it sets bar background colors based on colors in free trial and refund period section', async () => { const timelineEl = document.querySelector('.timeline'); @@ -59,19 +59,48 @@ describe('Timeline', () => { const trialPeriod = timelineEl.querySelector('.row .left .period'); expect(trialPeriod.style.background.includes('to left')).to.be.true; }); - describe('Timeline', () => { + describe('rtl ', () => { beforeEach(async () => { document.body.innerHTML = await readFile({ path: './mocks/switchcolors.html' }); }); afterEach(() => { document.body.innerHTML = ''; }); - it('handles linear-gradient for either side', async () => { + it('updates linear-gradient for rtl', async () => { const timelineEl = document.querySelector('.timeline'); init(timelineEl); const refundPeriod = timelineEl.querySelector('.row .right .period'); expect(refundPeriod.textContent).to.equal('14-day full refund period'); - expect(refundPeriod.style.background.includes('to left')).to.true; + expect(refundPeriod.style.background.includes('to left')).to.be.true; + }); + }); + describe('segment classes', () => { + beforeEach(async () => { + document.body.innerHTML = await readFile({ path: './mocks/segmentclasses.html' }); + }); + afterEach(() => { + document.body.innerHTML = ''; + }); + it('adds classes to handle center text alignment', async () => { + const timelineEl = document.querySelector('.timeline'); + init(timelineEl); + const leftCenter = timelineEl.querySelector('.row .left-center'); + const rightCenter = timelineEl.querySelector('.row .right-center'); + expect(rightCenter).to.exist; + expect(leftCenter).to.exist; + }); + }); + describe('broken segment classes', () => { + beforeEach(async () => { + document.body.innerHTML = await readFile({ path: './mocks/brokensegmentclass.html' }); + }); + afterEach(() => { + document.body.innerHTML = ''; + }); + it('replaces broken segment class width segment-timeline-6-6', async () => { + const timelineEl = document.querySelector('.timeline'); + init(timelineEl); + expect(timelineEl.classList.contains('segment-timeline-6-6')).to.be.true; }); }); }); diff --git a/test/features/branch-quick-links/branch-quick-links.test.js b/test/features/branch-quick-links/branch-quick-links.test.js new file mode 100644 index 00000000000..f86a71da137 --- /dev/null +++ b/test/features/branch-quick-links/branch-quick-links.test.js @@ -0,0 +1,51 @@ +import { readFile } from '@web/test-runner-commands'; +import { expect } from '@esm-bundle/chai'; +import sinon from 'sinon'; +import processQuickLink from '../../../libs/features/branch-quick-links/branch-quick-links.js'; + +window.lana = { log: sinon.stub() }; + +describe('branch quick links', () => { + beforeEach(async () => { + window.adobePrivacy = { + hasUserProvidedConsent: () => true, + activeCookieGroups: () => ['C0002', 'C0004'], + }; + document.head.innerHTML = await readFile({ path: '../../../test/utils/mocks/head.html' }); + document.body.innerHTML = await readFile({ path: '../../../test/utils/mocks/body.html' }); + }); + + afterEach(() => { + sinon.restore(); + }); + + it('should add a class to the quick link', async () => { + window.alloy = () => Promise.resolve({ identity: { ECID: '123' } }); + const quickLink = document.querySelector('a[href*="app.link"]'); + processQuickLink(quickLink); + quickLink.href = '#'; + await quickLink.click(); + window.dispatchEvent(new CustomEvent('adobePrivacy:PrivacyConsent')); + window.dispatchEvent(new CustomEvent('adobePrivacy:PrivacyCustom')); + window.dispatchEvent(new CustomEvent('adobePrivacy:PrivacyReject')); + expect(quickLink.classList.contains('quick-link')).to.be.true; + }); + + it('should throw an error while fetching ecid', async () => { + window.alloy = () => Promise.reject(new Error('Error fetching ECID')); + const quickLink = document.querySelector('a[href*="app.link"]'); + processQuickLink(quickLink); + quickLink.href = '#'; + await quickLink.click(); + }); + + describe('case: alloy is undefined', async () => { + it('should not add ecid if alloy is undefined', async () => { + window.alloy = undefined; + const quickLink = document.querySelector('a'); + processQuickLink(quickLink); + await quickLink.click(); + expect(quickLink.href.includes('ecid')).to.be.false; + }); + }); +}); diff --git a/test/features/dynamic-nav/dynamicNav.test.js b/test/features/dynamic-nav/dynamicNav.test.js index a08c98ba22e..710b9c78e22 100644 --- a/test/features/dynamic-nav/dynamicNav.test.js +++ b/test/features/dynamic-nav/dynamicNav.test.js @@ -58,6 +58,24 @@ describe('Dynamic nav', () => { expect(url).to.equal('gnav/aem-sites'); }); + it('Returns the provided url when the group has not been set', async () => { + document.head.innerHTML = await readFile({ path: './mocks/on.html' }); + const url = dynamicNav('gnav/aem-sites', 'bacom'); + expect(url).to.equal('some-source-string'); + }); + + it('Returns the provided url when the group does not match', async () => { + document.head.innerHTML = await readFile({ path: './mocks/on.html' }); + const groupMeta = document.createElement('meta'); + groupMeta.setAttribute('name', 'dynamic-nav-group'); + groupMeta.setAttribute('content', 'test'); + document.head.appendChild(groupMeta); + + window.sessionStorage.setItem('dynamicNavGroup', 'no-test'); + const url = dynamicNav('gnav/aem-sites', 'bacom'); + expect(url).to.equal('gnav/aem-sites'); + }); + it('Returns the sessionStorage url when dynamic nav ignore items are present but do not match the metadata', async () => { document.head.innerHTML = await readFile({ path: './mocks/on-ignore-does-not-match.html' }); const url = dynamicNav('gnav/aem-sites', 'bacom'); @@ -75,4 +93,16 @@ describe('Dynamic nav', () => { const url = dynamicNav('gnav/aem-sites', 'bacom'); expect(url).to.equal('some-source-string'); }); + + it('Returns the sessionStorage url when the groups match', async () => { + document.head.innerHTML = await readFile({ path: './mocks/on.html' }); + const groupMeta = document.createElement('meta'); + groupMeta.setAttribute('name', 'dynamic-nav-group'); + groupMeta.setAttribute('content', 'test'); + document.head.appendChild(groupMeta); + + window.sessionStorage.setItem('dynamicNavGroup', 'test'); + const url = dynamicNav('gnav/aem-sites', 'bacom'); + expect(url).to.equal('some-source-string'); + }); }); diff --git a/test/features/dynamic-nav/status.test.js b/test/features/dynamic-nav/status.test.js index 2b9a261e61a..8cbc07b0a96 100644 --- a/test/features/dynamic-nav/status.test.js +++ b/test/features/dynamic-nav/status.test.js @@ -23,7 +23,8 @@ describe('Dynamic Nav Status', () => { beforeEach(async () => { const conf = { dynamicNavKey: 'bacom' }; document.body.innerHTML = await readFile({ path: './mocks/status.html' }); - document.head.innerHTML = ''; + document.head.innerHTML = ''; + window.sessionStorage.setItem('dynamicNavGroup', 'test'); setConfig(conf); }); @@ -47,6 +48,17 @@ describe('Dynamic Nav Status', () => { expect(statusWidget).to.exist; }); + it('does not load the widget on when gnav v2 is not present', () => { + const feds = document.querySelector('.feds-nav-wrapper'); + feds.classList.remove('feds-nav-wrapper'); + dynamicNav(); + status(); + + const statusWidget = document.querySelector('.dynamic-nav-status'); + expect(statusWidget).to.be.null; + feds.classList.add('feds-nav-wrapper'); + }); + it('loads the status widget', () => { dynamicNav(); status(); @@ -159,6 +171,73 @@ describe('Dynamic Nav Status', () => { expect(info.authoredSource).to.equal('/test'); expect(info.storedSource).to.equal('/test'); }); + + it('displays the correct information for a group match', () => { + document.querySelector('meta[name="dynamic-nav"]').setAttribute('content', 'on'); + document.querySelector('meta[name="gnav-source"]').setAttribute('content', 'https://main--milo--adobecom.hlx/test'); + + dynamicNav(); + status(); + + const statusWidget = document.querySelector('.dynamic-nav-status'); + const group = statusWidget.querySelector('.group span'); + const groupMatch = statusWidget.querySelector('.group-match span'); + + expect(group.innerText).to.equal('test'); + expect(groupMatch.innerText).to.equal('Yes'); + expect(statusWidget.classList.contains(ENABLED)).to.be.true; + }); + + it('displays the correct information for a group mismatch', () => { + document.querySelector('meta[name="dynamic-nav"]').setAttribute('content', 'on'); + document.querySelector('meta[name="gnav-source"]').setAttribute('content', 'https://main--milo--adobecom.hlx/test'); + + window.sessionStorage.setItem('dynamicNavGroup', 'no-test'); + + dynamicNav(); + status(); + + const statusWidget = document.querySelector('.dynamic-nav-status'); + const group = statusWidget.querySelector('.group span'); + const groupMatch = statusWidget.querySelector('.group-match span'); + + expect(group.innerText).to.equal('test'); + expect(groupMatch.innerText).to.equal('No'); + expect(statusWidget.classList.contains(INACTIVE)).to.be.true; + }); + + it('displays the correct information for no group being set', () => { + document.querySelector('meta[name="dynamic-nav"]').setAttribute('content', 'on'); + document.querySelector('meta[name="gnav-source"]').setAttribute('content', 'https://main--milo--adobecom.hlx/test'); + + document.querySelector('meta[name="dynamic-nav-group"]').remove(); + window.sessionStorage.setItem('dynamicNavGroup', 'no-test'); + + dynamicNav(); + status(); + + const statusWidget = document.querySelector('.dynamic-nav-status'); + const group = statusWidget.querySelector('.group span'); + const groupMatch = statusWidget.querySelector('.group-match span'); + + expect(group.innerText).to.equal('Group not set'); + expect(groupMatch.innerText).to.equal('No'); + }); + + it('remains active when there is no group match but the nav is active', () => { + document.querySelector('meta[name="dynamic-nav"]').setAttribute('content', 'on'); + document.querySelector('meta[name="gnav-source"]').setAttribute('content', 'https://main--milo--adobecom.hlx/test'); + + document.querySelector('meta[name="dynamic-nav-group"]').remove(); + window.sessionStorage.setItem('dynamicNavGroup', 'no-test'); + window.sessionStorage.setItem('gnavSource', GNAV_SOURCE); + + dynamicNav(); + status(); + + const statusWidget = document.querySelector('.dynamic-nav-status'); + expect(statusWidget.classList.contains(ACTIVE)).to.be.true; + }); }); describe('disabled values', () => { diff --git a/test/features/georoutingv2/georoutingv2.test.js b/test/features/georoutingv2/georoutingv2.test.js index bab9b39c141..ba831e875d5 100644 --- a/test/features/georoutingv2/georoutingv2.test.js +++ b/test/features/georoutingv2/georoutingv2.test.js @@ -4,8 +4,7 @@ import { setViewport } from '@web/test-runner-commands'; const { default: init, getCookie } = await import('../../../libs/features/georoutingv2/georoutingv2.js'); let { getMetadata } = await import('../../../libs/utils/utils.js'); -const { getFederatedContentRoot } = await import('../../../libs/utils/federated.js'); -const { createTag, loadStyle, loadBlock, setConfig } = await import('../../../libs/utils/utils.js'); +const { createTag, loadStyle, loadBlock, setConfig, getFederatedContentRoot } = await import('../../../libs/utils/utils.js'); const mockConfig = { locales: { @@ -204,6 +203,8 @@ const ogInnerHeight = window.innerHeight; const ogFetch = window.fetch; window.fetch = stub(); +const v2JSONPromise = () => fetch('/georoutingv2.json'); + function stubHeadRequestToReturnVal(prefix, val) { const path = window.location.href.replace(`${window.location.origin}`, ''); window.fetch.withArgs(`${prefix}${path}`, { method: 'HEAD' }).returns( @@ -305,7 +306,7 @@ describe('GeoRouting', () => { it('Does create a modal if detected country from IP is CH and url prefix is US', async () => { // prepare - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); // assert expect(modal).to.not.be.null; @@ -315,7 +316,7 @@ describe('GeoRouting', () => { // prepare setUserCountryFromIP('US'); document.cookie = 'international=us;path=/;'; - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); // assert expect(modal).to.be.null; @@ -326,7 +327,7 @@ describe('GeoRouting', () => { it('Shows no modal if aiming for CH page and IP in Switzerland', async () => { // prepare mockConfig.locale.prefix = 'ch_de'; - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); // assert expect(modal).to.be.null; @@ -336,7 +337,7 @@ describe('GeoRouting', () => { it('If aiming for US page but IP in Switzerland shows CH links and US continue', async () => { // prepare - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); // assert expect(modal).to.not.be.null; @@ -368,7 +369,7 @@ describe('GeoRouting', () => { it('If aiming for US page but IP in Egypt arabic content in geo routing modal is in rtl', async () => { // prepare setUserCountryFromIP('EG'); - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); // assert expect(modal).to.not.be.null; @@ -388,7 +389,7 @@ describe('GeoRouting', () => { it('If aiming for US page but IP in Egypt english content in geo routing modal is in ltr', async () => { // prepare setUserCountryFromIP('EG'); - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); // assert expect(modal).to.not.be.null; @@ -409,7 +410,7 @@ describe('GeoRouting', () => { // prepare mockConfig.locale.prefix = 'eg_ar'; setUserCountryFromIP('US'); - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); const wrapper = document.querySelector('.georouting-wrapper'); // assert @@ -426,7 +427,7 @@ describe('GeoRouting', () => { mockConfig.locale.prefix = '/ch_fr'; setUserCountryFromIP('US'); document.cookie = 'international=de;path=/;'; - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const wrapper = document.querySelector('.georouting-wrapper'); // assert const swissFrenchData = mockGeoroutingJson.georouting.data.find((d) => d.prefix === 'ch_fr'); @@ -444,7 +445,7 @@ describe('GeoRouting', () => { // prepare mockConfig.locale.prefix = 'mena_en'; setUserCountryFromIP('BW'); - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const wrapper = document.querySelector('.georouting-wrapper'); // assert const tabs = wrapper.querySelectorAll('.tabpanel'); @@ -465,7 +466,7 @@ describe('GeoRouting', () => { mockConfig.locale.prefix = 'mena_en'; setUserCountryFromIP('BW'); document.cookie = 'international=ch_de;path=/'; - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const wrapper = document.querySelector('.georouting-wrapper'); // assert const tabs = wrapper.querySelectorAll('.tabpanel'); @@ -485,7 +486,7 @@ describe('GeoRouting', () => { // prepare mockConfig.locale.prefix = 'ch_de'; document.cookie = 'international=ch_fr;path=/;'; - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); // assert mockConfig.locale.prefix = ''; @@ -495,7 +496,7 @@ describe('GeoRouting', () => { it('If IP is from an unknown country no modal is show', async () => { // prepare setUserCountryFromIP('NOEXIST'); - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); // assert expect(modal).to.be.null; @@ -507,7 +508,7 @@ describe('GeoRouting', () => { // prepare stubFallbackMetadata('off'); stubHeadRequestToReturnVal('/ch_it', false); - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); // assert const tabs = modal.querySelectorAll('.tabpanel'); @@ -534,7 +535,7 @@ describe('GeoRouting', () => { it('Will show fallback links if fallbackrouting is on and page exist request fails', async () => { // prepare stubHeadRequestToReturnVal('/ch_it', false); - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); // assert expect(modal).to.not.be.null; @@ -550,7 +551,7 @@ describe('GeoRouting', () => { stubHeadRequestToReturnVal('/ch_de', false); stubHeadRequestToReturnVal('/ch_it', false); stubHeadRequestToReturnVal('/ch_fr', false); - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); // assert expect(modal).to.be.null; @@ -562,7 +563,7 @@ describe('GeoRouting', () => { }); it('Closes picker if picker open and then clicking somewhere else within the modal', async () => { - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); const cookie = getCookie('international'); // assert @@ -583,7 +584,7 @@ describe('GeoRouting', () => { it('Add class .top to picker when there is no space to render below the trigger button', async () => { await setViewport({ width: 600, height: 100 }); - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); const links = modal.querySelectorAll('a'); links[0].click(); @@ -594,7 +595,7 @@ describe('GeoRouting', () => { it('Sets international and georouting_presented cookies on link click in modal', async () => { // prepare - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); const cookie = getCookie('international'); // assert @@ -610,7 +611,7 @@ describe('GeoRouting', () => { it('Does not open georouting modal if georouting hide is active', async () => { // prepare setGeorouting('off'); - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); // assert expect(modal).to.be.null; @@ -622,7 +623,7 @@ describe('GeoRouting', () => { stubFetchForGeorouting(false); stubFetchForGeoroutingOld(false); stubFetchForFederalGeorouting(); - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); expect(modal).to.not.be.null; }); @@ -630,7 +631,7 @@ describe('GeoRouting', () => { it('Will load old georouting modal if georoutingv2 is not found', async () => { stubFetchForGeorouting(false); stubFetchForGeoroutingOld(true); - await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle); + await init(mockConfig, createTag, getMetadata, loadBlock, loadStyle, v2JSONPromise()); const modal = document.querySelector('.dialog-modal'); expect(modal).to.not.be.null; }); diff --git a/test/features/icons/icons.test.js b/test/features/icons/icons.test.js index cd355a0affe..669551a807f 100644 --- a/test/features/icons/icons.test.js +++ b/test/features/icons/icons.test.js @@ -14,7 +14,7 @@ document.body.innerHTML = await readFile({ path: './mocks/body.html' }); let icons; -describe('Icon Suppprt', () => { +describe('Icon Support', () => { let paramsGetStub; before(() => { @@ -27,34 +27,140 @@ describe('Icon Suppprt', () => { }); before(async () => { + document.body.innerHTML = await readFile({ path: './mocks/body.html' }); icons = document.querySelectorAll('span.icon'); await loadIcons(icons, config); - await loadIcons(icons, config); // Test duplicate icon not created if run twice + }); + + it('Handles tooltip- prefix correctly', async () => { + const tooltipIcon = createTag('span', { class: 'icon icon-tooltip-info' }); + await loadIcons([tooltipIcon], config); + const svgIcon = tooltipIcon.querySelector(':scope svg'); + expect(svgIcon).to.exist; + + const iconName = tooltipIcon.classList[1].replace('icon-', '').replace(/tooltip-/, ''); + expect(iconName).to.equal('info'); }); it('Fetches successfully with cache control enabled', async () => { const otherIcons = [createTag('span', { class: 'icon icon-play' })]; + document.body.appendChild(otherIcons[0]); + await loadIcons(otherIcons, config); + expect(otherIcons[0].querySelector('svg')).to.exist; }); - it('Replaces span.icon', async () => { + it('Renders an SVG after loading the icons', () => { const selector = icons[0].querySelector(':scope svg'); expect(selector).to.exist; }); it('No duplicate icon', async () => { + await loadIcons(icons, config); const svgs = icons[0].querySelectorAll(':scope svg'); expect(svgs.length).to.equal(1); }); - it('Creates default tooltip', async () => { + it('Creates default tooltip (right-aligned)', () => { const tooltip = document.querySelector('.milo-tooltip.right'); expect(tooltip).to.exist; expect(tooltip.dataset.tooltip).to.equal('This is my tooltip text.'); }); - it('Creates top tooltip', async () => { + it('Creates top tooltip', () => { const tooltip = document.querySelector('.milo-tooltip.top'); expect(tooltip).to.exist; }); }); + +describe('Tooltip', () => { + let iconTooltip; + let wrapper; + let normalIcon; + + beforeEach(() => { + iconTooltip = createTag('span', { class: 'icon icon-tooltip' }); + wrapper = createTag('em', {}, 'top|This is a tooltip text.'); + wrapper.appendChild(iconTooltip); + document.body.appendChild(wrapper); + + normalIcon = createTag('span', { class: 'icon icon-play' }); + document.body.appendChild(normalIcon); + }); + + afterEach(() => { + document.body.innerHTML = ''; + }); + + it('Should only decorate icons with "icon-tooltip" class', async () => { + await loadIcons([iconTooltip, normalIcon], config); + + expect(iconTooltip.dataset.tooltip).to.equal('This is a tooltip text.'); + expect(iconTooltip.classList.contains('milo-tooltip')).to.be.true; + expect(normalIcon.dataset.tooltip).to.be.undefined; + expect(normalIcon.classList.contains('milo-tooltip')).to.be.false; + }); + + it('Tooltip should not be visible by default', async () => { + await loadIcons([iconTooltip], config); + + const tooltipContent = document.querySelector('.milo-tooltip[data-tooltip]'); + expect(tooltipContent).to.exist; + expect(tooltipContent.style.display).to.equal(''); + expect(tooltipContent.style.visibility).to.equal(''); + }); + + it('Tooltip should become visible on focus', async () => { + document.body.appendChild(wrapper); + await loadIcons([iconTooltip], config); + const tooltip = document.querySelector('.milo-tooltip'); + expect(tooltip).to.exist; + expect(tooltip.dataset.tooltip).to.equal('This is a tooltip text.'); + expect(tooltip.getAttribute('role')).to.equal('button'); + expect(tooltip.className).to.contain('top'); + }); + + it('Creates a tooltip without default alignment (left)', () => { + const customTooltip = createTag('span', { class: 'icon icon-tooltip milo-tooltip left', 'data-tooltip': 'Left-aligned tooltip' }); + document.body.appendChild(customTooltip); + + loadIcons([customTooltip], config); + + const tooltip = document.querySelector('.milo-tooltip.left'); + expect(tooltip).to.exist; + expect(tooltip.dataset.tooltip).to.equal('Left-aligned tooltip'); + }); + + it('Should replace wrapper with icon', async () => { + await loadIcons([iconTooltip], config); + + expect(document.body.contains(wrapper)).to.be.false; + expect(document.body.contains(iconTooltip)).to.be.true; + }); + + it('Should assign correct default icon class and name', async () => { + await loadIcons([iconTooltip], config); + expect(iconTooltip.classList.contains('icon-info')).to.be.true; + expect(iconTooltip.dataset.name).to.be.undefined; + }); + + it('Should not assign default icon class if already defined', async () => { + const customIcon = createTag('span', { class: 'icon icon-warning' }); + document.body.appendChild(customIcon); + + await loadIcons([customIcon], config); + + expect(customIcon.classList.contains('icon-warning')).to.be.true; + expect(customIcon.classList.contains('icon-info')).to.be.false; + }); + + it('Should not add tooltip if data-tooltip is missing', async () => { + const noTooltipIcon = createTag('span', { class: 'icon icon-tooltip' }); + document.body.appendChild(noTooltipIcon); + + await loadIcons([noTooltipIcon], config); + + expect(noTooltipIcon.classList.contains('milo-tooltip')).to.be.false; + expect(noTooltipIcon.dataset.tooltip).to.be.undefined; + }); +}); diff --git a/test/features/personalization/actions.test.js b/test/features/personalization/actions.test.js index 82e9fac7aeb..0508c10d8e6 100644 --- a/test/features/personalization/actions.test.js +++ b/test/features/personalization/actions.test.js @@ -80,6 +80,19 @@ describe('replace action', () => { }); }); +describe('updateAttribute action', async () => { + it('updateAttribute should add or modify a html element attribute', async () => { + let manifestJson = await readFile({ path: './mocks/actions/manifestUpdateAttribute.json' }); + manifestJson = JSON.parse(manifestJson); + setFetchResponse(manifestJson); + await init(mepSettings); + await handleCommands(manifestJson.data, undefined, true, true); + expect(document.querySelector('.marquee h2').getAttribute('class')).to.equal('added-class'); + expect(document.querySelector('.marquee strong a').getAttribute('href')).to.equal('https://www.google.com/?osi=new-parameter#_inline'); + expect(document.querySelector('.marquee em a').getAttribute('new-attribute')).to.equal('added-attribute'); + }); +}); + describe('insertAfter action', async () => { it('insertContentAfter should add fragment after target content and fragment', async () => { let manifestJson = await readFile({ path: './mocks/actions/manifestInsertAfter.json' }); @@ -231,33 +244,6 @@ describe('remove action', () => { await initFragments(removeMeFrag); expect(document.querySelector('a[href="/fragments/removeme"]')).to.be.null; }); - - it('removeContent should tag but not remove content in preview', async () => { - document.body.innerHTML = await readFile({ path: './mocks/personalization.html' }); - - let manifestJson = await readFile({ path: './mocks/actions/manifestRemove.json' }); - manifestJson = JSON.parse(manifestJson); - setFetchResponse(manifestJson); - delete config.mep; - - expect(document.querySelector('.z-pattern')).to.not.be.null; - await init({ - mepParam: '', - mepHighlight: false, - mepButton: false, - pzn: '/path/to/manifest.json', - promo: false, - target: false, - }); - - expect(document.querySelector('.z-pattern')).to.not.be.null; - expect(document.querySelector('.z-pattern').dataset.removedManifestId).to.equal('manifest.json'); - - const removeMeFrag = document.querySelector('a[href="/fragments/removeme"]'); - await initFragments(removeMeFrag); - expect(document.querySelector('a[href="/fragments/removeme"]')).to.not.be.null; - expect(document.querySelector('a[href="/fragments/removeme"]').dataset.removedManifestId).to.not.be.null; - }); }); describe('useBlockCode action', async () => { diff --git a/test/features/personalization/mocks/actions/manifestUpdateAttribute.json b/test/features/personalization/mocks/actions/manifestUpdateAttribute.json new file mode 100644 index 00000000000..66716524ae9 --- /dev/null +++ b/test/features/personalization/mocks/actions/manifestUpdateAttribute.json @@ -0,0 +1,48 @@ +{ + "total": 5, + "offset": 0, + "limit": 5, + "data": [ + { + "action": "updateattribute", + "selector": "marquee strong a href", + "page filter (optional)": "", + "param-newoffer=123": "", + "chrome": "", + "content": "https://www.google.com/" + }, + { + "action": "updateattribute", + "selector": "marquee strong a href_osi", + "page filter (optional)": "", + "param-newoffer=123": "", + "chrome": "", + "content": "new-parameter" + }, + { + "action": "updateattribute", + "selector": "marquee em a new-attribute", + "page filter (optional)": "", + "param-newoffer=123": "", + "chrome": "", + "content": "added-attribute" + }, + { + "action": "updateattribute", + "selector": "marquee h2 class", + "page filter (optional)": "", + "param-newoffer=123": "", + "chrome": "", + "content": "added-class" + }, + { + "action": "updateattribute", + "selector": ".second-marquee-title strong a href", + "page filter (optional)": "", + "param-newoffer=123": "", + "chrome": "", + "content": "thisshouldfail" + } + ], + ":type": "sheet" +} diff --git a/test/features/personalization/mocks/manifestLists/two-duplicate-manifests-one-from-target.json b/test/features/personalization/mocks/manifestLists/two-duplicate-manifests-one-from-target.json index 2436880133c..d78d5ad671e 100644 --- a/test/features/personalization/mocks/manifestLists/two-duplicate-manifests-one-from-target.json +++ b/test/features/personalization/mocks/manifestLists/two-duplicate-manifests-one-from-target.json @@ -34,6 +34,7 @@ ], "fragments": [] }, + "source": "pzn", "name": "MILO0013b - use fresh manifest over saved", "manifest": "https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/outdated-manifest.json", "manifestUrl": "https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/outdated-manifest.json", @@ -74,6 +75,7 @@ ], "fragments": [] }, + "source": "target", "manifest": "/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/outdated-manifest.json", "manifestUrl": "https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/outdated-manifest.json", "manifestPath": "/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/outdated-manifest.json" diff --git a/test/features/personalization/mocks/manifestLists/two-duplicate-manifests-other-one-from-target.json b/test/features/personalization/mocks/manifestLists/two-duplicate-manifests-other-one-from-target.json index 351c24790a0..61e5c65049b 100644 --- a/test/features/personalization/mocks/manifestLists/two-duplicate-manifests-other-one-from-target.json +++ b/test/features/personalization/mocks/manifestLists/two-duplicate-manifests-other-one-from-target.json @@ -34,6 +34,7 @@ ], "fragments": [] }, + "source": "pzn", "manifest": "/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/outdated-manifest.json", "manifestUrl": "https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/outdated-manifest.json", "manifestPath": "/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/outdated-manifest.json" @@ -76,6 +77,7 @@ "name": "MILO0013b - use fresh manifest over saved", "manifest": "https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/outdated-manifest.json", "manifestUrl": "https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/outdated-manifest.json", - "manifestPath": "/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/outdated-manifest.json" + "manifestPath": "/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/outdated-manifest.json", + "source": "target" } ] diff --git a/test/features/personalization/mocks/manifestLists/two-manifests-one-from-target.json b/test/features/personalization/mocks/manifestLists/two-manifests-one-from-target.json index 86e6ab7f39e..02d71c167c1 100644 --- a/test/features/personalization/mocks/manifestLists/two-manifests-one-from-target.json +++ b/test/features/personalization/mocks/manifestLists/two-manifests-one-from-target.json @@ -12,20 +12,33 @@ } ], "fragments": [] + }, + "target-test": { + "commands": [ + { + "action": "append", + "selector": "section1", + "pageFilter": "", + "target": "https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/fragments/test1", + "selectorType": "css" + } + ], + "fragments": [] } }, "variantNames": [ - "all" + "all", + "target-test" ], "manifestOverrideName": "", "manifestType": "test", "executionOrder": "1-2", "run": true, - "selectedVariantName": "all", + "selectedVariantName": "target-test", "selectedVariant": { "commands": [ { - "action": "appendtosection", + "action": "append", "selector": "section1", "pageFilter": "", "target": "https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/fragments/test", @@ -34,6 +47,7 @@ ], "fragments": [] }, + "source": ["target"], "name": "MILO0013 - manifest order", "manifest": "https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/test-normal.json", "manifestUrl": "https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/test-normal.json", @@ -52,10 +66,23 @@ } ], "fragments": [] + }, + "target-test": { + "commands": [ + { + "action": "appendtosection", + "selector": "section1", + "pageFilter": "", + "target": "https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/fragments/test1", + "selectorType": "css" + } + ], + "fragments": [] } }, "variantNames": [ - "all" + "all", + "target-test" ], "manifestOverrideName": "", "manifestType": "personalization", @@ -74,6 +101,7 @@ ], "fragments": [] }, + "source": ["pzn"], "manifest": "/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/pzn-normal.json", "manifestUrl": "https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/pzn-normal.json", "manifestPath": "/drafts/vgoodrich/fragments/2024/q1/mepmanifestorder/manifests/pzn-normal.json" diff --git a/test/features/personalization/mocks/manifestWithAmpersand.json b/test/features/personalization/mocks/manifestWithAmpersand.json index 1de119798f9..1ceeef32e12 100644 --- a/test/features/personalization/mocks/manifestWithAmpersand.json +++ b/test/features/personalization/mocks/manifestWithAmpersand.json @@ -23,7 +23,7 @@ "action":"replaceContent", "selector":"#notthere", "page filter (optional)":"", - "chrome & loggedout":"https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/139173-mep-and/android" + "my nickname: chrome & loggedout":"https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/139173-mep-and/android" } ] }, diff --git a/test/features/personalization/mocks/manifestWithNicknames.json b/test/features/personalization/mocks/manifestWithNicknames.json new file mode 100644 index 00000000000..c708d57c680 --- /dev/null +++ b/test/features/personalization/mocks/manifestWithNicknames.json @@ -0,0 +1,53 @@ +{ + "info": { + "total": 3, + "offset": 0, + "limit": 3, + "data": [ + { + "key": "manifest-type", + "value": "Personalization" + }, + { + "key": "manifest-override-name", + "value": "" + }, + { + "key": "manifest-execution-order", + "value": "Normal" + } + ] + }, + "experiences": { + "total": 1, + "offset": 0, + "limit": 1, + "data": [ + { + "action": "replace", + "selector": "any-header", + "page filter (optional)": "", + "target-var1": "target-var1", + "challenger 2: target-var2": "challenger 2: target-var2", + "param-nickname=false": "param-nickname=false", + "pzn2: param-nickname=true": "pzn2: param-nickname=true", + "pzn2: param-nickname=double:": "pzn2: param-nickname=double:", + "param-nickname=end:": "param-nickname=end:", + ":param-nickname=start": ":param-nickname=start" + } + ] + }, + "placeholders": { + "total": 0, + "offset": 0, + "limit": 0, + "data": [] + }, + ":version": 3, + ":names": [ + "experiences", + "info", + "placeholders" + ], + ":type": "multi-sheet" +} diff --git a/test/features/personalization/mocks/personalization.html b/test/features/personalization/mocks/personalization.html index d9aac62f619..333d5c331cb 100644 --- a/test/features/personalization/mocks/personalization.html +++ b/test/features/personalization/mocks/personalization.html @@ -185,5 +185,16 @@

      The second marquee

      /fragments/removeme

      /fragments/insertaround

      +
      +
      +

      Marquee container

      +
      + +
      diff --git a/test/features/personalization/mocks/preview.js b/test/features/personalization/mocks/preview.js index 502ddb34d14..e2de7a835eb 100644 --- a/test/features/personalization/mocks/preview.js +++ b/test/features/personalization/mocks/preview.js @@ -46,7 +46,7 @@ export default [ }, ], }, - manifest: '/homepage/fragments/mep/selected-example.json', + manifest: 'https://main--cc--homepage.hlx.page/homepage/fragments/mep/selected-example.json', manifestUrl: 'https://main--milo--adobecom.hlx.page/drafts/vgoodrich/fragments/unit-tests/manifest.json', }, { @@ -69,7 +69,7 @@ export default [ manifestOverrideName: 'hp', selectedVariantName: 'default', selectedVariant: 'default', - manifest: '/homepage/fragments/mep/default-selected.json', + manifest: 'https://main--homepage--adobecom.hlx.live/homepage/fragments/mep/default-selected.json', manifestUrl: 'https://main--homepage--adobecom.hlx.live/homepage/fragments/mep/default-selected.json', }, { @@ -100,7 +100,7 @@ export default [ }, ], }, - manifest: '/promos/2023/global/black-friday/black-friday-global.json', + manifest: 'https://main--cc--adobecom.hlx.page/promos/2023/global/black-friday/black-friday-global.json', manifestUrl: 'https://main--cc--adobecom.hlx.page/promos/2023/global/black-friday/black-friday-global.json', disabled: false, event: { @@ -116,7 +116,7 @@ export default [ start: new Date('2024-11-24T00:00:00.000Z'), end: new Date('2024-11-24T00:00:00.000Z'), }, - manifest: '/promos/2023/emea/cyber-monday/cyber-monday-emea.json', + manifest: 'https://main--cc--adobecom.hlx.page/promos/2023/emea/cyber-monday/cyber-monday-emea.json', variantNames: [ 'all', ], diff --git a/test/features/personalization/modifyNonFragmentSelector.test.js b/test/features/personalization/modifyNonFragmentSelector.test.js index 58b6813b4b2..dcd71ca1286 100644 --- a/test/features/personalization/modifyNonFragmentSelector.test.js +++ b/test/features/personalization/modifyNonFragmentSelector.test.js @@ -1,6 +1,19 @@ import { expect } from '@esm-bundle/chai'; import { modifyNonFragmentSelector } from '../../../libs/features/personalization/personalization.js'; +const attributeValue = [ + { + c: 'href', + b: 'marquee primary-cta href', + a: '.marquee strong a', + }, + { + c: 'href_osi', + b: 'marquee primary-cta href_osi', + a: '.marquee strong a', + }, +]; + const values = [ { b: 'body > main > div', @@ -160,4 +173,12 @@ describe('test different values', () => { expect(modifiers).to.deep.equal(value.m || []); }); }); + attributeValue.forEach((value) => { + it(`should return the expected value for ${value.b} and ${value.c}`, () => { + const { modifiedSelector, modifiers, attribute } = modifyNonFragmentSelector(value.b, 'updateattribute'); + expect(modifiedSelector).to.equal(value.a); + expect(modifiers).to.deep.equal(value.m || []); + expect(attribute).to.equal(value.c); + }); + }); }); diff --git a/test/features/personalization/normalizePath.test.js b/test/features/personalization/normalizePath.test.js index 7fbef4e2ce2..f4957f8632b 100644 --- a/test/features/personalization/normalizePath.test.js +++ b/test/features/personalization/normalizePath.test.js @@ -33,6 +33,11 @@ describe('normalizePath function', () => { expect(path).to.equal('/path/to/manifest.json'); }); + it('retains a hash if one is passed in', async () => { + const path = await normalizePath('https://main--milo--adobecom.hlx.page/path/to/fragment.plain.html#noActiveItem'); + expect(path).to.equal('/path/to/fragment.plain.html#noActiveItem'); + }); + it('does localize otherwise', async () => { config.locales = { de: { diff --git a/test/features/personalization/personalization.test.js b/test/features/personalization/personalization.test.js index 0f4322e7be6..213a89fc6b7 100644 --- a/test/features/personalization/personalization.test.js +++ b/test/features/personalization/personalization.test.js @@ -3,8 +3,8 @@ import { readFile } from '@web/test-runner-commands'; import { assert, stub } from 'sinon'; import { getConfig, setConfig } from '../../../libs/utils/utils.js'; import { - handleFragmentCommand, applyPers, - init, matchGlob, createContent, combineMepSources, buildVariantInfo, + handleFragmentCommand, applyPers, cleanAndSortManifestList, normalizePath, + init, matchGlob, createContent, combineMepSources, buildVariantInfo, addSectionAnchors, } from '../../../libs/features/personalization/personalization.js'; import mepSettings from './mepSettings.js'; import mepSettingsPreview from './mepPreviewSettings.js'; @@ -35,6 +35,7 @@ describe('Functional Test', () => { // Add custom keys so tests doesn't rely on real data const config = getConfig(); config.env = { name: 'prod' }; + config.locale = { ietf: 'en-US', prefix: '' }; config.consumerEntitlements = { '11111111-aaaa-bbbb-6666-cccccccccccc': 'my-special-app', '22222222-xxxx-bbbb-7777-cccccccccccc': 'fireflies', @@ -89,6 +90,13 @@ describe('Functional Test', () => { expect(document.querySelector('.custom-block-2')).to.be.null; }); + it('should not normalize absolute path to a script file, if the file is hosted in DAM', async () => { + const DAMpath = 'https://www.adobe.com/content/dam/cc/optimization/mwpw-168109/test.js'; + const nonDAMpath = 'https://www.adobe.com/foo/test.js'; + expect(normalizePath(DAMpath)).to.include('https://www.adobe.com'); + expect(normalizePath(nonDAMpath)).to.not.include('https://www.adobe.com'); + }); + it('scheduled manifest should apply changes if active (bts)', async () => { const config = getConfig(); config.mep = { @@ -110,7 +118,7 @@ describe('Functional Test', () => { manifestJson = JSON.parse(manifestJson); setFetchResponse(manifestJson); expect(document.querySelector('a[href="/test/features/personalization/mocks/fragments/insertafter3"]')).to.be.null; - await applyPers(promoMepSettings); + await applyPers({ manifests: promoMepSettings }); const fragment = document.querySelector('a[href="/test/features/personalization/mocks/fragments/insertafter3"]'); expect(fragment).to.not.be.null; @@ -137,7 +145,7 @@ describe('Functional Test', () => { ]; await loadManifestAndSetResponse('./mocks/manifestScheduledInactive.json'); expect(document.querySelector('a[href="/fragments/insertafter4"]')).to.be.null; - await applyPers(promoMepSettings); + await applyPers({ manifests: promoMepSettings }); const fragment = document.querySelector('a[href="/fragments/insertafter4"]'); expect(fragment).to.be.null; @@ -152,11 +160,11 @@ describe('Functional Test', () => { expect(config.mep?.martech).to.be.undefined; }); - it('should choose chrome & logged out', async () => { + it('should choose chrome & logged out (using nickname)', async () => { await loadManifestAndSetResponse('./mocks/manifestWithAmpersand.json'); await init(mepSettings); const config = getConfig(); - expect(config.mep?.martech).to.equal('|chrome & logged|ampersand'); + expect(config.mep?.martech).to.equal('|my nickname|ampersand'); }); it('should choose not firefox', async () => { @@ -166,6 +174,52 @@ describe('Functional Test', () => { expect(config.mep?.martech).to.equal('|not firefox|not'); }); + it('should not error when nickname has multiple colons', async () => { + await loadManifestAndSetResponse('./mocks/manifestWithNicknames.json'); + const tempMepSettings = { + mepParam: '/path/to/manifest.json--pzn2: param-nickname=double:', + mepHighlight: false, + mepButton: false, + pzn: '/path/to/manifest.json', + promo: false, + target: false, + }; + await init(tempMepSettings); + const config = getConfig(); + console.log('test: ', config); + expect(config.mep?.martech).to.equal('|pzn2|manifest'); + }); + + it('should not error when name nickname is empty', async () => { + await loadManifestAndSetResponse('./mocks/manifestWithNicknames.json'); + const tempMepSettings = { + mepParam: '/path/to/manifest.json--:param-nickname=start', + mepHighlight: false, + mepButton: false, + pzn: '/path/to/manifest.json', + promo: false, + target: false, + }; + await init(tempMepSettings); + const config = getConfig(); + expect(config.mep?.martech).to.equal('|:param-nickname|manifest'); + }); + + it('should show nickname instead of original audience when using nicknames syntax', async () => { + await loadManifestAndSetResponse('./mocks/manifestWithNicknames.json'); + const tempMepSettings = { + mepParam: '/path/to/manifest.json--pzn2: param-nickname=true', + mepHighlight: false, + mepButton: false, + pzn: '/path/to/manifest.json', + promo: false, + target: false, + }; + await init(tempMepSettings); + const config = getConfig(); + expect(config.mep?.martech).to.equal('|pzn2|manifest'); + }); + it('should read and use entitlement data', async () => { setConfig(getConfig()); const config = getConfig(); @@ -323,6 +377,12 @@ describe('Functional Test', () => { expect(document.querySelector('meta[property="og:title"]').content).to.equal('New Title'); expect(document.querySelector('meta[property="og:image"]').content).to.equal('https://adobe.com/path/to/image.jpg'); }); + + it('will add id to the section div', async () => { + addSectionAnchors(document); + const sectionWithId = document.querySelector('#marquee-container'); + expect(sectionWithId).to.exist; + }); }); describe('matchGlob function', () => { @@ -396,4 +456,28 @@ describe('MEP Utils', () => { expect(manifests[4].manifestPath).to.equal('/mep-param/manifest2.json'); }); }); + describe('cleanAndSortManifestList', async () => { + it('chooses server manifest over target manifest if same manifest path', async () => { + const config = { env: { name: 'stage' } }; + let manifests = await readFile({ path: './mocks/manifestLists/two-manifests-one-from-target.json' }); + manifests = JSON.parse(manifests); + manifests[0].manifestPath = 'same path'; + manifests[1].manifestPath = 'same path'; + const response = cleanAndSortManifestList(manifests, config); + const result = response.find((manifest) => manifest.source.length > 1); + expect(result).to.be.not.null; + expect(result.selectedVariant.commands[0].action).to.equal('appendtosection'); + }); + it('chooses target manifest over server manifest if same manifest path and in production and selected audience is "target-*"', async () => { + const config = { env: { name: 'prod' } }; + let manifests = await readFile({ path: './mocks/manifestLists/two-manifests-one-from-target.json' }); + manifests = JSON.parse(manifests); + manifests[0].manifestPath = 'same path'; + manifests[1].manifestPath = 'same path'; + const response = cleanAndSortManifestList(manifests, config); + const result = response.find((manifest) => manifest.source.length > 1); + expect(result).to.be.not.null; + expect(result.selectedVariant.commands[0].action).to.equal('append'); + }); + }); }); diff --git a/test/features/personalization/preview.test.js b/test/features/personalization/preview.test.js index 99407541df2..401f6f4d55b 100644 --- a/test/features/personalization/preview.test.js +++ b/test/features/personalization/preview.test.js @@ -3,27 +3,72 @@ import { expect } from '@esm-bundle/chai'; import experiments from './mocks/preview.js'; document.body.innerHTML = await readFile({ path: './mocks/postPersonalization.html' }); -const { default: decoratePreviewMode } = await import('../../../libs/features/personalization/preview.js'); +const { default: decoratePreviewMode, parsePageAndUrl } = await import('../../../libs/features/personalization/preview.js'); const { setConfig, MILO_EVENTS } = await import('../../../libs/utils/utils.js'); const config = { miloLibs: 'https://main--milo--adobecom.hlx.live/libs', codeRoot: 'https://main--homepage--adobecom.hlx.live/homepage', + locale: { + ietf: 'en-US', + tk: 'hah7vzn.css', + prefix: '', + region: 'us', + contentRoot: 'https://main--cc--adobecom.hlx.page/cc-shared', + }, mep: { preview: true, override: '', highlight: true, + experiments: [], + targetEnabled: true, + prefix: '', + }, + stageDomainsMap: { + 'www.stage.adobe.com': { + 'www.adobe.com': 'origin', + 'business.adobe.com': 'business.stage.adobe.com', + 'helpx.adobe.com': 'helpx.stage.adobe.com', + 'blog.adobe.com': 'blog.stage.adobe.com', + 'developer.adobe.com': 'developer-stage.adobe.com', + 'news.adobe.com': 'news.stage.adobe.com', + 'firefly.adobe.com': 'firefly-stage.corp.adobe.com', + 'creativecloud.adobe.com': 'stage.creativecloud.adobe.com', + 'projectneo.adobe.com': 'stg.projectneo.adobe.com', + }, + '--cc--adobecom.hlx.live': { + 'www.adobe.com': 'origin', + 'business.adobe.com': 'business.stage.adobe.com', + 'helpx.adobe.com': 'helpx.stage.adobe.com', + 'blog.adobe.com': 'blog.stage.adobe.com', + 'developer.adobe.com': 'developer-stage.adobe.com', + 'news.adobe.com': 'news.stage.adobe.com', + 'firefly.adobe.com': 'firefly-stage.corp.adobe.com', + 'creativecloud.adobe.com': 'stage.creativecloud.adobe.com', + 'projectneo.adobe.com': 'stg.projectneo.adobe.com', + }, + '--cc--adobecom.hlx.page': { + 'www.adobe.com': 'origin', + 'business.adobe.com': 'business.stage.adobe.com', + 'helpx.adobe.com': 'helpx.stage.adobe.com', + 'blog.adobe.com': 'blog.stage.adobe.com', + 'developer.adobe.com': 'developer-stage.adobe.com', + 'news.adobe.com': 'news.stage.adobe.com', + 'firefly.adobe.com': 'firefly-stage.corp.adobe.com', + 'creativecloud.adobe.com': 'stage.creativecloud.adobe.com', + 'projectneo.adobe.com': 'stg.projectneo.adobe.com', + }, }, + env: { name: 'stage' }, }; setConfig(config); describe('preview feature', () => { - it('builds with 0 manifests', () => { - decoratePreviewMode(); + it('builds with 0 manifests', async () => { + await decoratePreviewMode(); const event = new Event(MILO_EVENTS.DEFERRED); document.dispatchEvent(event); expect(document.querySelectorAll('.mep-preview-overlay').length).to.equal(1); - expect(document.querySelector('.mep-popup-header h4').textContent).to.equal('0 Manifest(s) served'); }); it('expand and close panel, expand and close advance, remove button', () => { expect(document.querySelector('.mep-preview-overlay > div').className).to.equal('mep-hidden'); @@ -31,19 +76,14 @@ describe('preview feature', () => { expect(document.querySelector('.mep-preview-overlay > div').className).to.equal(''); document.querySelector('.mep-badge').click(); expect(document.querySelector('.mep-preview-overlay > div').className).to.equal('mep-hidden'); - document.querySelector('.mep-toggle-advanced').click(); - expect(document.querySelector('.mep-advanced-container').classList.contains('mep-advanced-open')).to.be.true; - document.querySelector('.mep-toggle-advanced').click(); - expect(document.querySelector('.mep-advanced-container').classList.contains('mep-advanced-open')).to.be.false; document.querySelector('.mep-close').click(); expect(document.querySelectorAll('.mep-preview-overlay').length).to.equal(0); }); - it('builds with multiple manifests', () => { + it('builds with multiple manifests', async () => { config.mep.experiments = experiments; setConfig(config); - decoratePreviewMode(); + await decoratePreviewMode(); expect(document.querySelectorAll('.mep-preview-overlay').length).to.equal(1); - expect(document.querySelector('.mep-popup-header h4').textContent).to.equal(`${config.mep.experiments.length} Manifest(s) served`); }); it('adds highlights', () => { expect(document.querySelector('[data-path="/fragments/fragmentreplaced"]').getAttribute('data-manifest-id')).to.equal('selected-example.json'); @@ -54,22 +94,61 @@ describe('preview feature', () => { expect(document.querySelector('merch-card').getAttribute('data-manifest-id')).to.equal('selected-example.json'); }); it('preselects form inputs', () => { - expect(document.querySelector('input[name="/homepage/fragments/mep/selected-example.json"][value="target-smb"]').getAttribute('checked')).to.equal('checked'); - expect(document.querySelector('input[name="/homepage/fragments/mep/default-selected.json"][value="default"]').getAttribute('checked')).to.equal('checked'); + expect(document.querySelector('option[name*="/homepage/fragments/mep/selected-example.json"][value="target-smb"]').getAttribute('selected')).to.equal(''); + expect(document.querySelector('option[name*="/homepage/fragments/mep/default-selected.json"][value="default"]').getAttribute('selected')).to.equal(''); expect(document.querySelector('input#mepHighlightCheckbox').getAttribute('checked')).to.equal('checked'); }); it('updates preview button', () => { expect(document.querySelector('a[title="Preview above choices"]').getAttribute('href')).to.contain('---'); - document.querySelector('#new-manifest').value = 'https://main--homepage--adobecom.hlx.live/homepage/fragments/mep/new-manifest.json'; - document.querySelector('input[name="/homepage/fragments/mep/selected-example.json"][value="default"]').click(); + document.querySelector('.new-manifest').value = 'https://main--homepage--adobecom.hlx.live/homepage/fragments/mep/new-manifest.json'; + document.querySelector('option[name*="/homepage/fragments/mep/selected-example.json"][value="default"]').closest('select').dispatchEvent(new Event('change')); expect(document.querySelector('a[title="Preview above choices"]').getAttribute('href')).to.contain('new-manifest.json'); - expect(document.querySelector('a[title="Preview above choices"]').getAttribute('href')).to.contain('%2Fhomepage%2Ffragments%2Fmep%2Fselected-example.json--default'); + expect(document.querySelector('a[title="Preview above choices"]').getAttribute('href')).to.contain('%2Fhomepage%2Ffragments%2Fmep%2Fselected-example.json--target-smb'); document.querySelector('input#mepHighlightCheckbox').click(); expect(document.querySelector('a[title="Preview above choices"]').getAttribute('href')).to.not.contain('mepHighlight'); document.querySelector('input#mepPreviewButtonCheckbox').click(); expect(document.querySelector('a[title="Preview above choices"]').getAttribute('href')).to.contain('mepButton=off'); expect(document.querySelector('a[title="Preview above choices"]').getAttribute('href')).to.contain('---'); }); + it('parse url and page for stage', () => { + const { url, page } = parsePageAndUrl(config, new URL('https://www.stage.adobe.com/fr/products/photoshop.html'), 'fr'); + expect(url).to.equal('https://www.adobe.com/fr/products/photoshop.html'); + expect(page).to.equal('/products/photoshop.html'); + }); + it('parse url and page for preview', () => { + const { url, page } = parsePageAndUrl(config, new URL('https://main--cc--adobecom.aem.page/fr/products/photoshop'), 'fr'); + expect(url).to.equal('https://www.adobe.com/fr/products/photoshop.html'); + expect(page).to.equal('/products/photoshop.html'); + }); + it('parse url and page for homepage preview', () => { + const { url, page } = parsePageAndUrl(config, new URL('https://main--homepage--adobecom.hlx.page/fr/homepage/index-loggedout'), 'fr'); + expect(url).to.equal('https://www.adobe.com/fr/'); + expect(page).to.equal('/'); + }); + it('parse url and page for bacom preview', () => { + config.stageDomainsMap = { 'business.stage.adobe.com': {} }; + const { url, page } = parsePageAndUrl(config, new URL('https://main--bacom--adobecom.hlx.page/fr/products/real-time-customer-data-platform/rtcdp'), 'fr'); + expect(url).to.equal('https://business.adobe.com/fr/products/real-time-customer-data-platform/rtcdp.html'); + expect(page).to.equal('/products/real-time-customer-data-platform/rtcdp.html'); + }); + it('parse url and page for prod US', () => { + config.env.name = 'prod'; + const { url, page } = parsePageAndUrl(config, new URL('https://www.adobe.com/products/photoshop.html'), ''); + expect(url).to.equal('https://www.adobe.com/products/photoshop.html'); + expect(page).to.equal('/products/photoshop.html'); + }); + it('parse url and page for prod non US', () => { + const { url, page } = parsePageAndUrl(config, new URL('https://www.adobe.com/fr/products/photoshop.html'), 'fr'); + expect(url).to.equal('https://www.adobe.com/fr/products/photoshop.html'); + expect(page).to.equal('/products/photoshop.html'); + }); + it('parse url and page for no stage map', () => { + config.env.name = 'stage'; + delete config.stageDomainsMap; + const { url, page } = parsePageAndUrl(config, new URL('https://www.stage.adobe.com/events/2024-10-31.html'), ''); + expect(url).to.equal('https://www.adobe.com/events/2024-10-31.html'); + expect(page).to.equal('/events/2024-10-31.html'); + }); it('opens manifest', () => { document.querySelector('a.mep-edit-manifest').click(); }); diff --git a/test/features/personalization/promo-utils.test.js b/test/features/personalization/promo-utils.test.js index f9fb26dffc8..35a5e7beea9 100644 --- a/test/features/personalization/promo-utils.test.js +++ b/test/features/personalization/promo-utils.test.js @@ -79,6 +79,9 @@ describe('getPromoManifests', () => { cdtEnd: undefined, cdtStart: undefined, }, + source: [ + 'promo', + ], }, { manifestPath: 'https://main--milo--adobecom.hlx.page/promos/2023/black-friday/pre-black-friday/manifest-global.json', @@ -90,6 +93,9 @@ describe('getPromoManifests', () => { cdtEnd: undefined, cdtStart: undefined, }, + source: [ + 'promo', + ], }, { manifestPath: 'https://main--milo--adobecom.hlx.page/promos/2023/black-friday/black-friday/manifest-global.json', @@ -101,21 +107,24 @@ describe('getPromoManifests', () => { cdtEnd: '2026-08-30T00:00:00', cdtStart: '2024-08-26T12:00:00', }, + source: [ + 'promo', + ], }, ]; document.head.innerHTML = await readFile({ path: './mocks/head-schedule.html' }); const manifestnames = 'pre-black-friday-global,black-friday-global,cyber-monday'; const emea = 'bf-de'; const americas = 'bf-us'; - expect(getPromoManifests( + const manifests = getPromoManifests( { manifestnames, emea_manifestnames: emea, americas_manifestnames: americas, }, new URLSearchParams(), - )) - .to.deep.eq(expectedManifests); + ); + expect(manifests).to.deep.eq(expectedManifests); }); it('should return an empty array if no schedule', async () => { diff --git a/test/features/spectrum-web-components/switch.test.html b/test/features/spectrum-web-components/switch.test.html new file mode 100644 index 00000000000..bd077b123a4 --- /dev/null +++ b/test/features/spectrum-web-components/switch.test.html @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/test/features/title-append/mocks/head-social.html b/test/features/title-append/mocks/head-social.html deleted file mode 100644 index fada36c358f..00000000000 --- a/test/features/title-append/mocks/head-social.html +++ /dev/null @@ -1,3 +0,0 @@ -Document Title - - diff --git a/test/features/title-append/mocks/head.html b/test/features/title-append/mocks/head.html deleted file mode 100644 index 4fec2c1aaad..00000000000 --- a/test/features/title-append/mocks/head.html +++ /dev/null @@ -1 +0,0 @@ -Document Title diff --git a/test/features/title-append/title-append.test.js b/test/features/title-append/title-append.test.js deleted file mode 100644 index 323eb4a233c..00000000000 --- a/test/features/title-append/title-append.test.js +++ /dev/null @@ -1,39 +0,0 @@ -import { readFile } from '@web/test-runner-commands'; -import { expect } from '@esm-bundle/chai'; - -import titleAppend from '../../../libs/features/title-append/title-append.js'; - -describe('Title Append', () => { - describe('titleAppend', () => { - beforeEach(async () => { - document.head.innerHTML = await readFile({ path: './mocks/head.html' }); - }); - - it('should not append when appendage is falsey', () => { - titleAppend(''); - expect(document.title).to.equal('Document Title'); - }); - - it('should append string to doc title', () => { - titleAppend('NOODLE'); - expect(document.title).to.equal('Document Title NOODLE'); - }); - }); - describe('titleAppend with social metdata', () => { - beforeEach(async () => { - document.head.innerHTML = await readFile({ path: './mocks/head-social.html' }); - }); - - it('should append to og:title', () => { - titleAppend('NOODLE'); - const actualTitle = document.querySelector('meta[property="og:title"]').getAttribute('content'); - expect(actualTitle).to.equal('Document Title NOODLE'); - }); - - it('should append string to twitter:title', () => { - titleAppend('NOODLE'); - const actualTitle = document.querySelector('meta[name="twitter:title"]').getAttribute('content'); - expect(actualTitle).to.equal('Document Title NOODLE'); - }); - }); -}); diff --git a/test/features/webapp-prompt/mocks/pep-prompt-content.js b/test/features/webapp-prompt/mocks/pep-prompt-content.js index 165185e344f..ef7cda26642 100644 --- a/test/features/webapp-prompt/mocks/pep-prompt-content.js +++ b/test/features/webapp-prompt/mocks/pep-prompt-content.js @@ -7,6 +7,7 @@ export default ({ animationDuration, tooltipMessage, tooltipDuration, + pauseOnHover, }) => `

      @@ -52,5 +53,9 @@ export default ({

      dismissal-tooltip-duration
      ${tooltipDuration}
      `} + ${pauseOnHover === 'on' && `
      +
      pause-on-hover
      +
      ${pauseOnHover}
      +
      `} `; diff --git a/test/features/webapp-prompt/test-utilities.js b/test/features/webapp-prompt/test-utilities.js index 8c134d60585..e4e9ff749cb 100644 --- a/test/features/webapp-prompt/test-utilities.js +++ b/test/features/webapp-prompt/test-utilities.js @@ -26,6 +26,7 @@ export const defaultConfig = { loaderDuration: 7500, redirectUrl: '#soup', productName: 'photoshop', + pauseOnHover: 'off', ...DISMISSAL_CONFIG, }; diff --git a/test/features/webapp-prompt/webapp-prompt.test.js b/test/features/webapp-prompt/webapp-prompt.test.js index e7e8308cfad..9caef729b65 100644 --- a/test/features/webapp-prompt/webapp-prompt.test.js +++ b/test/features/webapp-prompt/webapp-prompt.test.js @@ -144,39 +144,79 @@ describe('PEP', () => { describe('PEP interaction tests', () => { it('should close PEP on Escape key', async () => { + const clock = sinon.useFakeTimers(); await initPep({}); document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape' })); + clock.tick(10000); expect(document.querySelector(allSelectors.pepWrapper)).to.not.exist; + expect(window.location.hash).to.not.equal('#soup'); + clock.uninstall(); }); it('should close PEP on clicking the close icon', async () => { + const clock = sinon.useFakeTimers(); await initPep({}); document.querySelector(allSelectors.closeIcon).click(); + clock.tick(10000); expect(document.querySelector(allSelectors.pepWrapper)).to.not.exist; + expect(window.location.hash).to.not.equal('#soup'); + clock.uninstall(); }); it('should close PEP on clicking the CTA', async () => { + const clock = sinon.useFakeTimers(); await initPep({}); document.querySelector(allSelectors.cta).click(); + clock.tick(10000); expect(document.querySelector(allSelectors.pepWrapper)).to.not.exist; + expect(window.location.hash).to.not.equal('#soup'); + clock.uninstall(); }); it('should close PEP on clicking the anchor element', async () => { + const clock = sinon.useFakeTimers(); await initPep({}); document.querySelector(allSelectors.appSwitcher).click(); + clock.tick(10000); expect(document.querySelector(allSelectors.pepWrapper)).to.not.exist; + expect(window.location.hash).to.not.equal('#soup'); + clock.uninstall(); }); - it('redirects when the PEP timer runs out', async () => { + it('stops the PEP timer when mouseenter event occur on PEP content with feature pause on hover', async () => { + sinon.restore(); const clock = sinon.useFakeTimers(); + stub(window, 'fetch').callsFake(async (url) => { + if (url.includes('pep-prompt-content.plain.html')) return mockRes({ payload: pepPromptContent({ ...defaultConfig, pauseOnHover: 'on' }) }); + return null; + }); await initPep({}); + document.querySelector(allSelectors.pepWrapper).dispatchEvent(new Event('mouseenter')); + clock.tick(10000); + expect(window.location.hash).to.not.equal('#soup'); + clock.uninstall(); + }); + it('redirects when the PEP timer runs out', async () => { + const clock = sinon.useFakeTimers(); + await initPep({}); expect(window.location.hash).to.not.equal('soup'); - clock.tick(10000); - expect(window.location.hash).to.equal('#soup'); + clock.uninstall(); + }); + it('redirects when the PEP timer runs out with pause on hover', async () => { + sinon.restore(); + const clock = sinon.useFakeTimers(); + stub(window, 'fetch').callsFake(async (url) => { + if (url.includes('pep-prompt-content.plain.html')) return mockRes({ payload: pepPromptContent({ ...defaultConfig, pauseOnHover: 'on' }) }); + return null; + }); + await initPep({}); + expect(window.location.hash).to.not.equal('soup'); + clock.tick(10000); + expect(window.location.hash).to.equal('#soup'); clock.uninstall(); }); }); diff --git a/test/martech/helpers.test.js b/test/martech/helpers.test.js index 880b9ca6a5c..ffe8f8d67ed 100644 --- a/test/martech/helpers.test.js +++ b/test/martech/helpers.test.js @@ -1,5 +1,6 @@ import { expect } from 'chai'; -import { loadAnalyticsAndInteractionData } from '../../libs/martech/helpers.js'; +import sinon from 'sinon'; +import { getTargetPropertyBasedOnPageRegion, getVisitorStatus, loadAnalyticsAndInteractionData } from '../../libs/martech/helpers.js'; describe('loadAnalyticsAndInteractionData', () => { beforeEach(() => { @@ -20,11 +21,12 @@ describe('loadAnalyticsAndInteractionData', () => { delete window.fetch; }); - it('should fetch and return the proposition data', async () => { + it('should fetch and return the proposition data without hybrid pers', async () => { const result = await loadAnalyticsAndInteractionData({ locale: { ietf: 'en-US', prefix: 'us' }, env: 'prod', calculatedTimeout: 10000, + hybridPersEnabled: false, }); expect(result).to.deep.equal({ @@ -33,14 +35,48 @@ describe('loadAnalyticsAndInteractionData', () => { }); }); - it('should handle consent cookie being set to "out"', async () => { - window.getCookie = () => 'general%3Dout'; + it('should fetch and return the proposition data with hybrid', async () => { + window.fetch = () => Promise.resolve({ + ok: true, + json: () => Promise.resolve({ + handle: [ + { + type: 'personalization:decisions', + payload: [ + { + decisionId: '1', + proposition: 'Test Proposition', + items: [{ + data: { + id: '901343', + format: 'application/json', + }, + }, + ], + }, + ], + }, + ], + }), + }); + const result = await loadAnalyticsAndInteractionData({ + locale: { ietf: 'en-US', prefix: 'us' }, + env: 'prod', + calculatedTimeout: 10000, + hybridPersEnabled: true, + }); + expect(result.result.propositions).to.have.lengthOf(1); + expect(result.type).to.be.equal('pageView'); + }); + + it('should handle consent cookie being set to "out"', async () => { try { await loadAnalyticsAndInteractionData({ locale: { ietf: 'en-US', prefix: 'us' }, env: 'prod', calculatedTimeout: 10000, + hybridPersEnabled: false, }); } catch (err) { expect(err.message).to.equal('Consent Cookie doesnt allow interact'); @@ -55,6 +91,7 @@ describe('loadAnalyticsAndInteractionData', () => { locale: { ietf: 'en-US', prefix: 'us' }, env: 'prod', calculatedTimeout: 10000, + hybridPersEnabled: false, }); } catch (err) { expect(err.message).to.equal('Error: Network error'); @@ -71,6 +108,7 @@ describe('loadAnalyticsAndInteractionData', () => { locale: { ietf: 'en-US', prefix: 'us' }, env: 'prod', calculatedTimeout: 1000, + hybridPersEnabled: false, }); } catch (err) { expect(err.message).to.equal('Error: Request timed out'); @@ -88,6 +126,7 @@ describe('loadAnalyticsAndInteractionData', () => { locale: { ietf: 'en-US', prefix: 'us' }, env: 'prod', calculatedTimeout: 10000, + hybridPersEnabled: false, }); } catch (err) { expect(err.message).to.be.string; @@ -95,28 +134,24 @@ describe('loadAnalyticsAndInteractionData', () => { }); it('should return the correct target property for non-prod environments', async () => { - window.getCookie = () => null; - const result = await loadAnalyticsAndInteractionData({ locale: { ietf: 'en-US', prefix: 'us' }, env: 'dev', calculatedTimeout: 10000, + hybridPersEnabled: false, }); - expect(result.type).to.equal('propositionFetch'); expect(result.result.propositions).to.have.lengthOf(1); }); it('should return the correct target property for prod environment', async () => { - window.getCookie = () => null; - const result = await loadAnalyticsAndInteractionData({ locale: { ietf: 'en-US', prefix: 'us' }, env: 'prod', calculatedTimeout: 10000, + hybridPersEnabled: false, }); - expect(result.type).to.equal('propositionFetch'); expect(result.result.propositions).to.have.lengthOf(1); }); @@ -133,16 +168,15 @@ describe('loadAnalyticsAndInteractionData', () => { locale: { ietf: 'en-US', prefix: 'us' }, env: 'prod', calculatedTimeout: 10000, + hybridPersEnabled: false, }); - expect(result.type).to.equal('propositionFetch'); expect(result.result.propositions).to.have.lengthOf(1); }); it('should generate a new FPID when ECID is not present', async () => { window.innerWidth = 234; window.innerHeight = 1234; - window.getCookie = () => null; const data = { handle: [ { @@ -191,9 +225,9 @@ describe('loadAnalyticsAndInteractionData', () => { locale: { ietf: 'en-US', prefix: 'us' }, env: 'prod', calculatedTimeout: 10000, + hybridPersEnabled: false, }); - expect(result.type).to.equal('propositionFetch'); expect(result.result.propositions).to.have.lengthOf(2); }); @@ -207,9 +241,10 @@ describe('loadAnalyticsAndInteractionData', () => { locale: { ietf: 'en-US', prefix: 'us' }, env: 'prod', calculatedTimeout: 10000, + hybridPersEnabled: false, }); - expect.fail('Some error'); + expect.fail('Error: Failed to fetch interact call'); } catch (err) { expect(err.message).to.equal('Error: Failed to fetch interact call'); } @@ -238,23 +273,174 @@ describe('loadAnalyticsAndInteractionData', () => { locale: { ietf: 'en-US', prefix: 'us' }, env: 'prod', calculatedTimeout: 10000, + hybridPersEnabled: false, }); } catch (err) { expect(err.message).to.equal('Error: No propositions found'); } }); + + it('should handle cookies update on api payload', async () => { + document.cookie = 'AMCV_9E1005A551ED61CA0A490D45%40AdobeOrg=65550139393016453617222570753620662484'; + window.fetch = () => Promise.resolve({ + ok: true, + json: () => Promise.resolve({ + handle: [ + { + type: 'personalization:decisions', + payload: [], + }, + { + payload: [ + { + id: '65550139393016453617222570753620662484', + namespace: { code: 'ECID' }, + }, + ], + type: 'identity:result', + }, + { + payload: [ + { + key: 'kndctr_9E1005A551ED61CA0A490D45_AdobeOrg_cluster', + value: 'irl1', + maxAge: 1800, + attrs: { SameSite: 'None' }, + }, + { + key: 'kndctr_9E1005A551ED61CA0A490D45_AdobeOrg_identity', + value: 'CiY2NTU1MDEzOTM5MzAxNjQ1MzYxNzIyMjU3MDc1MzYyMDY2MjQ4NFIRCOHA5pvHMhgCKgRJUkwxMAPwAeHA5pvHMg==', + maxAge: 34128000, + attrs: { SameSite: 'None' }, + }, + ], + type: 'state:store', + }, + ], + }), + }); + try { + await loadAnalyticsAndInteractionData({ + locale: { ietf: 'en-US', prefix: 'us' }, + env: 'prod', + calculatedTimeout: 10000, + hybridPersEnabled: false, + }); + } catch (err) { + expect(err.message).to.equal('Error: No propositions found'); + } + }); + it('should throw error when cookie prohibits it', async () => { document.cookie = 'kndctr_9E1005A551ED61CA0A490D45_AdobeOrg_consent=general=out'; - window.getCookie = () => null; try { await loadAnalyticsAndInteractionData({ locale: { ietf: 'en-US', prefix: 'us' }, env: 'prod', calculatedTimeout: 1000, + hybridPersEnabled: false, }); } catch (err) { expect(err.message).to.equal('Consent Cookie doesnt allow interact'); } + + document.cookie = 'kndctr_9E1005A551ED61CA0A490D45_AdobeOrg_consent=general=in'; + }); + + describe('getTargetPropertyBasedOnPageRegion', () => { + it('should return "bc8dfa27-29cc-625c-22ea-f7ccebfc6231" when env is not "prod"', () => { + const result = getTargetPropertyBasedOnPageRegion({ env: 'dev', pathname: '/fr/' }); + expect(result).to.equal('bc8dfa27-29cc-625c-22ea-f7ccebfc6231'); + }); + + it('should return "488edf5f-3cbe-f410-0953-8c0c5c323772" for EMEA & LATAM regions when env is "prod"', () => { + const result1 = getTargetPropertyBasedOnPageRegion({ env: 'prod', pathname: '/fr/' }); + const result2 = getTargetPropertyBasedOnPageRegion({ env: 'prod', pathname: '/uk/' }); + const result3 = getTargetPropertyBasedOnPageRegion({ env: 'prod', pathname: '/br/' }); + + expect(result1).to.equal('488edf5f-3cbe-f410-0953-8c0c5c323772'); + expect(result2).to.equal('488edf5f-3cbe-f410-0953-8c0c5c323772'); + expect(result3).to.equal('488edf5f-3cbe-f410-0953-8c0c5c323772'); + }); + + it('should return "3de509ee-bbc7-58a3-0851-600d1c2e2918" for APAC regions when env is "prod"', () => { + const result1 = getTargetPropertyBasedOnPageRegion({ env: 'prod', pathname: '/au/' }); + const result2 = getTargetPropertyBasedOnPageRegion({ env: 'prod', pathname: '/hk_en/' }); + const result3 = getTargetPropertyBasedOnPageRegion({ env: 'prod', pathname: '/in/' }); + + expect(result1).to.equal('3de509ee-bbc7-58a3-0851-600d1c2e2918'); + expect(result2).to.equal('3de509ee-bbc7-58a3-0851-600d1c2e2918'); + expect(result3).to.equal('3de509ee-bbc7-58a3-0851-600d1c2e2918'); + }); + + it('should return "ba5bc9e8-8fb4-037a-12c8-682384720007" for JP region when env is "prod"', () => { + const result = getTargetPropertyBasedOnPageRegion({ env: 'prod', pathname: '/jp/' }); + expect(result).to.equal('ba5bc9e8-8fb4-037a-12c8-682384720007'); + }); + + it('should return "4db35ee5-63ad-59f6-cec6-82ef8863b22d" when no region matches and env is "prod"', () => { + const result1 = getTargetPropertyBasedOnPageRegion({ env: 'prod', pathname: '/us/' }); + const result2 = getTargetPropertyBasedOnPageRegion({ env: 'prod', pathname: '/ca/' }); + + expect(result1).to.equal('4db35ee5-63ad-59f6-cec6-82ef8863b22d'); + expect(result2).to.equal('4db35ee5-63ad-59f6-cec6-82ef8863b22d'); + }); + }); + + describe('getVisitorStatus', () => { + let getCookieStub; + let setCookieStub; + let clock; + + const mockCurrentTime = (time) => { + clock = sinon.useFakeTimers({ now: time, toNow: 'date' }); + }; + + beforeEach(() => { + getCookieStub = sinon.stub().returns(''); + setCookieStub = sinon.stub(); + }); + + afterEach(() => { + clock.restore(); + }); + + it('should return "New" and set a new cookie when no cookie exists', () => { + mockCurrentTime(new Date('2025-01-01T00:00:00Z')); + + const result = getVisitorStatus({ + getCookie: getCookieStub, + setCookie: setCookieStub, + }); + + expect(result).to.equal('New'); + }); + + it('should return "New" when cookie exists and is within 30 minutes of being set', () => { + mockCurrentTime(new Date('2025-01-01T00:29:00Z')); + + getCookieStub.returns('1704084000000-New'); + + const result = getVisitorStatus({ + getCookie: getCookieStub, + setCookie: setCookieStub, + }); + + expect(result).to.equal('New'); + }); + + it('should return "Repeat" when cookie exists and is older than 30 minutes', () => { + mockCurrentTime(new Date('2025-01-01T01:01:00Z')); + + getCookieStub.returns('1704084000000-New'); + + const result = getVisitorStatus({ + getCookie: getCookieStub, + setCookie: setCookieStub, + }); + + expect(result).to.equal('Repeat'); + }); }); }); diff --git a/test/navigation/bootstrapper.test.js b/test/navigation/bootstrapper.test.js index b16743b57bc..3f69a4f2a4d 100644 --- a/test/navigation/bootstrapper.test.js +++ b/test/navigation/bootstrapper.test.js @@ -1,3 +1,4 @@ +/* eslint import/no-relative-packages: 0 */ import { readFile } from '@web/test-runner-commands'; import { expect } from '@esm-bundle/chai'; import { stub, useFakeTimers, restore, spy } from 'sinon'; @@ -6,6 +7,7 @@ import fetchedFooter from '../blocks/global-footer/mocks/fetched-footer.js'; import placeholders from '../blocks/global-navigation/mocks/placeholders.js'; import { setConfig } from '../../libs/utils/utils.js'; import { mockRes } from '../blocks/global-navigation/test-utilities.js'; +import gnavLocalNav from './mocks/gnav-with-localnav.plain.js'; const blockConfig = { footer: { @@ -35,6 +37,7 @@ describe('Bootstrapper', async () => { ), }); } + if (url.includes('/localnav/gnav.plain.html')) return mockRes({ payload: gnavLocalNav }); if (url.includes('/placeholders')) return mockRes({ payload: placeholders }); if (url.includes('/footer.plain.html')) return mockRes({ payload: await readFile({ path: '../blocks/region-nav/mocks/regions.html' }) }); if (url.includes('/gnav.plain.html')) return mockRes({ payload: await readFile({ path: './mocks/gnav.html' }) }); @@ -57,7 +60,8 @@ describe('Bootstrapper', async () => { }); it('Renders the footer block', async () => { - await loadBlock(miloLibs, blockConfig.footer); + const { default: init } = await import('../../libs/blocks/global-footer/global-footer.js'); + await loadBlock(init, blockConfig.footer); const clock = useFakeTimers({ toFake: ['setTimeout'], shouldAdvanceTime: true, @@ -68,30 +72,44 @@ describe('Bootstrapper', async () => { }); it('Renders the header block', async () => { - await loadBlock(miloLibs, blockConfig.header); + const { default: init } = await import('../../libs/blocks/global-navigation/global-navigation.js'); + await loadBlock(init, blockConfig.header); const el = document.getElementsByTagName('header'); expect(el).to.exist; }); it('Renders the header with full width', async () => { blockConfig.header.layout = 'fullWidth'; - await loadBlock(miloLibs, blockConfig.header); + const { default: init } = await import('../../libs/blocks/global-navigation/global-navigation.js'); + await loadBlock(init, blockConfig.header); const el = document.querySelector('header'); expect(el.classList.contains('feds--full-width')).to.be.true; }); it('Renders the header with no border bottom', async () => { blockConfig.header.noBorder = true; - await loadBlock(miloLibs, blockConfig.header); + const { default: init } = await import('../../libs/blocks/global-navigation/global-navigation.js'); + await loadBlock(init, blockConfig.header); const el = document.querySelector('header'); expect(el.classList.contains('feds--no-border')).to.be.true; }); + it('Renders the localnav', async () => { + blockConfig.header.isLocalNav = true; + blockConfig.header.mobileGnavV2 = true; + setConfig({ contentRoot: '/federal/localnav' }); + const { default: init } = await import('../../libs/blocks/global-navigation/global-navigation.js'); + await loadBlock(init, blockConfig.header); + const el = document.querySelector('header'); + expect(el.nextElementSibling.classList.contains('feds-localnav')).to.be.true; + }); + it('should call openMessagingWindow when click on jarvis enabled button', async () => { blockConfig.header.jarvis = { id: '1.1' }; stub(window.AdobeMessagingExperienceClient, 'isAdobeMessagingClientInitialized').returns(true); stub(window.AdobeMessagingExperienceClient, 'getMessagingExperienceState').returns({ windowState: 'hidden' }); - await loadBlock(miloLibs, blockConfig.header); + const { default: init } = await import('../../libs/blocks/global-navigation/global-navigation.js'); + await loadBlock(init, blockConfig.header); const el = document.querySelector('.feds-cta[href*="#open-jarvis-chat"]'); const event = new CustomEvent('click', { bubbles: true }); el.dispatchEvent(event); @@ -101,7 +119,8 @@ describe('Bootstrapper', async () => { it('should not call openMessagingWindow when chat dialog is already open', async () => { stub(window.AdobeMessagingExperienceClient, 'isAdobeMessagingClientInitialized').returns(true); stub(window.AdobeMessagingExperienceClient, 'getMessagingExperienceState').returns({ windowState: 'docked' }); - await loadBlock(miloLibs, blockConfig.header); + const { default: init } = await import('../../libs/blocks/global-navigation/global-navigation.js'); + await loadBlock(init, blockConfig.header); const el = document.querySelector('.feds-cta[href*="#open-jarvis-chat"]'); const event = new CustomEvent('click', { bubbles: true }); el.dispatchEvent(event); diff --git a/test/navigation/mocks/gnav-with-localnav.plain.js b/test/navigation/mocks/gnav-with-localnav.plain.js new file mode 100644 index 00000000000..bae6eb2e0fa --- /dev/null +++ b/test/navigation/mocks/gnav-with-localnav.plain.js @@ -0,0 +1,70 @@ +export default ` + + +
      +
      +
      +
      +

      Create

      +
      +
      +
      +
      +
      +

      Education

      +
      K-12 Schools
      + +
      Higher Ed
      + +
      +
      +
      +

      + + + + + Hello I am alt text + +

      +

      www.adobe.com

      +
      +
      +
      +
      + + + + +
      +`; diff --git a/test/navigation/navigation.test.js b/test/navigation/navigation.test.js index 0ed7ed1fcc9..6ac70edb17e 100644 --- a/test/navigation/navigation.test.js +++ b/test/navigation/navigation.test.js @@ -1,3 +1,4 @@ +/* eslint import/no-relative-packages: 0 */ import { readFile } from '@web/test-runner-commands'; import { expect } from '@esm-bundle/chai'; import { stub, restore } from 'sinon'; @@ -17,7 +18,7 @@ describe('Navigation component', async () => { return null; }); - setConfig({ miloLibs, contentRoot: '/federal/dev' }); + setConfig({ miloLibs }); }); afterEach(() => { @@ -25,29 +26,44 @@ describe('Navigation component', async () => { }); it('Renders the footer block', async () => { - await loadBlock({ authoringPath: '/federal/dev', footer: { privacyId: '12343' }, env: 'qa' }, 'http://localhost:2000'); + await loadBlock({ authoringPath: '/federal/dev', footer: { privacyId: '12343', onReady: 'dede' }, env: 'qa' }, 'http://localhost:2000'); const el = document.getElementsByTagName('footer'); expect(el).to.exist; }); - it('Renders the footer block should not load when config is not passed', async () => { + it('Renders the header block', async () => { + const onReady = stub(); + await loadBlock({ authoringPath: '/federal/dev', header: { imsClientId: 'fedsmilo', onReady, layout: 'fullWidth', noBorder: 'true' }, env: 'prod', theme: 'dark' }, 'http://localhost:2000'); + const el = document.getElementsByTagName('header'); + expect(el).to.exist; + expect(onReady.called).to.be.true; + }); + + it('Renders the localnav if isLocalNav key is passed', async () => { + const onReady = stub(); + await loadBlock({ authoringPath: '/federal/dev', header: { imsClientId: 'fedsmilo', onReady, isLocalNav: true, jarvis: { id: '1.1' } }, env: 'prod', theme: 'dark' }, 'http://localhost:2000'); + const el = document.querySelector('.feds-localnav'); + expect(el).to.exist; + }); + + it('Should not render the footer block when config is not passed', async () => { try { - const onError = stub(); - await loadBlock({ authoringPath: '/federal/dev-new', env: 'qa', footer: { privacyId: '12343' }, header: { onError } }, 'http://localhost:2000'); + await loadBlock({ env: 'qa', authoringPath: '/federal/dev', footer: {} }, 'http://localhost:2000'); const el = document.getElementsByTagName('footer'); expect(el).to.not.exist; - expect(onError.called).to.be.true; } catch (e) { // handle error } }); - it('Renders the header block', async () => { - const onReady = stub(); - await loadBlock({ authoringPath: '/federal/dev', header: { imsClientId: 'fedsmilo', onReady }, env: 'prod', theme: 'dark' }, 'http://localhost:2000'); - const el = document.getElementsByTagName('header'); - expect(el).to.exist; - expect(onReady.called).to.be.true; + it('Should not render the header block when config is not passed', async () => { + try { + await loadBlock({ env: 'qa', footer: { privacyId: '12343' } }, 'http://localhost:2000'); + const el = document.getElementsByTagName('header'); + expect(el).to.not.exist; + } catch (e) { + // handle error + } }); it('Does not render either header or footer if not found in configs', async () => { @@ -59,15 +75,6 @@ describe('Navigation component', async () => { expect(footer).to.be.empty; }); - it('Does not render either header or footer if configs is not passed', async () => { - document.body.innerHTML = await readFile({ path: './mocks/body.html' }); - await loadBlock(); - const header = document.getElementsByTagName('header'); - const footer = document.getElementsByTagName('footer'); - expect(header).to.be.empty; - expect(footer).to.be.empty; - }); - it('Renders the footer block with authoringpath passed in footer', async () => { await loadBlock({ footer: { privacyId: '12343', authoringPath: '/federal/dev' }, env: 'qa' }, 'http://localhost:2000'); const el = document.getElementsByTagName('footer'); diff --git a/test/tools/floodbox/bulk-action.test.js b/test/tools/floodbox/bulk-action.test.js new file mode 100644 index 00000000000..6e37bb86dda --- /dev/null +++ b/test/tools/floodbox/bulk-action.test.js @@ -0,0 +1,75 @@ +import { expect } from '@esm-bundle/chai'; +import sinon from 'sinon'; +import previewOrPublishPaths, { BulkAction } from '../../../tools/floodbox/bulk-action.js'; +import RequestHandler from '../../../tools/floodbox/request-handler.js'; + +describe('BulkAction', () => { + const org = 'testOrg'; + const repo = 'testRepo'; + const callback = sinon.spy(); + const paths = ['/testOrg/testRepo/content/test1.html', '/testOrg/testRepo/content/test2.html']; + const action = 'publish'; + let daFetchStub; + let delayStub; + + beforeEach(() => { + daFetchStub = sinon.stub(RequestHandler.prototype, 'daFetch'); + delayStub = sinon.stub(BulkAction, 'delay').resolves(); + callback.resetHistory(); + }); + + afterEach(() => { + daFetchStub.restore(); + delayStub.restore(); + }); + + it('should successfully process all paths in batches', async () => { + daFetchStub.resolves({ ok: true, status: 200 }); + + await previewOrPublishPaths({ org, repo, paths, action, callback }); + + sinon.assert.callCount(daFetchStub, paths.length); + sinon.assert.callCount(callback, paths.length); + sinon.assert.calledWithMatch(callback, { statusCode: 200 }); + }); + + it('should handle failed requests and call callback with error', async () => { + daFetchStub.onFirstCall().resolves({ ok: false, status: 500 }); + daFetchStub.onSecondCall().resolves({ ok: true, status: 200 }); + + await previewOrPublishPaths({ org, repo, paths, action, callback }); + + sinon.assert.callCount(daFetchStub, paths.length); + sinon.assert.calledWithMatch(callback, { statusCode: 500, errorMsg: `Failed to ${action}` }); + }); + + it('should clean up paths correctly', async () => { + const cleanedPaths = paths.map((path) => BulkAction.cleanUpPath(path)); + expect(cleanedPaths).to.eql(['/content/test1', '/content/test2']); + }); + + it('should delay between batches', async () => { + daFetchStub.resolves({ ok: true, status: 200 }); + + const longPaths = Array(25).fill('/testOrg/testRepo/content/test1.html'); + await previewOrPublishPaths({ org, repo, paths: longPaths, action, callback }); + + sinon.assert.calledOnce(delayStub); + }); + + it('should handle delete requests', async () => { + daFetchStub.resolves({ ok: true, status: 200 }); + + await previewOrPublishPaths({ + org, repo, paths, action: 'delete', callback, isDelete: true, + }); + + sinon.assert.callCount(daFetchStub, paths.length); + + const args = [ + 'https://admin.hlx.page/delete/testOrg/testRepo/main/content/test1', + { method: 'DELETE' }, + ]; + sinon.assert.calledWithMatch(daFetchStub.firstCall, args[0], args[1]); + }); +}); diff --git a/test/tools/floodbox/crawl-tree.test.js b/test/tools/floodbox/crawl-tree.test.js new file mode 100644 index 00000000000..f81f74ac7ed --- /dev/null +++ b/test/tools/floodbox/crawl-tree.test.js @@ -0,0 +1,91 @@ +import { expect } from '@esm-bundle/chai'; +import sinon from 'sinon'; +import crawl from '../../../tools/floodbox/crawl-tree.js'; +import RequestHandler from '../../../tools/floodbox/request-handler.js'; + +describe('crawl', () => { + let callback; + let requestHandlerStub; + + const grayboxTree = [ + { path: '/org/repo-graybox/exp/drafts/file1.html', ext: 'html' }, + { path: '/org/repo-graybox/exp/file2.json', ext: 'json' }, + ]; + const floodgateTree = [ + { path: '/org/repo-pink/drafts/file1.html', ext: 'html' }, + { path: '/org/repo-pink/file2.json', ext: 'json' }, + ]; + + beforeEach(() => { + callback = sinon.spy(); + requestHandlerStub = sinon.stub(RequestHandler.prototype, 'daFetch'); + }); + + afterEach(() => { + sinon.restore(); + }); + + it('should return graybox files under exp folder', async () => { + requestHandlerStub.resolves({ + ok: true, + json: async () => grayboxTree, + }); + const { results } = crawl({ + path: '/org/repo-graybox/exp', + crawlType: 'graybox', + }); + const crawledFiles = await results; + expect(crawledFiles).to.eql(grayboxTree); + }); + + it('should return graybox files under drafts folder only', async () => { + requestHandlerStub.resolves({ + ok: true, + json: async () => grayboxTree, + }); + const { results, getDuration } = crawl({ + path: '/org/repo-graybox/exp', + callback, + crawlType: 'graybox', + isDraftsOnly: true, + }); + const crawledFiles = await results; + expect(crawledFiles).to.eql([ + { path: '/org/repo-graybox/exp/drafts/file1.html', ext: 'html' }, + ]); + expect(getDuration()).to.be.a('string'); + }); + + it('should return floodgate files under exp folder', async () => { + requestHandlerStub.resolves({ + ok: true, + json: async () => floodgateTree, + }); + const { results } = crawl({ + path: '/org/repo-pink', + crawlType: 'floodgate', + }); + const crawledFiles = await results; + expect(crawledFiles).to.eql(floodgateTree); + }); + + it('should return floodgate files under drafts folder only', async () => { + requestHandlerStub.resolves({ + ok: true, + json: async () => floodgateTree, + }); + const { results, getDuration, cancelCrawl } = crawl({ + path: '/org/repo-pink/exp', + callback, + crawlType: 'floodgate', + isDraftsOnly: true, + }); + const crawledFiles = await results; + expect(crawledFiles).to.eql([ + { path: '/org/repo-pink/drafts/file1.html', ext: 'html' }, + ]); + expect(getDuration()).to.be.a('string'); + cancelCrawl(); + expect(cancelCrawl).to.not.throw(); + }); +}); diff --git a/test/tools/floodbox/floodgate/fg-copy.test.js b/test/tools/floodbox/floodgate/fg-copy.test.js new file mode 100644 index 00000000000..c735daae134 --- /dev/null +++ b/test/tools/floodbox/floodgate/fg-copy.test.js @@ -0,0 +1,83 @@ +import { expect } from '@esm-bundle/chai'; +import sinon from 'sinon'; +import copyFiles from '../../../../tools/floodbox/floodgate/fg-copy.js'; +import RequestHandler from '../../../../tools/floodbox/request-handler.js'; + +describe('FloodgateCopy', () => { + const accessToken = 'test-token'; + const org = 'test-org'; + const repo = 'test-repo'; + const paths = ['/test-org/test-repo/path1', '/test-org/test-repo/path2']; + let requestHandlerStub; + let callbackStub; + + beforeEach(() => { + requestHandlerStub = sinon.stub(RequestHandler.prototype, 'daFetch'); + sinon.stub(RequestHandler.prototype, 'uploadContent'); + callbackStub = sinon.stub(); + }); + + afterEach(() => { + sinon.restore(); + }); + + it('copies files successfully', async () => { + requestHandlerStub.resolves({ + ok: true, + text: async () => '', + blob: async () => new Blob(), + }); + RequestHandler.prototype.uploadContent.resolves({ statusCode: 200 }); + + await copyFiles({ accessToken, org, repo, paths, callback: callbackStub }); + + expect(callbackStub.callCount).to.equal(2); + expect(callbackStub.firstCall.args[0]).to.eql({ statusCode: 200 }); + }); + + it('handles fetch errors gracefully', async () => { + requestHandlerStub.resolves({ ok: false, status: 404 }); + + await copyFiles({ accessToken, org, repo, paths, callback: callbackStub }); + + expect(callbackStub.callCount).to.equal(2); + expect(callbackStub.firstCall.args[0]).to.eql({ statusCode: 404, filePath: '/test-org/test-repo/path1.html', errorMsg: 'Failed to fetch' }); + }); + + it('adjusts URL domains in HTML files', async () => { + requestHandlerStub.resolves({ + ok: true, + text: async () => 'Link', + }); + RequestHandler.prototype.uploadContent.resolves({ statusCode: 200 }); + + await copyFiles({ accessToken, org, repo, paths, callback: callbackStub }); + + expect(RequestHandler.prototype.uploadContent.firstCall.args[1]).to.include('--test-repo-pink--test-org.'); + }); + + it('processes non-editable files correctly', async () => { + requestHandlerStub.resolves({ + ok: true, + blob: async () => new Blob(), + }); + RequestHandler.prototype.uploadContent.resolves({ statusCode: 200 }); + + await copyFiles({ accessToken, org, repo, paths: ['/test-org/test-repo/image.png'], callback: callbackStub }); + + expect(callbackStub.callCount).to.equal(1); + expect(callbackStub.firstCall.args[0]).to.eql({ statusCode: 200 }); + }); + + it('handles empty paths array', async () => { + await copyFiles({ accessToken, org, repo, paths: [], callback: callbackStub }); + + expect(callbackStub.callCount).to.equal(0); + }); + + it('ignores path with empty string', async () => { + await copyFiles({ accessToken, org, repo, paths: [''], callback: callbackStub }); + + expect(callbackStub.callCount).to.equal(0); + }); +}); diff --git a/test/tools/floodbox/floodgate/floodgate-config.test.js b/test/tools/floodbox/floodgate/floodgate-config.test.js new file mode 100644 index 00000000000..8aa87226c3b --- /dev/null +++ b/test/tools/floodbox/floodgate/floodgate-config.test.js @@ -0,0 +1,96 @@ +import { expect } from '@esm-bundle/chai'; +import sinon from 'sinon'; +import FloodgateConfig from '../../../../tools/floodbox/floodgate/floodgate-config.js'; +import RequestHandler from '../../../../tools/floodbox/request-handler.js'; + +describe('FloodgateConfig', () => { + let floodgateConfig; + const org = 'testOrg'; + const repo = 'testRepo'; + const accessToken = 'testToken'; + let daFetchStub; + + beforeEach(() => { + sinon.restore(); + daFetchStub = sinon.stub(RequestHandler.prototype, 'daFetch'); + floodgateConfig = new FloodgateConfig(org, repo, accessToken); + }); + + afterEach(() => { + sinon.restore(); + }); + + it('should initialize properties correctly', () => { + expect(floodgateConfig.org).to.equal('testOrg'); + expect(floodgateConfig.repo).to.equal('testRepo'); + expect(floodgateConfig.accessToken).to.equal('testToken'); + expect(floodgateConfig.requestHandler).to.be.instanceof(RequestHandler); + expect(floodgateConfig.isPromoteEnabled).to.be.false; + expect(floodgateConfig.isDeleteEnabled).to.be.false; + expect(floodgateConfig.isPromoteDraftsOnly).to.be.false; + expect(floodgateConfig.promoteIgnorePaths).to.deep.equal([]); + }); + + it('should fetch and process config correctly', async () => { + const mockResponse = { + ok: true, + json: sinon.stub().resolves({ + config: { + data: [ + { key: 'enablePromote', value: 'true' }, + { key: 'enableDelete', value: 'false' }, + { key: 'promoteDraftsOnly', value: 'false' }, + ], + }, + 'promote-ignore-paths': { + data: [ + { promoteIgnorePaths: '/placeholders.json' }, + { promoteIgnorePaths: '/metadata.json' }, + { promoteIgnorePaths: '/my-folder/my-file' }, + { promoteIgnorePaths: '/summit25/' }, + ], + }, + }), + }; + + daFetchStub.resolves(mockResponse); + + await floodgateConfig.getConfig(); + + expect(floodgateConfig.isPromoteEnabled).to.be.true; + expect(floodgateConfig.isDeleteEnabled).to.be.false; + expect(floodgateConfig.isPromoteDraftsOnly).to.be.false; + expect(floodgateConfig.getPromoteIgnorePaths()).to.deep.equal([ + '/placeholders.json', + '/metadata.json', + '/my-folder/my-file', + '/summit25/', + ]); + }); + + it('should handle failed fetch', async () => { + const mockResponse = { ok: false }; + daFetchStub.resolves(mockResponse); + await floodgateConfig.getConfig(); + + expect(floodgateConfig.isPromoteEnabled).to.be.false; + expect(floodgateConfig.isDeleteEnabled).to.be.false; + expect(floodgateConfig.isPromoteDraftsOnly).to.be.false; + expect(floodgateConfig.getPromoteIgnorePaths()).to.deep.equal([]); + }); + + it('should handle missing config', async () => { + const mockResponse = { + ok: true, + json: sinon.stub().resolves({}), + }; + + daFetchStub.resolves(mockResponse); + await floodgateConfig.getConfig(); + + expect(floodgateConfig.isPromoteEnabled).to.be.false; + expect(floodgateConfig.isDeleteEnabled).to.be.false; + expect(floodgateConfig.isPromoteDraftsOnly).to.be.false; + expect(floodgateConfig.getPromoteIgnorePaths()).to.deep.equal([]); + }); +}); diff --git a/test/tools/floodbox/floodgate/utils.test.js b/test/tools/floodbox/floodgate/utils.test.js new file mode 100644 index 00000000000..73f45cac6ed --- /dev/null +++ b/test/tools/floodbox/floodgate/utils.test.js @@ -0,0 +1,62 @@ +import { expect } from '@esm-bundle/chai'; +import { getValidFloodgate, validatePaths } from '../../../../tools/floodbox/floodgate/utils.js'; + +describe('validatePaths', () => { + it('returns valid true with correct org and repo for valid paths', () => { + const paths = ['/org1/repo1/path1', '/org1/repo1/path2']; + const result = validatePaths(paths); + expect(result).to.eql({ valid: true, org: 'org1', repo: 'repo1' }); + }); + + it('returns valid false for empty array', () => { + const paths = []; + const result = validatePaths(paths); + expect(result).to.eql({ valid: false, org: '', repo: '' }); + }); + + it('returns valid false for non-array input', () => { + const paths = 'not-an-array'; + const result = validatePaths(paths); + expect(result).to.eql({ valid: false, org: '', repo: '' }); + }); + + it('returns valid false for paths not starting with slash', () => { + const paths = ['org1/repo1/path1', '/org1/repo1/path2']; + const result = validatePaths(paths); + expect(result).to.eql({ valid: false, org: '', repo: '' }); + }); + + it('returns valid false for paths with less than 3 parts', () => { + const paths = ['/org1/repo1']; + const result = validatePaths(paths); + expect(result).to.eql({ valid: false, org: '', repo: '' }); + }); + + it('returns valid false for inconsistent org or repo', () => { + const paths = ['/org1/repo1/path1', '/org2/repo1/path2']; + const result = validatePaths(paths); + expect(result).to.eql({ valid: false, org: '', repo: '' }); + }); + + it('returns valid false for repo containing "-pink"', () => { + const paths = ['/org1/repo1-pink/path1', '/org1/repo1-pink/path2']; + const result = validatePaths(paths); + expect(result).to.eql({ valid: false, org: '', repo: '' }); + }); +}); + +describe('getValidFloodgate', () => { + it('should return a milo-floodgate element with correct properties', async () => { + // fake DA_SDK response with context and token + const fakeDaSdk = Promise.resolve({ + context: { repo: 'fake-repo' }, + token: 'fake-token', + }); + const cmp = await getValidFloodgate(fakeDaSdk); + + expect(cmp).to.be.instanceOf(HTMLElement); + expect(cmp.tagName.toLowerCase()).to.equal('milo-floodgate'); + expect(cmp.repo).to.equal('fake-repo'); + expect(cmp.token).to.equal('fake-token'); + }); +}); diff --git a/test/tools/floodbox/graybox/graybox-config.test.js b/test/tools/floodbox/graybox/graybox-config.test.js new file mode 100644 index 00000000000..cd6cf22f174 --- /dev/null +++ b/test/tools/floodbox/graybox/graybox-config.test.js @@ -0,0 +1,139 @@ +import { expect } from '@esm-bundle/chai'; +import sinon from 'sinon'; +import GrayboxConfig from '../../../../tools/floodbox/graybox/graybox-config.js'; +import RequestHandler from '../../../../tools/floodbox/request-handler.js'; +import { DA_ORIGIN } from '../../../../tools/floodbox/constants.js'; + +describe('GrayboxConfig', () => { + let grayboxConfig; + const org = 'testOrg'; + const repo = 'testRepo'; + const accessToken = 'testToken'; + let daFetchStub; + + beforeEach(() => { + sinon.restore(); + daFetchStub = sinon.stub(RequestHandler.prototype, 'daFetch'); + grayboxConfig = new GrayboxConfig(org, repo, accessToken); + }); + + it('should initialize properties correctly', () => { + expect(grayboxConfig.org).to.equal(org); + expect(grayboxConfig.repo).to.equal(repo); + expect(grayboxConfig.accessToken).to.equal(accessToken); + expect(grayboxConfig.requestHandler).to.be.instanceof(RequestHandler); + expect(grayboxConfig.isGlobalPromoteEnabled).to.be.null; + expect(grayboxConfig.isGlobalDeleteEnabled).to.be.null; + expect(grayboxConfig.isGlobalPromoteDraftsOnly).to.be.null; + expect(grayboxConfig.globalPromoteIgnorePaths).to.deep.equal([]); + expect(grayboxConfig.experiencePromoteConfig).to.deep.equal([]); + expect(grayboxConfig.experienceDeleteConfig).to.deep.equal([]); + expect(grayboxConfig.experienceDraftsOnlyConfig).to.deep.equal([]); + }); + + it('should fetch and process config correctly', async () => { + const mockResponse = { + ok: true, + json: sinon.stub().resolves({ + 'experience-config': { + data: [ + { key: 'enablePromote', experienceNames: 'summit25, max25' }, + { key: 'enableDelete', experienceNames: '' }, + { key: 'promoteDraftsOnly', experienceNames: '' }, + ], + }, + 'global-promote-ignore-paths': { + data: [ + { globalPromoteIgnorePaths: '/placeholders.json' }, + { globalPromoteIgnorePaths: '/metadata.json' }, + { globalPromoteIgnorePaths: '/my-folder/my-file' }, + { globalPromoteIgnorePaths: '/summit25/' }, + ], + }, + 'global-config': { + data: [ + { key: 'enablePromote', value: 'true' }, + { key: 'enableDelete', value: 'false' }, + { key: 'promoteDraftsOnly', value: 'false' }, + ], + }, + }), + }; + + daFetchStub.resolves(mockResponse); + + await grayboxConfig.getConfig(); + + expect(daFetchStub.calledWith(`${DA_ORIGIN}/source/${org}/${repo}/.milo/graybox/config.json`)).to.be.true; + expect(mockResponse.json.called).to.be.true; + + // Add assertions to verify that the properties are set correctly based on the mock response + expect(grayboxConfig.isGlobalPromoteEnabled).to.be.true; + expect(grayboxConfig.isGlobalDeleteEnabled).to.be.false; + expect(grayboxConfig.isGlobalPromoteDraftsOnly).to.be.false; + expect(grayboxConfig.globalPromoteIgnorePaths).to.deep.equal([ + '/placeholders.json', + '/metadata.json', + '/my-folder/my-file', + '/summit25/', + ]); + expect(grayboxConfig.experiencePromoteConfig).to.deep.equal([ + 'summit25', 'max25', + ]); + expect(grayboxConfig.experienceDeleteConfig).to.deep.equal(['']); + expect(grayboxConfig.experienceDraftsOnlyConfig).to.deep.equal(['']); + }); + + // add test for failed fetch + it('should log error if fetch fails', async () => { + const mockResponse = { ok: false }; + daFetchStub.resolves(mockResponse); + const consoleErrorStub = sinon.stub(console, 'error'); + + await grayboxConfig.getConfig(); + + expect(daFetchStub.calledWith(`${DA_ORIGIN}/source/${org}/${repo}/.milo/graybox/config.json`)).to.be.true; + expect(consoleErrorStub.calledWith(`Failed to fetch graybox config for ${org}/${repo}`)).to.be.true; + }); + + it('should return the correct value for isPromoteEnabled', () => { + grayboxConfig.isGlobalPromoteEnabled = true; + expect(grayboxConfig.isPromoteEnabled()).to.be.true; + + grayboxConfig.isGlobalPromoteEnabled = false; + expect(grayboxConfig.isPromoteEnabled()).to.be.false; + + grayboxConfig.isGlobalPromoteEnabled = null; + grayboxConfig.experiencePromoteConfig = ['test']; + expect(grayboxConfig.isPromoteEnabled('test')).to.be.true; + }); + + it('should return the correct value for isDeleteEnabled', () => { + grayboxConfig.isGlobalDeleteEnabled = true; + expect(grayboxConfig.isDeleteEnabled()).to.be.true; + + grayboxConfig.isGlobalDeleteEnabled = false; + expect(grayboxConfig.isDeleteEnabled()).to.be.false; + + grayboxConfig.isGlobalDeleteEnabled = null; + grayboxConfig.experienceDeleteConfig = ['test']; + expect(grayboxConfig.isDeleteEnabled('test')).to.be.true; + }); + + it('should return the correct value for isDraftsOnly', () => { + grayboxConfig.isGlobalPromoteDraftsOnly = true; + expect(grayboxConfig.isDraftsOnly()).to.be.true; + + grayboxConfig.isGlobalPromoteDraftsOnly = false; + expect(grayboxConfig.isDraftsOnly()).to.be.false; + + grayboxConfig.isGlobalPromoteDraftsOnly = null; + grayboxConfig.experienceDraftsOnlyConfig = ['test']; + expect(grayboxConfig.isDraftsOnly('test')).to.be.true; + }); + + it('should return the correct value for getGlobalPromoteIgnorePaths', () => { + grayboxConfig.globalPromoteIgnorePaths = ['/test1', '/test2']; + expect(grayboxConfig.getGlobalPromoteIgnorePaths()).to.deep.equal(['/test1', '/test2']); + }); +}); diff --git a/test/tools/floodbox/graybox/promote-paths.test.js b/test/tools/floodbox/graybox/promote-paths.test.js new file mode 100644 index 00000000000..452bb778ba5 --- /dev/null +++ b/test/tools/floodbox/graybox/promote-paths.test.js @@ -0,0 +1,93 @@ +import { expect } from '@esm-bundle/chai'; +import sinon from 'sinon'; +import getFilesToPromote from '../../../../tools/floodbox/graybox/promote-paths.js'; +import RequestHandler from '../../../../tools/floodbox/request-handler.js'; + +describe('getFilesToPromote', () => { + let requestHandlerStub; + + beforeEach(() => { + requestHandlerStub = sinon.stub(RequestHandler.prototype, 'daFetch'); + }); + + afterEach(() => { + sinon.restore(); + }); + + it('should return files for paths ending with slash', async () => { + requestHandlerStub.resolves({ + ok: true, + json: async () => [ + { path: '/file1.html', ext: 'html' }, + { path: '/file2.json', ext: 'json' }, + ], + }); + + const result = await getFilesToPromote({ + accessToken: 'token', + org: 'org', + repo: 'repo', + expName: 'expName', + paths: ['/path/'], + }); + + expect(result).to.eql([ + { path: '/file1.html', ext: 'html' }, + { path: '/file2.json', ext: 'json' }, + ]); + }); + + it('should return files for paths ending with .json', async () => { + const result = await getFilesToPromote({ + accessToken: 'token', + org: 'org', + repo: 'repo', + expName: 'expName', + paths: ['/path/file.json'], + }); + + expect(result).to.eql([ + { path: '/path/file.json', ext: 'json', name: 'file' }, + ]); + }); + + it('should return html files for paths not ending with slash or .json', async () => { + const result = await getFilesToPromote({ + accessToken: 'token', + org: 'org', + repo: 'repo', + expName: 'expName', + paths: ['/path/file'], + }); + + expect(result).to.eql([ + { path: '/path/file.html', ext: 'html', name: 'file' }, + ]); + }); + + it('should handle empty paths array', async () => { + const result = await getFilesToPromote({ + accessToken: 'token', + org: 'org', + repo: 'repo', + expName: 'expName', + paths: [], + }); + + expect(result).to.eql([]); + }); + + it('should handle invalid response from daFetch', async () => { + requestHandlerStub.resolves({ ok: false }); + + const result = await getFilesToPromote({ + accessToken: 'token', + org: 'org', + repo: 'repo', + expName: 'expName', + paths: ['/path/'], + }); + + expect(result).to.eql([]); + }); +}); diff --git a/test/tools/floodbox/graybox/utils.test.js b/test/tools/floodbox/graybox/utils.test.js new file mode 100644 index 00000000000..42d6265f212 --- /dev/null +++ b/test/tools/floodbox/graybox/utils.test.js @@ -0,0 +1,84 @@ +import { expect } from '@esm-bundle/chai'; +import { validatePaths, getValidGraybox } from '../../../../tools/floodbox/graybox/utils.js'; + +describe('validatePaths', () => { + it('should return valid for correct paths with locale ', () => { + const paths = ['/org/repo-graybox/ca_fr/expName/myfile', '/org/repo-graybox/ca_fr/expName/myfile']; + const result = validatePaths(paths); + expect(result).to.eql({ valid: true, org: 'org', repo: 'repo-graybox', expName: 'expName' }); + }); + + it('should return valid for correct paths without locale', () => { + const paths = ['/org/repo-graybox/expName/myfile', '/org/repo-graybox/expName/myfile']; + const result = validatePaths(paths); + expect(result).to.eql({ valid: true, org: 'org', repo: 'repo-graybox', expName: 'expName' }); + }); + + it('should return invalid for paths with inconsistent org', () => { + const paths = ['/org1/repo-graybox/expName/myfile', '/org2/repo-graybox/expName/myfile']; + const result = validatePaths(paths); + expect(result).to.eql({ valid: false, org: '', repo: '', expName: '' }); + }); + + it('should return invalid for paths with inconsistent repo', () => { + const paths = ['/org/repo1-graybox/expName/myfile', '/org/repo2-graybox/expName/myfile']; + const result = validatePaths(paths); + expect(result).to.eql({ valid: false, org: '', repo: '', expName: '' }); + }); + + it('should return invalid for paths with inconsistent expName', () => { + const paths = ['/org/repo-graybox/expName/myfile1', '/org/repo-graybox/expName2/myfile1']; + const result = validatePaths(paths); + expect(result).to.eql({ valid: false, org: '', repo: '', expName: '' }); + }); + + it('should return invalid for paths with invalid locale', () => { + const paths = ['/org/repo-graybox/invalidLocale/expName/myfile', '/org/repo-graybox/fr/expName/myfile']; + const result = validatePaths(paths); + expect(result).to.eql({ valid: false, org: '', repo: '', expName: '' }); + }); + + it('should return invalid for paths with less than 4 parts', () => { + const paths = ['/org/repo-graybox']; + const result = validatePaths(paths); + expect(result).to.eql({ valid: false, org: '', repo: '', expName: '' }); + }); + + it('should return invalid for non-array input', () => { + const result = validatePaths('not an array'); + expect(result).to.eql({ valid: false, org: '', repo: '', expName: '' }); + }); + + it('should return invalid for empty array input', () => { + const result = validatePaths([]); + expect(result).to.eql({ valid: false, org: '', repo: '', expName: '' }); + }); + + it('should return invalid for paths not starting with a slash', () => { + const paths = ['org/repo-graybox/expName']; + const result = validatePaths(paths); + expect(result).to.eql({ valid: false, org: '', repo: '', expName: '' }); + }); + + it('should return invalid when path has invalid locale', () => { + const paths = ['/org/repo-graybox/expName/myfile', '/org/repo-graybox/invalidLocale/expName/myfile']; + const result = validatePaths(paths); + expect(result).to.eql({ valid: false, org: '', repo: '', expName: '' }); + }); +}); + +describe('getValidGraybox', () => { + it('should return a milo-graybox element with correct properties', async () => { + // fake DA_SDK response with context and token + const fakeDaSdk = Promise.resolve({ + context: { repo: 'fake-repo' }, + token: 'fake-token', + }); + const cmp = await getValidGraybox(fakeDaSdk); + + expect(cmp).to.be.instanceOf(HTMLElement); + expect(cmp.tagName.toLowerCase()).to.equal('milo-graybox'); + expect(cmp.repo).to.equal('fake-repo'); + expect(cmp.token).to.equal('fake-token'); + }); +}); diff --git a/test/tools/floodbox/promote.test.js b/test/tools/floodbox/promote.test.js new file mode 100644 index 00000000000..b22a0d14fa9 --- /dev/null +++ b/test/tools/floodbox/promote.test.js @@ -0,0 +1,108 @@ +import sinon from 'sinon'; +import promoteFiles from '../../../tools/floodbox/promote.js'; +import RequestHandler from '../../../tools/floodbox/request-handler.js'; + +describe('Promote', () => { + const accessToken = 'testToken'; + const org = 'testOrg'; + const repo = 'testRepo-pink'; + const expName = 'testExp'; + const files = [ + { path: '/testOrg/testRepo-pink/content/test1.html', ext: 'html' }, + { path: '/testOrg/testRepo-pink/content/test2.json', ext: 'json' }, + ]; + const callback = sinon.spy(); + let promoteType = 'floodgate'; + let daFetchStub; + let uploadContentStub; + + beforeEach(() => { + daFetchStub = sinon.stub(RequestHandler.prototype, 'daFetch'); + uploadContentStub = sinon.stub(RequestHandler.prototype, 'uploadContent'); + callback.resetHistory(); + }); + + afterEach(() => { + daFetchStub.restore(); + uploadContentStub.restore(); + }); + + it('should promote files successfully', async () => { + daFetchStub.resolves({ ok: true, text: () => 'file content' }); + uploadContentStub.resolves({ statusCode: 200 }); + + await promoteFiles({ + accessToken, org, repo, promoteType, files, callback, + }); + + sinon.assert.callCount(daFetchStub, files.length); + sinon.assert.callCount(uploadContentStub, files.length); + sinon.assert.callCount(callback, files.length); + sinon.assert.calledWithMatch(callback, { statusCode: 200 }); + }); + + it('should handle fetch errors', async () => { + daFetchStub.resolves({ ok: false, status: 404 }); + + await promoteFiles({ + accessToken, org, repo, promoteType, files, callback, + }); + + sinon.assert.callCount(daFetchStub, files.length); + sinon.assert.callCount(callback, files.length); + sinon.assert.calledWithMatch(callback, { statusCode: 404, errorMsg: 'Failed to fetch' }); + }); + + it('should handle upload errors', async () => { + daFetchStub.resolves({ ok: true, text: () => 'file content' }); + uploadContentStub.resolves({ statusCode: 500, errorMsg: 'Failed to upload file' }); + + await promoteFiles({ + accessToken, org, repo, promoteType, files, callback, + }); + + sinon.assert.callCount(daFetchStub, files.length); + sinon.assert.callCount(uploadContentStub, files.length); + sinon.assert.callCount(callback, files.length); + sinon.assert.calledWithMatch(callback, { statusCode: 500, errorMsg: 'Failed to upload file' }); + }); + + it('should handle blob content', async () => { + const blob = new Blob(['file content'], { type: 'application/octet-stream' }); + daFetchStub.resolves({ ok: true, blob: () => blob }); + uploadContentStub.resolves({ statusCode: 200 }); + + const fileArr = [ + { path: '/testOrg/testRepo-pink/content/image.png', ext: 'png' }, + ]; + await promoteFiles({ + accessToken, org, repo, promoteType, files: fileArr, callback, + }); + + sinon.assert.callCount(daFetchStub, fileArr.length); + sinon.assert.callCount(uploadContentStub, fileArr.length); + sinon.assert.callCount(callback, fileArr.length); + sinon.assert.calledWithMatch(callback, { statusCode: 200 }); + }); + + it('should handle promoteType graybox', async () => { + daFetchStub.resolves({ ok: true, text: () => 'file content' }); + uploadContentStub.resolves({ statusCode: 200 }); + + promoteType = 'graybox'; + const gbFiles = [ + { path: '/testOrg/testRepo-graybox/testExp/content/test1.html', ext: 'html' }, + { path: '/testOrg/testRepo-graybox/testExp/content/test2.json', ext: 'json' }, + ]; + await promoteFiles({ + accessToken, org, repo: 'testRepo-graybox', expName, promoteType, files: gbFiles, callback, + }); + + sinon.assert.callCount(daFetchStub, gbFiles.length); + sinon.assert.callCount(uploadContentStub, gbFiles.length); + sinon.assert.callCount(callback, gbFiles.length); + sinon.assert.calledWithMatch(callback, { statusCode: 200 }); + + sinon.assert.calledWithMatch(uploadContentStub, '/testOrg/testRepo/content/test1.html'); + }); +}); diff --git a/test/tools/floodbox/references.test.js b/test/tools/floodbox/references.test.js new file mode 100644 index 00000000000..ea391664f95 --- /dev/null +++ b/test/tools/floodbox/references.test.js @@ -0,0 +1,104 @@ +import { expect } from '@esm-bundle/chai'; +import sinon from 'sinon'; +import findFragmentsAndAssets from '../../../tools/floodbox/references.js'; +import RequestHandler from '../../../tools/floodbox/request-handler.js'; + +describe('References', () => { + const accessToken = 'test-token'; + const htmlPaths = ['/path1', '/path2']; + const org = 'test-org'; + const repo = 'test-repo'; + let requestHandlerStub; + + beforeEach(() => { + requestHandlerStub = sinon.stub(RequestHandler.prototype, 'daFetch'); + }); + + afterEach(() => { + sinon.restore(); + }); + + it('returns referenced fragments and assets for valid links with different domains', async () => { + requestHandlerStub + .onFirstCall().resolves({ + ok: true, + text: async () => 'Link', + }) + .onSecondCall().resolves({ + ok: true, + text: async () => 'Link', + }); + + const result = await findFragmentsAndAssets({ accessToken, htmlPaths, org, repo }); + expect(result).to.eql(new Set(['/test-org/test-repo/fragments/path1', '/test-org/test-repo/fragments/path2'])); + }); + + it('returns referenced fragments and assets for valid links with different file types', async () => { + requestHandlerStub + .onFirstCall().resolves({ + ok: true, + text: async () => 'Link1Link2', + }) + .onSecondCall().resolves({ + ok: true, + text: async () => 'Link3Link4', + }); + + const result = await findFragmentsAndAssets({ accessToken, htmlPaths, org, repo }); + expect(result).to.eql(new Set(['/test-org/test-repo/path1.pdf', '/test-org/test-repo/path3.svg', '/test-org/test-repo/path4.json'])); + }); + + it('returns an empty set when no links are present in the HTML', async () => { + requestHandlerStub + .onFirstCall().resolves({ + ok: true, + text: async () => 'No links here', + }) + .onSecondCall().resolves({ + ok: true, + text: async () => 'Still no links', + }); + + const result = await findFragmentsAndAssets({ accessToken, htmlPaths, org, repo }); + expect(result).to.eql(new Set()); + }); + + it('returns an empty set when links do not match the reference pattern', async () => { + requestHandlerStub + .onFirstCall().resolves({ + ok: true, + text: async () => 'Link', + }) + .onSecondCall().resolves({ + ok: true, + text: async () => 'Link', + }); + + const result = await findFragmentsAndAssets({ accessToken, htmlPaths, org, repo }); + expect(result).to.eql(new Set()); + }); + + it('handles mixed valid and invalid links', async () => { + requestHandlerStub + .onFirstCall().resolves({ + ok: true, + text: async () => 'Valid LinkInvalid Link', + }) + .onSecondCall().resolves({ + ok: true, + text: async () => 'Valid Link', + }); + + const result = await findFragmentsAndAssets({ accessToken, htmlPaths, org, repo }); + expect(result).to.eql(new Set(['/test-org/test-repo/fragments/path1', '/test-org/test-repo/fragments/path2'])); + }); + + it('handles fetch errors gracefully', async () => { + requestHandlerStub + .onFirstCall().resolves({ ok: false }) + .onSecondCall().resolves({ ok: false }); + + const result = await findFragmentsAndAssets({ accessToken, htmlPaths, org, repo }); + expect(result).to.eql(new Set()); + }); +}); diff --git a/test/tools/floodbox/request-handler.test.js b/test/tools/floodbox/request-handler.test.js new file mode 100644 index 00000000000..4ede7998a03 --- /dev/null +++ b/test/tools/floodbox/request-handler.test.js @@ -0,0 +1,70 @@ +import { expect } from '@esm-bundle/chai'; +import sinon from 'sinon'; +import RequestHandler from '../../../tools/floodbox/request-handler.js'; + +describe('RequestHandler', () => { + let requestHandler; + let fetchStub; + const accessToken = 'testToken'; + + beforeEach(() => { + requestHandler = new RequestHandler(accessToken); + fetchStub = sinon.stub(window, 'fetch'); + }); + + afterEach(() => { + fetchStub.restore(); + }); + + it('should return 401 status for unauthorized access', async () => { + fetchStub.resolves(new Response(null, { status: 401 })); + const response = await requestHandler.daFetch('https://main--da-hello--sukamat.aem.page/file1'); + expect(response).to.equal(401); + }); + + it('should return response for authorized access', async () => { + fetchStub.resolves(new Response(null, { status: 200 })); + const response = await requestHandler.daFetch('https://main--da-hello--sukamat.aem.page/file1'); + expect(response.status).to.equal(200); + }); + + it('should fail to upload content with error status', async () => { + fetchStub.onFirstCall().resolves(new Response(null, { status: 500 })); + const response = await requestHandler.uploadContent('/path/to/file', 'content', 'html'); + expect(response.statusCode).to.equal(500); + }); + + it('should upload content for editable file successfully', async () => { + fetchStub.onFirstCall().resolves(new Response(null, { status: 200 })); + fetchStub.onSecondCall().resolves(new Response(null, { status: 200 })); + const response = await requestHandler.uploadContent('/path/to/file', 'content', 'html'); + expect(response.statusCode).to.equal(200); + }); + + it('should fail to upload content for non-editable file', async () => { + fetchStub.resolves(new Response(null, { status: 200 })); + const response = await requestHandler.uploadContent('/path/to/file', 'content', 'pdf'); + expect(response.statusCode).to.equal(200); + }); + + it('should upload content for non-editable file successfully', async () => { + fetchStub.resolves(new Response(null, { status: 500 })); + const response = await requestHandler.uploadContent('/path/to/file', 'content', 'pdf'); + expect(response.statusCode).to.equal(500); + }); + + it('should delete content successfully', async () => { + fetchStub.resolves(new Response(null, { status: 204 })); + const response = await requestHandler.deleteContent('/path/to/file'); + expect(response.statusCode).to.equal(204); + expect(response.filePath).to.equal('/path/to/file'); + }); + + it('should fail to delete content with error status', async () => { + fetchStub.resolves(new Response(null, { status: 500 })); + const response = await requestHandler.deleteContent('/path/to/file'); + expect(response.statusCode).to.equal(500); + expect(response.filePath).to.equal('/path/to/file'); + expect(response.errorMsg).to.equal('Failed to delete file'); + }); +}); diff --git a/test/tools/floodbox/search-replace.test.js b/test/tools/floodbox/search-replace.test.js new file mode 100644 index 00000000000..00c7850699b --- /dev/null +++ b/test/tools/floodbox/search-replace.test.js @@ -0,0 +1,70 @@ +import { expect } from '@esm-bundle/chai'; +import searchAndReplace from '../../../tools/floodbox/search-replace.js'; + +describe('searchAndReplace', () => { + it('should replace floodgate URLs correctly', () => { + const content = 'https://main--repo-pink--org.aem.page/folder/page1'; + const result = searchAndReplace({ + content, + searchType: 'floodgate', + org: 'org', + repo: 'repo-pink', + expName: 'expName', + }); + expect(result).to.equal('https://main--repo--org.aem.page/folder/page1'); + }); + + it('should replace graybox URLs and remove graybox styles and blocks', () => { + const content = ` +
      Content
      +
      Graybox Block
      + Link + `; + const result = searchAndReplace({ + content, + searchType: 'graybox', + org: 'org', + repo: 'repo-graybox', + expName: 'expName', + }); + expect(result).to.not.include('gb-style'); + expect(result).to.not.include('class="graybox"'); + expect(result).to.include('https://main--repo-graybox--org.aem.page/page'); + }); + + it('should handle unknown search type gracefully', () => { + const content = 'https://main--repo--org.aem.page/expName/page'; + const result = searchAndReplace({ + content, + searchType: 'unknown', + org: 'org', + repo: 'repo', + expName: 'expName', + }); + expect(result).to.equal(content); + }); + + it('should handle empty content', () => { + const content = ''; + const result = searchAndReplace({ + content, + searchType: 'floodgate', + org: 'org', + repo: 'repo-pink', + expName: 'expName', + }); + expect(result).to.equal(''); + }); + + it('should handle content without matching URLs', () => { + const content = 'https://main--lalaland--org.aem.page/folder/page1'; + const result = searchAndReplace({ + content, + searchType: 'floodgate', + org: 'org', + repo: 'repo-pink', + expName: 'expName', + }); + expect(result).to.equal(content); + }); +}); diff --git a/test/tools/floodbox/utils.test.js b/test/tools/floodbox/utils.test.js new file mode 100644 index 00000000000..e091ed1965f --- /dev/null +++ b/test/tools/floodbox/utils.test.js @@ -0,0 +1,72 @@ +import { expect } from '@esm-bundle/chai'; +import { isEditableFile, getFileName, getFileExtension } from '../../../tools/floodbox/utils.js'; + +describe('isEditableFile', () => { + it('should return true for html extension', () => { + expect(isEditableFile('html')).to.be.true; + }); + + it('should return true for json extension', () => { + expect(isEditableFile('json')).to.be.true; + }); + + it('should return false for js extension', () => { + expect(isEditableFile('js')).to.be.false; + }); + + it('should return false for empty string', () => { + expect(isEditableFile('')).to.be.false; + }); + + it('should return false for null', () => { + expect(isEditableFile(null)).to.be.false; + }); + + it('should return false for undefined', () => { + expect(isEditableFile(undefined)).to.be.false; + }); +}); + +describe('getFileName', () => { + it('should return file name without extension for a given path', () => { + expect(getFileName('/path/to/file.html')).to.equal('file'); + }); + + it('should return file name without extension for a path with multiple dots', () => { + expect(getFileName('/path/to/file.name.with.dots.html')).to.equal('file.name.with.dots'); + }); + + it('should return empty string for a path ending with a slash', () => { + expect(getFileName('/path/to/')).to.equal(''); + }); + + it('should return file name without extension for a path without extension', () => { + expect(getFileName('/path/to/file')).to.equal('file'); + }); + + it('should return file name without extension for a path with multiple slashes', () => { + expect(getFileName('/path/to//file.html')).to.equal('file'); + }); +}); + +describe('getFileExtension', () => { + it('should return extension for a given path', () => { + expect(getFileExtension('/path/to/file.html')).to.equal('html'); + }); + + it('should return extension for a path with multiple dots', () => { + expect(getFileExtension('/path/to/file.name.with.dots.html')).to.equal('html'); + }); + + it('should return null for a path ending with a slash', () => { + expect(getFileExtension('/path/to/')).to.be.null; + }); + + it('should return extension for a path without extension', () => { + expect(getFileExtension('/path/to/file')).to.be.null; + }); + + it('should return extension for a path with multiple slashes', () => { + expect(getFileExtension('/path/to//file.html')).to.equal('html'); + }); +}); diff --git a/test/utils/federated.test.js b/test/utils/federated.test.js index cc19a72ff39..909a140be2a 100644 --- a/test/utils/federated.test.js +++ b/test/utils/federated.test.js @@ -1,5 +1,5 @@ import { expect } from '@esm-bundle/chai'; -import { getFederatedUrl, getFederatedContentRoot } from '../../libs/utils/federated.js'; +import { getFederatedUrl, getFederatedContentRoot } from '../../libs/utils/utils.js'; const baseHost = 'https://main--federal--adobecom.aem.page'; diff --git a/test/utils/lana.test.js b/test/utils/lana.test.js index b7d635a82dc..b01db58e31b 100644 --- a/test/utils/lana.test.js +++ b/test/utils/lana.test.js @@ -22,6 +22,7 @@ it('verify default options', () => { sampleRate: 1, tags: '', implicitSampleRate: 1, + isProdDomain: false, useProd: true, }); }); @@ -109,6 +110,7 @@ describe('LANA', () => { endpointStage: 'https://www.stage.adobe.com/lana/ll', errorType: 'e', implicitSampleRate: 100, + isProdDomain: false, sampleRate: 100, tags: '', useProd: true, @@ -132,6 +134,7 @@ describe('LANA', () => { endpointStage: 'https://www.stage.adobe.com/lana/ll', errorType: 'e', implicitSampleRate: 100, + isProdDomain: false, sampleRate: 100, tags: '', useProd: true, diff --git a/test/utils/lanaDefaultOptions.test.js b/test/utils/lanaDefaultOptions.test.js index 324a9f5ec46..04efb5e58d6 100644 --- a/test/utils/lanaDefaultOptions.test.js +++ b/test/utils/lanaDefaultOptions.test.js @@ -20,6 +20,7 @@ it('lana should load existing window.lana.options', async () => { sampleRate: 100, tags: '', implicitSampleRate: 100, + isProdDomain: false, endpointStage: 'https://www.stage.adobe.com/lana/ll', useProd: true, }); diff --git a/test/utils/logWebVitals.test.js b/test/utils/logWebVitals.test.js index 199e7ca1dda..b045a7284e3 100644 --- a/test/utils/logWebVitals.test.js +++ b/test/utils/logWebVitals.test.js @@ -23,8 +23,11 @@ describe('Log Web Vitals', () => { const downlink = parseFloat(vitals.downlink); expect(downlink).to.be.within(0, 10); expect(parseInt(vitals.lcp, 10)).to.be.greaterThan(1); - expect(vitals.lcpEl).to.be.equal('/test/utils/mocks/media_.png'); - expect(vitals.lcpElType).to.be.equal('img'); + expect(vitals).to.have.property('lcpEl'); + expect(vitals.lcpEl).to.be.a('string').that.is.not.empty; + expect(vitals).to.have.property('lcpElType'); + expect(vitals.lcpElType).to.be.a('string').that.is.not.empty; + expect(vitals.lcpSectionOne).to.equal('true'); expect(vitals.loggedIn).to.equal('false'); expect(vitals.manifest3path).to.equal('/cc-shared/fragments/promos/2024/americas/cci-all-apps-q3/cci-all-apps-q3.json'); expect(vitals.manifest3selected).to.equal('all'); diff --git a/test/utils/logWebVitalsUtils.test.js b/test/utils/logWebVitalsUtils.test.js index 7bbee899847..c98c6a99d4c 100644 --- a/test/utils/logWebVitalsUtils.test.js +++ b/test/utils/logWebVitalsUtils.test.js @@ -41,9 +41,12 @@ describe('Log Web Vitals Utils', () => { const downlink = parseFloat(vitals.downlink); expect(downlink).to.be.within(0, 10); expect(parseInt(vitals.lcp, 10)).to.be.greaterThan(1); - expect(vitals.lcpEl).to.be.equal('/test/utils/mocks/media_.png'); - expect(vitals.lcpElType).to.be.equal('img'); - expect(vitals.lcpSectionOne).to.be.equal('true'); + + expect(vitals).to.have.property('lcpEl'); + expect(vitals.lcpEl).to.be.a('string').that.is.not.empty; + expect(vitals).to.have.property('lcpElType'); + expect(vitals.lcpElType).to.be.a('string').that.is.not.empty; + expect(vitals.lcpSectionOne).to.equal('true'); expect(vitals.loggedIn).to.equal('false'); expect(vitals.os).to.be.oneOf(['mac', 'win', 'android', 'linux', '']); diff --git a/test/utils/mocks/body.html b/test/utils/mocks/body.html index 648965a5eda..4426e3cf32f 100644 --- a/test/utils/mocks/body.html +++ b/test/utils/mocks/body.html @@ -32,6 +32,8 @@

      Disable Autoblock

      Auto Block

      + +

      HTTP Link

      @@ -39,6 +41,37 @@

      +

      + Get App For Free +

      + +

      + Text +

      +

      + Text | Aria label +

      +

      + Text | Other text | Aria label +

      +

      + Text|Other text|Aria label +

      +

      + Text | Aria label ~!@#$%^&*()-_=+[{/;:'",.?}] special characters +

      +

      + + + Text + +

      +

      + + + Text | Aria label + +

      diff --git a/test/utils/mocks/head-localNav.html b/test/utils/mocks/head-localNav.html new file mode 100644 index 00000000000..95dcd4437b9 --- /dev/null +++ b/test/utils/mocks/head-localNav.html @@ -0,0 +1,4 @@ + + +Document Title + diff --git a/test/utils/mocks/head-title-append.html b/test/utils/mocks/head-title-append.html index 4aec2d3c739..f4014f91fe1 100644 --- a/test/utils/mocks/head-title-append.html +++ b/test/utils/mocks/head-title-append.html @@ -1,3 +1,5 @@ - + + + Document Title - + diff --git a/test/utils/mocks/head.html b/test/utils/mocks/head.html index 669f58a4d1a..642d864be2a 100644 --- a/test/utils/mocks/head.html +++ b/test/utils/mocks/head.html @@ -3,3 +3,5 @@ + + diff --git a/test/utils/mocks/mep/head-ajo-off.html b/test/utils/mocks/mep/head-ajo-off.html new file mode 100644 index 00000000000..b16aa329c1f --- /dev/null +++ b/test/utils/mocks/mep/head-ajo-off.html @@ -0,0 +1,4 @@ + +Document Title + + diff --git a/test/utils/mocks/mep/head-ajo-on.html b/test/utils/mocks/mep/head-ajo-on.html new file mode 100644 index 00000000000..d159abd762a --- /dev/null +++ b/test/utils/mocks/mep/head-ajo-on.html @@ -0,0 +1,4 @@ + +Document Title + + diff --git a/test/utils/mocks/mep/head-ajo-postlcp.html b/test/utils/mocks/mep/head-ajo-postlcp.html new file mode 100644 index 00000000000..d1546ed7c0e --- /dev/null +++ b/test/utils/mocks/mep/head-ajo-postlcp.html @@ -0,0 +1,3 @@ + +Document Title + diff --git a/test/utils/utils-enable-perf.test.js b/test/utils/utils-enable-perf.test.js index b96c3bac5ad..7e8ae7aa68d 100644 --- a/test/utils/utils-enable-perf.test.js +++ b/test/utils/utils-enable-perf.test.js @@ -6,74 +6,85 @@ function mockPerformanceData(serverTimingData) { } describe('enablePersonalizationV2', () => { - let originalQuerySelector; - - beforeEach(() => { - originalQuerySelector = document.head.querySelector; - }); - - afterEach(() => { - document.head.querySelector = originalQuerySelector; - }); - it('should return true when personalization-v2 meta tag is present and user is signed out', () => { - document.head.querySelector = () => ({ name: 'personalization-v2' }); + const metaTag = document.createElement('meta'); + metaTag.setAttribute('name', 'personalization-v2'); + metaTag.setAttribute('content', 'personalization-v2'); + document.head.appendChild(metaTag); mockPerformanceData([]); const result = enablePersonalizationV2(); expect(result).to.be.true; + metaTag.parentNode.removeChild(metaTag); }); it('should return false when personalization-v2 meta tag is present and user is signed in', () => { - document.head.querySelector = () => ({ name: 'personalization-v2' }); - + const metaTag = document.createElement('meta'); + metaTag.setAttribute('name', 'personalization-v2'); + metaTag.setAttribute('content', 'personalization-v2'); + document.head.appendChild(metaTag); mockPerformanceData([{ name: 'sis', description: '1' }]); const result = enablePersonalizationV2(); expect(result).to.be.false; + metaTag.parentNode.removeChild(metaTag); }); it('should return false when personalization-v2 meta tag is absent', () => { - document.head.querySelector = () => null; - const result = enablePersonalizationV2(); expect(result).to.be.false; }); it('should return true when serverTiming is empty (signed out)', () => { - document.head.querySelector = () => ({ name: 'personalization-v2' }); + const metaTag = document.createElement('meta'); + metaTag.setAttribute('name', 'personalization-v2'); + metaTag.setAttribute('content', 'personalization-v2'); + document.head.appendChild(metaTag); mockPerformanceData([]); const result = enablePersonalizationV2(); expect(result).to.be.true; + metaTag.parentNode.removeChild(metaTag); }); it('should return false when serverTiming has `sis` other than `0` (signed in)', () => { - document.head.querySelector = () => ({ name: 'personalization-v2' }); + const metaTag = document.createElement('meta'); + metaTag.setAttribute('name', 'personalization-v2'); + metaTag.setAttribute('content', 'personalization-v2'); + document.head.appendChild(metaTag); mockPerformanceData([{ name: 'sis', description: '1' }]); const result = enablePersonalizationV2(); expect(result).to.be.false; + metaTag.parentNode.removeChild(metaTag); }); it('should return true when serverTiming has `sis` equal to `0` (signed out)', () => { - document.head.querySelector = () => ({ name: 'personalization-v2' }); + const metaTag = document.createElement('meta'); + metaTag.setAttribute('name', 'personalization-v2'); + metaTag.setAttribute('content', 'personalization-v2'); + document.head.appendChild(metaTag); mockPerformanceData([{ name: 'sis', description: '0' }]); const result = enablePersonalizationV2(); expect(result).to.be.true; + metaTag.parentNode.removeChild(metaTag); }); it('should return false when serverTiming has other data but `sis` is missing (signed in)', () => { - document.head.querySelector = () => ({ name: 'personalization-v2' }); + const metaTag = document.createElement('meta'); + metaTag.setAttribute('name', 'personalization-v2'); + metaTag.setAttribute('content', 'personalization-v2'); + document.head.appendChild(metaTag); mockPerformanceData([{ name: 'other', description: 'value' }]); const result = enablePersonalizationV2(); expect(result).to.be.false; + metaTag.parentNode.removeChild(metaTag); }); }); diff --git a/test/utils/utils-mep-with-params.test.js b/test/utils/utils-mep-with-params.test.js index 8eb2fa0795a..12a82797e47 100644 --- a/test/utils/utils-mep-with-params.test.js +++ b/test/utils/utils-mep-with-params.test.js @@ -11,9 +11,11 @@ describe('MEP Utils', () => { setTimeout(() => { const persEnabled = getMepEnablement('personalization'); const promoEnabled = getMepEnablement('manifestnames', 'promo'); + const ajoEnabled = getMepEnablement('ajo'); const targetEnabled = getMepEnablement('target'); expect(promoEnabled).to.equal(false); expect(persEnabled).to.equal(false); + expect(ajoEnabled).to.equal(false); expect(targetEnabled).to.equal('postlcp'); }, 1000); }); diff --git a/test/utils/utils-mep.test.js b/test/utils/utils-mep.test.js index 8b161acb5ed..7e284573c95 100644 --- a/test/utils/utils-mep.test.js +++ b/test/utils/utils-mep.test.js @@ -33,12 +33,12 @@ describe('MEP Utils', () => { }); }); describe('getMepEnablement', async () => { - it('checks target metadata set to off', async () => { + it('checks target metadata set to on', async () => { document.head.innerHTML = await readFile({ path: './mocks/mep/head-target-on.html' }); const targetEnabled = getMepEnablement('target'); expect(targetEnabled).to.equal(true); }); - it('checks target metadata set to on', async () => { + it('checks target metadata set to off', async () => { document.head.innerHTML = await readFile({ path: './mocks/mep/head-target-off.html' }); const targetEnabled = getMepEnablement('target'); expect(targetEnabled).to.equal(false); @@ -48,6 +48,21 @@ describe('MEP Utils', () => { const targetEnabled = getMepEnablement('target'); expect(targetEnabled).to.equal('postlcp'); }); + it('checks ajo metadata set to on', async () => { + document.head.innerHTML = await readFile({ path: './mocks/mep/head-ajo-on.html' }); + const ajoEnabled = getMepEnablement('ajo'); + expect(ajoEnabled).to.equal(true); + }); + it('checks ajo metadata set to off', async () => { + document.head.innerHTML = await readFile({ path: './mocks/mep/head-ajo-off.html' }); + const ajoEnabled = getMepEnablement('ajo'); + expect(ajoEnabled).to.equal(false); + }); + it('checks ajo metadata set to postlcp', async () => { + document.head.innerHTML = await readFile({ path: './mocks/mep/head-ajo-postlcp.html' }); + const ajoEnabled = getMepEnablement('ajo'); + expect(ajoEnabled).to.equal('postlcp'); + }); it('checks from just metadata with no target metadata', async () => { document.head.innerHTML = await readFile({ path: './mocks/mep/head-promo.html' }); const persEnabled = getMepEnablement('personalization'); diff --git a/test/utils/utils.test.js b/test/utils/utils.test.js index 88a39e6e1d6..79c46e3b743 100644 --- a/test/utils/utils.test.js +++ b/test/utils/utils.test.js @@ -96,19 +96,36 @@ describe('Utils', () => { }); it('render meta performanceV2 renders the normal flow', async () => { - // const spyOnLoadMartech = sinon.spy(loadMartech); + const metaTag = document.createElement('meta'); + metaTag.setAttribute('name', 'personalization-v2'); + metaTag.setAttribute('content', 'personalization-v2'); + document.head.appendChild(metaTag); + + const bodyWithheader = await readFile({ path: './mocks/body-gnav.html' }); + document.body.innerHTML = bodyWithheader; + + await utils.loadArea(); + expect(document.querySelector('.global-navigation')).to.exist; + }); + + it('render meta performanceV2 renders the normal flow with params', async () => { + const params = new URLSearchParams({ 'target-timeout': '1000' }); + const baseUrl = `${window.location.origin}${window.location.pathname}`; + + const newUrl = `${baseUrl}?${params.toString()}`; + + window.history.pushState({ path: newUrl }, '', newUrl); const localHead = await readFile({ path: './mocks/mep/head-target-postlcp.html' }); document.head.innerHTML = localHead; const metaTag = document.createElement('meta'); metaTag.setAttribute('name', 'personalization-v2'); + metaTag.setAttribute('content', 'on'); document.head.appendChild(metaTag); const bodyWithheader = await readFile({ path: './mocks/body-gnav.html' }); document.body.innerHTML = bodyWithheader; await utils.loadArea(); - // expect(spyOnLoadMartech.called).to.be.true; - // spyOnLoadMartech.resetHistory(); expect(document.querySelector('.global-navigation')).to.exist; }); @@ -212,6 +229,43 @@ describe('Utils', () => { }); }); + describe('Aria label appendment', () => { + it('appends aria label if defined', () => { + const theText = 'Text'; + const theAriaLabel = 'Aria label'; + + const noAriaLabelElem = document.querySelector('.aria-label-none'); + expect(noAriaLabelElem.getAttribute('aria-label')).to.be.null; + expect(noAriaLabelElem.innerText).to.equal(theText); + + const simpleAriaLabelElem = document.querySelector('.aria-label-simple'); + expect(simpleAriaLabelElem.getAttribute('aria-label')).to.equal(theAriaLabel); + expect(simpleAriaLabelElem.innerText).to.equal(theText); + + const pipedAriaLabelElem = document.querySelector('.aria-label-piped'); + expect(pipedAriaLabelElem.getAttribute('aria-label')).to.equal(theAriaLabel); + expect(pipedAriaLabelElem.innerText).to.equal(`${theText} | Other text`); + + const specialCharAriaLabelElem = document.querySelector('.aria-label--special-char'); + expect(specialCharAriaLabelElem.getAttribute('aria-label')).to.equal(`${theAriaLabel} ~!@#$%^&*()-_=+[{/;:'",.?}] special characters`); + expect(specialCharAriaLabelElem.innerText).to.equal(theText); + + const noSpacePipedAriaLabelElem = document.querySelector('.aria-label-piped--no-space'); + expect(noSpacePipedAriaLabelElem.getAttribute('aria-label')).to.equal(theAriaLabel); + expect(noSpacePipedAriaLabelElem.innerText).to.equal(`${theText}|Other text`); + + const iconNoAriaLabelElem = document.querySelector('.aria-label-icon-none'); + expect(iconNoAriaLabelElem.getAttribute('aria-label')).to.be.null; + expect(iconNoAriaLabelElem.querySelector('.icon')).to.exist; + expect(iconNoAriaLabelElem.innerText).to.equal(theText); + + const iconAriaLabelElem = document.querySelector('.aria-label-icon-simple'); + expect(iconAriaLabelElem.getAttribute('aria-label')).to.equal(theAriaLabel); + expect(iconAriaLabelElem.querySelector('.icon')).to.exist; + expect(iconAriaLabelElem.innerText).to.equal(theText); + }); + }); + describe('Fragments', () => { it('fully unwraps a fragment', () => { const fragments = document.querySelectorAll('.link-block.fragment'); @@ -372,6 +426,13 @@ describe('Utils', () => { expect(noFollowLink.href).to.equal('https://www.adobe.com/test'); }); + it('Add data-attribute "data-http-link" if http shceme found', () => { + const linksContainer = document.querySelector('main div'); + utils.decorateLinks(linksContainer); + const httpLink = linksContainer.querySelector('[data-http-link]'); + expect(httpLink.dataset.httpLink).to.equal('true'); + }); + it('Sets up milo.deferredPromise', async () => { const { resolveDeferred } = utils.getConfig(); expect(window.milo.deferredPromise).to.exist; @@ -686,6 +747,7 @@ describe('Utils', () => { }); }); + // MARK: title-append describe('title-append', async () => { beforeEach(async () => { document.head.innerHTML = await readFile({ path: './mocks/head-title-append.html' }); @@ -693,11 +755,13 @@ describe('Utils', () => { it('should append to title using string from metadata', async () => { const expected = 'Document Title NOODLE'; await utils.loadArea(); - await waitFor(() => document.title === expected, 2000); expect(document.title).to.equal(expected); + expect(document.querySelector('meta[property="og:title"]')?.getAttribute('content'), expected); + expect(document.querySelector('meta[name="twitter:title"]')?.getAttribute('content'), expected); }); }); + // MARK: seotech describe('seotech', async () => { beforeEach(async () => { window.lana = { log: (msg) => console.error(msg) }; @@ -903,4 +967,43 @@ describe('Utils', () => { expect(utils.filterDuplicatedLinkBlocks(blocks)).to.deep.equal([block1, block2]); }); }); + + describe('localNav', async () => { + it('Preserving space to avoid CLS issue', async () => { + const footer = document.createElement('footer'); + footer.innerHTML = '

      Footer Content

      '; + document.body.appendChild(footer); + document.head.innerHTML = await readFile({ path: './mocks/head-localNav.html' }); + document.body.appendChild(document.createElement('header')); + await utils.loadArea(); + console.log(document.querySelector('.feds-localnav')); + expect(document.querySelector('.feds-localnav')).to.exist; + }); + }); + + describe('loadFooter', async () => { + it('Should load if footer meta is not off', async () => { + const footer = document.createElement('footer'); + footer.innerHTML = '

      Footer Content

      '; + document.body.appendChild(footer); + await utils.loadArea(); + expect(document.querySelector('footer')).to.exist; + }); + it('Should load if footer is off', async () => { + const metaTag = document.createElement('meta'); + metaTag.setAttribute('name', 'footer'); + metaTag.setAttribute('content', 'off'); + document.head.appendChild(metaTag); + + const footer = document.createElement('footer'); + footer.innerHTML = '

      Footer Content

      '; + document.body.appendChild(footer); + await utils.loadArea(); + expect(document.querySelector('footer')).to.exist; + + metaTag.setAttribute('name', 'footer'); + metaTag.setAttribute('content', 'on'); + document.head.appendChild(metaTag); + }); + }); }); diff --git a/tools/floodbox/bulk-action.js b/tools/floodbox/bulk-action.js new file mode 100644 index 00000000000..56cae562921 --- /dev/null +++ b/tools/floodbox/bulk-action.js @@ -0,0 +1,64 @@ +import { AEM_ORIGIN } from './constants.js'; +import RequestHandler from './request-handler.js'; + +const BATCH_SIZE = 25; +const BATCH_DELAY = 2000; + +export class BulkAction { + constructor({ org, repo, accessToken, callback }) { + this.org = org; + this.repo = repo; + this.callback = callback; + this.accessToken = accessToken; + this.requestHandler = new RequestHandler(accessToken); + this.batchCount = 0; + } + + static cleanUpPath(path) { + let cleanedPath = path.replace(/\.html$/, ''); + cleanedPath = cleanedPath.replace(/^\/[^/]+\/[^/]+/, ''); + return cleanedPath; + } + + static delay = () => new Promise((resolve) => { + setTimeout(resolve, BATCH_DELAY); + }); + + async previewOrPublishPath({ path, action, isDelete = false }) { + const cleanedPath = BulkAction.cleanUpPath(path); + const method = isDelete ? 'DELETE' : 'POST'; + const opts = { method }; + const aemUrl = `${AEM_ORIGIN}/${action}/${this.org}/${this.repo}/main${cleanedPath}`; + const resp = await this.requestHandler.daFetch(aemUrl, opts); + if (!resp.ok) { + // eslint-disable-next-line no-console + console.error(`Failed to ${action} : ${resp.status} :: ${aemUrl}`); + this.callback({ statusCode: resp.status, aemUrl, errorMsg: `Failed to ${action}` }); + } else { + this.callback({ statusCode: resp.status, aemUrl }); + } + } + + async previewOrPublishPaths({ paths, action, isDelete = false }) { + for (let i = 0; i < paths.length; i += BATCH_SIZE) { + const batch = paths.slice(i, i + BATCH_SIZE); + // eslint-disable-next-line no-console,no-plusplus + console.log(`Batch number : ${++this.batchCount}`); + await Promise.all(batch.map((path) => this.previewOrPublishPath({ path, action, isDelete }))); + // eslint-disable-next-line no-console + console.log(`Waiting for ${BATCH_DELAY / 1000} seconds before processing the next batch...`); + await BulkAction.delay(); + } + } +} + +async function previewOrPublishPaths({ + org, repo, paths, action, accessToken, callback, isDelete = false, +}) { + const bulkAction = new BulkAction({ org, repo, accessToken, callback }); + // eslint-disable-next-line no-console + console.log(`Action: ${action} :: isDelete: ${isDelete}`); + await bulkAction.previewOrPublishPaths({ paths, action, isDelete }); +} + +export default previewOrPublishPaths; diff --git a/tools/floodbox/constants.js b/tools/floodbox/constants.js new file mode 100644 index 00000000000..b36d57215ab --- /dev/null +++ b/tools/floodbox/constants.js @@ -0,0 +1,23 @@ +const DA_ORIGIN = 'https://admin.da.live'; +const AEM_ORIGIN = 'https://admin.hlx.page'; + +const SUPPORTED_FILES = { + html: 'text/html', + jpeg: 'image/jpeg', + json: 'application/json', + jpg: 'image/jpeg', + png: 'image/png', + gif: 'image/gif', + mp4: 'video/mp4', + pdf: 'application/pdf', + svg: 'image/svg+xml', +}; + +const SUCCESS_CODES = [200, 201, 204]; + +export { + DA_ORIGIN, + AEM_ORIGIN, + SUPPORTED_FILES, + SUCCESS_CODES, +}; diff --git a/tools/floodbox/crawl-tree.js b/tools/floodbox/crawl-tree.js new file mode 100644 index 00000000000..c3c0bd047a1 --- /dev/null +++ b/tools/floodbox/crawl-tree.js @@ -0,0 +1,147 @@ +/** + * Initial crawl code from https://github.com/da-sites/nexter/blob/main/nx/public/utils/tree.js + * Modified to cater Graybox use-case where the crawl is done at the experience folder level + * across all regions. + * Eg: /org/repo/exp1, /org/repo//exp1 etc. +*/ + +import RequestHandler from './request-handler.js'; + +class CrawlTree { + constructor(callback, accessToken, maxConcurrent = 500, crawlType = 'default', expName = '', isDraftsOnly = false) { + this.queue = []; + this.activeCount = 0; + this.maxConcurrent = maxConcurrent; + this.callback = callback; + this.accessToken = accessToken; + this.crawlType = crawlType; + this.expName = expName; + this.isDraftsOnly = isDraftsOnly; + this.requestHandler = new RequestHandler(this.accessToken); + // eslint-disable-next-line no-useless-escape + this.grayboxPathPattern = new RegExp(`^\/[^\/]+\/[^\/]+\/(?:[^\/]+\/)?${expName}(?:\/|$)`); + if (this.isDraftsOnly && this.crawlType === 'graybox') { + // eslint-disable-next-line no-useless-escape + this.grayboxPathPattern = new RegExp(`^\/[^\/]+\/[^\/]+\/(?:[^\/]+\/)?${expName}\/drafts(?:\/|$)`); + } + + this.push = this.push.bind(this); + this.processQueue = this.processQueue.bind(this); + this.processItem = this.processItem.bind(this); + } + + async push(data) { + this.queue.push(data); + await this.processQueue(); + } + + async processQueue() { + while (this.activeCount < this.maxConcurrent && this.queue.length > 0) { + const item = this.queue.shift(); + await this.processItem(item); + } + } + + async processItem(item) { + this.activeCount += 1; + try { + await this.callback(item); + } finally { + this.activeCount -= 1; + await this.processQueue(); + } + } + + async getChildren(path) { + const files = []; + const folders = []; + + const resp = await this.requestHandler.daFetch(`https://admin.da.live/list${path}`); + if (resp.ok) { + const json = await resp.json(); + json.forEach((child) => { + if (!child.ext) { + folders.push(child.path); + } else { + // Filter out files based on crawlType, grayboxPathPattern and isDraftsOnly flag + // eslint-disable-next-line no-lonely-if + if ((this.crawlType !== 'graybox' && this.crawlType !== 'floodgate') + || (this.crawlType === 'graybox' && this.grayboxPathPattern.test(child.path)) + || (this.crawlType === 'floodgate' && (!this.isDraftsOnly || child.path.includes('/drafts/'))) + ) { + files.push(child); + } + } + }); + } + return { files, folders }; + } +} + +function calculateCrawlTime(startTime) { + const crawlTime = Date.now() - startTime; + return String(crawlTime / 1000).substring(0, 4); +} + +/** + * Crawl a path and run a callback on each file found. + * + * @param {Object} options - The crawl options. + * @param {string} options.path - The parent path to crawl. + * @param {function} options.callback - The callback to run when a file is found. + * @param {number} options.concurrent - The amount of concurrent requests for the callback queue. + * @param {number} options.throttle - How much to throttle the crawl. + * @param {string} options.crawlType - The type of crawl ('graybox' or other). + */ +function crawl({ + path, callback, concurrent, throttle = 100, accessToken, crawlType = 'default', isDraftsOnly = false, +}) { + let expName = ''; + let sitePath = path; + if (crawlType === 'graybox') { + const [, org, repo, exp] = path.split('/'); + sitePath = `/${org}/${repo}`; + expName = exp; + } + + let time; + let isCanceled = false; + const files = []; + const folders = [sitePath]; + const inProgress = []; + const startTime = Date.now(); + const queue = new CrawlTree(callback, accessToken, concurrent, crawlType, expName, isDraftsOnly); + + const results = new Promise((resolve) => { + const interval = setInterval(async () => { + if (folders.length > 0) { + inProgress.push(true); + const currentPath = folders.pop(); + const children = await queue.getChildren(currentPath); + files.push(...children.files); + folders.push(...children.folders); + if (callback && children.files.length > 0) { + await Promise.all(children.files.map((file) => queue.push(file))); + } + inProgress.pop(); + } + if ((inProgress.length === 0 && folders.length === 0) || isCanceled) { + time = calculateCrawlTime(startTime); + clearInterval(interval); + resolve(files); + } + }, throttle); + }); + + const getDuration = () => { + if (time) return time; + return calculateCrawlTime(startTime); + }; + + const cancelCrawl = () => { + isCanceled = true; + }; + return { results, getDuration, cancelCrawl }; +} + +export default crawl; diff --git a/tools/floodbox/floodbox.css b/tools/floodbox/floodbox.css new file mode 100644 index 00000000000..91f94f8cbf5 --- /dev/null +++ b/tools/floodbox/floodbox.css @@ -0,0 +1,445 @@ +:host { + display: block; + max-width: var(--grid-container-width); + margin: 0 auto var(--spacing-500) auto; + width: 100% +} + +:host > svg { + display: none; +} + +body { + background-color: #fff; + margin: 0 var(--spacing-1000); +} + +h1 { + margin-block-end: 0; +} + +h3 { + margin-block-start: 0; + color: var(--s2-gray-700); +} + +form { + display: flex; + flex-direction: column; +} + +input[type="text"], +textarea, +select { + display: block; + border: 2px solid var(--s2-gray-200); + border-radius: var(--s2-radius-100); + line-height: 32px; + box-sizing: border-box; +} + +input[name="label"] { + height: 32px; + width: 160px; + font-family: var(--body-font-family); + margin: 0; + padding: 0 6px; +} + +input[type='text'] { + margin: 0; + padding: 0 8px; + width: 100%; +} + +input[type="checkbox"] { + display: block; + margin: 0; + padding: 0; + width: 20px; + height: 20px; +} + +textarea { + width: 100%; + min-height: 240px; + resize: vertical; + font-size: var(--s2-font-size-100); + line-height: 2; + padding: 6px 12px; + box-sizing: border-box; + font-family: monospace; + overflow-y: scroll; +} + +select { + border: 2px solid var(--s2-gray-200); + border-radius: var(--s2-radius-100); + font-family: var(--body-font-family); + font-size: var(--s2-font-size-200); + font-weight: 700; + padding: 0 6px; + box-sizing: border-box; + margin: 0; + min-width: 120px; + height: 32px; +} + +.hide { + display: none; +} + +.clear-button { + align-self: flex-start; + transform: translateY(50%); +} + +.input-row { + align-items: center; + display: flex; + font-family: var(--body-font-family); + gap: var(--spacing-200); + margin: var(--spacing-200) 0; +} + +.checkbox-container { + display: flex; + gap: var(--spacing-200); + margin-top: var(--spacing-100); +} + +.button-row { + align-items: end; + display: flex; + gap: 12px; + justify-content: end; + margin: var(--spacing-400) 0; +} + +.detail-cards { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + gap: 24px; + margin: 0 0 var(--spacing-400); +} + +.detail-card { + display: flex; + justify-content: space-between; + background: rgb(215 247 225); + border-radius: 18px; + overflow: hidden; + padding: var(--spacing-400); +} + +.detail-card-remaining, +.detail-card-fragments-assets { + background: rgb(202 248 250); + width: 180px; +} + +.detail-card-total, +.detail-card-pages { + background: rgb(181 230 252); +} + +.detail-card-errors, +.detail-card-promote-errors, +.detail-card-preview-errors, +.detail-card-publish-errors, +.detail-card-copy-errors, +.detail-card-delete-errors, +.detail-card-unpublish-errors, +.url-list.url-list-promote-errors, +.url-list.url-list-preview-errors, +.url-list.url-list-publish-errors, +.url-list.url-list-copy-errors { + background: rgb(255 214 209); +} + +.detail-card-promote-ignored, +.detail-card-preview-ignored, +.detail-card-publish-ignored, +.url-list.url-list-promote-ignored, +.url-list.url-list-preview-ignored, +.url-list.url-list-publish-ignored { + background: rgb(255 236 209); +} + +.detail-card-sheets { + background: #caffa4; +} + +.detail-card .cancel-button { + margin: 0; + padding: 0; + min-width: 72px; + border-radius: var(--s2-radius-100); + border: none; + background: rgb(0 0 0 / 10%); +} + +.detail-card h3, +.detail-card p { + margin: 0; + line-height: 1; +} + +.detail-card h3 { + margin-bottom: var(--spacing-100); +} + +.detail-card p { + font-size: var(--s2-font-size-600); +} + +.detail-cards.crawl-cards { + grid-template-columns: 1fr 1fr 1fr; +} + +.detail-cards.promote-cards { + grid-template-columns: 1fr 1fr 1fr 1fr 1fr; +} + +.detail-cards.preview-cards { + grid-template-columns: 1fr 1fr 1fr 1fr 1fr; +} + +.detail-cards.find-cards { + grid-template-columns: 1fr 1fr 1fr 1fr 1fr; +} + +.detail-cards.copy-preview-cards { + grid-template-columns: 1fr 1fr 1fr 1fr; +} + +.toggle-list-icon, .icon-button { + display: block; + border: 0; + padding: 0; +} + +.toggle-list-icon svg, .icon-button svg { + width: 18px; + height: 18px; + transition: transform 0.2s ease-in-out; +} + +.toggle-list-icon svg use { + transform: rotate(-90deg) translateX(-100%); +} + +.is-expanded .toggle-list-icon svg { + transform: rotate(90deg); +} + +.button-toggle { + background: #fff; + border: 2px solid var(--s2-gray-200); + border-radius: var(--s2-radius-100); + line-height: 28px; + padding: 0 10px; + font-weight: 700; + display: flex; + align-items: center; + gap: 6px; +} + +.button-toggle input { + margin: 0; + width: 12px; + height: 12px; + display: block; +} + +.button-toggle label { + font-size: 14px; + display: block; +} + +.tab-ui { + margin: var(--spacing-400) 0; +} + +.tab-nav { + display: flex; + list-style-type: none; + padding: 5px; +} + +.tab-nav li button{ + opacity: 0.6; +} + +.tab-nav li.active button{ + opacity: 1; +} + +.tab-nav li button[disabled]::before { + background: rgb(0 0 0 / 5%); + border: 1px solid rgb(0 0 0 / 50%); +} + +.tabs { + background-color: var(--s2-gray-50); + padding: 20px; + border: 1px solid var(--s2-gray-200); +} + +.tab-step { + display: none; +} + +.tab-step.active { + display: block; +} + +.ribbon { + --r: .8em; + + padding-inline: calc(var(--r) + 1.5em); + line-height: 1.8; + clip-path: polygon(0 0,90% 0,100% 50%,90% 100%,0 100%, var(--r) 50%); + background: var(--s2-blue-800); + font-size: var(--s2-font-size-400); + font-weight: bold; + color: #fff; + border: none; + text-wrap: nowrap; +} + +.ribbon:disabled { + color: var(--s2-gray-800); +} + +.info-box { + background: var(--s2-gray-75); + border-radius: var(--s2-radius-100); + padding: var(--spacing-100) var(--spacing-400); + margin-top: var(--spacing-400); +} + +.info-box p { + margin-top: var(--spacing-50); + margin-bottom: var(--spacing-50); +} + +.url-list { + display: none; + background: rgb(215 247 225); + border-radius: 18px; + overflow: hidden; + padding: var(--spacing-400); + margin: 0 0 var(--spacing-400); +} + +.url-list.is-expanded { + display: block; +} + +.url-list-errors { + background: rgb(255 214 209); +} + +.url-list h2 { + margin-top: 0; + line-height: 1; +} + +.urls-result { + list-style: none; + margin: 0; + padding: 0; +} + +.urls-result li { + display: flex; + justify-content: space-between; + line-height: 32px; + margin: 0 0 4px; + gap: 24px; +} + +.url-path { + white-space: nowrap; + overflow-x: hidden; +} + +.urls-result .url-status { + background: rgb(0 0 0 / 40%); + color: rgb(255 255 255); + border-radius: 4px; + padding: 0 8px; + font-weight: 700; + min-width: 50px; + text-align: center; + user-select: none; +} + +.url-checklist { + padding: 0; + margin: 0; + list-style: none; + border: 1px solid rgb(209 209 209); + border-radius: 18px; + overflow: hidden; + background: rgb(248 248 248); +} + +.url-checklist li { + margin-top: -1px; + margin-bottom: -1px; + padding: 24px; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + gap: 24px; + border-top: 1px solid rgb(209 209 209); + border-bottom: 1px solid rgb(209 209 209); +} + +.url-checklist li:hover { + background: rgb(228 240 255); + border-top: 1px solid rgb(20 122 243); + border-bottom: 1px solid rgb(20 122 243); +} + +.path { + color: var(--s2-gray-800); + text-decoration: none; + flex: 1 1 auto; + word-break: break-all; +} + +.status { + display: flex; + justify-content: center; + align-items: center; + font-weight: 700; + border-radius: var(--s2-radius-200); + text-align: center; + color: #FFF; + text-transform: uppercase; + width: 72px; + padding: 4px 0; +} + +.status-ready { + background: var(--s2-green); +} + +.status-error { + background: var(--s2-red); +} + +.urls-result li:last-child { + margin: 0; +} + +@media (width > 600px) { + .url-checklist li { + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + } +} diff --git a/tools/floodbox/floodbox.js b/tools/floodbox/floodbox.js new file mode 100644 index 00000000000..5e00e62846d --- /dev/null +++ b/tools/floodbox/floodbox.js @@ -0,0 +1,126 @@ +/* eslint-disable import/no-unresolved, no-underscore-dangle, class-methods-use-this */ +import { html, nothing } from 'https://da.live/deps/lit/dist/index.js'; + +function handleToggleList(e) { + const card = e.target.closest('.detail-card'); + const { name } = e.target.closest('button').dataset; + const list = this.shadowRoot.querySelector(`.url-list-${name}`); + const cards = this.shadowRoot.querySelectorAll('.detail-card'); + const lists = this.shadowRoot.querySelectorAll('.url-list'); + + const isExpanded = card.classList.contains('is-expanded'); + [...cards, ...lists].forEach((el) => { el.classList.remove('is-expanded'); }); + if (isExpanded) return; + + card.classList.add('is-expanded'); + list.classList.add('is-expanded'); +} + +function handleClear(event) { + event.preventDefault(); + const field = event.target.closest('button').previousElementSibling; + field.value = ''; + this._canPromote = false; + this._repoReady = false; + this._gbExpPath = ''; + this.requestUpdate(); +} + +function handleCheck(app, url) { + url.checked = !url.checked; + app.urls = [...app.urls]; +} + +function updateTabUi(app, target, delay = 0) { + setTimeout(() => { + const tabNav = app.shadowRoot.querySelectorAll('.tab-nav li'); + const tabs = app.shadowRoot.querySelectorAll('.tab-step'); + const activeNav = app.shadowRoot.querySelector(`.tab-nav li[data-target='${target}']`); + const activeTab = app.shadowRoot.querySelector(`.tab-step[data-id='${target}']`); + [...tabs, ...tabNav].forEach((el) => { el.classList.remove('active'); }); + if (activeNav) activeNav.querySelector('button').removeAttribute('disabled'); + if (activeNav) activeNav.classList.add('active'); + if (activeTab) activeTab.classList.add('active'); + }, delay); +} + +function renderBadge(name, length, hasList = false, hasCancel = false) { + const lowerName = name.toLowerCase().replace(/\W+/g, '-'); + const hasExpand = length > 0 && hasList; + + return html` +
      +
      +

      ${name}

      +

      ${length}

      +
      +
      + ${hasCancel ? html`` : nothing} + ${hasExpand ? html` + + ` : nothing} +
      +
      `; +} + +function renderList(name, urls) { + const lowerName = name.toLowerCase().replace(/ /g, '-'); + + return html` +
      +

      ${name}

      +
        + ${urls.map((url) => html` +
      • +
        ${url.href}
        +
        + ${url.status ? url.status : 'waiting'} +
        +
      • + `)} +
      +
      + `; +} + +function renderChecklist(app, urls) { + return html` +
        + ${urls ? urls.map((url) => html` +
      • +
        ${url}
        +
      • + `) : nothing} +
      + `; +} + +function renderClearButton() { + return html``; +} + +function renderTabNav(app, config) { + return html` +
        + ${config.map((step, index) => html` +
      • + +
      • + `)} +
      + `; +} + +export { + handleToggleList, + handleClear, + handleCheck, + updateTabUi, + renderBadge, + renderList, + renderChecklist, + renderClearButton, + renderTabNav, +}; diff --git a/tools/floodbox/floodgate/fg-copy.js b/tools/floodbox/floodgate/fg-copy.js new file mode 100644 index 00000000000..74a1864d2c1 --- /dev/null +++ b/tools/floodbox/floodgate/fg-copy.js @@ -0,0 +1,82 @@ +import { DA_ORIGIN } from '../constants.js'; +import RequestHandler from '../request-handler.js'; +import { getFileExtension, getFileName, isEditableFile } from '../utils.js'; + +const BATCH_SIZE = 100; + +class FloodgateCopy { + constructor(accessToken, org, repo, paths, callback) { + this.accessToken = accessToken; + this.org = org; + this.repo = repo; + this.paths = paths; + this.callback = callback; + + this.requestHandler = new RequestHandler(accessToken); + this.destRepo = `${repo}-pink`; + this.srcSitePath = `/${org}/${repo}`; + this.destSitePath = `/${org}/${this.destRepo}`; + this.filesToCopy = []; + } + + adjustUrlDomains(content) { + const searchValue = `--${this.repo}--${this.org}.`; + const replaceValue = `--${this.destRepo}--${this.org}.`; + return content.replaceAll(searchValue, replaceValue); + } + + async processFile(file) { + const response = await this.requestHandler.daFetch(`${DA_ORIGIN}/source${file.path}`); + if (response.ok) { + let content = isEditableFile(file.ext) ? await response.text() : await response.blob(); + if (file.ext === 'html') { + content = this.adjustUrlDomains(content); + } + const destFilePath = file.path.replace(this.srcSitePath, this.destSitePath); + const status = await this.requestHandler.uploadContent(destFilePath, content, file.ext); + this.callback(status); + } else { + // eslint-disable-next-line no-console + console.error(`Failed to fetch : ${response.status} :: ${file.path}`); + const status = { statusCode: response.status, filePath: file.path, errorMsg: 'Failed to fetch' }; + this.callback(status); + } + } + + async copyFilesInBatches() { + for (let i = 0; i < this.filesToCopy.length; i += BATCH_SIZE) { + const batch = this.filesToCopy.slice(i, i + BATCH_SIZE); + await Promise.all(batch.map((file) => this.processFile(file))); + } + } + + async getFilesToCopy() { + for (const path of this.paths) { + if (!path.length > 0) { + // eslint-disable-next-line no-continue + continue; + } + const ext = getFileExtension(path); + const name = path.split('/').pop(); + if (ext) { + this.filesToCopy.push({ path, name, ext }); + } else { + this.filesToCopy.push({ path: `${path}.html`, name: getFileName(path), ext: 'html' }); + } + } + } + + async copyFiles() { + await this.getFilesToCopy(); + // eslint-disable-next-line no-console + console.log(`Copying files from ${this.srcSitePath} to ${this.destSitePath}`); + await this.copyFilesInBatches(); + } +} + +async function copyFiles({ accessToken, org, repo, paths, callback }) { + const copier = new FloodgateCopy(accessToken, org, repo, paths, callback); + await copier.copyFiles(); +} + +export default copyFiles; diff --git a/tools/floodbox/floodgate/floodgate-config.js b/tools/floodbox/floodgate/floodgate-config.js new file mode 100644 index 00000000000..87672676a3a --- /dev/null +++ b/tools/floodbox/floodgate/floodgate-config.js @@ -0,0 +1,63 @@ +import RequestHandler from '../request-handler.js'; +import { DA_ORIGIN } from '../constants.js'; + +const FLOODGATE_CONFIG_FILE = '/.milo/floodgate/config.json'; + +/** + * FloodgateConfig provides the configuration setup for the Floodgate app. + */ +class FloodgateConfig { + constructor(org, repo, accessToken) { + this.org = org; + this.repo = repo; + this.accessToken = accessToken; + this.requestHandler = new RequestHandler(accessToken); + + // config + this.isPromoteEnabled = false; + this.isDeleteEnabled = false; + this.isPromoteDraftsOnly = false; + + // promote ignore paths + this.promoteIgnorePaths = []; + } + + async getConfig() { + const resp = await this.requestHandler.daFetch(`${DA_ORIGIN}/source/${this.org}/${this.repo}${FLOODGATE_CONFIG_FILE}`); + if (resp.ok) { + const json = await resp.json(); + const { + config, + 'promote-ignore-paths': promoteIgnorePathsConfig, + } = json; + + if (config) { + this.#setConfig(config); + } + + if (promoteIgnorePathsConfig) { + this.promoteIgnorePaths = promoteIgnorePathsConfig.data.map( + ({ promoteIgnorePaths }) => promoteIgnorePaths, + ); + } + } else { + // eslint-disable-next-line no-console + console.error(`Failed to fetch Floodgate config for ${this.org}/${this.repo}`); + } + } + + getPromoteIgnorePaths() { + return this.promoteIgnorePaths; + } + + #setConfig(config) { + const enablePromoteConfig = config.data.find(({ key }) => key === 'enablePromote'); + this.isPromoteEnabled = enablePromoteConfig?.value === 'true'; + const enableDeleteConfig = config.data.find(({ key }) => key === 'enableDelete'); + this.isDeleteEnabled = enableDeleteConfig?.value === 'true'; + const promoteDraftsOnlyConfig = config.data.find(({ key }) => key === 'promoteDraftsOnly'); + this.isPromoteDraftsOnly = promoteDraftsOnlyConfig?.value === 'true'; + } +} + +export default FloodgateConfig; diff --git a/tools/floodbox/floodgate/floodgate.css b/tools/floodbox/floodgate/floodgate.css new file mode 100644 index 00000000000..59c0a06678e --- /dev/null +++ b/tools/floodbox/floodgate/floodgate.css @@ -0,0 +1,56 @@ +body { + background-color: #fff; + margin: 0 var(--spacing-1000); +} + +.repo-row { + display: flex; + justify-content: flex-end; + margin: 0 var(--spacing-200) var(--spacing-400); +} + +.repo-row p { + margin: 0; +} + +.repo-row span { + text-transform: uppercase; +} + +.dialog-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + display: flex; + justify-content: center; + align-items: center; + z-index: 1000; +} + +.dialog-box { + background: white; + padding: 20px; + border-radius: 10px; + text-align: center; + width: 320px; +} + +.dialog-buttons { + display: flex; + justify-content: center; + margin-top: 20px; +} + +.confirm-btn { + padding: 8px 14px; + font-size: 15px; + border: none; + cursor: pointer; + border-radius: var(--s2-radius-300); + background: #ff4d4d; + color: white; + margin-left: 30px; +} diff --git a/tools/floodbox/floodgate/floodgate.js b/tools/floodbox/floodgate/floodgate.js new file mode 100644 index 00000000000..6c93aa6fb7d --- /dev/null +++ b/tools/floodbox/floodgate/floodgate.js @@ -0,0 +1,900 @@ +/* eslint-disable import/no-unresolved, no-underscore-dangle, class-methods-use-this */ +import { LitElement, html, nothing } from 'https://da.live/deps/lit/dist/index.js'; +import getStyle from 'https://da.live/nx/utils/styles.js'; +import getSvg from 'https://da.live/nx/public/utils/svg.js'; +import crawl from '../crawl-tree.js'; +import promoteFiles from '../promote.js'; +import { SUCCESS_CODES } from '../constants.js'; +import previewOrPublishPaths from '../bulk-action.js'; +import FloodgateConfig from './floodgate-config.js'; +import copyFiles from './fg-copy.js'; +import findFragmentsAndAssets from '../references.js'; +import { validatePaths, getValidFloodgate } from './utils.js'; +import * as floodbox from '../floodbox.js'; +import RequestHandler from '../request-handler.js'; + +const ICONS = [ + 'https://da.live/nx/public/icons/Smock_Close_18_N.svg', + 'https://da.live/nx/public/icons/Smock_ChevronDown_18_N.svg', +]; + +const buttons = await getStyle('https://da.live/nx/styles/buttons.css'); +const style = await getStyle(import.meta.url); +const floodboxCss = await getStyle('/tools/floodbox/floodbox.css'); + +export default class MiloFloodgate extends LitElement { + static properties = { + repo: { type: String }, + token: { type: String }, + }; + + constructor() { + super(); + this._pinkSitePath = ''; + this._canCopyPaths = false; + this._canPromote = false; + this._canDelete = false; + this._tabUiStart = false; + this._promoteIgnore = false; + this._publish = false; + this._startCrawlPink = false; + this._startPromote = false; + this._startCopy = false; + this._startUnpublish = false; + this._startDelete = false; + this._pinkContentPromoted = false; + this._pinkSiteDeleted = false; + this._copiedToPink = false; + this._invalidInput = false; + this._startPreview = false; + this._startPublish = false; + this._filesToPromote = []; + this._validCopyPaths = {}; + this._findingPaths = false; + this._copyReady = false; + this._filesToCopy = []; + this._copiedFiles = []; + this._copiedFilesCount = 0; + this._copiedErrorList = []; + this._copyDuration = 0; + this._fragmentsAssets = []; + this._startFindFragmentsAssets = false; + this._promoteIgnorePaths = []; + this._promoteIgnoreList = []; + this._promotedFiles = []; + this._promotedFilesCount = 0; + this._promoteErrorList = []; + this._previewedFilesCount = 0; + this._previewErrorList = []; + this._publishedFilesCount = 0; + this._publishErrorList = []; + this._unpublishFilesCount = 0; + this._unpublishErrorList = []; + this._deleteErrorList = []; + this._crawledFiles = []; + this._deletedFilesCount = 0; + this._crawledFilesCount = 0; + this._crawlDuration = 0; + this._promoteDuration = 0; + this._previewDuration = 0; + this._publishDuration = 0; + this._unpublishDuration = 0; + this._deleteDuration = 0; + this._repoReady = false; + this._selectedOption = 'fgCopy'; + this._floodgateConfig = {}; + this._showDialog = false; + + this.tabUiCopy = [ + { id: 'find', title: 'Find' }, + { id: 'copy', title: 'Copy' }, + { id: 'preview', title: 'Preview' }, + { id: 'done', title: 'Done' }, + ]; + + this.tabUiPromote = [ + { id: 'crawl', title: 'Crawl' }, + { id: 'promote', title: 'Promote' }, + { id: 'preview', title: 'Preview' }, + { id: 'done', title: 'Done' }, + ]; + + this.tabUiDelete = [ + { id: 'crawl', title: 'Crawl' }, + { id: 'unpublish', title: 'Unpublish' }, + { id: 'delete', title: 'Delete' }, + { id: 'done', title: 'Done' }, + ]; + } + + connectedCallback() { + super.connectedCallback(); + this.shadowRoot.adoptedStyleSheets = [buttons, style, floodboxCss]; + getSvg({ parent: this.shadowRoot, paths: ICONS }); + } + + firstUpdated() { + const select = this.shadowRoot.querySelector('.action-select'); + select.value = this._selectedOption; + } + + async startCrawlPinkSite() { + const { results, getDuration } = crawl({ + path: this._pinkSitePath, + accessToken: this.token, + crawlType: 'floodgate', + isDraftsOnly: this._floodgateConfig.isPromoteDraftsOnly, + callback: () => { + this._crawledFilesCount += 1; + this.requestUpdate(); + }, + }); + this._crawledFiles = await results; + this.cleanUpIgnoreFilesFromPromote(this._crawledFiles); + this._crawlDuration = getDuration(); + this._startPromote = true; + this.requestUpdate(); + } + + async startPromote(org, repo) { + if (org && repo && repo.endsWith('-pink')) { + const startTime = Date.now(); + await promoteFiles({ + accessToken: this.token, + org, + repo, + promoteType: 'floodgate', + files: this._filesToPromote, + callback: (status) => { + // eslint-disable-next-line no-console + console.log(`${status.statusCode} :: ${status.filePath}`); + this._promotedFiles.push(status.filePath); + if (SUCCESS_CODES.includes(status.statusCode)) { + this._promotedFilesCount += 1; + } else { + this._promoteErrorList.push({ href: status.filePath, status: status.statusCode }); + } + this.requestUpdate(); + }, + }); + this._promoteDuration = Math.round((Date.now() - startTime) / 1000); + this._startPreview = true; + this.requestUpdate(); + } + } + + async startPreview(org, repoToPrevPub, paths) { + const startTime = Date.now(); + await previewOrPublishPaths({ + org, + repo: repoToPrevPub, + paths, + action: 'preview', + accessToken: this.token, + callback: (status) => { + // eslint-disable-next-line no-console + console.log(`${status.statusCode} :: ${status.aemUrl}`); + if (SUCCESS_CODES.includes(status.statusCode)) { + this._previewedFilesCount += 1; + } else { + this._previewErrorList.push({ href: status.aemUrl, status: status.statusCode }); + } + this.requestUpdate(); + }, + }); + + this._previewDuration = (Date.now() - startTime) / 1000; + this._pinkContentPromoted = true; + this._copiedToPink = true; + this.requestUpdate(); + } + + async startPublish(org, repoToPrevPub, paths) { + const startTime = Date.now(); + await previewOrPublishPaths({ + org, + repo: repoToPrevPub, + paths, + action: 'live', + accessToken: this.token, + callback: (status) => { + // eslint-disable-next-line no-console + console.log(`${status.statusCode} :: ${status.aemUrl}`); + if (SUCCESS_CODES.includes(status.statusCode)) { + this._publishedFilesCount += 1; + } else { + this._publishErrorList.push({ href: status.aemUrl, status: status.statusCode }); + } + this.requestUpdate(); + }, + }); + this._publishDuration = (Date.now() - startTime) / 1000; + this.requestUpdate(); + } + + cleanUpIgnoreFilesFromPromote(files) { + files.filter((file) => this._promoteIgnorePaths.some((ignorePath) => { + if (file.path.endsWith(ignorePath) || file.path.includes(ignorePath)) { + this._promoteIgnoreList.push({ href: file.path, status: 'Ignored' }); + } + return file.path.endsWith(ignorePath); + })); + + this._filesToPromote = files.filter((file) => !this._promoteIgnorePaths.some((ignorePath) => { + if (ignorePath.endsWith('/')) { + return file.path.includes(ignorePath); + } + return file.path.endsWith(ignorePath); + })); + } + + getOrgRepo() { + const input = this.shadowRoot.querySelector('input[name="path"]'); + const path = input.value.trim(); + const parts = path.split('/'); + return { + org: parts[1], + repo: parts[2], + }; + } + + readPromoteIgnorePaths() { + // add global promote ignore paths + this._promoteIgnorePaths.push(...this._floodgateConfig.getPromoteIgnorePaths()); + // add user input promote ignore paths + const promoteIgnoreCheckbox = this.shadowRoot.querySelector('input[name="promoteIgnore"]'); + if (promoteIgnoreCheckbox?.checked) { + const promoteIgnoreTextArea = this.shadowRoot.querySelector('textarea[name="promote-ignore-paths"]'); + if (promoteIgnoreTextArea) { + this._promoteIgnorePaths.push(...promoteIgnoreTextArea.value + .split('\n').map((path) => path.trim()).filter((path) => path.length > 0)); + } + } + this._promoteIgnorePaths = this._promoteIgnorePaths.map((path) => { + if (path.endsWith('/') || path.includes('.')) { + return path; + } + return `${path}.html`; + }); + } + + async handlePromote(event) { + event.preventDefault(); + if (!this._canPromote) { + return; + } + this._tabUiStart = true; + this._canPromote = false; + this.requestUpdate(); + await this.readPromoteIgnorePaths(); + + // #1 - Start Crawling Pink Site + this._startCrawlPink = true; + floodbox.updateTabUi(this, 'crawl', 100); + await this.startCrawlPinkSite(); + + // #2 - Start Promoting + const { org, repo } = this.getOrgRepo(); + this._startPromote = true; + floodbox.updateTabUi(this, 'promote', 100); + this.requestUpdate(); + await this.startPromote(org, repo); + + // #3 - Preview Promoted files + this._startPreview = true; + const repoToPrev = repo.replace('-pink', ''); + floodbox.updateTabUi(this, 'preview', 100); + await this.startPreview(org, repoToPrev, this._promotedFiles); + + // #4 - Publish Promoted files + if (this._publish) { + this._startPublish = true; + const repoToPub = repo.replace('-pink', ''); + floodbox.updateTabUi(this, 'publish', 100); + this.requestUpdate(); + await this.startPublish(org, repoToPub, this._promotedFiles); + } + + floodbox.updateTabUi(this, 'done', 100); + this.requestUpdate(); + } + + async startCopy(org, repo) { + const startTime = Date.now(); + this._startCopy = true; + await copyFiles({ + accessToken: this.token, + org, + repo, + paths: this._filesToCopy, + callback: (status) => { + // eslint-disable-next-line no-console + console.log(`${status.statusCode} :: ${status.filePath}`); + this._copiedFiles.push(status.filePath); + if (SUCCESS_CODES.includes(status.statusCode)) { + this._copiedFilesCount += 1; + } else { + this._copiedErrorList.push({ href: status.filePath, status: status.statusCode }); + } + this.requestUpdate(); + }, + }); + this._copyDuration = Math.round((Date.now() - startTime) / 1000); + this._startPreview = true; + this.requestUpdate(); + } + + async getReferencedFragmentsAndAssets(paths, org, repo) { + const htmlPaths = paths.filter((path) => !path.endsWith('/') && !path.includes('.')); + this._fragmentsAssets = await findFragmentsAndAssets({ + accessToken: this.token, + htmlPaths, + org, + repo, + }); + this._filesToCopy.push(...this._fragmentsAssets); + // eslint-disable-next-line no-console + console.log('Paths to copy:', this._filesToCopy); + this._startFindFragmentsAssets = true; + this.requestUpdate(); + } + + async handleCopyPaths(event) { + event.preventDefault(); + if (!this._canCopyPaths) { + return; + } + let paths = this.shadowRoot.querySelector('textarea[name="copyPaths"]').value; + paths = paths.split('\n').map((path) => path.trim()).filter((path) => path.length > 0); + + this._tabUiStart = true; + this._canCopyPaths = false; + this._findingPaths = true; + this.requestUpdate(); + + // #1 - Validate paths + const { valid, org, repo } = validatePaths(paths); + this._validCopyPaths = { valid, org, repo }; + if (!valid) { + this._invalidInput = true; + this.requestUpdate(); + return; + } + this._filesToCopy = paths; + + // #2 - Find referenced fragments and assets + this._startFindFragmentsAssets = true; + floodbox.updateTabUi(this, 'find', 100); + await this.getReferencedFragmentsAndAssets(paths, org, repo); + + this._copyReady = true; + this._canCopyPaths = true; + this.requestUpdate(); + } + + async handleCopyPreview(event) { + event.preventDefault(); + const { org, repo } = this._validCopyPaths; + + // #3 - Copy files to pink site + this._startCopy = true; + this._canCopyPaths = false; + this._pinkSitePath = `/${org}/${repo}-pink`; + floodbox.updateTabUi(this, 'copy', 100); + this.requestUpdate(); + await this.startCopy(org, repo); + + // #4 - Preview copied files + this._startPreview = true; + floodbox.updateTabUi(this, 'preview', 100); + await this.startPreview(org, `${repo}-pink`, this._copiedFiles); + + floodbox.updateTabUi(this, 'done', 100); + this.requestUpdate(); + } + + async startCrawlPinkSiteForDelete() { + const { results, getDuration } = crawl({ + path: this._pinkSitePath, + accessToken: this.token, + crawlType: 'floodgate', + isDraftsOnly: false, + callback: () => { + this._crawledFilesCount += 1; + this.requestUpdate(); + }, + }); + this._crawledFiles = await results; + this._crawlDuration = getDuration(); + this._startUnpublish = true; + this.requestUpdate(); + } + + async startUnpublish(org, repo, paths) { + if (!org || !repo || !repo.endsWith('-pink')) { + // eslint-disable-next-line no-console + console.log('Invalid org or repo. Stop unpublish operation.'); + return; + } + const startTime = Date.now(); + await previewOrPublishPaths({ + org, + repo, + paths, + action: 'live', + accessToken: this.token, + isDelete: true, + callback: (status) => { + // eslint-disable-next-line no-console + console.log(`${status.statusCode} :: ${status.aemUrl}`); + if (SUCCESS_CODES.includes(status.statusCode)) { + this._unpublishFilesCount += 1; + } else { + this._unpublishErrorList.push({ href: status.aemUrl, status: status.statusCode }); + } + this.requestUpdate(); + }, + }); + this._unpublishDuration = Math.round((Date.now() - startTime) / 1000); + this._startDelete = true; + this.requestUpdate(); + } + + async startDelete(org, repo, paths) { + if (!org || !repo || !repo.endsWith('-pink')) { + // eslint-disable-next-line no-console + console.log('Invalid org or repo. Stopping delete operation.'); + return; + } + const startTime = Date.now(); + const reqHandler = new RequestHandler(this.token); + for (const path of paths) { + const resp = await reqHandler.deleteContent(path); + // eslint-disable-next-line no-console + console.log(`${resp.statusCode} :: ${resp.filePath}`); + if (SUCCESS_CODES.includes(resp.statusCode)) { + this._deletedFilesCount += 1; + } else { + this._deleteErrorList.push({ href: resp.filePath, status: resp.statusCode }); + } + this.requestUpdate(); + } + this._deleteDuration = Math.round((Date.now() - startTime) / 1000); + this._pinkSiteDeleted = true; + } + + async handleDelete() { + const { org, repo } = this.getOrgRepo(); + if (!this._canDelete || !repo?.endsWith('-pink')) { + return; + } + this._tabUiStart = true; + this.requestUpdate(); + + // #1 - Start Crawl Pink Site + this._startCrawlPink = true; + floodbox.updateTabUi(this, 'crawl', 100); + await this.startCrawlPinkSiteForDelete(); + + // #2 - Unpublish Crawled files + this._startUnpublish = true; + const paths = this._crawledFiles.map((file) => file.path); + floodbox.updateTabUi(this, 'unpublish', 100); + await this.startUnpublish(org, repo, paths); + + // #3 - Delete Pink Site + this._startDelete = true; + floodbox.updateTabUi(this, 'delete', 100); + await this.startDelete(org, repo, paths); + + // #4 - Done + floodbox.updateTabUi(this, 'done', 100); + this.requestUpdate(); + } + + handleDeleteClick(event) { + event.preventDefault(); + this._showDialog = true; + this.requestUpdate(); + } + + handleConfirm() { + this._showDialog = false; + this.requestUpdate(); + this.handleDelete(); + } + + handleCancel(event) { + event.preventDefault(); + this._showDialog = false; + this.requestUpdate(); + } + + togglePromoteIgnore(event) { + this._promoteIgnore = event.target.checked; + this.requestUpdate(); + } + + togglePublish(event) { + this._publish = event.target.checked; + if (this._publish) { + this.tabUiPromote.pop(); + this.tabUiPromote.push({ id: 'publish', title: 'Publish' }); + this.tabUiPromote.push({ id: 'done', title: 'Done' }); + } else { + this.tabUiPromote.pop(); + this.tabUiPromote.pop(); + this.tabUiPromote.push({ id: 'done', title: 'Done' }); + } + this.requestUpdate(); + } + + handleOptionChange(event) { + this._selectedOption = event.target.value; + this._repoReady = false; + this.requestUpdate(); + } + + handleClear(event) { + event.preventDefault(); + const field = event.target.previousElementSibling; + field.value = ''; + this._canCopyPaths = false; + this._canPromote = false; + this._canDelete = false; + this._promoteIgnore = false; + this._pinkSitePath = ''; + this.requestUpdate(); + } + + async validateCopyPaths(event) { + const paths = event.target.value.split('\n').map((path) => path.trim()).filter((path) => path.length > 0); + const { valid, repo } = validatePaths(paths); + this._sourceRepo = `${repo}`; + this._floodgateRepo = `${repo}-pink`; + this._canCopyPaths = valid; + this._repoReady = valid; + this.requestUpdate(); + } + + async validatePromoteDeletePath(event, actionType) { + const path = event.target.value.trim(); + // eslint-disable-next-line no-useless-escape + const pathRegex = /^\/[^\/]+\/[^\/]+-pink$/; + const valid = pathRegex.test(path); + this._canPromote = false; + this._canDelete = false; + this._pinkSitePath = ''; + if (valid) { + const { org, repo } = this.getOrgRepo(); + this._floodgateConfig = new FloodgateConfig(org, repo, this.token); + await this._floodgateConfig.getConfig(); + this._sourceRepo = `${repo}`.replace('-pink', ''); + this._floodgateRepo = `${repo}`; + if (actionType === 'promote' && this._floodgateConfig.isPromoteEnabled === true) { + this._canPromote = true; + this._pinkSitePath = path; + } else if (actionType === 'delete' && this._floodgateConfig.isDeleteEnabled === true) { + this._canDelete = true; + this._pinkSitePath = path; + } + } + this._repoReady = valid; + this.requestUpdate(); + } + + async resetApp() { + const cmp = await getValidFloodgate(); + this.replaceWith(cmp); + } + + renderDone() { + return html` +
      +

      Done

      + ${this._selectedOption === 'fgCopy' ? html` +

      The files have been copied.

      + ` : nothing} + ${this._selectedOption === 'fgPromote' ? html` +

      Floodgated files have been promoted and previewed / published.

      + ` : nothing} + ${this._selectedOption === 'fgDelete' ? html` +

      Pink site content has been deleted.

      + ` : nothing} + +
      + `; + } + + renderPublishInfo() { + return html` +
      +

      Publish Promote Files

      +

      Publishing promoted files"...

      +
      + ${floodbox.renderBadge('Remaining', this._previewedFilesCount - this._publishedFilesCount)} + ${floodbox.renderBadge('Publish Ignored', this._promoteIgnoreList.length, true)} + ${floodbox.renderBadge('Publish Errors', this._publishErrorList.length, true)} + ${floodbox.renderBadge('Success', this._publishedFilesCount)} + ${floodbox.renderBadge('Total', this._publishedFilesCount + this._publishErrorList.length + this._promoteIgnoreList.length)} +
      +
      + ${floodbox.renderList('Publish Ignored', this._promoteIgnoreList)} + ${floodbox.renderList('Publish Errors', this._previewErrorList)} +
      +

      Duration: ~${this._publishDuration} seconds

      +
      + `; + } + + renderPreviewInfo() { + return html` +
      +

      Preview Promote Files

      +

      Previewing promoted files"...

      +
      + ${floodbox.renderBadge('Remaining', this._promotedFilesCount - this._previewedFilesCount)} + ${floodbox.renderBadge('Preview Ignored', this._promoteIgnoreList.length, true)} + ${floodbox.renderBadge('Preview Errors', this._previewErrorList.length, true)} + ${floodbox.renderBadge('Success', this._previewedFilesCount)} + ${floodbox.renderBadge('Total', this._previewedFilesCount + this._previewErrorList.length + this._promoteIgnoreList.length)} +
      +
      + ${floodbox.renderList('Preview Ignored', this._promoteIgnoreList)} + ${floodbox.renderList('Preview Errors', this._previewErrorList)} +
      +

      Duration: ~${this._previewDuration} seconds

      +
      + `; + } + + renderPromoteInfo() { + return html` +
      +

      Promote Floodgated Content

      +

      Promoting "${this._pinkSitePath}"...

      +
      + ${floodbox.renderBadge('Remaining', this._filesToPromote.length - this._promotedFilesCount - this._promoteErrorList.length)} + ${floodbox.renderBadge('Promote Ignored', this._promoteIgnoreList.length, true)} + ${floodbox.renderBadge('Promote Errors', this._promoteErrorList.length, true)} + ${floodbox.renderBadge('Success', this._promotedFilesCount)} + ${floodbox.renderBadge('Total', this._promotedFilesCount + this._promoteErrorList.length + this._promoteIgnoreList.length)} +
      +
      + ${floodbox.renderList('Promote Ignored', this._promoteIgnoreList)} + ${floodbox.renderList('Promote Errors', this._promoteErrorList)} +
      +

      Duration: ~${this._promoteDuration} seconds

      +
      + `; + } + + renderCrawlInfo() { + return html` +
      +

      Crawl Pink Site

      +

      Crawling "${this._pinkSitePath}"...

      +
      + ${floodbox.renderBadge('Files', this._crawledFilesCount)} +
      +

      Duration: ~${this._crawlDuration} seconds

      +
      + `; + } + + renderCopyPreviewInfo() { + return html` +
      +

      Preview Copied Files

      +

      Previewing copied files...

      +
      + ${floodbox.renderBadge('Remaining', this._copiedFilesCount - this._previewedFilesCount)} + ${floodbox.renderBadge('Preview Errors', this._previewErrorList.length, true)} + ${floodbox.renderBadge('Success', this._previewedFilesCount)} + ${floodbox.renderBadge('Total', this._previewedFilesCount + this._previewErrorList.length)} +
      +
      + ${floodbox.renderList('Preview Errors', this._previewErrorList)} +
      +

      Duration: ~${this._previewDuration} seconds

      +
      + `; + } + + renderCopyInfo() { + return html` +
      +

      Copy Content to Pink Site

      +

      Copying files to "${this._pinkSitePath}"...

      +
      + ${floodbox.renderBadge('Remaining', this._filesToCopy.length - this._copiedFilesCount - this._copiedErrorList.length)} + ${floodbox.renderBadge('Copy Errors', this._copiedErrorList.length, true)} + ${floodbox.renderBadge('Success', this._copiedFilesCount)} + ${floodbox.renderBadge('Total', this._copiedFilesCount + this._copiedErrorList.length)} +
      +
      + ${floodbox.renderList('Copy Errors', this._copiedErrorList)} +
      +

      Duration: ~${this._copyDuration} seconds

      +
      + `; + } + + renderReferencedFragmentsAssetsInfo() { + return html` +
      +

      Find Files, Referenced Fragments and Assets

      + ${this._canCopyPaths ? html`

      Press the "Copy" button above to copy these files.

      ` : nothing} +
      + ${floodbox.renderBadge('Pages', this._filesToCopy.length)} + ${floodbox.renderBadge('Fragments & Assets', this._fragmentsAssets.size)} +
      + ${floodbox.renderChecklist(this, this._filesToCopy)} +
      + `; + } + + renderUnpublishInfo() { + return html` +
      +

      Unpublish Pink Site Content

      +

      Unpublishing content in "${this._pinkSitePath}"...

      +
      + ${floodbox.renderBadge('Remaining', this._crawledFiles.length - this._unpublishErrorList.length)} + ${floodbox.renderBadge('Unpublish Errors', this._unpublishErrorList.length, true)} + ${floodbox.renderBadge('Success', this._unpublishFilesCount)} + ${floodbox.renderBadge('Total', this._unpublishFilesCount + this._unpublishErrorList.length)} +
      +
      + ${floodbox.renderList('Unpublish Errors', this._unpublishErrorList)} +
      +

      Duration: ~${this._unpublishDuration} seconds

      +
      + `; + } + + renderDeleteInfo() { + return html` +
      +

      Delete Pink Site Content

      +

      Deleting content in "${this._pinkSitePath}"...

      +
      + ${floodbox.renderBadge('Remaining', this._crawledFiles.length - this._deleteErrorList.length)} + ${floodbox.renderBadge('Delete Errors', this._deleteErrorList.length, true)} + ${floodbox.renderBadge('Success', this._deletedFilesCount)} + ${floodbox.renderBadge('Total', this._deletedFilesCount + this._deleteErrorList.length)} +
      +
      + ${floodbox.renderList('Delete Errors', this._deleteErrorList)} +
      +

      Duration: ~${this._deleteDuration} seconds

      +
      + `; + } + + renderTabUi() { + return html` + ${this._selectedOption === 'fgCopy' ? html` + ${floodbox.renderTabNav(this, this.tabUiCopy)} +
      + ${this._startFindFragmentsAssets ? this.renderReferencedFragmentsAssetsInfo() : nothing} + ${this._startCopy ? this.renderCopyInfo() : nothing} + ${this._startPreview ? this.renderCopyPreviewInfo() : nothing} + ${this._copiedToPink ? this.renderDone() : nothing} +
      + ` : nothing} + ${this._selectedOption === 'fgPromote' ? html` + ${floodbox.renderTabNav(this, this.tabUiPromote)} +
      + ${this._startCrawlPink ? this.renderCrawlInfo() : nothing} + ${this._startPromote ? this.renderPromoteInfo() : nothing} + ${this._startPreview ? this.renderPreviewInfo() : nothing} + ${this._startPublish ? this.renderPublishInfo() : nothing} + ${this._pinkContentPromoted ? this.renderDone() : nothing} +
      + ` : nothing} + ${this._selectedOption === 'fgDelete' ? html` + ${floodbox.renderTabNav(this, this.tabUiDelete)} +
      + ${this._startCrawlPink ? this.renderCrawlInfo() : nothing} + ${this._startUnpublish ? this.renderUnpublishInfo() : nothing} + ${this._startDelete ? this.renderDeleteInfo() : nothing} + ${this._pinkSiteDeleted ? this.renderDone() : nothing} +
      + ` : nothing} + `; + } + + renderRepoInfo() { + return html` +
      +

      Source Repo: ${this._sourceRepo}

      +

      Floodgate Repo: ${this._floodgateRepo}

      +
      + `; + } + + render() { + return html` +

      Floodgate

      +

      Provides content administration options to perform pre-/post-Floodgate events.

      +
      + ${this._selectedOption === 'fgCopy' ? html` +
      + + ${floodbox.renderClearButton()} +
      + ` : nothing} + ${this._selectedOption === 'fgPromote' ? html` +
      + this.validatePromoteDeletePath(e, 'promote')} /> + ${floodbox.renderClearButton()} +
      + ${this._promoteIgnore === true ? html` +
      + + ${floodbox.renderClearButton()} +
      ` : nothing} + ` : nothing} + ${this._selectedOption === 'fgDelete' ? html` +
      + this.validatePromoteDeletePath(e, 'delete')} /> + ${floodbox.renderClearButton()} +
      ` : nothing} +
      + + ${this._selectedOption === 'fgCopy' ? html` + ${!this._copyReady ? html` + + ` : nothing} + ${this._copyReady ? html` + + ` : nothing} + ` : nothing} + ${this._selectedOption === 'fgPromote' ? html` +
      + + +
      +
      + + +
      + + ` : nothing} + ${this._selectedOption === 'fgDelete' ? html` + + ${this._showDialog ? html` +
      +
      +

      Are you sure you want to delete all the files in ${this._floodgateRepo}?

      +
      + + +
      +
      +
      ` : nothing} + ` : nothing} +
      +
      + ${this._repoReady ? this.renderRepoInfo() : nothing} +
      + +
      + ${this._tabUiStart ? this.renderTabUi() : nothing} +
      + `; + } +} + +customElements.define('milo-floodgate', MiloFloodgate); + +(async function init() { + const cmp = await getValidFloodgate(); + document.body.appendChild(cmp); +}()); diff --git a/tools/floodbox/floodgate/utils.js b/tools/floodbox/floodgate/utils.js new file mode 100644 index 00000000000..367e82a1a99 --- /dev/null +++ b/tools/floodbox/floodgate/utils.js @@ -0,0 +1,38 @@ +/* eslint-disable import/no-unresolved */ +import DA_SDK from 'https://da.live/nx/utils/sdk.js'; + +function validatePaths(paths) { + const retData = { valid: false, org: '', repo: '' }; + if (!Array.isArray(paths) || paths.length === 0) return retData; + + let org; let repo; + for (const path of paths) { + if (!path.startsWith('/')) return retData; + const parts = path.split('/').filter(Boolean); + // Check that path has more than 2 parts + if (parts.length <= 2) return retData; + const [orgPart, repoPart] = parts; + // Initialize or check and consistency + if (!org && !repo) { + org = orgPart; + repo = repoPart; + } + if (orgPart !== org || repoPart !== repo || repoPart.includes('-pink')) { + return retData; + } + } + return { valid: true, org, repo }; +} + +async function getValidFloodgate(sdk = DA_SDK) { + const { context, token } = await sdk; + const cmp = document.createElement('milo-floodgate'); + cmp.repo = context.repo; + cmp.token = token; + return cmp; +} + +export { + validatePaths, + getValidFloodgate, +}; diff --git a/tools/floodbox/graybox/graybox-config.js b/tools/floodbox/graybox/graybox-config.js new file mode 100644 index 00000000000..3f9778c19be --- /dev/null +++ b/tools/floodbox/graybox/graybox-config.js @@ -0,0 +1,111 @@ +import RequestHandler from '../request-handler.js'; +import { DA_ORIGIN } from '../constants.js'; + +const GRAYBOX_CONFIG_FILE = '/.milo/graybox/config.json'; + +/** + * GrayboxConfig provides the configuration setup for the graybox app. + * If the global config is not defined, it will default to the experience config. + * If global config is defined (true or false), it will override the experience config. + */ +class GrayboxConfig { + constructor(org, repo, accessToken) { + this.org = org; + this.repo = repo; + this.accessToken = accessToken; + this.requestHandler = new RequestHandler(accessToken); + + // global config + this.isGlobalPromoteEnabled = null; + this.isGlobalDeleteEnabled = null; + this.isGlobalPromoteDraftsOnly = null; + + // global promote ignore paths + this.globalPromoteIgnorePaths = []; + + // experience config + this.experiencePromoteConfig = []; + this.experienceDeleteConfig = []; + this.experienceDraftsOnlyConfig = []; + } + + async getConfig() { + const resp = await this.requestHandler.daFetch(`${DA_ORIGIN}/source/${this.org}/${this.repo}${GRAYBOX_CONFIG_FILE}`); + if (resp.ok) { + const json = await resp.json(); + const { + 'global-config': globalConfig, + 'experience-config': experienceConfig, + 'global-promote-ignore-paths': globalPromoteIgnorePathsConfig, + } = json; + + if (globalConfig) { + this.#setGlobalConfig(globalConfig); + } + + if (experienceConfig) { + this.#setExperienceConfig(experienceConfig); + } + + if (globalPromoteIgnorePathsConfig) { + this.globalPromoteIgnorePaths = globalPromoteIgnorePathsConfig.data.map( + ({ globalPromoteIgnorePaths }) => globalPromoteIgnorePaths, + ); + } + } else { + // eslint-disable-next-line no-console + console.error(`Failed to fetch graybox config for ${this.org}/${this.repo}`); + } + } + + isPromoteEnabled(expName) { + if (this.isGlobalPromoteEnabled === null) { + return this.experiencePromoteConfig.includes(expName); + } + return this.isGlobalPromoteEnabled; + } + + isDeleteEnabled(expName) { + if (this.isGlobalDeleteEnabled === null) { + return this.experienceDeleteConfig.includes(expName); + } + return this.isGlobalDeleteEnabled; + } + + isDraftsOnly(expName) { + if (this.isGlobalPromoteDraftsOnly === null) { + return this.experienceDraftsOnlyConfig.includes(expName); + } + return this.isGlobalPromoteDraftsOnly; + } + + getGlobalPromoteIgnorePaths() { + return this.globalPromoteIgnorePaths; + } + + #setGlobalConfig(globalConfig) { + const enablePromoteConfig = globalConfig.data.find(({ key }) => key === 'enablePromote'); + this.isGlobalPromoteEnabled = !enablePromoteConfig || enablePromoteConfig.value === '' ? null : enablePromoteConfig.value === 'true'; + const enableDeleteConfig = globalConfig.data.find(({ key }) => key === 'enableDelete'); + this.isGlobalDeleteEnabled = !enableDeleteConfig || enableDeleteConfig.value === '' ? null : enableDeleteConfig.value === 'true'; + const promoteDraftsOnlyConfig = globalConfig.data.find(({ key }) => key === 'promoteDraftsOnly'); + this.isGlobalPromoteDraftsOnly = !promoteDraftsOnlyConfig || promoteDraftsOnlyConfig.value === '' ? null : promoteDraftsOnlyConfig.value === 'true'; + } + + #setExperienceConfig(experienceConfig) { + const promoteConfig = experienceConfig.data.find(({ key }) => key === 'enablePromote'); + if (promoteConfig) { + this.experiencePromoteConfig = promoteConfig.experienceNames.split(',').map((expName) => expName.trim()); + } + const deleteConfig = experienceConfig.data.find(({ key }) => key === 'enableDelete'); + if (deleteConfig) { + this.experienceDeleteConfig = deleteConfig.experienceNames.split(',').map((expName) => expName.trim()); + } + const draftsOnlyConfig = experienceConfig.data.find(({ key }) => key === 'promoteDraftsOnly'); + if (draftsOnlyConfig) { + this.experienceDraftsOnlyConfig = draftsOnlyConfig.experienceNames.split(',').map((expName) => expName.trim()); + } + } +} + +export default GrayboxConfig; diff --git a/tools/floodbox/graybox/graybox.css b/tools/floodbox/graybox/graybox.css new file mode 100644 index 00000000000..bdb263da899 --- /dev/null +++ b/tools/floodbox/graybox/graybox.css @@ -0,0 +1,4 @@ +body { + background-color: #fff; + margin: 0 var(--spacing-1000); +} diff --git a/tools/floodbox/graybox/graybox.js b/tools/floodbox/graybox/graybox.js new file mode 100644 index 00000000000..c919edcbb93 --- /dev/null +++ b/tools/floodbox/graybox/graybox.js @@ -0,0 +1,492 @@ +/* eslint-disable import/no-unresolved, no-underscore-dangle, class-methods-use-this */ +import { LitElement, html, nothing } from 'https://da.live/deps/lit/dist/index.js'; +import getStyle from 'https://da.live/nx/utils/styles.js'; +import getSvg from 'https://da.live/nx/public/utils/svg.js'; +import crawl from '../crawl-tree.js'; +import promoteFiles from '../promote.js'; +import previewOrPublishPaths from '../bulk-action.js'; +import { SUCCESS_CODES } from '../constants.js'; +import getFilesToPromote from './promote-paths.js'; +import { validatePaths, getValidGraybox } from './utils.js'; +import GrayboxConfig from './graybox-config.js'; +import * as floodbox from '../floodbox.js'; + +const ICONS = [ + 'https://da.live/nx/public/icons/Smock_Close_18_N.svg', + 'https://da.live/nx/public/icons/Smock_ChevronDown_18_N.svg', +]; + +const buttons = await getStyle('https://da.live/nx/styles/buttons.css'); +const style = await getStyle(import.meta.url); +const floodboxCss = await getStyle('/tools/floodbox/floodbox.css'); + +export default class MiloGraybox extends LitElement { + static properties = { + repo: { type: String }, + token: { type: String }, + }; + + constructor() { + super(); + this._canPromote = false; + this._canPromotePaths = false; + this._tabUiStart = false; + this._gbExpPath = ''; + this._gbPromoted = false; + this._startCrawlExp = false; + this._startCrawlPaths = false; + this._startPromote = false; + this._startPromotePaths = false; + this._invalidInput = false; + this._startPreviewPublish = false; + this._filesToPromote = []; + this._promoteIgnorePaths = []; + this._promoteIgnoreList = []; + this._promotedFiles = []; + this._promotedFilesCount = 0; + this._promoteErrorList = []; + this._previewedFilesCount = 0; + this._previewErrorList = []; + this._publishedFilesCount = 0; + this._publishErrorCount = 0; + this._crawledFiles = []; + this._crawledFilesCount = 0; + this._crawlDuration = 0; + this._promoteDuration = 0; + this._previewPublishDuration = 0; + this._selectedOption = 'promoteExp'; + this._promoteIgnore = false; + this._grayboxConfig = {}; + + this.tabUiSteps = [ + { id: 'crawl', title: 'Crawl' }, + { id: 'promote', title: 'Promote' }, + { id: 'preview', title: 'Preview' }, + { id: 'done', title: 'Done' }, + ]; + } + + connectedCallback() { + super.connectedCallback(); + this.shadowRoot.adoptedStyleSheets = [buttons, style, floodboxCss]; + getSvg({ parent: this.shadowRoot, paths: ICONS }); + } + + firstUpdated() { + const input = this.shadowRoot.querySelector('input[name="path"]'); + if (input) { + this._gbExpPath = input.value; + } + const select = this.shadowRoot.querySelector('.action-select'); + select.value = this._selectedOption; + } + + getOrgRepoExp() { + const input = this.shadowRoot.querySelector('input[name="path"]'); + const path = input.value.trim(); + const parts = path.split('/'); + return { + org: parts[1], + repo: parts[2], + exp: parts[3], + }; + } + + async startCrawl(experiencePath, expName) { + const { results, getDuration } = crawl({ + path: experiencePath, + callback: () => { + this._crawledFilesCount += 1; + this.requestUpdate(); + }, + throttle: 10, + accessToken: this.token, + crawlType: 'graybox', + isDraftsOnly: this._grayboxConfig.isDraftsOnly(expName), + }); + this._crawledFiles = await results; + this.cleanUpIgnoreFilesFromPromote(this._crawledFiles); + this._crawlDuration = getDuration(); + this._startPromote = true; + this.requestUpdate(); + } + + async startPromote(org, repo, exp) { + if (org && repo && exp && repo.endsWith('-graybox')) { + const startTime = Date.now(); + await promoteFiles({ + accessToken: this.token, + org, + repo, + expName: exp, + promoteType: 'graybox', + isDraftOnly: this._grayboxConfig.isDraftsOnly(exp), + files: this._filesToPromote, + callback: (status) => { + // eslint-disable-next-line no-console + console.log(`${status.statusCode} :: ${status.filePath}`); + this._promotedFiles.push(status.filePath); + if (SUCCESS_CODES.includes(status.statusCode)) { + this._promotedFilesCount += 1; + } else { + this._promoteErrorList.push({ href: status.filePath, status: status.statusCode }); + } + this.requestUpdate(); + }, + }); + this._promoteDuration = (Date.now() - startTime) / 1000; + this._startPreviewPublish = true; + this.requestUpdate(); + } + } + + async startPreviewPublish(org, repo) { + const startTime = Date.now(); + const paths = this._promotedFiles; + const repoToPrevPub = repo.replace('-graybox', ''); + await previewOrPublishPaths({ + org, + repo: repoToPrevPub, + paths, + action: 'preview', + accessToken: this.token, + callback: (status) => { + // eslint-disable-next-line no-console + console.log(`${status.statusCode} :: ${status.aemUrl}`); + if (SUCCESS_CODES.includes(status.statusCode)) { + this._previewedFilesCount += 1; + } else { + this._previewErrorList.push({ href: status.aemUrl, status: status.statusCode }); + } + this.requestUpdate(); + }, + }); + this.requestUpdate(); + this._previewPublishDuration = (Date.now() - startTime) / 1000; + this._gbPromoted = true; + this.requestUpdate(); + } + + readPromoteIgnorePaths() { + // add global promote ignore paths + this._promoteIgnorePaths.push(...this._grayboxConfig.getGlobalPromoteIgnorePaths()); + // add additional paths from textarea + const promoteIgnoreCheckbox = this.shadowRoot.querySelector('input[name="promoteIgnore"]'); + if (promoteIgnoreCheckbox?.checked) { + const promoteIgnoreTextArea = this.shadowRoot.querySelector('textarea[name="additionalInfo"]'); + if (promoteIgnoreTextArea) { + this._promoteIgnorePaths.push(...promoteIgnoreTextArea.value + .split('\n') + .map((path) => path.trim()) + .filter((path) => path.length > 0)); + } + } + this._promoteIgnorePaths = this._promoteIgnorePaths.map((path) => { + if (path.endsWith('/') || path.includes('.')) { + return path; + } + return `${path}.html`; + }); + } + + async handlePromoteExperience(event) { + event.preventDefault(); + if (!this._canPromote) { + return; + } + this._tabUiStart = true; + this._canPromote = false; + this.requestUpdate(); + await this.readPromoteIgnorePaths(); + + // #1 - Start crawling + const { org, repo, exp } = this.getOrgRepoExp(); + this._startCrawlExp = true; + floodbox.updateTabUi(this, 'crawl', 100); + await this.startCrawl(this._gbExpPath, exp); + + // #2 - Start promoting + this._startPromote = true; + floodbox.updateTabUi(this, 'promote', 100); + this.requestUpdate(); + await this.startPromote(org, repo, exp); + + // #3 - Preview promoted files + this._startPreviewPublish = true; + floodbox.updateTabUi(this, 'preview', 100); + await this.startPreviewPublish(org, repo); + + floodbox.updateTabUi(this, 'done', 100); + } + + async handlePromotePaths(event) { + event.preventDefault(); + let paths = this.shadowRoot.querySelector('textarea[name="promotePaths"]').value; + paths = paths.split('\n').map((path) => path.trim()).filter((path) => path.length > 0); + + // #1 - Validate paths + const { valid, org, repo, expName } = validatePaths(paths); + if (!valid) { + this._invalidInput = true; + this.requestUpdate(); + return; + } + this._tabUiStart = true; + this._canPromotePaths = false; + this.requestUpdate(); + await this.readPromoteIgnorePaths(); + + // #2 - Get files to promote from paths + this._startCrawlPaths = true; + floodbox.updateTabUi(this, 'crawl', 100); + this._crawledFiles = await getFilesToPromote({ + accessToken: this.token, + org, + repo, + expName, + paths, + }); + this.cleanUpIgnoreFilesFromPromote(this._crawledFiles); + // eslint-disable-next-line no-console + console.log('Files to Promote:', this._filesToPromote); + this.requestUpdate(); + + // #3 - Start promoting + this._startPromotePaths = true; + floodbox.updateTabUi(this, 'promote', 100); + this.requestUpdate(); + await this.startPromote(org, repo, expName); + + // #4 - Preview promoted files + this._startPreviewPublish = true; + floodbox.updateTabUi(this, 'preview', 100); + await this.startPreviewPublish(org, repo); + + floodbox.updateTabUi(this, 'done', 100); + } + + cleanUpIgnoreFilesFromPromote(files) { + files.filter((file) => this._promoteIgnorePaths.some((ignorePath) => { + if (file.path.endsWith(ignorePath) || file.path.includes(ignorePath)) { + this._promoteIgnoreList.push({ href: file.path, status: 'Ignored' }); + } + return file.path.endsWith(ignorePath); + })); + + this._filesToPromote = files.filter((file) => !this._promoteIgnorePaths.some((ignorePath) => { + if (ignorePath.endsWith('/')) { + return file.path.includes(ignorePath); + } + return file.path.endsWith(ignorePath); + })); + } + + async validateInput(event) { + const input = event.target; + // eslint-disable-next-line no-useless-escape + const regex = /^\/[^\/]+\/[^\/]+-graybox\/[^\/]+$/; + this._gbExpPath = input.value.trim(); + const valid = regex.test(this._gbExpPath); + if (valid) { + const { org, repo, exp } = this.getOrgRepoExp(); + this._grayboxConfig = new GrayboxConfig(org, repo, this.token); + await this._grayboxConfig.getConfig(); + if (this._grayboxConfig.isPromoteEnabled(exp)) { + this._canPromote = true; + } else { + this._canPromote = false; + // eslint-disable-next-line no-console + console.log('Promote is not enabled for this experience.'); + } + } + this.requestUpdate(); + } + + async validateInputPaths(event) { + const textarea = event.target; + const paths = textarea.value.split('\n').map((path) => path.trim()).filter((path) => path.length > 0); + const { valid, org, repo, expName } = validatePaths(paths); + if (valid) { + this._grayboxConfig = new GrayboxConfig(org, repo, this.token); + await this._grayboxConfig.getConfig(); + if (this._grayboxConfig.isPromoteEnabled(expName)) { + this._canPromotePaths = true; + } else { + this._canPromotePaths = false; + // eslint-disable-next-line no-console + console.log('Promote is not enabled for this experience.'); + } + } + this.requestUpdate(); + } + + togglePromoteIgnore(event) { + this._promoteIgnore = event.target.checked; + this.requestUpdate(); + } + + handleOptionChange(event) { + this._selectedOption = event.target.value; + this._promoteIgnore = false; + this.requestUpdate(); + } + + async resetApp() { + const cmp = await getValidGraybox(); + this.replaceWith(cmp); + } + + renderError() { + return html` +
      +

      Error

      +

      Invalid Graybox Experience path(s).

      +
      + `; + } + + renderDone() { + return html` +
      +

      Done

      +

      Graybox experience files have been promoted and previewed.

      + +
      + `; + } + + renderPreviewPublishInfo() { + return html` +
      +

      Graybox Preview

      +

      Previewing and Publishing promoted files"...

      +
      + ${floodbox.renderBadge('Remaining', this._promotedFilesCount - this._previewedFilesCount)} + ${floodbox.renderBadge('Preview Ignored', this._promoteIgnoreList.length, true)} + ${floodbox.renderBadge('Preview Errors', this._previewErrorList.length, true)} + ${floodbox.renderBadge('Success', this._previewedFilesCount)} + ${floodbox.renderBadge('Total', this._previewedFilesCount + this._previewErrorList.length + this._promoteIgnoreList.length)} +
      +
      + ${floodbox.renderList('Preview Ignored', this._promoteIgnoreList)} + ${floodbox.renderList('Preview Errors', this._previewErrorList)} +
      +

      Duration: ~${this._previewPublishDuration} seconds

      +
      + `; + } + + renderPromoteInfo() { + return html` +
      + ${this._selectedOption === 'promoteExp' ? html` +

      Promote Graybox Experience

      +

      Promoting "${this._gbExpPath}"...

      + ` : nothing} + ${this._selectedOption === 'promotePaths' ? html` +

      Promote Graybox Paths

      + ` : nothing} +
      + ${floodbox.renderBadge('Remaining', this._filesToPromote.length - this._promotedFilesCount - this._promoteErrorList.length)} + ${floodbox.renderBadge('Promote Ignored', this._promoteIgnoreList.length, true)} + ${floodbox.renderBadge('Promote Errors', this._promoteErrorList.length, true)} + ${floodbox.renderBadge('Success', this._promotedFilesCount)} + ${floodbox.renderBadge('Total', this._promotedFilesCount + this._promoteErrorList.length + this._promoteIgnoreList.length)} +
      +
      + ${floodbox.renderList('Promote Ignored', this._promoteIgnoreList)} + ${floodbox.renderList('Promote Errors', this._promoteErrorList)} +
      +

      Duration: ~${this._promoteDuration} seconds

      +
      + `; + } + + renderCrawlInfo() { + return html` +
      + ${this._selectedOption === 'promoteExp' ? html` +

      Crawl Graybox Experience

      +

      Crawling "${this._gbExpPath}" to promote...

      +
      + ${floodbox.renderBadge('Files', this._crawledFilesCount)} +
      + ` : nothing} + ${this._selectedOption === 'promotePaths' ? html` +

      Crawl Graybox Paths

      +

      Finding all files to promote...

      +
      + ${floodbox.renderBadge('Files', this._filesToPromote.length)} +
      + ` : nothing} +

      Duration: ~${this._crawlDuration} seconds

      +
      + `; + } + + renderTabUi() { + return html` + ${floodbox.renderTabNav(this, this.tabUiSteps)} +
      + ${this._startCrawlExp || this._startCrawlPaths ? this.renderCrawlInfo() : nothing} + ${this._startPromote || this._startPromotePaths ? this.renderPromoteInfo() : nothing} + ${this._startPreviewPublish ? this.renderPreviewPublishInfo() : nothing} + ${this._gbPromoted ? this.renderDone() : nothing} +
      + `; + } + + render() { + return html` +

      Graybox

      +

      Promote Graybox experiences and paths to the source site.

      +
      + ${this._selectedOption === 'promoteExp' ? html` +
      + + ${floodbox.renderClearButton()} +
      + ${this._promoteIgnore === true ? html` +
      + + ${floodbox.renderClearButton()} +
      ` : nothing} + ` : nothing} + ${this._selectedOption === 'promotePaths' ? html` +
      + + ${floodbox.renderClearButton()} +
      + ` : nothing} +
      + + ${this._selectedOption === 'promoteExp' ? html` +
      + + +
      + + ` : nothing} + ${this._selectedOption === 'promotePaths' ? html` + + ` : nothing} +
      + +
      + ${this._tabUiStart ? this.renderTabUi() : nothing} +
      + ${this._invalidInput ? this.renderError() : nothing} + `; + } +} + +customElements.define('milo-graybox', MiloGraybox); + +(async function init() { + const cmp = await getValidGraybox(); + document.body.appendChild(cmp); +}()); diff --git a/tools/floodbox/graybox/promote-paths.js b/tools/floodbox/graybox/promote-paths.js new file mode 100644 index 00000000000..f768c8e09ed --- /dev/null +++ b/tools/floodbox/graybox/promote-paths.js @@ -0,0 +1,51 @@ +import crawl from '../crawl-tree.js'; +import RequestHandler from '../request-handler.js'; +import { getFileName } from '../utils.js'; + +class PromotePaths { + constructor(accessToken, org, repo, expName, paths) { + this.accessToken = accessToken; + this.org = org; + this.repo = repo; + this.expName = expName; + this.paths = paths; + this.filesToPromote = []; + this.requestHandler = new RequestHandler(accessToken); + } + + async getFilesToPromote() { + for (const path of this.paths) { + if (path.endsWith('/')) { + const resp = await this.requestHandler.daFetch(`https://admin.da.live/list${path}`); + if (resp.ok) { + const json = await resp.json(); + for (const child of json) { + if (child.ext) { + this.filesToPromote.push(child); + } else { + const { results } = crawl({ + path: child.path, + throttle: 10, + accessToken: this.accessToken, + }); + const crawledFiles = await results; + this.filesToPromote.push(...crawledFiles); + } + } + } + } else if (path.endsWith('.json')) { + this.filesToPromote.push({ path, name: getFileName(path), ext: 'json' }); + } else { + this.filesToPromote.push({ path: `${path}.html`, name: getFileName(path), ext: 'html' }); + } + } + } +} + +async function getFilesToPromote({ accessToken, org, repo, expName, paths }) { + const promoter = new PromotePaths(accessToken, org, repo, expName, paths); + await promoter.getFilesToPromote(); + return promoter.filesToPromote; +} + +export default getFilesToPromote; diff --git a/tools/floodbox/graybox/utils.js b/tools/floodbox/graybox/utils.js new file mode 100644 index 00000000000..d7bcebeade3 --- /dev/null +++ b/tools/floodbox/graybox/utils.js @@ -0,0 +1,68 @@ +/* eslint-disable import/no-unresolved */ +import DA_SDK from 'https://da.live/nx/utils/sdk.js'; +import localeData from '../../../libs/utils/locales.js'; + +function validatePaths(paths) { + const retData = { valid: false, org: '', repo: '', expName: '' }; + if (!Array.isArray(paths) || paths.length === 0) return retData; + + let org; let repo; let expName; + for (const path of paths) { + if (!path.startsWith('/')) return retData; + const parts = path.split('/').filter(Boolean); + + // Check that path has more than 3 parts + if (parts.length <= 3) return retData; + + const [orgPart, repoPart, localeOrExpPart] = parts; + + // Initialize or check and consistency + if (!org && !repo) { + org = orgPart; + repo = repoPart; + } + if (orgPart !== org || repoPart !== repo || !repoPart.includes('-graybox')) { + return retData; + } + + // Determine locale and validate position of + let locale; let expNameIndex; + if (localeOrExpPart in localeData) { + // Locale exists at index 2 + locale = localeOrExpPart; + expNameIndex = 3; + } else { + // No locale, expName expected at index 2 + locale = ''; + expNameIndex = 2; + } + + // Check consistency + const currentExpName = parts[expNameIndex]; + if (!expName) { + expName = currentExpName; + } else if (expName !== currentExpName) { + return retData; + } + + // Ensure locale is valid if specified + if (locale && !(locale in localeData)) { + return retData; + } + } + + return { valid: true, org, repo, expName }; +} + +async function getValidGraybox(sdk = DA_SDK) { + const { context, token } = await sdk; + const cmp = document.createElement('milo-graybox'); + cmp.repo = context.repo; + cmp.token = token; + return cmp; +} + +export { + validatePaths, + getValidGraybox, +}; diff --git a/tools/floodbox/promote.js b/tools/floodbox/promote.js new file mode 100644 index 00000000000..d3c465064ee --- /dev/null +++ b/tools/floodbox/promote.js @@ -0,0 +1,72 @@ +import { DA_ORIGIN } from './constants.js'; +import RequestHandler from './request-handler.js'; +import searchAndReplace from './search-replace.js'; +import { isEditableFile } from './utils.js'; + +const BATCH_SIZE = 100; + +class Promote { + constructor(accessToken, org, repo, expName, promoteType, files, callback) { + this.accessToken = accessToken; + this.org = org; + this.repo = repo; + this.expName = expName; + this.promoteType = promoteType; + this.filesToPromote = files; + this.callback = callback; + + this.requestHandler = new RequestHandler(accessToken); + const destRepo = promoteType === 'graybox' ? repo.replace('-graybox', '') : repo.replace('-pink', ''); + this.srcSitePath = `/${org}/${repo}`; + this.destSitePath = `/${org}/${destRepo}`; + } + + async processFile(file) { + const response = await this.requestHandler.daFetch(`${DA_ORIGIN}/source${file.path}`); + if (response.ok) { + let content = isEditableFile(file.ext) ? await response.text() : await response.blob(); + if (file.ext === 'html') { + content = searchAndReplace({ + content, + searchType: this.promoteType, + org: this.org, + repo: this.repo, + expName: this.expName, + }); + } + let destFilePath = file.path.replace(this.srcSitePath, this.destSitePath); + if (this.promoteType === 'graybox') { + destFilePath = destFilePath.replace(`/${this.expName}`, ''); + } + const status = await this.requestHandler.uploadContent(destFilePath, content, file.ext); + this.callback(status); + } else { + // eslint-disable-next-line no-console + console.error(`Failed to fetch : ${response.status} :: ${file.path}`); + const status = { statusCode: response.status, filePath: file.path, errorMsg: 'Failed to fetch' }; + this.callback(status); + } + } + + async promoteFilesInBatches(filePaths) { + for (let i = 0; i < filePaths.length; i += BATCH_SIZE) { + const batch = filePaths.slice(i, i + BATCH_SIZE); + await Promise.all(batch.map((file) => this.processFile(file))); + } + } + + async promoteFiles() { + // eslint-disable-next-line no-console + console.log(`Promoting files from ${this.srcSitePath} to ${this.destSitePath}`); + await this.promoteFilesInBatches(this.filesToPromote); + } +} + +async function promoteFiles({ + accessToken, org, repo, expName, promoteType, files, callback, +}) { + const promoter = new Promote(accessToken, org, repo, expName, promoteType, files, callback); + await promoter.promoteFiles(); +} + +export default promoteFiles; diff --git a/tools/floodbox/references.js b/tools/floodbox/references.js new file mode 100644 index 00000000000..c5f5884082b --- /dev/null +++ b/tools/floodbox/references.js @@ -0,0 +1,56 @@ +import RequestHandler from './request-handler.js'; +import { DA_ORIGIN } from './constants.js'; + +class References { + constructor(accessToken, htmlPaths, org, repo) { + this.accessToken = accessToken; + this.org = org; + this.repo = repo; + this.htmlPaths = htmlPaths; + + // eslint-disable-next-line no-useless-escape + this.referencePattern = new RegExp(`https?:\/\/[^/]*--${repo}--${org}\\.[^/]*(?:page|live)(\/.*(?:fragments\/|\\.(?:pdf|svg|json))[^?]*)`); + this.requestHandler = new RequestHandler(accessToken); + } + + isValidReference(link) { + return !!(link && link.match(this.referencePattern)); + } + + getReferencePath(link) { + if (this.isValidReference(link)) { + return link.match(this.referencePattern)[1]; + } + return null; + } + + async getReferencedFragmentsAndAssets() { + const fragmentsAndAssets = new Set(); + for (const path of this.htmlPaths) { + const response = await this.requestHandler.daFetch(`${DA_ORIGIN}/source${path}.html`); + if (!response.ok) { + // eslint-disable-next-line no-continue + continue; + } + const content = await response.text(); + const parser = new DOMParser(); + const doc = parser.parseFromString(content, 'text/html'); + const { links } = doc; + for (const link of links) { + const { href } = link; + const refPath = this.getReferencePath(href); + if (refPath) { + fragmentsAndAssets.add(`/${this.org}/${this.repo}${refPath}`); + } + } + } + return fragmentsAndAssets; + } +} + +function findFragmentsAndAssets({ accessToken, htmlPaths, org, repo }) { + const references = new References(accessToken, htmlPaths, org, repo); + return references.getReferencedFragmentsAndAssets(); +} + +export default findFragmentsAndAssets; diff --git a/tools/floodbox/request-handler.js b/tools/floodbox/request-handler.js new file mode 100644 index 00000000000..4153bbefd6a --- /dev/null +++ b/tools/floodbox/request-handler.js @@ -0,0 +1,103 @@ +import { DA_ORIGIN, SUPPORTED_FILES } from './constants.js'; +import { isEditableFile } from './utils.js'; + +class RequestHandler { + constructor(accessToken) { + this.accessToken = accessToken; + } + + async daFetch(url, opts = {}) { + opts.headers ||= {}; + if (this.accessToken) { + opts.headers.Authorization = `Bearer ${this.accessToken}`; + } + + const resp = await fetch(url, opts); + if (resp.status === 401) { + // eslint-disable-next-line no-console + console.log('Unauthorized access. Please check your access token.'); + return resp.status; + } + return resp; + } + + /** + * Uploads the file to the destination path + * @param {*} filePath Destination file path + * @param {*} content File blob or text content + * @param {*} fileExt File extension + */ + async uploadContent(filePath, content, fileExt) { + let status; + if (isEditableFile(fileExt)) { + status = await this.#createVersionAndUpload(filePath, content, fileExt); + } else { + status = await this.#uploadFile(filePath, content, fileExt); + } + return status; + } + + /** + * Deletes the content at the specified path + * @param filePath Path of the content to be deleted + * @returns Object containing status code, file path and error message if any + */ + async deleteContent(filePath) { + const opts = { method: 'DELETE' }; + const resp = await this.daFetch(`${DA_ORIGIN}/source${filePath}`, opts); + if (!resp.ok) { + // eslint-disable-next-line no-console + console.error(`Failed to delete content for ${filePath} :: ${resp.status}`); + return { statusCode: resp.status, filePath, errorMsg: 'Failed to delete file' }; + } + return { statusCode: resp.status, filePath }; + } + + static #getFileType(type) { + return SUPPORTED_FILES[type] || 'application/octet-stream'; + } + + static #getFileBlob(content, fileExt) { + return isEditableFile(fileExt) + ? new Blob([content], { type: RequestHandler.#getFileType(fileExt) }) + : content; + } + + async #createVersion(destinationFilePath) { + const opts = { + method: 'POST', + body: JSON.stringify({ label: 'Auto created version by FloodBox App' }), + }; + return this.daFetch( + `${DA_ORIGIN}/versionsource${destinationFilePath}`, + opts, + ); + } + + async #uploadFile(filePath, content, fileExt) { + const fileBlob = RequestHandler.#getFileBlob(content, fileExt); + const body = new FormData(); + body.set('data', fileBlob); + const opts = { body, method: 'POST' }; + const path = `${DA_ORIGIN}/source${filePath}`; + const resp = await this.daFetch(path, opts); + if (!resp.ok) { + // eslint-disable-next-line no-console + console.error(`Failed to upload content for ${filePath} :: ${resp.status}`); + return { statusCode: resp.status, filePath, errorMsg: 'Failed to upload file' }; + } + return { statusCode: resp.status, filePath }; + } + + async #createVersionAndUpload(destinationFilePath, content, fileExt) { + const resp = await this.#createVersion(destinationFilePath); + if (!resp.ok) { + // eslint-disable-next-line no-console + console.error(`Failed to create version for ${destinationFilePath} :: ${resp.status}`); + return { statusCode: resp.status, filePath: destinationFilePath, errorMsg: 'Failed to create version' }; + } + return this.#uploadFile(destinationFilePath, content, fileExt); + } +} + +export default RequestHandler; diff --git a/tools/floodbox/search-replace.js b/tools/floodbox/search-replace.js new file mode 100644 index 00000000000..6449c661685 --- /dev/null +++ b/tools/floodbox/search-replace.js @@ -0,0 +1,72 @@ +/** + * Search and replace content based on the search type (floodgate or graybox). + * + * This is specifically created to be used as part of the PROMOTE operations + * performed for Floodgate and Graybox content. + */ + +class SearchReplace { + constructor({ searchType, org, repo, expName }) { + this.searchType = searchType; // 'floodgate' or 'graybox' + this.org = org; + this.repo = repo; + this.expName = expName; + const repoSuffix = searchType === 'floodgate' ? 'pink' : 'graybox'; + this.destRepo = repo.replace(`-${repoSuffix}`, ''); + } + + searchAndReplace(content) { + let updatedContent; + if (this.searchType === 'floodgate') { + updatedContent = this.adjustUrlDomains(content); + } else if (this.searchType === 'graybox') { + updatedContent = this.adjustUrlDomains(content); + const parser = new DOMParser(); + const doc = parser.parseFromString(updatedContent, 'text/html'); + SearchReplace.removeGrayboxStyles(doc); // Remove styles starting with 'gb-' + SearchReplace.removeGrayboxBlock(doc); // Remove graybox block + updatedContent = doc.body.outerHTML; + } else { + // eslint-disable-next-line no-console + console.error(`Unknown search type: ${this.searchType}`); + updatedContent = content; + } + return updatedContent; + } + + adjustUrlDomains(content) { + if (this.searchType === 'floodgate') { + const searchValue = `--${this.repo}--${this.org}`; + const replaceValue = `--${this.destRepo}--${this.org}`; + return content.replaceAll(searchValue, replaceValue); + } + if (this.searchType === 'graybox') { + const updatedContent = content.replaceAll(`.page/${this.expName}`, '.page'); + return updatedContent.replaceAll(`.live/${this.expName}`, '.live'); + } + return content; + } + + static removeGrayboxStyles(doc) { + const elements = doc.querySelectorAll('[class*="gb-"]'); + elements.forEach((element) => { + const classes = element.className.split(' '); + const filteredClasses = classes.filter( + (className) => !className.startsWith('gb-'), + ); + element.className = filteredClasses.join(' '); + }); + } + + static removeGrayboxBlock(doc) { + const elements = doc.querySelectorAll('div.graybox'); + elements.forEach((element) => element.remove()); + } +} + +function searchAndReplace({ content, searchType, org, repo, expName }) { + const searchReplace = new SearchReplace({ searchType, org, repo, expName }); + return searchReplace.searchAndReplace(content); +} + +export default searchAndReplace; diff --git a/tools/floodbox/utils.js b/tools/floodbox/utils.js new file mode 100644 index 00000000000..6020ea652af --- /dev/null +++ b/tools/floodbox/utils.js @@ -0,0 +1,22 @@ +function isEditableFile(fileExt) { + return ['html', 'json'].includes(fileExt); +} + +function getFileName(path) { + const fileNameWithExt = path.split('/').pop(); + if (fileNameWithExt.includes('.')) { + return fileNameWithExt.split('.').slice(0, -1).join('.'); + } + return fileNameWithExt; +} + +function getFileExtension(path) { + const match = path.match(/\.([a-zA-Z0-9]+)$/); + return match ? match[1] : null; +} + +export { + isEditableFile, + getFileName, + getFileExtension, +}; diff --git a/tools/floodgate.html b/tools/floodgate.html new file mode 100644 index 00000000000..ebf11e2c624 --- /dev/null +++ b/tools/floodgate.html @@ -0,0 +1,17 @@ + + + + Floodgate App + + + + + + + + + + + + + diff --git a/tools/floodgate/js/config.js b/tools/floodgate/js/config.js index c9bb995da50..d6eecdbffd0 100644 --- a/tools/floodgate/js/config.js +++ b/tools/floodgate/js/config.js @@ -22,15 +22,16 @@ function getPromoteIgnorePaths(configJson) { async function getConfig(fgColor) { if (!decoratedConfig) { const urlInfo = getUrlInfo(); - if (urlInfo.isValid()) { - const configPath = `${urlInfo.origin}${FLOODGATE_CONFIG}`; - const configJson = await fetchConfigJson(configPath); - decoratedConfig = { - sp: getSharepointConfig(configJson, fgColor), - admin: getHelixAdminConfig(), - promoteIgnorePaths: getPromoteIgnorePaths(configJson), - }; + if (!urlInfo.isValid()) { + throw new Error('Invalid Url Parameters that point to project file'); } + const configPath = `${urlInfo.origin}${FLOODGATE_CONFIG}`; + const configJson = await fetchConfigJson(configPath); + decoratedConfig = { + sp: getSharepointConfig(configJson, fgColor), + admin: getHelixAdminConfig(), + promoteIgnorePaths: getPromoteIgnorePaths(configJson), + }; } return decoratedConfig; } diff --git a/tools/graybox.html b/tools/graybox.html new file mode 100644 index 00000000000..39d2f632d29 --- /dev/null +++ b/tools/graybox.html @@ -0,0 +1,17 @@ + + + + Graybox App + + + + + + + + + + + + + diff --git a/tools/loc/config.js b/tools/loc/config.js index e56411cff5d..c9b720629cf 100644 --- a/tools/loc/config.js +++ b/tools/loc/config.js @@ -188,27 +188,28 @@ function getHelixAdminConfig() { async function getConfig() { if (!decoratedConfig) { const urlInfo = getUrlInfo(); - if (urlInfo.isValid()) { - const configPath = `${urlInfo.origin}${LOC_CONFIG}`; - const configJson = await fetchConfigJson(configPath); - const locales = getLocalesConfig(configJson); - const decoratedLocales = getDecoratedLocalesConfig(locales); - const workflowsConfig = getWorkflowsConfig(configJson); - decoratedConfig = { - locales, - decoratedLocales, - glaas: getDecoratedGLaaSConfig(configJson, decoratedLocales, workflowsConfig), - sp: getSharepointConfig(configJson), - admin: getHelixAdminConfig(), - getLivecopiesForLanguage(language) { - const localeConfig = decoratedLocales[language]; - return localeConfig?.livecopies ? localeConfig.livecopies : null; - }, - getWorkflowForLanguage(language, customWorkflow) { - return getWorkflowForLanguage(workflowsConfig, language, decoratedLocales, customWorkflow); - }, - }; + if (!urlInfo.isValid()) { + throw new Error('Invalid Url Parameters that point to project file'); } + const configPath = `${urlInfo.origin}${LOC_CONFIG}`; + const configJson = await fetchConfigJson(configPath); + const locales = getLocalesConfig(configJson); + const decoratedLocales = getDecoratedLocalesConfig(locales); + const workflowsConfig = getWorkflowsConfig(configJson); + decoratedConfig = { + locales, + decoratedLocales, + glaas: getDecoratedGLaaSConfig(configJson, decoratedLocales, workflowsConfig), + sp: getSharepointConfig(configJson), + admin: getHelixAdminConfig(), + getLivecopiesForLanguage(language) { + const localeConfig = decoratedLocales[language]; + return localeConfig?.livecopies ? localeConfig.livecopies : null; + }, + getWorkflowForLanguage(language, customWorkflow) { + return getWorkflowForLanguage(workflowsConfig, language, decoratedLocales, customWorkflow); + }, + }; } return decoratedConfig; } diff --git a/tools/loc/utils.js b/tools/loc/utils.js index 08d99c5d372..35540004ae9 100644 --- a/tools/loc/utils.js +++ b/tools/loc/utils.js @@ -68,6 +68,12 @@ export function getUrlInfo() { function getParam(name) { return location.searchParams.get(name); } + + function isValidReferrer(url) { + const allowedHosts = ['adobe.sharepoint.com']; + return allowedHosts.includes(new URL(url)?.hostname); + } + const projectName = getParam('project'); const sub = projectName ? projectName.split('--') : []; @@ -83,7 +89,7 @@ export function getUrlInfo() { ref, origin: `https://${ref}--${repo}--${owner}.hlx.page`, // TODO ADD HLX5 SUPPORT isValid() { - return sp && owner && repo && ref; + return sp && owner && repo && ref && isValidReferrer(sp); }, }; return urlInfo; diff --git a/tools/send-to-caas/bulk-publish-to-caas.beta.js b/tools/send-to-caas/bulk-publish-to-caas.beta.js deleted file mode 100644 index 602569c883f..00000000000 --- a/tools/send-to-caas/bulk-publish-to-caas.beta.js +++ /dev/null @@ -1,549 +0,0 @@ -/* eslint-disable no-continue */ -import { loadScript, loadStyle } from '../../libs/utils/utils.js'; -import { getImsToken } from '../utils/utils.js'; -import { - loadTingleModalFiles, - showAlert, - showConfirm, -} from './send-to-caas.js'; -import { - getCardMetadata, - getCaasProps, - loadCaasTags, - postDataToCaaS, - getConfig, - setConfig, -} from './send-utils.js'; -import comEnterpriseToCaasTagMap from './comEnterpriseToCaasTagMap.js'; - -const BODY = document.body; -const SIGNEDIN = BODY.querySelector('.status-signed-in'); -const SIGNEDOUT = BODY.querySelector('.status-signed-out'); - -const LS_KEY = 'bulk-publish-caas'; -const FIELDS = ['presetSelector', 'host', 'repo', 'owner', 'caasEnvSelector', 'urls', 'contentType', 'publishToFloodgate']; -const FIELDS_CB = ['draftOnly', 'useHtml', 'usePreview']; -const DEFAULT_VALUES = { - preset: 'default', - caasEnv: 'prod', - contentType: 'caas:content-type/article', - excelFile: '', - host: 'business.adobe.com', - owner: 'adobecom', - repo: 'bacom', - urls: '', - publishToFloodgate: 'default', -}; -const DEFAULT_VALUES_CB = { - draftOnly: false, - usePreview: false, - useHtml: false, -}; - -// Hold the selected preset data -let selectedPreset = {}; - -const fetchExcelJson = async (url) => { - const resp = await fetch(url); - if (resp.ok) { - const json = await resp.json(); - return json.data; - } - return []; -}; - -const checkIms = async (prompt = true) => { - const accessToken = await getImsToken(loadScript); - if (!accessToken && prompt) { - const shouldLogIn = await showConfirm( - 'You must be logged in with an Adobe ID in order to publish to CaaS.\nDo you want to log in?', - ); - if (shouldLogIn) { - const { signInContext } = getConfig(); - window.adobeIMS.signIn(signInContext); - } - return false; - } - return accessToken; -}; - -const getPageDom = async (url, now) => { - try { - const resp = await fetch(`${url}?timestamp=${now.getTime()}`); - if (!resp.ok) return { error: `${resp.status}: ${resp.statusText}` }; - const html = await resp.text(); - const dp = new DOMParser(); - const dom = dp.parseFromString(html, 'text/html'); - return { dom, lastModified: resp.headers.get('last-modified') }; - } catch (err) { - return { error: err.message }; - } -}; - -const updateTagsFromSheetData = (tags, sheetTagsStr) => { - const sheetTags = sheetTagsStr.split(','); - const tagSet = new Set(tags.map((t) => t.id)); - - sheetTags.forEach((sheetTag) => { - if (sheetTag.startsWith('caas:')) { - tagSet.add(sheetTag); - return; - } - const newTag = comEnterpriseToCaasTagMap[sheetTag]; - if (newTag) { - tagSet.add(newTag); - } - }); - - return [...tagSet].map((t) => ({ id: t })); -}; - -const showClearResultsTables = () => { - const clearResultsButton = document.querySelector('.clear-results'); - clearResultsButton.style.display = 'block'; -}; - -const resetResultsTables = () => { - const successTable = document.querySelector('.success-table'); - const successTBody = successTable.querySelector('tbody'); - successTBody.innerHTML = ''; - successTable.style.display = 'none'; - const errorTable = document.querySelector('.error-table'); - const errorTBody = errorTable.querySelector('tbody'); - errorTBody.innerHTML = ''; - errorTable.style.display = 'none'; -}; - -const showSuccessTable = (successArr) => { - showClearResultsTables(); - const env = getConfig().caasEnv === 'prod' ? '' : `-${getConfig().caasEnv}`; - const chimeraEndpoint = `https://14257-chimera${env}.adobeioruntime.net/api/v1/web/chimera-0.0.1/collection?debug=1&featuredCards=`; - const successTable = document.querySelector('.success-table'); - const tableBody = successTable.querySelector('tbody'); - successTable.style.display = 'block'; - let index = 0; - /* eslint-disable no-plusplus */ - successArr.forEach(([pageUrl, response]) => { - tableBody.innerHTML += `

      - - - - - `; - }); - /* eslint-enable no-plusplus */ -}; - -const showErrorTable = (errorArr) => { - showClearResultsTables(); - const errorTable = document.querySelector('.error-table'); - const tableBody = errorTable.querySelector('tbody'); - errorTable.style.display = 'block'; - let index = 0; - /* eslint-disable no-plusplus */ - errorArr.forEach(([pageUrl, response]) => { - index += 1; - const message = response.error ? response.error.replace(/:.*/, '') : response; - tableBody.innerHTML += ` - - - - - `; - }); - /* eslint-enable no-plusplus */ -}; - -const processData = async (data, accessToken) => { - const errorArr = []; - const successArr = []; - let index = 0; - let keepGoing = true; - const now = new Date(); - - const statusModal = showAlert('', { btnText: 'Cancel', onClose: () => { keepGoing = false; } }); - const { - caasEnv, - draftOnly, - host, - owner, - repo, - useHtml, - usePreview, - publishToFloodgate, - } = getConfig(); - - if (!repo) { - showAlert('You must select a Preset, or use the Advanced option to enter the necessary information.', { error: true }); - if (statusModal.modal) statusModal.close(); - return; - } - - let domain = `https://${host}`; - - if (usePreview) { - domain = `https://stage--${repo}--${owner}.hlx.page`; - } else if (publishToFloodgate !== 'default') { - domain = `https://main--${repo}--${owner}.hlx.live`; - } - - for (const page of data) { - if (!keepGoing) break; - - try { - const rawUrl = page.Path || page.path || page.url || page.URL || page.Url || page; - - const { pathname } = new URL(rawUrl); - const pathnameNoHtml = pathname.replace('.html', ''); - const pageUrl = usePreview ? `${domain}${pathnameNoHtml}` : `${domain}${pathname}`; - const prodUrl = `${host}${pathnameNoHtml}${useHtml ? '.html' : ''}`; - - index += 1; - statusModal.setContent(`Publishing ${index} of ${data.length}:
      ${pageUrl}`); - - if (pageUrl === 'stop') break; // debug, stop on empty line - - const { dom, error, lastModified } = await getPageDom(pageUrl, now); - if (error) { - errorArr.push([pageUrl, error]); - continue; - } - - setConfig({ bulkPublish: true, doc: dom, pageUrl, lastModified }); - const { caasMetadata, errors } = await getCardMetadata({ - prodUrl, - floodgatecolor: publishToFloodgate, - }); - - if (errors.length) { - errorArr.push([pageUrl, errors]); - continue; - } - - const tagField = page['cq:tags'] || page.tags; - if (tagField) { - const updatedTags = updateTagsFromSheetData(caasMetadata.tags, tagField); - caasMetadata.tags = updatedTags; - } - - if (!caasMetadata.tags.length) { - errorArr.push([pageUrl, 'No tags on page']); - continue; - } - - const caasProps = getCaasProps(caasMetadata); - - const response = await postDataToCaaS({ - accessToken, - caasEnv: caasEnv?.toLowerCase(), - caasProps, - draftOnly, - }); - - if (response.success) { - successArr.push([pageUrl, caasMetadata.entityid]); - } else { - errorArr.push([pageUrl, response]); - } - } catch (e) { - // eslint-disable-next-line no-console - console.log(`ERROR: ${e.message}`); - } - } - - if (statusModal.modal) statusModal.close(); - - SIGNEDIN.style.display = 'none'; - SIGNEDOUT.style.display = 'none'; - resetResultsTables(); - if (successArr.length) { - showSuccessTable(successArr); - } - if (errorArr.length) { - showErrorTable(errorArr); - } - - showAlert(`Successfully published ${successArr.length} pages. \n\n Failed to publish ${errorArr.length} pages.`); -}; - -const bulkPublish = async () => { - const accessToken = await checkIms(); - if (!accessToken) return; - - const { urls } = getConfig(); - - if (!urls) { - await showAlert('Enter a URL or list of URLs, each on a separate line, to be sent to CaaS.', { error: true }); - } - - const data = urls ? urls.split('\n') : ''; - - await processData(data, accessToken); -}; - -const loadFromLS = () => { - BODY.classList = ''; - const ls = localStorage.getItem(LS_KEY); - if (!ls || !ls.includes('presetSelector')) return; - try { - setConfig(JSON.parse(ls)); - const config = getConfig(); - FIELDS.forEach((field) => { - document.getElementById(field).value = config[field] ?? DEFAULT_VALUES[field]; - if (field === 'presetSelector' && config[field] === 'advanced') { - BODY.classList = 'advanced'; - } else if (field === 'presetSelector' && config[field] !== 'default') { - BODY.classList = 'preset'; - } - }); - FIELDS_CB.forEach((field) => { - document.getElementById(field).checked = config[field] ?? DEFAULT_VALUES_CB[field]; - }); - - /* c8 ignore next */ - } catch (e) { /* do nothing */ } -}; - -const publishWarning = document.querySelector('.publish-warning'); -const checkCaasEnv = () => { - // eslint-disable-next-line no-undef - const caasEnvValue = caasEnvSelector.value || 'prod'; - // eslint-disable-next-line no-undef - if (caasEnvValue === 'prod' && !draftOnly.checked) { - publishWarning.style.height = '30px'; - } else { - publishWarning.style.height = '0'; - } -}; - -// preset options -const presetsJsonPath = 'https://milo.adobe.com/drafts/caas/bppresets.json'; -let presetsData = {}; - -fetchExcelJson(presetsJsonPath).then((presets) => { - const separator = document.querySelector('.separator'); - const parent = separator.parentElement; - presetsData = presets; - presets.forEach((preset) => { - const option = document.createElement('option'); - option.value = preset.repo; - option.text = `${preset.name} (${preset.repo})`; - parent.insertBefore(option, separator); - }); -}); - -const resetAdvancedOptions = () => { - /* eslint-disable no-undef */ - caasEnvSelector.value = 'prod'; - draftOnly.checked = false; - useHtml.checked = false; - usePreview.checked = false; - publishToFloodgate.value = 'default'; - /* eslint-enable no-undef */ -}; - -/* eslint-disable no-nested-ternary */ -const useDarkTheme = localStorage.getItem('bp-theme') === 'dark' - ? true - : localStorage.getItem('bp-theme') === 'light' - ? false - : window.matchMedia('(prefers-color-scheme: dark)').matches; -/* eslint-enable no-nested-ternary */ - -if (useDarkTheme) { - document.querySelector('.bulk-publisher').classList.add('dark'); - document.querySelector('#option-dark').checked = true; -} else { - document.querySelector('#option-light').checked = true; -} - -// eslint-disable-next-line no-undef -presetSelector.addEventListener('change', () => { - // eslint-disable-next-line no-undef - const { value } = presetSelector; - selectedPreset = presetsData.find((item) => item.id === value) || {}; - BODY.classList = ''; - - if (value === 'advanced') { - BODY.classList.add('advanced'); - return; - } - if (value === 'default') { - BODY.classList = ''; - } else { - BODY.classList.add('preset'); - } - - resetAdvancedOptions(); - const ls = localStorage.getItem(LS_KEY); - const config = ls ? JSON.parse(ls) : {}; - config.presetSelector = selectedPreset.id || 'default'; - config.host = selectedPreset.host || ''; - config.owner = selectedPreset.owner || ''; - config.repo = selectedPreset.repo || ''; - config.contentType = selectedPreset.contentType; - config.useHtml = selectedPreset.useHtml === 'true'; - - setConfig(config); - window.localStorage.setItem(LS_KEY, JSON.stringify(getConfig())); - - loadFromLS(); - checkCaasEnv(); -}); - -const clearResultsButton = document.querySelector('.clear-results'); -clearResultsButton.addEventListener('click', () => { - resetResultsTables(); - clearResultsButton.style.display = 'none'; - SIGNEDIN.style.display = 'block'; -}); - -// eslint-disable-next-line no-undef -caasEnvSelector.addEventListener('change', () => { - checkCaasEnv(); -}); - -// eslint-disable-next-line no-undef -draftOnly.addEventListener('change', () => { - checkCaasEnv(); -}); - -const checkUserStatus = async () => { - const accessToken = await checkIms(false); - if (accessToken) { - document.querySelector('.status-checking').style.display = 'none'; - SIGNEDIN.style.display = 'block'; - } else { - document.querySelector('.status-checking').style.display = 'none'; - SIGNEDOUT.style.display = 'block'; - } - return true; -}; - -const feecbackButton = document.querySelector('.feedback'); -feecbackButton.addEventListener('click', () => { - showAlert(`

      Feedback and Comments

      -

      Feedback for this tool is always welcome.

      -

      For reporting issues or sharing comments, please use the #javelin-friends channel on Slack

      -

      The Javelin Team

      `); -}); - -const helpButtons = document.querySelectorAll('.help'); -helpButtons.forEach((btn) => { - btn.addEventListener('click', (e) => { - e.preventDefault(); - const el = e.target.classList[1]; - switch (el) { - case 'host': - showAlert(`

      Host

      Enter the host of the site you are publishing content to.

      -

      -   milo.adobe.com
      -   blog.adobe.com
      -   business.adobe.com.

      `); - break; - - case 'repo': - showAlert(`

      Repo

      -

      The Repo is the name of the repository where the content will be published.

      -

      For example:

      -

      https://main--{repo}--{owner}.hlx.live`); - break; - - case 'owner': - showAlert(`

      Repo Owner

      -

      The Repo Owner is the owner of the repository where the content will be published. For example:

      -

      https://main--{repo}--{owner}.hlx.live`); - break; - - case 'content-type-fallback': - showAlert(`

      ContentType Fallback

      -

      This is the content-type tag that will be applied to all cards that do not have - a specific content-type tag included in their metadata.

      `); - break; - - case 'caas-env': - showAlert(`

      CaaS Enviroment

      -

      This is the CaaS environment where the content will be published.

      `); - break; - - case 'floodgate': - showAlert(`

      FloodGate

      -

      Use this option to select the FloodGate color for the content.

      `); - break; - - case 'publish-to-draft': - showAlert(`

      Publish to CaaS DRAFT only

      -

      When this is option checked, the content will be sent to the CaaS DRAFT container only.

      -

      With this option unchecked, the content is sent to both, the CaaS LIVE and DRAFT containers.

      `); - break; - - case 'use-html': - showAlert(`

      Add HTML to Links

      -

      When this option is checked, the bulkpublisher will add the .html extension to the CTA links.

      `); - break; - - case 'use-preview': - showAlert(`

      Use Preview Content -

      When this option is checked, the tool will publish content from: -

      https://main--{repo}--{owner}.hlx.page -

      This can be useful for testing before publishing to production.

      `); - break; - - default: - showAlert(`

      Help

      Help for "${el}" is on its way! Stay tuned.

      `); - break; - } - }); -}); - -const themeOptions = document.querySelectorAll('.theme-options'); -themeOptions.forEach((btn) => { - btn.addEventListener('click', (e) => { - if (e.target.value === 'dark') { - document.querySelector('.bulk-publisher').classList.add('dark'); - localStorage.setItem('bp-theme', 'dark'); - } else { - document.querySelector('.bulk-publisher').classList.remove('dark'); - localStorage.setItem('bp-theme', 'light'); - } - }); -}); - -const init = async () => { - await loadTingleModalFiles(loadScript, loadStyle); - await loadCaasTags(); - loadFromLS(); - checkCaasEnv(); - checkUserStatus(); - - window.addEventListener('beforeunload', () => { - FIELDS.forEach((field) => { - setConfig({ [field]: document.getElementById(field).value }); - }); - FIELDS_CB.forEach((field) => { - setConfig({ [field]: document.getElementById(field).checked }); - }); - window.localStorage.setItem(LS_KEY, JSON.stringify(getConfig())); - }); - - const bulkPublishBtn = document.querySelector('#bulkpublish'); - bulkPublishBtn.addEventListener('click', () => { - setConfig({ - host: document.getElementById('host').value, - project: '', - branch: 'main', - caasEnv: document.getElementById('caasEnvSelector').value || 'prod', - contentType: document.getElementById('contentType').value, - repo: document.getElementById('repo').value, - owner: document.getElementById('owner').value, - urls: document.getElementById('urls').value, - publishToFloodgate: document.getElementById('publishToFloodgate').value, - draftOnly: document.getElementById('draftOnly').checked, - useHtml: document.getElementById('useHtml').checked, - usePreview: document.getElementById('usePreview').checked, - }); - bulkPublish(); - }); -}; - -export default init; diff --git a/tools/send-to-caas/bulk-publish-to-caas.classic.js b/tools/send-to-caas/bulk-publish-to-caas.classic.js new file mode 100644 index 00000000000..e04f0a9cb4c --- /dev/null +++ b/tools/send-to-caas/bulk-publish-to-caas.classic.js @@ -0,0 +1,263 @@ +/* eslint-disable no-continue */ +import { loadScript, loadStyle } from '../../libs/utils/utils.js'; +import { getImsToken } from '../utils/utils.js'; +import { + loadTingleModalFiles, + showAlert, + showConfirm, +} from './send-to-caas.js'; +import { + getCardMetadata, + getCaasProps, + loadCaasTags, + postDataToCaaS, + getConfig, + setConfig, +} from './send-utils.js'; +import comEnterpriseToCaasTagMap from './comEnterpriseToCaasTagMap.js'; + +const LS_KEY = 'bulk-publish-caas'; +const FIELDS = ['host', 'repo', 'owner', 'excelFile', 'caasEnv', 'urls', 'contentType', 'publishToFloodgate']; +const FIELDS_CB = ['draftOnly', 'usePreview', 'useHtml']; +const DEFAULT_VALUES = { + caasEnv: 'Prod', + contentType: 'caas:content-type/article', + excelFile: '', + host: 'business.adobe.com', + owner: 'adobecom', + repo: 'bacom', + urls: '', + publishToFloodgate: 'default', +}; +const DEFAULT_VALUES_CB = { + draftOnly: false, + usePreview: false, + useHtml: true, +}; + +const fetchExcelJson = async (url) => { + const resp = await fetch(url); + if (resp.ok) { + const json = await resp.json(); + return json.data; + } + return []; +}; + +const checkIms = async () => { + const accessToken = await getImsToken(loadScript); + if (!accessToken) { + const shouldLogIn = await showConfirm( + 'You must be logged in with an Adobe ID in order to publish to CaaS.\nDo you want to log in?', + ); + if (shouldLogIn) { + const { signInContext } = getConfig(); + window.adobeIMS.signIn(signInContext); + } + return false; + } + return accessToken; +}; + +const getPageDom = async (url) => { + try { + const resp = await fetch(url); + if (!resp.ok) return { error: `${resp.status}: ${resp.statusText}` }; + const html = await resp.text(); + const dp = new DOMParser(); + const dom = dp.parseFromString(html, 'text/html'); + return { dom, lastModified: resp.headers.get('last-modified') }; + } catch (err) { + return { error: err.message }; + } +}; + +const updateTagsFromSheetData = (tags, sheetTagsStr) => { + const sheetTags = sheetTagsStr.split(','); + const tagSet = new Set(tags.map((t) => t.id)); + + sheetTags.forEach((sheetTag) => { + if (sheetTag.startsWith('caas:')) { + tagSet.add(sheetTag); + return; + } + const newTag = comEnterpriseToCaasTagMap[sheetTag]; + if (newTag) { + tagSet.add(newTag); + } + }); + + return [...tagSet].map((t) => ({ id: t })); +}; + +const processData = async (data, accessToken) => { + const errorArr = []; + const successArr = []; + let index = 0; + let keepGoing = true; + + const statusModal = showAlert('', { btnText: 'Cancel', onClose: () => { keepGoing = false; } }); + const { + caasEnv, + draftOnly, + host, + owner, + repo, + useHtml, + usePreview, + publishToFloodgate, + } = getConfig(); + + if (!repo) { + showAlert('You must enter a repo when choosing publish content to caas floodgate', { error: true }); + if (statusModal.modal) statusModal.close(); + return; + } + + let domain = `https://${host}`; + + if (usePreview || publishToFloodgate !== 'default') { + // TODO ADD HLX5 SUPPORT + domain = `https://main--${repo}--${owner}.hlx.live`; + } + + for (const page of data) { + if (!keepGoing) break; + + try { + const rawUrl = page.Path || page.path || page.url || page.URL || page.Url || page; + + const { pathname } = new URL(rawUrl); + const pathnameNoHtml = pathname.replace('.html', ''); + const pageUrl = usePreview ? `${domain}${pathnameNoHtml}` : `${domain}${pathname}`; + const prodUrl = `${host}${pathnameNoHtml}${useHtml ? '.html' : ''}`; + + index += 1; + statusModal.setContent(`Publishing ${index} of ${data.length}:
      ${pageUrl}`); + + if (pageUrl === 'stop') break; // debug, stop on empty line + + const { dom, error, lastModified } = await getPageDom(pageUrl); + if (error) { + errorArr.push([pageUrl, error]); + continue; + } + + setConfig({ bulkPublish: true, doc: dom, pageUrl, lastModified }); + const { caasMetadata, errors } = await getCardMetadata({ + prodUrl, + floodgatecolor: publishToFloodgate, + }); + + if (errors.length) { + errorArr.push([pageUrl, errors]); + continue; + } + + const tagField = page['cq:tags'] || page.tags; + if (tagField) { + const updatedTags = updateTagsFromSheetData(caasMetadata.tags, tagField); + caasMetadata.tags = updatedTags; + } + + if (!caasMetadata.tags.length) { + errorArr.push([pageUrl, 'No tags on page']); + continue; + } + + const caasProps = getCaasProps(caasMetadata); + + const response = await postDataToCaaS({ + accessToken, + caasEnv: caasEnv?.toLowerCase(), + caasProps, + draftOnly, + }); + + if (response.success) { + successArr.push([pageUrl, caasMetadata.entityid]); + } else { + errorArr.push([pageUrl, response]); + } + } catch (e) { + // eslint-disable-next-line no-console + console.log(`ERROR: ${e.message}`); + } + } + + if (statusModal.modal) statusModal.close(); + + document.getElementById('errors').value = JSON.stringify(errorArr, null, 2); + document.getElementById('success').value = JSON.stringify(successArr, null, 2); + showAlert(`Successfully published ${successArr.length} pages. \n\n Failed to publish ${errorArr.length} pages.`); +}; + +const bulkPublish = async () => { + const accessToken = await checkIms(); + if (!accessToken) return; + + const { excelFile, urls } = getConfig(); + + if (!(excelFile || urls)) { + await showAlert('Please enter urls or an excel json url.'); + } + + const data = urls + ? urls.split('\n') + : await fetchExcelJson(excelFile); + + await processData(data, accessToken); +}; + +const loadFromLS = () => { + const ls = localStorage.getItem(LS_KEY); + if (!ls) return; + try { + setConfig(JSON.parse(ls)); + const config = getConfig(); + FIELDS.forEach((field) => { + document.getElementById(field).value = config[field] ?? DEFAULT_VALUES[field]; + }); + FIELDS_CB.forEach((field) => { + document.getElementById(field).checked = config[field] ?? DEFAULT_VALUES_CB[field]; + }); + /* c8 ignore next */ + } catch (e) { /* do nothing */ } +}; + +const init = async () => { + await loadTingleModalFiles(loadScript, loadStyle); + await loadCaasTags(); + loadFromLS(); + + window.addEventListener('beforeunload', () => { + FIELDS.forEach((field) => { + setConfig({ [field]: document.getElementById(field).value }); + }); + FIELDS_CB.forEach((field) => { + setConfig({ [field]: document.getElementById(field).checked }); + }); + window.localStorage.setItem(LS_KEY, JSON.stringify(getConfig())); + }); + + const bulkPublishBtn = document.querySelector('#bulkpublish'); + bulkPublishBtn.addEventListener('click', () => { + setConfig({ + host: document.getElementById('host').value, + project: '', + branch: 'main', + caasEnv: document.getElementById('caasEnv').value, + contentType: document.getElementById('contentType').value, + repo: document.getElementById('repo').value, + owner: document.getElementById('owner').value, + urls: document.getElementById('urls').value, + publishToFloodgate: document.getElementById('publishToFloodgate').value, + draftOnly: document.getElementById('draftOnly').checked, + useHtml: document.getElementById('useHtml').checked, + usePreview: document.getElementById('usePreview').checked, + }); + bulkPublish(); + }); +}; + +export default init; diff --git a/tools/send-to-caas/bulk-publish-to-caas.js b/tools/send-to-caas/bulk-publish-to-caas.js index e04f0a9cb4c..4bb33f3a16a 100644 --- a/tools/send-to-caas/bulk-publish-to-caas.js +++ b/tools/send-to-caas/bulk-publish-to-caas.js @@ -16,12 +16,18 @@ import { } from './send-utils.js'; import comEnterpriseToCaasTagMap from './comEnterpriseToCaasTagMap.js'; +const BODY = document.body; +const STATUS_EL = BODY.querySelector('.status'); +const SIGNEDIN_EL = BODY.querySelector('.status-signed-in'); +const SIGNEDOUT_EL = BODY.querySelector('.status-signed-out'); + const LS_KEY = 'bulk-publish-caas'; -const FIELDS = ['host', 'repo', 'owner', 'excelFile', 'caasEnv', 'urls', 'contentType', 'publishToFloodgate']; -const FIELDS_CB = ['draftOnly', 'usePreview', 'useHtml']; +const FIELDS = ['presetSelector', 'host', 'repo', 'owner', 'caasEnv', 'urls', 'contentType', 'publishToFloodgate']; +const FIELDS_CB = ['draftOnly', 'useHtml', 'usePreview']; const DEFAULT_VALUES = { - caasEnv: 'Prod', - contentType: 'caas:content-type/article', + preset: 'default', + caasEnv: 'prod', + contentType: '', excelFile: '', host: 'business.adobe.com', owner: 'adobecom', @@ -32,9 +38,12 @@ const DEFAULT_VALUES = { const DEFAULT_VALUES_CB = { draftOnly: false, usePreview: false, - useHtml: true, + useHtml: false, }; +// Hold the selected preset data +let selectedPreset = {}; + const fetchExcelJson = async (url) => { const resp = await fetch(url); if (resp.ok) { @@ -44,9 +53,9 @@ const fetchExcelJson = async (url) => { return []; }; -const checkIms = async () => { +const checkIms = async (prompt = true) => { const accessToken = await getImsToken(loadScript); - if (!accessToken) { + if (!accessToken && prompt) { const shouldLogIn = await showConfirm( 'You must be logged in with an Adobe ID in order to publish to CaaS.\nDo you want to log in?', ); @@ -59,9 +68,9 @@ const checkIms = async () => { return accessToken; }; -const getPageDom = async (url) => { +const getPageDom = async (url, now) => { try { - const resp = await fetch(url); + const resp = await fetch(`${url}?timestamp=${now.getTime()}`); if (!resp.ok) return { error: `${resp.status}: ${resp.statusText}` }; const html = await resp.text(); const dp = new DOMParser(); @@ -90,11 +99,68 @@ const updateTagsFromSheetData = (tags, sheetTagsStr) => { return [...tagSet].map((t) => ({ id: t })); }; +const showResultsOptions = () => { + STATUS_EL.classList.add('show-options'); +}; + +const resetResultsTables = () => { + STATUS_EL.classList.remove('show-options'); + const successTable = document.querySelector('.success-table'); + const successTBody = successTable.querySelector('tbody'); + successTBody.innerHTML = ''; + successTable.style.display = 'none'; + const errorTable = document.querySelector('.error-table'); + const errorTBody = errorTable.querySelector('tbody'); + errorTBody.innerHTML = ''; + errorTable.style.display = 'none'; +}; + +const showSuccessTable = (successArr) => { + showResultsOptions(); + const env = getConfig().caasEnv === 'prod' ? '' : `-${getConfig().caasEnv}`; + const chimeraEndpoint = `https://14257-chimera${env}.adobeioruntime.net/api/v1/web/chimera-0.0.1/collection?debug=1&featuredCards=`; + const successTable = document.querySelector('.success-table'); + const tableBody = successTable.querySelector('tbody'); + successTable.style.display = 'block'; + let index = 0; + /* eslint-disable no-plusplus */ + successArr.forEach(([pageUrl, response]) => { + tableBody.innerHTML += `
      + + + + + `; + }); + /* eslint-enable no-plusplus */ +}; + +const showErrorTable = (errorArr) => { + showResultsOptions(); + const errorTable = document.querySelector('.error-table'); + const tableBody = errorTable.querySelector('tbody'); + errorTable.style.display = 'block'; + let index = 0; + /* eslint-disable no-plusplus */ + errorArr.forEach(([pageUrl, response]) => { + index += 1; + const message = response.message ? response.message : response; + tableBody.innerHTML += ` + + + + + `; + }); + /* eslint-enable no-plusplus */ +}; + const processData = async (data, accessToken) => { const errorArr = []; const successArr = []; let index = 0; let keepGoing = true; + const now = new Date(); const statusModal = showAlert('', { btnText: 'Cancel', onClose: () => { keepGoing = false; } }); const { @@ -105,19 +171,21 @@ const processData = async (data, accessToken) => { repo, useHtml, usePreview, + previewHost, publishToFloodgate, } = getConfig(); if (!repo) { - showAlert('You must enter a repo when choosing publish content to caas floodgate', { error: true }); + showAlert('You must select a Preset, or use the Advanced option to enter the necessary information.', { error: true }); if (statusModal.modal) statusModal.close(); return; } let domain = `https://${host}`; - if (usePreview || publishToFloodgate !== 'default') { - // TODO ADD HLX5 SUPPORT + if (usePreview) { + domain = `https://${previewHost}`; + } else if (publishToFloodgate !== 'default') { domain = `https://main--${repo}--${owner}.hlx.live`; } @@ -126,18 +194,15 @@ const processData = async (data, accessToken) => { try { const rawUrl = page.Path || page.path || page.url || page.URL || page.Url || page; - const { pathname } = new URL(rawUrl); const pathnameNoHtml = pathname.replace('.html', ''); - const pageUrl = usePreview ? `${domain}${pathnameNoHtml}` : `${domain}${pathname}`; const prodUrl = `${host}${pathnameNoHtml}${useHtml ? '.html' : ''}`; + const pageUrl = `${domain}${pathname}`; index += 1; statusModal.setContent(`Publishing ${index} of ${data.length}:
      ${pageUrl}`); - if (pageUrl === 'stop') break; // debug, stop on empty line - - const { dom, error, lastModified } = await getPageDom(pageUrl); + const { dom, error, lastModified } = await getPageDom(pageUrl, now); if (error) { errorArr.push([pageUrl, error]); continue; @@ -180,15 +245,23 @@ const processData = async (data, accessToken) => { errorArr.push([pageUrl, response]); } } catch (e) { - // eslint-disable-next-line no-console - console.log(`ERROR: ${e.message}`); + errorArr.push(['Error:', e.message]); } } if (statusModal.modal) statusModal.close(); - document.getElementById('errors').value = JSON.stringify(errorArr, null, 2); - document.getElementById('success').value = JSON.stringify(successArr, null, 2); + SIGNEDIN_EL.style.display = 'none'; + SIGNEDOUT_EL.style.display = 'none'; + + resetResultsTables(); + if (successArr.length) { + showSuccessTable(successArr); + } + if (errorArr.length) { + showErrorTable(errorArr); + } + showAlert(`Successfully published ${successArr.length} pages. \n\n Failed to publish ${errorArr.length} pages.`); }; @@ -196,39 +269,316 @@ const bulkPublish = async () => { const accessToken = await checkIms(); if (!accessToken) return; - const { excelFile, urls } = getConfig(); + const { urls } = getConfig(); - if (!(excelFile || urls)) { - await showAlert('Please enter urls or an excel json url.'); + if (!urls) { + await showAlert('Enter a URL or list of URLs, each on a separate line, to be sent to CaaS.', { error: true }); } - const data = urls - ? urls.split('\n') - : await fetchExcelJson(excelFile); + const data = urls ? urls.split('\n') : ''; await processData(data, accessToken); }; const loadFromLS = () => { + BODY.classList = ''; const ls = localStorage.getItem(LS_KEY); - if (!ls) return; + if (!ls || !ls.includes('presetSelector') || !ls.includes('previewHost')) return; try { setConfig(JSON.parse(ls)); const config = getConfig(); FIELDS.forEach((field) => { document.getElementById(field).value = config[field] ?? DEFAULT_VALUES[field]; + if (field === 'presetSelector' && config[field] === 'advanced') { + BODY.classList = 'advanced'; + } else if (field === 'presetSelector' && config[field] !== 'default') { + BODY.classList = 'preset'; + } }); FIELDS_CB.forEach((field) => { document.getElementById(field).checked = config[field] ?? DEFAULT_VALUES_CB[field]; }); + /* c8 ignore next */ } catch (e) { /* do nothing */ } }; +const publishWarning = document.querySelector('.publish-warning'); +const checkCaasEnv = () => { + // eslint-disable-next-line no-undef + if (!caasEnv.value) caasEnv.value = 'prod'; + // eslint-disable-next-line no-undef + if (caasEnv.value === 'prod' && !draftOnly.checked) { + publishWarning.style.height = '30px'; + } else { + publishWarning.style.height = '0'; + } +}; + +// presets options +const presetsJsonPath = 'https://milo.adobe.com/drafts/caas/bppresets.json'; +let presetsData = {}; +const getPresetsData = async () => { + fetchExcelJson(presetsJsonPath).then((presets) => { + const separator = document.querySelector('.separator'); + const parent = separator.parentElement; + presetsData = presets; + presets.forEach((preset) => { + const option = document.createElement('option'); + option.value = preset.repo; + option.text = `${preset.name} (${preset.repo})`; + parent.insertBefore(option, separator); + }); + }); +}; + +const resetAdvancedOptions = () => { + /* eslint-disable no-undef */ + caasEnv.value = 'prod'; + contentType.value = ''; + draftOnly.checked = false; + useHtml.checked = false; + usePreview.checked = false; + publishToFloodgate.value = 'default'; + /* eslint-enable no-undef */ +}; + +const setTheme = () => { + const theme = localStorage.getItem('bp-theme'); + const useDarkTheme = theme === 'dark' + || (theme !== 'light' && window.matchMedia('(prefers-color-scheme: dark)').matches); + + if (useDarkTheme) { + document.querySelector('.bulk-publisher').classList.add('dark'); + document.querySelector('#option-dark').checked = true; + } else { + document.querySelector('#option-light').checked = true; + } +}; + +// eslint-disable-next-line no-undef +presetSelector.addEventListener('change', () => { + // eslint-disable-next-line no-undef + const { value } = presetSelector; + selectedPreset = presetsData.find((item) => item.id === value) || {}; + BODY.classList = ''; + + if (value === 'advanced') { + BODY.classList.add('advanced'); + return; + } + if (value === 'default') { + BODY.classList = ''; + } else { + BODY.classList.add('preset'); + } + + resetAdvancedOptions(); + const ls = localStorage.getItem(LS_KEY); + const config = ls ? JSON.parse(ls) : {}; + config.presetSelector = selectedPreset.id || 'default'; + // eslint-disable-next-line no-undef + config.caasEnv = caasEnv.value; + config.host = selectedPreset.host || ''; + config.owner = selectedPreset.owner || ''; + config.repo = selectedPreset.repo || ''; + config.useHtml = selectedPreset.useHtml === 'true'; + if (selectedPreset.contentType === '' || selectedPreset.contentType?.toLowerCase() === 'auto') { + config.contentType = ''; + } else { + config.contentType = selectedPreset.contentType; + } + config.previewHost = selectedPreset.previewHost || 'www.stage.adobe.com'; + + setConfig(config); + window.localStorage.setItem(LS_KEY, JSON.stringify(getConfig())); + + loadFromLS(); + checkCaasEnv(); +}); + +const clearResultsButton = document.querySelector('.clear-results'); +clearResultsButton.addEventListener('click', () => { + resetResultsTables(); + STATUS_EL.classList.remove('results'); + SIGNEDIN_EL.style.display = 'block'; +}); + +const exportResultsToCSV = () => { + const table = document.querySelector('.success-table tbody'); + let csvContent = 'STATUS,URL,RESPONSE\n'; + + for (const row of table.rows) { + const rowData = []; + for (const cell of row.cells) { + if (cell.cellIndex === 0) continue; // Skip the first column + let cellText = cell.innerText; + if (cellText.includes(',')) { // Wrap text with quotes if it contains commas + cellText = `"${cellText}"`; + } + rowData.push(cellText); + } + csvContent += `${rowData.join(',')}\n`; + } + + const errorsTable = document.querySelector('.error-table tbody'); + for (const row of errorsTable.rows) { + const rowData = []; + for (const cell of row.cells) { + if (cell.cellIndex === 0) continue; // Skip the first column + let cellText = cell.innerText; + if (cellText.includes(',')) { // Wrap text with quotes if it contains commas + cellText = `"${cellText}"`; + } + rowData.push(cellText); + } + csvContent += `${rowData.join(',')}\n`; + } + + // eslint-disable-next-line no-alert + const fileName = prompt('Enter filename (without extension):', 'CaaSBulkPublisher_Output'); + if (!fileName) return; // If user cancels, do nothing + + // Create a Blob with the CSV content and download it + const blob = new Blob([csvContent], { type: 'text/csv' }); + const a = document.createElement('a'); + a.href = URL.createObjectURL(blob); + a.download = `${fileName}.csv`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); // Cleanup +}; + +const exportResultsButton = document.querySelector('.export-results'); +exportResultsButton.addEventListener('click', () => { + exportResultsToCSV(); +}); + +// eslint-disable-next-line no-undef +caasEnv.addEventListener('change', () => { + checkCaasEnv(); +}); + +// eslint-disable-next-line no-undef +draftOnly.addEventListener('change', () => { + checkCaasEnv(); +}); + +const checkUserStatus = async () => { + const accessToken = await checkIms(false); + if (accessToken) { + document.querySelector('.status-checking').style.display = 'none'; + SIGNEDIN_EL.style.display = 'block'; + } else { + document.querySelector('.status-checking').style.display = 'none'; + SIGNEDOUT_EL.style.display = 'block'; + } + return true; +}; + +const feecbackButton = document.querySelector('.feedback'); +feecbackButton.addEventListener('click', () => { + showAlert(`

      Feedback and Comments

      +

      Feedback for this tool is always welcome.

      +

      For reporting issues or sharing comments, please use the #javelin-friends channel on Slack

      +

      The Javelin Team

      `); +}); + +const helpButtons = document.querySelectorAll('.help'); +helpButtons.forEach((btn) => { + btn.addEventListener('click', (e) => { + e.preventDefault(); + const el = e.target.classList[1]; + switch (el) { + case 'host': + showAlert(`

      Host

      Enter the host of the site you are publishing content to.

      +

      +   milo.adobe.com
      +   blog.adobe.com
      +   business.adobe.com.

      `); + break; + + case 'repo': + showAlert(`

      Repo

      +

      The Repo is the name of the repository where the content will be published.

      +

      For example:

      +

      https://main--{repo}--{owner}.hlx.live`); + break; + + case 'owner': + showAlert(`

      Repo Owner

      +

      The Repo Owner is the owner of the repository where the content will be published. For example:

      +

      https://main--{repo}--{owner}.hlx.live`); + break; + + case 'content-type-fallback': + showAlert(`

      ContentType Fallback

      +

      This is the content-type tag that will be applied to all cards that do not have + a specific content-type tag included in their metadata.

      `); + break; + + case 'caas-env': + showAlert(`

      CaaS Enviroment

      +

      This is the CaaS environment where the content will be published.

      `); + break; + + case 'floodgate': + showAlert(`

      FloodGate

      +

      Use this option to select the FloodGate color for the content.

      `); + break; + + case 'publish-to-draft': + showAlert(`

      Publish to CaaS DRAFT only

      +

      When this is option checked, the content will be sent to the CaaS DRAFT container only.

      +

      With this option unchecked, the content is sent to both, the CaaS LIVE and DRAFT containers.

      `); + break; + + case 'use-html': + showAlert(`

      Add HTML to Links

      +

      When this option is checked, the bulkpublisher will add the .html extension to the CTA links.

      `); + break; + + case 'use-preview': + showAlert(`

      Use Preview Content +

      When this option is checked, the tool will publish CaaS Metadata content from the stage environments:

      +

      For example:
      + - https://www.stage.adobe.com
      + - https://business.stage.adobe.com
      + - https://blog.stage.adobe.com
      + - https://milo.stage.adobe.com
      + - https://news.stage.adobe.com +

      +

      This can be useful for testing before publishing content to production.

      `); + break; + + default: + showAlert(`

      Help

      Help for "${el}" is on its way! Stay tuned.

      `); + break; + } + }); +}); + +const themeOptions = document.querySelectorAll('.theme-options'); +themeOptions.forEach((btn) => { + btn.addEventListener('click', (e) => { + if (e.target.value === 'dark') { + document.querySelector('.bulk-publisher').classList.add('dark'); + localStorage.setItem('bp-theme', 'dark'); + } else { + document.querySelector('.bulk-publisher').classList.remove('dark'); + localStorage.setItem('bp-theme', 'light'); + } + }); +}); + const init = async () => { + setTheme(); + await getPresetsData(); await loadTingleModalFiles(loadScript, loadStyle); await loadCaasTags(); loadFromLS(); + checkCaasEnv(); + checkUserStatus(); window.addEventListener('beforeunload', () => { FIELDS.forEach((field) => { @@ -246,7 +596,7 @@ const init = async () => { host: document.getElementById('host').value, project: '', branch: 'main', - caasEnv: document.getElementById('caasEnv').value, + caasEnv: document.getElementById('caasEnv').value || 'prod', contentType: document.getElementById('contentType').value, repo: document.getElementById('repo').value, owner: document.getElementById('owner').value, diff --git a/tools/send-to-caas/bulkpublish.beta.css b/tools/send-to-caas/bulkpublish.beta.css deleted file mode 100644 index 0f1255422e2..00000000000 --- a/tools/send-to-caas/bulkpublish.beta.css +++ /dev/null @@ -1,592 +0,0 @@ - -body { - font-family: ui-sans-serif, system-ui, "Adobe Clean", adobe-clean, sans-serif; - padding: 0; - margin: 0; -} - -/* *** Page header *** */ - -.page-title h1 { - font-size: 2em; - margin-bottom: 16px; - position: relative; -} - -.feedback { - font-family: ui-sans-serif, system-ui, "Adobe Clean", adobe-clean, sans-serif; - display: inline-block; - position: absolute; - right: 0; - bottom: 0; - font-size: 16px; - font-weight: 200; - cursor: pointer; - background: transparent; - border: solid 1px #ccc; - color: #fff; - text-shadow: 1px 1px 0 #000; - padding: 6px 12px; - border-radius: 13px; -} - -.feedback:hover { - background: #6f9b00; -} - -/* *** Bulk publisher *** */ - -.bulk-publisher { - font-weight: 300; - margin: 32px; - margin: 0; -} - -.main { - display: flex; - height: calc(100% - 126px); -} - -.bulk-publisher .title { - grid-template-columns: 1fr; -} - -/* *** Options panel *** */ - -.options-panel { - min-width: 350px; - background: linear-gradient(45deg, #aaa, #eee); - border-right: solid 1px #aaa; - overflow-y: auto; - height: 100%; -} - -dd.content { - background-color: transparent; -} - -dd.content.is-expanded { - margin-top: 0; -} - -dd.content h4 { - margin: 5px 20px 10px; - font-size: 20px; - font-weight: 500; -} - -dd.content .field { - padding: 0 20px; - margin: 12px 0 -} - -dd.content .field label { - margin-bottom: 4px; - font-size: 15px; - color: #202020; -} - -.bulk-publisher dd.content { - color: #000; -} - -dd.content .field select, -dd.content .field input[type="text"] { - border: none; - background: #eaeaea; - color: #202020; - width: 100%; - font-weight: 200; -} - -body:not(.preset) dd.content .field input { - border: solid 1px #bababa; -} - -.content.is-expanded .field.checkbox { - flex-direction: row; - justify-content: flex-start; -} - -.content.is-expanded input[type=checkbox] { - align-self: center; -} - -select#presetSelector { - border: solid 2px #6f9b00; - border: solid 2px #c00; - border-radius: 8px; - padding: 10px 4px; - margin-bottom: 10px; -} - -body.preset select#presetSelector, -body.advanced select#presetSelector { - border: solid 1px #6f9b00; -} - -.preset-options, -.advanced-options { - height: 0; - margin: 0; - padding: 0; - overflow: hidden; - transition: height .5s; - border: solid 1px #666; - border-radius: 10px; - border-width: 0; -} - -.preset-options { - height: 110px; - transition: height .5s; - border: solid 1px #aaa; - border-radius: 10px; - margin: 20px; - padding: 10px 0; -} - -dd.content .preset-options .field:not(:first-of-type) { - display: none; -} - -body.preset dd.content .preset-options .field { - display: flex; - align-items: baseline; - margin: 0; -} - -body.advanced dd.content .preset-options .field { - display: block; -} - -body.preset { - position: relative; -} - -h5.basic-settings { - display: none; - margin: 15px 20px; - font-size: 16px; - font-weight: 400; -} - -body.advanced h5.basic-settings { - display: block; - margin-bottom: -5px; -} - -body.preset .preset-options { - height: 196px; -} - -body.preset dd.content .preset-options .field label { - width: 90px; -} - -body.preset .preset-options .help { - display: none; -} - -body.advanced .preset-options, -body.advanced .advanced-options { - height: 368px; - border-width: 1px; - border: solid 1px #aaa; - border-radius: 10px; - margin: 20px; - background: linear-gradient(45deg, #eee6, transparent); -} - -body.advanced .advanced-options { - padding: 10px 0; -} - -body.advanced .bulk-publisher.dark .preset-options, -body.advanced .bulk-publisher.dark .advanced-options { - background: linear-gradient(45deg, #20202066, transparent); - border-color: #666; -} - -body.preset dd.content .preset-options .field input[type="text"] { - background: transparent; - color: #666; -} - -.page-title { - margin: 0; - background: linear-gradient(360deg, #6f9b01, #fff); - padding: 43px 30px 2px; - border-bottom: solid 1px #ddd; - color: #202020; -} - -.page-title i { - font-style: normal; - font-weight: 400; -} - -.page-title span.beta { - font-size: 27px; - font-variant: small-caps; - font-weight: 200; - color: #fff; - text-shadow: 1px 1px 1px #000; -} - -div#caas-draft-cb { - margin-top: 15px; -} - -/* *** Content panel *** */ - -.content-panel { - padding: 0 50px; - width: 100%; - background: #f6f6f6; - position: relative; -} - -.content-panel h2 { - margin-bottom: 0; - font-size: 22px; - font-weight: 500; -} - -.content-panel b { - font-weight: 500; -} - -.urls, -textarea#urls, -textarea#errors, -textarea#success { - width: 100%; -} - -#urls { - width: 100%; - height: 520px; - height: 250px; - margin-top: 6px; - font-family: system-ui; - font-size: 16px; - font-weight: 200; - border-radius: 16px; - padding: 15px 20px; -} - -textarea#errors, -textarea#success { - border: none; - background: #eee; -} - -textarea#success { - border: solid green; -} - -textarea#errors{ - border: solid red; -} - -.button-area { - text-align: center; -} - -.publish-warning { - margin-bottom: 0; - height: 0; - overflow: hidden; - transition: height .3s; -} - -span.warning-icon { - color: orange; - font-size: 24px; -} - -#bulkpublish { - margin: 20px 0; - font-size: 16px; - background: #6e9b00; - border: solid 1px lightgreen; - padding: 8px 30px; - border-radius: 12px; - color: white; - cursor: pointer; -} - -.config-msg { - color: #aaa; - display: inline-block; -} - -body.preset .config-msg, -body.advanced .config-msg { - display: none; -} - -span.help { - padding: 1px; - margin-left: 2px; - border-radius: 10px; - cursor: pointer; - background: transparent; - color: #999; - letter-spacing: 1px; - font-size: 12px; - vertical-align: super; -} - -span.help:hover { - background: #999; - color: #fff; -} - -.success, -.errors { - display: none; -} - -.success label, -.errors label { - font-size: 18px; - margin: 16px 0 0; - display: block; -} - -.errors label { - color: red; - display: flex; - justify-content: space-between; -} - -.success label { - color: green; -} - -.errors label span { - font-size: 22px; - border: solid 1px #000; - width: 30px; - text-align: center; - border-radius: 50%; - color: #fff; - top: 15px; - position: relative; - background: darkred; - right: -12px; -} - -.hidden { - display: none; -} - -p.status-signed-in i, -p.status-signed-out i { - font-size: 24px; - padding: 0 5px; - font-weight: 600; - vertical-align: -2px; - margin-right: 8px; - border: solid 1px #aaa; - border-radius: 15px; -} - -p.status-signed-in i { - color: #6e9b00; -} - -p.status-signed-out i { - font-style: normal; - color: red; -} - -.status { - position: relative; -} - -.status button.clear-results { - position: absolute; - right: 20px; - background: transparent; - border: solid 1px #bababa; - padding: 6px 16px; - border-radius: 6px; -} - -.status button.clear-results:hover { - background: linear-gradient(0deg, #ddd, transparent); -} - -table.error-table, -table.success-table { - width: 100%; - border-top: solid 1px red; - border-collapse: collapse; - margin-top: 20px; -} - -table.success-table { - border-top: solid 1px green; -} - -table.error-table th, -table.success-table th { - font-weight: 500; - text-align: left; - padding: 6px 0; -} - -table.error-table td:not(.error), -table.success-table td:not(.ok) { - font-size: 15px; - padding: 6px 0; - font-weight: 200; -} - -tr th:first-child, -tr td:first-child { - padding-left: 6px !important; -} - -table.success-table td.entityid { - font-family: monospace; - font-size: 14px; - cursor: pointer; -} - -table.success-table tr th:first-child, -table.error-table tr th:first-child { - min-width: 80px !important; -} - -td.ok, -td.error { - padding: 0 6px; - font-weight: bold; -} - -td.ok { - color: green; -} - -td.error { - color: #e00; -} - -thead tr { - background: #f0f0f0; -} - -tbody tr:hover { - background: #f0f0ff; -} - -/* *** themes style overrides *** */ - -.theme-options { - position: absolute; - right: 30px; - top: 10px; - font-size: 15px; -} - -.bulk-publisher.dark .divider { - border-color: #161616; -} - -.bulk-publisher.dark .options-panel { - background: linear-gradient(45deg, #000, #404040); -} - -.bulk-publisher.dark dd.content { - color: #EFEFEF; -} - -.bulk-publisher.dark .content-panel { - background: #444; - color: #fafafa; -} - -.bulk-publisher.dark dd.content .field label { - color: #aaa; -} - -.bulk-publisher.dark dd.content .field select, -.bulk-publisher.dark dd.content .field input { - border: none; - background: #3C3C3C; - color: #EFEFEF; -} - -.bulk-publisher.dark .content-panel textarea#urls { - background: #505050; - color: white; - border-color: #999; -} - -.bulk-publisher.dark .content-panel textarea#urls::placeholder { - color: #b0b0b0; -} - -.bulk-publisher.dark .content-panel thead tr { - background: #333; - color: white; -} - -.bulk-publisher.dark .content-panel tbody tr:hover { - background: #505050; -} - -.bulk-publisher.dark .content-panel a, -.bulk-publisher.dark .content-panel table.error-table a{ - color: #ccc; -} - -.bulk-publisher.dark .content-panel table td:not(.error) { - color: #ccc; -} - -.bulk-publisher.dark .content-panel table.success-table td.ok { - color: #99d600; -} - -.bulk-publisher.dark .status button.clear-results { - color: #bababa -} - -.status button.clear-results:hover { - background: linear-gradient(0deg, #333, transparent); -} - -/* *** Modal *** */ -.modal { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: #000c; - justify-content: center; - display: none; -} - -.modal-content { - background: white; - width: 80%; - height: 80%; - max-width: 960px; - align-self: center; - position: relative; -} - -.modal-content .close { - position: absolute; - right: 0; - top: -12px; - font-size: 40px; - cursor: pointer; - color: #666; -} diff --git a/tools/send-to-caas/bulkpublish.classic.css b/tools/send-to-caas/bulkpublish.classic.css new file mode 100644 index 00000000000..b390d32079c --- /dev/null +++ b/tools/send-to-caas/bulkpublish.classic.css @@ -0,0 +1,55 @@ +#bulkpublish { + margin: 20px; +} + +.bulk-publisher { + margin: 32px; +} + +.bulk-publisher .title { + grid-template-columns: 1fr; +} + +dd.content .field { + padding: 0 20px; + margin: 20px 0 +} + +.results { + display: flex; +} + +.results > div { + padding: 20px; +} + +.main { + display: flex; +} + +.options-panel { + min-width: 400px; +} + +.urls { + width: 700px; +} + +#urls { + width: 100%; + height: 520px; + margin-top: 6px; +} + +.urls-label { + height: 36px; + background: #6F9B00; + color: #FFF; + font-weight: 700; + display: flex; + align-items: center; +} + +.urls-label label { + margin-left: 12px; +} diff --git a/tools/send-to-caas/bulkpublish.css b/tools/send-to-caas/bulkpublish.css index b390d32079c..72c77a28870 100644 --- a/tools/send-to-caas/bulkpublish.css +++ b/tools/send-to-caas/bulkpublish.css @@ -1,55 +1,594 @@ -#bulkpublish { - margin: 20px; +/* *** General Styles *** */ +body { + font-family: ui-sans-serif, system-ui, "Adobe Clean", adobe-clean, sans-serif; + padding: 0; + margin: 0; +} + +/* *** Page header *** */ +.page-title h1 { + font-size: 2em; + margin-bottom: 16px; + position: relative; } +.feedback { + font-family: ui-sans-serif, system-ui, "Adobe Clean", adobe-clean, sans-serif; + display: inline-block; + position: absolute; + right: 0; + bottom: 0; + font-size: 16px; + font-weight: 200; + cursor: pointer; + background: transparent; + border: solid 1px #ccc; + color: #fff; + text-shadow: 1px 1px 0 #000; + padding: 6px 12px; + border-radius: 13px; +} + +.feedback:hover { + background: #6f9b00; +} + +/* *** Bulk publisher *** */ .bulk-publisher { + font-weight: 300; margin: 32px; + margin: 0; +} + +.main { + display: flex; + min-height: calc(100% - 126px); } .bulk-publisher .title { grid-template-columns: 1fr; } +/* *** Options panel *** */ +.options-panel { + min-width: 350px; + background: linear-gradient(45deg, #aaa, #eee); + border-right: solid 1px #aaa; + overflow-y: auto; + min-height: 100%; +} + +dd.content { + background-color: transparent; +} + +dd.content.is-expanded { + margin-top: 0; +} + +dd.content h3 { + margin: 5px 20px 10px; + font-size: 20px; + font-weight: 500; +} + dd.content .field { padding: 0 20px; - margin: 20px 0 + margin: 12px 0 } -.results { - display: flex; +dd.content .field label { + margin-bottom: 4px; + font-size: 15px; + color: #202020; } -.results > div { - padding: 20px; +.bulk-publisher dd.content { + color: #000; } -.main { +dd.content .field select, +dd.content .field input[type="text"] { + border: none; + background: #eaeaea; + color: #202020; + width: 100%; + font-weight: 200; +} + +body:not(.preset) dd.content .field input { + border: solid 1px #bababa; +} + +.content.is-expanded .field.checkbox { + flex-direction: row; + justify-content: flex-start; +} + +.content.is-expanded input[type=checkbox] { + align-self: center; +} + +select#presetSelector { + border: solid 2px #6f9b00; + border: solid 2px #c00; + border-radius: 8px; + padding: 10px 4px; + margin-bottom: 10px; +} + +body.preset select#presetSelector, +body.advanced select#presetSelector { + border: solid 1px #6f9b00; +} + +.preset-options, +.advanced-options { + height: 0; + margin: 0; + padding: 0; + overflow: hidden; + transition: height .5s; + border: solid 1px #666; + border-radius: 10px; + border-width: 0; +} + +.preset-options { + height: 110px; + transition: height .5s; + border: solid 1px #aaa; + border-radius: 10px; + margin: 20px; + padding: 10px 0; +} + +dd.content .preset-options .field:not(:first-of-type) { + display: none; +} + +body.preset dd.content .preset-options .field { display: flex; + align-items: baseline; + margin: 0; } -.options-panel { - min-width: 400px; +body.advanced dd.content .preset-options .field { + display: block; +} + +body.preset { + position: relative; +} + +h4.basic-settings { + display: none; + margin: 15px 20px; + font-size: 16px; + font-weight: 400; +} + +body.advanced h4.basic-settings { + display: block; + margin-bottom: -5px; +} + +body.preset .preset-options { + height: 196px; +} + +body.preset dd.content .preset-options .field label { + width: 90px; +} + +body.preset .preset-options .help { + display: none; } -.urls { - width: 700px; +body.advanced .preset-options, +body.advanced .advanced-options { + height: 368px; + border-width: 1px; + border: solid 1px #aaa; + border-radius: 10px; + margin: 20px; + background: linear-gradient(45deg, #eee6, transparent); +} + +body.advanced .advanced-options { + padding: 10px 0; +} + +body.advanced .bulk-publisher.dark .preset-options, +body.advanced .bulk-publisher.dark .advanced-options { + background: linear-gradient(45deg, #20202066, transparent); + border-color: #666; +} + +body.preset dd.content .preset-options .field input[type="text"] { + background: transparent; + color: #666; +} + +.page-title { + margin: 0; + background: linear-gradient(360deg, #6f9b01, #fff); + padding: 43px 30px 2px; + border-bottom: solid 1px #ddd; + color: #202020; +} + +.page-title i { + font-style: normal; + font-weight: 400; +} + +.page-title span.v2 { + font-size: 27px; + letter-spacing: -3px; + font-weight: 200; + color: #fff; + text-shadow: 1px 1px 1px #000; +} + +div#caas-draft-cb { + margin-top: 15px; +} + +/* *** Content panel *** */ +.content-panel { + padding: 0 50px; + width: 100%; + background: #f6f6f6; + position: relative; +} + +.content-panel h2 { + margin-bottom: 0; + font-size: 22px; + font-weight: 500; +} + +.content-panel p { + margin-top: 6px; +} + +.content-panel b { + font-weight: 500; +} + +.urls, +textarea#urls, +textarea#errors, +textarea#success { + width: 100%; } #urls { width: 100%; height: 520px; + height: 250px; margin-top: 6px; + font-family: system-ui; + font-size: 16px; + font-weight: 200; + border-radius: 16px; + padding: 15px 20px; +} + +textarea#errors, +textarea#success { + border: none; + background: #eee; } -.urls-label { - height: 36px; - background: #6F9B00; - color: #FFF; - font-weight: 700; +textarea#success { + border: solid green; +} + +textarea#errors{ + border: solid red; +} + +.button-area { + text-align: center; +} + +.publish-warning { + margin-bottom: 0; + height: 0; + overflow: hidden; + transition: height .3s; +} + +span.warning-icon { + color: orange; + font-size: 24px; +} + +#bulkpublish { + margin: 20px 0; + font-size: 16px; + background: #6e9b00; + border: solid 1px lightgreen; + padding: 8px 30px; + border-radius: 12px; + color: white; + cursor: pointer; +} + +.config-msg { + color: #aaa; + display: inline-block; +} + +body.preset .config-msg, +body.advanced .config-msg { + display: none; +} + +span.help { + padding: 1px; + margin-left: 2px; + border-radius: 10px; + cursor: pointer; + background: transparent; + color: #999; + letter-spacing: 1px; + font-size: 12px; + vertical-align: super; +} + +span.help:hover { + background: #999; + color: #fff; +} + +.hidden { + display: none; +} + +.results-options { + display: none; +} + +.status.show-options .results-options { + display: block; +} + +.status-signed-in i, +.status-signed-out i { + font-size: 24px; + padding: 0 5px; + font-weight: 600; + vertical-align: -2px; + margin-right: 8px; + border: solid 1px #aaa; + border-radius: 15px; +} + +.status-signed-in i { + color: #6e9b00; +} + +.status-signed-out i { + font-style: normal; + color: red; +} + +.status { + position: relative; + border: solid 1px transparent; + border-radius: 10px; + margin-top: 20px; + padding: 4px 20px 25px; +} + +.status.show-options { + border-color: #ccc; + box-shadow: 0 8px 30px #cacaca; +} + +.results-header { display: flex; - align-items: center; + align-items: flex-end; + justify-content: space-between; } -.urls-label label { - margin-left: 12px; +button.clear-results, +button.export-results { + right: 20px; + background: transparent; + border: solid 1px #bababa; + padding: 6px 12px; + border-radius: 6px; + cursor: pointer; +} + +button.export-results { + padding: 4px 12px; + margin-right: 4px; +} + +button.export-results span { + font-size: smaller; +} + +button.clear-results:hover, +button.export-results:hover { + background: linear-gradient(180deg, #ddd, transparent); +} + +table.error-table, +table.success-table { + width: 100%; + border-top: solid 1px red; + border-collapse: collapse; + margin-top: 20px; +} + +table.success-table { + border-top: solid 1px green; +} + +table.error-table th, +table.success-table th { + font-weight: 500; + text-align: left; + padding: 6px 0; + font-size: smaller; + text-transform: uppercase; +} + +table.error-table td:not(.error), +table.success-table td:not(.ok) { + font-size: 15px; + padding: 6px 0; + font-weight: 200; +} + +tr th:first-child, +tr td:first-child { + padding-left: 6px !important; +} + +table.success-table td.entityid { + font-family: monospace; + font-size: 14px; + cursor: pointer; +} + +table.success-table tr th:first-child, +table.error-table tr th:first-child { + min-width: 80px !important; +} + +td.ok, +td.error { + padding: 0 6px; + font-weight: bold; +} + +td.ok { + color: green; +} + +td.error { + color: #e00; +} + +thead tr { + background: #f0f0f0; +} + +tbody tr:hover { + background: #f0f0ff; +} + +/* *** themes style overrides *** */ +.theme-options { + position: absolute; + right: 30px; + top: 10px; + font-size: 13px; +} + +.theme-options input { + vertical-align: -2px; + margin-right: 3px; +} + +a.classic { + color: #000; + background: #eee; + border: solid #aaa 1px; + padding: 3px 6px; + text-decoration: none; + border-radius: 4px; + margin-left: 16px; + font-size: 12px; +} + +.bulk-publisher.dark a.classic { + color: #ccc; + background: #333; + border: solid #666 1px; +} + +.bulk-publisher.dark .divider { + border-color: #161616; +} + +.bulk-publisher.dark .options-panel { + background: linear-gradient(45deg, #000, #404040); +} + +.bulk-publisher.dark dd.content { + color: #EFEFEF; +} + +.bulk-publisher.dark .content-panel { + background: #444; + color: #fafafa; +} + +.bulk-publisher.dark dd.content .field label { + color: #aaa; +} + +.bulk-publisher.dark dd.content .field select, +.bulk-publisher.dark dd.content .field input { + border: none; + background: #3C3C3C; + color: #EFEFEF; +} + +.bulk-publisher.dark .content-panel textarea#urls { + background: #505050; + color: white; + border-color: #999; +} + +.bulk-publisher.dark .content-panel textarea#urls::placeholder { + color: #b0b0b0; +} + +.bulk-publisher.dark .content-panel thead tr { + background: #404040; + color: white; +} + +.bulk-publisher.dark .content-panel tbody tr:hover { + background: #505050; +} + +.bulk-publisher.dark .content-panel a, +.bulk-publisher.dark .content-panel table.error-table a{ + color: #ccc; +} + +.bulk-publisher.dark .content-panel table td:not(.error) { + color: #ccc; +} + +.bulk-publisher.dark .content-panel table.success-table td.ok { + color: #99d600; +} + +.bulk-publisher.dark .status button.clear-results, +.bulk-publisher.dark .status button.export-results { + border-color: #757575; + color: #bababa +} + +.bulk-publisher.dark .status button.clear-results:hover, +.bulk-publisher.dark .status button.export-results:hover { + background: linear-gradient(0deg, #333, transparent); +} + +.bulk-publisher.dark table.error-table { + border-top: solid 1px #d00; +} +.bulk-publisher.dark td.error { + color: #d00; } diff --git a/tools/send-to-caas/bulkpublisher.beta.html b/tools/send-to-caas/bulkpublisher.beta.html index de2b6206de1..2617e0a2633 100644 --- a/tools/send-to-caas/bulkpublisher.beta.html +++ b/tools/send-to-caas/bulkpublisher.beta.html @@ -1,223 +1,9 @@ + - - - - - - -
      -

      - CaaS BulkPublisher Tool - beta - -

      -
      - -
      -
      -
      -
      - Settings -
      -
      - -
      -

      Consumer Presets

      -
      - -
      - -
      Basic Settings
      - -
      - - -
      -
      - - -
      -
      - - -
      -
      - -
      -

      Advanced Options

      - -
      - - -
      - -
      - - -
      - -
      - - -
      - -
      - - -
      -
      - - -
      -
      - - -
      - -
      -
      -
      - -
      - -
      Theme: - Light - Dark -
      - -
      -

      URLs

      -

      Note: This tool is in BETA stage. Please report any issues in the #javelin-friends channel on Slack.

      -

      Enter a URL or list of URLs, each on a separate line, to be sent to CaaS.

      - - -

      - Warning: You are publishing content to CaaS Production/LIVE environment. - Use the Advanced Options to change the settings. -

      -
      - -   * Please Select a Preset or Custom Settings -
      - -
      - -
      - -

      Status

      -

      Checking...

      - - - -
      ${++index}OK${pageUrl}${response}
      ${index}Failed${pageUrl}${message}
      ${++index}OK${pageUrl}${response}
      ${index}Failed${pageUrl}${message}
      - - - - - - - - - - - - - - - - - - - -
      - - -
      - -
      - - -
      -

    - -
    -
    -
    - - - + + + + diff --git a/tools/send-to-caas/bulkpublisher.classic.html b/tools/send-to-caas/bulkpublisher.classic.html new file mode 100644 index 00000000000..07f402a2313 --- /dev/null +++ b/tools/send-to-caas/bulkpublisher.classic.html @@ -0,0 +1,158 @@ + + + + + + + + +
    +
    +
    +
    + CaaS Bulk Publisher +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + +
    +
    +
    +

    âš ī¸ WARNING: This version will be decommissioned soon and will no longer be accessible. +
    Please use the new version: CaaS Bulk Publisher +

    +
    + +
    + +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + + + diff --git a/tools/send-to-caas/bulkpublisher.html b/tools/send-to-caas/bulkpublisher.html index 5b5a862ec6e..c2e8ea87377 100644 --- a/tools/send-to-caas/bulkpublisher.html +++ b/tools/send-to-caas/bulkpublisher.html @@ -1,135 +1,216 @@ - + + CaaS BulkPublisher Tool + +
    +

    + CaaS BulkPublisher Tool + v2 + +

    +
    +
    - CaaS Bulk Publisher + Settings
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    - + +
    +

    Consumer Presets

    +
    + +
    + +

    Basic Settings

    + +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +

    Advanced Options

    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    +
    + + +
    +
    + + +
    + +
    -
    -
    - + +
    + +
    Theme: + Light + Dark + Classic Version +
    + +
    +

    URLs

    +

    Enter a URL or list of URLs, each on a separate line, to be sent to CaaS.

    + + +

    + Warning: You are publishing content to CaaS Production/LIVE environment. + Use the Advanced Options to change the settings. +

    +
    + +   * Please Select a Preset or Custom Settings +
    + +
    + +
    +
    +

    Status

    +
    + + +
    +
    +

    Checking...

    + + + + + + + + + + + + + + + + + + + + + + +
    - -
    -
    -
    - - -
    -
    - - -
    -
    +