diff --git a/.github/workflows/create-tag.yml b/.github/workflows/create-tag.yml index a8de8d73..b8063b25 100644 --- a/.github/workflows/create-tag.yml +++ b/.github/workflows/create-tag.yml @@ -16,7 +16,7 @@ jobs: with: persist-credentials: false - name: Build files using ${{ matrix.node-version }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - name: Release new version @@ -46,4 +46,4 @@ jobs: steps: - name: Meep run: | - echo "Nothing to do" \ No newline at end of file + echo "Nothing to do" diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index f659f41a..21f7b3e5 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -24,6 +24,10 @@ jobs: extensions: simplexml - name: Check out source files uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 18 + cache: "npm" - name: Install composer deps run: composer install --no-dev --prefer-dist --no-progress --no-suggest - name: Install npm deps diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml index 771c6f80..2619b724 100644 --- a/.github/workflows/mirror.yml +++ b/.github/workflows/mirror.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: persist-credentials: false fetch-depth: 0 @@ -33,22 +33,22 @@ jobs: GIT_COMMITTER_EMAIL: ${{ secrets.BOT_EMAIL }} run: | git remote add mirror "https://${{ secrets.BOT_TOKEN }}@github.com/Codeinwp/themeisle-sdk" - + # Reset to a single commit with no history git checkout master git reset --soft $(git rev-list --max-parents=0 HEAD) # Go to the first commit, keeping changes git commit --amend --author="pirate-bot <${{ secrets.BOT_EMAIL }}>" -m "new changes [skip ci]" # Create a single commit with explicit author - - + + # Push to the mirror repo, overwriting history git push mirror master --force # Push only the master branch with new history - + # Fetch tags from the source repository git fetch --tags "https://${{ secrets.BOT_TOKEN }}@github.com/Codeinwp/themeisle-sdk-main" # Source repo - + # Get a list of tags in the mirror repository mirror_tags=$(git ls-remote --tags mirror | awk '{print $2}' | sed 's#refs/tags/##') - + # Loop through each tag in the source repository for tag in $(git tag); do # Check if the tag exists in the mirror repository by searching mirror_tags variable @@ -67,18 +67,18 @@ jobs: # Fetch all releases from the source repository releases=$(curl -s -H "Authorization: token ${{ secrets.BOT_TOKEN }}" \ "https://api.github.com/repos/Codeinwp/themeisle-sdk-main/releases") - + # Loop through each release and create it in the target repository for row in $(echo "${releases}" | jq -r '.[] | @base64'); do _jq() { echo ${row} | base64 --decode | jq -r ${1} } - + tag_name=$(_jq '.tag_name') release_name=$(_jq '.name') draft=$(_jq '.draft') prerelease=$(_jq '.prerelease') - + # Create the release in the target repository curl -s -X POST -H "Authorization: token ${{ secrets.BOT_TOKEN }}" \ -H "Accept: application/vnd.github.v3+json" \ @@ -90,4 +90,4 @@ jobs: \"draft\": ${draft}, \"prerelease\": ${prerelease} }" - done \ No newline at end of file + done diff --git a/.github/workflows/qa-zip.yaml b/.github/workflows/qa-zip.yaml index 7d117039..b1648373 100644 --- a/.github/workflows/qa-zip.yaml +++ b/.github/workflows/qa-zip.yaml @@ -2,7 +2,7 @@ name: Build and publish the ZIP build file on: pull_request: - types: [ opened, synchronize, ready_for_review ] + types: [opened, synchronize, ready_for_review] branches-ignore: - "update_dependencies" jobs: @@ -20,7 +20,11 @@ jobs: php-version: "7.4" extensions: simplexml - name: Check out source files - uses: actions/checkout@v2 + uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 18 + cache: "npm" - name: Install composer deps run: composer install --no-dev --prefer-dist --no-progress --no-suggest - name: Install NPM deps diff --git a/.github/workflows/smoke-tests.yml b/.github/workflows/smoke-tests.yml new file mode 100644 index 00000000..2667dd5c --- /dev/null +++ b/.github/workflows/smoke-tests.yml @@ -0,0 +1,50 @@ +name: Smoke Tests + +on: + schedule: + - cron: "0 0 * * 1" # every Monday at midnight + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true +jobs: + e2e: + name: Smoke Tests + strategy: + fail-fast: false + runs-on: ubuntu-22.04 + steps: + - name: Setup PHP version + uses: shivammathur/setup-php@v2 + with: + php-version: "7.4" + extensions: simplexml + - name: Check out source files + uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 18 + cache: "npm" + - name: Install composer deps + run: composer install --no-dev --prefer-dist --no-progress --no-suggest + - name: Install npm deps + run: | + npm ci + npm install -g playwright-cli + npx playwright install --with-deps chromium + - name: Install environment + run: | + npm run env:start + - name: Run the tests + run: | + npm run test:e2e:playwright:formbricks + env: + GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }} + - name: Archive test results + if: failure() + uses: actions/upload-artifact@v4 + with: + name: e2e-playwright-results + path: artifacts + retention-days: 1 + if-no-files-found: ignore diff --git a/CHANGELOG.md b/CHANGELOG.md index df2bc528..65e4c7dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +##### [Version 3.3.46](https://github.com/Codeinwp/themeisle-sdk-main/compare/v3.3.45...v3.3.46) (2025-05-16) + +- Add masteriyo recommandation +- Add bf helpers +- update formbricks + +##### [Version 3.3.45](https://github.com/Codeinwp/themeisle-sdk-main/compare/v3.3.44...v3.3.45) (2025-04-28) + +- feat: add review_link param to about_us filter + ##### [Version 3.3.44](https://github.com/Codeinwp/themeisle-sdk-main/compare/v3.3.43...v3.3.44) (2025-02-18) - Fix variable mismatch in the install category function. diff --git a/assets/css/banner.css b/assets/css/banner.css deleted file mode 100644 index 20477478..00000000 --- a/assets/css/banner.css +++ /dev/null @@ -1,54 +0,0 @@ -.tsdk-banner-cta { - position: relative; - display: inline-block; -} - -.tsdk-banner-urgency-text { - position: absolute; - top: 6%; - left: 1%; - color: white; - padding: 5px; - font-size: 16px; - z-index: 10; - text-transform: uppercase; - font-weight: 700; -} - -.tsdk-banner-img { - width: 100%; - height: auto; -} - -@media (max-width: 1100px) { - .tsdk-banner-urgency-text { - font-size: 10px; - top: 0; - left: 1%; - } -} - -@media (max-width: 950px) { - .tsdk-banner-urgency-text { - font-size: 10px; - left: 1%; - } -} - -@media (max-width: 500px) { - .tsdk-banner-urgency-text { - font-size: 6px; - top: -10%; - left: 1%; - } -} - -@media (max-width: 420px) { - .tsdk-banner-urgency-text { - left: 0%; - } -} - -.notice:not(#tsdk_banner) { - display: none; -} \ No newline at end of file diff --git a/assets/js/build/about/about.asset.php b/assets/js/build/about/about.asset.php index 2479fd8d..b6b09f05 100644 --- a/assets/js/build/about/about.asset.php +++ b/assets/js/build/about/about.asset.php @@ -1 +1 @@ - array('react', 'wp-components', 'wp-element'), 'version' => '7d782affa8469fa8f48d'); + array('react', 'wp-components', 'wp-element'), 'version' => '1cdb2c3f91722eefa98a'); diff --git a/assets/js/build/about/about.css b/assets/js/build/about/about.css index 7340054f..deb84536 100644 --- a/assets/js/build/about/about.css +++ b/assets/js/build/about/about.css @@ -1 +1 @@ -#wpcontent{padding-left:0 !important}.ti-about{--border: 1px solid #ccc;--link-color: var(--wp-admin-theme-color);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:normal;display:grid;gap:30px}.ti-about .container{margin:0 auto;max-width:960px;padding:0 15px}.ti-about p{font-size:14px;line-height:1.6}.ti-about button{font-weight:600}.ti-about .spin{animation:spin 1s infinite linear}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.ti-about .head{background:#fff;border-bottom:var(--border);padding:18px 0}.ti-about .head .container{padding:0 15px;display:flex;flex-wrap:wrap;align-items:center}.ti-about .head img{max-height:55px}.ti-about .head p{margin-left:10px}.ti-about .head p.review-link{margin-left:auto}.ti-about .head a{font-style:italic;font-weight:bold}.ti-about .nav{border-bottom:var(--border);display:flex;flex-wrap:wrap;font-size:16px;margin:0;font-weight:600;-moz-column-gap:20px;column-gap:20px}.ti-about .nav a{border-bottom:4px solid rgba(0,0,0,0);color:#868686;padding:20px 10px;text-decoration:none;margin-bottom:-1px;box-sizing:border-box}.ti-about .nav a:hover{color:#313233}.ti-about .nav li{display:flex;margin:0}.ti-about .nav li.active a{border-color:var(--link-color);color:#313233}.ti-about .story-card .footer,.ti-about .story-card .body{display:grid;grid-template-columns:var(--grid, 1fr);align-items:center}.ti-about .story-card{border:var(--border);border-radius:0 0 10px 10px}.ti-about .story-card .body{background:#fff;padding:35px 35px 10px 35px}.ti-about .story-card .body h2{font-size:30px;margin:0 0 30px;color:#1f1d1d}.ti-about .story-card .body p{color:#1e1e1e}.ti-about .story-card .body figure{order:0;margin:0}.ti-about .story-card .body figcaption{margin:10px 0;color:#797979;font-size:12px}.ti-about .story-card .body img{border-radius:8px;max-width:100%}.ti-about .story-card .footer{border-top:var(--border);padding:30px 40px}.ti-about .story-card .footer h2{margin:0 0 20px;text-align:center;font-size:21px}.ti-about .story-card form{display:flex;align-items:center}.ti-about .story-card form .dashicons-yes-alt{color:#609952}.ti-about .story-card input{height:36px;flex-grow:1;border:var(--border);border-radius:2px;font-size:12px;margin-right:15px}.ti-about .product-cards{display:grid;gap:30px}.ti-about .product-card{background:#fff;border:var(--border);display:flex;flex-direction:column}.ti-about .product-card *{box-sizing:border-box}.ti-about .product-card h2{font-size:21px;margin:0}.ti-about .product-card p{margin:0;color:#6c6c6c}.ti-about .product-card .header{padding:20px 15px 0;display:flex;width:100%;align-items:center}.ti-about .product-card .body{padding:20px 15px;width:100%}.ti-about .product-card img{max-width:50px;margin-right:15px;border-radius:6px}.ti-about .product-card .footer{border-top:var(--border);display:flex;align-items:center;padding:15px;width:100%;margin-top:auto;align-self:flex-end;justify-content:space-between}.ti-about .product-card .footer p{margin:8px 0;font-weight:600;font-size:13px;color:#313233}.ti-about .product-card .footer .not-installed{color:#7e7e7e}.ti-about .product-card .footer .active{color:#609952}.ti-about .product-card button,.ti-about .product-card a,.ti-about .product-card .spin{margin-left:auto;text-decoration:none}.ti-about .product-page{margin:0 auto;padding:0;width:100%;max-width:960px;border:1px solid #ccc;border-radius:8px;background-color:#fff}.ti-about .product-page .hero{display:flex;flex-direction:column;align-items:center;padding:64px;border-bottom:1px solid #ccc}.ti-about .product-page .hero h1{font-size:30px;line-height:42px;max-width:500px;text-align:center}.ti-about .product-page .hero p{font-size:14px;line-height:24px;max-width:500px;text-align:center}.ti-about .product-page .hero .logo{width:64px;margin-bottom:24px}.ti-about .product-page .hero .label{font-size:10px;line-height:12px;color:#ed6f57;background-color:rgba(237,111,87,.1803921569);padding:8px 16px;border-radius:4px}.ti-about .product-page .col-3-highlights{display:flex;flex-direction:column;justify-content:space-evenly;padding:24px 0;border-bottom:1px solid #ccc;align-items:center;text-align:center}.ti-about .product-page .col-3-highlights .col{max-width:360px}.ti-about .product-page .col-3-highlights .col h3{font-size:21px;line-height:32px;margin-bottom:8px}.ti-about .product-page .col-3-highlights .col p{font-size:14px;line-height:24px}.ti-about .product-page .col-2-highlights{display:flex;flex-direction:column;justify-content:space-evenly;align-items:center;padding:24px 0;border-bottom:1px solid #ccc}.ti-about .product-page .col-2-highlights .col{width:90%}.ti-about .product-page .col-2-highlights .col img{max-width:450px;width:100%}.ti-about .product-page .col-2-highlights .col h2{font-size:24px;line-height:35px;margin-bottom:8px}.ti-about .product-page .col-2-highlights .col p{font-size:14px;line-height:24px}.ti-about .product-page .button-row{display:flex;gap:12px;margin-top:48px}.ti-about .otter-blocks .testimonial-nav{display:flex;gap:8px}.ti-about .otter-blocks .testimonial-nav .testimonial-button{width:10px;height:10px;background-color:#d9d9d9;margin:0;padding:0;border-radius:50%}.ti-about .otter-blocks .testimonial-nav .testimonial-button.active{background-color:#ed6f57}.ti-about .otter-blocks .testimonial-container{width:100%;max-width:450px;display:flex;overflow-x:scroll;scroll-behavior:smooth;margin:0;padding:0}.ti-about .otter-blocks .testimonial-container::-webkit-scrollbar{display:none}.ti-about .otter-blocks .testimonial-container .testimonial{width:100%;flex:1 0 100%;display:flex;flex-wrap:wrap;justify-content:left;gap:14px;align-items:center}.ti-about .otter-blocks .testimonial-container .testimonial p{width:100%;font-size:14px;line-height:24px}.ti-about .otter-blocks .testimonial-container .testimonial h3{font-size:16px;line-height:20px;font-weight:700;color:#1c1c1c}.ti-about .otter-blocks .testimonial-container .testimonial img{width:36px;height:36px;border-radius:50%}.ti-about .otter-blocks .otter-button.is-primary{background-color:#ed6f57}.ti-about .otter-blocks .otter-button.is-secondary{color:#ed6f57;box-shadow:inset 0 0 0 1px #ed6f57}.ti-about .otter-blocks .otter-button.is-loading{background-color:#6c6c6c;color:#fff}@media (min-width: 660px){.ti-about .product-cards{grid-template-columns:1fr 1fr}.ti-about .product-page .col-3-highlights,.ti-about .product-page .col-2-highlights{flex-direction:row;padding:64px 0}.ti-about .product-page .col-3-highlights{text-align:left}.ti-about .product-page .col-3-highlights .col{max-width:200px}.ti-about .product-page .col-2-highlights .col{width:45%}}@media (min-width: 992px){.ti-about .story-card .footer,.ti-about .story-card .body{gap:60px}.ti-about .story-card{--grid: 1.1fr 1fr}.ti-about .story-card .footer h2{margin:0;text-align:left}.ti-about .product-cards{grid-template-columns:repeat(3, minmax(0, 1fr))}} +#wpcontent{padding-left:0 !important}.notice:not(.themeisle-sale){display:none}.ti-about{--border: 1px solid #ccc;--link-color: var(--wp-admin-theme-color);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:normal;display:grid;gap:30px}.ti-about .container{margin:0 auto;max-width:960px;padding:0 15px}.ti-about p{font-size:14px;line-height:1.6}.ti-about button{font-weight:600}.ti-about .spin{animation:spin 1s infinite linear}.ti-about #tsdk_banner:has(.themeisle-sale){max-width:990px;margin:0 auto;width:100%}.ti-about #tsdk_banner:has(.themeisle-sale) .themeisle-sale{margin:0 15px}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.ti-about .head{background:#fff;border-bottom:var(--border);padding:18px 0}.ti-about .head .container{padding:0 15px;display:flex;flex-wrap:wrap;align-items:center}.ti-about .head img{max-height:55px}.ti-about .head p{margin-left:10px}.ti-about .head p.review-link{margin-left:auto}.ti-about .head a{font-style:italic;font-weight:bold}.ti-about .nav{border-bottom:var(--border);display:flex;flex-wrap:wrap;font-size:16px;margin:0;font-weight:600;-moz-column-gap:20px;column-gap:20px}.ti-about .nav a{border-bottom:4px solid rgba(0,0,0,0);color:#868686;padding:20px 10px;text-decoration:none;margin-bottom:-1px;box-sizing:border-box}.ti-about .nav a:hover{color:#313233}.ti-about .nav li{display:flex;margin:0}.ti-about .nav li.active a{border-color:var(--link-color);color:#313233}.ti-about .story-card .footer,.ti-about .story-card .body{display:grid;grid-template-columns:var(--grid, 1fr);align-items:center}.ti-about .story-card{border:var(--border);border-radius:0 0 10px 10px}.ti-about .story-card .body{background:#fff;padding:35px 35px 10px 35px}.ti-about .story-card .body h2{font-size:30px;margin:0 0 30px;color:#1f1d1d}.ti-about .story-card .body p{color:#1e1e1e}.ti-about .story-card .body figure{order:0;margin:0}.ti-about .story-card .body figcaption{margin:10px 0;color:#797979;font-size:12px}.ti-about .story-card .body img{border-radius:8px;max-width:100%}.ti-about .story-card .footer{border-top:var(--border);padding:30px 40px}.ti-about .story-card .footer h2{margin:0 0 20px;text-align:center;font-size:21px}.ti-about .story-card form{display:flex;align-items:center}.ti-about .story-card form .dashicons-yes-alt{color:#609952}.ti-about .story-card input{height:36px;flex-grow:1;border:var(--border);border-radius:2px;font-size:12px;margin-right:15px}.ti-about .product-cards{display:grid;gap:30px}.ti-about .product-card{background:#fff;border:var(--border);display:flex;flex-direction:column}.ti-about .product-card *{box-sizing:border-box}.ti-about .product-card h2{font-size:21px;margin:0}.ti-about .product-card p{margin:0;color:#6c6c6c}.ti-about .product-card .header{padding:20px 15px 0;display:flex;width:100%;align-items:center}.ti-about .product-card .body{padding:20px 15px;width:100%}.ti-about .product-card img{max-width:50px;margin-right:15px;border-radius:6px}.ti-about .product-card .footer{border-top:var(--border);display:flex;align-items:center;padding:15px;width:100%;margin-top:auto;align-self:flex-end;justify-content:space-between}.ti-about .product-card .footer p{margin:8px 0;font-weight:600;font-size:13px;color:#313233}.ti-about .product-card .footer .not-installed{color:#7e7e7e}.ti-about .product-card .footer .active{color:#609952}.ti-about .product-card button,.ti-about .product-card a,.ti-about .product-card .spin{margin-left:auto;text-decoration:none}.ti-about .product-page{margin:0 auto;padding:0;width:100%;max-width:960px;border:1px solid #ccc;border-radius:8px;background-color:#fff}.ti-about .product-page .hero{display:flex;flex-direction:column;align-items:center;padding:64px;border-bottom:1px solid #ccc}.ti-about .product-page .hero h1{font-size:30px;line-height:42px;max-width:500px;text-align:center}.ti-about .product-page .hero p{font-size:14px;line-height:24px;max-width:500px;text-align:center}.ti-about .product-page .hero .logo{width:64px;margin-bottom:24px}.ti-about .product-page .hero .label{font-size:10px;line-height:12px;color:#ed6f57;background-color:rgba(237,111,87,.1803921569);padding:8px 16px;border-radius:4px}.ti-about .product-page .col-3-highlights{display:flex;flex-direction:column;justify-content:space-evenly;padding:24px 0;border-bottom:1px solid #ccc;align-items:center;text-align:center}.ti-about .product-page .col-3-highlights .col{max-width:360px}.ti-about .product-page .col-3-highlights .col h3{font-size:21px;line-height:32px;margin-bottom:8px}.ti-about .product-page .col-3-highlights .col p{font-size:14px;line-height:24px}.ti-about .product-page .col-2-highlights{display:flex;flex-direction:column;justify-content:space-evenly;align-items:center;padding:24px 0;border-bottom:1px solid #ccc}.ti-about .product-page .col-2-highlights .col{width:90%}.ti-about .product-page .col-2-highlights .col img{max-width:450px;width:100%}.ti-about .product-page .col-2-highlights .col h2{font-size:24px;line-height:35px;margin-bottom:8px}.ti-about .product-page .col-2-highlights .col p{font-size:14px;line-height:24px}.ti-about .product-page .button-row{display:flex;gap:12px;margin-top:48px}.ti-about .otter-blocks .testimonial-nav{display:flex;gap:8px}.ti-about .otter-blocks .testimonial-nav .testimonial-button{width:10px;height:10px;background-color:#d9d9d9;margin:0;padding:0;border-radius:50%}.ti-about .otter-blocks .testimonial-nav .testimonial-button.active{background-color:#ed6f57}.ti-about .otter-blocks .testimonial-container{width:100%;max-width:450px;display:flex;overflow-x:scroll;scroll-behavior:smooth;margin:0;padding:0}.ti-about .otter-blocks .testimonial-container::-webkit-scrollbar{display:none}.ti-about .otter-blocks .testimonial-container .testimonial{width:100%;flex:1 0 100%;display:flex;flex-wrap:wrap;justify-content:left;gap:14px;align-items:center}.ti-about .otter-blocks .testimonial-container .testimonial p{width:100%;font-size:14px;line-height:24px}.ti-about .otter-blocks .testimonial-container .testimonial h3{font-size:16px;line-height:20px;font-weight:700;color:#1c1c1c}.ti-about .otter-blocks .testimonial-container .testimonial img{width:36px;height:36px;border-radius:50%}.ti-about .otter-blocks .otter-button.is-primary{background-color:#ed6f57}.ti-about .otter-blocks .otter-button.is-secondary{color:#ed6f57;box-shadow:inset 0 0 0 1px #ed6f57}.ti-about .otter-blocks .otter-button.is-loading{background-color:#6c6c6c;color:#fff}@media (min-width: 660px){.ti-about .product-cards{grid-template-columns:1fr 1fr}.ti-about .product-page .col-3-highlights,.ti-about .product-page .col-2-highlights{flex-direction:row;padding:64px 0}.ti-about .product-page .col-3-highlights{text-align:left}.ti-about .product-page .col-3-highlights .col{max-width:200px}.ti-about .product-page .col-2-highlights .col{width:45%}}@media (min-width: 992px){.ti-about .story-card .footer,.ti-about .story-card .body{gap:60px}.ti-about .story-card{--grid: 1.1fr 1fr}.ti-about .story-card .footer h2{margin:0;text-align:left}.ti-about .product-cards{grid-template-columns:repeat(3, minmax(0, 1fr))}} diff --git a/assets/js/build/about/about.js b/assets/js/build/about/about.js index cfe9c6b2..17cab3fb 100644 --- a/assets/js/build/about/about.js +++ b/assets/js/build/about/about.js @@ -1 +1 @@ -(()=>{"use strict";const e=window.React,t=window.wp.element;function a({pages:t=[],selected:a=""}){const{currentProduct:n,logoUrl:l,strings:s,links:c}=window.tiSDKAboutData,i=(e="")=>e===a?"active":"",r=`https://wordpress.org/support/${["neve","hestia"].indexOf(n.slug)>-1?"theme":"plugin"}/${n.slug?.replaceAll("_","-")}/reviews/#new-post`;return(0,e.createElement)("div",null,(0,e.createElement)("div",{className:"head"},(0,e.createElement)("div",{className:"container"},(0,e.createElement)("img",{src:l,alt:n.name}),(0,e.createElement)("p",null,"by ",(0,e.createElement)("a",{href:"https://themeisle.com"},"Themeisle")),(0,e.createElement)("p",{className:"review-link"},"Enjoying ",n.name,"? ",(0,e.createElement)("a",{href:r,target:"_blank"},"Give us a rating!")))),(c.length>0||t.length>0)&&(0,e.createElement)("div",{className:"container"},(0,e.createElement)("ul",{className:"nav"},(0,e.createElement)("li",{className:i()},(0,e.createElement)("a",{href:window.location},s.aboutUs)),t.map(((t,a)=>(0,e.createElement)("li",{className:i(t.hash),key:a},(0,e.createElement)("a",{href:t.hash},t.name)))),c.map(((t,a)=>(0,e.createElement)("li",{key:a},(0,e.createElement)("a",{href:t.url},t.text)))))))}const n=window.wp.components;function l(){const{strings:a,teamImage:l,homeUrl:s,pageSlug:c}=window.tiSDKAboutData,{heroHeader:i,heroTextFirst:r,heroTextSecond:o,teamImageCaption:m,newsHeading:d,emailPlaceholder:u,signMeUp:E}=a,[p,h]=(0,t.useState)(""),[g,v]=(0,t.useState)(!1),[N,b]=(0,t.useState)(!1);return(0,e.createElement)("div",{className:"container"},(0,e.createElement)("div",{className:"story-card"},(0,e.createElement)("div",{className:"body"},(0,e.createElement)("div",null,(0,e.createElement)("h2",null,i),(0,e.createElement)("p",null,r),(0,e.createElement)("p",null,o)),(0,e.createElement)("figure",null,(0,e.createElement)("img",{src:l,alt:m}),(0,e.createElement)("figcaption",null,m))),(0,e.createElement)("div",{className:"footer"},(0,e.createElement)("h2",null,d),(0,e.createElement)("form",{onSubmit:e=>{e.preventDefault(),v(!0),fetch("https://api.themeisle.com/tracking/subscribe",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, */*;q=0.1","Cache-Control":"no-cache"},body:JSON.stringify({slug:"about-us",site:s,from:c,email:p})}).then((e=>e.json())).then((e=>{v(!1),"success"===e.code&&b(!0)}))?.catch((e=>{v(!1)}))}},(0,e.createElement)("input",{disabled:g||N,type:"email",value:p,onChange:e=>{h(e.target.value)},placeholder:u}),!g&&!N&&(0,e.createElement)(n.Button,{isPrimary:!0,type:"submit"},E),g&&(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),N&&(0,e.createElement)("span",{className:"dashicons dashicons-yes-alt"})))))}const s=(e,t=!1)=>new Promise((a=>{wp.updates.ajax(!0===t?"install-theme":"install-plugin",{slug:e,success:e=>{a({success:!0,data:e})},error:e=>{a({success:!1,code:e.errorCode})}})}));function c({product:a,slug:l}){const{icon:c,name:i,description:r,status:o,premiumUrl:m,activationLink:d}=a,{strings:u,canInstallPlugins:E,canActivatePlugins:p}=window.tiSDKAboutData,{installNow:h,installed:g,notInstalled:v,active:N,activate:b,learnMore:w}=u,f=!!m,[y,k]=(0,t.useState)(o),[S,T]=(0,t.useState)(!1),D=async()=>{T(!0),await s(l,"neve"===l).then((e=>{e.success&&k("installed")})),T(!1)},x=async()=>{T(!0),window.location.href=d},_=()=>"not-installed"===y&&f?(0,e.createElement)(n.Button,{isLink:!0,icon:"external",href:m,target:"_blank"},w):"not-installed"!==y||f?"installed"===y?(0,e.createElement)(n.Button,{isSecondary:!0,onClick:x,disabled:S||!p},b):null:(0,e.createElement)(n.Button,{isPrimary:!0,onClick:D,disabled:S||!E},h),C=!E&&"not-installed"===y||!p&&"installed"===y?(0,e.createElement)(n.Tooltip,{text:`Ask your admin to enable ${i} on your site`,position:"top center"},_()):_();return(0,e.createElement)("div",{className:"product-card"},(0,e.createElement)("div",{className:"header"},c&&(0,e.createElement)("img",{src:c,alt:i}),(0,e.createElement)("h2",null,i)),(0,e.createElement)("div",{className:"body"},(0,e.createElement)("p",{dangerouslySetInnerHTML:{__html:r}})),(0,e.createElement)("div",{className:"footer"},(0,e.createElement)("p",null,"Status:"," ",(0,e.createElement)("span",{className:y},"installed"===y&&g,"not-installed"===y&&v,"active"===y&&N)),"active"!==y&&!S&&C,S&&(0,e.createElement)("span",{className:"dashicons dashicons-update spin"})))}function i(){const{products:t}=window.tiSDKAboutData;return(0,e.createElement)("div",{className:"container"},(0,e.createElement)("div",{className:"product-cards"},Object.keys(t).map(((a,n)=>(0,e.createElement)(c,{key:a,slug:a,product:t[a]})))))}const r={"otter-page":function({page:a={}}){const{products:l,canInstallPlugins:c,canActivatePlugins:i}=window.tiSDKAboutData,{strings:r,plugin:o}=a,m=a&&a.product?a.product:"",d=m&&l[m]&&l[m].icon?l[m].icon:null,[u,E]=(0,t.useState)(r.testimonials.users[0]),[p,h]=(0,t.useState)(o.status),[g,v]=(0,t.useState)(!1),N="In Progress",b=async()=>{v(!0),await s(m,!1).then((e=>{e.success&&(h("installed"),w())}))},w=async()=>{v(!0),window.location.href=o.activationLink},f=(0,e.createElement)(n.Button,{variant:"primary",disabled:g||("not-installed"===p?!c:!i),className:"otter-button"+(g?" is-loading":""),onClick:"not-installed"===p?b:w},g?(0,e.createElement)("span",null,(0,e.createElement)("span",{className:"dashicons dashicons-update spin"})," ",N):r.buttons.install_otter_free),y=(0,e.createElement)(n.Button,{variant:"primary",disabled:g||("not-installed"===p?!c:!i),className:"otter-button"+(g?" is-loading":""),onClick:"not-installed"===p?b:w},g?(0,e.createElement)("span",null,(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),N):r.buttons.install_now),k=!c&&"not-installed"===p||!i&&"installed"===p||!1,S=t=>k?(0,e.createElement)(n.Tooltip,{text:"Ask your admin to enable Otter on your site",position:"top center"},t):t;return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"hero"},d&&(0,e.createElement)("img",{className:"logo",src:d,alt:a.name||""}),(0,e.createElement)("span",{className:"label"},"Neve + Otter = New Possibilities 🤝"),(0,e.createElement)("h1",null,r.heading),(0,e.createElement)("p",null,r.text),("not-installed"===p||"installed"===p)&&S(f)),(0,e.createElement)("div",{className:"col-3-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.advancedTitle),(0,e.createElement)("p",null,r.features.advancedDesc)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.fastTitle),(0,e.createElement)("p",null,r.features.fastDesc)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.mobileTitle),(0,e.createElement)("p",null,r.features.mobileDesc))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s1Image,alt:r.details.s1Title})),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s1Title),(0,e.createElement)("p",null,r.details.s1Text))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s2Title),(0,e.createElement)("p",null,r.details.s2Text)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s2Image,alt:r.details.s1Title}))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s3Image,alt:r.details.s1Title})),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s3Title),(0,e.createElement)("p",null,r.details.s3Text))),(0,e.createElement)("div",{className:"col-2-highlights",style:{backgroundColor:"#F7F7F7",borderBottom:"none",borderBottomRightRadius:"8px",borderBottomLeftRadius:"8px"}},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.testimonials.heading),(0,e.createElement)("div",{className:"button-row"},("not-installed"===p||"installed"===p)&&S(y),(0,e.createElement)("a",{className:"components-button otter-button is-secondary",href:r.buttons.learn_more_link,target:"_blank",rel:"external noreferrer noopener"},r.buttons.learn_more))),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("div",{className:"testimonials"},(0,e.createElement)("ul",{id:"testimonial-container",className:"testimonial-container"},r.testimonials.users.map(((t,a)=>(0,e.createElement)("li",{className:"testimonial",id:"ts_"+a,key:"ts_"+a},(0,e.createElement)("p",null,'"',t.text,'"'),(0,e.createElement)("img",{src:t.avatar,alt:t.name}),(0,e.createElement)("h3",null,t.name))))),(0,e.createElement)("div",{className:"testimonial-nav"},r.testimonials.users.map(((t,a)=>(0,e.createElement)(n.Button,{className:"testimonial-button"+(t.name===u.name?" active":""),key:"button_"+a,onClick:()=>(e=>{const t=r.testimonials.users[e];document.getElementById("ts_"+e).scrollIntoView({behavior:"smooth"}),E(t)})(a)}))))))))}};function o(t){const a=r[t.id];return(0,e.createElement)(a,{page:t.page})}function m({page:t={}}){return(0,e.createElement)("div",{className:"product-page"+(t&&t.product?" "+t.product:"")},(0,e.createElement)(o,{id:t.id,page:t}))}const d=()=>{let e=window.location.hash;return"string"!=typeof window.location.hash?null:e};function u(){const{productPages:n}=window.tiSDKAboutData,s=n?Object.keys(n).map((e=>{const t=n[e];return t.id=e,t})):[],[c,r]=(0,t.useState)(d()),o=()=>{const e=d();null!==e&&r(e)};(0,t.useEffect)((()=>(o(),window.addEventListener("hashchange",o),()=>{window.removeEventListener("hashchange",o)})),[]);const u=s.filter((e=>e.hash===c));return u.length>0?(0,e.createElement)("div",{className:"ti-about"},(0,e.createElement)(a,{pages:s,selected:c}),(0,e.createElement)(m,{page:u[0]})):(0,e.createElement)("div",{className:"ti-about"},(0,e.createElement)(a,{pages:s}),(0,e.createElement)(l,null),(0,e.createElement)(i,null))}document.addEventListener("DOMContentLoaded",(()=>{const a=document.querySelector("#ti-sdk-about");a&&(0,t.render)((0,e.createElement)(u,null),a)}))})(); \ No newline at end of file +(()=>{"use strict";const e=window.React,t=window.wp.element;function a({pages:t=[],selected:a=""}){const{currentProduct:n,logoUrl:l,strings:s,links:c,showReviewLink:i}=window.tiSDKAboutData,r=(e="")=>e===a?"active":"",o=`https://wordpress.org/support/${["neve","hestia"].indexOf(n.slug)>-1?"theme":"plugin"}/${n.slug?.replaceAll("_","-")}/reviews/#new-post`;return(0,e.createElement)("div",null,(0,e.createElement)("div",{className:"head"},(0,e.createElement)("div",{className:"container"},(0,e.createElement)("img",{src:l,alt:n.name}),(0,e.createElement)("p",null,"by ",(0,e.createElement)("a",{href:"https://themeisle.com"},"Themeisle")),Boolean(i)&&(0,e.createElement)("p",{className:"review-link"},"Enjoying ",n.name,"? ",(0,e.createElement)("a",{href:o,target:"_blank"},"Give us a rating!")))),(c.length>0||t.length>0)&&(0,e.createElement)("div",{className:"container"},(0,e.createElement)("ul",{className:"nav"},(0,e.createElement)("li",{className:r()},(0,e.createElement)("a",{href:window.location},s.aboutUs)),t.map(((t,a)=>(0,e.createElement)("li",{className:r(t.hash),key:a},(0,e.createElement)("a",{href:t.hash},t.name)))),c.map(((t,a)=>(0,e.createElement)("li",{key:a},(0,e.createElement)("a",{href:t.url},t.text)))))))}const n=window.wp.components;function l(){const{strings:a,teamImage:l,homeUrl:s,pageSlug:c}=window.tiSDKAboutData,{heroHeader:i,heroTextFirst:r,heroTextSecond:o,teamImageCaption:m,newsHeading:d,emailPlaceholder:u,signMeUp:E}=a,[p,h]=(0,t.useState)(""),[g,v]=(0,t.useState)(!1),[N,w]=(0,t.useState)(!1);return(0,e.createElement)("div",{className:"container"},(0,e.createElement)("div",{className:"story-card"},(0,e.createElement)("div",{className:"body"},(0,e.createElement)("div",null,(0,e.createElement)("h2",null,i),(0,e.createElement)("p",null,r),(0,e.createElement)("p",null,o)),(0,e.createElement)("figure",null,(0,e.createElement)("img",{src:l,alt:m}),(0,e.createElement)("figcaption",null,m))),(0,e.createElement)("div",{className:"footer"},(0,e.createElement)("h2",null,d),(0,e.createElement)("form",{onSubmit:e=>{e.preventDefault(),v(!0),fetch("https://api.themeisle.com/tracking/subscribe",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, */*;q=0.1","Cache-Control":"no-cache"},body:JSON.stringify({slug:"about-us",site:s,from:c,email:p})}).then((e=>e.json())).then((e=>{v(!1),"success"===e.code&&w(!0)}))?.catch((e=>{v(!1)}))}},(0,e.createElement)("input",{disabled:g||N,type:"email",value:p,onChange:e=>{h(e.target.value)},placeholder:u}),!g&&!N&&(0,e.createElement)(n.Button,{isPrimary:!0,type:"submit"},E),g&&(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),N&&(0,e.createElement)("span",{className:"dashicons dashicons-yes-alt"})))))}const s=(e,t=!1)=>new Promise((a=>{wp.updates.ajax(!0===t?"install-theme":"install-plugin",{slug:e,success:e=>{a({success:!0,data:e})},error:e=>{a({success:!1,code:e.errorCode})}})}));function c({product:a,slug:l}){const{icon:c,name:i,description:r,status:o,premiumUrl:m,activationLink:d}=a,{strings:u,canInstallPlugins:E,canActivatePlugins:p}=window.tiSDKAboutData,{installNow:h,installed:g,notInstalled:v,active:N,activate:w,learnMore:b}=u,f=!!m,[y,k]=(0,t.useState)(o),[S,_]=(0,t.useState)(!1),T=async()=>{_(!0),await s(l,"neve"===l).then((e=>{e.success&&k("installed")})),_(!1)},D=async()=>{_(!0),window.location.href=d},x=()=>"not-installed"===y&&f?(0,e.createElement)(n.Button,{isLink:!0,icon:"external",href:m,target:"_blank"},b):"not-installed"!==y||f?"installed"===y?(0,e.createElement)(n.Button,{isSecondary:!0,onClick:D,disabled:S||!p},w):null:(0,e.createElement)(n.Button,{isPrimary:!0,onClick:T,disabled:S||!E},h),C=!E&&"not-installed"===y||!p&&"installed"===y?(0,e.createElement)(n.Tooltip,{text:`Ask your admin to enable ${i} on your site`,position:"top center"},x()):x();return(0,e.createElement)("div",{className:"product-card"},(0,e.createElement)("div",{className:"header"},c&&(0,e.createElement)("img",{src:c,alt:i}),(0,e.createElement)("h2",null,i)),(0,e.createElement)("div",{className:"body"},(0,e.createElement)("p",{dangerouslySetInnerHTML:{__html:r}})),(0,e.createElement)("div",{className:"footer"},(0,e.createElement)("p",null,"Status:"," ",(0,e.createElement)("span",{className:y},"installed"===y&&g,"not-installed"===y&&v,"active"===y&&N)),"active"!==y&&!S&&C,S&&(0,e.createElement)("span",{className:"dashicons dashicons-update spin"})))}function i(){const{products:t}=window.tiSDKAboutData;return(0,e.createElement)("div",{className:"container"},(0,e.createElement)("div",{className:"product-cards"},Object.keys(t).map(((a,n)=>(0,e.createElement)(c,{key:a,slug:a,product:t[a]})))))}const r={"otter-page":function({page:a={}}){const{products:l,canInstallPlugins:c,canActivatePlugins:i}=window.tiSDKAboutData,{strings:r,plugin:o}=a,m=a&&a.product?a.product:"",d=m&&l[m]&&l[m].icon?l[m].icon:null,[u,E]=(0,t.useState)(r.testimonials.users[0]),[p,h]=(0,t.useState)(o.status),[g,v]=(0,t.useState)(!1),N="In Progress",w=async()=>{v(!0),await s(m,!1).then((e=>{e.success&&(h("installed"),b())}))},b=async()=>{v(!0),window.location.href=o.activationLink},f=(0,e.createElement)(n.Button,{variant:"primary",disabled:g||("not-installed"===p?!c:!i),className:"otter-button"+(g?" is-loading":""),onClick:"not-installed"===p?w:b},g?(0,e.createElement)("span",null,(0,e.createElement)("span",{className:"dashicons dashicons-update spin"})," ",N):r.buttons.install_otter_free),y=(0,e.createElement)(n.Button,{variant:"primary",disabled:g||("not-installed"===p?!c:!i),className:"otter-button"+(g?" is-loading":""),onClick:"not-installed"===p?w:b},g?(0,e.createElement)("span",null,(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),N):r.buttons.install_now),k=!c&&"not-installed"===p||!i&&"installed"===p||!1,S=t=>k?(0,e.createElement)(n.Tooltip,{text:"Ask your admin to enable Otter on your site",position:"top center"},t):t;return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"hero"},d&&(0,e.createElement)("img",{className:"logo",src:d,alt:a.name||""}),(0,e.createElement)("span",{className:"label"},"Neve + Otter = New Possibilities 🤝"),(0,e.createElement)("h1",null,r.heading),(0,e.createElement)("p",null,r.text),("not-installed"===p||"installed"===p)&&S(f)),(0,e.createElement)("div",{className:"col-3-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.advancedTitle),(0,e.createElement)("p",null,r.features.advancedDesc)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.fastTitle),(0,e.createElement)("p",null,r.features.fastDesc)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.mobileTitle),(0,e.createElement)("p",null,r.features.mobileDesc))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s1Image,alt:r.details.s1Title})),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s1Title),(0,e.createElement)("p",null,r.details.s1Text))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s2Title),(0,e.createElement)("p",null,r.details.s2Text)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s2Image,alt:r.details.s1Title}))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s3Image,alt:r.details.s1Title})),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s3Title),(0,e.createElement)("p",null,r.details.s3Text))),(0,e.createElement)("div",{className:"col-2-highlights",style:{backgroundColor:"#F7F7F7",borderBottom:"none",borderBottomRightRadius:"8px",borderBottomLeftRadius:"8px"}},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.testimonials.heading),(0,e.createElement)("div",{className:"button-row"},("not-installed"===p||"installed"===p)&&S(y),(0,e.createElement)("a",{className:"components-button otter-button is-secondary",href:r.buttons.learn_more_link,target:"_blank",rel:"external noreferrer noopener"},r.buttons.learn_more))),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("div",{className:"testimonials"},(0,e.createElement)("ul",{id:"testimonial-container",className:"testimonial-container"},r.testimonials.users.map(((t,a)=>(0,e.createElement)("li",{className:"testimonial",id:"ts_"+a,key:"ts_"+a},(0,e.createElement)("p",null,'"',t.text,'"'),(0,e.createElement)("img",{src:t.avatar,alt:t.name}),(0,e.createElement)("h3",null,t.name))))),(0,e.createElement)("div",{className:"testimonial-nav"},r.testimonials.users.map(((t,a)=>(0,e.createElement)(n.Button,{className:"testimonial-button"+(t.name===u.name?" active":""),key:"button_"+a,onClick:()=>(e=>{const t=r.testimonials.users[e];document.getElementById("ts_"+e).scrollIntoView({behavior:"smooth"}),E(t)})(a)}))))))))}};function o(t){const a=r[t.id];return(0,e.createElement)(a,{page:t.page})}function m({page:t={}}){return(0,e.createElement)("div",{className:"product-page"+(t&&t.product?" "+t.product:"")},(0,e.createElement)(o,{id:t.id,page:t}))}const d=()=>{let e=window.location.hash;return"string"!=typeof window.location.hash?null:e};function u(){const{productPages:n}=window.tiSDKAboutData,s=n?Object.keys(n).map((e=>{const t=n[e];return t.id=e,t})):[],[c,r]=(0,t.useState)(d()),o=()=>{const e=d();null!==e&&r(e)};(0,t.useEffect)((()=>(o(),window.addEventListener("hashchange",o),window.tsdk_reposition_notice&&window.tsdk_reposition_notice(),()=>{window.removeEventListener("hashchange",o)})),[]);const u=s.filter((e=>e.hash===c));return u.length>0?(0,e.createElement)("div",{className:"ti-about"},(0,e.createElement)(a,{pages:s,selected:c}),(0,e.createElement)(m,{page:u[0]})):(0,e.createElement)("div",{className:"ti-about"},(0,e.createElement)(a,{pages:s}),(0,e.createElement)("div",{id:"tsdk_banner"}),(0,e.createElement)(l,null),(0,e.createElement)(i,null))}document.addEventListener("DOMContentLoaded",(()=>{const a=document.querySelector("#ti-sdk-about");a&&(0,t.render)((0,e.createElement)(u,null),a)}))})(); \ No newline at end of file diff --git a/assets/js/build/banner/banner.asset.php b/assets/js/build/banner/banner.asset.php deleted file mode 100644 index 13b23d6e..00000000 --- a/assets/js/build/banner/banner.asset.php +++ /dev/null @@ -1 +0,0 @@ - array(), 'version' => '9c795bb600f6ae533935'); diff --git a/assets/js/build/banner/banner.js b/assets/js/build/banner/banner.js deleted file mode 100644 index be98c34e..00000000 --- a/assets/js/build/banner/banner.js +++ /dev/null @@ -1 +0,0 @@ -document.addEventListener("DOMContentLoaded",(()=>{document.dispatchEvent(new Event("themeisle:banner:init"))})),document.addEventListener("themeisle:banner:init",(()=>{!function(){if(void 0===window.tsdk_banner_data)return;const n=document.getElementById("tsdk_banner");n&&(n.innerHTML=window.tsdk_banner_data.content)}()})); \ No newline at end of file diff --git a/assets/js/build/promos/index.asset.php b/assets/js/build/promos/index.asset.php index 2d6fecb5..ea4d57ba 100644 --- a/assets/js/build/promos/index.asset.php +++ b/assets/js/build/promos/index.asset.php @@ -1 +1 @@ - array('react', 'wp-block-editor', 'wp-components', 'wp-compose', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-hooks', 'wp-plugins'), 'version' => '3997ba6be36742082cb2'); + array('react', 'wp-block-editor', 'wp-components', 'wp-compose', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-hooks', 'wp-plugins'), 'version' => '1e086c2d21f2850672d5'); diff --git a/assets/js/build/promos/index.js b/assets/js/build/promos/index.js index 9321acf9..043d526a 100644 --- a/assets/js/build/promos/index.js +++ b/assets/js/build/promos/index.js @@ -1 +1 @@ -(()=>{"use strict";var e,t={536:()=>{const e=window.React,t=window.wp.blockEditor,n=window.wp.components,o=window.wp.compose,i=window.wp.data,s=window.wp.element,a=window.wp.hooks,l=()=>{const{createNotice:e}=(0,i.dispatch)("core/notices"),[t,n]=(0,s.useState)({}),[o,a]=(0,s.useState)("loading");return(0,i.useSelect)((e=>{if(Object.keys(t).length)return;const{getEntityRecord:o}=e("core"),i=o("root","site");i&&(a("loaded"),n(i))}),[]),[e=>t?.[e],async(t,o,i="Settings saved.")=>{const s={[t]:o};try{const t=await fetch("/wp-json/wp/v2/settings",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpApiSettings.nonce},body:JSON.stringify(s)});t.ok||(a("error"),e("error","Could not save the settings.",{isDismissible:!0,type:"snackbar"}));const o=await t.json();a("loaded"),e("success",i,{isDismissible:!0,type:"snackbar"}),n(o)}catch(e){console.error("Error updating option:",e)}},o]},r=(e,t=!1)=>new Promise((n=>{wp.updates.ajax(!0===t?"install-theme":"install-plugin",{slug:e,success:e=>{n({success:!0,data:e})},error:e=>{n({success:!1,code:e.errorCode})}})})),c=e=>new Promise((t=>{jQuery.get(e).done((()=>{t({success:!0})})).fail((()=>{t({success:!1})}))})),m=(e,t)=>{const n={};return Object.keys(t).forEach((function(e){"innerBlocks"!==e&&(n[e]=t[e])})),e.push(n),Array.isArray(t.innerBlocks)?(n.innerBlocks=t.innerBlocks.map((e=>e.id)),t.innerBlocks.reduce(m,e)):e},d={button:{display:"flex",justifyContent:"center",width:"100%"},image:{padding:"20px 0"},skip:{container:{display:"flex",flexDirection:"column",alignItems:"center"},button:{fontSize:"9px"},poweredby:{fontSize:"9px",textTransform:"uppercase"}}},p={"blocks-css":{title:"Custom CSS",description:"Enable Otter Blocks to add Custom CSS for this block.",image:"css.jpg"},"blocks-animation":{title:"Animations",description:"Enable Otter Blocks to add Animations for this block.",image:"animation.jpg"},"blocks-conditions":{title:"Visibility Conditions",description:"Enable Otter Blocks to add Visibility Conditions for this block.",image:"conditions.jpg"}},u=({onClick:t})=>(0,e.createElement)("div",{style:d.skip.container},(0,e.createElement)(n.Button,{style:d.skip.button,variant:"tertiary",onClick:t},"Skip for now"),(0,e.createElement)("span",{style:d.skip.poweredby},"Recommended by ",window.themeisleSDKPromotions.product)),h=(0,o.createHigherOrderComponent)((o=>i=>{const[a,m]=(0,s.useState)(!1),[h,w]=(0,s.useState)("default"),[g,E]=(0,s.useState)(!1),[y,v,f]=l();if((0,s.useEffect)((()=>{g&&(()=>{const e={...window.themeisleSDKPromotions.option};e[window.themeisleSDKPromotions.showPromotion]=(new Date).getTime()/1e3|0,v("themeisle_sdk_promotions",JSON.stringify(e)),window.themeisleSDKPromotions.showPromotion=!1})()}),[g]),!i.isSelected||!Boolean(window.themeisleSDKPromotions.showPromotion))return(0,e.createElement)(o,{...i});const k=async()=>{m(!0),await r("otter-blocks"),v("themeisle_sdk_promotions_otter_installed",!Boolean(y("themeisle_sdk_promotions_otter_installed"))),await c(window.themeisleSDKPromotions.otterActivationUrl),m(!1),w("installed")},S=()=>"installed"===h?(0,e.createElement)("p",null,(0,e.createElement)("strong",null,"Awesome! Refresh the page to see Otter Blocks in action.")):(0,e.createElement)(n.Button,{variant:"secondary",onClick:k,isBusy:a,style:d.button},"Install & Activate Otter Blocks");return g?(0,e.createElement)(o,{...i}):(0,e.createElement)(s.Fragment,null,(0,e.createElement)(o,{...i}),(0,e.createElement)(t.InspectorControls,null,Object.keys(p).map((t=>{if(t===window.themeisleSDKPromotions.showPromotion){const o=p[t];return(0,e.createElement)(n.PanelBody,{key:t,title:o.title,initialOpen:!1},(0,e.createElement)("p",null,o.description),(0,e.createElement)(S,null),(0,e.createElement)("img",{style:d.image,src:window.themeisleSDKPromotions.assets+o.image}),(0,e.createElement)(u,{onClick:()=>E(!0)}))}}))))}),"withInspectorControl");(0,i.select)("core/edit-site")||(0,a.addFilter)("editor.BlockEdit","themeisle-sdk/with-inspector-controls",h);const w=window.wp.plugins,g=window.wp.editPost;function E({stacked:t=!1,type:o,onDismiss:i,onSuccess:a,initialStatus:m=null}){const{title:d,option:p,optionKey:u,labels:h,optimoleActivationUrl:w,optimoleDash:g}=window.themeisleSDKPromotions,[E,y]=(0,s.useState)(!1),[v,f]=(0,s.useState)(m),[k,S]=l(),P=async()=>{y(!0);const e={...p};e[o]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await S(u,JSON.stringify(e)),i&&i()},_=async e=>{e.preventDefault(),f("installing"),await r("optimole-wp"),f("activating"),await c(w),S("themeisle_sdk_promotions_optimole_installed",!0).then((()=>{f("done")}))};if(E)return null;const b=()=>"done"===v?(0,e.createElement)("div",{className:"done"},(0,e.createElement)("p",null," ",h.all_set),(0,e.createElement)(n.Button,{icon:"external",isPrimary:!0,href:g,target:"_blank"},h.optimole.gotodash)):(0,e.createElement)("p",{className:"om-progress"},(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),(0,e.createElement)("span",null,"installing"===v&&h.installing,"activating"===v&&h.activating,"…")),D=()=>(0,e.createElement)(n.Button,{disabled:v&&"done"!==v,onClick:P,isLink:!0,className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},h.optimole.dismisscta)),N=(t=!1)=>(0,e.createElement)(e.Fragment,null,(0,e.createElement)(n.Button,{isPrimary:!0,onClick:_,className:t?"cta":""},h.optimole.installOptimole),(0,e.createElement)(n.Button,{isLink:!0,target:"_blank",href:"https://wordpress.org/plugins/optimole-wp"},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null," ",h.learnmore))),B=(0,e.createElement)("div",{className:"ti-om-stack-wrap ti-sdk-om-notice"},(0,e.createElement)("div",{className:"om-stack-notice"},D(),(0,e.createElement)("i",null,d),(0,e.createElement)("p",null,["om-editor","om-image-block"].includes(o)?h.optimole.message1:h.optimole.message2),v?b():N(!0))),K=(0,e.createElement)(e.Fragment,null,D(),(0,e.createElement)("div",{className:"content"},(0,e.createElement)("div",null,(0,e.createElement)("p",null,d),(0,e.createElement)("p",{className:"description"},"om-media"===o?h.optimole.message3:h.optimole.message4),v?b():(0,e.createElement)("div",{className:"actions"},N()))));return t?B:K}const y=()=>{const[t,n]=(0,s.useState)(!0),{getBlocks:o}=(0,i.useSelect)((e=>{const{getBlocks:t}=e("core/block-editor");return{getBlocks:t}}));var a;if((a=o(),"core/image",a.reduce(m,[]).filter((e=>"core/image"===e.name))).length<2)return null;const l="ti-sdk-optimole-post-publish "+(t?"":"hidden");return(0,e.createElement)(g.PluginPostPublishPanel,{className:l},(0,e.createElement)(E,{stacked:!0,type:"om-editor",onDismiss:()=>{n(!1)}}))};new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(this.debug)this.runAll();else switch(this.promo){case"om-attachment":this.runAttachmentPromo();break;case"om-media":this.runMediaPromo();break;case"om-editor":this.runEditorPromo();break;case"om-image-block":this.runImageBlockPromo();break;case"om-elementor":this.runElementorPromo()}}runAttachmentPromo(){wp.media.view.Attachment.Details.prototype.on("ready",(()=>{setTimeout((()=>{this.removeAttachmentPromo(),this.addAttachmentPromo()}),100)})),wp.media.view.Modal.prototype.on("close",(()=>{setTimeout(this.removeAttachmentPromo,100)}))}runMediaPromo(){if(window.themeisleSDKPromotions.option["om-media"])return;const t=document.querySelector("#ti-optml-notice");t&&(0,s.render)((0,e.createElement)(E,{type:"om-media",onDismiss:()=>{t.style.opacity=0}}),t)}runImageBlockPromo(){if(window.themeisleSDKPromotions.option["om-image-block"])return;let n=!0,i=null;const l=(0,o.createHigherOrderComponent)((o=>a=>"core/image"===a.name&&n?(0,e.createElement)(s.Fragment,null,(0,e.createElement)(o,{...a}),(0,e.createElement)(t.InspectorControls,null,(0,e.createElement)(E,{stacked:!0,type:"om-image-block",initialStatus:i,onDismiss:()=>{n=!1},onSuccess:()=>{i="done"}}))):(0,e.createElement)(o,{...a})),"withImagePromo");(0,a.addFilter)("editor.BlockEdit","optimole-promo/image-promo",l,99)}runEditorPromo(){window.themeisleSDKPromotions.option["om-editor"]||(0,w.registerPlugin)("optimole-promo",{render:y})}runElementorPromo(){if(!window.elementor)return;const e=this;elementor.on("preview:loaded",(()=>{elementor.panel.currentView.on("set:page:editor",(t=>{e.domRef&&(0,s.unmountComponentAtNode)(e.domRef),t.activeSection&&"section_image"===t.activeSection&&e.runElementorActions(e)}))}))}addAttachmentPromo(){if(this.domRef&&(0,s.unmountComponentAtNode)(this.domRef),window.themeisleSDKPromotions.option["om-attachment"])return;const t=document.querySelector("#ti-optml-notice-helper");t&&(this.domRef=t,(0,s.render)((0,e.createElement)("div",{className:"notice notice-info ti-sdk-om-notice",style:{margin:0}},(0,e.createElement)(E,{type:"om-attachment",onDismiss:()=>{t.style.opacity=0}})),t))}removeAttachmentPromo(){const e=document.querySelector("#ti-optml-notice-helper");e&&(0,s.unmountComponentAtNode)(e)}runElementorActions(t){if(window.themeisleSDKPromotions.option["om-elementor"])return;const n=document.querySelector("#elementor-panel__editor__help"),o=document.createElement("div");o.id="ti-optml-notice",t.domRef=o,n&&(n.parentNode.insertBefore(o,n),(0,s.render)((0,e.createElement)(E,{stacked:!0,type:"om-elementor",onDismiss:()=>{o.style.opacity=0}}),o))}runAll(){this.runAttachmentPromo(),this.runMediaPromo(),this.runEditorPromo(),this.runImageBlockPromo(),this.runElementorPromo()}};const v=({onDismiss:t=(()=>{})})=>{const[o,i]=(0,s.useState)(""),[a,m]=l();return(0,e.createElement)(s.Fragment,null,(0,e.createElement)(n.Button,{disabled:"installing"===o,onClick:async()=>{const e={...window.themeisleSDKPromotions.option};e["rop-posts"]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await m(window.themeisleSDKPromotions.optionKey,JSON.stringify(e)),t&&t()},variant:"link",className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},"Dismiss this notice.")),(0,e.createElement)("p",null,"Boost your content's reach effortlessly! Introducing ",(0,e.createElement)("b",null,"Revive Social"),", a cutting-edge plugin from the makers of ",window.themeisleSDKPromotions.product,". Seamlessly auto-share old & new content across social media, driving traffic like never before."),(0,e.createElement)("div",{className:"rop-notice-actions"},"installed"!==o?(0,e.createElement)(n.Button,{variant:"primary",isBusy:"installing"===o,onClick:async()=>{i("installing"),await r("tweet-old-post"),await c(window.themeisleSDKPromotions.ropActivationUrl),m("themeisle_sdk_promotions_rop_installed",!Boolean(a("themeisle_sdk_promotions_rop_installed"))),i("installed")}},"Install & Activate"):(0,e.createElement)(n.Button,{variant:"primary",href:window.themeisleSDKPromotions.ropDash},"Visit Dashboard"),(0,e.createElement)(n.Button,{variant:"link",target:"_blank",href:"https://wordpress.org/plugins/tweet-old-post/"},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null,"Learn more"))))};new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(window.themeisleSDKPromotions.option["rop-posts"])return;const t=document.querySelector("#ti-rop-notice");t&&(0,s.render)((0,e.createElement)(v,{onDismiss:()=>{t.style.display="none"}}),t)}};const f=({onDismiss:t=(()=>{})})=>{const{title:o,optionKey:i,labels:a,neveAction:c,activateNeveURL:m}=window.themeisleSDKPromotions,[d,p]=l(),[u,h]=(0,s.useState)(null);return(0,e.createElement)(s.Fragment,null,(0,e.createElement)(n.Button,{disabled:u&&"done"!==u,onClick:async()=>{const e={...window.themeisleSDKPromotions.option};e["neve-themes-popular"]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await p(i,JSON.stringify(e)),t&&t()},isLink:!0,className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},a.redirectionCF7.dismisscta)),(0,e.createElement)("div",{className:"content"},(0,e.createElement)("div",null,(0,e.createElement)("p",null,o),(0,e.createElement)("p",{className:"description"},"Meet ",(0,e.createElement)("b",null,"Neve"),", from the creators of ",window.themeisleSDKPromotions.product,". A very fast and free theme, trusted by over 300,000 users for building their websites and rated 4.7 stars!"),!u&&(0,e.createElement)("div",{className:"actions"},(0,e.createElement)(n.Button,{variant:"primary",onClick:e=>{if(e.preventDefault(),"activate"===c)return h("activating"),void p("themeisle_sdk_promotions_neve_installed",!0).then((()=>{window.location.href=m}));h("installing"),r("neve",!0).then((e=>{h("activating"),p("themeisle_sdk_promotions_neve_installed",!0).then((()=>{window.location.href=e.data.activateUrl}))}))}},"install"===c&&a.installActivate,"activate"===c&&a.activate),(0,e.createElement)(n.Button,{variant:"link",href:window.themeisleSDKPromotions.nevePreviewURL},a.preview)),u&&"done"!==u&&(0,e.createElement)("p",{className:"om-progress"},(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),(0,e.createElement)("span",null,"installing"===u&&a.installing,"activating"===u&&a.activating,"…")))))};function k({type:t,onDismiss:o}){const{title:i,option:a,optionKey:m,labels:d,rfCF7ActivationUrl:p,cf7Dash:u}=window.themeisleSDKPromotions,[h,w]=(0,s.useState)(!1),[g,E]=(0,s.useState)(null),[y,v]=l();if(h)return null;const f=(0,e.createElement)("div",{className:"actions"},(0,e.createElement)(n.Button,{isPrimary:!0,onClick:async e=>{e.preventDefault(),E("installing"),await r("wpcf7-redirect"),E("activating"),await c(p),v("themeisle_sdk_promotions_redirection_cf7_installed",!Boolean(y("themeisle_sdk_promotions_redirection_cf7_installed"))),E("done")}},d.redirectionCF7.gst),(0,e.createElement)(n.Button,{isLink:!0,target:"_blank",href:"https://wordpress.org/plugins/wpcf7-redirect/"},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null," ",d.learnmore)));return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(n.Button,{disabled:g&&"done"!==g,onClick:async()=>{w(!0);const e={...a};e[t]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await v(m,JSON.stringify(e)),o&&o()},isLink:!0,className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},d.redirectionCF7.dismisscta)),(0,e.createElement)("div",{className:"content"},(0,e.createElement)("div",null,(0,e.createElement)("p",null,i),(0,e.createElement)("p",{className:"description"},d.redirectionCF7.message),g?"done"===g?(0,e.createElement)("div",{className:"done"},(0,e.createElement)("p",null," ",d.all_set),(0,e.createElement)(n.Button,{icon:"external",variant:"primary",href:u,target:"_blank"},d.redirectionCF7.gotodash)):(0,e.createElement)("p",{className:"om-progress"},(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),(0,e.createElement)("span",null,"installing"===g&&d.installing,"activating"===g&&d.activating,"…")):f)))}new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(window.themeisleSDKPromotions.option["neve-themes-popular"])return;const t=document.querySelector("#ti-neve-notice");t&&(0,s.render)((0,e.createElement)(f,{onDismiss:()=>{t.style.display="none"}}),t)}},new class{constructor(){this.run()}run(){if(window.themeisleSDKPromotions.option["redirection-cf7"])return;const t=document.querySelector("#ti-redirection-cf7-notice");t&&(0,s.render)((0,e.createElement)(k,{type:"redirection-cf7",onDismiss:()=>{t.style.display="none"}}),t)}};const S=({onDismiss:t=(()=>{})})=>{const{title:o,option:i,optionKey:a,labels:m,hyveActivationUrl:d,hyveDash:p}=window.themeisleSDKPromotions,[u,h]=(0,s.useState)(!1),[w,g]=(0,s.useState)(null),[E,y]=l();if(u)return null;const v=(0,e.createElement)("div",{className:"actions"},(0,e.createElement)(n.Button,{variant:"primary",onClick:async e=>{e.preventDefault(),g("installing"),await r("hyve-lite"),g("activating"),await c(d),y("themeisle_sdk_promotions_hyve_installed",!Boolean(E("themeisle_sdk_promotions_hyve_installed"))),g("done")}},m.hyve.install),(0,e.createElement)(n.Button,{variant:"link",target:"_blank",href:"https://wordpress.org/plugins/hyve-lite/"},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null,m.learnmore)));return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(n.Button,{disabled:w&&"done"!==w,onClick:async()=>{h(!0);const e={...i};e["hyve-plugins-install"]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await y(a,JSON.stringify(e)),t&&t()},variant:"link",className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},m.hyve.dismisscta)),(0,e.createElement)("div",{className:"content"},(0,e.createElement)("div",null,(0,e.createElement)("p",null,o),(0,e.createElement)("p",{className:"description"},m.hyve.message),w?"done"===w?(0,e.createElement)("div",{className:"done"},(0,e.createElement)("p",null,m.all_set),(0,e.createElement)(n.Button,{icon:"external",variant:"primary",href:p,target:"_blank"},m.hyve.gotodash)):(0,e.createElement)("p",{className:"om-progress"},(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),(0,e.createElement)("span",null,"installing"===w&&m.installing,"activating"===w&&m.activating,"…")):v)))};(()=>{if(window.themeisleSDKPromotions.option["hyve-plugins-install"])return;const t=document.querySelector("#ti-hyve-notice");t&&(0,s.createRoot)(t).render((0,e.createElement)(S,{onDismiss:()=>{t.style.display="none"}}))})();const P=(0,o.createHigherOrderComponent)((o=>i=>{if("core/rss"!==i.name||!Boolean(window.themeisleSDKPromotions.showPromotion))return(0,e.createElement)(o,{...i});if("feedzy-editor"!==window.themeisleSDKPromotions.showPromotion)return(0,e.createElement)(o,{...i});const[a,r,c]=l(),[m,d]=(0,s.useState)(!1);return(0,s.useEffect)((()=>{m&&(()=>{const e={...window.themeisleSDKPromotions.option};e[window.themeisleSDKPromotions.showPromotion]=(new Date).getTime()/1e3|0,r("themeisle_sdk_promotions",JSON.stringify(e)),window.themeisleSDKPromotions.showPromotion=!1})()}),[m]),m?(0,e.createElement)(o,{...i}):(0,e.createElement)(e.Fragment,null,(0,e.createElement)(o,{...i}),(0,e.createElement)(t.InspectorControls,null,(0,e.createElement)(n.PanelBody,null,(0,e.createElement)("div",{style:{padding:"16px 10px",backgroundColor:"#f0f6fc",borderLeft:"4px solid #72aee6",margin:"5px 0",fontSize:"13px",color:"#1e1e1e",position:"relative"}},(0,e.createElement)("div",{dangerouslySetInnerHTML:{__html:window.themeisleSDKPromotions.labels.feedzy.editor_recommends}}),(0,e.createElement)("button",{onClick:()=>d(!0),style:{position:"absolute",top:"-2px",right:"3px",cursor:"pointer",background:"none",border:"none",padding:"2px",color:"#757575",fontSize:"16px"}},"×")))))}),"withFeedzyNotice");(0,a.addFilter)("editor.BlockEdit","feedzy/with-notice",P);const _=({onDismiss:t=(()=>{})})=>{const{title:o,option:i,optionKey:a,labels:m,wpFullPayActivationUrl:d,wpFullPayDash:p}=window.themeisleSDKPromotions,[u,h]=(0,s.useState)(!1),[w,g]=(0,s.useState)(null),[E,y]=l();if(u)return null;const v=(0,e.createElement)("div",{className:"actions"},(0,e.createElement)(n.Button,{variant:"primary",onClick:async e=>{e.preventDefault(),g("installing"),await r("wp-full-stripe-free"),g("activating"),await c(d),y("themeisle_sdk_promotions_wp_full_pay_installed",!Boolean(E("themeisle_sdk_promotions_wp_full_pay_installed"))),g("done")}},m.wp_full_pay.install),(0,e.createElement)(n.Button,{variant:"link",target:"_blank",href:"https://wordpress.org/plugins/wp-full-stripe-free/"},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null,m.learnmore)));return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(n.Button,{disabled:w&&"done"!==w,onClick:async()=>{h(!0);const e={...i};e["wp-full-pay-plugins-install"]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await y(a,JSON.stringify(e)),t&&t()},variant:"link",className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},m.wp_full_pay.dismisscta)),(0,e.createElement)("div",{className:"content"},(0,e.createElement)("div",null,(0,e.createElement)("p",null,o),(0,e.createElement)("p",{className:"description"},m.wp_full_pay.message),w?"done"===w?(0,e.createElement)("div",{className:"done"},(0,e.createElement)("p",null,m.all_set),(0,e.createElement)(n.Button,{icon:"external",variant:"primary",href:p,target:"_blank"},m.wp_full_pay.gotodash)):(0,e.createElement)("p",{className:"om-progress"},(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),(0,e.createElement)("span",null,"installing"===w&&m.installing,"activating"===w&&m.activating,"…")):v)))};(()=>{if(window.themeisleSDKPromotions.option["wp-full-pay-plugins-install"])return;const t=document.querySelector("#ti-wp-full-pay-notice");t&&(0,s.createRoot)(t).render((0,e.createElement)(_,{onDismiss:()=>{t.style.display="none"}}))})()}},n={};function o(e){var i=n[e];if(void 0!==i)return i.exports;var s=n[e]={exports:{}};return t[e](s,s.exports,o),s.exports}o.m=t,e=[],o.O=(t,n,i,s)=>{if(!n){var a=1/0;for(m=0;m=s)&&Object.keys(o.O).every((e=>o.O[e](n[r])))?n.splice(r--,1):(l=!1,s0&&e[m-1][2]>s;m--)e[m]=e[m-1];e[m]=[n,i,s]},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={57:0,350:0};o.O.j=t=>0===e[t];var t=(t,n)=>{var i,s,[a,l,r]=n,c=0;if(a.some((t=>0!==e[t]))){for(i in l)o.o(l,i)&&(o.m[i]=l[i]);if(r)var m=r(o)}for(t&&t(n);co(536)));i=o.O(i)})(); \ No newline at end of file +(()=>{"use strict";var e,t={150:()=>{const e=window.React,t=window.wp.blockEditor,n=window.wp.components,o=window.wp.compose,i=window.wp.data,s=window.wp.element,a=window.wp.hooks,l=()=>{const{createNotice:e}=(0,i.dispatch)("core/notices"),[t,n]=(0,s.useState)({}),[o,a]=(0,s.useState)("loading");return(0,i.useSelect)((e=>{if(Object.keys(t).length)return;const{getEntityRecord:o}=e("core"),i=o("root","site");i&&(a("loaded"),n(i))}),[]),[e=>t?.[e],async(t,o,i="Settings saved.")=>{const s={[t]:o};try{const t=await fetch("/wp-json/wp/v2/settings",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpApiSettings.nonce},body:JSON.stringify(s)});t.ok||(a("error"),e("error","Could not save the settings.",{isDismissible:!0,type:"snackbar"}));const o=await t.json();a("loaded"),e("success",i,{isDismissible:!0,type:"snackbar"}),n(o)}catch(e){console.error("Error updating option:",e)}},o]},r=(e,t=!1)=>new Promise((n=>{wp.updates.ajax(!0===t?"install-theme":"install-plugin",{slug:e,success:e=>{n({success:!0,data:e})},error:e=>{n({success:!1,code:e.errorCode})}})})),c=e=>new Promise((t=>{jQuery.get(e).done((()=>{t({success:!0})})).fail((()=>{t({success:!1})}))})),m=(e,t)=>{const n={};return Object.keys(t).forEach((function(e){"innerBlocks"!==e&&(n[e]=t[e])})),e.push(n),Array.isArray(t.innerBlocks)?(n.innerBlocks=t.innerBlocks.map((e=>e.id)),t.innerBlocks.reduce(m,e)):e},d={button:{display:"flex",justifyContent:"center",width:"100%"},image:{padding:"20px 0"},skip:{container:{display:"flex",flexDirection:"column",alignItems:"center"},button:{fontSize:"9px"},poweredby:{fontSize:"9px",textTransform:"uppercase"}}},p={"blocks-css":{title:"Custom CSS",description:"Enable Otter Blocks to add Custom CSS for this block.",image:"css.jpg"},"blocks-animation":{title:"Animations",description:"Enable Otter Blocks to add Animations for this block.",image:"animation.jpg"},"blocks-conditions":{title:"Visibility Conditions",description:"Enable Otter Blocks to add Visibility Conditions for this block.",image:"conditions.jpg"}},u=({onClick:t})=>(0,e.createElement)("div",{style:d.skip.container},(0,e.createElement)(n.Button,{style:d.skip.button,variant:"tertiary",onClick:t},"Skip for now"),(0,e.createElement)("span",{style:d.skip.poweredby},"Recommended by ",window.themeisleSDKPromotions.product)),h=(0,o.createHigherOrderComponent)((o=>i=>{const[a,m]=(0,s.useState)(!1),[h,w]=(0,s.useState)("default"),[g,y]=(0,s.useState)(!1),[E,f,v]=l();if((0,s.useEffect)((()=>{g&&(()=>{const e={...window.themeisleSDKPromotions.option};e[window.themeisleSDKPromotions.showPromotion]=(new Date).getTime()/1e3|0,f("themeisle_sdk_promotions",JSON.stringify(e)),window.themeisleSDKPromotions.showPromotion=!1})()}),[g]),!i.isSelected||!Boolean(window.themeisleSDKPromotions.showPromotion))return(0,e.createElement)(o,{...i});const k=async()=>{m(!0),await r("otter-blocks"),f("themeisle_sdk_promotions_otter_installed",!Boolean(E("themeisle_sdk_promotions_otter_installed"))),await c(window.themeisleSDKPromotions.otterActivationUrl),m(!1),w("installed")},S=()=>"installed"===h?(0,e.createElement)("p",null,(0,e.createElement)("strong",null,"Awesome! Refresh the page to see Otter Blocks in action.")):(0,e.createElement)(n.Button,{variant:"secondary",onClick:k,isBusy:a,style:d.button},"Install & Activate Otter Blocks");return g?(0,e.createElement)(o,{...i}):(0,e.createElement)(s.Fragment,null,(0,e.createElement)(o,{...i}),(0,e.createElement)(t.InspectorControls,null,Object.keys(p).map((t=>{if(t===window.themeisleSDKPromotions.showPromotion){const o=p[t];return(0,e.createElement)(n.PanelBody,{key:t,title:o.title,initialOpen:!1},(0,e.createElement)("p",null,o.description),(0,e.createElement)(S,null),(0,e.createElement)("img",{style:d.image,src:window.themeisleSDKPromotions.assets+o.image}),(0,e.createElement)(u,{onClick:()=>y(!0)}))}}))))}),"withInspectorControl");(0,i.select)("core/edit-site")||(0,a.addFilter)("editor.BlockEdit","themeisle-sdk/with-inspector-controls",h);const w=window.wp.plugins,g=window.wp.editPost;function y({stacked:t=!1,type:o,onDismiss:i,onSuccess:a,initialStatus:m=null}){const{title:d,option:p,optionKey:u,labels:h,optimoleActivationUrl:w,optimoleDash:g}=window.themeisleSDKPromotions,[y,E]=(0,s.useState)(!1),[f,v]=(0,s.useState)(m),[k,S]=l(),b=async()=>{E(!0);const e={...p};e[o]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await S(u,JSON.stringify(e)),i&&i()},P=async e=>{e.preventDefault(),v("installing"),await r("optimole-wp"),v("activating"),await c(w),S("themeisle_sdk_promotions_optimole_installed",!0).then((()=>{v("done")}))};if(y)return null;const D=()=>"done"===f?(0,e.createElement)("div",{className:"done"},(0,e.createElement)("p",null," ",h.all_set),(0,e.createElement)(n.Button,{icon:"external",isPrimary:!0,href:g,target:"_blank"},h.optimole.gotodash)):(0,e.createElement)("p",{className:"om-progress"},(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),(0,e.createElement)("span",null,"installing"===f&&h.installing,"activating"===f&&h.activating,"…")),_=()=>(0,e.createElement)(n.Button,{disabled:f&&"done"!==f,onClick:b,isLink:!0,className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},h.optimole.dismisscta)),K=(t=!1)=>(0,e.createElement)(e.Fragment,null,(0,e.createElement)(n.Button,{isPrimary:!0,onClick:P,className:t?"cta":""},h.optimole.installOptimole),(0,e.createElement)(n.Button,{isLink:!0,target:"_blank",href:"https://wordpress.org/plugins/optimole-wp"},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null," ",h.learnmore))),N=(0,e.createElement)("div",{className:"ti-om-stack-wrap ti-sdk-om-notice"},(0,e.createElement)("div",{className:"om-stack-notice"},_(),(0,e.createElement)("i",null,d),(0,e.createElement)("p",null,["om-editor","om-image-block"].includes(o)?h.optimole.message1:h.optimole.message2),f?D():K(!0))),B=(0,e.createElement)(e.Fragment,null,_(),(0,e.createElement)("div",{className:"content"},(0,e.createElement)("div",null,(0,e.createElement)("p",null,d),(0,e.createElement)("p",{className:"description"},"om-media"===o?h.optimole.message3:h.optimole.message4),f?D():(0,e.createElement)("div",{className:"actions"},K()))));return t?N:B}const E=()=>{const[t,n]=(0,s.useState)(!0),{getBlocks:o}=(0,i.useSelect)((e=>{const{getBlocks:t}=e("core/block-editor");return{getBlocks:t}}));var a;if((a=o(),"core/image",a.reduce(m,[]).filter((e=>"core/image"===e.name))).length<2)return null;const l="ti-sdk-optimole-post-publish "+(t?"":"hidden");return(0,e.createElement)(g.PluginPostPublishPanel,{className:l},(0,e.createElement)(y,{stacked:!0,type:"om-editor",onDismiss:()=>{n(!1)}}))};new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(this.debug)this.runAll();else switch(this.promo){case"om-attachment":this.runAttachmentPromo();break;case"om-media":this.runMediaPromo();break;case"om-editor":this.runEditorPromo();break;case"om-image-block":this.runImageBlockPromo();break;case"om-elementor":this.runElementorPromo()}}runAttachmentPromo(){wp.media.view.Attachment.Details.prototype.on("ready",(()=>{setTimeout((()=>{this.removeAttachmentPromo(),this.addAttachmentPromo()}),100)})),wp.media.view.Modal.prototype.on("close",(()=>{setTimeout(this.removeAttachmentPromo,100)}))}runMediaPromo(){if(window.themeisleSDKPromotions.option["om-media"])return;const t=document.querySelector("#ti-optml-notice");t&&(0,s.render)((0,e.createElement)(y,{type:"om-media",onDismiss:()=>{t.style.opacity=0}}),t)}runImageBlockPromo(){if(window.themeisleSDKPromotions.option["om-image-block"])return;let n=!0,i=null;const l=(0,o.createHigherOrderComponent)((o=>a=>"core/image"===a.name&&n?(0,e.createElement)(s.Fragment,null,(0,e.createElement)(o,{...a}),(0,e.createElement)(t.InspectorControls,null,(0,e.createElement)(y,{stacked:!0,type:"om-image-block",initialStatus:i,onDismiss:()=>{n=!1},onSuccess:()=>{i="done"}}))):(0,e.createElement)(o,{...a})),"withImagePromo");(0,a.addFilter)("editor.BlockEdit","optimole-promo/image-promo",l,99)}runEditorPromo(){window.themeisleSDKPromotions.option["om-editor"]||(0,w.registerPlugin)("optimole-promo",{render:E})}runElementorPromo(){if(!window.elementor)return;const e=this;elementor.on("preview:loaded",(()=>{elementor.panel.currentView.on("set:page:editor",(t=>{e.domRef&&(0,s.unmountComponentAtNode)(e.domRef),t.activeSection&&"section_image"===t.activeSection&&e.runElementorActions(e)}))}))}addAttachmentPromo(){if(this.domRef&&(0,s.unmountComponentAtNode)(this.domRef),window.themeisleSDKPromotions.option["om-attachment"])return;const t=document.querySelector("#ti-optml-notice-helper");t&&(this.domRef=t,(0,s.render)((0,e.createElement)("div",{className:"notice notice-info ti-sdk-om-notice",style:{margin:0}},(0,e.createElement)(y,{type:"om-attachment",onDismiss:()=>{t.style.opacity=0}})),t))}removeAttachmentPromo(){const e=document.querySelector("#ti-optml-notice-helper");e&&(0,s.unmountComponentAtNode)(e)}runElementorActions(t){if(window.themeisleSDKPromotions.option["om-elementor"])return;const n=document.querySelector("#elementor-panel__editor__help"),o=document.createElement("div");o.id="ti-optml-notice",t.domRef=o,n&&(n.parentNode.insertBefore(o,n),(0,s.render)((0,e.createElement)(y,{stacked:!0,type:"om-elementor",onDismiss:()=>{o.style.opacity=0}}),o))}runAll(){this.runAttachmentPromo(),this.runMediaPromo(),this.runEditorPromo(),this.runImageBlockPromo(),this.runElementorPromo()}};const f=({onDismiss:t=(()=>{})})=>{const[o,i]=(0,s.useState)(""),[a,m]=l();return(0,e.createElement)(s.Fragment,null,(0,e.createElement)(n.Button,{disabled:"installing"===o,onClick:async()=>{const e={...window.themeisleSDKPromotions.option};e["rop-posts"]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await m(window.themeisleSDKPromotions.optionKey,JSON.stringify(e)),t&&t()},variant:"link",className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},"Dismiss this notice.")),(0,e.createElement)("p",null,"Boost your content's reach effortlessly! Introducing ",(0,e.createElement)("b",null,"Revive Social"),", a cutting-edge plugin from the makers of ",window.themeisleSDKPromotions.product,". Seamlessly auto-share old & new content across social media, driving traffic like never before."),(0,e.createElement)("div",{className:"rop-notice-actions"},"installed"!==o?(0,e.createElement)(n.Button,{variant:"primary",isBusy:"installing"===o,onClick:async()=>{i("installing"),await r("tweet-old-post"),await c(window.themeisleSDKPromotions.ropActivationUrl),m("themeisle_sdk_promotions_rop_installed",!Boolean(a("themeisle_sdk_promotions_rop_installed"))),i("installed")}},"Install & Activate"):(0,e.createElement)(n.Button,{variant:"primary",href:window.themeisleSDKPromotions.ropDash},"Visit Dashboard"),(0,e.createElement)(n.Button,{variant:"link",target:"_blank",href:"https://wordpress.org/plugins/tweet-old-post/"},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null,"Learn more"))))};new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(window.themeisleSDKPromotions.option["rop-posts"])return;const t=document.querySelector("#ti-rop-notice");t&&(0,s.render)((0,e.createElement)(f,{onDismiss:()=>{t.style.display="none"}}),t)}};const v=({onDismiss:t=(()=>{})})=>{const{title:o,optionKey:i,labels:a,neveAction:c,activateNeveURL:m}=window.themeisleSDKPromotions,[d,p]=l(),[u,h]=(0,s.useState)(null);return(0,e.createElement)(s.Fragment,null,(0,e.createElement)(n.Button,{disabled:u&&"done"!==u,onClick:async()=>{const e={...window.themeisleSDKPromotions.option};e["neve-themes-popular"]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await p(i,JSON.stringify(e)),t&&t()},isLink:!0,className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},a.redirectionCF7.dismisscta)),(0,e.createElement)("div",{className:"content"},(0,e.createElement)("div",null,(0,e.createElement)("p",null,o),(0,e.createElement)("p",{className:"description"},"Meet ",(0,e.createElement)("b",null,"Neve"),", from the creators of ",window.themeisleSDKPromotions.product,". A very fast and free theme, trusted by over 300,000 users for building their websites and rated 4.7 stars!"),!u&&(0,e.createElement)("div",{className:"actions"},(0,e.createElement)(n.Button,{variant:"primary",onClick:e=>{if(e.preventDefault(),"activate"===c)return h("activating"),void p("themeisle_sdk_promotions_neve_installed",!0).then((()=>{window.location.href=m}));h("installing"),r("neve",!0).then((e=>{h("activating"),p("themeisle_sdk_promotions_neve_installed",!0).then((()=>{window.location.href=e.data.activateUrl}))}))}},"install"===c&&a.installActivate,"activate"===c&&a.activate),(0,e.createElement)(n.Button,{variant:"link",href:window.themeisleSDKPromotions.nevePreviewURL},a.preview)),u&&"done"!==u&&(0,e.createElement)("p",{className:"om-progress"},(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),(0,e.createElement)("span",null,"installing"===u&&a.installing,"activating"===u&&a.activating,"…")))))};function k({type:t,onDismiss:o}){const{title:i,option:a,optionKey:m,labels:d,rfCF7ActivationUrl:p,cf7Dash:u}=window.themeisleSDKPromotions,[h,w]=(0,s.useState)(!1),[g,y]=(0,s.useState)(null),[E,f]=l();if(h)return null;const v=(0,e.createElement)("div",{className:"actions"},(0,e.createElement)(n.Button,{isPrimary:!0,onClick:async e=>{e.preventDefault(),y("installing"),await r("wpcf7-redirect"),y("activating"),await c(p),f("themeisle_sdk_promotions_redirection_cf7_installed",!Boolean(E("themeisle_sdk_promotions_redirection_cf7_installed"))),y("done")}},d.redirectionCF7.gst),(0,e.createElement)(n.Button,{isLink:!0,target:"_blank",href:"https://wordpress.org/plugins/wpcf7-redirect/"},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null," ",d.learnmore)));return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(n.Button,{disabled:g&&"done"!==g,onClick:async()=>{w(!0);const e={...a};e[t]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await f(m,JSON.stringify(e)),o&&o()},isLink:!0,className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},d.redirectionCF7.dismisscta)),(0,e.createElement)("div",{className:"content"},(0,e.createElement)("div",null,(0,e.createElement)("p",null,i),(0,e.createElement)("p",{className:"description"},d.redirectionCF7.message),g?"done"===g?(0,e.createElement)("div",{className:"done"},(0,e.createElement)("p",null," ",d.all_set),(0,e.createElement)(n.Button,{icon:"external",variant:"primary",href:u,target:"_blank"},d.redirectionCF7.gotodash)):(0,e.createElement)("p",{className:"om-progress"},(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),(0,e.createElement)("span",null,"installing"===g&&d.installing,"activating"===g&&d.activating,"…")):v)))}new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(window.themeisleSDKPromotions.option["neve-themes-popular"])return;const t=document.querySelector("#ti-neve-notice");t&&(0,s.render)((0,e.createElement)(v,{onDismiss:()=>{t.style.display="none"}}),t)}},new class{constructor(){this.run()}run(){if(window.themeisleSDKPromotions.option["redirection-cf7"])return;const t=document.querySelector("#ti-redirection-cf7-notice");t&&(0,s.render)((0,e.createElement)(k,{type:"redirection-cf7",onDismiss:()=>{t.style.display="none"}}),t)}};const S=({title:t,option:o,optionKey:i,labels:a,pluginSlug:m,activationUrl:d,dashboardUrl:p,learnMoreUrl:u,labelKey:h,optionInstallKey:w,installedOptionKey:g,onDismiss:y=(()=>{})})=>{const[E,f]=(0,s.useState)(!1),[v,k]=(0,s.useState)(null),[S,b]=l();if(E)return null;const P=(0,e.createElement)("div",{className:"actions"},(0,e.createElement)(n.Button,{variant:"primary",onClick:async e=>{e.preventDefault(),k("installing"),await r(m),k("activating"),await c(d),b(g,!Boolean(S(g))),k("done")}},a[h].install),(0,e.createElement)(n.Button,{variant:"link",target:"_blank",href:u},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null,a.learnmore)));return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(n.Button,{disabled:v&&"done"!==v,onClick:async()=>{f(!0);const e={...o};e[w]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions&&(window.themeisleSDKPromotions.option=e),await b(i,JSON.stringify(e)),y&&y()},variant:"link",className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},a[h].dismisscta)),(0,e.createElement)("div",{className:"content"},(0,e.createElement)("div",null,(0,e.createElement)("p",null,t),(0,e.createElement)("p",{className:"description"},a[h].message),v?"done"===v?(0,e.createElement)("div",{className:"done"},(0,e.createElement)("p",null,a.all_set),(0,e.createElement)(n.Button,{icon:"external",variant:"primary",href:p,target:"_blank"},a[h].gotodash)):(0,e.createElement)("p",{className:"om-progress"},(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),(0,e.createElement)("span",null,"installing"===v&&a.installing,"activating"===v&&a.activating,"…")):P)))};(()=>{if(window.themeisleSDKPromotions.option["hyve-plugins-install"])return;const t=document.querySelector("#ti-hyve-notice");if(!t)return;const{title:n,option:o,optionKey:i,labels:a,hyveActivationUrl:l,hyveDash:r}=window.themeisleSDKPromotions;(0,s.createRoot)(t).render((0,e.createElement)(S,{title:n,option:o,optionKey:i,labels:a,pluginSlug:"hyve-lite",activationUrl:l,dashboardUrl:r,learnMoreUrl:"https://wordpress.org/plugins/hyve-lite/",labelKey:"hyve",optionInstallKey:"hyve-plugins-install",installedOptionKey:"themeisle_sdk_promotions_hyve_installed",onDismiss:()=>{t.style.display="none"}}))})();const b=(0,o.createHigherOrderComponent)((o=>i=>{if("core/rss"!==i.name||!Boolean(window.themeisleSDKPromotions.showPromotion))return(0,e.createElement)(o,{...i});if("feedzy-editor"!==window.themeisleSDKPromotions.showPromotion)return(0,e.createElement)(o,{...i});const[a,r,c]=l(),[m,d]=(0,s.useState)(!1);return(0,s.useEffect)((()=>{m&&(()=>{const e={...window.themeisleSDKPromotions.option};e[window.themeisleSDKPromotions.showPromotion]=(new Date).getTime()/1e3|0,r("themeisle_sdk_promotions",JSON.stringify(e)),window.themeisleSDKPromotions.showPromotion=!1})()}),[m]),m?(0,e.createElement)(o,{...i}):(0,e.createElement)(e.Fragment,null,(0,e.createElement)(o,{...i}),(0,e.createElement)(t.InspectorControls,null,(0,e.createElement)(n.PanelBody,null,(0,e.createElement)("div",{style:{padding:"16px 10px",backgroundColor:"#f0f6fc",borderLeft:"4px solid #72aee6",margin:"5px 0",fontSize:"13px",color:"#1e1e1e",position:"relative"}},(0,e.createElement)("div",{dangerouslySetInnerHTML:{__html:window.themeisleSDKPromotions.labels.feedzy.editor_recommends}}),(0,e.createElement)("button",{onClick:()=>d(!0),style:{position:"absolute",top:"-2px",right:"3px",cursor:"pointer",background:"none",border:"none",padding:"2px",color:"#757575",fontSize:"16px"}},"×")))))}),"withFeedzyNotice");(0,a.addFilter)("editor.BlockEdit","feedzy/with-notice",b),(()=>{if(window.themeisleSDKPromotions.option["wp-full-pay-plugins-install"])return;const t=document.querySelector("#ti-wp-full-pay-notice");if(!t)return;const{title:n,option:o,optionKey:i,labels:a,wpFullPayActivationUrl:l,wpFullPayDash:r}=window.themeisleSDKPromotions;(0,s.createRoot)(t).render((0,e.createElement)(S,{title:n,option:o,optionKey:i,labels:a,pluginSlug:"wp-full-stripe-free",activationUrl:l,dashboardUrl:r,learnMoreUrl:"https://wordpress.org/plugins/wp-full-stripe-free/",labelKey:"wp_full_pay",optionInstallKey:"wp-full-pay-plugins-install",installedOptionKey:"themeisle_sdk_promotions_wp_full_pay_installed",onDismiss:()=>{t.style.display="none"}}))})(),(()=>{if(window.themeisleSDKPromotions.option["masteriyo-plugins-install"])return;const t=document.querySelector("#ti-masteriyo-notice");if(!t)return;const{title:n,option:o,optionKey:i,labels:a,masteriyoActivationUrl:l,masteriyoDash:r}=window.themeisleSDKPromotions;(0,s.createRoot)(t).render((0,e.createElement)(S,{title:n,option:o,optionKey:i,labels:a,pluginSlug:"learning-management-system",activationUrl:l,dashboardUrl:r,learnMoreUrl:"https://wordpress.org/plugins/learning-management-system/",labelKey:"masteriyo",optionInstallKey:"masteriyo-plugins-install",installedOptionKey:"themeisle_sdk_promotions_masteriyo_installed",onDismiss:()=>{t.style.display="none"}}))})()}},n={};function o(e){var i=n[e];if(void 0!==i)return i.exports;var s=n[e]={exports:{}};return t[e](s,s.exports,o),s.exports}o.m=t,e=[],o.O=(t,n,i,s)=>{if(!n){var a=1/0;for(m=0;m=s)&&Object.keys(o.O).every((e=>o.O[e](n[r])))?n.splice(r--,1):(l=!1,s0&&e[m-1][2]>s;m--)e[m]=e[m-1];e[m]=[n,i,s]},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={57:0,350:0};o.O.j=t=>0===e[t];var t=(t,n)=>{var i,s,[a,l,r]=n,c=0;if(a.some((t=>0!==e[t]))){for(i in l)o.o(l,i)&&(o.m[i]=l[i]);if(r)var m=r(o)}for(t&&t(n);co(150)));i=o.O(i)})(); \ No newline at end of file diff --git a/assets/js/build/survey/survey_deps.asset.php b/assets/js/build/survey/survey_deps.asset.php index dacfad07..fc1f91db 100644 --- a/assets/js/build/survey/survey_deps.asset.php +++ b/assets/js/build/survey/survey_deps.asset.php @@ -1 +1 @@ - array(), 'version' => '92a432317d1433f31603'); + array(), 'version' => '44eb6f2a376d36991f76'); diff --git a/assets/js/build/survey/survey_deps.js b/assets/js/build/survey/survey_deps.js index 20408ebd..49e206fb 100644 --- a/assets/js/build/survey/survey_deps.js +++ b/assets/js/build/survey/survey_deps.js @@ -1 +1 @@ -(()=>{"use strict";let i=!1,r=!1;const o=[],t=new Proxy({},{get:(t,e,n)=>(...t)=>(async(t,...e)=>{if(r){if(window.formbricks){const i=t;await window.formbricks[i](...e)}}else if("init"===t){if(i)return void console.warn("🧱 Formbricks - Warning: Formbricks is already initializing.");i=!0;const t=e[0].apiHost;if((await(async i=>{if(!window.formbricks){const r=document.createElement("script");r.type="text/javascript",r.src=`${i}/js/formbricks.umd.cjs`,r.async=!0;const o=async()=>new Promise(((i,o)=>{const t=setTimeout((()=>{o(new Error("Formbricks SDK loading timed out"))}),1e4);r.onload=()=>{clearTimeout(t),i()},r.onerror=()=>{clearTimeout(t),o(new Error("Failed to load Formbricks SDK"))}}));document.head.appendChild(r);try{return await o(),{ok:!0,data:void 0}}catch(i){return{ok:!1,error:new Error(i.message??"Failed to load Formbricks SDK")}}}return{ok:!0,data:void 0}})(t)).ok&&window.formbricks){window.formbricks.init(...e),i=!1,r=!0;for(const{prop:i,args:r}of o)"function"==typeof window.formbricks[i]?window.formbricks[i](...r):console.error(`🧱 Formbricks - Error: Method ${i} does not exist on formbricks`)}}else console.warn("🧱 Formbricks - Warning: Formbricks not initialized. This method will be queued and executed after initialization."),o.push({prop:t,args:e})})(e,...t)});document.addEventListener("DOMContentLoaded",(()=>{window.tsdk_formbricks={init:i=>{var r,o;"object"==typeof i&&null!==i||(i={});const e={...window.tsdk_survey_data,...i,attributes:{...null!==(r=window.tsdk_survey_data.attributes)&&void 0!==r?r:{},...null!==(o=i.attributes)&&void 0!==o?o:{}}};t?.init(e)}};let i=null;var r;r=window.tsdk_survey_data?.attributes?.install_days_number,isNaN(r)||"boolean"==typeof r||(i=setTimeout((()=>{window.tsdk_formbricks?.init()}),350)),window.addEventListener("themeisle:survey:trigger:cancel",(()=>{clearTimeout(i)})),window.dispatchEvent(new Event("themeisle:survey:loaded"))}))})(); \ No newline at end of file +(()=>{"use strict";let r=!1,e=!1;const t=[],o=new Proxy({},{get:(o,i,n)=>(...o)=>(async(o,...i)=>{if(e){if(window.formbricks){const r=window.formbricks,e=o;await r[e](...i)}}else if("setup"===o){if(r)return void console.warn("🧱 Formbricks - Warning: Formbricks is already initializing.");r=!0;const o=i[0],{appUrl:n,environmentId:s}=o;if(!n)return void console.error("🧱 Formbricks - Error: appUrl is required");if(!s)return void console.error("🧱 Formbricks - Error: environmentId is required");if((await(async r=>{if(!window.formbricks){const e=document.createElement("script");e.type="text/javascript",e.src=`${r}/js/formbricks.umd.cjs`,e.async=!0;const t=async()=>new Promise(((r,t)=>{const o=setTimeout((()=>{t(new Error("Formbricks SDK loading timed out"))}),1e4);e.onload=()=>{clearTimeout(o),r()},e.onerror=()=>{clearTimeout(o),t(new Error("Failed to load Formbricks SDK"))}}));document.head.appendChild(e);try{return await t(),{ok:!0,data:void 0}}catch(r){return{ok:!1,error:new Error(r.message??"Failed to load Formbricks SDK")}}}return{ok:!0,data:void 0}})(n)).ok&&window.formbricks){const o=window.formbricks;o.setup(...i),r=!1,e=!0;for(const{prop:r,args:e}of t)"function"==typeof o[r]?o[r](...e):console.error(`🧱 Formbricks - Error: Method ${r} does not exist on formbricks`)}}else console.warn("🧱 Formbricks - Warning: Formbricks not initialized. This method will be queued and executed after initialization."),t.push({prop:o,args:i})})(i,...o)});document.addEventListener("DOMContentLoaded",(()=>{window.tsdk_formbricks={init:async r=>{var e,t;"object"==typeof r&&null!==r||(r={});const i={...window.tsdk_survey_data,...r,attributes:{...null!==(e=window.tsdk_survey_data.attributes)&&void 0!==e?e:{},...null!==(t=r.attributes)&&void 0!==t?t:{}}},{environmentId:n,appUrl:s,attributes:a,userId:d}=i;await(o?.setup({environmentId:n,appUrl:s})),o?.setAttributes(a),function(){const r=localStorage.getItem("formbricks-js");if(!r)return!0;try{const e=JSON.parse(r);if(e?.user?.data?.userId)return!1}catch(r){console.warn(r)}return!0}()&&o?.setUserId(d)}};let r=null;var e;e=window.tsdk_survey_data?.attributes?.install_days_number,isNaN(e)||"boolean"==typeof e||(r=setTimeout((()=>{window.tsdk_formbricks?.init()}),350)),window.addEventListener("themeisle:survey:trigger:cancel",(()=>{clearTimeout(r)})),window.dispatchEvent(new Event("themeisle:survey:loaded"))}))})(); \ No newline at end of file diff --git a/assets/js/src/about/about.js b/assets/js/src/about/about.js index 0d367b70..466b3680 100644 --- a/assets/js/src/about/about.js +++ b/assets/js/src/about/about.js @@ -39,6 +39,10 @@ function About() { setTabToCurrentHash(); window.addEventListener('hashchange', setTabToCurrentHash); + if ( window.tsdk_reposition_notice ) { + window.tsdk_reposition_notice(); + } + return () => { window.removeEventListener('hashchange', setTabToCurrentHash); }; @@ -60,6 +64,7 @@ function About() { return (
+
diff --git a/assets/js/src/about/about.scss b/assets/js/src/about/about.scss index d88f4d32..20c4a304 100644 --- a/assets/js/src/about/about.scss +++ b/assets/js/src/about/about.scss @@ -4,6 +4,9 @@ padding-left: 0 !important; } +.notice:not(.themeisle-sale) { + display: none; +} .ti-about { --border: 1px solid #ccc; diff --git a/assets/js/src/about/components/Header.js b/assets/js/src/about/components/Header.js index 0f766556..e277f251 100644 --- a/assets/js/src/about/components/Header.js +++ b/assets/js/src/about/components/Header.js @@ -1,5 +1,5 @@ export default function Header( { pages = [], selected = '' } ) { - const {currentProduct, logoUrl, strings, links } = window.tiSDKAboutData; + const {currentProduct, logoUrl, strings, links, showReviewLink } = window.tiSDKAboutData; const hasActiveClass = (hash = '') => { return hash === selected ? 'active' : ''; @@ -14,7 +14,9 @@ export default function Header( { pages = [], selected = '' } ) {
{currentProduct.name}/

by Themeisle

-

Enjoying {currentProduct.name}? Give us a rating!

+ {Boolean( showReviewLink ) && ( +

Enjoying {currentProduct.name}? Give us a rating!

+ )}
{( links.length > 0 || pages.length > 0 ) &&
diff --git a/assets/js/src/about/scss/_generic.scss b/assets/js/src/about/scss/_generic.scss index 3ba5507d..52564348 100644 --- a/assets/js/src/about/scss/_generic.scss +++ b/assets/js/src/about/scss/_generic.scss @@ -17,6 +17,16 @@ button { animation: spin 1s infinite linear; } +#tsdk_banner:has(.themeisle-sale) { + max-width: 990px; + margin: 0 auto; + width: 100%; + + .themeisle-sale { + margin: 0 15px; + } +} + @keyframes spin { 0% { transform: rotate(0deg); diff --git a/assets/js/src/banner.js b/assets/js/src/banner.js deleted file mode 100644 index c6bcc976..00000000 --- a/assets/js/src/banner.js +++ /dev/null @@ -1,21 +0,0 @@ -document.addEventListener('DOMContentLoaded', () => { - document.dispatchEvent(new Event('themeisle:banner:init')); -}); - -// NOTE: use this event if you need to load the banner on an event other than DOMContentLoaded -document.addEventListener('themeisle:banner:init', () => { - initializeBanner(); -}); - -function initializeBanner() { - if ( 'undefined' === typeof window.tsdk_banner_data ) { - return; - } - - const bannerRoot = document.getElementById('tsdk_banner'); - if ( ! bannerRoot ) { - return; - } - - bannerRoot.innerHTML = window.tsdk_banner_data.content; -} \ No newline at end of file diff --git a/assets/js/src/common/PromotionNotice.js b/assets/js/src/common/PromotionNotice.js new file mode 100644 index 00000000..28b44bd9 --- /dev/null +++ b/assets/js/src/common/PromotionNotice.js @@ -0,0 +1,117 @@ +import { useState } from '@wordpress/element'; +import { Button } from '@wordpress/components'; +import useSettings from "./useSettings"; +import { activatePlugin, installPluginOrTheme } from './utils'; + +const PromotionNotice = ({ + title, + option, + optionKey, + labels, + pluginSlug, + activationUrl, + dashboardUrl, + learnMoreUrl, + labelKey, + optionInstallKey, + installedOptionKey, + onDismiss = () => {} +}) => { + const [ dismissed, setDismissed ] = useState( false ); + const [ progress, setProgress ] = useState( null ); + const [ getOption, updateOption ] = useSettings(); + + const dismissNotice = async () => { + setDismissed( true ); + const newValue = { ...option }; + newValue[optionInstallKey] = new Date().getTime() / 1000 | 0; + if (window.themeisleSDKPromotions) { + window.themeisleSDKPromotions.option = newValue; + } + await updateOption( optionKey, JSON.stringify( newValue ) ); + if ( onDismiss ) { + onDismiss(); + } + }; + + const installPluginRequest = async e => { + e.preventDefault(); + setProgress( 'installing' ); + await installPluginOrTheme( pluginSlug ); + setProgress( 'activating' ); + await activatePlugin( activationUrl ); + updateOption( installedOptionKey, ! Boolean( getOption( installedOptionKey ) ) ); + setProgress('done'); + }; + + if ( dismissed ) { + return null; + } + + const installPluginRequestStatus = () => { + return progress === 'done' ? ( +
+

{ labels.all_set }

+ +
+ ) : ( +

+ + + { progress === 'installing' && labels.installing } + { progress === 'activating' && labels.activating } + … + +

+ ); + }; + + const actionButtons = ( +
+ + +
+ ); + + return ( + <> + +
+
+

{ title }

+

{labels[labelKey].message}

+ { progress ? installPluginRequestStatus() : actionButtons } +
+
+ + ); +}; + +export default PromotionNotice; diff --git a/assets/js/src/hyve.js b/assets/js/src/hyve.js index 79846e5d..c92a8354 100644 --- a/assets/js/src/hyve.js +++ b/assets/js/src/hyve.js @@ -1,134 +1,35 @@ -import { createRoot, useState } from '@wordpress/element'; -import { Button } from '@wordpress/components'; -import useSettings from "./common/useSettings"; -import { activatePlugin, installPluginOrTheme } from './common/utils'; - -const HyveNotice = ({ - onDismiss = () => {} -}) => { - const { - title, - option, - optionKey, - labels, - hyveActivationUrl, - hyveDash, - } = window.themeisleSDKPromotions; - - const [ dismissed, setDismissed ] = useState( false ); - const [ progress, setProgress ] = useState( null ); - const [ getOption, updateOption ] = useSettings(); - - const dismissNotice = async () => { - setDismissed( true ); - const newValue = { ...option }; - newValue['hyve-plugins-install'] = new Date().getTime() / 1000 | 0; - window.themeisleSDKPromotions.option = newValue; - await updateOption( optionKey, JSON.stringify( newValue ) ); - - if ( onDismiss ) { - onDismiss(); - } - }; - - const installPluginRequest = async e => { - e.preventDefault(); - setProgress( 'installing' ); - await installPluginOrTheme( 'hyve-lite' ); - - setProgress( 'activating' ); - await activatePlugin( hyveActivationUrl ); - - updateOption( 'themeisle_sdk_promotions_hyve_installed', ! Boolean( getOption( 'themeisle_sdk_promotions_hyve_installed' ) ) ); - setProgress('done'); - }; - - if ( dismissed ) { - return null; - } - - const installPluginRequestStatus = () => { - return progress === 'done' ? ( -
-

{ labels.all_set }

- - -
- ) : ( -

- - - { progress === 'installing' && labels.installing } - { progress === 'activating' && labels.activating } - … - -

- ); - }; - - const actionButtons = ( -
- - - -
- ); - - return ( - <> - - -
-
-

{ title }

-

{labels.hyve.message}

- { progress ? installPluginRequestStatus() : actionButtons } -
-
- - ); -}; +import { createRoot } from '@wordpress/element'; +import PromotionNotice from './common/PromotionNotice'; const renderHyveNotice = () => { if ( window.themeisleSDKPromotions.option['hyve-plugins-install']) { return; } - const root = document.querySelector( '#ti-hyve-notice' ); - if ( ! root ) { return; } - + const { + title, + option, + optionKey, + labels, + hyveActivationUrl, + hyveDash, + } = window.themeisleSDKPromotions; createRoot( root ).render( - { root.style.display = 'none'; }} diff --git a/assets/js/src/index.js b/assets/js/src/index.js index aa7a46b4..a63f0f52 100644 --- a/assets/js/src/index.js +++ b/assets/js/src/index.js @@ -6,3 +6,4 @@ import './redirection-for-cf7.js'; import './hyve.js'; import './feedzy.js'; import './wp-full-pay.js'; +import './masteriyo.js'; diff --git a/assets/js/src/masteriyo.js b/assets/js/src/masteriyo.js new file mode 100644 index 00000000..744acb69 --- /dev/null +++ b/assets/js/src/masteriyo.js @@ -0,0 +1,40 @@ +import { createRoot } from '@wordpress/element'; +import PromotionNotice from './common/PromotionNotice'; + +const renderMasteriyoNotice = () => { + if ( window.themeisleSDKPromotions.option['masteriyo-plugins-install']) { + return; + } + const root = document.querySelector( '#ti-masteriyo-notice' ); + if ( ! root ) { + return; + } + const { + title, + option, + optionKey, + labels, + masteriyoActivationUrl, + masteriyoDash, + } = window.themeisleSDKPromotions; + createRoot( root ).render( + { + root.style.display = 'none'; + }} + /> + ); +}; + +renderMasteriyoNotice(); diff --git a/assets/js/src/survey_deps.js b/assets/js/src/survey_deps.js index b63ecc50..72904f3e 100644 --- a/assets/js/src/survey_deps.js +++ b/assets/js/src/survey_deps.js @@ -1,12 +1,39 @@ import formbricks from "@formbricks/js"; +/** + * Check if we can set the user ID. + * + * If we set the user without checking, and error will be raised. + * + * @see https://github.com/formbricks/formbricks/blob/9fcbe4e8c56c524cec2dcdf6f28482fa2e8779a3/packages/js-core/src/lib/user/user.ts#L18-L27 + * + * @returns boolean + */ +function canAddUserId() { + const rawData = localStorage.getItem("formbricks-js"); + if ( ! rawData ) { + return true; + } + + try { + const data = JSON.parse(rawData); + if ( data?.user?.data?.userId ) { + return false; + } + } catch( e ) { + console.warn(e); + } + + return true; +} + /** * Load the formbricks library and expose it to the global scope. * Emit a custom event to let other scripts know that formbricks is loaded. */ document.addEventListener("DOMContentLoaded", () => { window.tsdk_formbricks = { - init: (args) => { + init: async(args) => { if (typeof args !== 'object' || args === null) { args = {}; } @@ -20,7 +47,17 @@ document.addEventListener("DOMContentLoaded", () => { } } - formbricks?.init(mergedArgs) + const { environmentId, appUrl, attributes, userId } = mergedArgs; + + // See https://github.com/formbricks/formbricks/blob/main/packages/js-core/src/index.ts + await formbricks?.setup({ + environmentId, + appUrl + }); + formbricks?.setAttributes( attributes ); + if ( canAddUserId() ) { + formbricks?.setUserId( userId ); + } } }; diff --git a/assets/js/src/wp-full-pay.js b/assets/js/src/wp-full-pay.js index 268e2941..fc419aaf 100644 --- a/assets/js/src/wp-full-pay.js +++ b/assets/js/src/wp-full-pay.js @@ -1,134 +1,35 @@ -import { createRoot, useState } from '@wordpress/element'; -import { Button } from '@wordpress/components'; -import useSettings from "./common/useSettings"; -import { activatePlugin, installPluginOrTheme } from './common/utils'; - -const WPFullPayNotice = ({ - onDismiss = () => {} -}) => { - const { - title, - option, - optionKey, - labels, - wpFullPayActivationUrl, - wpFullPayDash, - } = window.themeisleSDKPromotions; - - const [ dismissed, setDismissed ] = useState( false ); - const [ progress, setProgress ] = useState( null ); - const [ getOption, updateOption ] = useSettings(); - - const dismissNotice = async () => { - setDismissed( true ); - const newValue = { ...option }; - newValue['wp-full-pay-plugins-install'] = new Date().getTime() / 1000 | 0; - window.themeisleSDKPromotions.option = newValue; - await updateOption( optionKey, JSON.stringify( newValue ) ); - - if ( onDismiss ) { - onDismiss(); - } - }; - - const installPluginRequest = async e => { - e.preventDefault(); - setProgress( 'installing' ); - await installPluginOrTheme( 'wp-full-stripe-free' ); - - setProgress( 'activating' ); - await activatePlugin( wpFullPayActivationUrl ); - - updateOption( 'themeisle_sdk_promotions_wp_full_pay_installed', ! Boolean( getOption( 'themeisle_sdk_promotions_wp_full_pay_installed' ) ) ); - setProgress('done'); - }; - - if ( dismissed ) { - return null; - } - - const installPluginRequestStatus = () => { - return progress === 'done' ? ( -
-

{ labels.all_set }

- - -
- ) : ( -

- - - { progress === 'installing' && labels.installing } - { progress === 'activating' && labels.activating } - … - -

- ); - }; - - const actionButtons = ( -
- - - -
- ); - - return ( - <> - - -
-
-

{ title }

-

{labels.wp_full_pay.message}

- { progress ? installPluginRequestStatus() : actionButtons } -
-
- - ); -}; +import { createRoot } from '@wordpress/element'; +import PromotionNotice from './common/PromotionNotice'; const renderWPFullPayNotice = () => { if ( window.themeisleSDKPromotions.option['wp-full-pay-plugins-install']) { return; } - const root = document.querySelector( '#ti-wp-full-pay-notice' ); - if ( ! root ) { return; } - + const { + title, + option, + optionKey, + labels, + wpFullPayActivationUrl, + wpFullPayDash, + } = window.themeisleSDKPromotions; createRoot( root ).render( - { root.style.display = 'none'; }} diff --git a/bin/themeisle-sdk.php b/bin/themeisle-sdk.php index 46ca0676..fc0c446a 100644 --- a/bin/themeisle-sdk.php +++ b/bin/themeisle-sdk.php @@ -14,6 +14,8 @@ require_once 'load.php'; +define( 'SDK_PRODUCT_SLUG', basename( plugin_dir_path( __FILE__ ) ) ); + function _add_product( $products ) { $products[] = __FILE__; @@ -50,4 +52,25 @@ function _add_product( $products ) { 'upgrade_link' => esc_url( 'https://themeisle.com/themes/neve/pricing/' ), 'upgrade_text' => 'Get Pro Version', ]; +} ); + +add_action( 'admin_enqueue_scripts', function() { + + $screen = get_current_screen(); + if ( 'toplevel_page_themeisle-sdk' !== $screen->id ) { + return; + } + + add_filter( 'themeisle-sdk/survey/' . SDK_PRODUCT_SLUG, function( $data, $page_slug ) { + $data = [ + 'environmentId' => 'clr0ml8qx4spz8up0j8lu7t4q', // Development environment in Formbricks. + 'attributes' => [ + 'install_days_number' => 3 + ] + ]; + + return $data; + }, 10, 2 ); + + do_action( 'themeisle_internal_page', SDK_PRODUCT_SLUG, 'test-page' ); } ); \ No newline at end of file diff --git a/composer.json b/composer.json index 54c98a6f..77dfa713 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,7 @@ "homepage": "https://themeisle.com" } ], - "version": "3.3.44", + "version": "3.3.46", "require-dev": { "codeinwp/phpcs-ruleset": "dev-main", "yoast/phpunit-polyfills": "^2.0" diff --git a/load.php b/load.php index 411c4eb3..27515733 100644 --- a/load.php +++ b/load.php @@ -14,7 +14,7 @@ return; } // Current SDK version and path. -$themeisle_sdk_version = '3.3.44'; +$themeisle_sdk_version = '3.3.46'; $themeisle_sdk_path = dirname( __FILE__ ); global $themeisle_sdk_max_version; diff --git a/package-lock.json b/package-lock.json index 9b02a4fe..c6eaacb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,29 +1,30 @@ { "name": "themeisle-sdk", - "version": "3.3.39", + "version": "3.3.43", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "themeisle-sdk", - "version": "3.3.39", + "version": "3.3.43", "dependencies": { - "@formbricks/js": "^3.0.2", + "@formbricks/js": "^4.1.0", "object-hash": "^3.0.0" }, "devDependencies": { + "@playwright/test": "^1.52.0", "@semantic-release/changelog": "^5.0.0", "@semantic-release/exec": "^5.0.0", "@semantic-release/git": "^9.0.0", - "@wordpress/e2e-test-utils-playwright": "^1.8.0", - "@wordpress/env": "^10.8.0", + "@wordpress/e2e-test-utils-playwright": "^1.23.0", + "@wordpress/env": "^10.23.0", "@wordpress/postcss-plugins-preset": "^4.17.0", "@wordpress/scripts": "^27.8.0", "conventional-changelog-simple-preset": "^1.0.20", "eslint-config-wordpress": "^2.0.0", "grunt-version": "^1.3.1", "npm-run-all": "^4.1.5", - "playwright": "^1.47.2", + "playwright": "^1.52.0", "postcss-combine-media-query": "^1.0.1", "postcss-custom-media": "^9.1.3", "postcss-sort-media-queries": "^5.1.0", @@ -2240,15 +2241,68 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@formbricks/js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@formbricks/js/-/js-3.0.2.tgz", - "integrity": "sha512-AMKScnuFI2LkBP2GhN3JabuxRV9wftiLtTl33DlLhj42iem+FqWyKOs9o8jx7f+moqbB5qga5J378yx49yt9NQ==", + "node_modules/@formatjs/ecma402-abstract": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.4.tgz", + "integrity": "sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==", + "dev": true, "license": "MIT", - "peerDependencies": { - "zod": "3.x" + "dependencies": { + "@formatjs/fast-memoize": "2.2.7", + "@formatjs/intl-localematcher": "0.6.1", + "decimal.js": "^10.4.3", + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/fast-memoize": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz", + "integrity": "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.2.tgz", + "integrity": "sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "2.3.4", + "@formatjs/icu-skeleton-parser": "1.8.14", + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.14.tgz", + "integrity": "sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "2.3.4", + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.1.tgz", + "integrity": "sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.0" } }, + "node_modules/@formbricks/js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@formbricks/js/-/js-4.1.0.tgz", + "integrity": "sha512-AvM4pmsxI/MKTVUbezH8nAb6sayTL69/i+Wmc1zYM//CBX2gVA90lBoJ/tqDZaIGH/A5eUuQY0qsWrFcohuXRw==", + "license": "MIT" + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -2297,71 +2351,87 @@ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/@inquirer/checkbox": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.2.tgz", + "integrity": "sha512-PL9ixC5YsPXzXhAZFUPmkXGxfgjkdfZdPEPPmt4kFwQ4LBMDG9n/nHXYRGGZSKZJs+d1sGKWgS2GiPzVRKUdtQ==", "dev": true, + "license": "MIT", "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "@inquirer/core": "^10.1.7", + "@inquirer/figures": "^1.0.10", + "@inquirer/type": "^3.0.4", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" }, "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "node_modules/@inquirer/confirm": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.6.tgz", + "integrity": "sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==", "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4" + }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "node_modules/@inquirer/core": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.7.tgz", + "integrity": "sha512-AA9CQhlrt6ZgiSy6qoAigiA1izOa751ugX6ioSjqgJ+/Gd+tEN/TORk5sUYNjXuHWfW0r1n/a6ak4u/NqHHrtA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" + "@inquirer/figures": "^1.0.10", + "@inquirer/type": "^3.0.4", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/console/node_modules/ansi-styles": { + "node_modules/@inquirer/core/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": { "color-convert": "^2.0.1" }, @@ -2372,27 +2442,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/console/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, - "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/@jest/console/node_modules/color-convert": { + "node_modules/@inquirer/core/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" }, @@ -2400,266 +2455,451 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/console/node_modules/color-name": { + "node_modules/@inquirer/core/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 + "dev": true, + "license": "MIT" }, - "node_modules/@jest/console/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==", + "node_modules/@inquirer/core/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", "dev": true, + "license": "ISC", "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@jest/console/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==", + "node_modules/@inquirer/core/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "node_modules/@inquirer/editor": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.7.tgz", + "integrity": "sha512-gktCSQtnSZHaBytkJKMKEuswSk2cDBuXX5rxGFv306mwHfBPjg5UAldw9zWGoEyvA9KpRDkeM4jfrx0rXn0GyA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4", + "external-editor": "^3.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "@types/node": ">=18" }, "peerDependenciesMeta": { - "node-notifier": { + "@types/node": { "optional": true } } }, - "node_modules/@jest/core/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==", + "node_modules/@inquirer/expand": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.9.tgz", + "integrity": "sha512-Xxt6nhomWTAmuSX61kVgglLjMEFGa+7+F6UUtdEUeg7fg4r9vaFttUUKrtkViYYrQBA5Ia1tkOJj2koP9BuLig==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4", + "yoctocolors-cjs": "^2.1.2" }, "engines": { - "node": ">=8" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@inquirer/figures": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.10.tgz", + "integrity": "sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.6.tgz", + "integrity": "sha512-1f5AIsZuVjPT4ecA8AwaxDFNHny/tSershP/cTvTDxLdiIGTeILNcKozB0LaYt6mojJLUbOYhpIxicaYf7UKIQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4" }, "engines": { - "node": ">=10" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/core/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==", + "node_modules/@inquirer/number": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.9.tgz", + "integrity": "sha512-iN2xZvH3tyIYXLXBvlVh0npk1q/aVuKXZo5hj+K3W3D4ngAEq/DkLpofRzx6oebTUhBvOgryZ+rMV0yImKnG3w==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4" }, "engines": { - "node": ">=7.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/core/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 + "node_modules/@inquirer/password": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.9.tgz", + "integrity": "sha512-xBEoOw1XKb0rIN208YU7wM7oJEHhIYkfG7LpTJAEW913GZeaoQerzf5U/LSHI45EVvjAdgNXmXgH51cUXKZcJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } }, - "node_modules/@jest/core/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==", + "node_modules/@inquirer/prompts": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.3.2.tgz", + "integrity": "sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==", "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.1.2", + "@inquirer/confirm": "^5.1.6", + "@inquirer/editor": "^4.2.7", + "@inquirer/expand": "^4.0.9", + "@inquirer/input": "^4.1.6", + "@inquirer/number": "^3.0.9", + "@inquirer/password": "^4.0.9", + "@inquirer/rawlist": "^4.0.9", + "@inquirer/search": "^3.0.9", + "@inquirer/select": "^4.0.9" + }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/core/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==", + "node_modules/@inquirer/rawlist": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.9.tgz", + "integrity": "sha512-+5t6ebehKqgoxV8fXwE49HkSF2Rc9ijNiVGEQZwvbMI61/Q5RcD+jWD6Gs1tKdz5lkI8GRBL31iO0HjGK1bv+A==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4", + "yoctocolors-cjs": "^2.1.2" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "node_modules/@inquirer/search": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.9.tgz", + "integrity": "sha512-DWmKztkYo9CvldGBaRMr0ETUHgR86zE6sPDVOHsqz4ISe9o1LuiWfgJk+2r75acFclA93J/lqzhT0dTjCzHuoA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "@inquirer/core": "^10.1.7", + "@inquirer/figures": "^1.0.10", + "@inquirer/type": "^3.0.4", + "yoctocolors-cjs": "^2.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "node_modules/@inquirer/select": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.0.9.tgz", + "integrity": "sha512-BpJyJe7Dkhv2kz7yG7bPSbJLQuu/rqyNlF1CfiiFeFwouegfH+zh13KDyt6+d9DwucKo7hqM3wKLLyJxZMO+Xg==", "dev": true, + "license": "MIT", "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" + "@inquirer/core": "^10.1.7", + "@inquirer/figures": "^1.0.10", + "@inquirer/type": "^3.0.4", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "node_modules/@inquirer/type": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.4.tgz", + "integrity": "sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { - "jest-get-type": "^29.6.3" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@jest/reporters": { + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", "jest-message-util": "^29.7.0", "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" + "slash": "^3.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { + "node_modules/@jest/console/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==", @@ -2674,7 +2914,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/chalk": { + "node_modules/@jest/console/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -2690,7 +2930,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/color-convert": { + "node_modules/@jest/console/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==", @@ -2702,13 +2942,13 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/reporters/node_modules/color-name": { + "node_modules/@jest/console/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 }, - "node_modules/@jest/reporters/node_modules/has-flag": { + "node_modules/@jest/console/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==", @@ -2717,35 +2957,7 @@ "node": ">=8" } }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", - "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jest/reporters/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { + "node_modules/@jest/console/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==", @@ -2757,89 +2969,54 @@ "node": ">=8" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { + "node_modules/@jest/core": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "dependencies": { "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "dependencies": { + "@jest/reporters": "^29.7.0", "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "pirates": "^4.0.4", + "pretty-format": "^29.7.0", "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "strip-ansi": "^6.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { + "node_modules/@jest/core/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==", @@ -2854,7 +3031,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/transform/node_modules/chalk": { + "node_modules/@jest/core/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -2870,7 +3047,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/transform/node_modules/color-convert": { + "node_modules/@jest/core/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==", @@ -2882,13 +3059,13 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/transform/node_modules/color-name": { + "node_modules/@jest/core/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 }, - "node_modules/@jest/transform/node_modules/has-flag": { + "node_modules/@jest/core/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==", @@ -2897,7 +3074,7 @@ "node": ">=8" } }, - "node_modules/@jest/transform/node_modules/supports-color": { + "node_modules/@jest/core/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==", @@ -2909,24 +3086,122 @@ "node": ">=8" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/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==", @@ -2941,7 +3216,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/types/node_modules/chalk": { + "node_modules/@jest/reporters/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -2957,7 +3232,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/types/node_modules/color-convert": { + "node_modules/@jest/reporters/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==", @@ -2969,13 +3244,13 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/types/node_modules/color-name": { + "node_modules/@jest/reporters/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 }, - "node_modules/@jest/types/node_modules/has-flag": { + "node_modules/@jest/reporters/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==", @@ -2984,7 +3259,35 @@ "node": ">=8" } }, - "node_modules/@jest/types/node_modules/supports-color": { + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/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==", @@ -2996,157 +3299,396 @@ "node": ">=8" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, "engines": { - "node": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, "engines": { - "node": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "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==", + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "node_modules/@jest/transform/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, "dependencies": { - "debug": "^4.1.1" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@kwsites/promise-deferred": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "dev": true - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "node_modules/@jest/transform/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, "dependencies": { - "eslint-scope": "5.1.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@jest/transform/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, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 8" + "node": ">=7.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@jest/transform/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 + }, + "node_modules/@jest/transform/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, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@jest/transform/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, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "dependencies": { - "@octokit/types": "^6.0.3" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "node_modules/@jest/types/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, "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/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, + "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/@jest/types/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/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 + }, + "node_modules/@jest/types/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "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, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "dev": true + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.3" + } + }, + "node_modules/@octokit/core": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", + "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "dev": true, + "dependencies": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.3", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", "dev": true, "dependencies": { "@octokit/types": "^6.0.3", @@ -3269,6 +3811,27 @@ "@octokit/openapi-types": "^12.11.0" } }, + "node_modules/@paulirish/trace_engine": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@paulirish/trace_engine/-/trace_engine-0.0.50.tgz", + "integrity": "sha512-ktkbISnr0T9dkOxtnEadjYsbArMcvX2Wp8zwgyIP6KW0eOk2Oe2s49BY4v0qdE3uQdVv/GDdQ6MnoIFuYNJ9pg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "third-party-web": "latest" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@pkgr/core": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", @@ -3282,72 +3845,25 @@ } }, "node_modules/@playwright/test": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.0.tgz", - "integrity": "sha512-rNX5lbNidamSUorBhB4XZ9SQTjAqfe5M+p37Z8ic0jPFBMo5iCtQz1kRWkEMg+rYOKSlVycpQmpqjSFq7LXOfg==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.52.0.tgz", + "integrity": "sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==", "dev": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "playwright": "1.44.0" + "playwright": "1.52.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" - } - }, - "node_modules/@playwright/test/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=18" } }, - "node_modules/@playwright/test/node_modules/playwright": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.0.tgz", - "integrity": "sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==", - "dev": true, - "peer": true, - "dependencies": { - "playwright-core": "1.44.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/@playwright/test/node_modules/playwright-core": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.0.tgz", - "integrity": "sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==", - "dev": true, - "peer": true, - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.13.tgz", - "integrity": "sha512-odZVYXly+JwzYri9rKqqUAk0cY6zLpv4dxoKinhoJNShV36Gpxf+CyDIILJ4tYsJ1ZxIWs233Y39iVnynvDA/g==", + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.13.tgz", + "integrity": "sha512-odZVYXly+JwzYri9rKqqUAk0cY6zLpv4dxoKinhoJNShV36Gpxf+CyDIILJ4tYsJ1ZxIWs233Y39iVnynvDA/g==", "dev": true, "dependencies": { "ansi-html-community": "^0.0.8", @@ -3813,6 +4329,58 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@sentry-internal/tracing": { + "version": "7.120.3", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.120.3.tgz", + "integrity": "sha512-Ausx+Jw1pAMbIBHStoQ6ZqDZR60PsCByvHdw/jdH9AqPrNE9xlBSf9EwcycvmrzwyKspSLaB52grlje2cRIUMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/core": "7.120.3", + "@sentry/types": "7.120.3", + "@sentry/utils": "7.120.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry-internal/tracing/node_modules/@sentry/core": { + "version": "7.120.3", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.120.3.tgz", + "integrity": "sha512-vyy11fCGpkGK3qI5DSXOjgIboBZTriw0YDx/0KyX5CjIjDDNgp5AGgpgFkfZyiYiaU2Ww3iFuKo4wHmBusz1uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/types": "7.120.3", + "@sentry/utils": "7.120.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry-internal/tracing/node_modules/@sentry/types": { + "version": "7.120.3", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.120.3.tgz", + "integrity": "sha512-C4z+3kGWNFJ303FC+FxAd4KkHvxpNFYAFN8iMIgBwJdpIl25KZ8Q/VdGn0MLLUEHNLvjob0+wvwlcRBBNLXOow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry-internal/tracing/node_modules/@sentry/utils": { + "version": "7.120.3", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.120.3.tgz", + "integrity": "sha512-UDAOQJtJDxZHQ5Nm1olycBIsz2wdGX8SdzyGVHmD8EOQYAeDZQyIlQYohDe9nazdIOQLZCIc3fU0G9gqVLkaGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/types": "7.120.3" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@sentry/core": { "version": "6.19.7", "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.19.7.tgz", @@ -3855,6 +4423,59 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/@sentry/integrations": { + "version": "7.120.3", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.120.3.tgz", + "integrity": "sha512-6i/lYp0BubHPDTg91/uxHvNui427df9r17SsIEXa2eKDwQ9gW2qRx5IWgvnxs2GV/GfSbwcx4swUB3RfEWrXrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/core": "7.120.3", + "@sentry/types": "7.120.3", + "@sentry/utils": "7.120.3", + "localforage": "^1.8.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/integrations/node_modules/@sentry/core": { + "version": "7.120.3", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.120.3.tgz", + "integrity": "sha512-vyy11fCGpkGK3qI5DSXOjgIboBZTriw0YDx/0KyX5CjIjDDNgp5AGgpgFkfZyiYiaU2Ww3iFuKo4wHmBusz1uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/types": "7.120.3", + "@sentry/utils": "7.120.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/integrations/node_modules/@sentry/types": { + "version": "7.120.3", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.120.3.tgz", + "integrity": "sha512-C4z+3kGWNFJ303FC+FxAd4KkHvxpNFYAFN8iMIgBwJdpIl25KZ8Q/VdGn0MLLUEHNLvjob0+wvwlcRBBNLXOow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/integrations/node_modules/@sentry/utils": { + "version": "7.120.3", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.120.3.tgz", + "integrity": "sha512-UDAOQJtJDxZHQ5Nm1olycBIsz2wdGX8SdzyGVHmD8EOQYAeDZQyIlQYohDe9nazdIOQLZCIc3fU0G9gqVLkaGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/types": "7.120.3" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@sentry/minimal": { "version": "6.19.7", "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.7.tgz", @@ -5397,50 +6018,638 @@ } }, "node_modules/@wordpress/e2e-test-utils-playwright": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.8.0.tgz", - "integrity": "sha512-/BzX6NujT8S3Ogj379Cnp1LsURFeyksnXz9jd9rK0KB9PhqPU0O3jmkt1Ugcs9jttOtANSvaBJqYC9W7kZuoNQ==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.23.0.tgz", + "integrity": "sha512-ity7Xpyuo4s0US8jo70u6WAluI/VLPo/hxfhOaLoUo+jujQUgM3pt0RzkiXKaQ9Eca2+lG/qEwoRA0HQmenI2A==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "change-case": "^4.1.2", + "form-data": "^4.0.0", + "get-port": "^5.1.1", + "lighthouse": "^12.2.2", + "mime": "^3.0.0", + "web-vitals": "^4.2.1" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + }, + "peerDependencies": { + "@playwright/test": ">=1" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/@puppeteer/browsers": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.4.tgz", + "integrity": "sha512-9DxbZx+XGMNdjBynIs4BRSz+M3iRDeB7qRcAr6UORFLphCIM2x3DXgOucvADiifcqCE4XePFUKcnaAMyGbrDlQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.0", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.1", + "tar-fs": "^3.0.8", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/@puppeteer/browsers/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/@puppeteer/browsers/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/@wordpress/e2e-test-utils-playwright/node_modules/@puppeteer/browsers/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/@sentry/core": { + "version": "7.120.3", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.120.3.tgz", + "integrity": "sha512-vyy11fCGpkGK3qI5DSXOjgIboBZTriw0YDx/0KyX5CjIjDDNgp5AGgpgFkfZyiYiaU2Ww3iFuKo4wHmBusz1uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/types": "7.120.3", + "@sentry/utils": "7.120.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/@sentry/node": { + "version": "7.120.3", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.120.3.tgz", + "integrity": "sha512-t+QtekZedEfiZjbkRAk1QWJPnJlFBH/ti96tQhEq7wmlk3VszDXraZvLWZA0P2vXyglKzbWRGkT31aD3/kX+5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry-internal/tracing": "7.120.3", + "@sentry/core": "7.120.3", + "@sentry/integrations": "7.120.3", + "@sentry/types": "7.120.3", + "@sentry/utils": "7.120.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/@sentry/types": { + "version": "7.120.3", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.120.3.tgz", + "integrity": "sha512-C4z+3kGWNFJ303FC+FxAd4KkHvxpNFYAFN8iMIgBwJdpIl25KZ8Q/VdGn0MLLUEHNLvjob0+wvwlcRBBNLXOow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/@sentry/utils": { + "version": "7.120.3", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.120.3.tgz", + "integrity": "sha512-UDAOQJtJDxZHQ5Nm1olycBIsz2wdGX8SdzyGVHmD8EOQYAeDZQyIlQYohDe9nazdIOQLZCIc3fU0G9gqVLkaGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/types": "7.120.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/axe-core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/chrome-launcher": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-1.2.0.tgz", + "integrity": "sha512-JbuGuBNss258bvGil7FT4HKdC3SC2K7UAEUqiPy3ACS3Yxo3hAW6bvFpCu2HsIJLgTqxgEX6BkujvzZfLpUD0Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^2.0.1" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.cjs" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/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": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/csp_evaluator": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.1.5.tgz", + "integrity": "sha512-EL/iN9etCTzw/fBnp0/uj0f5BOOGvZut2mzsiiBZ/FdT6gFQCKRO/tmcKOxn5drWZ2Ndm/xBb1SI4zwWbGtmIw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/devtools-protocol": { + "version": "0.0.1436416", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1436416.tgz", + "integrity": "sha512-iGLhz2WOrlBLcTcoVsFy5dPPUqILG6cc8MITYd5lV6i38gWG14bMXRH/d8G5KITrWHBnbsOnWHfc9Qs4/jej9Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@wordpress/e2e-test-utils-playwright/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_modules/@wordpress/e2e-test-utils-playwright/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/@wordpress/e2e-test-utils-playwright/node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/http-proxy-agent/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/@wordpress/e2e-test-utils-playwright/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/https-proxy-agent/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/@wordpress/e2e-test-utils-playwright/node_modules/intl-messageformat": { + "version": "10.7.16", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.16.tgz", + "integrity": "sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@formatjs/ecma402-abstract": "2.3.4", + "@formatjs/fast-memoize": "2.2.7", + "@formatjs/icu-messageformat-parser": "2.11.2", + "tslib": "^2.8.0" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/lighthouse": { + "version": "12.5.1", + "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-12.5.1.tgz", + "integrity": "sha512-ooOIqtBxOEnuX3yKtc8WiMPI/fPqHtXHaXU4ey87icRcY5I2B9+imk8i6U7duIO+yrU0WwbIwhmCs8s/FFNRgA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@paulirish/trace_engine": "0.0.50", + "@sentry/node": "^7.0.0", + "axe-core": "^4.10.3", + "chrome-launcher": "^1.1.2", + "configstore": "^5.0.1", + "csp_evaluator": "1.1.5", + "devtools-protocol": "0.0.1436416", + "enquirer": "^2.3.6", + "http-link-header": "^1.1.1", + "intl-messageformat": "^10.5.3", + "jpeg-js": "^0.4.4", + "js-library-detector": "^6.7.0", + "lighthouse-logger": "^2.0.1", + "lighthouse-stack-packs": "1.12.2", + "lodash-es": "^4.17.21", + "lookup-closest-locale": "6.2.0", + "metaviewport-parser": "0.3.0", + "open": "^8.4.0", + "parse-cache-control": "1.0.1", + "puppeteer-core": "^24.4.0", + "robots-parser": "^3.0.1", + "semver": "^5.3.0", + "speedline-core": "^1.4.3", + "third-party-web": "^0.26.5", + "tldts-icann": "^6.1.16", + "ws": "^7.0.0", + "yargs": "^17.3.1", + "yargs-parser": "^21.0.0" + }, + "bin": { + "chrome-debug": "core/scripts/manual-chrome-launcher.js", + "lighthouse": "cli/index.js", + "smokehouse": "cli/test/smokehouse/frontends/smokehouse-bin.js" + }, + "engines": { + "node": ">=18.16" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/lighthouse-logger": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-2.0.1.tgz", + "integrity": "sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/lighthouse-stack-packs": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/lighthouse-stack-packs/-/lighthouse-stack-packs-1.12.2.tgz", + "integrity": "sha512-Ug8feS/A+92TMTCK6yHYLwaFMuelK/hAKRMdldYkMNwv+d9PtWxjXEg6rwKtsUXTADajhdrhXyuNCJ5/sfmPFw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@wordpress/e2e-test-utils-playwright/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/@wordpress/e2e-test-utils-playwright/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/proxy-agent/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/@wordpress/e2e-test-utils-playwright/node_modules/puppeteer-core": { + "version": "24.8.2", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.8.2.tgz", + "integrity": "sha512-wNw5cRZOHiFibWc0vdYCYO92QuKTbJ8frXiUfOq/UGJWMqhPoBThTKkV+dJ99YyWfzJ2CfQQ4T1nhhR0h8FlVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.10.4", + "chromium-bidi": "5.1.0", + "debug": "^4.4.0", + "devtools-protocol": "0.0.1439962", + "typed-query-selector": "^2.12.0", + "ws": "^8.18.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/puppeteer-core/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/puppeteer-core/node_modules/devtools-protocol": { + "version": "0.0.1439962", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1439962.tgz", + "integrity": "sha512-jJF48UdryzKiWhJ1bLKr7BFWUQCEIT5uCNbDLqkQJBtkFxYzILJH44WN0PDKMIlGDN7Utb8vyUY85C3w4R/t2g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/puppeteer-core/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/@wordpress/e2e-test-utils-playwright/node_modules/puppeteer-core/node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/tar-fs": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.8.tgz", + "integrity": "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/tar-stream": { + "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": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/third-party-web": { + "version": "0.26.6", + "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.26.6.tgz", + "integrity": "sha512-GsjP92xycMK8qLTcQCacgzvffYzEqe29wyz3zdKVXlfRD5Kz1NatCTOZEeDaSd6uCZXvGd2CNVtQ89RNIhJWvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/web-vitals": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.3.tgz", + "integrity": "sha512-/CFAm1mNxSmOj6i0Co+iGFJ58OS4NRGVP+AWS/l509uIK5a1bSoIVaHz/ZumpHTfHSZBpgrJ+wjfpAOrTHok5Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@wordpress/e2e-test-utils-playwright/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": "GPL-2.0-or-later", + "license": "MIT", "dependencies": { - "change-case": "^4.1.2", - "form-data": "^4.0.0", - "get-port": "^5.1.1", - "lighthouse": "^10.4.0", - "mime": "^3.0.0", - "web-vitals": "^4.2.1" + "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": ">=18.12.0", - "npm": ">=8.19.2" - }, - "peerDependencies": { - "@playwright/test": ">=1" + "node": ">=12" } }, - "node_modules/@wordpress/e2e-test-utils-playwright/node_modules/web-vitals": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.3.tgz", - "integrity": "sha512-/CFAm1mNxSmOj6i0Co+iGFJ58OS4NRGVP+AWS/l509uIK5a1bSoIVaHz/ZumpHTfHSZBpgrJ+wjfpAOrTHok5Q==", + "node_modules/@wordpress/e2e-test-utils-playwright/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": "Apache-2.0" + "license": "ISC", + "engines": { + "node": ">=12" + } }, "node_modules/@wordpress/env": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-10.8.0.tgz", - "integrity": "sha512-kU66r7y/3AnUd6D4XeWE7h6bVJmzteTKDMMWoIoJsSNI5YP/BmXRa+/dJ4bwk0KFKxfh3tcRBhearGeEa4TGBw==", + "version": "10.23.0", + "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-10.23.0.tgz", + "integrity": "sha512-4OIydQJWIjkjR6o0YIC4zI853NrhaiaNkU47BpIh+OGEwMbDG4OZgith4l3ZlHP1ZGSg5qBt3gZSmXK/e0aKmQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { + "@inquirer/prompts": "^7.2.0", "chalk": "^4.0.0", "copy-dir": "^1.3.0", "docker-compose": "^0.24.3", "extract-zip": "^1.6.7", "got": "^11.8.5", - "inquirer": "^7.1.0", "js-yaml": "^3.13.1", "ora": "^4.0.2", - "rimraf": "^3.0.2", + "rimraf": "^5.0.10", "simple-git": "^3.5.0", "terminal-link": "^2.0.0", "yargs": "^17.3.0" @@ -5468,6 +6677,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@wordpress/env/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@wordpress/env/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5540,6 +6759,27 @@ "extract-zip": "cli.js" } }, + "node_modules/@wordpress/env/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@wordpress/env/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -5549,6 +6789,22 @@ "node": ">=8" } }, + "node_modules/@wordpress/env/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@wordpress/env/node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -5568,16 +6824,16 @@ "dev": true }, "node_modules/@wordpress/env/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", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", "dev": true, + "license": "ISC", "dependencies": { - "glob": "^7.1.3" + "glob": "^10.3.7" }, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -7022,12 +8278,82 @@ "dev": true }, "node_modules/bare-events": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", - "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", "dev": true, + "license": "Apache-2.0", "optional": true }, + "node_modules/bare-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.5.tgz", + "integrity": "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", + "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", + "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -7500,7 +8826,8 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/check-node-version": { "version": "4.2.1", @@ -7658,6 +8985,27 @@ "node": ">=6.0" } }, + "node_modules/chromium-bidi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-5.1.0.tgz", + "integrity": "sha512-9MSRhWRVoRPDG0TgzkHrshFSJJNZzfY5UFqUMuksg7zL1yoZIZ3jLB0YAgHclbiAxPI86pBnwDX1tbzoiV8aFw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/chromium-bidi/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/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -7744,12 +9092,13 @@ } }, "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "dev": true, + "license": "ISC", "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/cliui": { @@ -9689,6 +11038,13 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -11197,6 +12553,7 @@ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -11737,6 +13094,36 @@ "node": ">=0.10.0" } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -13046,6 +14433,13 @@ "integrity": "sha512-W7+sO6/yhxy83L0G7xR8YAc5Z5QFtYEXXRV6EaE8tuYBZJnA3gVgp3q7X7muhLZVodeb9UfvjSbwt9VJwjIYAg==", "dev": true }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true, + "license": "MIT" + }, "node_modules/immutable": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", @@ -13114,159 +14508,47 @@ "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/inquirer/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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/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, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inquirer/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==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=0.8.19" } }, - "node_modules/inquirer/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 - }, - "node_modules/inquirer/node_modules/has-flag": { + "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/inquirer/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "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==", "dev": true, "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/inquirer/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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, - "node_modules/inquirer/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "node_modules/internal-slot": { @@ -14151,6 +15433,22 @@ "set-function-name": "^2.0.1" } }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/java-properties": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", @@ -16271,6 +17569,16 @@ "node": ">= 0.8.0" } }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/liftup": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", @@ -16737,6 +18045,16 @@ "node": ">=8.9.0" } }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lie": "3.1.1" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -16755,6 +18073,13 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.capitalize": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", @@ -17640,6 +18965,16 @@ "node": ">=0.10.0" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mitt": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", @@ -21809,32 +23144,31 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", - "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "pac-resolver": "^7.0.0", - "socks-proxy-agent": "^8.0.2" + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" } }, "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, + "license": "MIT", "engines": { "node": ">= 14" } @@ -21853,12 +23187,13 @@ } }, "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -21878,6 +23213,13 @@ "node": ">= 14" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -22048,6 +23390,30 @@ "node": ">=0.10.0" } }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -22231,13 +23597,13 @@ } }, "node_modules/playwright": { - "version": "1.47.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.47.2.tgz", - "integrity": "sha512-nx1cLMmQWqmA3UsnjaaokyoUpdVaaDhJhMoxX2qj3McpjnsqFHs516QAKYhqHAgOP+oCFTEOCOAaD1RgD/RQfA==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.52.0.tgz", + "integrity": "sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.47.2" + "playwright-core": "1.52.0" }, "bin": { "playwright": "cli.js" @@ -22250,9 +23616,9 @@ } }, "node_modules/playwright-core": { - "version": "1.47.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.2.tgz", - "integrity": "sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.52.0.tgz", + "integrity": "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -23356,12 +24722,6 @@ } ] }, - "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 - }, "node_modules/quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", @@ -23898,15 +25258,6 @@ "node": ">=10.0.0" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/run-con": { "version": "1.2.12", "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.12.tgz", @@ -24766,27 +26117,26 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", - "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", + "agent-base": "^7.1.2", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" }, "engines": { "node": ">= 14" } }, "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, + "license": "MIT", "engines": { "node": ">= 14" } @@ -25075,13 +26425,14 @@ } }, "node_modules/streamx": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz", - "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==", + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", + "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", "dev": true, + "license": "MIT", "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" }, "optionalDependencies": { "bare-events": "^2.2.0" @@ -25143,6 +26494,29 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/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/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -25253,6 +26627,20 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -25950,6 +27338,16 @@ "node": ">=8" } }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", @@ -25992,11 +27390,29 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tldts-icann": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-6.1.86.tgz", + "integrity": "sha512-NFxmRT2lAEMcCOBgeZ0NuM0zsK/xgmNajnY6n4S1mwAKocft2s2ise1O3nQxrH3c+uY6hgHUV9GGNVp7tUE4Sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + } + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -26158,10 +27574,11 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", @@ -26303,6 +27720,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", + "dev": true, + "license": "MIT" + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -27405,6 +28829,61 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "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": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -27584,12 +29063,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "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==", + "version": "3.24.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", + "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", + "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 5010eb50..4df7d7f4 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,11 @@ { "name": "themeisle-sdk", "description": "Themeisle SDK", - "version": "3.3.44", + "version": "3.3.46", "scripts": { "dev": "npm run start", "start:promos": "wp-scripts start assets/js/src/index.js --output-path=assets/js/build/promos", "start:survey": "wp-scripts start assets/js/src/survey_deps.js --output-path=assets/js/build/survey --devtool inline-source-map", - "start:banner": "wp-scripts start assets/js/src/banner.js --output-path=assets/js/build/banner --devtool inline-source-map", "build:promos": "wp-scripts build assets/js/src/index.js --output-path=assets/js/build/promos", "start:about": "wp-scripts start assets/js/src/about/about.js --output-path=assets/js/build/about", "build:about": "wp-scripts build assets/js/src/about/about.js --output-path=assets/js/build/about", @@ -14,7 +13,6 @@ "build:float": "wp-scripts build assets/js/src/float_widget/float.js --output-path=assets/js/build/float_widget", "build:tracking": "wp-scripts build assets/js/src/tracking.js --output-path=assets/js/build/tracking", "build:survey": "wp-scripts build assets/js/src/survey_deps.js --output-path=assets/js/build/survey", - "build:banner": "wp-scripts build assets/js/src/banner.js --output-path=assets/js/build/banner", "start": "npm-run-all --parallel start:*", "build": "npm-run-all --parallel build:*", "release": "semantic-release --debug", @@ -28,29 +26,31 @@ "test:unit": "wp-scripts test-unit-js", "test:unit:help": "wp-scripts test-unit-js --help", "test:unit:watch": "wp-scripts test-unit-js --watch", - "test:unit:debug": "wp-scripts --inspect-brk test-unit-js --runInBand --no-cache" + "test:unit:debug": "wp-scripts --inspect-brk test-unit-js --runInBand --no-cache", + "test:e2e:playwright:formbricks": "wp-scripts test-playwright --config tests/e2e/playwright.config.js ./tests/e2e/specs/formbricks.spec.js" }, "author": "Themeisle", "devDependencies": { + "@playwright/test": "^1.52.0", "@semantic-release/changelog": "^5.0.0", "@semantic-release/exec": "^5.0.0", "@semantic-release/git": "^9.0.0", - "@wordpress/e2e-test-utils-playwright": "^1.8.0", - "@wordpress/env": "^10.8.0", + "@wordpress/e2e-test-utils-playwright": "^1.23.0", + "@wordpress/env": "^10.23.0", "@wordpress/postcss-plugins-preset": "^4.17.0", "@wordpress/scripts": "^27.8.0", "conventional-changelog-simple-preset": "^1.0.20", "eslint-config-wordpress": "^2.0.0", "grunt-version": "^1.3.1", "npm-run-all": "^4.1.5", - "playwright": "^1.47.2", + "playwright": "^1.52.0", "postcss-combine-media-query": "^1.0.1", "postcss-custom-media": "^9.1.3", "postcss-sort-media-queries": "^5.1.0", "semantic-release": "^17.4.7" }, "dependencies": { - "@formbricks/js": "^3.0.2", + "@formbricks/js": "^4.1.0", "object-hash": "^3.0.0" } } diff --git a/src/Common/Abstract_module.php b/src/Common/Abstract_module.php index 54b9a59d..2121b85b 100644 --- a/src/Common/Abstract_module.php +++ b/src/Common/Abstract_module.php @@ -41,6 +41,7 @@ abstract class Abstract_Module { 'templates-patterns-collection' => 'templates-patterns-collection/templates-patterns-collection.php', 'wpcf7-redirect' => 'wpcf7-redirect/wpcf7-redirect.php', 'wp-full-stripe-free' => 'wp-full-stripe-free/wp-full-stripe.php', + 'learning-management-system' => 'learning-management-system/lms.php', ]; /** @@ -220,4 +221,13 @@ public function is_plugin_active( $plugin ) { return is_plugin_active( $plugin ); } + + /** + * Get the current date. + * + * @return \DateTime The date time. + */ + public function get_current_date() { + return apply_filters( 'themeisle_sdk_current_date', new \DateTime( 'now' ) ); + } } diff --git a/src/Loader.php b/src/Loader.php index afd4917c..efd44bf6 100644 --- a/src/Loader.php +++ b/src/Loader.php @@ -72,10 +72,10 @@ final class Loader { */ public static $labels = [ 'announcements' => [ - 'hurry_up' => 'Hurry up! Only %s left.', - 'sale_live' => 'Themeisle Black Friday Sale is Live!', - 'learn_more' => 'Learn more', - 'max_savings' => 'Enjoy Maximum Savings on %s', + 'notice_link_label' => 'See the Offer', + 'max_savings' => 'Our biggest sale of the year: %s OFF everything! Don\'t miss this limited-time offer.', + 'black_friday' => 'Black Friday Sale', + 'time_left' => '%s left', ], 'compatibilities' => [ 'notice' => '%s requires a newer version of %s. Please %supdate%s %s %s to the latest version.', @@ -172,6 +172,12 @@ final class Loader { 'dismisscta' => 'Dismiss this notice.', 'message' => 'Enhance your donation page with WP Full Pay—create custom Stripe forms for one-time and recurring donations, manage transactions easily, and boost support with a seamless setup.', ], + 'masteriyo' => [ + 'gotodash' => 'Go to Masteriyo Dashboard', + 'install' => 'Install Masteriyo', + 'dismisscta' => 'Dismiss this notice.', + 'message' => 'Transform your site into a learning hub with Masteriyo LMS. Build engaging courses with intuitive tools, track student progress effortlessly, and grow your education business with powerful marketing features and seamless payment integration.', + ], ], 'welcome' => [ 'ctan' => 'No, thanks.', diff --git a/src/Modules/About_us.php b/src/Modules/About_us.php index cae77736..ca2bf470 100644 --- a/src/Modules/About_us.php +++ b/src/Modules/About_us.php @@ -14,6 +14,7 @@ * 'has_upgrade_menu' => , * 'upgrade_link' => , * 'upgrade_text' => 'Get Pro Version', + * 'review_link' => false, // Leave it empty for default WPorg link or false to hide it. * ] * } * @@ -182,6 +183,8 @@ public function enqueue_about_page_script() { $asset_file = require $themeisle_sdk_max_path . '/assets/js/build/about/about.asset.php'; $deps = array_merge( $asset_file['dependencies'], [ 'updates' ] ); + do_action( 'themeisle_internal_page', $this->product->get_slug(), 'about_us' ); + wp_register_script( $handle, $this->get_sdk_uri() . 'assets/js/build/about/about.js', $deps, $asset_file['version'], true ); wp_localize_script( $handle, 'tiSDKAboutData', $this->get_about_localization_data() ); @@ -228,6 +231,7 @@ private function get_about_localization_data() { ], 'canInstallPlugins' => current_user_can( 'install_plugins' ), 'canActivatePlugins' => current_user_can( 'activate_plugins' ), + 'showReviewLink' => ! ( isset( $this->about_data['review_link'] ) && false === $this->about_data['review_link'] ), ]; } @@ -334,6 +338,9 @@ private function get_other_products_data() { 'description' => Loader::$labels['about_us']['others']['neve_desc'], 'icon' => $this->get_sdk_uri() . 'assets/images/neve.png', ], + 'learning-management-system' => [ + 'name' => 'Masteriyo LMS', + ], 'otter-blocks' => [ 'name' => 'Otter', ], diff --git a/src/Modules/Announcements.php b/src/Modules/Announcements.php index f9fac09f..59765c29 100644 --- a/src/Modules/Announcements.php +++ b/src/Modules/Announcements.php @@ -13,6 +13,7 @@ namespace ThemeisleSDK\Modules; +use DateTime; use ThemeisleSDK\Common\Abstract_Module; use ThemeisleSDK\Loader; use ThemeisleSDK\Product; @@ -21,57 +22,22 @@ * Announcement module for the ThemeIsle SDK. */ class Announcements extends Abstract_Module { + + const SALE_DURATION_BLACK_FRIDAY = '+7 days'; // DateTime modifier. (Include Cyber Monday) /** - * Holds the timeline for the announcements. + * Mark if the notice was already loaded. * - * @var array + * @var boolean */ - private static $timeline = array( - 'black_friday' => array( - 'start' => '2024-11-25 00:00:00', - 'end' => '2024-12-03 23:59:59', - 'rendered' => false, - ), - ); + private static $notice_loaded = false; /** - * Mark is a banner for a product was already loaded. - * - * @var array - */ - private static $banner_loaded = array(); - - const PLUGIN_PAGE = 'https://themeisle.com/plugins'; - const THEME_PAGE = 'https://themeisle.com/themes'; - const REVIVE_SOCIAL = 'https://revive.social/plugins'; - - /** - * Holds the option prefix for the announcements. - * - * This is used to store the dismiss date for each announcement. - * - * @var string - */ - public $option_prefix = 'themeisle_sdk_announcement_'; - - /** - * Holds the time for the current request. - * + * The product to be used. + * * @var string */ - public $time = ''; - - /** - * Constructor for the Announcements module. - * - * @param array $timeline Optional. An array representing the timeline of announcements. Default is an empty array. - */ - public function __construct( $timeline = array() ) { - if ( is_array( $timeline ) && ! empty( $timeline ) ) { - self::$timeline = $timeline; - } - } + private static $current_product = ''; /** * Check if the module can be loaded. @@ -96,16 +62,16 @@ public function can_load( $product ) { * @return void */ public function load( $product ) { - if ( ! current_user_can( 'install_plugins' ) ) { - return; - } - $this->product = $product; - + + add_filter( + 'themeisle_sdk_is_black_friday_sale', + function( $is_black_friday ) { + return $this->is_black_friday_sale( $this->get_current_date() ); + } + ); + add_action( 'admin_init', array( $this, 'load_announcements' ) ); - add_filter( 'themeisle_sdk_active_announcements', array( $this, 'get_active_announcements' ) ); - add_filter( 'themeisle_sdk_announcements', array( $this, 'get_announcements_for_plugins' ) ); - add_action( 'themeisle_sdk_load_banner', array( $this, 'load_dashboard_banner_renderer' ) ); } /** @@ -114,197 +80,124 @@ public function load( $product ) { * @return void */ public function load_announcements() { - $active = $this->get_active_announcements(); - - if ( empty( $active ) ) { + if ( ! $this->is_black_friday_sale( $this->get_current_date() ) ) { return; } - - foreach ( $active as $announcement ) { - - $method = $announcement . '_notice_render'; - - if ( method_exists( $this, $method ) ) { - add_action( 'admin_notices', array( $this, $method ) ); - } - } - - // Load the ajax handler. - add_action( 'wp_ajax_themeisle_sdk_dismiss_announcement', array( $this, 'disable_notification_ajax' ) ); - } - - /** - * Get all active announcements. - * - * @return array List of active announcements. - */ - public function get_active_announcements() { - $active = array(); - - foreach ( self::$timeline as $announcement_slug => $dates ) { - if ( $this->is_active( $dates ) && $this->can_show( $announcement_slug, $dates ) ) { - $active[] = $announcement_slug; - } - } - - return $active; + + add_action( 'admin_notices', array( $this, 'black_friday_notice_render' ) ); + add_action( 'wp_ajax_themeisle_sdk_dismiss_black_friday_notice', array( $this, 'disable_notification_ajax' ) ); + add_action( + 'themeisle_internal_page', + function( $plugin, $page_slug ) { + self::$current_product = $plugin; + }, + 10, + 2 + ); } - /** - * Get all announcements along with plugin specific data. - * - * @return array List of announcements. - */ - public function get_announcements_for_plugins() { - - $announcements = array(); - - foreach ( self::$timeline as $announcement => $dates ) { - $announcements[ $announcement ] = $dates; - - if ( false !== strpos( $announcement, 'black_friday' ) ) { - $announcements[ $announcement ]['active'] = $this->is_active( $dates ); - - // Dashboard banners URLs. - $announcements[ $announcement ]['neve_dashboard_url'] = tsdk_utmify( self::THEME_PAGE . '/neve/blackfriday/', 'bfcm24', 'dashboard' ); - $announcements[ $announcement ]['hestia_dashboard_url'] = tsdk_utmify( self::THEME_PAGE . '/hestia/blackfriday/', 'bfcm24', 'dashboard' ); - $announcements[ $announcement ]['feedzy_dashboard_url'] = tsdk_utmify( self::PLUGIN_PAGE . '/feedzy-rss-feeds/blackfriday/', 'bfcm24', 'dashboard' ); - $announcements[ $announcement ]['otter_dashboard_url'] = tsdk_utmify( self::PLUGIN_PAGE . '/otter-blocks/blackfriday/', 'bfcm24', 'dashboard' ); - $announcements[ $announcement ]['mpg_dashboard_url'] = tsdk_utmify( self::PLUGIN_PAGE . '/multi-pages-generator/blackfriday', 'bfcm24', 'dashboard' ); - $announcements[ $announcement ]['ppom_dashboard_url'] = tsdk_utmify( self::PLUGIN_PAGE . '/ppom-pro/blackfriday/', 'bfcm24', 'dashboard' ); - $announcements[ $announcement ]['rfc7r_dashboard_url'] = tsdk_utmify( self::PLUGIN_PAGE . '/wpcf7-redirect/blackfriday/', 'bfcm24', 'dashboard' ); - $announcements[ $announcement ]['hyve_dashboard_url'] = tsdk_utmify( self::PLUGIN_PAGE . '/hyve/', 'bfcm24', 'dashboard' ); - $announcements[ $announcement ]['spc_dashboard_url'] = tsdk_utmify( self::PLUGIN_PAGE . '/super-page-cache-pro/blackfriday/', 'bfcm24', 'dashboard' ); - $announcements[ $announcement ]['visualizer_dashboard_url'] = tsdk_utmify( self::PLUGIN_PAGE . '/visualizer-charts-and-graphs/blackfriday/', 'bfcm24', 'dashboard' ); - $announcements[ $announcement ]['feedzy_dashboard_url'] = tsdk_utmify( self::PLUGIN_PAGE . '/feedzy-rss-feeds/blackfriday/', 'bfcm24', 'dashboard' ); - $announcements[ $announcement ]['rop_dashboard_url'] = tsdk_utmify( self::REVIVE_SOCIAL . '/revive-old-post/', 'bfcm24', 'dashboard' ); - - // Customizer banners URLs. - $announcements[ $announcement ]['hestia_customizer_url'] = tsdk_utmify( 'https://themeisle.com/black-friday/', 'bfcm24', 'hestiacustomizer' ); - $announcements[ $announcement ]['neve_customizer_url'] = tsdk_utmify( 'https://themeisle.com/black-friday/', 'bfcm24', 'nevecustomizer' ); - - // Banners urgency text. - $remaining_time = $this->get_remaining_time_for_event( $dates['end'] ); - $announcements[ $announcement ]['remaining_time'] = $remaining_time; - $announcements[ $announcement ]['urgency_text'] = ! empty( $remaining_time ) ? sprintf( Loader::$labels['announcements']['hurry_up'], $remaining_time ) : ''; - - $announcements[ $announcement ]['feedzy_banner_src'] = defined( 'FEEDZY_ABSURL' ) ? FEEDZY_ABSURL . 'img/black-friday.jpg' : ''; - $announcements[ $announcement ]['visualizer_banner_src'] = defined( 'VISUALIZER_ABSURL' ) ? VISUALIZER_ABSURL . 'images/black-friday.jpg' : ''; - $announcements[ $announcement ]['ppom_banner_src'] = defined( 'PPOM_URL' ) ? PPOM_URL . '/images/black-friday.jpg' : ''; - $announcements[ $announcement ]['mpg_banner_src'] = defined( 'MPG_BASE_IMG_PATH' ) ? MPG_BASE_IMG_PATH . '/black-friday.jpg' : ''; - $announcements[ $announcement ]['spc_banner_src'] = defined( 'SWCFPC_PLUGIN_URL' ) ? SWCFPC_PLUGIN_URL . 'assets/img/black-friday.jpg' : ''; - $announcements[ $announcement ]['hestia_banner_src'] = defined( 'HESTIA_ASSETS_URL' ) ? HESTIA_ASSETS_URL . 'img/black-friday.jpg' : ''; - $announcements[ $announcement ]['hyve_banner_src'] = defined( 'HYVE_LITE_URL' ) ? HYVE_LITE_URL . 'assets/images/black-friday.jpg' : ''; - $announcements[ $announcement ]['rfc7r_banner_src'] = defined( 'WPCF7_PRO_REDIRECT_ASSETS_PATH' ) ? WPCF7_PRO_REDIRECT_ASSETS_PATH . 'images/black-friday.jpg' : ''; - $announcements[ $announcement ]['rop_banner_src'] = defined( 'ROP_LITE_URL' ) ? ROP_LITE_URL . 'assets/img/black-friday.jpg' : ''; - - foreach ( $announcements[ $announcement ] as $key => $value ) { - if ( strpos( $key, '_url' ) !== false ) { - $announcements[ $announcement ][ $key ] = tsdk_translate_link( $value ); - } - } - } - } - return apply_filters( 'themeisle_sdk_announcements_data', $announcements ); - } /** - * Get the announcement data. + * Get the remaining time for the event in a human-readable format. * - * @param string $announcement The announcement to get the data for. + * @param DateTime $end_date The end date for event. * - * @return array + * @return string Remaining time for the event. */ - public function get_announcement_data( $announcement ) { - return ! empty( $announcement ) && is_string( $announcement ) && isset( self::$timeline[ $announcement ] ) ? self::$timeline[ $announcement ] : array(); + public function get_remaining_time_for_event( $end_date ) { + return human_time_diff( $this->get_current_date()->getTimestamp(), $end_date->getTimestamp() ); } /** - * Check if the announcement has an active timeline. + * Check if the announcement can be shown. * - * @param array $dates The announcement to check. + * @param DateTime $current_date The announcement to check. + * @param int $user_id The user id to show the notice. * * @return bool */ - public function is_active( $dates ) { + public function can_show_notice( $current_date, $user_id ) { + $current_year = $current_date->format( 'Y' ); + $user_notice_dismiss_timestamp = get_user_meta( $user_id, 'themeisle_sdk_dismissed_notice_black_friday', true ); - if ( empty( $this->time ) ) { - $this->time = current_time( 'Y-m-d' ); + if ( empty( $user_notice_dismiss_timestamp ) ) { + return true; } - $start = isset( $dates['start'] ) ? $dates['start'] : null; - $end = isset( $dates['end'] ) ? $dates['end'] : null; + $dismissed_year = wp_date( 'Y', $user_notice_dismiss_timestamp ); - if ( $start && $end ) { - return $start <= $this->time && $this->time <= $end; - } elseif ( $start ) { - return $this->time >= $start; - } elseif ( $end ) { - return $this->time <= $end; - } - - return false; + return $current_year !== $dismissed_year; } /** - * Get the remaining time for the event in a human readable format. + * Calculate the start date for Black Friday based on the year of the given date. * - * @param string $end_date The end date for event. + * Black Friday is the day after the Thanksgiving and the sale starts on the Monday of that week. * - * @return string Remaining time for the event. + * @param DateTime $date The current date object, used to determine the year. + * @return DateTime The start date of Black Friday for the given year. */ - public function get_remaining_time_for_event( $end_date ) { - if ( empty( $end_date ) || ! is_string( $end_date ) ) { - return ''; - } + public function get_start_date( $date ) { + $year = $date->format( 'Y' ); + $black_friday = new DateTime( "last friday of november {$year}" ); - return human_time_diff( time(), strtotime( $end_date ) ); + $sale_start = clone $black_friday; + $sale_start->modify( 'monday this week' ); + $sale_start->setTime( 0, 0 ); + return $sale_start; } /** - * Check if the announcement can be shown. + * Calculate the event end date. * - * @param string $announcement_slug The announcement to check. - * @param array $dates The announcement to check. - * - * @return bool + * @param DateTime $start_date The start date. + * @return DateTime The end date. */ - public function can_show( $announcement_slug, $dates ) { - $dismiss_date = get_option( $this->option_prefix . $announcement_slug, false ); - - if ( false === $dismiss_date ) { - return true; - } - - // If the start date is after the dismiss date, show the notice. - $start = isset( $dates['start'] ) ? $dates['start'] : null; - if ( $start && $dismiss_date < $start ) { - return true; - } - - return false; + public function get_end_date( $start_date ) { + $black_friday_end = clone $start_date; + $black_friday_end->modify( self::SALE_DURATION_BLACK_FRIDAY ); + $black_friday_end->setTime( 23, 59, 59 ); + return $black_friday_end; } /** - * Disable the notification via ajax. + * Check if the current date falls within the Black Friday sale period. * - * @return void + * @param DateTime $current_date The date to check. + * @return bool True if the date is within the Black Friday sale period, false otherwise. */ - public function disable_notification_ajax() { - if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['nonce'] ), 'dismiss_themeisle_event_notice' ) ) { - wp_die( 'Invalid nonce! Refresh the page and try again.' ); - } - - if ( ! isset( $_POST['announcement'] ) || ! is_string( $_POST['announcement'] ) ) { - wp_die( 'Invalid announcement! Refresh the page and try again.' ); - } + public function is_black_friday_sale( $current_date ) { + $black_friday_start_date = $this->get_start_date( $current_date ); + $black_friday_end = $this->get_end_date( $black_friday_start_date ); + return $black_friday_start_date <= $current_date && $current_date <= $black_friday_end; + } - $announcement = sanitize_key( $_POST['announcement'] ); + /** + * Get the notice data. + * + * @return array The notice data. + */ + public function get_notice_data() { + $time_left_label = $this->get_remaining_time_for_event( $this->get_end_date( $this->get_start_date( $this->get_current_date() ) ) ); + $time_left_label = sprintf( Loader::$labels['announcements']['time_left'], $time_left_label ); - update_option( $this->option_prefix . $announcement, current_time( 'Y-m-d' ) ); - wp_die( 'success' ); + $utm_location = 'globalnotice'; + if ( ! empty( $this->product ) ) { + $utm_location = $this->product->get_friendly_name(); + } + + $sale_title = Loader::$labels['announcements']['black_friday']; + $sale_url = tsdk_translate_link( tsdk_utmify( 'https://themeisle.com/blackfriday/', 'bfcm25', $utm_location ) ); + $sale_message = sprintf( Loader::$labels['announcements']['max_savings'], '50%' ); + + return array( + 'title' => $sale_title, + 'sale_url' => $sale_url, + 'message' => $sale_message, + 'time_left' => $time_left_label, + ); } /** @@ -315,183 +208,203 @@ public function disable_notification_ajax() { public function black_friday_notice_render() { // Prevent the notice from being rendered twice. - if ( self::$timeline['black_friday']['rendered'] ) { + if ( self::$notice_loaded ) { return; } - self::$timeline['black_friday']['rendered'] = true; + self::$notice_loaded = true; + + $all_configs = apply_filters( 'themeisle_sdk_blackfriday_data', array( 'default' => $this->get_notice_data() ) ); - $product_names = array(); + if ( empty( $all_configs ) ) { + return; + } - foreach ( Loader::get_products() as $product ) { - $slug = $product->get_slug(); + $data = end( $all_configs ); + + if ( ! empty( self::$current_product ) && isset( $all_configs[ self::$current_product ] ) ) { + $data = $all_configs[ self::$current_product ]; + } - // NOTE: No notice if the user has at least one Pro product. - if ( $product->requires_license() ) { - return; + if ( empty( $data ) || ! is_array( $data ) ) { + return; + } + + $current_user_id = get_current_user_id(); + $can_dismiss = true; + + if ( ! empty( $data['dismiss'] ) ) { + $can_dismiss = $data['dismiss']; + } else { + // Disable by default if we are on a product page. + if ( 0 < did_action( 'themeisle_internal_page' ) ) { + $can_dismiss = false; } + } - $product_names[] = $product->get_name(); + if ( $can_dismiss && ! $this->can_show_notice( $this->get_current_date(), $current_user_id ) ) { + return; } - // Randomize the products and get only 4. - shuffle( $product_names ); - $product_names = array_slice( $product_names, 0, 4 ); + $sale_url = ! empty( $data['sale_url'] ) ? $data['sale_url'] : ''; + $hide_other_notices = ! empty( $data['hide_other_notices'] ) ? $data['hide_other_notices'] : ! $can_dismiss; + $dismiss_notice_url = wp_nonce_url( + add_query_arg( + array( 'action' => 'themeisle_sdk_dismiss_black_friday_notice' ), + admin_url( 'admin-ajax.php' ) + ), + 'dismiss_themeisle_event_notice' + ); + + if ( empty( $sale_url ) ) { + return; + } + + if ( ! current_user_can( 'install_plugins' ) ) { + $sale_url = remove_query_arg( 'lkey', $sale_url ); + } ?> -
- -

- - - . - - -

+
+
+ +
+

+ + + + +

+

+ +

+
+
+ + + +
+ + + + + +
- get_announcements_for_plugins() as $announcement ) { - if ( false === $announcement['active'] ) { - continue; - } - - $cta_key = $product_key . '_dashboard_url'; - $banner_src_key = $product_key . '_banner_src'; - - if ( - ! isset( $announcement[ $cta_key ] ) || - ! isset( $announcement[ $banner_src_key ] ) || - empty( $announcement[ $banner_src_key ] ) || - ! isset( $announcement['urgency_text'] ) - ) { - continue; - } - - $banner_data = array( - 'content' => $this->render_banner( - array( - 'cta_url' => $announcement[ $cta_key ], - 'img_src' => $announcement[ $banner_src_key ], - 'urgency_text' => $announcement['urgency_text'], - ) - ), - ); - - break; - } - - if ( empty( $banner_data ) ) { - return; - } + public function disable_notification_ajax() { + check_ajax_referer( 'dismiss_themeisle_event_notice' ); - do_action( 'themeisle_sdk_dependency_enqueue_script', 'banner' ); - wp_localize_script( $banner_handler, 'tsdk_banner_data', $banner_data ); - } + update_user_meta( get_current_user_id(), 'themeisle_sdk_dismissed_notice_black_friday', $this->get_current_date()->getTimestamp() ); - /** - * Renders a banner with the provided settings. - * - * @param array $settings { - * Optional. An array of settings for the banner. - * - * @type string $cta_url The URL for the call-to-action link. - * @type string $img_src The source URL for the banner image. - * @type string $urgency_text The urgency text to display on the banner. - * } - * @return string The HTML output of the banner. - */ - public function render_banner( $settings = array() ) { - if ( empty( $settings ) ) { - return ''; + $return_page_url = wp_get_referer(); + if ( empty( $return_page_url ) ) { + $return_page_url = admin_url(); } - - return wp_kses_post( - wp_sprintf( - '
%s
', - esc_url_raw( $settings['cta_url'] ), - esc_url_raw( $settings['img_src'] ), - sanitize_text_field( $settings['urgency_text'] ) - ) - ); + + wp_safe_redirect( $return_page_url ); + exit; } } diff --git a/src/Modules/Featured_plugins.php b/src/Modules/Featured_plugins.php index 326ac5e0..89969fa2 100644 --- a/src/Modules/Featured_plugins.php +++ b/src/Modules/Featured_plugins.php @@ -13,6 +13,7 @@ namespace ThemeisleSDK\Modules; use ThemeisleSDK\Common\Abstract_Module; +use ThemeisleSDK\Loader; use ThemeisleSDK\Product; // Exit if accessed directly. @@ -32,6 +33,13 @@ class Featured_Plugins extends Abstract_Module { */ private $transient_key = 'themeisle_sdk_featured_plugins_'; + /** + * The current product instance. + * + * @var Product|null + */ + protected $product = null; + /** * Check if the module can be loaded. * @@ -59,6 +67,8 @@ public function can_load( $product ) { * @return void */ public function load( $product ) { + $this->product = $product; + if ( ! current_user_can( 'install_plugins' ) ) { return; } @@ -70,6 +80,57 @@ public function load( $product ) { add_filter( 'themeisle_sdk_plugin_api_filter_registered', '__return_true' ); add_filter( 'plugins_api_result', [ $this, 'filter_plugin_api_results' ], 10, 3 ); + + // Enqueue inline JS only on plugin-install.php. + add_action( 'admin_enqueue_scripts', [ $this, 'maybe_add_inline_js' ] ); + } + + /** + * Enqueue inline JavaScript only on plugin-install.php. + * + * @return void + */ + public function maybe_add_inline_js() { + $screen = get_current_screen(); + if ( isset( $screen->base ) && 'plugin-install' === $screen->base ) { + add_action( + 'admin_footer', + function() { + $text = esc_html( sprintf( Loader::$labels['promotions']['recommended'], $this->product->get_friendly_name() ) ); + + echo ''; + } + ); + } } /** @@ -87,6 +148,11 @@ public function filter_plugin_api_results( $res, $action, $args ) { return $res; } + if ( isset( $args->page ) && 1 === (int) $args->page && isset( $args->search ) && ! empty( $args->search ) ) { + $res->plugins = $this->maybe_prepend_lms_plugin( $res->plugins, $args ); + return $res; + } + if ( ! isset( $args->browse ) || $args->browse !== 'featured' ) { return $res; } @@ -100,6 +166,38 @@ public function filter_plugin_api_results( $res, $action, $args ) { return $res; } + /** + * Prepend the LMS plugin if the search query matches LMS-related terms. + * + * @param array $plugins The plugins array. + * @param object $args The plugin API arguments. + * @return array + */ + private function maybe_prepend_lms_plugin( $plugins, $args ) { + $search = isset( $args->search ) ? strtolower( $args->search ) : ''; + if ( + strpos( $search, 'lms' ) !== false || + strpos( $search, 'learn' ) !== false + ) { + $filter_slugs = apply_filters( 'themeisle_sdk_masteriyo_filter_slugs', [ 'learning-management-system' ] ); + $masteriyo = $this->get_plugins_filtered_from_author( $args, $filter_slugs, 'masteriyo' ); + + if ( ! empty( $masteriyo ) ) { + // Remove existing LMS plugin if present to avoid duplicates. + $plugins = array_filter( + $plugins, + function( $plugin ) { + return ( is_object( $plugin ) && isset( $plugin->slug ) && $plugin->slug !== 'learning-management-system' ) || + ( is_array( $plugin ) && isset( $plugin['slug'] ) && $plugin['slug'] !== 'learning-management-system' ); + } + ); + + $plugins = array_merge( $masteriyo, $plugins ); + } + } + return $plugins; + } + /** * Query plugins by author. * @@ -130,7 +228,7 @@ private function query_plugins_by_author( $args ) { * * @return array */ - private function get_plugins_filtered_from_author( $args, $filter_slugs = [], $author = 'Themeisle' ) { + protected function get_plugins_filtered_from_author( $args, $filter_slugs = [], $author = 'Themeisle' ) { $cached = get_transient( $this->transient_key . $author ); if ( $cached ) { diff --git a/src/Modules/Promotions.php b/src/Modules/Promotions.php index b37a4b56..50e51651 100644 --- a/src/Modules/Promotions.php +++ b/src/Modules/Promotions.php @@ -105,6 +105,13 @@ class Promotions extends Abstract_Module { */ private $option_feedzy = 'themeisle_sdk_promotions_feedzy_installed'; + /** + * Option key for Masteriyo promos. + * + * @var string + */ + private $option_masteriyo = 'themeisle_sdk_promotions_masteriyo_installed'; + /** * Loaded promotion. * @@ -152,6 +159,7 @@ public function can_load( $product ) { $promotions_to_load[] = 'hyve'; $promotions_to_load[] = 'wp_full_pay'; $promotions_to_load[] = 'feedzy_import'; + $promotions_to_load[] = 'learning-management-system'; if ( defined( 'NEVE_VERSION' ) || defined( 'WPMM_PATH' ) || defined( 'OTTER_BLOCKS_VERSION' ) || defined( 'OBFX_URL' ) ) { $promotions_to_load[] = 'feedzy_embed'; @@ -257,6 +265,7 @@ public function register_reference() { if ( isset( $_GET['wp_full_pay_reference_key'] ) ) { update_option( 'wp_full_pay_reference_key', sanitize_key( $_GET['wp_full_pay_reference_key'] ) ); } + if ( isset( $_GET['feedzy_reference_key'] ) || ( isset( $_GET['from'], $_GET['plugin'] ) && $_GET['from'] === 'import' && str_starts_with( sanitize_key( $_GET['plugin'] ), 'feedzy' ) ) ) { update_option( 'feedzy_reference_key', sanitize_key( $_GET['feedzy_reference_key'] ?? 'i-' . $this->product->get_key() ) ); update_option( $this->option_feedzy, 1 ); @@ -350,6 +359,16 @@ public function register_settings() { 'default' => false, ) ); + register_setting( + 'themeisle_sdk_settings', + $this->option_masteriyo, + array( + 'type' => 'boolean', + 'sanitize_callback' => 'rest_sanitize_boolean', + 'show_in_rest' => true, + 'default' => false, + ) + ); } /** @@ -416,12 +435,15 @@ private function get_promotions() { $has_enough_attachments = $this->has_min_media_attachments(); $has_enough_old_posts = $this->has_old_posts(); $is_min_php_8_1 = version_compare( PHP_VERSION, '8.1', '>=' ); - - $has_feedzy = defined( 'FEEDZY_BASEFILE' ) || $this->is_plugin_installed( 'feedzy-rss-feedss' ); - $had_feedzy_from_promo = get_option( $this->option_feedzy, false ); + $has_feedzy = defined( 'FEEDZY_BASEFILE' ) || $this->is_plugin_installed( 'feedzy-rss-feedss' ); + $had_feedzy_from_promo = get_option( $this->option_feedzy, false ); + $has_masteriyo = defined( 'MASTERIYO_VERSION' ) || $this->is_plugin_installed( 'learning-management-system' ); + $had_masteriyo_from_promo = get_option( $this->option_masteriyo, false ); + $has_masteriyo_conditions = $this->has_lms_tagline(); + $is_min_php_7_2 = version_compare( PHP_VERSION, '7.2', '>=' ); $all = [ - 'optimole' => [ + 'optimole' => [ 'om-editor' => [ 'env' => ! $has_optimole && $is_min_req_v && ! $had_optimole_from_promo, 'screen' => 'editor', @@ -446,20 +468,20 @@ private function get_promotions() { 'delayed' => true, ], ], - 'feedzy_import' => [ + 'feedzy_import' => [ 'feedzy-import' => [ 'env' => true, 'screen' => 'import', 'always' => true, ], ], - 'feedzy_embed' => [ + 'feedzy_embed' => [ 'feedzy-editor' => [ 'env' => ! $has_feedzy && is_main_site() && ! $had_feedzy_from_promo, 'screen' => 'editor', ], ], - 'otter' => [ + 'otter' => [ 'blocks-css' => [ 'env' => ! $has_otter && $is_min_req_v && ! $had_otter_from_promo, 'screen' => 'editor', @@ -476,14 +498,14 @@ private function get_promotions() { 'delayed' => true, ], ], - 'rop' => [ + 'rop' => [ 'rop-posts' => [ 'env' => ! $has_rop && ! $had_rop_from_promo && $has_enough_old_posts, 'screen' => 'edit-post', 'delayed' => true, ], ], - 'woo_plugins' => [ + 'woo_plugins' => [ 'ppom' => [ 'env' => ! $has_ppom && $has_woocommerce, 'screen' => 'edit-product', @@ -501,31 +523,37 @@ private function get_promotions() { 'screen' => 'edit-product', ], ], - 'neve' => [ + 'neve' => [ 'neve-themes-popular' => [ 'env' => ! $has_neve && ! $has_neve_from_promo, 'screen' => 'themes-install-popular', ], ], - 'redirection-cf7' => [ + 'redirection-cf7' => [ 'wpcf7' => [ 'env' => ! $has_redirection_cf7 && ! $had_redirection_cf7_promo, 'screen' => 'wpcf7', 'delayed' => true, ], ], - 'hyve' => [ + 'hyve' => [ 'hyve-plugins-install' => [ 'env' => $is_min_php_8_1 && ! $has_hyve && ! $had_hyve_from_promo && $has_hyve_conditions, 'screen' => 'plugin-install', ], ], - 'wp_full_pay' => [ + 'wp_full_pay' => [ 'wp-full-pay-plugins-install' => [ 'env' => ! $has_wfp_full_pay && ! $had_wfp_from_promo && $has_wfp_conditions, 'screen' => 'plugin-install', ], ], + 'learning-management-system' => [ + 'masteriyo-plugins-install' => [ + 'env' => $is_min_php_7_2 && ! $has_masteriyo && ! $had_masteriyo_from_promo && $has_masteriyo_conditions, + 'screen' => 'plugin-install', + ], + ], ]; foreach ( $all as $slug => $data ) { @@ -723,6 +751,10 @@ private function load_promotion( $slug ) { add_action( 'admin_notices', [ $this, 'render_wp_full_pay_notice' ] ); } + if ( $this->get_upsells_dismiss_time( 'masteriyo-plugins-install' ) === false ) { + add_action( 'admin_notices', [ $this, 'render_masteriyo_notice' ] ); + } + add_action( 'load-import.php', [ $this, 'add_import' ] ); $this->load_woo_promos(); @@ -788,6 +820,10 @@ private function load_promotion( $slug ) { add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] ); add_action( 'admin_notices', [ $this, 'render_wp_full_pay_notice' ] ); break; + case 'masteriyo-plugins-install': + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] ); + add_action( 'admin_notices', [ $this, 'render_masteriyo_notice' ] ); + break; } } @@ -881,6 +917,8 @@ public function enqueue() { 'hyveDash' => esc_url( add_query_arg( [ 'page' => 'wpfs-settings-stripe' ], admin_url( 'admin.php' ) ) ), 'wpFullPayActivationUrl' => $this->get_plugin_activation_link( 'wp-full-stripe-free' ), 'wpFullPayDash' => esc_url( add_query_arg( [ 'page' => 'wpfs-settings-stripe' ], admin_url( 'admin.php' ) ) ), + 'masteriyoActivationUrl' => $this->get_plugin_activation_link( 'masteriyo' ), + 'masteriyoDash' => esc_url( add_query_arg( [ 'page' => 'masteriyo-onboard' ], admin_url( 'index.php' ) ) ), 'nevePreviewURL' => esc_url( add_query_arg( [ 'theme' => 'neve' ], admin_url( 'theme-install.php' ) ) ), 'neveAction' => $neve_action, 'activateNeveURL' => esc_url( @@ -940,6 +978,13 @@ public function render_redirection_cf7_notice() { echo '
'; } + /** + * Render Masteriyo notice. + */ + public function render_masteriyo_notice() { + echo '
'; + } + /** * Add promo to attachment modal. * @@ -1406,4 +1451,22 @@ public function has_donate_page() { return 'yes' === $has_donate; } + + /** + * Check if the tagline contains LMS related keywords. + * + * @return bool True if the tagline contains LMS-related keywords, false otherwise. + */ + public function has_lms_tagline() { + $tagline = strtolower( get_bloginfo( 'description' ) ); + $lms_keywords = array( 'learning', 'courses' ); + + foreach ( $lms_keywords as $keyword ) { + if ( strpos( $tagline, $keyword ) !== false ) { + return true; + } + } + + return false; + } } diff --git a/src/Modules/Script_loader.php b/src/Modules/Script_loader.php index 1d0ef6bb..b300f924 100644 --- a/src/Modules/Script_loader.php +++ b/src/Modules/Script_loader.php @@ -98,7 +98,7 @@ public function get_script_handler( $slug ) { return ''; } - if ( 'tracking' !== $slug && 'survey' !== $slug && 'banner' !== $slug ) { + if ( 'tracking' !== $slug && 'survey' !== $slug ) { return ''; } @@ -120,8 +120,6 @@ public function enqueue_script( $slug ) { $this->load_tracking( $handler ); } elseif ( 'survey' === $slug ) { $this->load_survey( $handler ); - } elseif ( 'banner' === $slug ) { - $this->load_banner( $handler ); } } @@ -174,7 +172,7 @@ public function get_survey_common_data( $reference_data = array() ) { $common_data = [ 'userId' => $user_id, - 'apiHost' => 'https://app.formbricks.com', + 'appUrl' => 'https://app.formbricks.com', 'attributes' => [ 'language' => $lang_code, ], @@ -237,33 +235,6 @@ public function load_tracking( $handler ) { ); } - /** - * Load the banner script. - * - * @param string $handler The script handler. - * - * @return void - */ - public function load_banner( $handler ) { - global $themeisle_sdk_max_path; - $asset_file = require $themeisle_sdk_max_path . '/assets/js/build/banner/banner.asset.php'; - - wp_enqueue_script( - $handler, - $this->get_sdk_uri() . 'assets/js/build/banner/banner.js', - $asset_file['dependencies'], - $asset_file['version'], - true - ); - - wp_enqueue_style( - $handler . '_style', - $this->get_sdk_uri() . 'assets/css/banner.css', - [], - $asset_file['version'] - ); - } - /** * Mask a secret with `*` for half of its length. * diff --git a/tests/announcement-test.php b/tests/announcement-test.php index ca5b98a8..9284e614 100644 --- a/tests/announcement-test.php +++ b/tests/announcement-test.php @@ -1,183 +1,125 @@ user->create( - array( - 'role' => 'administrator', - ) - ); - wp_set_current_user( self::$admin_id ); + public static function wpSetUpBeforeClass( \WP_UnitTest_Factory $factory ) { + self::$admin_id = $factory->user->create( [ 'role' => 'administrator' ] ); } public static function wpTearDownAfterClass() { self::delete_user( self::$admin_id ); } - public function test_announcements_module_loading() { - $file = dirname( __FILE__ ) . '/sample_products/sample_theme/style.css'; - \ThemeisleSDK\Loader::add_product( $file ); - $modules = \ThemeisleSDK\Common\Module_Factory::get_modules_map(); - $this->assertArrayHasKey( 'sample_theme', $modules ); - $modules['sample_theme'] = array_filter( - $modules['sample_theme'], - [ $this, 'filter_value' ] - ); - $this->assertCount( 0, $modules['sample_theme'] ); - } - - private function filter_value( $value ) { - if ( ! is_object( $value ) ) { - return false; - } - return ( get_class( $value ) === 'ThemeisleSDK\\Modules\\Announcements' ); - } - - /** - * Test if module can load a product. - */ - public function test_announcement_product_loading() { - - $file = dirname( __FILE__ ) . '/sample_products/sample_theme/style.css'; - - \ThemeisleSDK\Loader::add_product( $file ); - - $modules = \ThemeisleSDK\Common\Module_Factory::get_modules_map(); - - $this->assertArrayHasKey( 'sample_theme', $modules ); - $this->assertGreaterThan( 0, count( $modules['sample_theme'] ) ); - + public function set_up() { + parent::set_up(); + wp_set_current_user( self::$admin_id ); + $this->announcements = new Announcements(); } - public function test_announcement_event_black_friday() { - $module = new \ThemeisleSDK\Modules\Announcements(); - - $announcements = $module->get_announcements_for_plugins(); + public function tear_down() { + remove_all_filters( 'themeisle_sdk_current_date' ); + remove_all_filters( 'themeisle_sdk_current_time' ); + remove_all_filters( 'themeisle_sdk_blackfriday_data' ); - $this->assertArrayHasKey( 'black_friday', $announcements ); + // Reset private static flag + $ref = new \ReflectionClass( Announcements::class ); + $prop = $ref->getProperty( 'notice_loaded' ); + $prop->setAccessible( true ); + $prop->setValue( false ); - // The event should not be active before the event start date. - $module->time = '2024-10-10 00:00:00'; - $this->assertFalse( $module->is_active( $announcements['black_friday'] ) ); - - // The event should not be active after the event end date. - $module->time = '2024-12-4 00:00:00'; - $this->assertFalse( $module->is_active( $announcements['black_friday'] ) ); - - // The event should be active between the event start and end date. - $module->time = '2024-11-28 00:00:00'; - $this->assertTrue( $module->is_active( $announcements['black_friday'] ) ); + parent::tear_down(); } - public function test_announcement_without_end_date() { - $module = new \ThemeisleSDK\Modules\Announcements(); - - $dates = array( - 'start' => '2024-11-28 00:00:00', + public function test_can_show_notice_without_dismiss() { + $today = new DateTime( '2025-03-10' ); + delete_user_meta( self::$admin_id, 'themeisle_sdk_dismissed_notice_black_friday' ); + $this->assertTrue( + $this->announcements->can_show_notice( $today, self::$admin_id ), + 'Notice should show when user has not dismissed.' ); - - // The event should not be active before the event start date. - $module->time = '2024-10-10 00:00:00'; - $this->assertFalse( $module->is_active( $dates ) ); - - // The event should be active after the event start date. - $module->time = '2024-11-28 00:00:01'; - $this->assertTrue( $module->is_active( $dates ) ); } - public function test_announcement_without_start_date() { - $module = new \ThemeisleSDK\Modules\Announcements(); - - $dates = array( - 'end' => '2024-11-28 00:00:00', + public function test_can_show_notice_when_dismissed_same_year() { + $today = new DateTime( '2025-03-10' ); + update_user_meta( + self::$admin_id, + 'themeisle_sdk_dismissed_notice_black_friday', + strtotime( '2025-01-01' ) + ); + $this->assertFalse( + $this->announcements->can_show_notice( $today, self::$admin_id ), + 'Notice should not show when dismissed this year.' ); - - // The event should be active before the event end date. - $module->time = '2024-11-27 23:59:59'; - $this->assertTrue( $module->is_active( $dates ) ); - - // The event should not be active after the event end date. - $module->time = '2024-11-28 00:00:01'; - $this->assertFalse( $module->is_active( $dates ) ); } - public function test_announcement_without_start_and_end_date() { - $module = new \ThemeisleSDK\Modules\Announcements(); - - $dates = array(); - - // The event should not be active without start and end date. - $module->time = '2024-11-27 23:59:59'; - $this->assertFalse( $module->is_active( $dates ) ); + public function test_get_black_friday_dates_and_duration() { + $start = $this->announcements->get_start_date( new DateTime( '2025-01-01' ) ); + $this->assertEquals( '2025-11-24', $start->format( 'Y-m-d' ) ); + + $end = $this->announcements->get_end_date( $start ); + $this->assertEquals( '2025-12-01 23:59:59', $end->format( 'Y-m-d H:i:s' ) ); + + // check sale window boundaries + $this->assertFalse( $this->announcements->is_black_friday_sale( new DateTime( '2025-11-23' ) ) ); + $this->assertTrue( $this->announcements->is_black_friday_sale( new DateTime( '2025-11-24' ) ) ); + $this->assertTrue( $this->announcements->is_black_friday_sale( new DateTime( '2025-11-28' ) ) ); + $this->assertTrue( $this->announcements->is_black_friday_sale( new DateTime( '2025-12-01' ) ) ); + $this->assertFalse( $this->announcements->is_black_friday_sale( new DateTime( '2025-12-02' ) ) ); } - public function test_get_announcements_for_plugins() { - // Setup dates using UTC time - $start = gmdate( 'Y-m-d H:i:s', strtotime( '-1 day', time() ) ); - $end = gmdate( 'Y-m-d H:i:s', strtotime( 'tomorrow', time() ) ); - - $module = new \ThemeisleSDK\Modules\Announcements( - array( - 'black_friday' => array( - 'start' => $start, - 'end' => $end, - 'rendered' => false, - ), - ) + public function test_get_remaining_time_for_event() { + $base = new DateTime( '2025-12-01 10:00:00' ); + add_filter( + 'themeisle_sdk_current_date', + function() use ( $base ) { + return $base; + } ); - // Get announcements and verify structure - $announcements = $module->get_announcements_for_plugins(); - - // Check if black friday announcement exists and is active - $this->assertArrayHasKey( 'black_friday', $announcements ); - $this->assertTrue( ! empty( $announcements['black_friday']['active'] ) ); - - // Verify required URL and banner fields exist for neve product - $this->assertArrayHasKey( 'neve_dashboard_url', $announcements['black_friday'] ); - - // Verify URLs are valid - foreach ( $announcements['black_friday'] as $key => $value ) { - if ( strpos( $key, '_url' ) !== false ) { - $this->assertNotEmpty( filter_var( $value, FILTER_VALIDATE_URL ) ); - } - } + $end = new DateTime( '2025-12-02 00:00:00' ); + $diff = $this->announcements->get_remaining_time_for_event( $end ); + $this->assertNotEmpty( $diff ); + $this->assertStringContainsString( 'hour', $diff ); } - public function test_render_banner() { - $module = new \ThemeisleSDK\Modules\Announcements(); + public function test_load_announcements_registers_hooks_during_sale() { + add_filter( + 'themeisle_sdk_current_date', + function() { + return new DateTime( '2025-11-25' ); + } + ); - $test_settings = array( - 'cta_url' => 'https://example.com', - 'img_src' => 'https://example.com/image.jpg', - 'urgency_text' => 'Test urgency text', + $this->announcements->load_announcements(); + $this->assertTrue( + has_action( 'admin_notices', [ $this->announcements, 'black_friday_notice_render' ] ) > 0 + ); + $this->assertTrue( + has_action( 'wp_ajax_themeisle_sdk_dismiss_black_friday_notice', [ $this->announcements, 'disable_notification_ajax' ] ) > 0 ); + } - $rendered = $module->render_banner( $test_settings ); - - $this->assertStringContainsString( 'href="' . $test_settings['cta_url'] . '"', $rendered ); - $this->assertStringContainsString( 'src="' . $test_settings['img_src'] . '"', $rendered ); - $this->assertStringContainsString( $test_settings['urgency_text'], $rendered ); - - $this->assertStringContainsString( 'class="tsdk-banner-cta"', $rendered ); - $this->assertStringContainsString( 'class="tsdk-banner-img"', $rendered ); - $this->assertStringContainsString( 'class="tsdk-banner-urgency-text"', $rendered ); + public function test_load_announcements_skips_outside_sale() { + add_filter( + 'themeisle_sdk_current_date', + function() { + return new DateTime( '2025-10-15' ); + } + ); - // Test with empty settings - $empty_rendered = $module->render_banner(); - $this->assertEmpty( $empty_rendered ); + $this->announcements->load_announcements(); + $this->assertFalse( + has_action( 'admin_notices', [ $this->announcements, 'black_friday_notice_render' ] ) + ); } } diff --git a/tests/e2e/specs/formbricks.spec.js b/tests/e2e/specs/formbricks.spec.js new file mode 100644 index 00000000..1ce2597c --- /dev/null +++ b/tests/e2e/specs/formbricks.spec.js @@ -0,0 +1,26 @@ +/** + * WordPress dependencies + */ +import { test, expect } from '@wordpress/e2e-test-utils-playwright'; + +test.describe( 'Formbricks', () => { + + test( 'check initialization', async({ page, admin }) => { + await admin.visitAdminPage( 'admin.php?page=themeisle-sdk&formbricksDebug=true' ); + + page.on( 'console', msg => { + const text = msg.text(); + if ( text.includes( 'Formbricks' ) && text.includes( 'Warning' ) ) { + + // Fail on warning. + expect( true, `Formbricks warning found: ${text}` ).toBe( false ); + } + }); + + const response = await page.waitForResponse( response => response.url().includes( 'formbricks.umd.cjs' ) ); + expect( response.ok() ).toBe( true ); + + const consoleMessage = await page.waitForEvent( 'console', msg => msg.text().includes( '[DEBUG] - Start setup' ) ); + expect( consoleMessage ).toBeTruthy(); + }); +}); diff --git a/tests/featured-plugins-test.php b/tests/featured-plugins-test.php index 3a35c63a..d05cac36 100644 --- a/tests/featured-plugins-test.php +++ b/tests/featured-plugins-test.php @@ -254,4 +254,68 @@ function( $results, $action, $args ) { $this->assertEquals( 2, count( $filtered_api_result->plugins ) ); } + /** + * Test LMS plugin is prepended when searching for LMS-related terms. + */ + public function test_lms_plugin_is_prepended_on_lms_search() { + wp_set_current_user( self::$admin_id ); + $plugin = dirname( __FILE__ ) . '/sample_products/sample_pro_plugin/plugin_file.php'; + $plugin_product = new \ThemeisleSDK\Product( $plugin ); + + $module = $this->getMockBuilder( '\ThemeisleSDK\Modules\Featured_Plugins' ) + ->onlyMethods( [ 'get_plugins_filtered_from_author' ] ) + ->getMock(); + + $lms_plugin = (object) [ + 'name' => 'Masteriyo', + 'slug' => 'learning-management-system', + 'version' => '1.0.0', + 'author' => 'masteriyo', + ]; + + $module->method( 'get_plugins_filtered_from_author' ) + ->willReturn( [ $lms_plugin ] ); + + // Including a duplicate LMS plugin to test deduplication. + $existing_plugin = (object) [ + 'name' => 'Other Plugin', + 'slug' => 'other-plugin', + 'version' => '2.0.0', + 'author' => 'someone', + ]; + $duplicate_lms_plugin = (object) [ + 'name' => 'Masteriyo', + 'slug' => 'learning-management-system', + 'version' => '1.0.0', + 'author' => 'masteriyo', + ]; + + $plugins = [ $existing_plugin, $duplicate_lms_plugin ]; + + $args = (object) [ + 'search' => 'best lms plugin', + 'page' => 1, + ]; + + $result = $module->filter_plugin_api_results( + (object) [ + 'plugins' => $plugins, + 'info' => [ 'results' => 10 ], + ], + 'query_plugins', + $args + ); + + $this->assertEquals( 'learning-management-system', $result->plugins[0]->slug, 'LMS plugin should be prepended.' ); + $this->assertEquals( 'other-plugin', $result->plugins[1]->slug, 'Other plugin should follow.' ); + // Ensure no duplicate LMS plugin exists. + $lms_count = 0; + foreach ( $result->plugins as $plugin ) { + if ( isset( $plugin->slug ) && $plugin->slug === 'learning-management-system' ) { + $lms_count++; + } + } + $this->assertEquals( 1, $lms_count, 'There should be only one LMS plugin in the results.' ); + } + } diff --git a/tests/promotion-test.php b/tests/promotion-test.php index 4a853101..086e57b7 100644 --- a/tests/promotion-test.php +++ b/tests/promotion-test.php @@ -179,6 +179,25 @@ public function testWfpPromoShown() { $this->assertContains( 'wp-full-pay-plugins-install', $promos ); } + public function testMasteriyoPromoShown() { + update_option( 'blogdescription', 'Courses' ); + + wp_set_current_user( 1 ); + set_current_screen( 'plugin-install' ); + + $promotions = new \ThemeisleSDK\Modules\Promotions(); + $product = $this->get_product(); + $this->assertTrue( $promotions->can_load( $product ) ); + + $promotions->load( $product ); + $promotions->load_available(); + + $promos = $promotions->promotions; + + $this->assertContains( 'masteriyo-plugins-install', $promos ); + + } + private function get_product() { $file = dirname( __FILE__ ) . '/sample_products/sample_plugin/plugin_file.php';