diff --git a/.github/workflows/ceph-docs-links.yaml b/.github/workflows/ceph-docs-links.yaml index 549c5ba97be..831ac3da791 100644 --- a/.github/workflows/ceph-docs-links.yaml +++ b/.github/workflows/ceph-docs-links.yaml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install linkchecker run: sudo pip install LinkChecker diff --git a/.github/workflows/core-docs-links.yaml b/.github/workflows/core-docs-links.yaml index 70a0d54e2a4..1111af251e4 100644 --- a/.github/workflows/core-docs-links.yaml +++ b/.github/workflows/core-docs-links.yaml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install linkchecker run: sudo pip install LinkChecker diff --git a/.github/workflows/kubernetes-docs-links.yaml b/.github/workflows/kubernetes-docs-links.yaml index 9994a92cdd8..25cf0bd836f 100644 --- a/.github/workflows/kubernetes-docs-links.yaml +++ b/.github/workflows/kubernetes-docs-links.yaml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install linkchecker run: sudo pip install LinkChecker diff --git a/.github/workflows/openstack-charm-deployment-guide-docs-links.yaml b/.github/workflows/openstack-charm-deployment-guide-docs-links.yaml index 5aacb759165..311af17be47 100644 --- a/.github/workflows/openstack-charm-deployment-guide-docs-links.yaml +++ b/.github/workflows/openstack-charm-deployment-guide-docs-links.yaml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install linkchecker run: sudo pip install LinkChecker diff --git a/.github/workflows/openstack-charm-guide-docs-links.yaml b/.github/workflows/openstack-charm-guide-docs-links.yaml index 541421b4c38..530de1cd9d7 100644 --- a/.github/workflows/openstack-charm-guide-docs-links.yaml +++ b/.github/workflows/openstack-charm-guide-docs-links.yaml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install linkchecker run: sudo pip install LinkChecker diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index f819c180758..e96e370c574 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -167,7 +167,7 @@ jobs: run: dotrun --env SEARCH_API_KEY=fake-key exec coverage run --source=. --module unittest discover tests - name: Upload coverage to Codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 with: flags: python @@ -191,7 +191,7 @@ jobs: yarn test-js --coverage - name: Upload coverage to Codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 with: flags: javascript diff --git a/.github/workflows/rebase.yaml b/.github/workflows/rebase.yaml index 59d8f214640..f7d1e3e06b5 100644 --- a/.github/workflows/rebase.yaml +++ b/.github/workflows/rebase.yaml @@ -14,7 +14,7 @@ jobs: ) steps: - name: Checkout the latest code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: token: ${{ secrets.REBASE_TOKEN }} fetch-depth: 0 # otherwise, you will fail to push refs to dest repo diff --git a/.github/workflows/robotics-docs-links.yaml b/.github/workflows/robotics-docs-links.yaml index bfbff3e8af9..efcf50084ea 100644 --- a/.github/workflows/robotics-docs-links.yaml +++ b/.github/workflows/robotics-docs-links.yaml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install linkchecker run: sudo pip install LinkChecker diff --git a/.github/workflows/server-docs-links.yaml b/.github/workflows/server-docs-links.yaml index 1333da4a8cf..91cb6d732f4 100644 --- a/.github/workflows/server-docs-links.yaml +++ b/.github/workflows/server-docs-links.yaml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install linkchecker run: sudo pip install LinkChecker diff --git a/.stylelintrc b/.stylelintrc index 1e6cca41ed2..c55c959c30a 100644 --- a/.stylelintrc +++ b/.stylelintrc @@ -1,10 +1,15 @@ { - "extends": ["stylelint-config-standard", "stylelint-prettier/recommended"], - "plugins": ["stylelint-order", "stylelint-scss"], - "ignoreFiles": ["static/sass/prism.scss"], + "extends": ["stylelint-config-recommended-scss"], + "plugins": ["stylelint-order"], "rules": { - "order/properties-alphabetical-order": true, + "comment-no-empty": null, "at-rule-no-unknown": null, - "scss/at-rule-no-unknown": true + "scss/no-global-function-names": null, + "scss/at-extend-no-missing-placeholder": null, + "no-invalid-position-at-import-rule": null, + "order/properties-alphabetical-order": null, + "scss/operator-no-unspaced": null, + "scss/operator-no-newline-after": null, + "scss/comment-no-empty": null } -} +} \ No newline at end of file diff --git a/package.json b/package.json index d9251687f26..2023d7c697c 100644 --- a/package.json +++ b/package.json @@ -35,12 +35,12 @@ "license": "LGPL v3", "devDependencies": { "@babel/core": "^7.24.9", - "@babel/plugin-proposal-class-properties": "7.14.5", - "@babel/plugin-syntax-jsx": "7.16.7", - "@babel/plugin-transform-runtime": "7.16.7", + "@babel/plugin-proposal-class-properties": "7.18.6", + "@babel/plugin-syntax-jsx": "7.24.7", + "@babel/plugin-transform-runtime": "7.24.7", "@babel/preset-env": "^7.24.8", "@babel/preset-react": "^7.24.7", - "@babel/preset-typescript": "7.16.7", + "@babel/preset-typescript": "7.24.7", "@cfaester/enzyme-adapter-react-18": "0.8.0", "@eslint/js": "^9.7.0", "@playwright/test": "^1.40.0", @@ -53,35 +53,35 @@ "@types/enzyme": "3.10.18", "@types/eslint__js": "^8.42.3", "@types/jest": "29.5.12", - "@types/lodash": "4.14.175", + "@types/lodash": "4.17.7", "@types/node": "^20.9.3", "@types/react": "^18.3.0", "@types/react-dom": "^18.3.0", "@types/react-google-recaptcha": "^2.1.9", - "@typescript-eslint/eslint-plugin": "7.17.0", - "@typescript-eslint/parser": "7.17.0", - "axe-core": "4.3.5", + "@typescript-eslint/eslint-plugin": "8.0.0", + "@typescript-eslint/parser": "8.0.0", + "axe-core": "4.10.0", "babel-jest": "^29.7.0", - "babel-loader": "8.2.3", + "babel-loader": "9.1.3", "concurrently": "8.2.0", "csstype": "3.0.8", "enzyme": "3.11.0", "eslint": "^9.7.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-react": "7.35.0", - "fishery": "1.4.0", - "full-icu": "1.4.0", + "fishery": "2.2.2", + "full-icu": "1.5.0", "identity-obj-proxy": "^3.0.0", "jest": "^29.7.0", "jest-fetch-mock": "3.0.3", - "prettier": "2.2.1", - "stylelint": "13.13.1", - "stylelint-config-prettier": "8.0.2", - "stylelint-config-standard": "20.0.0", - "stylelint-order": "4.1.0", - "stylelint-prettier": "1.2.0", + "prettier": "3.3.3", + "stylelint": "16.8.1", + "stylelint-config-prettier": "9.0.5", + "stylelint-config-recommended-scss": "14.0.0", + "stylelint-order": "6.0.4", + "stylelint-prettier": "5.0.2", "stylelint-scss": "3.21.0", - "typescript-eslint": "^7.17.0", + "typescript-eslint": "^8.0.0", "watch-cli": "0.2.3" }, "dependencies": { @@ -90,14 +90,14 @@ "@canonical/global-nav": "3.6.4", "@canonical/latest-news": "1.5.0", "@canonical/react-components": "^0.59.1", - "@reduxjs/toolkit": "1.7.1", + "@reduxjs/toolkit": "2.2.7", "@sentry/react": "^8.19.0", "@sentry/tracing": "^7.114.0", "@stripe/react-stripe-js": "2.7.3", "@stripe/stripe-js": "4.1.0", "@tanstack/react-query": "^5.51.11", "@tanstack/react-query-devtools": "^5.51.11", - "autoprefixer": "10.4.1", + "autoprefixer": "10.4.19", "date-fns": "2.28.0", "date-fns-tz": "1.3.4", "dotenv": "^16.3.1", @@ -106,26 +106,26 @@ "flickity": "^3.0.0", "formik": "2.4.6", "globals": "^15.8.0", - "intl-tel-input": "23.3.2", - "postcss": "8.4.31", - "postcss-cli": "8.3.1", + "intl-tel-input": "23.7.4", + "postcss": "8.4.40", + "postcss-cli": "11.0.0", "prop-types": "15.8.1", "react": "^18.3.0", "react-dom": "^18.3.0", "react-google-recaptcha": "3.1.0", "react-router-dom": "^6.24.1", - "react-useportal": "1.0.16", + "react-useportal": "1.0.19", "sass": "1.45.2", "smartquotes": "2.3.2", - "typescript": "5.4.5", + "typescript": "5.5.4", "url-polyfill": "1.1.12", - "url-search-params-polyfill": "8.1.1", + "url-search-params-polyfill": "8.2.5", "vanilla-framework": "4.14.0", - "yup": "0.32.11" + "yup": "1.4.0" }, "resolutions": { "lodash": "4.17.21", - "minimatch": "3.0.5" + "minimatch": "3.1.2" }, "jest": { "testEnvironment": "jsdom", diff --git a/static/js/src/accordion.js b/static/js/src/accordion.js index f5be3b00fdd..4f7cdfde923 100644 --- a/static/js/src/accordion.js +++ b/static/js/src/accordion.js @@ -46,7 +46,7 @@ function setupAccordion(accordionContainer) { // Finds any open panels within the container and closes them. function closeAllPanels() { var openPanels = accordionContainer.querySelectorAll( - "[aria-expanded=true]" + "[aria-expanded=true]", ); for (var i = 0, l = openPanels.length; i < l; i++) { @@ -59,7 +59,7 @@ function setupAccordion(accordionContainer) { accordionContainer.addEventListener("click", function (event) { var target = event.target; var multipleAccordionsOpen = accordionContainer.getAttribute( - "data-multiple-expanded" + "data-multiple-expanded", ); if (target.closest) { diff --git a/static/js/src/activate.js b/static/js/src/activate.js index e1bae601eab..bf7336e2247 100644 --- a/static/js/src/activate.js +++ b/static/js/src/activate.js @@ -118,27 +118,27 @@ activation_key.addEventListener("keyup", validateKey); toggleModal( document.querySelector("#modal"), document.querySelector("[aria-controls=modal]"), - true + true, ); })(); // buying for input const shouldCreateAccount = document.querySelector( - "#create-purchase-account-form" + "#create-purchase-account-form", ); if (shouldCreateAccount) { const organisationContainer = document.querySelector( - ".js-organisation-container" + ".js-organisation-container", ); const radioMyself = organisationContainer.querySelector(".radio-myself"); const radioOrganisation = organisationContainer.querySelector( - ".radio-organisation" + ".radio-organisation", ); const organisationNameContainer = organisationContainer.querySelector( - ".js-organisation-name-container" + ".js-organisation-name-container", ); const organisationNameInput = organisationNameContainer.querySelector( - 'input[name="activate-organisation-name"]' + 'input[name="activate-organisation-name"]', ); radioOrganisation.addEventListener("change", function (e) { if (e.target.checked) { @@ -155,19 +155,20 @@ if (shouldCreateAccount) { }); const createPurchaseAccountForm = document.getElementById( - "create-purchase-account-form" + "create-purchase-account-form", ); createPurchaseAccountForm.addEventListener("submit", function (event) { event.preventDefault(); const selectedOption = document.querySelector( - 'input[name="activate-buy-for"]:checked' + 'input[name="activate-buy-for"]:checked', ); - let accountName = document.querySelector('input[name="activate-name"]') - .value; + let accountName = document.querySelector( + 'input[name="activate-name"]', + ).value; if (selectedOption.value == "organisation") { accountName = document.querySelector( - 'input[name="activate-organisation-name"]' + 'input[name="activate-organisation-name"]', ).value; } diff --git a/static/js/src/advantage/api/contracts.js b/static/js/src/advantage/api/contracts.js index 65b529eb68a..cd433201fc6 100644 --- a/static/js/src/advantage/api/contracts.js +++ b/static/js/src/advantage/api/contracts.js @@ -55,7 +55,7 @@ export async function getCustomerInfo(accountId) { `/account/customer-info/${accountId}${queryString}`, { cache: "no-store", - } + }, ); let data = await response.json(); @@ -84,7 +84,7 @@ export async function getContractToken(contractId) { `/pro/contracts/${contractId}/token${queryString}`, { cache: "no-store", - } + }, ); return await response.json(); } @@ -95,7 +95,7 @@ export async function getPurchaseAccountStatus(marketplace) { `/account/${marketplace}/purchase-account-status${queryString}`, { cache: "no-store", - } + }, ); return await response.json(); } @@ -115,7 +115,7 @@ export async function putContractEntitlements(contractId, entitlements) { body: JSON.stringify({ entitlements, }), - } + }, ); return await response.json(); @@ -127,7 +127,7 @@ export async function getLastPurchaseIds(accountId) { `/account/last-purchase-ids/${accountId}${queryString}`, { cache: "no-store", - } + }, ); return await response.json(); } @@ -141,7 +141,7 @@ export async function retryPurchase(purchasesID) { cache: "no-store", credentials: "include", method: "POST", - } + }, ); let data = await response.json(); @@ -157,7 +157,7 @@ export async function postRenewalIDToProcessPayment(renewalID) { cache: "no-store", credentials: "include", method: "POST", - } + }, ); let data = await response.json(); @@ -168,7 +168,7 @@ export async function cancelContract( accountId, previousPurchaseId, productId, - marketplace + marketplace, ) { const queryString = window.location.search; // Pass arguments to the flask backend @@ -198,7 +198,7 @@ export async function resizeContract( productId, quantity, period, - marketplace + marketplace, ) { const queryString = window.location.search; // Pass arguments to the flask backend let response = await fetch(`/pro/purchase${queryString}`, { @@ -232,7 +232,7 @@ export async function previewResizeContract( productId, quantity, period, - marketplace + marketplace, ) { const queryString = window.location.search; // Pass arguments to the flask backend let response = await fetch(`/pro/purchase/preview${queryString}`, { @@ -295,7 +295,7 @@ export async function postCustomerInfoForPurchasePreview( accountID, name, address, - taxID + taxID, ) { const queryString = window.location.search; // Pass arguments to the flask backend @@ -345,7 +345,7 @@ export async function setAutoRenewal(value) { let subscriptions = []; Object.entries(value).forEach(([subscription_id, should_auto_renew]) => - subscriptions.push({ subscription_id, should_auto_renew }) + subscriptions.push({ subscription_id, should_auto_renew }), ); let response = await fetch(`/pro/set-auto-renewal${queryString}`, { method: "POST", diff --git a/static/js/src/advantage/api/contracts.test.ts b/static/js/src/advantage/api/contracts.test.ts index 7010c9c870f..6a267cf0114 100644 --- a/static/js/src/advantage/api/contracts.test.ts +++ b/static/js/src/advantage/api/contracts.test.ts @@ -49,7 +49,7 @@ describe("contracts", () => { await putContractEntitlements(contract_id, [entitlement]).then( (response) => { expect(response).toStrictEqual({}); - } + }, ); }); }); diff --git a/static/js/src/advantage/credentials/components/CredManage/CredManage.tsx b/static/js/src/advantage/credentials/components/CredManage/CredManage.tsx index c276472c551..126e6eba915 100644 --- a/static/js/src/advantage/credentials/components/CredManage/CredManage.tsx +++ b/static/js/src/advantage/credentials/components/CredManage/CredManage.tsx @@ -55,19 +55,19 @@ const CredManage = () => { } changeFilterData( filterData.map((row: ActivationKey) => - row["key"] in temp ? { ...row, key: temp[row["key"]] } : { ...row } - ) + row["key"] in temp ? { ...row, key: temp[row["key"]] } : { ...row }, + ), ); changeTableData( tableData.map((row) => - row["key"] in temp ? { ...row, key: temp[row["key"]] } : { ...row } - ) + row["key"] in temp ? { ...row, key: temp[row["key"]] } : { ...row }, + ), ); }; const switchTabOnArrowPress = ( event: React.KeyboardEvent, - currentIndex: number + currentIndex: number, ) => { currentIndex = activeTab; event.preventDefault(); @@ -92,13 +92,13 @@ const CredManage = () => { const handleCheckbox = ( event: React.ChangeEvent, - keyValue: string + keyValue: string, ) => { if (event.target.checked == true) { setSelectedKeyIds(selectedKeyIds.concat(keyValue)); } else { setSelectedKeyIds((selectedKeyIds) => - selectedKeyIds.filter((id) => id != keyValue) + selectedKeyIds.filter((id) => id != keyValue), ); } }; @@ -165,14 +165,14 @@ const CredManage = () => { changeTableData( filterData.filter((keyItem: ActivationKey) => { return keyIsUnused(keyItem["key"]); - }) + }), ); } if (activeTab == ActiveTab.ActiveKeys) { changeTableData( filterData.filter((keyItem: ActivationKey) => { return !keyIsUnused(keyItem["key"]); - }) + }), ); } }, [activeTab]); @@ -299,7 +299,7 @@ const CredManage = () => { content: ( + event: React.ChangeEvent, ) => { handleCheckbox(event, keyitem["key"]); }} diff --git a/static/js/src/advantage/distributor/components/ChannelOffersList/ChannelOffersList.tsx b/static/js/src/advantage/distributor/components/ChannelOffersList/ChannelOffersList.tsx index 5899604f8c3..62440067193 100644 --- a/static/js/src/advantage/distributor/components/ChannelOffersList/ChannelOffersList.tsx +++ b/static/js/src/advantage/distributor/components/ChannelOffersList/ChannelOffersList.tsx @@ -71,7 +71,7 @@ const ChannelOffersList = () => { const dateA = new Date(a.created_at).getTime(); const dateB = new Date(b.created_at).getTime(); return dateB - dateA; - } + }, ); return ( diff --git a/static/js/src/advantage/distributor/components/DistributorBuyButton/DistributorBuyButton.tsx b/static/js/src/advantage/distributor/components/DistributorBuyButton/DistributorBuyButton.tsx index 7538e02d5b9..0f3efc311dc 100644 --- a/static/js/src/advantage/distributor/components/DistributorBuyButton/DistributorBuyButton.tsx +++ b/static/js/src/advantage/distributor/components/DistributorBuyButton/DistributorBuyButton.tsx @@ -17,7 +17,7 @@ const DistributorBuyButton = () => { const productId = getProductId( subscription.type, subscription.support, - subscription.sla + subscription.sla, ); if (productId === product?.productID && product?.price !== undefined) { quantity = subscription.quantity; @@ -60,7 +60,7 @@ const DistributorBuyButton = () => { e.preventDefault(); localStorage.setItem( "shop-checkout-data", - JSON.stringify(shopCheckoutData) + JSON.stringify(shopCheckoutData), ); location.href = "/account/checkout"; }} diff --git a/static/js/src/advantage/distributor/components/DistributorShopForm/AddSubscriptions/AddSubscriptions.tsx b/static/js/src/advantage/distributor/components/DistributorShopForm/AddSubscriptions/AddSubscriptions.tsx index dda0aefcf71..d108fb263a0 100644 --- a/static/js/src/advantage/distributor/components/DistributorShopForm/AddSubscriptions/AddSubscriptions.tsx +++ b/static/js/src/advantage/distributor/components/DistributorShopForm/AddSubscriptions/AddSubscriptions.tsx @@ -12,20 +12,16 @@ import { import SubscriptionCard from "./SubscriptionCard.tsx/SubscriptionCard"; const AddSubscriptions = () => { - const { - productType, - setProductType, - subscriptionList, - setSubscriptionList, - } = useContext(FormContext); + const { productType, setProductType, subscriptionList, setSubscriptionList } = + useContext(FormContext); const handleProductTypeChange = ( - event: React.ChangeEvent + event: React.ChangeEvent, ) => { setProductType(event.target.value as ProductTypes); localStorage.setItem( DISTRIBUTOR_SELECTOR_KEYS.PRODUCT_TYPE, - JSON.stringify(event.target.value as ProductTypes) + JSON.stringify(event.target.value as ProductTypes), ); }; @@ -42,7 +38,7 @@ const AddSubscriptions = () => { setSubscriptionList([...subscriptionList, subscriptionItem]); localStorage.setItem( DISTRIBUTOR_SELECTOR_KEYS.SUBSCRIPTION_LIST, - JSON.stringify([...subscriptionList, subscriptionItem]) + JSON.stringify([...subscriptionList, subscriptionItem]), ); }; const subscriptionTypes = [ diff --git a/static/js/src/advantage/distributor/components/DistributorShopForm/AddSubscriptions/SubscriptionCard.tsx/SubscriptionCard.tsx b/static/js/src/advantage/distributor/components/DistributorShopForm/AddSubscriptions/SubscriptionCard.tsx/SubscriptionCard.tsx index 803b3117ab7..b106a089d15 100644 --- a/static/js/src/advantage/distributor/components/DistributorShopForm/AddSubscriptions/SubscriptionCard.tsx/SubscriptionCard.tsx +++ b/static/js/src/advantage/distributor/components/DistributorShopForm/AddSubscriptions/SubscriptionCard.tsx/SubscriptionCard.tsx @@ -24,21 +24,17 @@ type Prop = { subscription: SubscriptionItem; }; const SubscriptionCard = ({ subscription }: Prop) => { - const { - subscriptionList, - setSubscriptionList, - products, - duration, - } = useContext(FormContext); + const { subscriptionList, setSubscriptionList, products, duration } = + useContext(FormContext); const handleRemoveSubscription = (subscriptionId: string) => { const updatedList = subscriptionList.filter( - (item) => item.id !== subscriptionId + (item) => item.id !== subscriptionId, ); setSubscriptionList(updatedList); localStorage.setItem( DISTRIBUTOR_SELECTOR_KEYS.SUBSCRIPTION_LIST, - JSON.stringify(updatedList) + JSON.stringify(updatedList), ); }; @@ -56,7 +52,7 @@ const SubscriptionCard = ({ subscription }: Prop) => { const product = products?.filter( (prod) => prod?.productID === - getProductId(subscription.type, subscription.support, subscription.sla) + getProductId(subscription.type, subscription.support, subscription.sla), )[0]; const priceCurrency = product?.price?.currency as Currencies; @@ -71,7 +67,7 @@ const SubscriptionCard = ({ subscription }: Prop) => { const isQuantity = fieldName === "quantity" && Number(value) > 0; const updatedItem: SubscriptionItem = { ...item, - [fieldName]: isQuantity ? Number(value) ?? 0 : value, + [fieldName]: isQuantity ? (Number(value) ?? 0) : value, }; if (updatedItem.type === ProductTypes.desktop) { @@ -101,7 +97,7 @@ const SubscriptionCard = ({ subscription }: Prop) => { localStorage.setItem( DISTRIBUTOR_SELECTOR_KEYS.SUBSCRIPTION_LIST, - JSON.stringify(updatedList) + JSON.stringify(updatedList), ); }; @@ -197,7 +193,7 @@ const SubscriptionCard = ({ subscription }: Prop) => { {" "} {priceCurrency ? currencyFormatter(priceCurrency).format( - (priceValue ?? 0) / 100 + (priceValue ?? 0) / 100, ) : 0}{" "} / year per machine diff --git a/static/js/src/advantage/distributor/components/DistributorShopForm/Currency/Currency.tsx b/static/js/src/advantage/distributor/components/DistributorShopForm/Currency/Currency.tsx index b6f84fd8afd..498f1b3608f 100644 --- a/static/js/src/advantage/distributor/components/DistributorShopForm/Currency/Currency.tsx +++ b/static/js/src/advantage/distributor/components/DistributorShopForm/Currency/Currency.tsx @@ -11,12 +11,12 @@ const Currency = () => { const { currency, setCurrency } = useContext(FormContext); const handleCurrencyChange = ( - event: React.ChangeEvent + event: React.ChangeEvent, ) => { setCurrency(event.target.value as Currencies); localStorage.setItem( DISTRIBUTOR_SELECTOR_KEYS.CURRENCY, - JSON.stringify(event.target.value as Currencies) + JSON.stringify(event.target.value as Currencies), ); }; diff --git a/static/js/src/advantage/distributor/components/DistributorShopForm/DistributorShopSummary/DistributorShopSummary.tsx b/static/js/src/advantage/distributor/components/DistributorShopForm/DistributorShopSummary/DistributorShopSummary.tsx index 00f448579b7..921c01960ae 100644 --- a/static/js/src/advantage/distributor/components/DistributorShopForm/DistributorShopSummary/DistributorShopSummary.tsx +++ b/static/js/src/advantage/distributor/components/DistributorShopForm/DistributorShopSummary/DistributorShopSummary.tsx @@ -10,9 +10,8 @@ import { import DistributorBuyButton from "../../DistributorBuyButton/DistributorBuyButton"; const DistributorShopSummary = () => { - const { products, currency, subscriptionList, offer } = useContext( - FormContext - ); + const { products, currency, subscriptionList, offer } = + useContext(FormContext); const discount = offer?.discount; let totalPrice = 0; @@ -24,7 +23,7 @@ const DistributorShopSummary = () => { const productId = getProductId( subscription.type, subscription.support, - subscription.sla + subscription.sla, ); if ( @@ -76,11 +75,11 @@ const DistributorShopSummary = () => {

{discount ? currencyFormatter(currency).format( - (totalPrice - totalPrice * (discount / 100)) / 100 + (totalPrice - totalPrice * (discount / 100)) / 100, ) : currency - ? currencyFormatter(currency).format((totalPrice ?? 0) / 100) - : 0} + ? currencyFormatter(currency).format((totalPrice ?? 0) / 100) + : 0}

{" "}

Any applicable taxes are
calculated at checkout diff --git a/static/js/src/advantage/distributor/components/DistributorShopForm/Duration/Duration.tsx b/static/js/src/advantage/distributor/components/DistributorShopForm/Duration/Duration.tsx index e2511591ddd..ed5b977832b 100644 --- a/static/js/src/advantage/distributor/components/DistributorShopForm/Duration/Duration.tsx +++ b/static/js/src/advantage/distributor/components/DistributorShopForm/Duration/Duration.tsx @@ -8,12 +8,12 @@ const Duration = () => { const { duration, setDuration } = useContext(FormContext); const handleDurationChange = ( - event: React.ChangeEvent + event: React.ChangeEvent, ) => { setDuration(Number(event.target.value) as Durations); localStorage.setItem( "distributor-selector-duration", - JSON.stringify(Number(event.target.value) as Durations) + JSON.stringify(Number(event.target.value) as Durations), ); }; diff --git a/static/js/src/advantage/distributor/components/DistributorShopForm/TechnicalUserContact/TechnicalUserContact.tsx b/static/js/src/advantage/distributor/components/DistributorShopForm/TechnicalUserContact/TechnicalUserContact.tsx index 621a78cebd9..77c1137686c 100644 --- a/static/js/src/advantage/distributor/components/DistributorShopForm/TechnicalUserContact/TechnicalUserContact.tsx +++ b/static/js/src/advantage/distributor/components/DistributorShopForm/TechnicalUserContact/TechnicalUserContact.tsx @@ -4,9 +4,8 @@ import { FormContext } from "advantage/distributor/utils/FormContext"; import { DISTRIBUTOR_SELECTOR_KEYS } from "advantage/distributor/utils/utils"; const TechnicalUserContact = () => { - const { technicalUserContact, setTechnicalUserContact } = useContext( - FormContext - ); + const { technicalUserContact, setTechnicalUserContact } = + useContext(FormContext); const handleChange = (event: React.ChangeEvent) => { const { name, value } = event.target; @@ -29,7 +28,7 @@ const TechnicalUserContact = () => { JSON.stringify({ ...technicalUserContact, [name]: captializeNameValue, - }) + }), ); }; diff --git a/static/js/src/advantage/distributor/components/InitiateButton/InitiateButton.tsx b/static/js/src/advantage/distributor/components/InitiateButton/InitiateButton.tsx index e85520a2ec4..f3df08be14a 100644 --- a/static/js/src/advantage/distributor/components/InitiateButton/InitiateButton.tsx +++ b/static/js/src/advantage/distributor/components/InitiateButton/InitiateButton.tsx @@ -20,7 +20,7 @@ export default function InitiateButton({ offer }: Prop) { setOffer(offer); localStorage.setItem( DISTRIBUTOR_SELECTOR_KEYS.OFFER_DATA, - JSON.stringify(offer) + JSON.stringify(offer), ); location.href = "/pro/distributor/shop"; }} diff --git a/static/js/src/advantage/distributor/hooks/useGetChannelOffersList.tsx b/static/js/src/advantage/distributor/hooks/useGetChannelOffersList.tsx index 1bdfecab1fe..d64f2375f9e 100644 --- a/static/js/src/advantage/distributor/hooks/useGetChannelOffersList.tsx +++ b/static/js/src/advantage/distributor/hooks/useGetChannelOffersList.tsx @@ -8,7 +8,7 @@ const useGetChannelOffersList = () => { `/pro/channel-offers.json${window.location.search}`, { cache: "no-store", - } + }, ); const res = await response.json(); if (res.error) { diff --git a/static/js/src/advantage/distributor/utils/FormContext.tsx b/static/js/src/advantage/distributor/utils/FormContext.tsx index b9b3b7f60be..8bd4e9aa4ce 100644 --- a/static/js/src/advantage/distributor/utils/FormContext.tsx +++ b/static/js/src/advantage/distributor/utils/FormContext.tsx @@ -84,50 +84,48 @@ export const FormProvider = ({ children, }: FormProviderProps) => { const localSubscriptionList = localStorage.getItem( - DISTRIBUTOR_SELECTOR_KEYS.SUBSCRIPTION_LIST + DISTRIBUTOR_SELECTOR_KEYS.SUBSCRIPTION_LIST, ); const localProductType = localStorage.getItem( - DISTRIBUTOR_SELECTOR_KEYS.PRODUCT_TYPE + DISTRIBUTOR_SELECTOR_KEYS.PRODUCT_TYPE, ); const localDuration = localStorage.getItem( - DISTRIBUTOR_SELECTOR_KEYS.DURATION + DISTRIBUTOR_SELECTOR_KEYS.DURATION, ); const localCurrency = localStorage.getItem( - DISTRIBUTOR_SELECTOR_KEYS.CURRENCY + DISTRIBUTOR_SELECTOR_KEYS.CURRENCY, ); const localTechnicalUserContact = localStorage.getItem( - DISTRIBUTOR_SELECTOR_KEYS.TECHNICAL_USER_CONTACT + DISTRIBUTOR_SELECTOR_KEYS.TECHNICAL_USER_CONTACT, ); const localOffer = localStorage.getItem(DISTRIBUTOR_SELECTOR_KEYS.OFFER_DATA); const [subscriptionList, setSubscriptionList] = useState( localSubscriptionList ? JSON.parse(localSubscriptionList) - : initialSubscriptionList + : initialSubscriptionList, ); const [productType, setProductType] = useState( - localProductType ? JSON.parse(localProductType) : initialType + localProductType ? JSON.parse(localProductType) : initialType, ); const [duration, setDuration] = useState( - localDuration ? JSON.parse(localDuration) : initialDuration - ); - const [ - technicalUserContact, - setTechnicalUserContact, - ] = useState( - localTechnicalUserContact - ? JSON.parse(localTechnicalUserContact) - : initialTechnicalUserContact + localDuration ? JSON.parse(localDuration) : initialDuration, ); + const [technicalUserContact, setTechnicalUserContact] = + useState( + localTechnicalUserContact + ? JSON.parse(localTechnicalUserContact) + : initialTechnicalUserContact, + ); const [currency, setCurrency] = useState( - localCurrency ? JSON.parse(localCurrency) : initialCurrency + localCurrency ? JSON.parse(localCurrency) : initialCurrency, ); const [products, setProducts] = useState(null); const [offer, setOffer] = useState( - localOffer ? JSON.parse(localOffer) : null + localOffer ? JSON.parse(localOffer) : null, ); const [channelProductList, setChannelProductList] = useState( - initialChannelProductList + initialChannelProductList, ); const updatedChannelProductList = useMemo(() => { @@ -151,7 +149,7 @@ export const FormProvider = ({ listing: any, nameWithVersion: string, nameWithoutVersion: string, - version: string + version: string, ) => { if (updatedChannelProductList) { updatedChannelProductList[nameWithoutVersion] = { @@ -190,7 +188,7 @@ export const FormProvider = ({ offerListing, offerListingNameWithVersion, nameWithoutVersion, - version + version, ); } } @@ -207,7 +205,7 @@ export const FormProvider = ({ listing, listing.name, nameWithoutVersion, - version + version, ); } } @@ -216,7 +214,7 @@ export const FormProvider = ({ listing, listing.name, nameWithoutVersion, - version + version, ); } }); @@ -229,7 +227,7 @@ export const FormProvider = ({ setChannelProductList(updatedChannelProductList); localStorage.setItem( DISTRIBUTOR_SELECTOR_KEYS.PRODUCT_LISTING, - JSON.stringify(updatedChannelProductList) + JSON.stringify(updatedChannelProductList), ); }, [updatedChannelProductList]); @@ -238,15 +236,15 @@ export const FormProvider = ({ getProductId( subscription.type as ProductTypes, subscription.support as Support, - subscription.sla as SLA - ) + subscription.sla as SLA, + ), ); const validproducts: string[] = productIds.map( (productId: ValidProductID) => - `${productId}-${duration}y-channel-${currency}` + `${productId}-${duration}y-channel-${currency}`, ); return validproducts.map( - (validproduct) => channelProductList[validproduct] + (validproduct) => channelProductList[validproduct], ); }, [duration, currency, subscriptionList, channelProductList]); @@ -263,7 +261,7 @@ export const FormProvider = ({ setSubscriptionList(preSetItem as SubscriptionItem[]); localStorage.setItem( DISTRIBUTOR_SELECTOR_KEYS.SUBSCRIPTION_LIST, - JSON.stringify(preSetItem as SubscriptionItem[]) + JSON.stringify(preSetItem as SubscriptionItem[]), ); } @@ -272,7 +270,7 @@ export const FormProvider = ({ setCurrency(preSetCurrency as Currencies); localStorage.setItem( DISTRIBUTOR_SELECTOR_KEYS.CURRENCY, - JSON.stringify(preSetCurrency as Currencies) + JSON.stringify(preSetCurrency as Currencies), ); } @@ -281,7 +279,7 @@ export const FormProvider = ({ preSetDration && setDuration(preSetDration as Durations); localStorage.setItem( DISTRIBUTOR_SELECTOR_KEYS.DURATION, - JSON.stringify(preSetDration as Durations) + JSON.stringify(preSetDration as Durations), ); } } diff --git a/static/js/src/advantage/distributor/utils/utils.ts b/static/js/src/advantage/distributor/utils/utils.ts index e0241f7db34..e10750db9bc 100644 --- a/static/js/src/advantage/distributor/utils/utils.ts +++ b/static/js/src/advantage/distributor/utils/utils.ts @@ -115,7 +115,7 @@ export type ValidProductID = export const getProductId = ( productType: DistributorProductTypes, support: Support, - sla: SLA + sla: SLA, ): ValidProductID => { const productKey = `${productType}-${support}-${sla}`; switch (productKey) { diff --git a/static/js/src/advantage/manage-subscription.js b/static/js/src/advantage/manage-subscription.js index a9fe2017c37..68b44929af8 100644 --- a/static/js/src/advantage/manage-subscription.js +++ b/static/js/src/advantage/manage-subscription.js @@ -128,24 +128,20 @@ const requiresAuthentication = (invoice) => { const handleUpdateClick = (id, VPSize) => { const resizeField = document.querySelector( - `#resize-input--${id}[data-viewport="${VPSize}"]` + `#resize-input--${id}[data-viewport="${VPSize}"]`, ); const updateButton = document.querySelector( - `#save-changes--${id}[data-viewport="${VPSize}"]` + `#save-changes--${id}[data-viewport="${VPSize}"]`, ); - const { - accountId, - productListingId, - previousPurchaseId, - billingPeriod, - } = updateButton.dataset; + const { accountId, productListingId, previousPurchaseId, billingPeriod } = + updateButton.dataset; const successNotificationElements = document.querySelectorAll( - `.success-${id}` + `.success-${id}`, ); const cautionNotificationElements = document.querySelectorAll( - `.caution-${id}` + `.caution-${id}`, ); const elements = { @@ -175,7 +171,7 @@ const handleUpdateClick = (id, VPSize) => { previousPurchaseId, productListingId, resizeField.value, - billingPeriod + billingPeriod, ).then((data) => { if (data.errors) { if (data.errors.includes("can only make one purchase")) { @@ -195,20 +191,17 @@ const handleUpdateClick = (id, VPSize) => { const cancelSubscription = (id, VPSize) => { const cancelSubscriptionButton = document.querySelector( - `#cancel-subscription--${id}[data-viewport="${VPSize}"]` + `#cancel-subscription--${id}[data-viewport="${VPSize}"]`, ); - const { - accountId, - productListingId, - previousPurchaseId, - } = cancelSubscriptionButton.dataset; + const { accountId, productListingId, previousPurchaseId } = + cancelSubscriptionButton.dataset; const confirmCancelButton = document.querySelector(`#confirmCancelButton`); const successNotificationElements = document.querySelectorAll( - `.success-${id}` + `.success-${id}`, ); const cautionNotificationElements = document.querySelectorAll( - `.caution-${id}` + `.caution-${id}`, ); const elements = { @@ -244,13 +237,13 @@ const cancelSubscription = (id, VPSize) => { } else { handleSuccess(elements, "cancelling_subscription_success"); } - } + }, ); }; const createModal = (id, VPSize) => { const cancelSubscriptionButton = document.querySelector( - `#cancel-subscription--${id}[data-viewport="${VPSize}"]` + `#cancel-subscription--${id}[data-viewport="${VPSize}"]`, ); const { contractName, machineCount } = cancelSubscriptionButton.dataset; @@ -324,28 +317,28 @@ const createModal = (id, VPSize) => { const handleCancelChangesClick = (id, VPSize) => { // Hide edit options const previewSection = document.querySelector( - `#view-mode--${id}[data-viewport="${VPSize}"]` + `#view-mode--${id}[data-viewport="${VPSize}"]`, ); const editSection = document.querySelector( - `#edit-mode--${id}[data-viewport="${VPSize}"]` + `#edit-mode--${id}[data-viewport="${VPSize}"]`, ); previewSection.classList.remove("u-hide"); editSection.classList.add("u-hide"); // Reset input and help text const resizeField = document.querySelector( - `#resize-input--${id}[data-viewport="${VPSize}"]` + `#resize-input--${id}[data-viewport="${VPSize}"]`, ); resizeField.oninput = () => {}; resizeField.value = resizeField.defaultValue; const resizeSummary = document.querySelector( - `#resize-summary--${id}[data-viewport="${VPSize}"]` + `#resize-summary--${id}[data-viewport="${VPSize}"]`, ); const newPayment = document.querySelector( - `#new-payment--${id}[data-viewport="${VPSize}"]` + `#new-payment--${id}[data-viewport="${VPSize}"]`, ); const updateButton = document.querySelector( - `#save-changes--${id}[data-viewport="${VPSize}"]` + `#save-changes--${id}[data-viewport="${VPSize}"]`, ); resizeSummary.classList.add("u-hide"); newPayment.classList.add("u-hide"); @@ -353,17 +346,17 @@ const handleCancelChangesClick = (id, VPSize) => { // Remove buttons handlers const cancelSubscriptionButton = document.querySelector( - `#cancel-subscription--${id}[data-viewport="${VPSize}"]` + `#cancel-subscription--${id}[data-viewport="${VPSize}"]`, ); const cancelChangesButton = document.querySelector( - `#cancel-changes--${id}[data-viewport="${VPSize}"]` + `#cancel-changes--${id}[data-viewport="${VPSize}"]`, ); updateButton.onclick = () => {}; cancelChangesButton.onclick = () => {}; if (cancelSubscriptionButton) cancelSubscriptionButton.onclick = () => {}; const cautionNotificationElements = document.querySelectorAll( - `.caution-${id}` + `.caution-${id}`, ); cautionNotificationElements.forEach((element) => { @@ -378,7 +371,7 @@ const handleChange = (e, id, VPSize) => { const unitPrice = Number.parseFloat(e.target.dataset.unitPrice / 100); const nextPayment = Number.parseFloat( - e.target.dataset.nextPayment.split(" ")[0] + e.target.dataset.nextPayment.split(" ")[0], ); const billingPeriod = e.target.dataset.billingPeriod; @@ -388,13 +381,13 @@ const handleChange = (e, id, VPSize) => { }); const resizeSummary = document.querySelector( - `#resize-summary--${id}[data-viewport="${VPSize}"]` + `#resize-summary--${id}[data-viewport="${VPSize}"]`, ); const newPayment = document.querySelector( - `#new-payment--${id}[data-viewport="${VPSize}"]` + `#new-payment--${id}[data-viewport="${VPSize}"]`, ); const updateButton = document.querySelector( - `#save-changes--${id}[data-viewport="${VPSize}"]` + `#save-changes--${id}[data-viewport="${VPSize}"]`, ); const { min, max } = e.target; @@ -411,14 +404,14 @@ const handleChange = (e, id, VPSize) => { if (deltaMachines > 0) { resizeSummary.innerHTML = `Your changes will add UA for ${deltaMachines} machines`; newPayment.innerHTML = `Your ${billingPeriod} payment will be increased by ${formatter.format( - unitPrice * deltaMachines + unitPrice * deltaMachines, )}${ billingPeriod === "monthly" ? `, to ${formatter.format( - unitPrice * deltaMachines + nextPayment + unitPrice * deltaMachines + nextPayment, )} per month.` : ` per year.
A payment of ${formatter.format( - unitPrice * deltaMachines + unitPrice * deltaMachines, )} will be charged immediately` }`; } else { @@ -427,9 +420,9 @@ const handleChange = (e, id, VPSize) => { deltaMachines * -1 } machines`; newPayment.innerHTML = `Your monthly payment will be reduced by ${formatter.format( - unitPrice * (deltaMachines * -1) + unitPrice * (deltaMachines * -1), )}, to ${formatter.format( - unitPrice * deltaMachines + nextPayment + unitPrice * deltaMachines + nextPayment, )} per month.
Unused credit will be applied to next month’s invoice.`; } } else { @@ -466,24 +459,24 @@ function handleChangeClick() { const id = this.dataset.id; const VPSize = this.dataset.viewport; const updateButton = document.querySelector( - `#save-changes--${id}[data-viewport="${VPSize}"]` + `#save-changes--${id}[data-viewport="${VPSize}"]`, ); const cancelChangesButton = document.querySelector( - `#cancel-changes--${id}[data-viewport="${VPSize}"]` + `#cancel-changes--${id}[data-viewport="${VPSize}"]`, ); const cancelSubscriptionButton = document.querySelector( - `#cancel-subscription--${id}[data-viewport="${VPSize}"]` + `#cancel-subscription--${id}[data-viewport="${VPSize}"]`, ); const resizeField = document.querySelector( - `#resize-input--${id}[data-viewport="${VPSize}"]` + `#resize-input--${id}[data-viewport="${VPSize}"]`, ); // Show edit options const previewSection = document.querySelector( - `#view-mode--${id}[data-viewport="${VPSize}"]` + `#view-mode--${id}[data-viewport="${VPSize}"]`, ); const editSection = document.querySelector( - `#edit-mode--${id}[data-viewport="${VPSize}"]` + `#edit-mode--${id}[data-viewport="${VPSize}"]`, ); previewSection.classList.add("u-hide"); editSection.classList.remove("u-hide"); @@ -507,7 +500,7 @@ function handleChangeClick() { if (cancelSubscriptionButton) { cancelSubscriptionButton.onclick = () => { const cautionNotificationElements = document.querySelectorAll( - `.caution-${id}` + `.caution-${id}`, ); cautionNotificationElements.forEach((element) => { diff --git a/static/js/src/advantage/offers/components/Offer/Offer.tsx b/static/js/src/advantage/offers/components/Offer/Offer.tsx index ca2c66b633e..717111d95db 100644 --- a/static/js/src/advantage/offers/components/Offer/Offer.tsx +++ b/static/js/src/advantage/offers/components/Offer/Offer.tsx @@ -114,7 +114,7 @@ const Offer = ({ offer }: Props) => {

{currencyFormatter.format( - (total - total * (discount / 100)) / 100 + (total - total * (discount / 100)) / 100, )}

diff --git a/static/js/src/advantage/offers/components/OffersList/OffersList.test.tsx b/static/js/src/advantage/offers/components/OffersList/OffersList.test.tsx index bc4ad75e705..02503c643f1 100644 --- a/static/js/src/advantage/offers/components/OffersList/OffersList.test.tsx +++ b/static/js/src/advantage/offers/components/OffersList/OffersList.test.tsx @@ -15,10 +15,10 @@ describe("OffersList", () => { render( - + , ); expect( - screen.getByText("You have no offers available.") + screen.getByText("You have no offers available."), ).toBeInTheDocument(); }); @@ -27,7 +27,7 @@ describe("OffersList", () => { render( - + , ); expect(screen.getAllByTestId("offer-card").length).toBe(1); }); @@ -35,12 +35,12 @@ describe("OffersList", () => { it("can display multiple offers", () => { queryClient.setQueryData( ["Offers"], - [OfferFactory.build({ id: "1" }), OfferFactory.build({ id: "2" })] + [OfferFactory.build({ id: "1" }), OfferFactory.build({ id: "2" })], ); render( - + , ); expect(screen.getAllByTestId("offer-card").length).toBe(2); }); diff --git a/static/js/src/advantage/offers/components/PaymentButton/PaymentButton.test.tsx b/static/js/src/advantage/offers/components/PaymentButton/PaymentButton.test.tsx index 1c5df650d6c..25cd8d3bc81 100644 --- a/static/js/src/advantage/offers/components/PaymentButton/PaymentButton.test.tsx +++ b/static/js/src/advantage/offers/components/PaymentButton/PaymentButton.test.tsx @@ -16,10 +16,10 @@ describe("PaymentButton", () => { writable: true, }); - window.location = ({ + window.location = { href: "/old/url", assign: jest.fn(), - } as unknown) as Location; + } as unknown as Location; const localStorageMock = (function () { let store: Record = {}; @@ -52,7 +52,7 @@ describe("PaymentButton", () => { await waitFor(() => { expect(window.location.href).toBe("/account/checkout"); expect(localStorage.getItem("shop-checkout-data")).toBe( - '{"products":[{"product":{"longId":"oAaBbCcDdEe","period":"yearly","marketplace":"canonical-ua","id":"oAaBbCcDdEe","name":"1x Ubuntu Pro, 2x Ubuntu Pro (Infra)","price":{"value":50000},"canBeTrialled":false},"quantity":1}],"action":"offer"}' + '{"products":[{"product":{"longId":"oAaBbCcDdEe","period":"yearly","marketplace":"canonical-ua","id":"oAaBbCcDdEe","name":"1x Ubuntu Pro, 2x Ubuntu Pro (Infra)","price":{"value":50000},"canBeTrialled":false},"quantity":1}],"action":"offer"}', ); }); diff --git a/static/js/src/advantage/offers/components/PaymentButton/PaymentButton.tsx b/static/js/src/advantage/offers/components/PaymentButton/PaymentButton.tsx index 47864a68aea..e5e3c944559 100644 --- a/static/js/src/advantage/offers/components/PaymentButton/PaymentButton.tsx +++ b/static/js/src/advantage/offers/components/PaymentButton/PaymentButton.tsx @@ -25,7 +25,7 @@ export default function PaymentButton({ product }: Prop) { e.preventDefault(); localStorage.setItem( "shop-checkout-data", - JSON.stringify(shopCheckoutData) + JSON.stringify(shopCheckoutData), ); location.href = "/account/checkout"; }} diff --git a/static/js/src/advantage/offers/hooks/useGetOffersList.tsx b/static/js/src/advantage/offers/hooks/useGetOffersList.tsx index 576dd06391e..45a08efbc61 100644 --- a/static/js/src/advantage/offers/hooks/useGetOffersList.tsx +++ b/static/js/src/advantage/offers/hooks/useGetOffersList.tsx @@ -8,7 +8,7 @@ const useGetOffersList = () => { `/pro/offers.json${window.location.search}`, { cache: "no-store", - } + }, ); const res = await response.json(); diff --git a/static/js/src/advantage/react/components/FeatureSwitch/FeatureSwitch.test.tsx b/static/js/src/advantage/react/components/FeatureSwitch/FeatureSwitch.test.tsx index c7b1c60e950..bbea614e5d1 100644 --- a/static/js/src/advantage/react/components/FeatureSwitch/FeatureSwitch.test.tsx +++ b/static/js/src/advantage/react/components/FeatureSwitch/FeatureSwitch.test.tsx @@ -7,7 +7,7 @@ it("renders unchecked state correctly", () => { render( ESM Infra - + , ); const checkbox = screen.getByRole("checkbox", { @@ -22,7 +22,7 @@ it("renders checked state correctly", () => { render( ESM Infra - + , ); const checkbox = screen.getByRole("checkbox", { @@ -41,7 +41,7 @@ it("renders disabled variant correctly", () => { handleOnChange={jest.fn()} > ESM Infra - + , ); const checkbox = screen.getByRole("checkbox", { @@ -57,7 +57,7 @@ it("calls handleOnChange on click", async () => { render( ESM Infra - + , ); const checkbox = screen.getByRole("checkbox", { diff --git a/static/js/src/advantage/react/components/FormikField/FormikField.test.tsx b/static/js/src/advantage/react/components/FormikField/FormikField.test.tsx index cb9672caad8..9a444493009 100644 --- a/static/js/src/advantage/react/components/FormikField/FormikField.test.tsx +++ b/static/js/src/advantage/react/components/FormikField/FormikField.test.tsx @@ -16,7 +16,7 @@ describe("FormikField", () => { required={true} type="text" /> - + , ); const input = wrapper.find("Input"); expect(input.exists()).toBe(true); @@ -28,7 +28,7 @@ describe("FormikField", () => { const wrapper = mount( - + , ); expect(wrapper.find("Textarea").exists()).toBe(true); }); diff --git a/static/js/src/advantage/react/components/Subscriptions/Content/Content.test.tsx b/static/js/src/advantage/react/components/Subscriptions/Content/Content.test.tsx index b12e8ac6ca8..dbc7f385fb1 100644 --- a/static/js/src/advantage/react/components/Subscriptions/Content/Content.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/Content/Content.test.tsx @@ -35,10 +35,10 @@ describe("Content", () => { const wrapper = mount( - + , ); expect(wrapper.find("[data-test='initial-load'] Spinner").exists()).toBe( - true + true, ); expect(wrapper.find("SubscriptionList").exists()).toBe(false); expect(wrapper.find("SubscriptionDetails").exists()).toBe(false); @@ -48,7 +48,7 @@ describe("Content", () => { const wrapper = mount( - + , ); expect(wrapper.find("[data-test='initial-load']").exists()).toBe(false); expect(wrapper.find("SubscriptionList").exists()).toBe(true); @@ -65,7 +65,7 @@ describe("Content", () => { const wrapper = mount( - + , ); // Use act and wrapper.update to force waiting for the component to finish rendering. @@ -76,7 +76,7 @@ describe("Content", () => { wrapper.update(); expect( - wrapper.find("Notification[data-test='loading-error']").exists() + wrapper.find("Notification[data-test='loading-error']").exists(), ).toBe(true); expect(wrapper.find("SubscriptionList").exists()).toBe(false); expect(wrapper.find("SubscriptionDetails").exists()).toBe(false); @@ -105,10 +105,10 @@ describe("Content", () => { const wrapper = mount( - + , ); expect(wrapper.find(SubscriptionList).prop("selectedId")).toBe( - subscriptions[2].id + subscriptions[2].id, ); }); @@ -131,10 +131,10 @@ describe("Content", () => { const wrapper = mount( - + , ); expect(wrapper.find(SubscriptionList).prop("selectedId")).toBe( - subscriptions[1].id + subscriptions[1].id, ); }); @@ -153,12 +153,12 @@ describe("Content", () => { mount( - + , ); expect(window.accountId).toBe("aAaBbCcDd"); expect(localStorage.getItem("shop-checkout-data")).toBe( - '{"products":[{"product":{"canBeTrialled":false,"longId":"lAaBbCcDdEe","name":"Ubuntu Pro","period":"yearly","price":{"value":7500},"id":"physical-uai-essential-weekday-yearly","marketplace":"canonical-ua"},"quantity":12}],"action":"purchase"}' + '{"products":[{"product":{"canBeTrialled":false,"longId":"lAaBbCcDdEe","name":"Ubuntu Pro","period":"yearly","price":{"value":7500},"id":"physical-uai-essential-weekday-yearly","marketplace":"canonical-ua"},"quantity":12}],"action":"purchase"}', ); expect(window.location.href).toBe("/account/checkout"); }); diff --git a/static/js/src/advantage/react/components/Subscriptions/Content/Content.tsx b/static/js/src/advantage/react/components/Subscriptions/Content/Content.tsx index 848297a60d6..9ea60106799 100644 --- a/static/js/src/advantage/react/components/Subscriptions/Content/Content.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/Content/Content.tsx @@ -21,9 +21,8 @@ const Content = () => { const [modalActive, setModalActive] = useState(false); const [selectedId, setSelectedId] = useState(null); const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); - const [scrollTargetRef, scrollIntoView] = useScrollIntoView( - 20 - ); + const [scrollTargetRef, scrollIntoView] = + useScrollIntoView(20); const { data: allSubscriptions, isError, isLoading } = useUserSubscriptions(); const onSetActive = useCallback( @@ -33,7 +32,7 @@ const Content = () => { if (hasUnsavedChanges) { if ( window.confirm( - "You have unsaved changes. Are you sure you want to leave?" + "You have unsaved changes. Are you sure you want to leave?", ) ) { // User asked to leave the page @@ -49,21 +48,20 @@ const Content = () => { } setModalActive(!!token); }, - [setSelectedId, hasUnsavedChanges] + [setSelectedId, hasUnsavedChanges], ); // Select a token on the first load. useEffect(() => { if (!selectedId && !isLoading && allSubscriptions?.length) { - const sortedSubscriptions = sortSubscriptionsByStartDate( - allSubscriptions - ); + const sortedSubscriptions = + sortSubscriptionsByStartDate(allSubscriptions); // Get the first UA subscription, or if there are none then get the first // available. const firstSubscription = sortedSubscriptions.find( ({ marketplace }) => - marketplace === UserSubscriptionMarketplace.CanonicalUA + marketplace === UserSubscriptionMarketplace.CanonicalUA, ) || sortedSubscriptions[0]; // This only sets the selected token and does not set the modal to active // to prevent the modal appearing on first load on mobile. @@ -115,7 +113,7 @@ const Content = () => { localStorage.setItem( "shop-checkout-data", - JSON.stringify(shopCheckoutData) + JSON.stringify(shopCheckoutData), ); location.href = "/account/checkout"; } diff --git a/static/js/src/advantage/react/components/Subscriptions/ExpiryNotification/ExpiryNotification.test.tsx b/static/js/src/advantage/react/components/Subscriptions/ExpiryNotification/ExpiryNotification.test.tsx index 7c0628c5176..4c9f878604a 100644 --- a/static/js/src/advantage/react/components/Subscriptions/ExpiryNotification/ExpiryNotification.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/ExpiryNotification/ExpiryNotification.test.tsx @@ -15,12 +15,12 @@ describe("ExpiryNotification", () => { + />, ); expect(wrapper.find("[data-test='is_expiring-large']").exists()).toBe(true); expect(wrapper.find(Notification).prop("borderless")).toBe(false); expect(wrapper.find(Notification).prop("title")).toBe( - "Your subscription is about to expire." + "Your subscription is about to expire.", ); }); @@ -32,12 +32,12 @@ describe("ExpiryNotification", () => { + />, ); expect(wrapper.find("[data-test='is_expired-large']").exists()).toBe(true); expect(wrapper.find(Notification).prop("borderless")).toBe(false); expect(wrapper.find(Notification).prop("title")).toBe( - "Your subscription has expired." + "Your subscription has expired.", ); }); @@ -49,14 +49,14 @@ describe("ExpiryNotification", () => { + />, ); expect( - wrapper.find("[data-test='is_in_grace_period-large']").exists() + wrapper.find("[data-test='is_in_grace_period-large']").exists(), ).toBe(true); expect(wrapper.find(Notification).prop("borderless")).toBe(false); expect(wrapper.find(Notification).prop("title")).toBe( - "Your subscription has expired." + "Your subscription has expired.", ); }); @@ -71,14 +71,14 @@ describe("ExpiryNotification", () => { showMultiple size={ExpiryNotificationSize.Large} statuses={statuses} - /> + />, ); expect( - wrapper.find("[data-test='is_in_grace_period-large']").exists() + wrapper.find("[data-test='is_in_grace_period-large']").exists(), ).toBe(true); expect(wrapper.find("[data-test='is_expired-large']").exists()).toBe(true); expect(wrapper.find("[data-test='is_expiring-large']").exists()).toBe( - false + false, ); }); @@ -92,14 +92,14 @@ describe("ExpiryNotification", () => { + />, ); expect(wrapper.find("[data-test='is_expired-large']").exists()).toBe(true); expect( - wrapper.find("[data-test='is_in_grace_period-large']").exists() + wrapper.find("[data-test='is_in_grace_period-large']").exists(), ).toBe(false); expect(wrapper.find("[data-test='is_expiring-large']").exists()).toBe( - false + false, ); }); @@ -111,7 +111,7 @@ describe("ExpiryNotification", () => { + />, ); expect(wrapper.find("[data-test='is_expired-small']").exists()).toBe(true); expect(wrapper.find(Notification).prop("title")).toBeNull(); @@ -128,7 +128,7 @@ describe("ExpiryNotification", () => { size={ExpiryNotificationSize.Small} statuses={statuses} onDismiss={onDismiss} - /> + />, ); expect(wrapper.find(Notification).prop("onDismiss")).toBe(onDismiss); }); @@ -144,14 +144,14 @@ describe("ExpiryNotification", () => { subscriptionType={UserSubscriptionType.Monthly} statuses={statuses} onDismiss={onDismiss} - /> + />, ); expect(wrapper.find("[data-test='is_expiring-large']").exists()).toBe(true); expect(wrapper.find(Notification).prop("title")).toBe( - "Your subscription is about to expire." + "Your subscription is about to expire.", ); expect(wrapper.find(Notification).prop("children")).toBe( - "Enable auto-renewals via the renewal settings menu to ensure service continuity." + "Enable auto-renewals via the renewal settings menu to ensure service continuity.", ); }); @@ -166,14 +166,14 @@ describe("ExpiryNotification", () => { subscriptionType={UserSubscriptionType.Free} statuses={statuses} onDismiss={onDismiss} - /> + />, ); expect(wrapper.find("[data-test='is_expiring-large']").exists()).toBe(true); expect(wrapper.find(Notification).prop("title")).toBe( - "Your subscription is about to expire." + "Your subscription is about to expire.", ); expect(wrapper.find(Notification).prop("children")).toBe( - "Check the subscription errors below for more information." + "Check the subscription errors below for more information.", ); }); @@ -189,14 +189,14 @@ describe("ExpiryNotification", () => { subscriptionType={UserSubscriptionType.Legacy} statuses={statuses} onDismiss={onDismiss} - /> + />, ); expect(wrapper.find("[data-test='is_expiring-large']").exists()).toBe(true); expect(wrapper.find(Notification).prop("title")).toBe( - "Your subscription is about to expire." + "Your subscription is about to expire.", ); expect(wrapper.find(Notification).prop("children")).toBe( - "Click on Renew subscription to to ensure service continuity." + "Click on Renew subscription to to ensure service continuity.", ); }); it("is expiring shows not legacy message if not actionable", () => { @@ -211,11 +211,11 @@ describe("ExpiryNotification", () => { subscriptionType={UserSubscriptionType.Legacy} statuses={statuses} onDismiss={onDismiss} - /> + />, ); expect(wrapper.find("[data-test='is_expiring-large']").exists()).toBe(true); expect(wrapper.find(Notification).prop("title")).toBe( - "Your subscription is about to expire." + "Your subscription is about to expire.", ); expect(wrapper.find(Notification).prop("children")).toBe(""); }); @@ -232,16 +232,16 @@ describe("ExpiryNotification", () => { subscriptionType={UserSubscriptionType.Legacy} statuses={statuses} onDismiss={onDismiss} - /> + />, ); expect( - wrapper.find("[data-test='is_in_grace_period-large']").exists() + wrapper.find("[data-test='is_in_grace_period-large']").exists(), ).toBe(true); expect(wrapper.find(Notification).prop("title")).toBe( - "Your subscription has expired." + "Your subscription has expired.", ); expect(wrapper.find(Notification).prop("children")).toBe( - "Click on Renew subscription to to ensure service continuity." + "Click on Renew subscription to to ensure service continuity.", ); }); @@ -257,13 +257,13 @@ describe("ExpiryNotification", () => { subscriptionType={UserSubscriptionType.Legacy} statuses={statuses} onDismiss={onDismiss} - /> + />, ); expect( - wrapper.find("[data-test='is_in_grace_period-large']").exists() + wrapper.find("[data-test='is_in_grace_period-large']").exists(), ).toBe(true); expect(wrapper.find(Notification).prop("title")).toBe( - "Your subscription has expired." + "Your subscription has expired.", ); expect(wrapper.find(Notification).prop("children")).toBe(""); }); @@ -280,14 +280,14 @@ describe("ExpiryNotification", () => { subscriptionType={UserSubscriptionType.Legacy} statuses={statuses} onDismiss={onDismiss} - /> + />, ); expect(wrapper.find("[data-test='is_expired-large']").exists()).toBe(true); expect(wrapper.find(Notification).prop("title")).toBe( - "Your subscription has expired." + "Your subscription has expired.", ); expect(wrapper.find(Notification).prop("children")).toBe( - "Click on Renew subscription to to ensure service continuity." + "Click on Renew subscription to to ensure service continuity.", ); }); @@ -303,11 +303,11 @@ describe("ExpiryNotification", () => { subscriptionType={UserSubscriptionType.Legacy} statuses={statuses} onDismiss={onDismiss} - /> + />, ); expect(wrapper.find("[data-test='is_expired-large']").exists()).toBe(true); expect(wrapper.find(Notification).prop("title")).toBe( - "Your subscription has expired." + "Your subscription has expired.", ); expect(wrapper.find(Notification).prop("children")).toBe(""); }); @@ -323,16 +323,16 @@ describe("ExpiryNotification", () => { subscriptionType={UserSubscriptionType.Trial} statuses={statuses} onDismiss={onDismiss} - /> + />, ); expect(wrapper.find("[data-test='is_expiring-large']").exists()).toBe(true); expect(wrapper.find(Notification).prop("title")).toBe( - "Your subscription is about to expire." + "Your subscription is about to expire.", ); expect(wrapper.find(Notification).prop("children")).toBe( "You have cancelled your Ubuntu Pro trial. " + "At the end of the trial period, this subscription " + - "will disappear and you will no longer have access to Pro services." + "will disappear and you will no longer have access to Pro services.", ); }); @@ -347,17 +347,17 @@ describe("ExpiryNotification", () => { subscriptionType={UserSubscriptionType.Trial} statuses={statuses} onDismiss={onDismiss} - /> + />, ); expect( - wrapper.find("[data-test='is_in_grace_period-large']").exists() + wrapper.find("[data-test='is_in_grace_period-large']").exists(), ).toBe(true); expect(wrapper.find(Notification).prop("title")).toBe( - "Your subscription has expired." + "Your subscription has expired.", ); expect(wrapper.find(Notification).prop("children")).toBe( "Your trial has expired. " + - "This subscription will disappear from your dashboard soon." + "This subscription will disappear from your dashboard soon.", ); }); @@ -372,15 +372,15 @@ describe("ExpiryNotification", () => { subscriptionType={UserSubscriptionType.Trial} statuses={statuses} onDismiss={onDismiss} - /> + />, ); expect(wrapper.find("[data-test='is_expired-large']").exists()).toBe(true); expect(wrapper.find(Notification).prop("title")).toBe( - "Your subscription has expired." + "Your subscription has expired.", ); expect(wrapper.find(Notification).prop("children")).toBe( "Your trial has expired. " + - "This subscription will disappear from your dashboard soon." + "This subscription will disappear from your dashboard soon.", ); }); }); diff --git a/static/js/src/advantage/react/components/Subscriptions/Landscape/Landscape.test.tsx b/static/js/src/advantage/react/components/Subscriptions/Landscape/Landscape.test.tsx index 7d00a40b1a6..1801252ecbb 100644 --- a/static/js/src/advantage/react/components/Subscriptions/Landscape/Landscape.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/Landscape/Landscape.test.tsx @@ -13,15 +13,15 @@ describe("Landscape", () => { const wrapper = mount( - + , ); expect(wrapper.find("[data-test='landscape']").exists()).toBe(true); expect(wrapper.find(Button).length).toBe(2); expect(wrapper.find(Button).at(0).text()).toBe( - "Install self-hosted Landscape" + "Install self-hosted Landscape", ); expect(wrapper.find(Button).at(1).text()).toBe( - "Request a Landscape SaaS account" + "Request a Landscape SaaS account", ); }); }); diff --git a/static/js/src/advantage/react/components/Subscriptions/Notifications/Notifications.test.tsx b/static/js/src/advantage/react/components/Subscriptions/Notifications/Notifications.test.tsx index f457eab37ce..80afdcfc351 100644 --- a/static/js/src/advantage/react/components/Subscriptions/Notifications/Notifications.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/Notifications/Notifications.test.tsx @@ -24,12 +24,12 @@ describe("Notifications", () => { has_pending_purchases: true, }), }), - ] + ], ); const wrapper = mount( - + , ); expect(wrapper.find("[data-test='pendingPurchase']").exists()).toBe(true); }); @@ -43,12 +43,12 @@ describe("Notifications", () => { has_pending_purchases: false, }), }), - ] + ], ); const wrapper = mount( - + , ); expect(wrapper.find("[data-test='pendingPurchase']").exists()).toBe(false); }); @@ -66,7 +66,7 @@ describe("Offers Notifications", () => { const wrapper = mount( - + , ); expect(wrapper.find("[data-test='offers']").exists()).toBe(true); }); @@ -76,7 +76,7 @@ describe("Offers Notifications", () => { const wrapper = mount( - + , ); expect(wrapper.find("[data-test='offers']").exists()).toBe(false); }); @@ -99,7 +99,7 @@ describe("Account users Notification", () => { const wrapper = mount( - + , ); expect(wrapper.find("[data-test='onboarding']").exists()).toBe(true); }); @@ -110,7 +110,7 @@ describe("Account users Notification", () => { const wrapper = mount( - + , ); expect(wrapper.find("[data-test='onboarding']").exists()).toBe(false); }); @@ -122,7 +122,7 @@ describe("Account users Notification", () => { const wrapper = mount( - + , ); wrapper .find("[data-test='onboarding']") @@ -130,7 +130,7 @@ describe("Account users Notification", () => { .simulate("click"); expect(localStorage.setItem).toHaveBeenCalledWith( "dismissedOnboardingNotification", - "true" + "true", ); }); }); diff --git a/static/js/src/advantage/react/components/Subscriptions/Notifications/Notifications.tsx b/static/js/src/advantage/react/components/Subscriptions/Notifications/Notifications.tsx index a5134afeab9..6217e8966f3 100644 --- a/static/js/src/advantage/react/components/Subscriptions/Notifications/Notifications.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/Notifications/Notifications.tsx @@ -16,17 +16,13 @@ const Notifications = () => { }); const { data: offers } = useGetOffersList(); - const { - data: accountUsers, - isSuccess: isAccountUsersSuccess, - } = useRequestAccountUsers(); + const { data: accountUsers, isSuccess: isAccountUsersSuccess } = + useRequestAccountUsers(); - const [ - isShowingOnboardingNotification, - setIsShowingOnboardingNotification, - ] = React.useState( - localStorage.getItem("dismissedOnboardingNotification") !== "true" - ); + const [isShowingOnboardingNotification, setIsShowingOnboardingNotification] = + React.useState( + localStorage.getItem("dismissedOnboardingNotification") !== "true", + ); const dismissOnboardingNotification = () => { localStorage.setItem("dismissedOnboardingNotification", "true"); diff --git a/static/js/src/advantage/react/components/Subscriptions/RenewalButton/RenewalButton.test.tsx b/static/js/src/advantage/react/components/Subscriptions/RenewalButton/RenewalButton.test.tsx index de913296ff1..69eb29b9d07 100644 --- a/static/js/src/advantage/react/components/Subscriptions/RenewalButton/RenewalButton.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/RenewalButton/RenewalButton.test.tsx @@ -25,7 +25,7 @@ describe("RenewalButton", () => { subscription={subscription} action={action} editing={editing} - > + >, ); const renewButton = screen.getByRole("button") as HTMLInputElement; @@ -59,7 +59,7 @@ describe("RenewalButton", () => { subscription={subscription} action={action} editing={editing} - > + >, ); const renewButton = screen.getByRole("button") as HTMLInputElement; @@ -100,7 +100,7 @@ describe("RenewalButton", () => { subscription={subscription} action={action} editing={editing} - > + >, ); const renewButton = screen.getByRole("button") as HTMLInputElement; @@ -143,7 +143,7 @@ describe("RenewalButton", () => { subscription={subscription} action={action} editing={editing} - > + >, ); const renewButton = screen.getByRole("button") as HTMLInputElement; diff --git a/static/js/src/advantage/react/components/Subscriptions/RenewalButton/RenewalButton.tsx b/static/js/src/advantage/react/components/Subscriptions/RenewalButton/RenewalButton.tsx index 3d6876be211..5adf3f453a7 100644 --- a/static/js/src/advantage/react/components/Subscriptions/RenewalButton/RenewalButton.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/RenewalButton/RenewalButton.tsx @@ -67,7 +67,7 @@ export default function RenewalButton({ } localStorage.setItem( "shop-checkout-data", - JSON.stringify(shopCheckoutData) + JSON.stringify(shopCheckoutData), ); location.href = "/account/checkout"; }} diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionCancel/SubscriptionCancel.test.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionCancel/SubscriptionCancel.test.tsx index de9238fcf4b..f59e97fd23c 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionCancel/SubscriptionCancel.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionCancel/SubscriptionCancel.test.tsx @@ -32,7 +32,7 @@ describe("SubscriptionCancel", () => { queryClient.setQueryData(["userSubscriptions"], [subscription]); queryClient.setQueryData( ["lastPurchaseIds", subscription.account_id], - lastPurchaseIds + lastPurchaseIds, ); }); @@ -49,7 +49,7 @@ describe("SubscriptionCancel", () => { onCancelSuccess={jest.fn()} onClose={onClose} /> - + , ); await act(async () => { const close = wrapper.find(Modal).invoke("close"); @@ -69,10 +69,10 @@ describe("SubscriptionCancel", () => { onCancelSuccess={jest.fn()} onClose={onClose} /> - + , ); expect(wrapper.find("Spinner[data-test='form-loading']").exists()).toBe( - true + true, ); expect(wrapper.find("SubscriptionCancelFields").exists()).toBe(false); }); @@ -85,11 +85,11 @@ describe("SubscriptionCancel", () => { onCancelSuccess={jest.fn()} onClose={jest.fn()} /> - + , ); await act(async () => { expect(wrapper.find("Spinner[data-test='form-loading']").exists()).toBe( - false + false, ); expect(wrapper.find("Formik").exists()).toBe(true); }); @@ -103,7 +103,7 @@ describe("SubscriptionCancel", () => { onCancelSuccess={jest.fn()} onClose={jest.fn()} /> - + , ); await act(async () => { wrapper @@ -122,7 +122,7 @@ describe("SubscriptionCancel", () => { onCancelSuccess={jest.fn()} onClose={jest.fn()} /> - + , ); await act(async () => { wrapper @@ -140,7 +140,7 @@ describe("SubscriptionCancel", () => { onCancelSuccess={jest.fn()} onClose={jest.fn()} /> - + , ); await act(async () => { wrapper.find("Formik form").simulate("submit"); @@ -156,7 +156,7 @@ describe("SubscriptionCancel", () => { onCancelSuccess={jest.fn()} onClose={jest.fn()} /> - + , ); await act(async () => { wrapper @@ -180,7 +180,7 @@ describe("SubscriptionCancel", () => { onCancelSuccess={onCancelSuccess} onClose={jest.fn()} /> - + , ); await act(async () => { wrapper @@ -197,7 +197,7 @@ describe("SubscriptionCancel", () => { it("can display an error when the subscription is missing", async () => { cancelContractSpy.mockImplementation(() => - Promise.resolve({ errors: "no monthly subscription" }) + Promise.resolve({ errors: "no monthly subscription" }), ); const onCancelSuccess = jest.fn(); const wrapper = mount( @@ -207,7 +207,7 @@ describe("SubscriptionCancel", () => { onCancelSuccess={onCancelSuccess} onClose={jest.fn()} /> - + , ); await act(async () => { wrapper @@ -223,13 +223,13 @@ describe("SubscriptionCancel", () => { expect(notification.exists()).toBe(true); expect(notification.prop("data-test")).toBe("cancel-error"); expect(notification.text().includes("you have a pending payment")).toBe( - true + true, ); }); it("can display an error when cancelling failed", async () => { cancelContractSpy.mockImplementation(() => - Promise.resolve({ errors: "Uh oh" }) + Promise.resolve({ errors: "Uh oh" }), ); const onCancelSuccess = jest.fn(); const wrapper = mount( @@ -239,7 +239,7 @@ describe("SubscriptionCancel", () => { onCancelSuccess={onCancelSuccess} onClose={jest.fn()} /> - + , ); await act(async () => { wrapper @@ -255,7 +255,7 @@ describe("SubscriptionCancel", () => { expect(notification.exists()).toBe(true); expect(notification.prop("data-test")).toBe("cancel-error"); expect(notification.text().includes("you have a pending payment")).toBe( - false + false, ); }); @@ -267,7 +267,7 @@ describe("SubscriptionCancel", () => { onCancelSuccess={jest.fn()} onClose={jest.fn()} /> - + , ); await act(async () => { wrapper @@ -291,7 +291,7 @@ describe("SubscriptionCancel", () => { onClose={jest.fn()} isTrial /> - + , ); await act(async () => { wrapper diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionCancel/SubscriptionCancel.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionCancel/SubscriptionCancel.tsx index 56e3753b3bd..147e7e3aa92 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionCancel/SubscriptionCancel.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionCancel/SubscriptionCancel.tsx @@ -37,7 +37,7 @@ const CancelSchema = Yup.object().shape({ .test( "confirmationText", "You must enter the correct confirmation text", - (item) => item?.toLowerCase() === "cancel" + (item) => item?.toLowerCase() === "cancel", ) .required("The confirmation text is required"), }); @@ -84,7 +84,7 @@ const SubscriptionCancel = ({ setError( error.message.includes("no monthly subscription") ? CancelError.SubscriptionMissing - : CancelError.Failed + : CancelError.Failed, ), onSuccess: () => { onCancelSuccess(); diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionCancel/SubscriptionCancelFields/SubscriptionCancelFields.test.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionCancel/SubscriptionCancelFields/SubscriptionCancelFields.test.tsx index 82b4f33a9ec..6e146b72030 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionCancel/SubscriptionCancelFields/SubscriptionCancelFields.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionCancel/SubscriptionCancelFields/SubscriptionCancelFields.test.tsx @@ -9,7 +9,7 @@ describe("SubscriptionCancelFields", () => { const wrapper = mount( - + , ); wrapper .find("input[name='cancel']") @@ -21,7 +21,7 @@ describe("SubscriptionCancelFields", () => { const wrapper = mount( - + , ); wrapper.find("If you cancel this subscription"); expect(setIsValid).toHaveBeenCalledWith(true); @@ -32,7 +32,7 @@ describe("SubscriptionCancelFields", () => { const wrapper = mount( - + , ); wrapper.find("If you cancel this trial"); expect(setIsValid).toHaveBeenCalledWith(true); diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsContent/DetailsContent.test.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsContent/DetailsContent.test.tsx index 845412fb100..1bddb813942 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsContent/DetailsContent.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsContent/DetailsContent.test.tsx @@ -28,7 +28,7 @@ describe("DetailsContent", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find("[data-test='billing-col']").text()).toBe("None"); }); @@ -47,7 +47,7 @@ describe("DetailsContent", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find("[data-test='billing-col']").text()).toBe("Yearly"); }); @@ -61,10 +61,10 @@ describe("DetailsContent", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find("[data-test='token-spinner'] Spinner").exists()).toBe( - true + true, ); }); @@ -82,10 +82,10 @@ describe("DetailsContent", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find("[data-test='token-spinner'] Spinner").exists()).toBe( - false + false, ); }); @@ -95,7 +95,7 @@ describe("DetailsContent", () => { queryClient.setQueryData(["userSubscriptions"], [contract]); queryClient.setQueryData( ["contractToken", contract.contract_id], - contractToken + contractToken, ); const wrapper = mount( @@ -103,11 +103,11 @@ describe("DetailsContent", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find(".p-code-snippet").exists()).toBe(true); expect(wrapper.find("pre.p-code-snippet__block--icon").text()).toBe( - contractToken.contract_token + contractToken.contract_token, ); }); @@ -122,7 +122,7 @@ describe("DetailsContent", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find("[data-test='machine-type-col']").exists()).toBe(false); expect(wrapper.find("CodeSnippet").exists()).toBe(false); diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsContent/DetailsContent.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsContent/DetailsContent.tsx index e734f71e4b9..bff96f33b70 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsContent/DetailsContent.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsContent/DetailsContent.tsx @@ -57,7 +57,7 @@ const DetailsContent = ({ selectedId, setHasUnsavedChanges }: Props) => { const { data: token, isLoading: isLoadingToken } = useContractToken( subscription?.contract_id, - isTokenVisible + isTokenVisible, ); const SubscriptionToken = () => { @@ -122,7 +122,7 @@ const DetailsContent = ({ selectedId, setHasUnsavedChanges }: Props) => { { title: "Cost", value: currencyFormatter.format( - (subscription.price ?? 0) / 100 + (subscription.price ?? 0) / 100, ), }, ]), diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/DetailsTabs.test.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/DetailsTabs.test.tsx index d02a7def0c0..28b3b453dc4 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/DetailsTabs.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/DetailsTabs.test.tsx @@ -35,7 +35,7 @@ describe("DetailsTabs", () => { + />, ); expect(wrapper.find("[data-test='docs-content']").exists()).toBe(true); }); @@ -46,10 +46,10 @@ describe("DetailsTabs", () => { + />, ); expect(wrapper.find("[data-testid='features-content']").exists()).toBe( - false + false, ); }); @@ -58,7 +58,7 @@ describe("DetailsTabs", () => { + />, ); expect(wrapper.find("[data-test='docs-content']").exists()).toBe(true); wrapper.find("[data-test='features-tab']").simulate("click"); @@ -83,7 +83,7 @@ describe("DetailsTabs", () => { + />, ); // Switch to the docs tab: wrapper.find("[data-test='docs-tab']").simulate("click"); @@ -109,7 +109,7 @@ describe("DetailsTabs", () => { + />, ); // Switch to the docs tab: wrapper.find("[data-test='docs-tab']").simulate("click"); @@ -147,7 +147,7 @@ describe("DetailsTabs", () => { + />, ); // Switch to the docs tab: wrapper.find("[data-test='docs-tab']").simulate("click"); @@ -165,7 +165,7 @@ describe("DetailsTabs", () => { + />, ); // Switch to the docs tab: wrapper.find("[data-test='docs-tab']").simulate("click"); diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/DetailsTabs.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/DetailsTabs.tsx index d3f245bf883..956ef4af119 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/DetailsTabs.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/DetailsTabs.tsx @@ -51,7 +51,7 @@ export const generateList = (title: React.ReactNode, items: ListItem[]) => ( const getSupportLevel = (subscription: UserSubscription) => { const features: EntitlementsStore = filterAndFormatEntitlements( - subscription.entitlements + subscription.entitlements, ); if (features.byLabel["24/5 Support"]) { @@ -69,14 +69,14 @@ const DetailsTabs = ({ ...wrapperProps }: Props) => { const featuresDisplay = filterAndFormatEntitlements( - subscription.entitlements + subscription.entitlements, ); const isBlender = isBlenderSubscription(subscription); const isFree = isFreeSubscription(subscription); const [activeTab, setActiveTab] = useState( - ActiveTab.DOCUMENTATION + ActiveTab.DOCUMENTATION, ); let content: ReactNode | null; diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/FeaturesTab.test.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/FeaturesTab.test.tsx index d0a1d0658cc..1407db343d8 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/FeaturesTab.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/FeaturesTab.test.tsx @@ -40,7 +40,10 @@ const subscription = userSubscriptionFactory.build({ it("displays feature categories with content", () => { renderWithQueryClient( - + , ); screen.getByRole("heading", { name: "Default settings" }); screen.getByRole("heading", { @@ -54,39 +57,43 @@ it("displays feature categories with content", () => { it("submits correct entitlement updates", async () => { renderWithQueryClient( - + , ); expect( - screen.queryByRole("button", { name: "Save" }) + screen.queryByRole("button", { name: "Save" }), ).not.toBeInTheDocument(); userEvent.click( screen.getByRole("checkbox", { name: "Livepatch", - }) + }), ); await waitFor(() => { expect( - (screen.getByRole("checkbox", { - name: "Livepatch", - }) as HTMLInputElement).checked + ( + screen.getByRole("checkbox", { + name: "Livepatch", + }) as HTMLInputElement + ).checked, ).toBe(false); }); await waitFor(() => - expect(screen.getByRole("button", { name: "Save" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Save" })).toBeInTheDocument(), ); userEvent.click(screen.getByRole("button", { name: "Save" })); await waitFor(() => - expect(api.putContractEntitlements).toHaveBeenCalledTimes(1) + expect(api.putContractEntitlements).toHaveBeenCalledTimes(1), + ); + expect(api.putContractEntitlements).toHaveBeenCalledWith( + subscription.contract_id, + [{ is_enabled: false, type: "livepatch" }], ); - expect( - api.putContractEntitlements - ).toHaveBeenCalledWith(subscription.contract_id, [ - { is_enabled: false, type: "livepatch" }, - ]); }); it("hides feature tab when no features are available", () => { @@ -99,7 +106,10 @@ it("hides feature tab when no features are available", () => { ], }); renderWithQueryClient( - + , ); expect(screen.queryByText("Features")).not.toBeInTheDocument(); }); diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/FeaturesTab.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/FeaturesTab.tsx index 627c55a6761..ec02b01caa3 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/FeaturesTab.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/FeaturesTab.tsx @@ -30,18 +30,13 @@ type Props = { const FeaturesTab = ({ subscription, setHasUnsavedChanges }: Props) => { const [features, setFeatures] = React.useState( - filterAndFormatEntitlements(subscription.entitlements) + filterAndFormatEntitlements(subscription.entitlements), ); - const [ - featuresFormState, - setFeaturesFormState, - ] = React.useState(initialiseFeaturesForm(features)); + const [featuresFormState, setFeaturesFormState] = + React.useState(initialiseFeaturesForm(features)); - const { - mutateAsync, - isPending, - isError, - } = useUpdateContractEntitlementsMutation(); + const { mutateAsync, isPending, isError } = + useUpdateContractEntitlementsMutation(); const [entitlementsToUpdate, setEntitlementsToUpdate] = React.useState< EntitlementLabel[] @@ -49,7 +44,7 @@ const FeaturesTab = ({ subscription, setHasUnsavedChanges }: Props) => { const handleOnFeatureSwitch = ( label: EntitlementLabel, - event: React.ChangeEvent + event: React.ChangeEvent, ) => { const isChecked = !!event?.target?.checked; const entitlement = { ...featuresFormState[label], isChecked }; @@ -59,7 +54,7 @@ const FeaturesTab = ({ subscription, setHasUnsavedChanges }: Props) => { } setFeaturesFormState( - getNewFeaturesFormState(featuresFormState, entitlement) + getNewFeaturesFormState(featuresFormState, entitlement), ); if (label) @@ -168,7 +163,7 @@ const FeaturesTab = ({ subscription, setHasUnsavedChanges }: Props) => { ) : null} ), - })) + })), ) : null} @@ -194,7 +189,7 @@ const FeaturesTab = ({ subscription, setHasUnsavedChanges }: Props) => { features.excluded.map((label) => ({ icon: "error", label: label, - })) + })), ) : null} @@ -247,7 +242,7 @@ const FeaturesTab = ({ subscription, setHasUnsavedChanges }: Props) => { ) : null} ), - })) + })), ) : null} diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/utils.test.ts b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/utils.test.ts index 4f000be11ba..8f8ce6aa579 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/utils.test.ts +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/utils.test.ts @@ -30,7 +30,7 @@ const entitlements = [ it("returns correctly formatted features form state", () => { const featuresForm = initialiseFeaturesForm( - filterAndFormatEntitlements(entitlements) + filterAndFormatEntitlements(entitlements), ); expect(featuresForm).toStrictEqual({ @@ -57,12 +57,12 @@ it("returns correctly formatted features form state", () => { it("returns new features form state", () => { const featuresForm = initialiseFeaturesForm( - filterAndFormatEntitlements(entitlements) + filterAndFormatEntitlements(entitlements), ); expect(featuresForm[EntitlementLabel.Livepatch]).toHaveProperty( "isChecked", - true + true, ); const newFeatureState = { @@ -72,14 +72,14 @@ it("returns new features form state", () => { const newFeaturesFormState = getNewFeaturesFormState( featuresForm, - newFeatureState + newFeatureState, ); expect(newFeaturesFormState[EntitlementLabel.Livepatch]).toHaveProperty( "isChecked", - false + false, ); expect(newFeaturesFormState[EntitlementLabel.Livepatch]).toHaveProperty( "isDisabled", - false + false, ); }); diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/utils.ts b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/utils.ts index ee36fbacb67..7d9283c39db 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/utils.ts +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/DetailsTabs/components/FeaturesTab/utils.ts @@ -10,7 +10,7 @@ export type EntitlementsFormState = Record; export const getNewFeaturesFormState = ( entitlementsState: EntitlementsFormState, - newEntitlement?: Feature + newEntitlement?: Feature, ): EntitlementsFormState => { const newState = Object.entries(entitlementsState).reduce( (acc, [key, value]) => { @@ -26,7 +26,7 @@ export const getNewFeaturesFormState = ( }, }; }, - {} as EntitlementsFormState + {} as EntitlementsFormState, ); if (newState[EntitlementLabel.Fips]?.isChecked) { @@ -56,14 +56,14 @@ export const getNewFeaturesFormState = ( }; export const initialiseFeaturesForm = ( - features: EntitlementsStore + features: EntitlementsStore, ): EntitlementsFormState => [...features.included, ...features.alwaysAvailable].reduce( (acc, entitlementLabel) => ({ ...acc, [entitlementLabel]: formatEntitlementToFeature( - features.byLabel[entitlementLabel] + features.byLabel[entitlementLabel], ), }), - {} as EntitlementsFormState + {} as EntitlementsFormState, ); diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/SubscriptionDetails.test.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/SubscriptionDetails.test.tsx index 5f174be6bcf..c49ad818015 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/SubscriptionDetails.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/SubscriptionDetails.test.tsx @@ -21,7 +21,7 @@ describe("SubscriptionDetails", () => { // Mock the pending purchases hook so that stripe does not need to be set up. const usePollPurchaseStatusSpy: jest.SpyInstance = jest.spyOn( usePollPurchaseStatus, - "default" + "default", ); usePollPurchaseStatusSpy.mockImplementation(() => ({ setPendingPurchaseID: jest.fn(), @@ -42,7 +42,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find("DetailsContent").exists()).toBe(true); expect(wrapper.find("SubscriptionEdit").exists()).toBe(false); @@ -56,7 +56,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); wrapper.find("Button[data-test='edit-button']").simulate("click"); expect(wrapper.find("SubscriptionEdit").exists()).toBe(true); @@ -71,10 +71,10 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find("Button[data-test='support-button']").exists()).toBe( - true + true, ); }); @@ -94,10 +94,10 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find("Button[data-test='support-button']").exists()).toBe( - false + false, ); }); @@ -118,10 +118,10 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find("Button[data-test='renewal-button']").exists()).toBe( - true + true, ); }); @@ -163,7 +163,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); const button = wrapper @@ -206,20 +206,20 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect( - wrapper.find("Button[data-test='edit-button']").prop("disabled") + wrapper.find("Button[data-test='edit-button']").prop("disabled"), ).toBe(false); expect( - wrapper.find("Button[data-test='support-button']").prop("disabled") + wrapper.find("Button[data-test='support-button']").prop("disabled"), ).toBe(false); wrapper.find("Button[data-test='edit-button']").simulate("click"); expect( - wrapper.find("Button[data-test='edit-button']").prop("disabled") + wrapper.find("Button[data-test='edit-button']").prop("disabled"), ).toBe(true); expect( - wrapper.find("Button[data-test='support-button']").prop("disabled") + wrapper.find("Button[data-test='support-button']").prop("disabled"), ).toBe(true); }); @@ -233,10 +233,10 @@ describe("SubscriptionDetails", () => { selectedId={account.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find("Button[data-test='edit-button']").exists()).toBe( - false + false, ); expect(wrapper.find("[data-test='support-button']").exists()).toBe(false); expect(wrapper.find("DetailsContent").exists()).toBe(true); @@ -253,7 +253,7 @@ describe("SubscriptionDetails", () => { selectedId={account.id} setHasUnsavedChanges={jest.fn()} /> - + , ); wrapper.find(".p-modal__close").simulate("click"); expect(onCloseModal).toHaveBeenCalled(); @@ -269,16 +269,16 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); // Open the edit form: wrapper.find("Button[data-test='edit-button']").simulate("click"); expect( - wrapper.find(".p-subscriptions__details").hasClass("is-active") + wrapper.find(".p-subscriptions__details").hasClass("is-active"), ).toBe(true); wrapper.find(SubscriptionEdit).invoke("setShowingCancel")(true); expect( - wrapper.find(".p-subscriptions__details").hasClass("is-active") + wrapper.find(".p-subscriptions__details").hasClass("is-active"), ).toBe(false); }); @@ -290,7 +290,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); // Open the edit form: wrapper.find("Button[data-test='edit-button']").simulate("click"); @@ -316,14 +316,14 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); const notification = wrapper.find(Notification); expect(notification.exists()).toBe(true); expect(notification.prop("severity")).toBe("caution"); expect(wrapper.find(".p-notification__message").text()).toBe( - "The machine entitlement below will update to 15 at the next billing cycle on 10 Jul 2022." + "The machine entitlement below will update to 15 at the next billing cycle on 10 Jul 2022.", ); }); @@ -343,10 +343,10 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect( - wrapper.find("Button[data-test='cancel-trial-button']").exists() + wrapper.find("Button[data-test='cancel-trial-button']").exists(), ).toBe(true); }); @@ -366,7 +366,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find(".p-chip__value").text()).toBe("Expired"); @@ -390,7 +390,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find(".p-chip__value").text()).toBe("Not renewed"); @@ -414,7 +414,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find(".p-chip__value").exists()).toBe(false); @@ -436,7 +436,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find(".p-chip__value").text()).toBe("Renewed"); @@ -459,7 +459,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find(".p-chip__value").exists()).toBe(false); @@ -483,7 +483,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find(".p-chip__value").text()).toBe("Auto-renewal on"); @@ -506,7 +506,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find(".p-chip__value").text()).toBe("Auto-renewal off"); @@ -529,7 +529,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find(".p-chip__value").text()).toBe("Cancelled"); @@ -552,7 +552,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find(".p-chip__value").text()).toBe("Cancelled"); @@ -576,7 +576,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find(".p-chip__value").text()).toBe("Auto-renewal on"); @@ -600,7 +600,7 @@ describe("SubscriptionDetails", () => { selectedId={contract.id} setHasUnsavedChanges={jest.fn()} /> - + , ); expect(wrapper.find(".p-chip__value").exists()).toBe(false); diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/SubscriptionDetails.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/SubscriptionDetails.tsx index 47bdcdf3533..b1b008cf70c 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/SubscriptionDetails.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionDetails/SubscriptionDetails.tsx @@ -37,7 +37,7 @@ type Props = { export const SubscriptionDetails = forwardRef( ( { modalActive, onCloseModal, selectedId, setHasUnsavedChanges }: Props, - ref + ref, ) => { const { openPortal, closePortal, isOpen, Portal } = usePortal(); const showPortal = useCallback((show: boolean) => { @@ -54,7 +54,7 @@ export const SubscriptionDetails = forwardRef( const [editing, setEditing] = useState(false); const [showingCancel, setShowingCancel] = useState(false); const [notification, setNotification] = useState( - null + null, ); const { data: subscription, isLoading } = useUserSubscriptions({ select: selectSubscriptionById(selectedId), @@ -348,7 +348,7 @@ export const SubscriptionDetails = forwardRef( ); - } + }, ); SubscriptionDetails.displayName = "SubscriptionDetails"; diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionEdit/SubscriptionEdit.test.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionEdit/SubscriptionEdit.test.tsx index c63b276f3c8..6c63735f553 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionEdit/SubscriptionEdit.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionEdit/SubscriptionEdit.test.tsx @@ -44,7 +44,7 @@ describe("SubscriptionEdit", () => { queryClient.setQueryData(["userSubscriptions"], [subscription]); queryClient.setQueryData( ["lastPurchaseIds", subscription.account_id], - lastPurchaseIds + lastPurchaseIds, ); }); @@ -57,11 +57,11 @@ describe("SubscriptionEdit", () => { setNotification={jest.fn()} setShowingCancel={jest.fn()} /> - + , ); await act(async () => {}); expect(wrapper.find("Button[data-test='cancel-button']").exists()).toBe( - true + true, ); }); @@ -80,11 +80,11 @@ describe("SubscriptionEdit", () => { setNotification={jest.fn()} setShowingCancel={jest.fn()} /> - + , ); await act(async () => {}); expect(wrapper.find("Button[data-test='cancel-button']").exists()).toBe( - false + false, ); }); @@ -97,7 +97,7 @@ describe("SubscriptionEdit", () => { setNotification={jest.fn()} setShowingCancel={jest.fn()} /> - + , ); await act(async () => {}); expect(wrapper.find("SubscriptionCancel").exists()).toBe(false); @@ -113,7 +113,7 @@ describe("SubscriptionEdit", () => { setNotification={jest.fn()} setShowingCancel={setShowingCancel} /> - + , ); // The portal currently requires a fake event, this should be able to be // removed when this issue is resolved: @@ -144,7 +144,7 @@ describe("SubscriptionEdit", () => { setNotification={jest.fn()} setShowingCancel={jest.fn()} /> - + , ); await act(async () => { wrapper @@ -172,7 +172,7 @@ describe("SubscriptionEdit", () => { setNotification={jest.fn()} setShowingCancel={jest.fn()} /> - + , ); userEvent.type(screen.getByLabelText("Number of machines"), "6"); await waitFor(() => { @@ -187,7 +187,7 @@ describe("SubscriptionEdit", () => { await waitFor(() => { expect(screen.queryByRole("button", { name: "Cancel" })).toHaveAttribute( "aria-disabled", - "true" + "true", ); }); }); @@ -195,7 +195,7 @@ describe("SubscriptionEdit", () => { it("invalidates queries when the resize is successful", async () => { resizeContractSpy.mockImplementation(() => Promise.resolve({ id: 123 })); getPurchaseSpy.mockImplementation(() => - Promise.resolve({ stripeInvoices: [{ status: "done" }] }) + Promise.resolve({ stripeInvoices: [{ status: "done" }] }), ); usePollPurchaseStatusSpy.mockImplementation(() => ({ isSuccess: true, @@ -209,7 +209,7 @@ describe("SubscriptionEdit", () => { setNotification={jest.fn()} setShowingCancel={jest.fn()} /> - + , ); let userSubscriptionsState = queryClient.getQueryState([ "userSubscriptions", @@ -241,7 +241,7 @@ describe("SubscriptionEdit", () => { const setNotification = jest.fn(); resizeContractSpy.mockImplementation(() => Promise.resolve({ id: 123 })); getPurchaseSpy.mockImplementation(() => - Promise.resolve({ stripeInvoices: [{ status: "done" }] }) + Promise.resolve({ stripeInvoices: [{ status: "done" }] }), ); usePollPurchaseStatusSpy.mockImplementation(() => ({ isSuccess: true, @@ -255,7 +255,7 @@ describe("SubscriptionEdit", () => { setNotification={setNotification} setShowingCancel={jest.fn()} /> - + , ); await act(async () => { wrapper @@ -269,7 +269,7 @@ describe("SubscriptionEdit", () => { it("can display an error when there's a pending purchase", async () => { resizeContractSpy.mockImplementation(() => - Promise.resolve({ errors: "can only make one purchase" }) + Promise.resolve({ errors: "can only make one purchase" }), ); const wrapper = mount( @@ -279,7 +279,7 @@ describe("SubscriptionEdit", () => { setNotification={jest.fn()} setShowingCancel={jest.fn()} /> - + , ); await act(async () => { wrapper @@ -289,13 +289,13 @@ describe("SubscriptionEdit", () => { }); wrapper.update(); expect( - wrapper.find("[data-test='has-pending-purchase-error']").exists() + wrapper.find("[data-test='has-pending-purchase-error']").exists(), ).toBe(true); }); it("can display an error when there's an unknown payment error", async () => { resizeContractSpy.mockImplementation(() => - Promise.resolve({ errors: "unknown error" }) + Promise.resolve({ errors: "unknown error" }), ); const wrapper = mount( @@ -305,7 +305,7 @@ describe("SubscriptionEdit", () => { setNotification={jest.fn()} setShowingCancel={jest.fn()} /> - + , ); await act(async () => { wrapper diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionEdit/SubscriptionEdit.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionEdit/SubscriptionEdit.tsx index 40399559d45..72f36401bec 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionEdit/SubscriptionEdit.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionEdit/SubscriptionEdit.tsx @@ -47,7 +47,7 @@ type Props = { export const generateSchema = ( subscription: UserSubscription, - unitName: string + unitName: string, ) => { const sizeMessage = `You must have at least one ${unitName}`; let min = 1; @@ -154,10 +154,10 @@ const ResizeSummary = ({ {isDecreasing ? currencyFormatter.format( - totalCost - absoluteDelta * unitPrice + totalCost - absoluteDelta * unitPrice, ) : currencyFormatter.format( - totalCost + absoluteDelta * unitPrice + totalCost + absoluteDelta * unitPrice, )} * .
@@ -203,14 +203,12 @@ const SubscriptionEdit = ({ } setShowingCancel(show); }, - [setShowingCancel] + [setShowingCancel], ); - const { - data: subscription, - isLoading: isSubscriptionLoading, - } = useUserSubscriptions({ - select: selectSubscriptionById(selectedId), - }); + const { data: subscription, isLoading: isSubscriptionLoading } = + useUserSubscriptions({ + select: selectSubscriptionById(selectedId), + }); const resizeContract = useResizeContract(subscription); const { setQuantity: setPreviewQuantity, @@ -222,7 +220,7 @@ const SubscriptionEdit = ({ const setPreviewQuantityDebounced = useMemo( () => debounce(setPreviewQuantity, 250), - [] + [], ); const unitName = isBlender ? "user" : "machine"; @@ -241,12 +239,12 @@ const SubscriptionEdit = ({ (pendingPurchaseError as Error | null); const [resizeNumber, setResizeNumber] = useState( - subscription?.current_number_of_machines ?? 0 + subscription?.current_number_of_machines ?? 0, ); const { data: renewableSubscriptions } = useUserSubscriptions({ select: selectAutoRenewableSubscriptionsByMarketplace( - subscription?.marketplace ?? UserSubscriptionMarketplace.CanonicalUA + subscription?.marketplace ?? UserSubscriptionMarketplace.CanonicalUA, ), }); @@ -264,7 +262,7 @@ const SubscriptionEdit = ({ (100 * renewableSubscription.number_of_machines) ); }, - 0 + 0, ) || 0; useEffect(() => { diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListCard/ListCard.test.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListCard/ListCard.test.tsx index e25191b9ed9..a07b1e05820 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListCard/ListCard.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListCard/ListCard.test.tsx @@ -29,18 +29,18 @@ describe("ListCard", () => { }), ], number_of_machines: 2, - start_date: "2021-07-09T07:14:56Z", + start_date: new Date("2021-07-09T07:14:56Z"), }); const wrapper = mount( - + , ); expect(wrapper.find("[data-test='card-title']").text()).toBe( - "Free Personal Token" + "Free Personal Token", ); expect(wrapper.find("[data-test='card-type']").exists()).toBeFalsy(); expect(wrapper.find("[data-test='card-machines']").text()).toBe("2"); expect(wrapper.find("[data-test='card-start-date']").text()).toBe( - "09 Jul 2021" + "09 Jul 2021", ); expect(wrapper.find("[data-test='card-end-date']").text()).toBe("Never"); }); @@ -51,7 +51,7 @@ describe("ListCard", () => { subscription={freeSubscription} isSelected={true} onClick={jest.fn()} - /> + />, ); expect(wrapper.find("Card").hasClass("is-active")).toBe(true); }); @@ -59,7 +59,7 @@ describe("ListCard", () => { it("calls the onclick function when the card is clicked", () => { const onClick = jest.fn(); const wrapper = shallow( - + , ); wrapper.find("Card").simulate("click"); expect(onClick).toHaveBeenCalled(); @@ -72,13 +72,13 @@ describe("ListCard", () => { }), }); const wrapper = shallow( - + , ); expect(wrapper.find("ExpiryNotification").exists()).toBe(true); expect( wrapper .find("[data-test='subscription-card-content']") - .hasClass("u-no-padding--top") + .hasClass("u-no-padding--top"), ).toBe(true); }); @@ -91,13 +91,13 @@ describe("ListCard", () => { }), }); const wrapper = shallow( - + , ); expect(wrapper.find("ExpiryNotification").exists()).toBe(false); expect( wrapper .find("[data-test='subscription-card-content']") - .hasClass("u-no-padding--top") + .hasClass("u-no-padding--top"), ).toBe(false); }); }); diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListCard/ListCard.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListCard/ListCard.tsx index a1d0f217c8c..2fcc00b9dea 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListCard/ListCard.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListCard/ListCard.tsx @@ -30,7 +30,7 @@ const ListCard = ({ // If the subscription statuses is true for any of the expiry status keys then // a notification will be displayed. const hasExpiryNotification = !!ORDERED_STATUS_KEYS.find( - (status) => subscription.statuses[status] + (status) => subscription.statuses[status], ); let expiryNotification: ReactNode = null; if (hasExpiryNotification) { diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListGroup/ListGroup.test.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListGroup/ListGroup.test.tsx index be831a2296b..f7d57b54c8c 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListGroup/ListGroup.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListGroup/ListGroup.test.tsx @@ -33,7 +33,7 @@ describe("ListGroup", () => { > Group content - + , ); expect(wrapper.find("RenewalSettings").exists()).toBe(false); }); @@ -56,7 +56,7 @@ describe("ListGroup", () => { > Group content - + , ); expect(wrapper.find("RenewalSettings").exists()).toBe(true); }); diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListGroup/ListGroup.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListGroup/ListGroup.tsx index 75d61a2947c..2d482552d2c 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListGroup/ListGroup.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/ListGroup/ListGroup.tsx @@ -33,7 +33,7 @@ const ListGroup = ({ children, title, marketplace }: Props): JSX.Element => { {title} - {renewableSubscriptions?.length ?? 0 > 0 ? ( + {(renewableSubscriptions?.length ?? 0 > 0) ? ( { should_present_auto_renewal: true, }), }), - ] + ], ); const wrapper = mount( @@ -68,7 +68,7 @@ describe("RenewalSettings", () => { positionNodeRef={{ current: null }} marketplace={UserSubscriptionMarketplace.CanonicalUA} /> - + , ); // Open the menu so that the content gets rendered inside the portal. wrapper.find("Button.p-contextual-menu__toggle").simulate("click"); @@ -76,7 +76,7 @@ describe("RenewalSettings", () => { wrapper .find("[data-test='renewal-toggles']") .text() - .includes("my monthly subscription") + .includes("my monthly subscription"), ).toBe(true); }); @@ -108,7 +108,7 @@ describe("RenewalSettings", () => { should_present_auto_renewal: false, }), }), - ] + ], ); const wrapper = mount( @@ -116,7 +116,7 @@ describe("RenewalSettings", () => { positionNodeRef={{ current: null }} marketplace={UserSubscriptionMarketplace.CanonicalUA} /> - + , ); // Open the menu so that the content gets rendered inside the portal. wrapper.find("Button.p-contextual-menu__toggle").simulate("click"); @@ -124,19 +124,19 @@ describe("RenewalSettings", () => { wrapper .find("[data-test='renewal-toggles']") .text() - .includes("my monthly subscription") + .includes("my monthly subscription"), ).toBe(false); expect( wrapper .find("[data-test='renewal-toggles']") .text() - .includes("my yearly subscription") + .includes("my yearly subscription"), ).toBe(false); expect( wrapper .find("[data-test='renewal-toggles']") .text() - .includes("my 2 yearly subscriptions") + .includes("my 2 yearly subscriptions"), ).toBe(false); }); @@ -188,7 +188,7 @@ describe("RenewalSettings", () => { is_subscription_auto_renewing: true, }), }), - ] + ], ); const wrapper = mount( @@ -196,7 +196,7 @@ describe("RenewalSettings", () => { positionNodeRef={{ current: null }} marketplace={UserSubscriptionMarketplace.CanonicalUA} /> - + , ); // Open the menu so that the content gets rendered inside the portal. wrapper.find("Button.p-contextual-menu__toggle").simulate("click"); @@ -207,16 +207,16 @@ describe("RenewalSettings", () => { `Renew my 2 yearly subscriptions for the next year for ` + `$1,900.00*. The renewal will happen on 9 July 2022: ` + `3x UA Applications - Standard (Physical)` + - `1x UA Applications - Standard (Physical)` - ) + `1x UA Applications - Standard (Physical)`, + ), ).toBe(true); expect( settings.includes( `Automatically renew my 2 monthly subscriptions every month` + ` for $27.50*. The next renewal will be on 9 July 2022: ` + `2x UA Applications - Standard (Physical)` + - `100x UA Applications - Standard (Physical)` - ) + `100x UA Applications - Standard (Physical)`, + ), ).toBe(true); }); @@ -230,7 +230,7 @@ describe("RenewalSettings", () => { positionNodeRef={{ current: null }} marketplace={UserSubscriptionMarketplace.CanonicalUA} /> - + , ); // Use act to force waiting for the component to finish rendering. await act(async () => {}); @@ -239,7 +239,7 @@ describe("RenewalSettings", () => { expect( wrapper .find("Notification[data-test='subscriptions-loading-error']") - .exists() + .exists(), ).toBe(true); }); @@ -255,7 +255,7 @@ describe("RenewalSettings", () => { is_subscription_auto_renewing: true, }), }), - ] + ], ); const wrapper = mount( @@ -264,7 +264,7 @@ describe("RenewalSettings", () => { positionNodeRef={{ current: null }} marketplace={UserSubscriptionMarketplace.CanonicalUA} /> - + , ); // Open the menu so that the content gets rendered inside the portal. wrapper.find("Button.p-contextual-menu__toggle").simulate("click"); @@ -291,10 +291,10 @@ describe("RenewalSettings", () => { is_subscription_auto_renewing: true, }), }), - ] + ], ); setAutoRenewalSpy.mockImplementation(() => - Promise.resolve({ errors: "Uh oh" }) + Promise.resolve({ errors: "Uh oh" }), ); const wrapper = mount( @@ -302,7 +302,7 @@ describe("RenewalSettings", () => { positionNodeRef={{ current: null }} marketplace={UserSubscriptionMarketplace.CanonicalUA} /> - + , ); // Open the menu so that the content gets rendered inside the portal. wrapper.find("Button.p-contextual-menu__toggle").simulate("click"); @@ -331,10 +331,10 @@ describe("RenewalSettings", () => { is_subscription_auto_renewing: true, }), }), - ] + ], ); setAutoRenewalSpy.mockImplementation(() => - Promise.resolve({ errors: "Uh oh" }) + Promise.resolve({ errors: "Uh oh" }), ); const wrapper = mount( @@ -342,7 +342,7 @@ describe("RenewalSettings", () => { positionNodeRef={{ current: null }} marketplace={UserSubscriptionMarketplace.CanonicalUA} /> - + , ); // Open the menu so that the content gets rendered inside the portal. wrapper.find("Button.p-contextual-menu__toggle").simulate("click"); @@ -354,7 +354,7 @@ describe("RenewalSettings", () => { }); wrapper.update(); expect( - wrapper.find("Notification[data-test='update-error']").exists() + wrapper.find("Notification[data-test='update-error']").exists(), ).toBe(true); // Close the menu. wrapper.find("Button[data-test='cancel-button']").simulate("click"); @@ -362,7 +362,7 @@ describe("RenewalSettings", () => { wrapper.find("Button.p-contextual-menu__toggle").simulate("click"); wrapper.update(); expect( - wrapper.find("Notification[data-test='update-error']").exists() + wrapper.find("Notification[data-test='update-error']").exists(), ).toBe(false); }); }); diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/RenewalSettings/RenewalSettings.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/RenewalSettings/RenewalSettings.tsx index e6c18f878b5..64614b5268c 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/RenewalSettings/RenewalSettings.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/RenewalSettings/RenewalSettings.tsx @@ -89,9 +89,7 @@ const AutoRenewalLabel = ({ ); }; -function generateAutoRenewalToggles( - billingSubscriptions: UserSubscription[] -): { +function generateAutoRenewalToggles(billingSubscriptions: UserSubscription[]): { toggles: ReactNode[]; initialValues: { [key: string]: boolean }; } { @@ -102,7 +100,7 @@ function generateAutoRenewalToggles( [UserSubscriptionPeriod.Yearly, UserSubscriptionPeriod.Monthly].forEach( (period) => { const filteredBillingSubscriptions = billingSubscriptions.filter( - (subscription) => subscription.period === period + (subscription) => subscription.period === period, ); if (filteredBillingSubscriptions.length === 0) { return; @@ -118,7 +116,7 @@ function generateAutoRenewalToggles( subscription.current_number_of_machines) / (100 * subscription.number_of_machines); products.push( - `${subscription.current_number_of_machines}x ${subscription.product_name}` + `${subscription.current_number_of_machines}x ${subscription.product_name}`, ); if (!date) { date = subscription.end_date; @@ -138,11 +136,11 @@ function generateAutoRenewalToggles( labelClassName="u-no-margin--bottom" name={filteredBillingSubscriptions[0].subscription_id ?? ""} type="checkbox" - /> + />, ); initialValues[filteredBillingSubscriptions[0].subscription_id ?? ""] = filteredBillingSubscriptions[0].statuses.is_subscription_auto_renewing; - } + }, ); return { toggles, initialValues }; @@ -188,7 +186,7 @@ export const RenewalSettings = ({ ); } else { const { toggles, initialValues } = generateAutoRenewalToggles( - renewableSubscriptions + renewableSubscriptions, ); content = ( { const wrapper = mount( - + , ); wrapper.find("Button[data-test='cancel-button']").simulate("click"); wrapper.update(); @@ -22,7 +22,7 @@ describe("RenewalSettingsFields", () => { const wrapper = mount( - + , ); expect(wrapper.find(ActionButton).prop("disabled")).toBe(true); }); @@ -33,7 +33,7 @@ describe("RenewalSettingsFields", () => { - + , ); await act(async () => { wrapper.find("input").simulate("change", { diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/SubscriptionList.test.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/SubscriptionList.test.tsx index 9b0eb6e18e4..59f76f8152a 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/SubscriptionList.test.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/SubscriptionList.test.tsx @@ -37,14 +37,14 @@ describe("SubscriptionList", () => { const wrapper = mount( - + , ); expect(wrapper.find("[data-test='ua-subscription']").length).toBe(2); expect(wrapper.find(ListCard).at(0).prop("subscription")).toStrictEqual( - subscriptions[0] + subscriptions[0], ); expect(wrapper.find(ListCard).at(1).prop("subscription")).toStrictEqual( - subscriptions[1] + subscriptions[1], ); }); @@ -58,10 +58,10 @@ describe("SubscriptionList", () => { const wrapper = mount( - + , ); expect( - wrapper.find("ListGroup[data-test='ua-subscriptions-group']").exists() + wrapper.find("ListGroup[data-test='ua-subscriptions-group']").exists(), ).toBe(false); }); @@ -84,16 +84,16 @@ describe("SubscriptionList", () => { const wrapper = mount( - + , ); expect(wrapper.find(ListCard).at(0).prop("subscription")).toStrictEqual( - subscriptions[1] + subscriptions[1], ); expect(wrapper.find(ListCard).at(1).prop("subscription")).toStrictEqual( - subscriptions[0] + subscriptions[0], ); expect(wrapper.find(ListCard).at(2).prop("subscription")).toStrictEqual( - subscriptions[2] + subscriptions[2], ); }); @@ -101,7 +101,7 @@ describe("SubscriptionList", () => { const wrapper = mount( - + , ); const token = wrapper.find("[data-test='free-subscription']"); expect(token.exists()).toBe(true); @@ -115,10 +115,10 @@ describe("SubscriptionList", () => { selectedId={freeSubscription.id} onSetActive={jest.fn()} /> - + , ); expect( - wrapper.find("[data-test='free-subscription']").prop("isSelected") + wrapper.find("[data-test='free-subscription']").prop("isSelected"), ).toBe(true); }); @@ -138,7 +138,7 @@ describe("SubscriptionList", () => { const wrapper = mount( - + , ); const token = wrapper.find("[data-test='free-subscription']"); expect(token.exists()).toBe(false); @@ -153,12 +153,12 @@ describe("SubscriptionList", () => { end_date: new Date("2021-08-11T02:56:54Z"), }), freeSubscription, - ] + ], ); const wrapper = mount( - + , ); const token = wrapper.find("[data-test='free-subscription']"); expect(token.exists()).toBe(true); @@ -187,7 +187,7 @@ describe("SubscriptionList", () => { should_present_auto_renewal: true, }), }), - ] + ], ); const wrapper = mount( @@ -195,7 +195,7 @@ describe("SubscriptionList", () => { selectedId={freeSubscription.contract_id} onSetActive={jest.fn()} /> - + , ); expect(wrapper.find("RenewalSettings").exists()).toBe(true); }); @@ -222,7 +222,7 @@ describe("SubscriptionList", () => { should_present_auto_renewal: false, }), }), - ] + ], ); const wrapper = mount( @@ -230,7 +230,7 @@ describe("SubscriptionList", () => { selectedId={freeSubscription.contract_id} onSetActive={jest.fn()} /> - + , ); expect(wrapper.find("RenewalSettings").exists()).toBe(false); }); diff --git a/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/SubscriptionList.tsx b/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/SubscriptionList.tsx index e80367bfc97..54dc8983b53 100644 --- a/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/SubscriptionList.tsx +++ b/static/js/src/advantage/react/components/Subscriptions/SubscriptionList/SubscriptionList.tsx @@ -20,32 +20,25 @@ type Props = { }; const SubscriptionList = ({ selectedId, onSetActive }: Props) => { - const { - data: freeSubscription, - isLoading: isLoadingFree, - } = useUserSubscriptions({ - select: selectFreeSubscription, - }); - const { - data: uaSubscriptionsData = [], - isLoading: isLoadingUA, - } = useUserSubscriptions({ - select: selectUASubscriptions, - }); - const { - data: blenderSubscriptionsData = [], - isLoading: isLoadingBlender, - } = useUserSubscriptions({ - select: selectBlenderSubscriptions, - }); + const { data: freeSubscription, isLoading: isLoadingFree } = + useUserSubscriptions({ + select: selectFreeSubscription, + }); + const { data: uaSubscriptionsData = [], isLoading: isLoadingUA } = + useUserSubscriptions({ + select: selectUASubscriptions, + }); + const { data: blenderSubscriptionsData = [], isLoading: isLoadingBlender } = + useUserSubscriptions({ + select: selectBlenderSubscriptions, + }); if (isLoadingFree || isLoadingUA || isLoadingBlender) { return ; } // Sort the subscriptions so that the most recently started subscription is first. - const sortedUASubscriptions = sortSubscriptionsByStartDate( - uaSubscriptionsData - ); + const sortedUASubscriptions = + sortSubscriptionsByStartDate(uaSubscriptionsData); const uaSubscriptions = sortedUASubscriptions.map((subscription) => ( { )); const sortedBlenderSubscriptions = sortSubscriptionsByStartDate( - blenderSubscriptionsData + blenderSubscriptionsData, ); const blenderSubscriptions = sortedBlenderSubscriptions.map( @@ -83,7 +76,7 @@ const SubscriptionList = ({ selectedId, onSetActive }: Props) => { }} subscription={subscription} /> - ) + ), ); const hasActiveSubscription = (subscriptions: UserSubscription[]) => { diff --git a/static/js/src/advantage/react/hooks/useCancelContract.test.tsx b/static/js/src/advantage/react/hooks/useCancelContract.test.tsx index 1cb14e43ae5..84687b8fe74 100644 --- a/static/js/src/advantage/react/hooks/useCancelContract.test.tsx +++ b/static/js/src/advantage/react/hooks/useCancelContract.test.tsx @@ -37,7 +37,7 @@ describe("useCancelContract", () => { queryClient.setQueryData(["userSubscriptions"], [subscription]); queryClient.setQueryData( ["lastPurchaseIds", subscription.account_id], - lastPurchaseIds + lastPurchaseIds, ); }); @@ -45,7 +45,7 @@ describe("useCancelContract", () => { const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useCancelContract(subscription), - { wrapper } + { wrapper }, ); result.current.mutate(null); await waitForNextUpdate(); @@ -55,7 +55,7 @@ describe("useCancelContract", () => { UserSubscriptionPeriod.Monthly ], subscription.listing_id, - subscription.marketplace + subscription.marketplace, ); }); @@ -63,13 +63,13 @@ describe("useCancelContract", () => { cancelContractSpy.mockImplementation(() => Promise.resolve({ errors: "Uh oh", - }) + }), ); const onError = jest.fn(); const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useCancelContract(subscription), - { wrapper } + { wrapper }, ); result.current.mutate(null, { onError: (error) => onError(error.message), @@ -82,7 +82,7 @@ describe("useCancelContract", () => { const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useCancelContract(subscription), - { wrapper } + { wrapper }, ); let userSubscriptionsState = queryClient.getQueryState([ "userSubscriptions", diff --git a/static/js/src/advantage/react/hooks/useCancelContract.ts b/static/js/src/advantage/react/hooks/useCancelContract.ts index 44f2ef8c251..f08a07742dc 100644 --- a/static/js/src/advantage/react/hooks/useCancelContract.ts +++ b/static/js/src/advantage/react/hooks/useCancelContract.ts @@ -11,9 +11,9 @@ export const useCancelContract = (subscription?: UserSubscription) => { { select: selectPurchaseIdsByMarketplaceAndPeriod( subscription?.marketplace, - subscription?.period + subscription?.period, ), - } + }, ); const mutation = useMutation({ @@ -25,7 +25,7 @@ export const useCancelContract = (subscription?: UserSubscription) => { subscription.account_id, lastPurchaseId, subscription.listing_id, - subscription.marketplace + subscription.marketplace, ); if (response.errors) { diff --git a/static/js/src/advantage/react/hooks/useCancelTrial.test.tsx b/static/js/src/advantage/react/hooks/useCancelTrial.test.tsx index d6bd75799fc..2f65e860222 100644 --- a/static/js/src/advantage/react/hooks/useCancelTrial.test.tsx +++ b/static/js/src/advantage/react/hooks/useCancelTrial.test.tsx @@ -40,7 +40,7 @@ describe("useCancelTrial", () => { const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useCancelTrial(subscription?.account_id), - { wrapper } + { wrapper }, ); result.current.mutate(null); await waitForNextUpdate(); @@ -51,13 +51,13 @@ describe("useCancelTrial", () => { cancelTrialSpy.mockImplementation(() => Promise.resolve({ errors: "Uh oh", - }) + }), ); const onError = jest.fn(); const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useCancelTrial(subscription?.account_id), - { wrapper } + { wrapper }, ); result.current.mutate(null, { onError: (error) => onError(error.message), @@ -70,12 +70,12 @@ describe("useCancelTrial", () => { const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useCancelTrial(subscription?.account_id), - { wrapper } + { wrapper }, ); queryClient.setQueryData( ["lastPurchaseIds", subscription.account_id], - lastPurchaseIdsFactory.build() + lastPurchaseIdsFactory.build(), ); let userSubscriptionsState = queryClient.getQueryState([ diff --git a/static/js/src/advantage/react/hooks/useContractToken.test.tsx b/static/js/src/advantage/react/hooks/useContractToken.test.tsx index 71e737f9604..e322364d503 100644 --- a/static/js/src/advantage/react/hooks/useContractToken.test.tsx +++ b/static/js/src/advantage/react/hooks/useContractToken.test.tsx @@ -26,7 +26,7 @@ describe("useContractToken", () => { const contractToken = contractTokenFactory.build(); queryClient.setQueryData( ["contractToken", contract.contract_id], - contractToken + contractToken, ); const wrapper = createWrapper(queryClient); @@ -34,7 +34,7 @@ describe("useContractToken", () => { () => useContractToken(contract.contract_id), { wrapper, - } + }, ); await waitForNextUpdate(); expect(result.current.data).toStrictEqual(contractToken); diff --git a/static/js/src/advantage/react/hooks/useContractToken.ts b/static/js/src/advantage/react/hooks/useContractToken.ts index bb671dd0e81..38cdb8601f4 100644 --- a/static/js/src/advantage/react/hooks/useContractToken.ts +++ b/static/js/src/advantage/react/hooks/useContractToken.ts @@ -4,7 +4,7 @@ import { useQuery } from "@tanstack/react-query"; export const useContractToken = ( contractId?: UserSubscription["contract_id"] | null, - isTokenVisible?: boolean | false + isTokenVisible?: boolean | false, ) => { const query = useQuery({ queryKey: ["contractToken", contractId], diff --git a/static/js/src/advantage/react/hooks/useLastPurchaseIds.test.tsx b/static/js/src/advantage/react/hooks/useLastPurchaseIds.test.tsx index 6e447a130f1..f6dfe73a99f 100644 --- a/static/js/src/advantage/react/hooks/useLastPurchaseIds.test.tsx +++ b/static/js/src/advantage/react/hooks/useLastPurchaseIds.test.tsx @@ -29,12 +29,12 @@ describe("useLastPurchaseIds", () => { const lastPurchaseIds = lastPurchaseIdsFactory.build(); queryClient.setQueryData( ["lastPurchaseIds", "account123"], - lastPurchaseIds + lastPurchaseIds, ); const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useLastPurchaseIds("account123"), - { wrapper } + { wrapper }, ); await waitForNextUpdate(); expect(result.current.data).toStrictEqual(lastPurchaseIds); @@ -48,7 +48,7 @@ describe("useLastPurchaseIds", () => { }); queryClient.setQueryData( ["lastPurchaseIds", "account123"], - lastPurchaseIds + lastPurchaseIds, ); const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( @@ -56,10 +56,10 @@ describe("useLastPurchaseIds", () => { useLastPurchaseIds("account123", { select: selectPurchaseIdsByMarketplaceAndPeriod( UserSubscriptionMarketplace.CanonicalUA, - UserSubscriptionPeriod.Monthly + UserSubscriptionPeriod.Monthly, ), }), - { wrapper } + { wrapper }, ); await waitForNextUpdate(); expect(result.current.data).toStrictEqual("monthly123"); diff --git a/static/js/src/advantage/react/hooks/useLastPurchaseIds.ts b/static/js/src/advantage/react/hooks/useLastPurchaseIds.ts index 01d3bf556d2..43a431acffe 100644 --- a/static/js/src/advantage/react/hooks/useLastPurchaseIds.ts +++ b/static/js/src/advantage/react/hooks/useLastPurchaseIds.ts @@ -6,30 +6,32 @@ import { UserSubscriptionMarketplace } from "advantage/api/enum"; /** * Get a the last purchase id by account id and period. */ -export const selectPurchaseIdsByMarketplaceAndPeriod = ( - marketplace?: UserSubscription["marketplace"], - period?: UserSubscription["period"] -) => (lastPurchaseIds: LastPurchaseIds) => { - if ( - !marketplace || - !period || - marketplace === UserSubscriptionMarketplace.Free || - marketplace === UserSubscriptionMarketplace.CanonicalCUBE - ) { - return null; - } - return lastPurchaseIds?.[marketplace]?.[period] ?? null; -}; +export const selectPurchaseIdsByMarketplaceAndPeriod = + ( + marketplace?: UserSubscription["marketplace"], + period?: UserSubscription["period"], + ) => + (lastPurchaseIds: LastPurchaseIds) => { + if ( + !marketplace || + !period || + marketplace === UserSubscriptionMarketplace.Free || + marketplace === UserSubscriptionMarketplace.CanonicalCUBE + ) { + return null; + } + return lastPurchaseIds?.[marketplace]?.[period] ?? null; + }; export const useLastPurchaseIds = < ID extends UserSubscription["account_id"] | null | undefined, - D = LastPurchaseIds + D = LastPurchaseIds, >( accountId: ID, options: Omit< UseQueryOptions, "queryKey" | "queryFn" - > = {} + > = {}, ) => { // Don't fetch the data until the account id is provided. const queryOptions: UseQueryOptions< diff --git a/static/js/src/advantage/react/hooks/usePreviewResizeContract.ts b/static/js/src/advantage/react/hooks/usePreviewResizeContract.ts index ace1d15d1f7..1f380e755ca 100644 --- a/static/js/src/advantage/react/hooks/usePreviewResizeContract.ts +++ b/static/js/src/advantage/react/hooks/usePreviewResizeContract.ts @@ -13,48 +13,45 @@ export const usePreviewResizeContract = (subscription?: UserSubscription) => { { select: selectPurchaseIdsByMarketplaceAndPeriod( subscription?.marketplace, - subscription?.period + subscription?.period, ), - } + }, ); const [quantity, setQuantity] = useState(0); - const { - isLoading, - isError, - isSuccess, - data, - error, - } = useQuery({ - queryKey: ["preview", quantity, subscription?.id], - queryFn: async () => { - if (!subscription || !lastPurchaseId) { - return; - } + const { isLoading, isError, isSuccess, data, error } = + useQuery({ + queryKey: ["preview", quantity, subscription?.id], + queryFn: async () => { + if (!subscription || !lastPurchaseId) { + return; + } - const res = await previewResizeContract( - subscription?.account_id, - lastPurchaseId, - subscription?.listing_id, - quantity, - subscription?.period, - subscription?.marketplace - ); + const res = await previewResizeContract( + subscription?.account_id, + lastPurchaseId, + subscription?.listing_id, + quantity, + subscription?.period, + subscription?.marketplace, + ); - if (res.errors) { - if ( - res.errors.includes("no invoice would be issued for this purchase") || - res.errors.includes("purchase does not affect subscription") - ) { - return; + if (res.errors) { + if ( + res.errors.includes( + "no invoice would be issued for this purchase", + ) || + res.errors.includes("purchase does not affect subscription") + ) { + return; + } + throw new Error(res.errors); } - throw new Error(res.errors); - } - return res; - }, - enabled: quantity > 0, - }); + return res; + }, + enabled: quantity > 0, + }); return { isLoading: isLoading, diff --git a/static/js/src/advantage/react/hooks/useResizeContract.test.tsx b/static/js/src/advantage/react/hooks/useResizeContract.test.tsx index 888a60d1a4a..0e16a52d997 100644 --- a/static/js/src/advantage/react/hooks/useResizeContract.test.tsx +++ b/static/js/src/advantage/react/hooks/useResizeContract.test.tsx @@ -37,7 +37,7 @@ describe("useResizeContract", () => { queryClient.setQueryData(["userSubscriptions"], [subscription]); queryClient.setQueryData( ["lastPurchaseIds", subscription.account_id], - lastPurchaseIds + lastPurchaseIds, ); }); @@ -45,7 +45,7 @@ describe("useResizeContract", () => { const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useResizeContract(subscription), - { wrapper } + { wrapper }, ); result.current.mutate(2); await waitForNextUpdate(); @@ -57,7 +57,7 @@ describe("useResizeContract", () => { subscription.listing_id, 2, UserSubscriptionPeriod.Yearly, - UserSubscriptionMarketplace.CanonicalUA + UserSubscriptionMarketplace.CanonicalUA, ); }); @@ -65,13 +65,13 @@ describe("useResizeContract", () => { resizeContractSpy.mockImplementation(() => Promise.resolve({ errors: "Uh oh", - }) + }), ); const onError = jest.fn(); const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useResizeContract(subscription), - { wrapper } + { wrapper }, ); result.current.mutate(2, { onError: (error) => onError(error.message), @@ -84,12 +84,12 @@ describe("useResizeContract", () => { resizeContractSpy.mockImplementation(() => Promise.resolve({ errors: "Uh oh", - }) + }), ); const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useResizeContract(subscription), - { wrapper } + { wrapper }, ); let lastPurchaseIdsState = queryClient.getQueryState([ "lastPurchaseIds", diff --git a/static/js/src/advantage/react/hooks/useResizeContract.ts b/static/js/src/advantage/react/hooks/useResizeContract.ts index 13c03d53453..3d278048a7e 100644 --- a/static/js/src/advantage/react/hooks/useResizeContract.ts +++ b/static/js/src/advantage/react/hooks/useResizeContract.ts @@ -13,9 +13,9 @@ export const useResizeContract = (subscription?: UserSubscription) => { { select: selectPurchaseIdsByMarketplaceAndPeriod( subscription?.marketplace, - subscription?.period + subscription?.period, ), - } + }, ); const mutation = useMutation({ @@ -29,7 +29,7 @@ export const useResizeContract = (subscription?: UserSubscription) => { subscription?.listing_id, quantity, subscription?.period, - subscription?.marketplace + subscription?.marketplace, ); if (response.errors) { // Sometimes the request fails because the previous purchase id diff --git a/static/js/src/advantage/react/hooks/useScrollIntoView.test.tsx b/static/js/src/advantage/react/hooks/useScrollIntoView.test.tsx index d379595dbc3..9c359afc298 100644 --- a/static/js/src/advantage/react/hooks/useScrollIntoView.test.tsx +++ b/static/js/src/advantage/react/hooks/useScrollIntoView.test.tsx @@ -28,7 +28,7 @@ describe("useScrollIntoView", () => { const [targetRef, scrollIntoView] = result.current; mount(
); if (targetRef.current) { - targetRef.current.getBoundingClientRect = () => ({ y: 10 } as DOMRect); + targetRef.current.getBoundingClientRect = () => ({ y: 10 }) as DOMRect; } scrollIntoView(); expect(scrollToSpy).not.toHaveBeenCalled(); @@ -42,7 +42,7 @@ describe("useScrollIntoView", () => { const [targetRef, scrollIntoView] = result.current; mount(
); if (targetRef.current) { - targetRef.current.getBoundingClientRect = () => ({ y: -10 } as DOMRect); + targetRef.current.getBoundingClientRect = () => ({ y: -10 }) as DOMRect; } scrollIntoView(); expect(scrollToSpy).toHaveBeenCalledWith({ diff --git a/static/js/src/advantage/react/hooks/useScrollIntoView.ts b/static/js/src/advantage/react/hooks/useScrollIntoView.ts index a9568238cfe..417ea26317a 100644 --- a/static/js/src/advantage/react/hooks/useScrollIntoView.ts +++ b/static/js/src/advantage/react/hooks/useScrollIntoView.ts @@ -5,7 +5,7 @@ import { RefObject, useCallback, useRef } from "react"; * @param buffer Additional space to leave above the target. */ export const useScrollIntoView = ( - buffer = 0 + buffer = 0, ): [RefObject, () => void] => { const htmlRef = useRef(document.querySelector("html")); const targetRef = useRef(null); diff --git a/static/js/src/advantage/react/hooks/useSetAutoRenewal.test.tsx b/static/js/src/advantage/react/hooks/useSetAutoRenewal.test.tsx index 7d8846c43b0..22d3d36ab9f 100644 --- a/static/js/src/advantage/react/hooks/useSetAutoRenewal.test.tsx +++ b/static/js/src/advantage/react/hooks/useSetAutoRenewal.test.tsx @@ -30,7 +30,7 @@ describe("useSetAutoRenewal", () => { const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useSetAutoRenewal(), - { wrapper } + { wrapper }, ); result.current.mutate({ sub: true }); await waitForNextUpdate(); @@ -41,19 +41,19 @@ describe("useSetAutoRenewal", () => { setAutoRenewalSpy.mockImplementation(() => Promise.resolve({ errors: "Uh oh", - }) + }), ); const onError = jest.fn(); const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useSetAutoRenewal(), - { wrapper } + { wrapper }, ); result.current.mutate( { sub: true }, { onError: (error) => onError(error.message), - } + }, ); await waitForNextUpdate(); expect(onError).toHaveBeenCalledWith("Uh oh"); @@ -63,7 +63,7 @@ describe("useSetAutoRenewal", () => { const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useSetAutoRenewal(), - { wrapper } + { wrapper }, ); let userSubscriptionsState = queryClient.getQueryState([ "userSubscriptions", diff --git a/static/js/src/advantage/react/hooks/useUserSubscriptions.test.tsx b/static/js/src/advantage/react/hooks/useUserSubscriptions.test.tsx index 9cba9bb3b6b..81c7408fc2f 100644 --- a/static/js/src/advantage/react/hooks/useUserSubscriptions.test.tsx +++ b/static/js/src/advantage/react/hooks/useUserSubscriptions.test.tsx @@ -42,7 +42,7 @@ describe("useUserSubscriptions", () => { queryClient.setQueryData(["userSubscriptions"], contracts); const { result, waitForNextUpdate } = renderHook( () => useUserSubscriptions(), - { wrapper } + { wrapper }, ); await waitForNextUpdate(); expect(result.current.data).toStrictEqual(contracts); @@ -55,7 +55,7 @@ describe("useUserSubscriptions", () => { const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useUserSubscriptions({ select: selectFreeSubscription }), - { wrapper } + { wrapper }, ); await waitForNextUpdate(); expect(result.current.data).toStrictEqual(freeContract); @@ -83,7 +83,7 @@ describe("useUserSubscriptions", () => { const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useUserSubscriptions({ select: selectStatusesSummary }), - { wrapper } + { wrapper }, ); await waitForNextUpdate(); expect(result.current.data).toStrictEqual({ @@ -117,7 +117,7 @@ describe("useUserSubscriptions", () => { const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useUserSubscriptions({ select: selectSubscriptionById("abc123") }), - { wrapper } + { wrapper }, ); await waitForNextUpdate(); expect(result.current.data).toStrictEqual(subscriptions[1]); @@ -139,7 +139,7 @@ describe("useUserSubscriptions", () => { const wrapper = createWrapper(queryClient); const { result, waitForNextUpdate } = renderHook( () => useUserSubscriptions({ select: selectUASubscriptions }), - { wrapper } + { wrapper }, ); await waitForNextUpdate(); expect(result.current.data).toStrictEqual([ @@ -171,10 +171,10 @@ describe("useUserSubscriptions", () => { () => useUserSubscriptions({ select: selectAutoRenewableSubscriptionsByMarketplace( - UserSubscriptionMarketplace.CanonicalUA + UserSubscriptionMarketplace.CanonicalUA, ), }), - { wrapper } + { wrapper }, ); await waitForNextUpdate(); expect(result.current.data).toStrictEqual([subscriptions[0]]); diff --git a/static/js/src/advantage/react/hooks/useUserSubscriptions.ts b/static/js/src/advantage/react/hooks/useUserSubscriptions.ts index 4e7fcd550de..aaeb9575555 100644 --- a/static/js/src/advantage/react/hooks/useUserSubscriptions.ts +++ b/static/js/src/advantage/react/hooks/useUserSubscriptions.ts @@ -13,16 +13,16 @@ import { useQuery, UseQueryOptions } from "@tanstack/react-query"; /** * Get a subscription by token. */ -export const selectSubscriptionById = (id?: UserSubscription["id"] | null) => ( - subscriptions: UserSubscription[] -) => subscriptions.find((subscription) => subscription.id === id); +export const selectSubscriptionById = + (id?: UserSubscription["id"] | null) => (subscriptions: UserSubscription[]) => + subscriptions.find((subscription) => subscription.id === id); /** * Find the subscription that matches the free token. */ export const selectFreeSubscription = (subscriptions: UserSubscription[]) => subscriptions.find( - (subscription) => subscription.type === UserSubscriptionType.Free + (subscription) => subscription.type === UserSubscriptionType.Free, ) || null; /** @@ -30,14 +30,14 @@ export const selectFreeSubscription = (subscriptions: UserSubscription[]) => */ const hasStatus = ( subscriptions: UserSubscription[], - status: keyof UserSubscriptionStatuses + status: keyof UserSubscriptionStatuses, ) => subscriptions.some(({ statuses }) => statuses[status]); /** * Get a summary of statuses for all subscriptions. */ export const selectStatusesSummary = ( - subscriptions: UserSubscription[] + subscriptions: UserSubscription[], ): UserSubscriptionStatuses => ({ has_pending_purchases: hasStatus(subscriptions, "has_pending_purchases"), is_cancellable: hasStatus(subscriptions, "is_cancellable"), @@ -53,11 +53,11 @@ export const selectStatusesSummary = ( is_subscription_active: hasStatus(subscriptions, "is_subscription_active"), is_subscription_auto_renewing: hasStatus( subscriptions, - "is_subscription_auto_renewing" + "is_subscription_auto_renewing", ), should_present_auto_renewal: hasStatus( subscriptions, - "should_present_auto_renewal" + "should_present_auto_renewal", ), has_access_to_support: hasStatus(subscriptions, "has_access_to_support"), has_access_to_token: hasStatus(subscriptions, "has_access_to_token"), @@ -66,35 +66,36 @@ export const selectStatusesSummary = ( export const selectUASubscriptions = (subscriptions: UserSubscription[]) => subscriptions.filter( - ({ marketplace }) => marketplace === UserSubscriptionMarketplace.CanonicalUA + ({ marketplace }) => + marketplace === UserSubscriptionMarketplace.CanonicalUA, ); export const selectBlenderSubscriptions = (subscriptions: UserSubscription[]) => subscriptions.filter( - ({ marketplace }) => marketplace === UserSubscriptionMarketplace.Blender + ({ marketplace }) => marketplace === UserSubscriptionMarketplace.Blender, ); -export const selectAutoRenewableSubscriptionsByMarketplace = ( - targetMarketplace: UserSubscription["marketplace"] -) => (subscriptions: UserSubscription[]) => - subscriptions.filter( - ({ statuses, marketplace }) => - statuses.should_present_auto_renewal && marketplace === targetMarketplace - ); +export const selectAutoRenewableSubscriptionsByMarketplace = + (targetMarketplace: UserSubscription["marketplace"]) => + (subscriptions: UserSubscription[]) => + subscriptions.filter( + ({ statuses, marketplace }) => + statuses.should_present_auto_renewal && + marketplace === targetMarketplace, + ); /** * Find the subscriptions with for period. */ -export const selectSubscriptionsForPeriod = ( - period: UserSubscriptionPeriod -) => (subscriptions: UserSubscription[]) => - subscriptions.filter((subscription) => subscription.period === period); +export const selectSubscriptionsForPeriod = + (period: UserSubscriptionPeriod) => (subscriptions: UserSubscription[]) => + subscriptions.filter((subscription) => subscription.period === period); export const useUserSubscriptions = ( options?: Omit< UseQueryOptions, "queryKey" - > + >, ) => { const query = useQuery({ queryKey: ["userSubscriptions"], diff --git a/static/js/src/advantage/react/utils/dedupeArray.test.ts b/static/js/src/advantage/react/utils/dedupeArray.test.ts index ffbdb3b277a..80005f3a0d6 100644 --- a/static/js/src/advantage/react/utils/dedupeArray.test.ts +++ b/static/js/src/advantage/react/utils/dedupeArray.test.ts @@ -3,7 +3,7 @@ import { dedupeArray } from "./dedupeArray"; describe("dedupeArray", () => { it("dedupes items in an array", () => { expect( - dedupeArray(["one", "two", "one", null, true, "three"]) + dedupeArray(["one", "two", "one", null, true, "three"]), ).toStrictEqual(["one", "two", null, true, "three"]); }); }); diff --git a/static/js/src/advantage/react/utils/filterAndFormatEntitlements.test.ts b/static/js/src/advantage/react/utils/filterAndFormatEntitlements.test.ts index aaedad94de2..cf752f55422 100644 --- a/static/js/src/advantage/react/utils/filterAndFormatEntitlements.test.ts +++ b/static/js/src/advantage/react/utils/filterAndFormatEntitlements.test.ts @@ -111,7 +111,7 @@ it("ignores some labels", () => { ]); expect(filterAndFormatEntitlements(entitlements).excluded).toHaveLength(0); expect( - filterAndFormatEntitlements(entitlements).alwaysAvailable + filterAndFormatEntitlements(entitlements).alwaysAvailable, ).toHaveLength(0); }); @@ -126,7 +126,7 @@ it("correctly groups always available features", () => { expect(filterAndFormatEntitlements(entitlements).included).toHaveLength(0); expect(filterAndFormatEntitlements(entitlements).excluded).toHaveLength(0); expect( - filterAndFormatEntitlements(entitlements).alwaysAvailable + filterAndFormatEntitlements(entitlements).alwaysAvailable, ).toStrictEqual([ EntitlementLabel.Cis, EntitlementLabel.FipsUpdates, diff --git a/static/js/src/advantage/react/utils/filterAndFormatEntitlements.ts b/static/js/src/advantage/react/utils/filterAndFormatEntitlements.ts index ab43d6dae5f..d4cf949fa0e 100644 --- a/static/js/src/advantage/react/utils/filterAndFormatEntitlements.ts +++ b/static/js/src/advantage/react/utils/filterAndFormatEntitlements.ts @@ -44,14 +44,14 @@ export type Feature = { }; export const getEntitlementLabel = ( - entitlement: UserSubscriptionEntitlement + entitlement: UserSubscriptionEntitlement, ): EntitlementLabel | undefined | null => entitlement.support_level ? supportLabels[entitlement.support_level] : labels[entitlement.type as EntitlementType]; export const formatEntitlementToFeature = ( - entitlement: UserSubscriptionEntitlement + entitlement: UserSubscriptionEntitlement, ): Feature => ({ type: entitlement.type as EntitlementType, label: entitlement.support_level @@ -85,7 +85,7 @@ type EntitlementGroups = { }; export const groupEntitlements = ( - entitlements: UserSubscriptionEntitlement[] + entitlements: UserSubscriptionEntitlement[], ): EntitlementGroups => { const included: EntitlementLabel[] = []; const excluded: EntitlementLabel[] = []; @@ -116,16 +116,16 @@ const filterEntitlements = ({ }: EntitlementGroups): EntitlementGroups => ({ ...entitlements, excluded: excluded.filter( - (label) => !Object.values(supportLabels).includes(label) + (label) => !Object.values(supportLabels).includes(label), ), }); export const filterAndFormatEntitlements = ( - entitlements: UserSubscriptionEntitlement[] + entitlements: UserSubscriptionEntitlement[], ): EntitlementsStore => { const allLabels: EntitlementLabel[] = []; const { included, excluded, alwaysAvailable } = filterEntitlements( - groupEntitlements(entitlements) + groupEntitlements(entitlements), ); const byLabel = entitlements.reduce((acc, entitlement) => { diff --git a/static/js/src/advantage/react/utils/getFeaturesDisplay.test.ts b/static/js/src/advantage/react/utils/getFeaturesDisplay.test.ts index 84049fda404..f9836e135ce 100644 --- a/static/js/src/advantage/react/utils/getFeaturesDisplay.test.ts +++ b/static/js/src/advantage/react/utils/getFeaturesDisplay.test.ts @@ -90,7 +90,7 @@ describe("getFeaturesDisplay", () => { }), ]; expect( - getFeaturesDisplay(entitlements).excluded.includes("24/5 Support") + getFeaturesDisplay(entitlements).excluded.includes("24/5 Support"), ).toBe(true); }); }); diff --git a/static/js/src/advantage/react/utils/getFeaturesDisplay.ts b/static/js/src/advantage/react/utils/getFeaturesDisplay.ts index aefb9792d8b..8164149f1de 100644 --- a/static/js/src/advantage/react/utils/getFeaturesDisplay.ts +++ b/static/js/src/advantage/react/utils/getFeaturesDisplay.ts @@ -14,7 +14,7 @@ const labels: Record = { }; export const getFeaturesDisplay = ( - entitlements: UserSubscriptionEntitlement[] + entitlements: UserSubscriptionEntitlement[], ) => { const included: string[] = []; const excluded: string[] = []; diff --git a/static/js/src/advantage/react/utils/getMachineTypeDisplay.test.ts b/static/js/src/advantage/react/utils/getMachineTypeDisplay.test.ts index f91fb2a8b0c..87d9cdcd352 100644 --- a/static/js/src/advantage/react/utils/getMachineTypeDisplay.test.ts +++ b/static/js/src/advantage/react/utils/getMachineTypeDisplay.test.ts @@ -4,13 +4,13 @@ import { getMachineTypeDisplay } from "./getMachineTypeDisplay"; describe("getMachineTypeDisplay", () => { it("provides the labels for known values", () => { expect(getMachineTypeDisplay(UserSubscriptionMachineType.Virtual)).toBe( - "Virtual" + "Virtual", ); expect(getMachineTypeDisplay(UserSubscriptionMachineType.Physical)).toBe( - "Physical" + "Physical", ); expect(getMachineTypeDisplay(UserSubscriptionMachineType.Desktop)).toBe( - "Desktop" + "Desktop", ); }); }); diff --git a/static/js/src/advantage/react/utils/getMachineTypeDisplay.ts b/static/js/src/advantage/react/utils/getMachineTypeDisplay.ts index f1e9f73ebda..87cfbc9a231 100644 --- a/static/js/src/advantage/react/utils/getMachineTypeDisplay.ts +++ b/static/js/src/advantage/react/utils/getMachineTypeDisplay.ts @@ -2,7 +2,7 @@ import { UserSubscriptionMachineType } from "advantage/api/enum"; import { UserSubscription } from "advantage/api/types"; export const getMachineTypeDisplay = ( - machineType: UserSubscription["machine_type"] + machineType: UserSubscription["machine_type"], ) => { switch (machineType) { case UserSubscriptionMachineType.Virtual: diff --git a/static/js/src/advantage/react/utils/getNextCycleStart.test.ts b/static/js/src/advantage/react/utils/getNextCycleStart.test.ts index 20b68451be8..b5f573361f6 100644 --- a/static/js/src/advantage/react/utils/getNextCycleStart.test.ts +++ b/static/js/src/advantage/react/utils/getNextCycleStart.test.ts @@ -5,14 +5,14 @@ describe("getNextCycleStart", () => { it("returns the correct next cycle start date", () => { expect( getNextCycleStart( - userSubscriptionFactory.build({ end_date: new Date("2020-06-16") }) - ) + userSubscriptionFactory.build({ end_date: new Date("2020-06-16") }), + ), ).toStrictEqual(new Date("2020-06-17")); }); it("returns null if there is no end date", () => { expect( - getNextCycleStart(userSubscriptionFactory.build({ end_date: null })) + getNextCycleStart(userSubscriptionFactory.build({ end_date: null })), ).toBe(null); }); }); diff --git a/static/js/src/advantage/react/utils/getNextCycleStart.ts b/static/js/src/advantage/react/utils/getNextCycleStart.ts index 5f39d9a21c7..34da0640818 100644 --- a/static/js/src/advantage/react/utils/getNextCycleStart.ts +++ b/static/js/src/advantage/react/utils/getNextCycleStart.ts @@ -2,7 +2,7 @@ import addDays from "date-fns/addDays"; import { UserSubscription } from "../../api/types"; export const getNextCycleStart = ( - subscription?: UserSubscription + subscription?: UserSubscription, ): Date | null => { if (!subscription?.end_date) return null; diff --git a/static/js/src/advantage/react/utils/isBlenderSubscription.test.ts b/static/js/src/advantage/react/utils/isBlenderSubscription.test.ts index b060f3b8b1a..d4f85286dea 100644 --- a/static/js/src/advantage/react/utils/isBlenderSubscription.test.ts +++ b/static/js/src/advantage/react/utils/isBlenderSubscription.test.ts @@ -8,8 +8,8 @@ describe("isBlenderSubscription", () => { isBlenderSubscription( userSubscriptionFactory.build({ marketplace: UserSubscriptionMarketplace.Blender, - }) - ) + }), + ), ).toBe(true); }); @@ -18,8 +18,8 @@ describe("isBlenderSubscription", () => { isBlenderSubscription( userSubscriptionFactory.build({ marketplace: UserSubscriptionMarketplace.CanonicalUA, - }) - ) + }), + ), ).toBe(false); }); }); diff --git a/static/js/src/advantage/react/utils/isFreeSubscription.test.ts b/static/js/src/advantage/react/utils/isFreeSubscription.test.ts index f7ee89fec17..7caaf146905 100644 --- a/static/js/src/advantage/react/utils/isFreeSubscription.test.ts +++ b/static/js/src/advantage/react/utils/isFreeSubscription.test.ts @@ -6,16 +6,16 @@ describe("isFreeSubscription", () => { it("can identify free subscriptions", () => { expect( isFreeSubscription( - userSubscriptionFactory.build({ type: UserSubscriptionType.Free }) - ) + userSubscriptionFactory.build({ type: UserSubscriptionType.Free }), + ), ).toBe(true); }); it("can identify non-free subscriptions", () => { expect( isFreeSubscription( - userSubscriptionFactory.build({ type: UserSubscriptionType.Trial }) - ) + userSubscriptionFactory.build({ type: UserSubscriptionType.Trial }), + ), ).toBe(false); }); }); diff --git a/static/js/src/advantage/react/utils/makeInteractiveProps.ts b/static/js/src/advantage/react/utils/makeInteractiveProps.ts index 9f37db55f15..c096b5827b7 100644 --- a/static/js/src/advantage/react/utils/makeInteractiveProps.ts +++ b/static/js/src/advantage/react/utils/makeInteractiveProps.ts @@ -1,5 +1,5 @@ export const makeInteractiveProps = ( - onInteraction: (...args: unknown[]) => unknown + onInteraction: (...args: unknown[]) => unknown, ) => { return { onClick: onInteraction, diff --git a/static/js/src/advantage/react/utils/removeFalsy.test.ts b/static/js/src/advantage/react/utils/removeFalsy.test.ts index c2b8042f769..9fb190e926c 100644 --- a/static/js/src/advantage/react/utils/removeFalsy.test.ts +++ b/static/js/src/advantage/react/utils/removeFalsy.test.ts @@ -3,7 +3,7 @@ import { removeFalsy } from "./removeFalsy"; describe("removeFalsy", () => { it("removes falsy items in an array", () => { expect( - removeFalsy(["one", 2, false, null, true, "", undefined, 0]) + removeFalsy(["one", 2, false, null, true, "", undefined, 0]), ).toStrictEqual(["one", 2, true]); }); }); diff --git a/static/js/src/advantage/react/utils/removeFalsy.ts b/static/js/src/advantage/react/utils/removeFalsy.ts index fabddda4c3a..9f76004b475 100644 --- a/static/js/src/advantage/react/utils/removeFalsy.ts +++ b/static/js/src/advantage/react/utils/removeFalsy.ts @@ -2,5 +2,5 @@ type Falsy = false | 0 | "" | null | undefined; export const removeFalsy = (items: I[]): Exclude[] => items.filter>( - (item: I): item is Exclude => !!item + (item: I): item is Exclude => !!item, ); diff --git a/static/js/src/advantage/react/utils/sendAnalyticsEvent.test.ts b/static/js/src/advantage/react/utils/sendAnalyticsEvent.test.ts index 20cd42a79ee..32622a89217 100644 --- a/static/js/src/advantage/react/utils/sendAnalyticsEvent.test.ts +++ b/static/js/src/advantage/react/utils/sendAnalyticsEvent.test.ts @@ -39,7 +39,7 @@ describe("sendAnalyticsEvent", () => { sendAnalyticsEvent({ eventAction: "clicked", eventCategory: "button", - }) + }), ).not.toThrow(); }); }); diff --git a/static/js/src/advantage/react/utils/sendAnalyticsEvent.ts b/static/js/src/advantage/react/utils/sendAnalyticsEvent.ts index 5fd2d2f0a88..125db10a8e0 100644 --- a/static/js/src/advantage/react/utils/sendAnalyticsEvent.ts +++ b/static/js/src/advantage/react/utils/sendAnalyticsEvent.ts @@ -1,7 +1,7 @@ import { DataLayerEvent } from "globals"; export const sendAnalyticsEvent = ( - analyticsEvent: Omit + analyticsEvent: Omit, ) => { window.dataLayer?.push({ event: "GAEvent", diff --git a/static/js/src/advantage/react/utils/sortSubscriptionsByStartDate.ts b/static/js/src/advantage/react/utils/sortSubscriptionsByStartDate.ts index 2504d37a114..3742c514d08 100644 --- a/static/js/src/advantage/react/utils/sortSubscriptionsByStartDate.ts +++ b/static/js/src/advantage/react/utils/sortSubscriptionsByStartDate.ts @@ -2,9 +2,9 @@ import { UserSubscription } from "advantage/api/types"; import { parseJSON } from "date-fns"; export const sortSubscriptionsByStartDate = ( - subscriptions: UserSubscription[] + subscriptions: UserSubscription[], ) => [...subscriptions].sort( (a, b) => - parseJSON(b.start_date).getTime() - parseJSON(a.start_date).getTime() + parseJSON(b.start_date).getTime() - parseJSON(a.start_date).getTime(), ); diff --git a/static/js/src/advantage/subscribe/blender/components/PaymentButton/PaymentButton.test.tsx b/static/js/src/advantage/subscribe/blender/components/PaymentButton/PaymentButton.test.tsx index ad28df6bcea..cb0447daf08 100644 --- a/static/js/src/advantage/subscribe/blender/components/PaymentButton/PaymentButton.test.tsx +++ b/static/js/src/advantage/subscribe/blender/components/PaymentButton/PaymentButton.test.tsx @@ -49,7 +49,7 @@ describe("PaymentButton", () => { initialPeriod={Periods.yearly} > - + , ); const paymentButton = screen.getByRole("button", { @@ -63,7 +63,7 @@ describe("PaymentButton", () => { await waitFor(() => { expect(window.location.href).toBe("/account/checkout"); expect(localStorage.getItem("shop-checkout-data")).toBe( - '{"products":[{"product":{"longId":"lANXjQ-H8fzvf_Ea8bIK1KW7Wi2W0VHnV0ZUsrEGbUiQ","period":"yearly","marketplace":"blender","id":"blender-support-standard-yearly","name":"Blender Support Yearly","price":{"value":50000},"canBeTrialled":false},"quantity":2}],"action":"purchase"}' + '{"products":[{"product":{"longId":"lANXjQ-H8fzvf_Ea8bIK1KW7Wi2W0VHnV0ZUsrEGbUiQ","period":"yearly","marketplace":"blender","id":"blender-support-standard-yearly","name":"Blender Support Yearly","price":{"value":50000},"canBeTrialled":false},"quantity":2}],"action":"purchase"}', ); }); diff --git a/static/js/src/advantage/subscribe/blender/components/PaymentButton/PaymentButton.tsx b/static/js/src/advantage/subscribe/blender/components/PaymentButton/PaymentButton.tsx index 9ff6a543f79..69b5c791bf0 100644 --- a/static/js/src/advantage/subscribe/blender/components/PaymentButton/PaymentButton.tsx +++ b/static/js/src/advantage/subscribe/blender/components/PaymentButton/PaymentButton.tsx @@ -23,7 +23,7 @@ export default function PaymentButton() { e.preventDefault(); localStorage.setItem( "shop-checkout-data", - JSON.stringify(shopCheckoutData) + JSON.stringify(shopCheckoutData), ); location.href = "/account/checkout"; }} diff --git a/static/js/src/advantage/subscribe/blender/components/ProductSummary/ProductSummary.tsx b/static/js/src/advantage/subscribe/blender/components/ProductSummary/ProductSummary.tsx index 6a53597f1f9..bea46ba5e58 100644 --- a/static/js/src/advantage/subscribe/blender/components/ProductSummary/ProductSummary.tsx +++ b/static/js/src/advantage/subscribe/blender/components/ProductSummary/ProductSummary.tsx @@ -59,7 +59,7 @@ const ProductSummary = () => { {currencyFormatter.format( - ((product?.price.value ?? 0) / 100) * quantity + ((product?.price.value ?? 0) / 100) * quantity, )}{" "} /{period === Periods.yearly ? "year" : "month"} diff --git a/static/js/src/advantage/subscribe/blender/utils/FormContext.tsx b/static/js/src/advantage/subscribe/blender/utils/FormContext.tsx index 2d762e04b34..9e653c22ad8 100644 --- a/static/js/src/advantage/subscribe/blender/utils/FormContext.tsx +++ b/static/js/src/advantage/subscribe/blender/utils/FormContext.tsx @@ -43,7 +43,7 @@ export const FormProvider = ({ useEffect(() => { setProduct( - window.blenderProductList[`blender-support-${support}-${period}`] ?? null + window.blenderProductList[`blender-support-${support}-${period}`] ?? null, ); }, [support, period]); diff --git a/static/js/src/advantage/subscribe/checkout/components/BuyButton/BuyButton.tsx b/static/js/src/advantage/subscribe/checkout/components/BuyButton/BuyButton.tsx index a6edbd70857..5cf87d33b78 100644 --- a/static/js/src/advantage/subscribe/checkout/components/BuyButton/BuyButton.tsx +++ b/static/js/src/advantage/subscribe/checkout/components/BuyButton/BuyButton.tsx @@ -110,13 +110,13 @@ const BuyButton = ({ setError, products, action, coupon }: Props) => { onError: (error) => { handleError(error); }, - } + }, ); } // Update customer information const hasZeroPriceValue = products.some( - (item) => item.product.price.value === 0 + (item) => item.product.price.value === 0, ); if (!values.defaultPaymentMethod && !hasZeroPriceValue) { await postCustomerInfoMutation.mutateAsync( @@ -125,7 +125,7 @@ const BuyButton = ({ setError, products, action, coupon }: Props) => { onError: (error) => { handleError(error); }, - } + }, ); } @@ -149,7 +149,7 @@ const BuyButton = ({ setError, products, action, coupon }: Props) => { onError: (error) => { handleError(error); }, - } + }, ); }; @@ -164,7 +164,7 @@ const BuyButton = ({ setError, products, action, coupon }: Props) => { <> You already have a pending purchase. Please go to{" "} payment methods to retry. - + , ); } else if ( error.message.includes("purchase while subscription is in trial") @@ -173,20 +173,20 @@ const BuyButton = ({ setError, products, action, coupon }: Props) => { <> You cannot make a purchase during the trial period. To make a new purchase, cancel your current trial subscription. - + , ); } else if (error.message.includes("tax_id_invalid")) { setFieldError( "VATNumber", - "That VAT number is invalid. Check the number and try again." + "That VAT number is invalid. Check the number and try again.", ); setError( - <>That VAT number is invalid. Check the number and try again. + <>That VAT number is invalid. Check the number and try again., ); } else if (error.message.includes("tax_id_cannot_be_validated")) { setFieldError( "VATNumber", - "VAT number could not be validated at this time, please try again later or contact customer success if the problem persists." + "VAT number could not be validated at this time, please try again later or contact customer success if the problem persists.", ); setError( <> @@ -194,11 +194,11 @@ const BuyButton = ({ setError, products, action, coupon }: Props) => { or contact customer success if the problem persists. - + , ); } else if ( error.message.includes( - "We are unable to authenticate your payment method" + "We are unable to authenticate your payment method", ) ) { setError( @@ -207,11 +207,11 @@ const BuyButton = ({ setError, products, action, coupon }: Props) => { again. Contact{" "} Canonical sales if the problem persists. - + , ); } else if ( error.message.includes( - "missing one-off product listing for renewal product" + "missing one-off product listing for renewal product", ) ) { setError( @@ -219,7 +219,7 @@ const BuyButton = ({ setError, products, action, coupon }: Props) => { The chosen product cannot be renewed as it has been deprecated. Contact Canonical sales to choose a substitute offering. - + , ); } else { const knownErrorMessage = getErrorMessage({ @@ -238,7 +238,7 @@ const BuyButton = ({ setError, products, action, coupon }: Props) => { details and try again. Contact{" "} Canonical sales if the problem persists. - + , ); } } @@ -281,7 +281,7 @@ const BuyButton = ({ setError, products, action, coupon }: Props) => { const proSelectorKeysArray = Object.values(PRO_SELECTOR_KEYS); const distributorSelectorKeysArray = Object.values( - DISTRIBUTOR_SELECTOR_KEYS + DISTRIBUTOR_SELECTOR_KEYS, ); proSelectorKeysArray.forEach((key) => { @@ -313,11 +313,11 @@ const BuyButton = ({ setError, products, action, coupon }: Props) => { getName(); formData.append( "email", - (userInfo?.customerInfo?.email || values.email) ?? "" + (userInfo?.customerInfo?.email || values.email) ?? "", ); formData.append( "company", - (userInfo?.accountInfo?.name || values?.organisationName) ?? "" + (userInfo?.accountInfo?.name || values?.organisationName) ?? "", ); formData.append("street", address ?? ""); formData.append("Consent_to_Processing__c", "yes"); @@ -328,7 +328,7 @@ const BuyButton = ({ setError, products, action, coupon }: Props) => { formData.append("store_name__c", "ua"); formData.append( "canonicalUpdatesOptIn", - values.MarketingOptIn ? "yes" : "no" + values.MarketingOptIn ? "yes" : "no", ); request.open("POST", "/marketo/submit"); @@ -342,11 +342,11 @@ const BuyButton = ({ setError, products, action, coupon }: Props) => { if (product.marketplace == "canonical-cube") { if (product.name === "cue-linux-essentials-free") { location.href = `/credentials/shop/order-thank-you?productName=${encodeURIComponent( - "CUE.01 Linux" + "CUE.01 Linux", )}&quantity=${quantity}`; } else { location.href = `/credentials/shop/order-thank-you?productName=${encodeURIComponent( - product.name + product.name, )}&quantity=${quantity}`; } } else if (!window.loginSession) { @@ -356,13 +356,13 @@ const BuyButton = ({ setError, products, action, coupon }: Props) => { urlBase = "/pro/subscribe/blender"; } location.href = `${urlBase}/thank-you?email=${encodeURIComponent( - email + email, )}`; } else if (product.marketplace === "canonical-pro-channel") { const email = userInfo?.customerInfo?.email || values.email || ""; const urlBase = "/pro/distributor"; location.href = `${urlBase}/thank-you?email=${encodeURIComponent( - email + email, )}`; } else { location.href = "/pro/dashboard"; diff --git a/static/js/src/advantage/subscribe/checkout/components/ConfirmAndBuy/ConfirmAndBuy.tsx b/static/js/src/advantage/subscribe/checkout/components/ConfirmAndBuy/ConfirmAndBuy.tsx index 64c83880e62..1b43cf4a358 100644 --- a/static/js/src/advantage/subscribe/checkout/components/ConfirmAndBuy/ConfirmAndBuy.tsx +++ b/static/js/src/advantage/subscribe/checkout/components/ConfirmAndBuy/ConfirmAndBuy.tsx @@ -23,10 +23,10 @@ const ConfirmAndBuy = ({ products, action }: Props) => { const { termsLabel, descriptionLabel, marketingLabel } = getLabels( product, - action + action, ); - const ReCAPTCHAComponent = (ReCAPTCHA as unknown) as React.ComponentType; + const ReCAPTCHAComponent = ReCAPTCHA as unknown as React.ComponentType; const validateCheckbox = (value: boolean) => { if (!value) { diff --git a/static/js/src/advantage/subscribe/checkout/components/DistributorSummary.tsx/DistributorSummary.tsx b/static/js/src/advantage/subscribe/checkout/components/DistributorSummary.tsx/DistributorSummary.tsx index 2bcb9961a1b..ff06b8900b3 100644 --- a/static/js/src/advantage/subscribe/checkout/components/DistributorSummary.tsx/DistributorSummary.tsx +++ b/static/js/src/advantage/subscribe/checkout/components/DistributorSummary.tsx/DistributorSummary.tsx @@ -44,7 +44,7 @@ function DistributorSummary({ return acc; }, - { totalDiscount: 0, totalDefaultTotal: 0 } + { totalDiscount: 0, totalDefaultTotal: 0 }, ); const discount = totalDiscount; @@ -104,7 +104,7 @@ function DistributorSummary({ −{" "} {currency ? currencyFormatter(currency).format( - Number(discount) ?? 0 + Number(discount) ?? 0, ) : 0} @@ -138,7 +138,7 @@ function DistributorSummary({ {currency ? currencyFormatter(currency).format( - Number(defaultTotal) + Number(taxAmount) || 0 + Number(defaultTotal) + Number(taxAmount) || 0, ) : 0} @@ -177,14 +177,14 @@ function DistributorSummary({ const productName = validProduct.includes("-virtual-") ? "Ubuntu Pro virtual" : validProduct.includes("-desktop-") - ? "Ubuntu Pro Desktop" - : "Ubuntu Pro"; + ? "Ubuntu Pro Desktop" + : "Ubuntu Pro"; const quantity = product.quantity; const support = validProduct.includes("advanced") ? "24/7 Support, " : validProduct.includes("standard") - ? "Weekday Support, " - : ""; + ? "Weekday Support, " + : ""; const infra = validProduct.includes("uio") ? "Infra, " : ""; return ( @@ -225,7 +225,7 @@ function DistributorSummary({ {format( new Date().setFullYear(new Date().getFullYear() + duration), - DATE_FORMAT + DATE_FORMAT, )}

@@ -247,7 +247,7 @@ function DistributorSummary({ {quantity} x{" "} {currency ? currencyFormatter(currency).format( - (Number(price) ?? 0) / 100 / duration + (Number(price) ?? 0) / 100 / duration, ) : 0}{" "} x {duration} {duration === 1 ? "year" : "years"} diff --git a/static/js/src/advantage/subscribe/checkout/components/FormRow/FormRow.test.jsx b/static/js/src/advantage/subscribe/checkout/components/FormRow/FormRow.test.jsx index 96ed55268f8..247371f14ea 100644 --- a/static/js/src/advantage/subscribe/checkout/components/FormRow/FormRow.test.jsx +++ b/static/js/src/advantage/subscribe/checkout/components/FormRow/FormRow.test.jsx @@ -7,7 +7,7 @@ describe("FormRow", () => { const wrapper = shallow( test-input - + , ); expect(wrapper.find("label").text()).toBe("test-label"); @@ -20,7 +20,7 @@ describe("FormRow", () => { Test - + , ); expect(wrapper.find("label").text()).toBe("test-label"); diff --git a/static/js/src/advantage/subscribe/checkout/components/FreeTrial/FreeTrial.test.tsx b/static/js/src/advantage/subscribe/checkout/components/FreeTrial/FreeTrial.test.tsx index 5dd79b50dd7..ab48fc5baba 100644 --- a/static/js/src/advantage/subscribe/checkout/components/FreeTrial/FreeTrial.test.tsx +++ b/static/js/src/advantage/subscribe/checkout/components/FreeTrial/FreeTrial.test.tsx @@ -30,7 +30,7 @@ describe("FreeTrial", () => { > - + , ); screen.getByText("Your free trial ends:"); screen.getByText( @@ -38,10 +38,10 @@ describe("FreeTrial", () => { add(new Date(), { months: 1, }), - "dd MMMM yyyy" + "dd MMMM yyyy", )} after which time you will be charged ${formatter.format( - taxes.total / 100 - )}.` + taxes.total / 100, + )}.`, ); }); @@ -57,7 +57,7 @@ describe("FreeTrial", () => { - + , ); expect(screen.queryByText("Your free trial ends:")).not.toBeInTheDocument(); }); diff --git a/static/js/src/advantage/subscribe/checkout/components/FreeTrial/FreeTrial.tsx b/static/js/src/advantage/subscribe/checkout/components/FreeTrial/FreeTrial.tsx index a0fe1348ec2..34a1ea795f1 100644 --- a/static/js/src/advantage/subscribe/checkout/components/FreeTrial/FreeTrial.tsx +++ b/static/js/src/advantage/subscribe/checkout/components/FreeTrial/FreeTrial.tsx @@ -82,7 +82,7 @@ const FreeTrial = ({ products, action, coupon }: Props) => { add(new Date(), { months: 1, }), - DATE_FORMAT + DATE_FORMAT, )}{" "} after which time you will be charged {taxData?.total diff --git a/static/js/src/advantage/subscribe/checkout/components/Summary/Summary.test.tsx b/static/js/src/advantage/subscribe/checkout/components/Summary/Summary.test.tsx index b465b21c190..b7942e96d2b 100644 --- a/static/js/src/advantage/subscribe/checkout/components/Summary/Summary.test.tsx +++ b/static/js/src/advantage/subscribe/checkout/components/Summary/Summary.test.tsx @@ -75,21 +75,21 @@ describe("Summary", () => { /> - + , ); expect(screen.getByText("Ubuntu Pro")).toBeInTheDocument(); expect(screen.getByText("3 x $500.00")).toBeInTheDocument(); expect(screen.getByTestId("start-date")).toHaveTextContent( - format(new Date(), DATE_FORMAT) + format(new Date(), DATE_FORMAT), ); expect(screen.getByTestId("end-date")).toHaveTextContent( format( add(new Date(), { years: 1, }), - DATE_FORMAT - ) + DATE_FORMAT, + ), ); expect(screen.getByTestId("subtotal")).toHaveTextContent("$1,500.00"); @@ -128,7 +128,7 @@ describe("Summary", () => { /> - + , ); expect(screen.getByTestId("tax")).toHaveTextContent("$9.99"); @@ -169,12 +169,12 @@ describe("Summary", () => { /> - + , ); expect(screen.getByTestId("for-this-period")).toHaveTextContent("$200.00"); expect(screen.getByTestId("end-date")).toHaveTextContent( - "03 February 2042" + "03 February 2042", ); }); @@ -212,7 +212,7 @@ describe("Summary", () => { /> - + , ); screen.getByText("Purchase error"); @@ -231,7 +231,7 @@ describe("Summary", () => { isError: true, isSuccess: false, error: new Error( - "cannot make a purchase while subscription is in trial" + "cannot make a purchase while subscription is in trial", ), isFetching: false, }; @@ -255,7 +255,7 @@ describe("Summary", () => { /> - + , ); const message = ( @@ -303,7 +303,7 @@ describe("Summary", () => { /> - + , ); const message = ( @@ -351,7 +351,7 @@ describe("Summary", () => { /> - + , ); const message = <>Sorry, there was an unknown error with your purchase.; diff --git a/static/js/src/advantage/subscribe/checkout/components/Summary/Summary.tsx b/static/js/src/advantage/subscribe/checkout/components/Summary/Summary.tsx index 10036c19e54..a70b723db31 100644 --- a/static/js/src/advantage/subscribe/checkout/components/Summary/Summary.tsx +++ b/static/js/src/advantage/subscribe/checkout/components/Summary/Summary.tsx @@ -57,15 +57,15 @@ function Summary({ products, action, coupon, setError }: Props) { marketplace === UserSubscriptionMarketplace.CanonicalUA ? "Machines" : marketplace === "canonical-cube" - ? "Exams" - : "Users"; + ? "Exams" + : "Users"; const planType = marketplace === "canonical-cube" ? "Product" : action !== "offer" - ? "Plan type" - : "Products"; + ? "Plan type" + : "Products"; const productName = action !== "offer" @@ -111,7 +111,7 @@ function Summary({ products, action, coupon, setError }: Props) { ); } else if ( error.message.includes( - "cannot make a purchase while subscription is in trial" + "cannot make a purchase while subscription is in trial", ) ) { message = ( @@ -122,7 +122,7 @@ function Summary({ products, action, coupon, setError }: Props) { ); } else if ( error.message.includes( - "missing one-off product listing for renewal product" + "missing one-off product listing for renewal product", ) ) { message = ( @@ -257,7 +257,7 @@ function Summary({ products, action, coupon, setError }: Props) { {currencyFormatter.format( (product?.price?.value * (product?.price?.discount / 100)) / - 100 + 100, )}

diff --git a/static/js/src/advantage/subscribe/checkout/components/Taxes/Taxes.test.tsx b/static/js/src/advantage/subscribe/checkout/components/Taxes/Taxes.test.tsx index 300759beb5b..f1fc24acca7 100644 --- a/static/js/src/advantage/subscribe/checkout/components/Taxes/Taxes.test.tsx +++ b/static/js/src/advantage/subscribe/checkout/components/Taxes/Taxes.test.tsx @@ -28,7 +28,7 @@ describe("TaxesTests", () => { - + , ); screen.getByText("Country/Region:"); expect(screen.getByTestId("select-country")).toBeInTheDocument(); @@ -49,7 +49,7 @@ describe("TaxesTests", () => { - + , ); expect(screen.getByTestId("select-country")).toBeInTheDocument(); @@ -72,7 +72,7 @@ describe("TaxesTests", () => { - + , ); expect(screen.getByTestId("select-country")).toBeInTheDocument(); @@ -97,7 +97,7 @@ describe("TaxesTests", () => { - + , ); fireEvent.change(getByTestId("select-country"), { target: { value: "US" }, @@ -128,7 +128,7 @@ describe("TaxesTests", () => { - + , ); expect(screen.getByRole("button", { name: "Edit" })).toBeInTheDocument(); @@ -148,7 +148,7 @@ describe("TaxesTests", () => { - + , ); expect(screen.getByRole("button", { name: "Save" })).toBeInTheDocument(); @@ -176,7 +176,7 @@ describe("TaxesTests", () => { - + , ); fireEvent.click(screen.getByRole("button", { name: "Edit" })); diff --git a/static/js/src/advantage/subscribe/checkout/components/Taxes/Taxes.tsx b/static/js/src/advantage/subscribe/checkout/components/Taxes/Taxes.tsx index a6976082400..6025410fe23 100644 --- a/static/js/src/advantage/subscribe/checkout/components/Taxes/Taxes.tsx +++ b/static/js/src/advantage/subscribe/checkout/components/Taxes/Taxes.tsx @@ -55,7 +55,7 @@ const Taxes = ({ products, setError }: TaxesProps) => { const postCustomerTaxInfoMutation = postCustomerTaxInfo(); const hasZeroPriceValue = products.some( - (item) => item.product.price.value === 0 + (item) => item.product.price.value === 0, ); const onSaveClick = () => { setIsEditing(false); @@ -87,7 +87,7 @@ const Taxes = ({ products, setError }: TaxesProps) => { setError( <> That VAT number is invalid. Check the number and try again. - + , ); } else if (error.message.includes("tax_id_cannot_be_validated")) { setFormikErrors({ @@ -102,13 +102,13 @@ const Taxes = ({ products, setError }: TaxesProps) => { customer success {" "} if the problem persists. - + , ); } else { setError(<>VAT could not be applied.); } }, - } + }, ); setFieldValue("isTaxSaved", true); } diff --git a/static/js/src/advantage/subscribe/checkout/components/UserInfoForm/PaymentMethodSummary/PaymentMethodSummary.test.tsx b/static/js/src/advantage/subscribe/checkout/components/UserInfoForm/PaymentMethodSummary/PaymentMethodSummary.test.tsx index 9bde9ab562f..8aa142b501f 100644 --- a/static/js/src/advantage/subscribe/checkout/components/UserInfoForm/PaymentMethodSummary/PaymentMethodSummary.test.tsx +++ b/static/js/src/advantage/subscribe/checkout/components/UserInfoForm/PaymentMethodSummary/PaymentMethodSummary.test.tsx @@ -16,7 +16,7 @@ describe("PaymentMethodSummary", () => { render( - + , ); screen.getByText("ending in 4444"); expect(screen.getByText("mastercard")).toBeInTheDocument(); diff --git a/static/js/src/advantage/subscribe/checkout/components/UserInfoForm/UserInfoForm.test.tsx b/static/js/src/advantage/subscribe/checkout/components/UserInfoForm/UserInfoForm.test.tsx index 60a0b28ab0e..039251199f4 100644 --- a/static/js/src/advantage/subscribe/checkout/components/UserInfoForm/UserInfoForm.test.tsx +++ b/static/js/src/advantage/subscribe/checkout/components/UserInfoForm/UserInfoForm.test.tsx @@ -41,7 +41,7 @@ describe("UserInfoFormTests", () => { - + , ); fireEvent.click(screen.getByRole("button", { name: "Edit" })); @@ -65,14 +65,14 @@ describe("UserInfoFormTests", () => { expect(screen.getByTestId("customer-name")).toHaveTextContent("Joe"); expect(screen.getByTestId("organisation-name")).toHaveTextContent( - "Canonical" + "Canonical", ); expect(screen.getByTestId("customer-address")).toHaveTextContent( - "Adrs Street" + "Adrs Street", ); expect(screen.getByTestId("customer-city")).toHaveTextContent("Citty"); expect(screen.getByTestId("customer-postal-code")).toHaveTextContent( - "AB12 3CD" + "AB12 3CD", ); }); }); diff --git a/static/js/src/advantage/subscribe/checkout/components/UserInfoForm/UserInfoForm.tsx b/static/js/src/advantage/subscribe/checkout/components/UserInfoForm/UserInfoForm.tsx index de5c6b9cb20..bcc0ed77fcb 100644 --- a/static/js/src/advantage/subscribe/checkout/components/UserInfoForm/UserInfoForm.tsx +++ b/static/js/src/advantage/subscribe/checkout/components/UserInfoForm/UserInfoForm.tsx @@ -39,7 +39,7 @@ const UserInfoForm = ({ setError }: Props) => { const queryClient = useQueryClient(); const paymentMethodMutation = registerPaymentMethod(); const [isEditing, setIsEditing] = useState( - !window.accountId || !initialValues.defaultPaymentMethod + !window.accountId || !initialValues.defaultPaymentMethod, ); const [isButtonDisabled, setIsButtonDisabled] = useState(false); const [cardFieldHasFocus, setCardFieldFocus] = useState(false); @@ -114,12 +114,12 @@ const UserInfoForm = ({ setError }: Props) => { the details and try again. Contact{" "} Canonical sales if the problem persists. - + , ); } } }, - } + }, ); }; @@ -413,7 +413,7 @@ const UserInfoForm = ({ setError }: Props) => { setFieldValue("buyingFor", initialValues.buyingFor); setFieldValue( "organisationName", - initialValues.organisationName + initialValues.organisationName, ); setFieldValue("name", initialValues.name); setFieldValue("address", initialValues.address); diff --git a/static/js/src/advantage/subscribe/checkout/hooks/postCustomerTaxInfo.tsx b/static/js/src/advantage/subscribe/checkout/hooks/postCustomerTaxInfo.tsx index 04318b87262..97423842bcb 100644 --- a/static/js/src/advantage/subscribe/checkout/hooks/postCustomerTaxInfo.tsx +++ b/static/js/src/advantage/subscribe/checkout/hooks/postCustomerTaxInfo.tsx @@ -41,7 +41,7 @@ const postCustomerTaxInfo = () => { { type: country === "ZA" ? "za_vat" : "eu_vat", value: VATNumber, - } + }, ); if (customerInfoRes.errors) { diff --git a/static/js/src/advantage/subscribe/checkout/hooks/postPurchase.tsx b/static/js/src/advantage/subscribe/checkout/hooks/postPurchase.tsx index 305711a2b4d..f5670794a1c 100644 --- a/static/js/src/advantage/subscribe/checkout/hooks/postPurchase.tsx +++ b/static/js/src/advantage/subscribe/checkout/hooks/postPurchase.tsx @@ -28,7 +28,7 @@ const postPurchase = () => { const marketplace = products[0].product.marketplace; let payload: PaymentPayload; const localTechnicalUserContact = localStorage.getItem( - DISTRIBUTOR_SELECTOR_KEYS.TECHNICAL_USER_CONTACT + DISTRIBUTOR_SELECTOR_KEYS.TECHNICAL_USER_CONTACT, ); const technicalUserContact = localTechnicalUserContact ? JSON.parse(localTechnicalUserContact) @@ -118,7 +118,7 @@ const postPurchase = () => { "Content-Type": "application/json", }, body: JSON.stringify(payload), - } + }, ); const previewRes = await previewReq.json(); @@ -142,7 +142,7 @@ const postPurchase = () => { "Content-Type": "application/json", }, body: JSON.stringify(payload), - } + }, ); const pruchaseRes = await pruchaseReq.json(); diff --git a/static/js/src/advantage/subscribe/checkout/hooks/useCalculate.tsx b/static/js/src/advantage/subscribe/checkout/hooks/useCalculate.tsx index 38df37e9f6f..46af4dae17b 100644 --- a/static/js/src/advantage/subscribe/checkout/hooks/useCalculate.tsx +++ b/static/js/src/advantage/subscribe/checkout/hooks/useCalculate.tsx @@ -38,7 +38,7 @@ const useCalculate = ({ }), has_tax: !!VATNumber, }), - } + }, ); const res = await response.json(); diff --git a/static/js/src/advantage/subscribe/checkout/hooks/useCustomerInfo.tsx b/static/js/src/advantage/subscribe/checkout/hooks/useCustomerInfo.tsx index 730e00179e2..982dbe87669 100644 --- a/static/js/src/advantage/subscribe/checkout/hooks/useCustomerInfo.tsx +++ b/static/js/src/advantage/subscribe/checkout/hooks/useCustomerInfo.tsx @@ -21,7 +21,7 @@ const useCustomerInfo = () => { window.loginSession = response; const accountStatusReq = await getPurchaseAccountStatus( - window.marketplace + window.marketplace, ); if (!accountStatusReq.account) { diff --git a/static/js/src/advantage/subscribe/checkout/hooks/usePollPurchaseStatus.tsx b/static/js/src/advantage/subscribe/checkout/hooks/usePollPurchaseStatus.tsx index d07b5b83850..f5819bf3dda 100644 --- a/static/js/src/advantage/subscribe/checkout/hooks/usePollPurchaseStatus.tsx +++ b/static/js/src/advantage/subscribe/checkout/hooks/usePollPurchaseStatus.tsx @@ -59,7 +59,7 @@ const usePollPurchaseStatus = () => { enabled: !!pendingPurchaseID, retry: ( _failureCount, - error: { message: string; code: string; dontRetry: boolean } + error: { message: string; code: string; dontRetry: boolean }, ) => { return !error.dontRetry; }, diff --git a/static/js/src/advantage/subscribe/checkout/hooks/usePreview.tsx b/static/js/src/advantage/subscribe/checkout/hooks/usePreview.tsx index 09d3bab0878..33df5276127 100644 --- a/static/js/src/advantage/subscribe/checkout/hooks/usePreview.tsx +++ b/static/js/src/advantage/subscribe/checkout/hooks/usePreview.tsx @@ -24,7 +24,7 @@ const usePreview = ({ products, action, coupon }: Props) => { const marketplace = products[0].product.marketplace; let payload: PaymentPayload; const localTechnicalUserContact = localStorage.getItem( - DISTRIBUTOR_SELECTOR_KEYS.TECHNICAL_USER_CONTACT + DISTRIBUTOR_SELECTOR_KEYS.TECHNICAL_USER_CONTACT, ); const technicalUserContact = localTechnicalUserContact ? JSON.parse(localTechnicalUserContact) @@ -113,7 +113,7 @@ const usePreview = ({ products, action, coupon }: Props) => { "Content-Type": "application/json", }, body: JSON.stringify(payload), - } + }, ); const res = await response.json(); diff --git a/static/js/src/advantage/subscribe/checkout/utils/helpers.ts b/static/js/src/advantage/subscribe/checkout/utils/helpers.ts index 43e608a0c0a..520dec9dbb1 100644 --- a/static/js/src/advantage/subscribe/checkout/utils/helpers.ts +++ b/static/js/src/advantage/subscribe/checkout/utils/helpers.ts @@ -4,7 +4,7 @@ import { FormValues, UserInfo } from "./types"; export function getInitialFormValues( marketplace: UserSubscriptionMarketplace, canTrial?: boolean, - userInfo?: UserInfo + userInfo?: UserInfo, ): FormValues { const accountName = userInfo?.accountInfo?.name; const customerName = userInfo?.customerInfo.name; @@ -42,7 +42,7 @@ export function getInitialFormValues( export const canBeTrialled = ( productCanBeTrialled?: boolean, - userCanTrial?: boolean + userCanTrial?: boolean, ) => { if (productCanBeTrialled == undefined) { return false; diff --git a/static/js/src/advantage/subscribe/react/components/Form/Feature/Feature.test.tsx b/static/js/src/advantage/subscribe/react/components/Form/Feature/Feature.test.tsx index 34df2825eb9..85e6c6bc56c 100644 --- a/static/js/src/advantage/subscribe/react/components/Form/Feature/Feature.test.tsx +++ b/static/js/src/advantage/subscribe/react/components/Form/Feature/Feature.test.tsx @@ -17,7 +17,7 @@ test("Feature section renders correctly", () => { render( - + , ); screen.getAllByText("Pro - all repositories"); @@ -28,7 +28,7 @@ test("Feature sections disables Infra + Apps if destkop is selected", () => { render( - + , ); expect(screen.getByTestId("infra-only")).toBeDisabled(); @@ -38,7 +38,7 @@ test("The section is disabled if a public cloud is selected", () => { render( - + , ); expect(null).toBeDefined(); @@ -51,7 +51,7 @@ test("The section is disabled if IoT devices - Ubuntu Core is selected", async ( initialIoTDevice={IoTDevices.core} > - + , ); expect(null).toBeDefined(); }); diff --git a/static/js/src/advantage/subscribe/react/components/Form/Feature/Feature.tsx b/static/js/src/advantage/subscribe/react/components/Form/Feature/Feature.tsx index ea008953c05..e861c852c50 100644 --- a/static/js/src/advantage/subscribe/react/components/Form/Feature/Feature.tsx +++ b/static/js/src/advantage/subscribe/react/components/Form/Feature/Feature.tsx @@ -12,7 +12,7 @@ const Feature = () => { setFeature(event.target.value as Features); localStorage.setItem( PRO_SELECTOR_KEYS.FEATURE, - JSON.stringify(event.target.value as Features) + JSON.stringify(event.target.value as Features), ); }; diff --git a/static/js/src/advantage/subscribe/react/components/Form/ProductType/ProductType.test.tsx b/static/js/src/advantage/subscribe/react/components/Form/ProductType/ProductType.test.tsx index a108374af86..87917d563b4 100644 --- a/static/js/src/advantage/subscribe/react/components/Form/ProductType/ProductType.test.tsx +++ b/static/js/src/advantage/subscribe/react/components/Form/ProductType/ProductType.test.tsx @@ -14,10 +14,10 @@ test("Type selector doesn't display the public cloud section by default", () => render( - + , ); expect( - screen.queryByText(/^Solutions for Ubuntu 18.04 LTS instances/) + screen.queryByText(/^Solutions for Ubuntu 18.04 LTS instances/), ).not.toBeInTheDocument(); }); @@ -25,16 +25,16 @@ test("Type selector displays the public cloud section if a public cloud is selec render( - + , ); await userEvent.click(screen.getByText("Public cloud instances")); expect( - screen.getByText(/launch new Ubuntu Pro instances on the AWS Marketplace/) + screen.getByText(/launch new Ubuntu Pro instances on the AWS Marketplace/), ).toHaveAttribute( "href", - "https://aws.amazon.com/marketplace/search/results?page=1&filters=VendorId&VendorId=e6a5002c-6dd0-4d1e-8196-0a1d1857229b&searchTerms=ubuntu+pro+ec2" + "https://aws.amazon.com/marketplace/search/results?page=1&filters=VendorId&VendorId=e6a5002c-6dd0-4d1e-8196-0a1d1857229b&searchTerms=ubuntu+pro+ec2", ); }); @@ -42,7 +42,7 @@ test("2 tabs display when IoT devices is selected", () => { render( - + , ); userEvent.click(screen.getByText("IoT and devices")); expect(screen.findByText("Ubuntu Classic")); @@ -53,7 +53,7 @@ test("A button displays when Ubuntu Core is selected", async () => { render( - + , ); userEvent.click(screen.getByText("IoT and devices")); const tab = await screen.findByRole("tab", { name: /Ubuntu Core/i }); diff --git a/static/js/src/advantage/subscribe/react/components/Form/ProductType/ProductType.tsx b/static/js/src/advantage/subscribe/react/components/Form/ProductType/ProductType.tsx index 5b05d93dbee..e2851678219 100644 --- a/static/js/src/advantage/subscribe/react/components/Form/ProductType/ProductType.tsx +++ b/static/js/src/advantage/subscribe/react/components/Form/ProductType/ProductType.tsx @@ -17,8 +17,7 @@ const PublicCloudInfo = { CTA: [ { CTAName: "In-place upgrade to Ubuntu Pro", - link: - "/blog/upgrade-your-existing-ubuntu-lts-instances-to-ubuntu-pro-in-aws", + link: "/blog/upgrade-your-existing-ubuntu-lts-instances-to-ubuntu-pro-in-aws", appearance: "positive", }, { @@ -50,8 +49,7 @@ const PublicCloudInfo = { CTA: [ { CTAName: "In-place upgrade to Ubuntu Pro", - link: - "/blog/announcing-in-place-upgrade-from-ubuntu-server-to-ubuntu-pro-on-azure", + link: "/blog/announcing-in-place-upgrade-from-ubuntu-server-to-ubuntu-pro-on-azure", appearance: "positive", }, { @@ -79,8 +77,7 @@ const PublicCloudInfo = { CTA: [ { CTAName: "In-place upgrade to Ubuntu Pro", - link: - "https://cloud.google.com/compute/docs/images/premium/ubuntu-pro/upgrade-from-ubuntu", + link: "https://cloud.google.com/compute/docs/images/premium/ubuntu-pro/upgrade-from-ubuntu", appearance: "positive", }, { @@ -101,8 +98,7 @@ const PublicCloudInfo = { contact us.{" "} ), - link: - "https://console.cloud.google.com/marketplace/browse?q=ubuntu%20pro&filter=partner:Canonical%20Group&authuser=1", + link: "https://console.cloud.google.com/marketplace/browse?q=ubuntu%20pro&filter=partner:Canonical%20Group&authuser=1", }, [PublicClouds.oracle]: { title: "Oracle", @@ -152,22 +148,21 @@ const PublicCloudInfo = { }; const ProductType = () => { const localPublicCloud = localStorage.getItem(PRO_SELECTOR_KEYS.IOT_DEVICE); - const { productType, setProductType, iotDevice, setIoTDevice } = useContext( - FormContext - ); + const { productType, setProductType, iotDevice, setIoTDevice } = + useContext(FormContext); const [publicCloud, setPublicCloud] = useState( localPublicCloud ? (JSON.parse(localPublicCloud) as PublicClouds) - : PublicClouds.aws + : PublicClouds.aws, ); const handleProductTypeChange = ( - event: React.ChangeEvent + event: React.ChangeEvent, ) => { setProductType(event.target.value as ProductTypes); localStorage.setItem( PRO_SELECTOR_KEYS.PRODUCT_TYPE, - JSON.stringify(event.target.value as ProductTypes) + JSON.stringify(event.target.value as ProductTypes), ); }; @@ -190,7 +185,7 @@ const ProductType = () => { setPublicCloud(PublicClouds.aws); localStorage.setItem( PRO_SELECTOR_KEYS.PUBLIC_CLOUD, - JSON.stringify(PublicClouds.aws) + JSON.stringify(PublicClouds.aws), ); }} > @@ -207,7 +202,7 @@ const ProductType = () => { setPublicCloud(PublicClouds.azure); localStorage.setItem( PRO_SELECTOR_KEYS.PUBLIC_CLOUD, - JSON.stringify(PublicClouds.azure) + JSON.stringify(PublicClouds.azure), ); }} > @@ -224,7 +219,7 @@ const ProductType = () => { setPublicCloud(PublicClouds.gcp); localStorage.setItem( PRO_SELECTOR_KEYS.PUBLIC_CLOUD, - JSON.stringify(PublicClouds.gcp) + JSON.stringify(PublicClouds.gcp), ); }} > @@ -241,7 +236,7 @@ const ProductType = () => { setPublicCloud(PublicClouds.oracle); localStorage.setItem( PRO_SELECTOR_KEYS.PUBLIC_CLOUD, - JSON.stringify(PublicClouds.oracle) + JSON.stringify(PublicClouds.oracle), ); }} > @@ -258,7 +253,7 @@ const ProductType = () => { setPublicCloud(PublicClouds.ibm); localStorage.setItem( PRO_SELECTOR_KEYS.PUBLIC_CLOUD, - JSON.stringify(PublicClouds.ibm) + JSON.stringify(PublicClouds.ibm), ); }} > @@ -303,7 +298,7 @@ const ProductType = () => { setIoTDevice(IoTDevices.classic); localStorage.setItem( PRO_SELECTOR_KEYS.IOT_DEVICE, - JSON.stringify(IoTDevices.classic) + JSON.stringify(IoTDevices.classic), ); }} > @@ -321,7 +316,7 @@ const ProductType = () => { setIoTDevice(IoTDevices.core); localStorage.setItem( PRO_SELECTOR_KEYS.IOT_DEVICE, - JSON.stringify(IoTDevices.core) + JSON.stringify(IoTDevices.core), ); }} > diff --git a/static/js/src/advantage/subscribe/react/components/Form/ProductUser/ProductUser.test.tsx b/static/js/src/advantage/subscribe/react/components/Form/ProductUser/ProductUser.test.tsx index 1d1a2ad0194..9bf961d289e 100644 --- a/static/js/src/advantage/subscribe/react/components/Form/ProductUser/ProductUser.test.tsx +++ b/static/js/src/advantage/subscribe/react/components/Form/ProductUser/ProductUser.test.tsx @@ -14,7 +14,7 @@ test("Should not display step 2,3,4,5,6 when 'myself' is selected in the first s render( - + , ); await userEvent.click(screen.getByText("Myself")); @@ -22,12 +22,12 @@ test("Should not display step 2,3,4,5,6 when 'myself' is selected in the first s expect(screen.queryByText(/What are you setting up/)).not.toBeInTheDocument(); expect(screen.queryByText(/For how many machines/)).not.toBeInTheDocument(); expect( - screen.queryByText(/What Ubuntu LTS version are you running/) + screen.queryByText(/What Ubuntu LTS version are you running/), ).not.toBeInTheDocument(); expect( - screen.queryByText(/What security coverage do you need/) + screen.queryByText(/What security coverage do you need/), ).not.toBeInTheDocument(); expect( - screen.queryByText(/Do you also need phone and ticket support/) + screen.queryByText(/Do you also need phone and ticket support/), ).not.toBeInTheDocument(); }); diff --git a/static/js/src/advantage/subscribe/react/components/Form/ProductUser/ProductUser.tsx b/static/js/src/advantage/subscribe/react/components/Form/ProductUser/ProductUser.tsx index 21b6d03608c..27fe9d43c59 100644 --- a/static/js/src/advantage/subscribe/react/components/Form/ProductUser/ProductUser.tsx +++ b/static/js/src/advantage/subscribe/react/components/Form/ProductUser/ProductUser.tsx @@ -8,12 +8,12 @@ const ProductUser = () => { const { productUser, setProductUser } = useContext(FormContext); const handleProductUserChange = ( - event: React.ChangeEvent + event: React.ChangeEvent, ) => { setProductUser(event.target.value as ProductUsers); localStorage.setItem( PRO_SELECTOR_KEYS.PRODUCT_USER, - JSON.stringify(event.target.value as ProductUsers) + JSON.stringify(event.target.value as ProductUsers), ); }; diff --git a/static/js/src/advantage/subscribe/react/components/Form/Quantity/Quantity.tsx b/static/js/src/advantage/subscribe/react/components/Form/Quantity/Quantity.tsx index 1620504a82c..63da04a90f9 100644 --- a/static/js/src/advantage/subscribe/react/components/Form/Quantity/Quantity.tsx +++ b/static/js/src/advantage/subscribe/react/components/Form/Quantity/Quantity.tsx @@ -11,7 +11,7 @@ const Quantity = () => { setQuantity(Number(event.target.value)); localStorage.setItem( PRO_SELECTOR_KEYS.QUANTITY, - JSON.stringify(Number(event.target.value)) + JSON.stringify(Number(event.target.value)), ); } else { setQuantity(""); diff --git a/static/js/src/advantage/subscribe/react/components/Form/Support/Support.test.tsx b/static/js/src/advantage/subscribe/react/components/Form/Support/Support.test.tsx index 462cb37f514..f0b22c2fc93 100644 --- a/static/js/src/advantage/subscribe/react/components/Form/Support/Support.test.tsx +++ b/static/js/src/advantage/subscribe/react/components/Form/Support/Support.test.tsx @@ -19,7 +19,7 @@ test("Full support is disabled if Infra is selected", () => { render( - + , ); expect(screen.getByTestId("infra-support")).not.toBeDisabled(); @@ -30,7 +30,7 @@ test("Infra support is disabled if desktop is selected", () => { render( - + , ); expect(screen.getByTestId("infra-support")).toBeDisabled(); @@ -41,7 +41,7 @@ test("Infra and full support are disabled if Xenial is selected", () => { render( - + , ); expect(screen.getByTestId("infra-support")).toBeDisabled(); @@ -52,7 +52,7 @@ test("The section is disabled if a public cloud is selected", () => { render( - + , ); expect(null).toBeDefined(); @@ -65,7 +65,7 @@ test("The section is disabled if IoT devices - Ubuntu Core is selected", async ( initialIoTDevice={IoTDevices.core} > - + , ); expect(null).toBeDefined(); }); diff --git a/static/js/src/advantage/subscribe/react/components/Form/Support/Support.tsx b/static/js/src/advantage/subscribe/react/components/Form/Support/Support.tsx index db5813e16a7..d883ef5d499 100644 --- a/static/js/src/advantage/subscribe/react/components/Form/Support/Support.tsx +++ b/static/js/src/advantage/subscribe/react/components/Form/Support/Support.tsx @@ -12,21 +12,14 @@ import { FormContext } from "advantage/subscribe/react/utils/FormContext"; import { PRO_SELECTOR_KEYS } from "advantage/distributor/utils/utils"; const Support = () => { - const { - feature, - sla, - setSLA, - support, - setSupport, - productType, - version, - } = useContext(FormContext); + const { feature, sla, setSLA, support, setSupport, productType, version } = + useContext(FormContext); const handleChange = (event: React.ChangeEvent) => { setSupport(event.target.value as SupportEnum); localStorage.setItem( PRO_SELECTOR_KEYS.SUPPORT, - JSON.stringify(event.target.value as SupportEnum) + JSON.stringify(event.target.value as SupportEnum), ); }; @@ -210,7 +203,7 @@ const Support = () => { setSupport(SupportEnum.none); localStorage.setItem( PRO_SELECTOR_KEYS.SUPPORT, - JSON.stringify(SupportEnum.none) + JSON.stringify(SupportEnum.none), ); }} > @@ -251,7 +244,7 @@ const Support = () => { setSupport(SupportEnum.infra); localStorage.setItem( PRO_SELECTOR_KEYS.SUPPORT, - JSON.stringify(SupportEnum.infra) + JSON.stringify(SupportEnum.infra), ); }} > @@ -289,7 +282,7 @@ const Support = () => { setSupport(SupportEnum.full); localStorage.setItem( PRO_SELECTOR_KEYS.SUPPORT, - JSON.stringify(SupportEnum.full) + JSON.stringify(SupportEnum.full), ); }} > @@ -343,7 +336,7 @@ const Support = () => { setSLA(SLA.weekday); localStorage.setItem( PRO_SELECTOR_KEYS.SLA, - JSON.stringify(SLA.weekday) + JSON.stringify(SLA.weekday), ); }} style={{ textAlign: "justify" }} @@ -364,7 +357,7 @@ const Support = () => { setSLA(SLA.everyday); localStorage.setItem( PRO_SELECTOR_KEYS.SLA, - JSON.stringify(SLA.everyday) + JSON.stringify(SLA.everyday), ); }} style={{ textAlign: "justify" }} diff --git a/static/js/src/advantage/subscribe/react/components/Form/Version/Version.test.tsx b/static/js/src/advantage/subscribe/react/components/Form/Version/Version.test.tsx index a035b651958..24d56bd534c 100644 --- a/static/js/src/advantage/subscribe/react/components/Form/Version/Version.test.tsx +++ b/static/js/src/advantage/subscribe/react/components/Form/Version/Version.test.tsx @@ -18,15 +18,15 @@ test("Version section displays the matching features to the selected version", a render( - + , ); expect( - screen.getByText(/^All subscriptions for Ubuntu Pro 22.04 LTS include:/) + screen.getByText(/^All subscriptions for Ubuntu Pro 22.04 LTS include:/), ); await userEvent.click(screen.getByText("16.04 LTS")); expect( - screen.getByText(/^All subscriptions for Ubuntu Pro 16.04 LTS include:/) + screen.getByText(/^All subscriptions for Ubuntu Pro 16.04 LTS include:/), ); }); @@ -34,7 +34,7 @@ test("The section is disabled if a public cloud is selected", () => { render( - + , ); expect(null).toBeDefined(); diff --git a/static/js/src/advantage/subscribe/react/components/Form/Version/Version.tsx b/static/js/src/advantage/subscribe/react/components/Form/Version/Version.tsx index 17517b88932..d59b5e8ea7d 100644 --- a/static/js/src/advantage/subscribe/react/components/Form/Version/Version.tsx +++ b/static/js/src/advantage/subscribe/react/components/Form/Version/Version.tsx @@ -181,7 +181,7 @@ const Version = () => { setVersion(key as LTSVersions); localStorage.setItem( PRO_SELECTOR_KEYS.VERSION, - JSON.stringify(key as LTSVersions) + JSON.stringify(key as LTSVersions), ); }} > diff --git a/static/js/src/advantage/subscribe/react/components/PaymentButton/PaymentButton.tsx b/static/js/src/advantage/subscribe/react/components/PaymentButton/PaymentButton.tsx index e9d240fcccd..5b314fbcf3e 100644 --- a/static/js/src/advantage/subscribe/react/components/PaymentButton/PaymentButton.tsx +++ b/static/js/src/advantage/subscribe/react/components/PaymentButton/PaymentButton.tsx @@ -35,7 +35,7 @@ export default function PaymentButton() { e.preventDefault(); localStorage.setItem( "shop-checkout-data", - JSON.stringify(shopCheckoutData) + JSON.stringify(shopCheckoutData), ); location.href = "/account/checkout"; }} diff --git a/static/js/src/advantage/subscribe/react/components/ProductSummary/ProductSummary.test.tsx b/static/js/src/advantage/subscribe/react/components/ProductSummary/ProductSummary.test.tsx index 93b9128b39e..95f5cc08eae 100644 --- a/static/js/src/advantage/subscribe/react/components/ProductSummary/ProductSummary.test.tsx +++ b/static/js/src/advantage/subscribe/react/components/ProductSummary/ProductSummary.test.tsx @@ -21,16 +21,16 @@ test("Should show Buy now button and full service description link when 'organis initialUser={ProductUsers.organisation} > - + , ); expect(screen.getByTestId("summary-product-name")).toHaveTextContent( - "Ubuntu Pro" + "Ubuntu Pro", ); expect(screen.getByTestId("summary-product-name")?.textContent).not.toContain( - "Desktop" + "Desktop", ); expect( - screen.getAllByText("See full service description")[0] + screen.getAllByText("See full service description")[0], ).toHaveAttribute("href", "/legal/ubuntu-pro-description"); expect(screen.getAllByText("Buy now")[0]).toBeInTheDocument(); }); @@ -43,13 +43,13 @@ test("Should show Ubuntu Pro Desktop when 'Desktops' is selected ", async () => initialVersion={LTSVersions.jammy} > - + , ); expect(screen.getByTestId("summary-product-name")?.textContent).toContain( - "Desktop" + "Desktop", ); expect( - screen.getAllByText("See full service description")[0] + screen.getAllByText("See full service description")[0], ).toHaveAttribute("href", "/legal/ubuntu-pro-description"); expect(screen.getAllByText("Buy now")[0]).toBeInTheDocument(); }); @@ -57,14 +57,14 @@ test("Should show register button and person subscription terms of service when render( - + , ); expect(screen.getByTestId("summary-product-name")).toHaveTextContent( - /^Ubuntu Pro$/ + /^Ubuntu Pro$/, ); expect(screen.getByTestId("personal-subscription")).toHaveAttribute( "href", - "/legal/ubuntu-pro/personal" + "/legal/ubuntu-pro/personal", ); expect(screen.getAllByText("Register")[0]).toBeInTheDocument(); }); @@ -76,9 +76,9 @@ test("Type selector displays the public cloud section if a public cloud is selec initialType={ProductTypes.publicCloud} > - + , ); expect(screen.getByTestId("summary-section")).toHaveClass( - "p-shop-cart--hidden" + "p-shop-cart--hidden", ); }); diff --git a/static/js/src/advantage/subscribe/react/components/ProductSummary/ProductSummary.tsx b/static/js/src/advantage/subscribe/react/components/ProductSummary/ProductSummary.tsx index cdcc5ac2a80..cc57b30bd48 100644 --- a/static/js/src/advantage/subscribe/react/components/ProductSummary/ProductSummary.tsx +++ b/static/js/src/advantage/subscribe/react/components/ProductSummary/ProductSummary.tsx @@ -13,19 +13,13 @@ import PaymentButton from "../PaymentButton"; import { PRO_SELECTOR_KEYS } from "advantage/distributor/utils/utils"; const ProductSummary = () => { - const { - productUser, - quantity, - period, - setPeriod, - product, - productType, - } = useContext(FormContext); + const { productUser, quantity, period, setPeriod, product, productType } = + useContext(FormContext); const handlePeriodChange = (event: React.ChangeEvent) => { setPeriod(event.target.value as Periods); localStorage.setItem( PRO_SELECTOR_KEYS.PERIOD, - JSON.stringify(event.target.value as Periods) + JSON.stringify(event.target.value as Periods), ); }; const isHidden = @@ -109,7 +103,7 @@ const ProductSummary = () => { ? `Free` : currencyFormatter.format( ((product?.price.value ?? 0) / 100) * - (Number(quantity) ?? 0) + (Number(quantity) ?? 0), )}

{" "}

@@ -182,7 +176,7 @@ const ProductSummary = () => {

{currencyFormatter.format( - ((product?.price.value ?? 0) / 100) * (Number(quantity) ?? 0) + ((product?.price.value ?? 0) / 100) * (Number(quantity) ?? 0), )}

{productUser === ProductUsers.myself ? ( diff --git a/static/js/src/advantage/subscribe/react/utils/FormContext.tsx b/static/js/src/advantage/subscribe/react/utils/FormContext.tsx index 8369a913ebb..2eb0d83f0df 100644 --- a/static/js/src/advantage/subscribe/react/utils/FormContext.tsx +++ b/static/js/src/advantage/subscribe/react/utils/FormContext.tsx @@ -96,32 +96,32 @@ export const FormProvider = ({ const localIoTDevice = localStorage.getItem(PRO_SELECTOR_KEYS.IOT_DEVICE); const [productUser, setProductUser] = useState( - localProductUser ? JSON.parse(localProductUser) : initialUser + localProductUser ? JSON.parse(localProductUser) : initialUser, ); const [productType, setProductType] = useState( - localProductType ? JSON.parse(localProductType) : initialType + localProductType ? JSON.parse(localProductType) : initialType, ); const [version, setVersion] = useState( - localVersion ? JSON.parse(localVersion) : initialVersion + localVersion ? JSON.parse(localVersion) : initialVersion, ); const [feature, setFeature] = useState( - localFeature ? JSON.parse(localFeature) : initialFeature + localFeature ? JSON.parse(localFeature) : initialFeature, ); const [sla, setSLA] = useState( - localSLA ? JSON.parse(localSLA) : initialSLA + localSLA ? JSON.parse(localSLA) : initialSLA, ); const [support, setSupport] = useState( - localSupport ? JSON.parse(localSupport) : initialSupport + localSupport ? JSON.parse(localSupport) : initialSupport, ); const [quantity, setQuantity] = useState( - localQuantity ? JSON.parse(localQuantity) : initialQuantity + localQuantity ? JSON.parse(localQuantity) : initialQuantity, ); const [period, setPeriod] = useState( - localPeriod ? JSON.parse(localPeriod) : initialPeriod + localPeriod ? JSON.parse(localPeriod) : initialPeriod, ); const [product, setProduct] = useState(null); const [iotDevice, setIoTDevice] = useState( - localIoTDevice ? JSON.parse(localIoTDevice) : initialIoTDevice + localIoTDevice ? JSON.parse(localIoTDevice) : initialIoTDevice, ); useEffect(() => { diff --git a/static/js/src/advantage/subscribe/react/utils/utils.ts b/static/js/src/advantage/subscribe/react/utils/utils.ts index cc16568c7f4..155cb306578 100644 --- a/static/js/src/advantage/subscribe/react/utils/utils.ts +++ b/static/js/src/advantage/subscribe/react/utils/utils.ts @@ -69,7 +69,7 @@ function getUserInfoFromVariables(data: Data, variables: FormValues): UserInfo { function getInitialFormValues( userInfo: UserInfo, - accountId?: string + accountId?: string, ): FormValues { return { email: userInfo?.customerInfo?.email ?? "", @@ -161,7 +161,8 @@ export enum Periods { } // export type ProductIDs = `${Features}-${Support}-${ProductTypes}-${Periods}`; -export type ProductIDs = `${ProductTypes}-${Features}-${Support}-${SLA}-${Periods}`; +export type ProductIDs = + `${ProductTypes}-${Features}-${Support}-${SLA}-${Periods}`; export type ValidProducts = | "uai-essential-physical-yearly" @@ -225,7 +226,7 @@ export const getProduct = ( feature: Features, support: Support, sla: SLA, - period: Periods + period: Periods, ): ValidProducts => { const productKey = `${productType}-${feature}-${support}-${sla}-${period}`; switch (productKey) { @@ -286,7 +287,7 @@ export const getProduct = ( export const getLabel = ( toFind: string, - array: { label: string; value: string }[] + array: { label: string; value: string }[], ) => { return array.find((element) => element.value === toFind)?.label; }; diff --git a/static/js/src/advantage/tests/error-handler.test.js b/static/js/src/advantage/tests/error-handler.test.js index 7a29a1bb139..c903086a6fd 100644 --- a/static/js/src/advantage/tests/error-handler.test.js +++ b/static/js/src/advantage/tests/error-handler.test.js @@ -8,7 +8,7 @@ describe("parseForErrorObject", () => { describe("given an insufficient funds error", () => { it("should return an appropriate error object", () => { expect( - parseForErrorObject(contractsErrorObjects.insufficientFunds) + parseForErrorObject(contractsErrorObjects.insufficientFunds), ).toEqual({ message: "That card doesn’t have enough funds to make this payment. Please contact your card issuer, or try a different card.", @@ -35,7 +35,7 @@ describe("parseForErrorObject", () => { }); expect( - parseForErrorObject(contractsErrorObjects.expiredPaymentMethod) + parseForErrorObject(contractsErrorObjects.expiredPaymentMethod), ).toEqual({ message: "That card has expired. Try a different card.", type: "notification", @@ -92,7 +92,7 @@ describe("parseForErrorObject", () => { describe("given an incomplete card number error", () => { it("should return an appropriate error object", () => { expect( - parseForErrorObject(stripeErrorObjects.cardNumberIncomplete) + parseForErrorObject(stripeErrorObjects.cardNumberIncomplete), ).toEqual({ message: "That card number is incorrect. Check the number and try again.", @@ -108,7 +108,7 @@ describe("parseForErrorObject", () => { message: "That card number is incorrect. Check the number and try again.", type: "card", - } + }, ); }); }); diff --git a/static/js/src/advantage/tests/factories/api.ts b/static/js/src/advantage/tests/factories/api.ts index d0e0a3e91b6..38030c63be0 100644 --- a/static/js/src/advantage/tests/factories/api.ts +++ b/static/js/src/advantage/tests/factories/api.ts @@ -16,26 +16,24 @@ import { SupportLevel, } from "advantage/api/enum"; -export const userSubscriptionEntitlementFactory = Factory.define( - () => ({ +export const userSubscriptionEntitlementFactory = + Factory.define(() => ({ enabled_by_default: true, is_in_beta: false, is_available: true, is_editable: true, support_level: null, type: EntitlementType.EsmApps, - }) -); + })); -export const userSubscriptionEntitlementUpdateFactory = Factory.define( - () => ({ +export const userSubscriptionEntitlementUpdateFactory = + Factory.define(() => ({ is_enabled: true, type: EntitlementType.EsmApps, - }) -); + })); -export const userSubscriptionStatusesFactory = Factory.define( - () => ({ +export const userSubscriptionStatusesFactory = + Factory.define(() => ({ has_pending_purchases: false, is_cancellable: false, is_cancelled: false, @@ -53,8 +51,7 @@ export const userSubscriptionStatusesFactory = Factory.define( ({ sequence }) => ({ @@ -79,7 +76,7 @@ export const userSubscriptionFactory = Factory.define( subscription_id: `VO7AyCYZzvjY3JaBWF0xmUu8vv5S684ZTeXMnJ${sequence}`, type: UserSubscriptionType.Yearly, max_tracking_reached: false, - }) + }), ); export const freeSubscriptionFactory = Factory.define( @@ -114,13 +111,13 @@ export const freeSubscriptionFactory = Factory.define( subscription_id: null, type: UserSubscriptionType.Free, max_tracking_reached: false, - }) + }), ); export const contractTokenFactory = Factory.define( ({ sequence }) => ({ contract_token: `zPyaGE9Z4DF9sf54ZfJt59AMwynub${sequence}`, - }) + }), ); export const lastPurchaseIdsFactory = Factory.define( @@ -133,5 +130,5 @@ export const lastPurchaseIdsFactory = Factory.define( monthly: `Jt59AzPyaGE9Z4DF9sf54ZfMwynub${sequence}`, yearly: `54ZfJ9AMwyzPyaGE9Z4DF9sf5tnub${sequence}`, }, - }) + }), ); diff --git a/static/js/src/advantage/tests/utils.tsx b/static/js/src/advantage/tests/utils.tsx index cc2cc34610f..4cd96c04566 100644 --- a/static/js/src/advantage/tests/utils.tsx +++ b/static/js/src/advantage/tests/utils.tsx @@ -4,19 +4,18 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { User } from "../users/types"; -const getTextContentMatcher = (textMatch: string | RegExp): MatcherFunction => ( - _content, - node -) => { - const hasText = (node: Element | null) => - node?.textContent === textMatch || !!node?.textContent?.match(textMatch); - const nodeHasText = hasText(node); - const childrenDontHaveText = node?.children - ? Array.from(node.children).every((child) => !hasText(child)) - : true; - - return nodeHasText && childrenDontHaveText; -}; +const getTextContentMatcher = + (textMatch: string | RegExp): MatcherFunction => + (_content, node) => { + const hasText = (node: Element | null) => + node?.textContent === textMatch || !!node?.textContent?.match(textMatch); + const nodeHasText = hasText(node); + const childrenDontHaveText = node?.children + ? Array.from(node.children).every((child) => !hasText(child)) + : true; + + return nodeHasText && childrenDontHaveText; + }; // use only if a regular "getByText" query is not working, this is much slower // https://github.com/testing-library/dom-testing-library/issues/410#issuecomment-797486513 diff --git a/static/js/src/advantage/users/AccountUsers.test.tsx b/static/js/src/advantage/users/AccountUsers.test.tsx index ce2f8b570d3..04a8ca2bbb9 100644 --- a/static/js/src/advantage/users/AccountUsers.test.tsx +++ b/static/js/src/advantage/users/AccountUsers.test.tsx @@ -17,14 +17,14 @@ describe("AccountUsers", () => { it("displays organisation name", () => { renderWithQueryClient( - + , ); screen.getByText("Canonical"); }); it("displays an error message on failure to add a new user", async () => { (api.requestAddUser as jest.Mock).mockImplementationOnce( - jest.fn(() => Promise.reject(new Error("Failed"))) + jest.fn(() => Promise.reject(new Error("Failed"))), ); renderWithQueryClient(); @@ -34,23 +34,21 @@ describe("AccountUsers", () => { role: "technical", }; await userEvent.click( - screen.getByRole("button", { name: /Add new user/i }) + screen.getByRole("button", { name: /Add new user/i }), ); const modal = await screen.findByLabelText( - /Add a new user to this organisation/i - ); - const nameInput: HTMLInputElement = await within(modal).findByTestId( - "user-name-input" - ); - const emailInput: HTMLInputElement = await within(modal).findByTestId( - "user-email-input" + /Add a new user to this organisation/i, ); + const nameInput: HTMLInputElement = + await within(modal).findByTestId("user-name-input"); + const emailInput: HTMLInputElement = + await within(modal).findByTestId("user-email-input"); const roleSelect = await within(modal).findByTestId("user-role-select"); await userEvent.type(nameInput, newUser.name); await userEvent.type(emailInput, newUser.email); await userEvent.selectOptions(roleSelect, newUser.role); await userEvent.click( - within(modal).getByRole("button", { name: /Add new user/i }) + within(modal).getByRole("button", { name: /Add new user/i }), ); await waitFor(() => { @@ -69,23 +67,21 @@ describe("AccountUsers", () => { role: "admin", }; await userEvent.click( - screen.getByRole("button", { name: /Add new user/i }) + screen.getByRole("button", { name: /Add new user/i }), ); const modal = await screen.findByLabelText( - /Add a new user to this organisation/i - ); - const nameInput: HTMLInputElement = await within(modal).findByTestId( - "user-name-input" - ); - const emailInput: HTMLInputElement = await within(modal).findByTestId( - "user-email-input" + /Add a new user to this organisation/i, ); + const nameInput: HTMLInputElement = + await within(modal).findByTestId("user-name-input"); + const emailInput: HTMLInputElement = + await within(modal).findByTestId("user-email-input"); const roleSelect = await within(modal).findByTestId("user-role-select"); await userEvent.type(nameInput, newUser.name); await userEvent.type(emailInput, newUser.email); await userEvent.selectOptions(roleSelect, newUser.role); await userEvent.click( - within(modal).getByRole("button", { name: /Add new user/i }) + within(modal).getByRole("button", { name: /Add new user/i }), ); await waitFor(() => @@ -94,11 +90,11 @@ describe("AccountUsers", () => { email: newUser.email, name: newUser.name, role: newUser.role, - }) + }), ); expect(screen.getByRole("alert")).toHaveTextContent( - /User added successfully/ + /User added successfully/, ); }); @@ -119,7 +115,7 @@ describe("AccountUsers", () => { ]; renderWithQueryClient( - + , ); const EDIT_KAREN = "Edit user karen@ecorp.com"; @@ -148,7 +144,7 @@ describe("AccountUsers", () => { it("displays an error message on failure to update user", async () => { (api.requestUpdateUser as jest.Mock).mockImplementationOnce( - jest.fn(() => Promise.reject(new Error("Failed"))) + jest.fn(() => Promise.reject(new Error("Failed"))), ); renderWithQueryClient( @@ -162,7 +158,7 @@ describe("AccountUsers", () => { role: "billing", }, ]} - /> + />, ); userEvent.click(screen.getByLabelText(`Edit user peter@ecorp.com`)); @@ -170,21 +166,21 @@ describe("AccountUsers", () => { expect( screen.getByRole("combobox", { name: "role", - }) - ).toBeInTheDocument() + }), + ).toBeInTheDocument(), ); userEvent.selectOptions( screen.getByRole("combobox", { name: "role", }), - "technical" + "technical", ); userEvent.click(screen.getByRole("button", { name: "Save" })); await waitFor(() => - expect(screen.getByRole("alert")).toHaveTextContent(/error/) + expect(screen.getByRole("alert")).toHaveTextContent(/error/), ); }); @@ -204,15 +200,15 @@ describe("AccountUsers", () => { expect( screen.getByRole("combobox", { name: "role", - }) - ).toBeInTheDocument() + }), + ).toBeInTheDocument(), ); userEvent.selectOptions( screen.getByRole("combobox", { name: "role", }), - "technical" + "technical", ); userEvent.click(screen.getByRole("button", { name: "Save" })); @@ -222,10 +218,10 @@ describe("AccountUsers", () => { accountId: mockData.accountId, email: user.email, role: "technical", - }) + }), ); await waitFor(() => - expect(screen.getByRole("alert")).toHaveTextContent(/User updated/) + expect(screen.getByRole("alert")).toHaveTextContent(/User updated/), ); }); @@ -242,13 +238,13 @@ describe("AccountUsers", () => { {...mockData} organisationName="ECorp" users={[...mockData.users, testUser]} - /> + />, ); expect(screen.queryByText("No results")).not.toBeInTheDocument(); userEvent.type( screen.getByRole("searchbox", { name: "Search for users" }), - "Lorem ipsum" + "Lorem ipsum", ); await waitFor(() => { expect(screen.getByText("No results")).toBeInTheDocument(); @@ -270,7 +266,7 @@ describe("AccountUsers", () => { expect(screen.getAllByLabelText("email")).toHaveLength(mockUsers.length); userEvent.type( screen.getByRole("searchbox", { name: "Search for users" }), - "user@ecorp.com" + "user@ecorp.com", ); await waitFor(() => { diff --git a/static/js/src/advantage/users/AccountUsers.tsx b/static/js/src/advantage/users/AccountUsers.tsx index 7218a657bed..3b2efc9d248 100644 --- a/static/js/src/advantage/users/AccountUsers.tsx +++ b/static/js/src/advantage/users/AccountUsers.tsx @@ -40,12 +40,12 @@ const AccountUsersContainer = ({ typeof userInEditModeByEmail === "string" ? filteredUsers.find((user) => user.email === userInEditModeByEmail) : undefined, - [userInEditModeByEmail, filteredUsers] + [userInEditModeByEmail, filteredUsers], ); useEffect(() => { const filteredUsers = users.filter((user) => - user.email.includes(searchQuery) + user.email.includes(searchQuery), ); setFilteredUsers(filteredUsers); @@ -139,10 +139,8 @@ const AccountUsers = ({ }); }); - const [ - isDeleteConfirmationModalOpen, - setIsDeleteConfirmationModalOpen, - ] = useState(false); + const [isDeleteConfirmationModalOpen, setIsDeleteConfirmationModalOpen] = + useState(false); const handleOnAfterDeleteSuccess = () => { dismissEditMode(); diff --git a/static/js/src/advantage/users/api.ts b/static/js/src/advantage/users/api.ts index 3196e2203f7..045b2f0a9bd 100644 --- a/static/js/src/advantage/users/api.ts +++ b/static/js/src/advantage/users/api.ts @@ -1,7 +1,7 @@ import { AccountUsersApiResponse, AccountUsersData, UserRole } from "./types"; const parseAccountsResponse = ( - response: AccountUsersApiResponse + response: AccountUsersApiResponse, ): AccountUsersData => ({ accountId: response.account_id, organisationName: response.name, @@ -17,7 +17,7 @@ const requestAccountUsers = (): Promise => fetchJSON(`/pro/account-users${window.location.search}`, { cache: "no-store", }).then((response) => - parseAccountsResponse(response as AccountUsersApiResponse) + parseAccountsResponse(response as AccountUsersApiResponse), ); const accountUserRequestInit: RequestInit = { @@ -41,7 +41,7 @@ const handleResponse = async (response: Response): Promise => { if (!response.ok) { const error: FetchError = new Error( - responseJson.error || responseJson.errors || response.statusText + responseJson.error || responseJson.errors || response.statusText, ); error.response = response; throw error; diff --git a/static/js/src/advantage/users/app.tsx b/static/js/src/advantage/users/app.tsx index df3308b2aff..75ed13d2768 100644 --- a/static/js/src/advantage/users/app.tsx +++ b/static/js/src/advantage/users/app.tsx @@ -118,5 +118,5 @@ function App() { } createRoot(document.getElementById("advantage-account-users-app")!).render( - + , ); diff --git a/static/js/src/advantage/users/components/AddNewUser/AddNewUser.test.tsx b/static/js/src/advantage/users/components/AddNewUser/AddNewUser.test.tsx index f99f73e36e7..8964978736c 100644 --- a/static/js/src/advantage/users/components/AddNewUser/AddNewUser.test.tsx +++ b/static/js/src/advantage/users/components/AddNewUser/AddNewUser.test.tsx @@ -8,14 +8,14 @@ it("opens 'Add new user' modal on click", async () => { userEvent.click(screen.getByText("Add new user")); const modal = await screen.findByLabelText( - "Add a new user to this organisation" + "Add a new user to this organisation", ); expect(within(modal).getByLabelText("Name")).toBeVisible(); expect(within(modal).getByLabelText("Users’ email address")).toBeVisible(); expect(within(modal).getByLabelText("Role")).toBeVisible(); expect( - within(modal).getByRole("button", { name: "Add new user" }) + within(modal).getByRole("button", { name: "Add new user" }), ).toBeVisible(); expect(within(modal).getByRole("button", { name: "Cancel" })).toBeVisible(); }); diff --git a/static/js/src/advantage/users/components/AddNewUser/AddNewUserForm.test.tsx b/static/js/src/advantage/users/components/AddNewUser/AddNewUserForm.test.tsx index 69aa1c0de9b..296d5a998aa 100644 --- a/static/js/src/advantage/users/components/AddNewUser/AddNewUserForm.test.tsx +++ b/static/js/src/advantage/users/components/AddNewUser/AddNewUserForm.test.tsx @@ -9,18 +9,18 @@ it("displays validation for e-mail", async () => { userEvent.click(screen.getByRole("button", { name: "Add new user" })); await waitFor(() => - expect(screen.getByText(/This field is required./)).toBeVisible() + expect(screen.getByText(/This field is required./)).toBeVisible(), ); userEvent.type( screen.getByLabelText("Users’ email address"), - "invalid-email" + "invalid-email", ); await waitFor(() => - userEvent.click(screen.getByRole("button", { name: "Add new user" })) + userEvent.click(screen.getByRole("button", { name: "Add new user" })), ); await waitFor(() => - expect(screen.getByText(/Must be a valid email./)).toBeVisible() + expect(screen.getByText(/Must be a valid email./)).toBeVisible(), ); }); @@ -32,12 +32,12 @@ it("calls handleClose modal handler after successful submission", async () => { + />, ); await userEvent.type(screen.getByLabelText("Name"), "Angela"); await userEvent.type( screen.getByLabelText("Users’ email address"), - "angela@ecorp.com" + "angela@ecorp.com", ); await userEvent.selectOptions(screen.getByLabelText("Role"), "technical"); await userEvent.click(screen.getByRole("button", { name: "Add new user" })); @@ -47,7 +47,7 @@ it("calls handleClose modal handler after successful submission", async () => { name: "Angela", email: "angela@ecorp.com", role: "technical", - }) + }), ); expect(mockHandleSubmit).toHaveBeenCalledTimes(1); waitFor(() => expect(mockHandleClose).toHaveBeenCalled()); @@ -61,12 +61,12 @@ it("submits the form on pressing the Enter key", async () => { + />, ); await userEvent.type(screen.getByLabelText("Name"), "Angela"); await userEvent.type( screen.getByLabelText("Users’ email address"), - "angela@ecorp.com" + "angela@ecorp.com", ); (await screen.findByLabelText("Name")).focus(); // Focus on the name field await userEvent.keyboard("{enter}"); // Press the Enter key @@ -82,13 +82,13 @@ it("displays an alert message on submission failure", async () => { + />, ); await userEvent.type(screen.getByLabelText("Name"), "Angela"); await userEvent.type( screen.getByLabelText("Users’ email address"), - "angela@ecorp.com" + "angela@ecorp.com", ); await userEvent.selectOptions(screen.getByLabelText("Role"), "technical"); await userEvent.click(screen.getByRole("button", { name: "Add new user" })); @@ -96,7 +96,7 @@ it("displays an alert message on submission failure", async () => { await waitFor(() => screen.getByRole("alert")); expect(screen.getByRole("alert")).toHaveTextContent( - /An unknown error has occurred./ + /An unknown error has occurred./, ); expect(mockHandleClose).not.toHaveBeenCalled(); }); diff --git a/static/js/src/advantage/users/components/AddNewUser/AddNewUserForm.tsx b/static/js/src/advantage/users/components/AddNewUser/AddNewUserForm.tsx index cbc6fb8380e..ba369dd3074 100644 --- a/static/js/src/advantage/users/components/AddNewUser/AddNewUserForm.tsx +++ b/static/js/src/advantage/users/components/AddNewUser/AddNewUserForm.tsx @@ -25,10 +25,8 @@ export const AddNewUserForm = ({ handleClose: () => void; handleSubmit: HandleNewUserSubmit; }) => { - const [ - formSubmissionError, - setFormSubmissionError, - ] = useState(null); + const [formSubmissionError, setFormSubmissionError] = + useState(null); const initialValues: NewUserValues = { name: "", email: "", diff --git a/static/js/src/advantage/users/components/DeleteConfirmationModal/DeleteConfirmationModal.test.tsx b/static/js/src/advantage/users/components/DeleteConfirmationModal/DeleteConfirmationModal.test.tsx index 4ef2ffa8438..39e80cdafd8 100644 --- a/static/js/src/advantage/users/components/DeleteConfirmationModal/DeleteConfirmationModal.test.tsx +++ b/static/js/src/advantage/users/components/DeleteConfirmationModal/DeleteConfirmationModal.test.tsx @@ -19,13 +19,13 @@ it("displays confirmation message correctly", () => { user={mockUser} onAfterDeleteSuccess={onAfterDeleteSuccess} handleClose={mockHandleClose} - /> + />, ); expect( getByTextContent( - "Are you sure you want to remove philip.p@ecorp.com from your organisation?" - ) + "Are you sure you want to remove philip.p@ecorp.com from your organisation?", + ), ).toBeVisible(); }); @@ -39,7 +39,7 @@ it("makes a correct call to requestDeleteUser", async () => { user={mockUser} onAfterDeleteSuccess={onAfterDeleteSuccess} handleClose={mockHandleClose} - /> + />, ); userEvent.click(screen.getByText("Yes, remove user")); @@ -48,6 +48,6 @@ it("makes a correct call to requestDeleteUser", async () => { expect(requestDeleteUser).toHaveBeenCalledWith({ accountId: mockAccountId, email: mockUser.email, - }) + }), ); }); diff --git a/static/js/src/advantage/users/components/DeleteConfirmationModal/DeleteConfirmationModal.tsx b/static/js/src/advantage/users/components/DeleteConfirmationModal/DeleteConfirmationModal.tsx index a8fa4d03f54..248dd437c3d 100644 --- a/static/js/src/advantage/users/components/DeleteConfirmationModal/DeleteConfirmationModal.tsx +++ b/static/js/src/advantage/users/components/DeleteConfirmationModal/DeleteConfirmationModal.tsx @@ -38,10 +38,8 @@ const DeleteConfirmationModal: React.FC = ({ onAfterDeleteSuccess(); }); - const [ - errorMessage, - setErrorMessage, - ] = useState(null); + const [errorMessage, setErrorMessage] = + useState(null); const [isLoading, setIsLoading] = useState(false); const onSubmit = async () => { diff --git a/static/js/src/advantage/users/components/TableView/TableView.test.tsx b/static/js/src/advantage/users/components/TableView/TableView.test.tsx index 81fd0d789db..c1cf8a923d7 100644 --- a/static/js/src/advantage/users/components/TableView/TableView.test.tsx +++ b/static/js/src/advantage/users/components/TableView/TableView.test.tsx @@ -21,7 +21,7 @@ it("displays user details in a correct format", () => { handleEditSubmit={jest.fn()} dismissEditMode={jest.fn()} handleDeleteConfirmationModalOpen={jest.fn()} - /> + />, ); expect(screen.getByText("user@ecorp.com")).toBeInTheDocument(); @@ -40,7 +40,7 @@ it("doesn't display pagination when there is less than 11 users", () => { handleEditSubmit={jest.fn()} dismissEditMode={jest.fn()} handleDeleteConfirmationModalOpen={jest.fn()} - /> + />, ); expect(screen.queryByRole("navigation")).not.toBeInTheDocument(); @@ -58,7 +58,7 @@ it("paginates the results when there is 11 users or more", async () => { handleEditSubmit={jest.fn()} dismissEditMode={jest.fn()} handleDeleteConfirmationModalOpen={jest.fn()} - /> + />, ); const emailsPage1 = screen.getAllByLabelText("email"); @@ -68,7 +68,7 @@ it("paginates the results when there is 11 users or more", async () => { }); userEvent.click( - within(screen.getByRole("navigation")).getByRole("button", { name: "2" }) + within(screen.getByRole("navigation")).getByRole("button", { name: "2" }), ); await waitFor(() => { @@ -92,11 +92,11 @@ it("goes to the last available page if there are no longer any results for curre handleEditSubmit={jest.fn()} dismissEditMode={jest.fn()} handleDeleteConfirmationModalOpen={jest.fn()} - /> + />, ); userEvent.click( - within(screen.getByRole("navigation")).getByRole("button", { name: "2" }) + within(screen.getByRole("navigation")).getByRole("button", { name: "2" }), ); rerender( @@ -107,7 +107,7 @@ it("goes to the last available page if there are no longer any results for curre handleEditSubmit={jest.fn()} dismissEditMode={jest.fn()} handleDeleteConfirmationModalOpen={jest.fn()} - /> + />, ); expect(screen.queryByRole("navigation")).not.toBeInTheDocument(); diff --git a/static/js/src/advantage/users/components/TableView/UserRow.test.tsx b/static/js/src/advantage/users/components/TableView/UserRow.test.tsx index 43116eac224..ebac17360b7 100644 --- a/static/js/src/advantage/users/components/TableView/UserRow.test.tsx +++ b/static/js/src/advantage/users/components/TableView/UserRow.test.tsx @@ -23,7 +23,7 @@ it("regular variant renders correctly", () => { handleDeleteConfirmationModalOpen={jest.fn()} /> - + , ); expect(screen.getByText("user@ecorp.com")).toBeInTheDocument(); @@ -32,13 +32,13 @@ it("regular variant renders correctly", () => { // check that 'editing' buttons are not visible expect( - screen.getByTestId("hidden-select-to-prevent-layout-shifting") + screen.getByTestId("hidden-select-to-prevent-layout-shifting"), ).not.toBeVisible(); expect( - screen.queryByRole("button", { name: "Cancel" }) + screen.queryByRole("button", { name: "Cancel" }), ).not.toBeInTheDocument(); expect( - screen.queryByRole("button", { name: "Save" }) + screen.queryByRole("button", { name: "Save" }), ).not.toBeInTheDocument(); }); @@ -55,7 +55,7 @@ it("editing variant renders correctly", () => { handleDeleteConfirmationModalOpen={jest.fn()} /> - + , ); expect(screen.getByText("user@ecorp.com")).toBeInTheDocument(); @@ -67,9 +67,9 @@ it("editing variant renders correctly", () => { // check that elements from 'regular' variant are not visible expect(screen.getByText("Admin", { ignore: "option" })).not.toBeVisible(); expect( - screen.queryByTestId("hidden-select-to-prevent-layout-shifting") + screen.queryByTestId("hidden-select-to-prevent-layout-shifting"), ).not.toBeInTheDocument(); expect( - screen.queryByRole("button", { name: /Edit/ }) + screen.queryByRole("button", { name: /Edit/ }), ).not.toBeInTheDocument(); }); diff --git a/static/js/src/advantage/users/components/UserSearch/UserSearch.tsx b/static/js/src/advantage/users/components/UserSearch/UserSearch.tsx index 8d58164464f..e80260f6cc0 100644 --- a/static/js/src/advantage/users/components/UserSearch/UserSearch.tsx +++ b/static/js/src/advantage/users/components/UserSearch/UserSearch.tsx @@ -8,7 +8,7 @@ const UserSearch = ({ const [searchInputValue, setSearchInputValue] = React.useState(""); const handleSearchInputChange: React.ChangeEventHandler = ( - event + event, ) => { setSearchInputValue(event?.currentTarget?.value); }; diff --git a/static/js/src/advantage/users/utils.ts b/static/js/src/advantage/users/utils.ts index 7154a4ab5d0..0bc4510c9e2 100644 --- a/static/js/src/advantage/users/utils.ts +++ b/static/js/src/advantage/users/utils.ts @@ -27,7 +27,7 @@ export const _getErrorMessage = (error: Error): SubmissionErrorMessage => { return ( errorMessages[ Object.keys(errorMessages).find((message) => - error.message.includes?.(message) + error.message.includes?.(message), ) as SubmissionErrorMessageKey ] || errorMessages.unknown ); diff --git a/static/js/src/appliance.js b/static/js/src/appliance.js index e39ecfdf3b6..3322d13343f 100644 --- a/static/js/src/appliance.js +++ b/static/js/src/appliance.js @@ -2,7 +2,7 @@ import lightbox from "./lightbox"; function initLightbox() { const lightboxElements = Array.from( - document.getElementsByClassName("js-lightbox-item") + document.getElementsByClassName("js-lightbox-item"), ); let images = lightboxElements.map(function (element) { @@ -24,7 +24,7 @@ function initLightbox() { lightboxClosure(e, currentElement, images); }; })(lightboxElement, images), - false + false, ); }); } diff --git a/static/js/src/blender-store.js b/static/js/src/blender-store.js index 1a7125eaf0a..4b4e32a6c9d 100644 --- a/static/js/src/blender-store.js +++ b/static/js/src/blender-store.js @@ -29,7 +29,7 @@ import { debounce } from "./utils/debounce.js"; function setupEventHandlers() { const packageOptions = Array.prototype.slice.call( - document.querySelectorAll(".js-radio") + document.querySelectorAll(".js-radio"), ); packageOptions.forEach((option) => { @@ -69,7 +69,7 @@ import { debounce } from "./utils/debounce.js"; } else { mainCart.classList.add("p-shop-cart--hidden"); } - }, 50) + }, 50), ); } @@ -98,7 +98,7 @@ import { debounce } from "./utils/debounce.js"; userCount.innerText = STATE.users; const packageName = cartContainer.querySelector( - "[data-prop=selected-package]" + "[data-prop=selected-package]", ); packageName.innerText = STATE.package === "advanced" diff --git a/static/js/src/certified-search-results.js b/static/js/src/certified-search-results.js index 1e6d86eeb1d..f2c04b10058 100644 --- a/static/js/src/certified-search-results.js +++ b/static/js/src/certified-search-results.js @@ -84,14 +84,14 @@ async function renderFilters( vendorLimit, releaseLimit, renderVendorFilters = true, - renderReleaseFilters = true + renderReleaseFilters = true, ) { const filters = await fetchFilters( categories, vendors, releases, vendorLimit, - releaseLimit + releaseLimit, ); if (categories && categories.length > 0) { if (renderVendorFilters && filters.vendor_filters) { @@ -104,7 +104,7 @@ async function renderFilters( filters.vendor_filters.data, filters.vendor_filters.total, showAllVendors, - showLessVendors + showLessVendors, ); } @@ -118,7 +118,7 @@ async function renderFilters( filters.release_filters.data, filters.release_filters.total, showAllReleases, - showLessReleases + showLessReleases, ); } } else { @@ -132,7 +132,7 @@ async function renderFilters( filters.vendor_filters.data, filters.vendor_filters.total, showAllVendors, - showLessVendors + showLessVendors, ); } @@ -146,7 +146,7 @@ async function renderFilters( filters.release_filters.data, filters.release_filters.total, showAllReleases, - showLessReleases + showLessReleases, ); } } @@ -196,7 +196,7 @@ async function fetchFilters( selectedVendors = [], selectedReleases = [], vendorLimit = filterLimit, - releaseLimit = filterLimit + releaseLimit = filterLimit, ) { let url = new URL(`${window.location.origin}/certified/filters.json`); if (categoriesList.length > 0) { @@ -338,7 +338,7 @@ function toggleExpandFilters(e, element) { filterLimit, filterLimit, true, - false + false, ); } } else if (name === "release") { @@ -354,7 +354,7 @@ function toggleExpandFilters(e, element) { filterLimit, filterLimit, false, - true + true, ); } } diff --git a/static/js/src/charts/chiselled-chart.js b/static/js/src/charts/chiselled-chart.js index 2a1b16ce4e0..59f6333d8be 100644 --- a/static/js/src/charts/chiselled-chart.js +++ b/static/js/src/charts/chiselled-chart.js @@ -86,7 +86,7 @@ window.addEventListener( buildChiselledChart("#chiselled-dotnet-chart", [219, 116, 5], true); buildChiselledChart("#chiselled-java-chart", [215, 113]); buildChiselledChart("#chiselled-other-chart", [20, 12]); - }, 250) + }, 250), ); buildChiselledChart("#chiselled-dotnet-chart", [219, 116, 5], true); diff --git a/static/js/src/contextual-menu.js b/static/js/src/contextual-menu.js index c69f77e8a25..686f3b6e8fc 100644 --- a/static/js/src/contextual-menu.js +++ b/static/js/src/contextual-menu.js @@ -17,7 +17,7 @@ function attachClickEvent(toggle) { function attachHoverEvent(toggle) { const dropdown = document.getElementById( - toggle.getAttribute("aria-controls") + toggle.getAttribute("aria-controls"), ); let timer = null; diff --git a/static/js/src/contributions.js b/static/js/src/contributions.js index 6f808b56d34..415ac4429e1 100644 --- a/static/js/src/contributions.js +++ b/static/js/src/contributions.js @@ -167,12 +167,12 @@ function detectBrowser() { /Edge/i.test(navigator.userAgent) ? (browser = "Edge") : /Chrome/i.test(navigator.userAgent) - ? (browser = "Chrome") - : /Safari/i.test(navigator.userAgent) - ? (browser = "Safari") - : /NET/i.test(navigator.userAgent) - ? (browser = "IE") - : (browser = "Other"); + ? (browser = "Chrome") + : /Safari/i.test(navigator.userAgent) + ? (browser = "Safari") + : /NET/i.test(navigator.userAgent) + ? (browser = "IE") + : (browser = "Other"); return browser; } diff --git a/static/js/src/cve/cve-search.js b/static/js/src/cve/cve-search.js index 43a59b2cc09..588e9ae224e 100644 --- a/static/js/src/cve/cve-search.js +++ b/static/js/src/cve/cve-search.js @@ -78,7 +78,7 @@ function attachEvents() { const addRowButtons = document.querySelectorAll(".js-add-row"); const removeRowButtons = document.querySelectorAll(".js-remove-row"); const ubuntuVersionInputs = document.querySelectorAll( - ".js-ubuntu-version-input" + ".js-ubuntu-version-input", ); const statusInputs = document.querySelectorAll(".js-status-input"); @@ -126,7 +126,7 @@ function addRow(e) { handleButtons(); const ubuntuVersionInputs = document.querySelectorAll( - ".js-ubuntu-version-input" + ".js-ubuntu-version-input", ); const statusInputs = document.querySelectorAll(".js-status-input"); diff --git a/static/js/src/cve/cve.js b/static/js/src/cve/cve.js index d10fc4920e0..ea86c1b9cfc 100644 --- a/static/js/src/cve/cve.js +++ b/static/js/src/cve/cve.js @@ -16,13 +16,13 @@ function handleCveIdInput(value) { const componentInput = document.querySelector("#component"); const statusInputs = document.querySelectorAll(".js-status-input"); const ubuntuVersionInputs = document.querySelectorAll( - ".js-ubuntu-version-input" + ".js-ubuntu-version-input", ); const addRowButtons = document.querySelectorAll(".js-add-row"); const removeRowButtons = document.querySelectorAll(".js-remove-row"); const searchButtonText = document.querySelector(".cve-search-text"); const searchButtonValidCveText = document.querySelector( - ".cve-search-valid-cve-text" + ".cve-search-valid-cve-text", ); if (isValidCveId(value)) { @@ -35,11 +35,11 @@ function handleCveIdInput(value) { statusInputs.forEach((statusInput) => disableField(statusInput)); ubuntuVersionInputs.forEach((ubuntuVersionInput) => - disableField(ubuntuVersionInput) + disableField(ubuntuVersionInput), ); addRowButtons.forEach((addRowButton) => disableField(addRowButton)); removeRowButtons.forEach((removeRowButton) => - disableField(removeRowButton) + disableField(removeRowButton), ); } else { enableField(packageInput); @@ -48,7 +48,7 @@ function handleCveIdInput(value) { statusInputs.forEach((statusInput) => enableField(statusInput)); ubuntuVersionInputs.forEach((ubuntuVersionInput) => - enableField(ubuntuVersionInput) + enableField(ubuntuVersionInput), ); removeRowButtons.forEach((removeRowButton, index) => { if (index > 0) { @@ -80,12 +80,10 @@ disableSelectedVersions(); const priorities = { critical: "Critical: A world-burning problem that is exploitable for most Ubuntu users. Examples include remote root privilege escalations or remote data theft.", - high: - "High: Exploitable for many users in the default configuration of the affected software. Examples include serious remote denial of service of the system, local root privilege escalations or local data theft.", + high: "High: Exploitable for many users in the default configuration of the affected software. Examples include serious remote denial of service of the system, local root privilege escalations or local data theft.", medium: "Medium: Exploitable for many users of the affected software. Examples include network daemon denial of service, cross-site scripting and gaining user privileges.", - low: - "Low: Does very little damage or is otherwise hard to exploit, due to small user base or other factors such as requiring specific environment, uncommon configuration, or user assistance. These tend to be included in security updates only when higher priority issues require an update or if many low-priority issues have built up.", + low: "Low: Does very little damage or is otherwise hard to exploit, due to small user base or other factors such as requiring specific environment, uncommon configuration, or user assistance. These tend to be included in security updates only when higher priority issues require an update or if many low-priority issues have built up.", negligible: "Negligible: May be a problem, but does not impose a security risk due to various factors. Examples include when the vulnerability is only theoretical in nature, requires a very special situation, has almost no install base or does no real damage. These typically will not receive security updates unless there is an easy fix and some other issue causes an update.", unknown: @@ -134,7 +132,7 @@ tooltipIconList.forEach(function (tooltipIcon) { tooltipIcon.parentElement.append(tooltip); } }, - false + false, ); tooltipIcon.addEventListener( "mouseout", @@ -145,6 +143,6 @@ tooltipIconList.forEach(function (tooltipIcon) { tooltipIcon.parentElement.removeChild(tooltip); } }, - false + false, ); }); diff --git a/static/js/src/developer-chart.js b/static/js/src/developer-chart.js index 5f341a1b53c..ddb9eb9e751 100644 --- a/static/js/src/developer-chart.js +++ b/static/js/src/developer-chart.js @@ -230,7 +230,7 @@ function addYAxisHorizontalLines(svg, yAxis, width, margin) { posY - 2, posY - 2, "#D9D9D9", - 1 + 1, ); }); @@ -241,7 +241,7 @@ function addYAxisHorizontalLines(svg, yAxis, width, margin) { tickPositions[0] - 2, tickPositions[0] - 2, "#D9D9D9", - 2 + 2, ); } @@ -357,14 +357,14 @@ function buildCharts() { createDeveloperChart( "#hackerearth-chart", hackerEarthData.labels, - hackerEarthData.tasks + hackerEarthData.tasks, ); } if (document.querySelector("#opensource-chart")) { createDeveloperChart( "#opensource-chart", openSourceData.labels, - openSourceData.tasks + openSourceData.tasks, ); } } @@ -400,5 +400,5 @@ window.addEventListener( clearCharts(); buildCharts(); } - }, 250) + }, 250), ); diff --git a/static/js/src/dynamic-forms.js b/static/js/src/dynamic-forms.js index 8f7aee808dc..796b6a7d6d5 100644 --- a/static/js/src/dynamic-forms.js +++ b/static/js/src/dynamic-forms.js @@ -28,7 +28,7 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; // recaptcha submitCallback window.CaptchaCallback = function () { let recaptchas = [].slice.call( - document.querySelectorAll("div[class^=g-recaptcha]") + document.querySelectorAll("div[class^=g-recaptcha]"), ); recaptchas.forEach(function (field) { if (!field.hasAttribute("data-widget-id")) { @@ -98,7 +98,7 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; history.pushState( "", document.title, - location.pathname + location.search + hash + location.pathname + location.search + hash, ); } else { location.hash = hash; @@ -180,9 +180,8 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; const contactModal = document.getElementById(contactModalSelector); var closeModal = document.querySelector(".p-modal__close"); var closeModalButton = document.querySelector(".js-close"); - var modalPaginationButtons = contactModal.querySelectorAll( - ".pagination a" - ); + var modalPaginationButtons = + contactModal.querySelectorAll(".pagination a"); var paginationContent = contactModal.querySelectorAll(".js-pagination"); var submitButton = contactModal.querySelector('button[type="submit"]'); var comment = contactModal.querySelector("#Comments_from_lead__c"); @@ -270,7 +269,7 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; otherContainers.forEach(function (otherContainer) { var checkbox = otherContainer.querySelector( - ".js-other-container__checkbox" + ".js-other-container__checkbox", ); var input = otherContainer.querySelector(".js-other-container__input"); checkbox.addEventListener("change", function (e) { @@ -293,7 +292,7 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; var fieldName = field.getAttribute("name"); var inputs = form.querySelectorAll(`[name="${fieldName}"]`); var validationMessage = document.querySelector( - `.js-validation-${fieldName}` + `.js-validation-${fieldName}`, ); var inputValid = false; @@ -352,7 +351,7 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; comment.value = createMessage(false); var currentContent = contactModal.querySelector( - ".js-pagination--" + contactIndex + ".js-pagination--" + contactIndex, ); paginationContent.forEach(function (content) { content.classList.add("u-hide"); @@ -411,7 +410,7 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; } var label = formField.querySelector( - "span#" + input.getAttribute("aria-labelledby") + "span#" + input.getAttribute("aria-labelledby"), ); if (label) { @@ -449,11 +448,11 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; const radioButtons = radioGroup.querySelectorAll("[type='radio']"); const descriptionToggle = radioGroup.querySelector( - ".js-toggle-description-field" + ".js-toggle-description-field", ); const descriptionField = document.getElementById( - descriptionToggle.dataset.descriptionFieldId + descriptionToggle.dataset.descriptionFieldId, ); radioButtons.forEach((radioButton) => { @@ -475,9 +474,8 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; // Sets a limit of checkboxes and disables remaining fields function setCheckboxLimit() { - const choiceLimitContainers = document.querySelectorAll( - ".js-choice-limit" - ); + const choiceLimitContainers = + document.querySelectorAll(".js-choice-limit"); const checkedChoices = (choices) => { return Array.from(choices).filter((choice) => { @@ -493,9 +491,8 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; const handleChoiceLimitContainer = (choiceLimitContainer) => { const choiceLimit = choiceLimitContainer.dataset.choiceLimit; - const choices = choiceLimitContainer.querySelectorAll( - "[type='checkbox']" - ); + const choices = + choiceLimitContainer.querySelectorAll("[type='checkbox']"); choices.forEach((choice) => { choice.addEventListener("change", () => { @@ -524,9 +521,8 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; // Set preferredLanguage hidden input function setpreferredLanguage() { const preferredLanguage = getPrimaryParentLanguage(); - const preferredLanguageInput = contactModal.querySelector( - "#preferredLanguage" - ); + const preferredLanguageInput = + contactModal.querySelector("#preferredLanguage"); if (preferredLanguageInput) { preferredLanguageInput.value = preferredLanguage || ""; @@ -559,7 +555,7 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; // Add event listeners to toggle checkbox visibility const ubuntuVersionCheckboxes = document.querySelector( - "fieldset.js-toggle-checkbox-visibility" + "fieldset.js-toggle-checkbox-visibility", ); ubuntuVersionCheckboxes?.addEventListener("change", function (event) { toggleCheckboxVisibility(ubuntuVersionCheckboxes, event.target); @@ -567,7 +563,7 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; // Add event listeners to required fieldset const requiredFieldset = document.querySelectorAll( - "fieldset.js-required-checkbox" + "fieldset.js-required-checkbox", ); requiredFieldset?.forEach((fieldset) => { fieldset.addEventListener("change", function (event) { @@ -603,7 +599,7 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; var modalTrigger = document.activeElement || document.body; var modal = document.querySelector(".p-modal"); var firstFocusableEle = modal.querySelector( - "button, [href], input, select, textarea, [tabindex]:not([tabindex='-1'])" + "button, [href], input, select, textarea, [tabindex]:not([tabindex='-1'])", ); // set initial focus inside the modal @@ -662,10 +658,10 @@ import { prepareInputFields } from "./prepare-form-inputs.js"; function toggleCheckboxVisibility(fieldset, checklistItem) { const checkboxes = fieldset.querySelectorAll(".js-checkbox-visibility"); const otherCheckboxes = fieldset.querySelectorAll( - ".js-checkbox-visibility__other" + ".js-checkbox-visibility__other", ); const isVisible = checklistItem.classList.contains( - "js-checkbox-visibility" + "js-checkbox-visibility", ); if (checklistItem.checked) { diff --git a/static/js/src/image-download.js b/static/js/src/image-download.js index 917b57a22aa..1ffc00c7bd7 100644 --- a/static/js/src/image-download.js +++ b/static/js/src/image-download.js @@ -15,8 +15,8 @@ function initImageDownload(imagePath, GAlabel) { fetch( `/mirrors.json?local=${!!userData?.country_code}&country_code=${ userData?.country_code || "" - }` - ) + }`, + ), ) .then((response) => response.json()) .then((mirrors) => startDownload(mirrors, imagePath)) diff --git a/static/js/src/kernel-form.js b/static/js/src/kernel-form.js index d9096cc30b8..849a758004b 100644 --- a/static/js/src/kernel-form.js +++ b/static/js/src/kernel-form.js @@ -24,7 +24,7 @@ // recaptcha submitCallback window.CaptchaCallback = function () { let recaptchas = [].slice.call( - document.querySelectorAll("div[class^=g-recaptcha]") + document.querySelectorAll("div[class^=g-recaptcha]"), ); recaptchas.forEach(function (field) { if (!field.hasAttribute("data-widget-id")) { @@ -93,7 +93,7 @@ history.pushState( "", document.title, - location.pathname + location.search + hash + location.pathname + location.search + hash, ); } else { location.hash = hash; @@ -176,9 +176,8 @@ var contactModal = document.getElementById("contact-modal"); var closeModal = document.querySelector(".p-modal__close"); var closeModalButton = document.querySelector(".js-close"); - var modalPaginationButtons = contactModal.querySelectorAll( - ".pagination a" - ); + var modalPaginationButtons = + contactModal.querySelectorAll(".pagination a"); var paginationContent = contactModal.querySelectorAll(".js-pagination"); var submitButton = contactModal.querySelector(".mktoButton"); var comment = contactModal.querySelector("#Comments_from_lead__c"); @@ -261,7 +260,7 @@ otherContainers.forEach(function (otherContainer) { var checkbox = otherContainer.querySelector( - ".js-other-container__checkbox" + ".js-other-container__checkbox", ); var input = otherContainer.querySelector(".js-other-container__input"); checkbox.addEventListener("change", function (e) { @@ -293,7 +292,7 @@ fields.forEach((field) => { var inputs = form.querySelectorAll(`[name="${field}"]`); var validationMessage = document.querySelector( - `.js-validation-${field}` + `.js-validation-${field}`, ); var inputValid = false; @@ -341,7 +340,7 @@ comment.value = createMessage(); var currentContent = contactModal.querySelector( - ".js-pagination--" + contactIndex + ".js-pagination--" + contactIndex, ); paginationContent.forEach(function (content) { content.classList.add("u-hide"); @@ -381,7 +380,7 @@ } var label = formField.querySelector( - "span#" + input.getAttribute("aria-labelledby") + "span#" + input.getAttribute("aria-labelledby"), ); if (label) { label = subSectionText + label.innerText; @@ -425,11 +424,11 @@ const radioButtons = radioGroup.querySelectorAll("[type='radio']"); const descriptionToggle = radioGroup.querySelector( - ".js-toggle-description-field" + ".js-toggle-description-field", ); const descriptionField = document.getElementById( - descriptionToggle.dataset.descriptionFieldId + descriptionToggle.dataset.descriptionFieldId, ); radioButtons.forEach((radioButton) => { @@ -451,9 +450,8 @@ // Sets a limit of checkboxes and disables remaining fields function setCheckboxLimit() { - const choiceLimitContainers = document.querySelectorAll( - ".js-choice-limit" - ); + const choiceLimitContainers = + document.querySelectorAll(".js-choice-limit"); const checkedChoices = (choices) => { return Array.from(choices).filter((choice) => { @@ -469,9 +467,8 @@ const handleChoiceLimitContainer = (choiceLimitContainer) => { const choiceLimit = choiceLimitContainer.dataset.choiceLimit; - const choices = choiceLimitContainer.querySelectorAll( - "[type='checkbox']" - ); + const choices = + choiceLimitContainer.querySelectorAll("[type='checkbox']"); choices.forEach((choice) => { choice.addEventListener("change", () => { diff --git a/static/js/src/lightbox.js b/static/js/src/lightbox.js index f2790a19374..573263e6b42 100644 --- a/static/js/src/lightbox.js +++ b/static/js/src/lightbox.js @@ -68,7 +68,7 @@ const loadLightboxImage = (lightboxEl, url, images) => { contentEl.style.opacity = "1"; const originalEl = document.body.querySelector( - `[data-original="${url}"]` + `[data-original="${url}"]`, ); if (media.canPlayType("video/webm")) { diff --git a/static/js/src/modal.js b/static/js/src/modal.js index 83d876d840b..b3f160cf5be 100644 --- a/static/js/src/modal.js +++ b/static/js/src/modal.js @@ -124,6 +124,6 @@ function initModals(modalId, ariaControls, open) { toggleModal( document.querySelector(modalId), document.querySelector(ariaControls), - open + open, ); } diff --git a/static/js/src/navigation.js b/static/js/src/navigation.js index e7cc7384b53..ea1e8ea05fb 100644 --- a/static/js/src/navigation.js +++ b/static/js/src/navigation.js @@ -2,21 +2,21 @@ const ANIMATION_DELAY = 200; const MOBILE_VIEW_BREAKPOINT = 1228; const dropdownWindow = document.querySelector(".dropdown-window"); const dropdownWindowOverlay = document.querySelector( - ".dropdown-window-overlay" + ".dropdown-window-overlay", ); const searchOverlay = document.querySelector(".p-navigation__search-overlay"); const secondaryNav = document.querySelector(".p-navigation.is-secondary"); const navigation = document.querySelector(".p-navigation--sliding"); const topLevelNavDropdowns = Array.from( document.querySelectorAll( - ".p-navigation__item--dropdown-toggle:not(.global-nav__dropdown-toggle):not(.js-back)" - ) + ".p-navigation__item--dropdown-toggle:not(.global-nav__dropdown-toggle):not(.js-back)", + ), ); const nav = navigation.querySelector(".js-show-nav"); const menuButtons = document.querySelectorAll(".js-menu-button"); let dropdowns = []; const mainList = document.querySelector( - "nav.p-navigation__nav > .p-navigation__items" + "nav.p-navigation__nav > .p-navigation__items", ); // Get the navigations initial height for use in 'updateWindowHeight' const navEle = document.querySelector(".p-navigation__nav"); @@ -43,7 +43,7 @@ function addClassesToElements(elements, classes) { function removeClassesFromElements(elements, classes) { elements.forEach((element, index) => - element.classList.remove(classes[index]) + element.classList.remove(classes[index]), ); } @@ -102,7 +102,7 @@ secondaryNav document.addEventListener("global-nav-opened", () => { addClassesToElements( [dropdownWindow, dropdownWindowOverlay], - ["slide-animation", "fade-animation"] + ["slide-animation", "fade-animation"], ); topLevelNavDropdowns.forEach((dropdown) => updateNavMenu(dropdown, false)); }); @@ -112,7 +112,7 @@ document.addEventListener("global-nav-opened", () => { function toggleSecondaryMobileNavDropdown(e) { const mobileNavDropdown = secondaryNav.querySelector(".p-navigation__nav"); const mobileNavDropdownToggle = secondaryNav.querySelector( - ".p-navigation__toggle--open" + ".p-navigation__toggle--open", ); let isDropdownOpen; if (e && e.type == "click") { @@ -136,13 +136,13 @@ function updateUrlHash(id, open) { window.history.pushState( null, document.title, - window.location.pathname + window.location.search + `#${id}` + window.location.pathname + window.location.search + `#${id}`, ); } else { window.history.pushState( null, document.title, - window.location.pathname + window.location.search + window.location.pathname + window.location.search, ); } } @@ -219,7 +219,7 @@ function toggleSection(e) { function updateNavMenu(dropdown, show) { let dropdownContent = document.getElementById(dropdown.id + "-content"); let dropdownContentMobile = document.getElementById( - dropdown.id + "-content-mobile" + dropdown.id + "-content-mobile", ); let isAccountDropdown = dropdown.classList.contains("js-account"); @@ -255,7 +255,7 @@ function updateNavMenu(dropdown, show) { function updateDropdownStates(dropdown, show, delay) { let isNested = dropdown.parentNode.classList.contains( - "p-navigation__dropdown" + "p-navigation__dropdown", ); if (!isNested && show) { topLevelNavDropdowns @@ -283,7 +283,7 @@ function updateDesktopDropdownStates(dropdown, show, delay) { function updateMobileDropdownState(dropdown, show, isNested) { let dropdownContentMobile = document.getElementById( - dropdown.id + "-content-mobile" + dropdown.id + "-content-mobile", ); if (dropdownContentMobile) { dropdownContentMobile.setAttribute("aria-hidden", !show); @@ -312,7 +312,7 @@ function showDesktopDropdown(show) { function toggleGlobalNavVisibility(dropdown, show, delay) { const globalNavContent = dropdown.querySelector(".global-nav-dropdown"); const globalNavInnerContent = dropdown.querySelector( - ".global-nav-dropdown__content" + ".global-nav-dropdown__content", ); if (show) { globalNavInnerContent.classList.remove("u-hide"); @@ -383,18 +383,18 @@ function fetchDropdown(url, id) { makeRequest(url, function () { const desktopContent = convertHTMLToNode( this.responseText, - ".desktop-dropdown-content" + ".desktop-dropdown-content", ); desktopContainer.appendChild(desktopContent); const mobileContent = convertHTMLToNode( this.responseText, - ".dropdown-content-mobile" + ".dropdown-content-mobile", ); mobileContainer.appendChild(mobileContent); const targetDropdowns = mobileContent.querySelectorAll( - "ul.p-navigation__dropdown" + "ul.p-navigation__dropdown", ); dropdowns = [...dropdowns, ...targetDropdowns]; @@ -433,7 +433,7 @@ function setTabIndex(target) { // When none are active, set them all to tabindex 0 if (window.innerWidth > MOBILE_VIEW_BREAKPOINT) { const currActiveNavItem = navigation.querySelector( - ".p-navigation__item--dropdown-toggle.is-active" + ".p-navigation__item--dropdown-toggle.is-active", ); if (currActiveNavItem) { currActiveNavItem.children[0].setAttribute("tabindex", "0"); @@ -470,22 +470,23 @@ function handleEscapeKey(e) { // If '.dropdown-window__sidenav-content' exists we are in the // dropdown window so we want to move up to the side-tabs const targetTabId = e.target.closest( - ".dropdown-window__sidenav-content.is-active" + ".dropdown-window__sidenav-content.is-active", )?.id; if (targetTabId) { const targetTab = document.querySelector( - `.p-side-navigation__link[aria-controls="${targetTabId}"]` + `.p-side-navigation__link[aria-controls="${targetTabId}"]`, ); targetTab?.focus(); return; } // Else check if we are in the side-tabs so want to move up to the nav bar items - const targetDropdownToggleId = e.target.closest(".dropdown-content-desktop") - ?.id; + const targetDropdownToggleId = e.target.closest( + ".dropdown-content-desktop", + )?.id; if (targetDropdownToggleId) { const targetNavItem = document.querySelector( - `.p-navigation__link[aria-controls="${targetDropdownToggleId}"]` + `.p-navigation__link[aria-controls="${targetDropdownToggleId}"]`, ); targetNavItem?.focus(); closeAll(); @@ -499,12 +500,12 @@ function handleTabKey(e) { if (mobileDropdownPanel && isLastMobileLinkFocused(e, mobileDropdownPanel)) { e.preventDefault(); const canonicalLogo = navigation.querySelector( - ".p-navigation__tagged-logo > a" + ".p-navigation__tagged-logo > a", ); canonicalLogo.focus(); } else if (dropdownPanel && isLastLinkFocused(e, dropdownPanel)) { const currDropdownToggle = mainList.querySelector( - ":scope > .p-navigation__item--dropdown-toggle.is-active" + ":scope > .p-navigation__item--dropdown-toggle.is-active", ); const nextDropdownToggleLink = currDropdownToggle.nextElementSibling.children[0]; @@ -523,7 +524,7 @@ function handleShiftTabKey(e) { ) { const parentContainer = dropdownPanel.closest(".dropdown-window__content"); const targetTab = parentContainer.querySelector( - ".p-side-navigation__item .p-side-navigation__link.is-active" + ".p-side-navigation__item .p-side-navigation__link.is-active", ); if (targetTab) { e.preventDefault(); @@ -543,10 +544,10 @@ function isLastLinkFocused(e, dropdownPanel) { function isLastMobileLinkFocused(e, dropdownPanel) { // Find what level of the navigation we are in, 'menuItems' being the top level const listOfMenuItems = dropdownPanel?.querySelectorAll( - "li[role='menuitem']" + "li[role='menuitem']", ); const listOfLinks = Array.from( - dropdownPanel?.querySelectorAll(":scope > li") + dropdownPanel?.querySelectorAll(":scope > li"), ); if (listOfMenuItems?.length > 0) { const lastLink = Array.from(listOfMenuItems).pop(); @@ -639,11 +640,11 @@ function closeDesktopDropdown() { function closeMobileDropdown() { const dropdownElements = getAllElements( - ".p-navigation__item--dropdown-toggle" + ".p-navigation__item--dropdown-toggle", ); removeClassesFromElements( [navigation, mainList], - ["has-menu-open", "is-active"] + ["has-menu-open", "is-active"], ); if (secondaryNav) { toggleSecondaryMobileNavDropdown(); @@ -682,14 +683,14 @@ function openMenu(e) { // Setup and functions for navigation search function initNavigationSearch() { searchButtons.forEach((searchButton) => - searchButton.addEventListener("click", toggleSearch) + searchButton.addEventListener("click", toggleSearch), ); searchOverlay.addEventListener("click", toggleSearch); if (menuButtons) { menuButtons.forEach((menuButton) => - menuButton.addEventListener("click", toggleMenu) + menuButton.addEventListener("click", toggleMenu), ); } } @@ -745,7 +746,7 @@ function setUpGlobalNav() { globalNavMainTab.classList.replace("u-hide", "dropdown-content-mobile"); globalNavMainTab.classList.replace( "p-navigation__items", - "p-navigation__dropdown" + "p-navigation__dropdown", ); globalNavMainTab.setAttribute("id", "all-canonical-content-mobile"); @@ -755,7 +756,7 @@ function setUpGlobalNav() { .forEach((dropdown) => { dropdown.setAttribute("aria-hidden", "true"); const dropdownToggle = dropdown.closest( - ".p-navigation__item--dropdown-toggle" + ".p-navigation__item--dropdown-toggle", ); if (dropdownToggle.getAttribute("role") != "menuitem") { const newDropdownId = `all-canonical-${dropdown.id}`; diff --git a/static/js/src/openstack/react/components/CostCalculations.jsx b/static/js/src/openstack/react/components/CostCalculations.jsx index 5be3228392d..b175e1de65f 100644 --- a/static/js/src/openstack/react/components/CostCalculations.jsx +++ b/static/js/src/openstack/react/components/CostCalculations.jsx @@ -31,7 +31,7 @@ const CostCalculations = ({ const requiredNumberCloudNodesBasedOnRam = Math.ceil( requiredAmountOfRam / (TCO_CONSTANTS.storage.amountOfRamPerNode - - TCO_CONSTANTS.storage.reservedAmountOfRamPerNode) + TCO_CONSTANTS.storage.reservedAmountOfRamPerNode), ); return requiredNumberCloudNodesBasedOnRam; }; @@ -52,7 +52,7 @@ const CostCalculations = ({ TCO_CONSTANTS.counts.reservedNumberOfThreadsPerNode); const requiredNumberCloudNodesBasedOnCpu = Math.ceil( - requiredNoOfCpus / TCO_CONSTANTS.counts.numberOfCpusPerNode + requiredNoOfCpus / TCO_CONSTANTS.counts.numberOfCpusPerNode, ); return requiredNumberCloudNodesBasedOnCpu; }; @@ -68,7 +68,7 @@ const CostCalculations = ({ const requiredNumberCloudNodesBasedOnES = Math.ceil( requiredAmountOfES / (TCO_CONSTANTS.storage.amountOfEphemeralStoragePerNode * 1024 - - TCO_CONSTANTS.storage.reservedAmountOfEphemeralStoragePerNode) + TCO_CONSTANTS.storage.reservedAmountOfEphemeralStoragePerNode), ); return requiredNumberCloudNodesBasedOnES; }; @@ -88,7 +88,7 @@ const CostCalculations = ({ ? (requiredNumberCloudNodesBasedOnPS = Math.ceil( requiredAmountOfPS / 1024 / - TCO_CONSTANTS.storage.amountOfPersistentStoragePerNode + TCO_CONSTANTS.storage.amountOfPersistentStoragePerNode, )) : (requiredNumberCloudNodesBasedOnPS = TCO_CONSTANTS.storage.amountOfPersistentStoragePerNode); @@ -102,12 +102,12 @@ const CostCalculations = ({ calculateRequiredNumberCloudNodesBasedOnCpu(), calculateRequiredNumberCloudNodesBasedOnRam(), calculateRequiredNumberCloudNodesBasedOnES(), - calculateRequiredNumberCloudNodesBasedOnPS() + calculateRequiredNumberCloudNodesBasedOnPS(), ); const numberOfCloudNodes = Math.max( requiredNumberOfCloudNodes, - TCO_CONSTANTS.counts.minimumNumberOfCloudNodes + TCO_CONSTANTS.counts.minimumNumberOfCloudNodes, ); return numberOfCloudNodes; }; @@ -119,22 +119,22 @@ const CostCalculations = ({ const numberOfRacks = Math.ceil( Math.max( numberOfCloudNodes / TCO_CONSTANTS.counts.maximumNumberOfCloudNodesInRack, - TCO_CONSTANTS.counts.minimumNumberOfRacks - ) + TCO_CONSTANTS.counts.minimumNumberOfRacks, + ), ); const numberOfRackControllerNodes = numberOfRacks * TCO_CONSTANTS.counts.numberOfRackControllerNodesInRack; const numberOfSpineSwitches = Math.ceil( - numberOfRacks / TCO_CONSTANTS.counts.numberOfRacksPerSpineSwitch + numberOfRacks / TCO_CONSTANTS.counts.numberOfRacksPerSpineSwitch, ); const numberOfLeafSwitches = numberOfRacks * TCO_CONSTANTS.counts.numberOfLeafSwitchesInRack; const numberOfManagementSwitches = Math.ceil( - numberOfRacks / TCO_CONSTANTS.counts.numberOfRacksPerManagementSwitch + numberOfRacks / TCO_CONSTANTS.counts.numberOfRacksPerManagementSwitch, ); const numberOfNodes = @@ -151,32 +151,32 @@ const CostCalculations = ({ const cloudNodesCost = calculatePriceOfNodes( numberOfCloudNodes, - TCO_CONSTANTS.price.pricePerCloudNode + TCO_CONSTANTS.price.pricePerCloudNode, ); const infraNodesCost = calculatePriceOfNodes( TCO_CONSTANTS.counts.numberOfInfraNodes, - TCO_CONSTANTS.price.pricePerInfraNode + TCO_CONSTANTS.price.pricePerInfraNode, ); const rackControllerNodesCost = calculatePriceOfNodes( numberOfRackControllerNodes, - TCO_CONSTANTS.price.pricePerRackController + TCO_CONSTANTS.price.pricePerRackController, ); const spineSwitchesCost = calculatePriceOfNodes( numberOfSpineSwitches, - TCO_CONSTANTS.price.pricePerSpineSwitch + TCO_CONSTANTS.price.pricePerSpineSwitch, ); const leafSwitchesCost = calculatePriceOfNodes( numberOfLeafSwitches, - TCO_CONSTANTS.price.pricePerLeafSwitch + TCO_CONSTANTS.price.pricePerLeafSwitch, ); const managementSwitchesCost = calculatePriceOfNodes( numberOfManagementSwitches, - TCO_CONSTANTS.price.pricePerManagementSwitch + TCO_CONSTANTS.price.pricePerManagementSwitch, ); const totalHardwareCost = @@ -251,37 +251,37 @@ const CostCalculations = ({ const numberOfAwsEc2VmsBasedOnCpu = calculateNumberOfAwsVMs( numberOfVcpusInCloud, - TCO_CONSTANTS.storage.awsEc2InstanceVcpus + TCO_CONSTANTS.storage.awsEc2InstanceVcpus, ); const numberOfAwsEc2VmsBasedOnRam = calculateNumberOfAwsVMs( amountOfRamInCloud, - TCO_CONSTANTS.storage.awsEc2InstanceRam + TCO_CONSTANTS.storage.awsEc2InstanceRam, ); const numberOfAwsEc2VmsBasedOnES = calculateNumberOfAwsVMs( amountOfESInCloud, - TCO_CONSTANTS.storage.awsEc2InstanceEphemeralStorage + TCO_CONSTANTS.storage.awsEc2InstanceEphemeralStorage, ); const numberOfAwsEc2VmsBasedOnPS = calculateNumberOfAwsVMs( amountOfPSInCloud, - TCO_CONSTANTS.storage.awsEc2InstancePersistentStorage + TCO_CONSTANTS.storage.awsEc2InstancePersistentStorage, ); const numberOfAwsEc2Vms = Math.max( numberOfAwsEc2VmsBasedOnCpu, numberOfAwsEc2VmsBasedOnRam, numberOfAwsEc2VmsBasedOnES, - numberOfAwsEc2VmsBasedOnPS + numberOfAwsEc2VmsBasedOnPS, ); const awsTco = Math.floor( Math.floor( numberOfAwsEc2Vms * 8760 * - TCO_CONSTANTS.price.awsEc2T3aLargeHourlyInstanceCost - ) * TCO_CONSTANTS.operations.hardWareRenewalPeriod + TCO_CONSTANTS.price.awsEc2T3aLargeHourlyInstanceCost, + ) * TCO_CONSTANTS.operations.hardWareRenewalPeriod, ); return awsTco; diff --git a/static/js/src/openstack/react/components/CostCalculations.test.jsx b/static/js/src/openstack/react/components/CostCalculations.test.jsx index 51a0b0ff638..bdfa86ef91f 100644 --- a/static/js/src/openstack/react/components/CostCalculations.test.jsx +++ b/static/js/src/openstack/react/components/CostCalculations.test.jsx @@ -17,7 +17,7 @@ describe("Hourly cost and total savings calculations", function () { ram={{ value: 8, error: "" }} persistentStorage={{ value: 80, error: "" }} supportLevel="fully-managed" - /> + />, ); }); @@ -28,7 +28,7 @@ describe("Hourly cost and total savings calculations", function () { it("checks totals are correct with default values", () => { expect(calculationsWrapper.find("#hourly-cost").text()).toEqual("$0.0407"); expect(calculationsWrapper.find("#total-savings").text()).toEqual( - "$907,656" + "$907,656", ); }); @@ -41,11 +41,11 @@ describe("Hourly cost and total savings calculations", function () { ram={{ value: 8, error: "" }} persistentStorage={{ value: 80, error: "" }} supportLevel="fully-managed" - /> + />, ); expect(calculationsWrapper.find("#hourly-cost").text()).toEqual("$0.0243"); expect(calculationsWrapper.find("#total-savings").text()).toEqual( - "$2,675,637" + "$2,675,637", ); }); @@ -58,11 +58,11 @@ describe("Hourly cost and total savings calculations", function () { ram={{ value: 8, error: "" }} persistentStorage={{ value: 80, error: "" }} supportLevel="fully-managed" - /> + />, ); expect(calculationsWrapper.find("#hourly-cost").text()).toEqual("$0.0792"); expect(calculationsWrapper.find("#total-savings").text()).toEqual( - "$5,824,474" + "$5,824,474", ); }); @@ -75,11 +75,11 @@ describe("Hourly cost and total savings calculations", function () { ram={{ value: 8, error: "" }} persistentStorage={{ value: 80, error: "" }} supportLevel="fully-managed" - /> + />, ); expect(calculationsWrapper.find("#hourly-cost").text()).toEqual("$0.0407"); expect(calculationsWrapper.find("#total-savings").text()).toEqual( - "$2,883,912" + "$2,883,912", ); }); @@ -92,11 +92,11 @@ describe("Hourly cost and total savings calculations", function () { ram={{ value: 32, error: "" }} persistentStorage={{ value: 80, error: "" }} supportLevel="fully-managed" - /> + />, ); expect(calculationsWrapper.find("#hourly-cost").text()).toEqual("$0.0818"); expect(calculationsWrapper.find("#total-savings").text()).toEqual( - "$5,755,049" + "$5,755,049", ); }); @@ -109,11 +109,11 @@ describe("Hourly cost and total savings calculations", function () { ram={{ value: 8, error: "" }} persistentStorage={{ value: 210, error: "" }} supportLevel="fully-managed" - /> + />, ); expect(calculationsWrapper.find("#hourly-cost").text()).toEqual("$0.0486"); expect(calculationsWrapper.find("#total-savings").text()).toEqual( - "$699,381" + "$699,381", ); }); @@ -126,7 +126,7 @@ describe("Hourly cost and total savings calculations", function () { ram={{ value: 8, error: "" }} persistentStorage={{ value: 80, error: "" }} supportLevel="supported" - /> + />, ); expect(calculationsWrapper.find("#hourly-cost").text()).toEqual("$0.2064"); expect(calculationsWrapper.find("#total-savings").text()).toEqual("$0"); @@ -141,7 +141,7 @@ describe("Hourly cost and total savings calculations", function () { ram={{ value: 8, error: "" }} persistentStorage={{ value: 210, error: "" }} supportLevel="fully-managed" - /> + />, ); expect(calculationsWrapper.find("#hourly-cost").text()).toEqual("-"); expect(calculationsWrapper.find("#total-savings").text()).toEqual("-"); diff --git a/static/js/src/prepare-form-inputs.js b/static/js/src/prepare-form-inputs.js index 9e27e1746b9..db1c9a5277d 100644 --- a/static/js/src/prepare-form-inputs.js +++ b/static/js/src/prepare-form-inputs.js @@ -67,7 +67,7 @@ function addInputValidation(phoneInput) { const errorElement = createErrorMessage(); phoneInput.addEventListener("blur", () => - validateInput(phoneInput, errorElement) + validateInput(phoneInput, errorElement), ); phoneInput.addEventListener("change", () => resetErrorState(errorElement)); phoneInput.addEventListener("keyup", () => resetErrorState(errorElement)); diff --git a/static/js/src/release-chart-manager.js b/static/js/src/release-chart-manager.js index 7f4188bed6a..03339037763 100644 --- a/static/js/src/release-chart-manager.js +++ b/static/js/src/release-chart-manager.js @@ -47,7 +47,7 @@ function buildCharts() { "#server-desktop-eol-key", desktopServerReleaseNames, desktopServerStatus, - serverAndDesktopReleases + serverAndDesktopReleases, ); } if (document.querySelector("#server-desktop-eol-old")) { @@ -56,7 +56,7 @@ function buildCharts() { "#server-desktop-eol-old", desktopServerReleaseNames, desktopServerStatus, - serverAndDesktopReleases + serverAndDesktopReleases, ); } if (document.querySelector("#eol-1604")) { @@ -68,7 +68,7 @@ function buildCharts() { serverAndDesktopReleases, false, [], - "16.04" + "16.04", ); } if (document.querySelector("#kernel-eol")) { @@ -77,7 +77,7 @@ function buildCharts() { kernelReleaseNames, kernelStatus, kernelReleases, - kernelVersionNames + kernelVersionNames, ); } if (document.querySelector("#kernel2204")) { @@ -85,7 +85,7 @@ function buildCharts() { "#kernel2204", kernelReleaseNames2204, kernelStatus, - kernelReleases2204 + kernelReleases2204, ); } if (document.querySelector("#kernel2004")) { @@ -93,7 +93,7 @@ function buildCharts() { "#kernel2004", kernelReleaseNames2004, kernelStatus, - kernelReleases2004 + kernelReleases2004, ); } if (document.querySelector("#kernel1804")) { @@ -101,7 +101,7 @@ function buildCharts() { "#kernel1804", kernelReleaseNames1804, kernelStatus, - kernelReleases1804 + kernelReleases1804, ); } if (document.querySelector("#kernel1604")) { @@ -109,7 +109,7 @@ function buildCharts() { "#kernel1604", kernelReleaseNames1604, kernelStatus, - kernelReleases1604 + kernelReleases1604, ); } if (document.querySelector("#kernel1404")) { @@ -117,7 +117,7 @@ function buildCharts() { "#kernel1404", kernelReleaseNames1404, kernelStatus, - kernelReleases1404 + kernelReleases1404, ); } if (document.querySelector("#kernellts")) { @@ -125,7 +125,7 @@ function buildCharts() { "#kernellts", kernelReleaseNamesLTS, kernelStatusLTS, - kernelReleasesLTS + kernelReleasesLTS, ); } if (document.querySelector("#kernelall")) { @@ -133,7 +133,7 @@ function buildCharts() { "#kernelall", kernelReleaseNamesALL, kernelStatusALL, - kernelReleasesALL + kernelReleasesALL, ); } if (document.querySelector("#openstack-eol")) { @@ -141,7 +141,7 @@ function buildCharts() { "#openstack-eol", openStackReleaseNames, openStackStatus, - openStackReleases + openStackReleases, ); } if (document.querySelector("#kubernetes-eol")) { @@ -151,7 +151,7 @@ function buildCharts() { kubernetesStatus, kubernetesReleases, false, - true + true, ); } if (document.querySelector("#kernel-schedule")) { @@ -159,7 +159,7 @@ function buildCharts() { "#kernel-schedule", kernelReleaseScheduleNames, kernelReleaseScheduleStatus, - kernelReleaseSchedule + kernelReleaseSchedule, ); } if (document.querySelector("#microstack-eol")) { @@ -167,7 +167,7 @@ function buildCharts() { "#microstack-eol", microStackReleaseNames, microStackStatus, - microStackReleases + microStackReleases, ); } } @@ -259,5 +259,5 @@ window.addEventListener( clearCharts(); buildCharts(); } - }, 250) + }, 250), ); diff --git a/static/js/src/release-chart-old.js b/static/js/src/release-chart-old.js index 6656e0de7a8..ee8753aa523 100644 --- a/static/js/src/release-chart-old.js +++ b/static/js/src/release-chart-old.js @@ -162,7 +162,7 @@ function addXAxis(svg, height, xAxis) { .attr("class", "x axis") .attr( "transform", - "translate(0, " + (height - margin.top - margin.bottom) + ")" + "translate(0, " + (height - margin.top - margin.bottom) + ")", ) .transition() .call(xAxis); @@ -400,7 +400,7 @@ function formatKeyLabel(key) { keyLowerCase.charAt(0).toUpperCase() + keyLowerCase.substr(1); formattedKey = formattedKey.replace( "Main universe", - "Expanded Security Maintenance (ESM) for Ubuntu Universe (10 years)" + "Expanded Security Maintenance (ESM) for Ubuntu Universe (10 years)", ); formattedKey = formattedKey.replace("Hwe", "HWE: Hardware Enablement"); return formattedKey; @@ -436,7 +436,7 @@ export function createReleaseChartOld( tasks, taskVersions, removePadding, - highlightVersion + highlightVersion, ) { var longestLabelWidth = calculateLongestLabelWidth(taskTypes); if (taskVersions) { @@ -507,7 +507,7 @@ export function createReleaseChartOld( .attr("height", height + margin.top + margin.bottom) .attr( "transform", - "translate(" + chartTranslateX + ", " + margin.top + ")" + "translate(" + chartTranslateX + ", " + margin.top + ")", ); addXAxis(svg, height, xAxis); @@ -551,7 +551,7 @@ export function createChartWithTitles( taskStatus, tasks, taskVersions, - taskVersionsTitle + taskVersionsTitle, ) { if (!taskTypesTitle || !taskVersionsTitle) return; @@ -561,7 +561,7 @@ export function createChartWithTitles( taskTypes, taskStatus, tasks, - taskVersions + taskVersions, ); // adjust chart height to fit titles diff --git a/static/js/src/release-chart.js b/static/js/src/release-chart.js index 82450a16700..3a264c5137f 100644 --- a/static/js/src/release-chart.js +++ b/static/js/src/release-chart.js @@ -325,7 +325,7 @@ function buildChartKey(svg, chartSelector, taskStatus) { .attr( "height", rowHeight * taskStatusKeys.length + - extraChartHeight * taskStatusKeys.length + extraChartHeight * taskStatusKeys.length, ); taskStatusKeys.forEach(function (key, i) { @@ -334,7 +334,7 @@ function buildChartKey(svg, chartSelector, taskStatus) { .attr("class", "chart-key__row") .attr( "transform", - "translate(0, " + (rowHeight * i + extraChartHeight * i) + ")" + "translate(0, " + (rowHeight * i + extraChartHeight * i) + ")", ) .attr("height", rectDimensions); @@ -366,7 +366,7 @@ function buildChartKey(svg, chartSelector, taskStatus) { function getMaxNumberOfLines(svg, textList, width) { var tempSvg = (svg = document.createElementNS( "http://www.w3.org/2000/svg", - "svg" + "svg", )); svg.style.position = "absolute"; svg.style.visibility = "hidden"; @@ -378,7 +378,7 @@ function getMaxNumberOfLines(svg, textList, width) { textList.forEach(function (key, i) { let textNode = document.createElementNS( "http://www.w3.org/2000/svg", - "text" + "text", ); textNode.textContent = formatKeyLabel(key); svg.appendChild(textNode); @@ -448,39 +448,39 @@ function formatKeyLabel(key) { keyLowerCase.charAt(0).toUpperCase() + keyLowerCase.substr(1); formattedKey = formattedKey.replace( "Lts", - "Ubuntu LTS release Standard Support" + "Ubuntu LTS release Standard Support", ); formattedKey = formattedKey.replace(" openstack ", " OpenStack "); formattedKey = formattedKey.replace("kub", "Kub"); formattedKey = formattedKey.replace( "Interim release", - "Interim release standard security maintenance (9 months)" + "Interim release standard security maintenance (9 months)", ); formattedKey = formattedKey.replace( "Esm", - "LTS Expanded Security Maintenance (ESM) for Ubuntu Main (additional 5 years)" + "LTS Expanded Security Maintenance (ESM) for Ubuntu Main (additional 5 years)", ); formattedKey = formattedKey.replace("Cve", "CVE/Critical fixes only"); formattedKey = formattedKey.replace("Early", "Early preview"); formattedKey = formattedKey.replace( "Hardware and maintenance updates", - "LTS standard security maintenance for Ubuntu Main (initial 5 years)" + "LTS standard security maintenance for Ubuntu Main (initial 5 years)", ); formattedKey = formattedKey.replace( "Main universe", - "Expanded Security Maintenance (ESM) for Ubuntu Universe (10 years)" + "Expanded Security Maintenance (ESM) for Ubuntu Universe (10 years)", ); formattedKey = formattedKey.replace( "Pro legacy support", - "Legacy support (years 11 and 12)" + "Legacy support (years 11 and 12)", ); formattedKey = formattedKey.replace( "Microstack esm", - "Expanded Security Maintenance (ESM)" + "Expanded Security Maintenance (ESM)", ); formattedKey = formattedKey.replace( "Pro support", - "Ubuntu Pro + Support coverage" + "Ubuntu Pro + Support coverage", ); return formattedKey; } @@ -516,7 +516,7 @@ export function createReleaseChart( tasks, taskVersions, removePadding, - highlightVersion + highlightVersion, ) { var margin = { top: 12, @@ -600,7 +600,7 @@ export function createReleaseChart( .attr("height", height) .attr( "transform", - "translate(" + chartTranslateX + ", " + margin.top + ")" + "translate(" + chartTranslateX + ", " + margin.top + ")", ); addBarsToChart(svg, tasks, taskStatus, x, y, highlightVersion); diff --git a/static/js/src/render-tutorials.js b/static/js/src/render-tutorials.js index 05d65bb404c..e64ab99277d 100644 --- a/static/js/src/render-tutorials.js +++ b/static/js/src/render-tutorials.js @@ -10,7 +10,7 @@ const renderTutorials = (topic) => { const tutorials = data; const tutorialStrip = document.querySelector("#tutorial-strip"); const tutorialContainer = document.querySelector( - "#tutorials-container" + "#tutorials-container", ); const tutorialTemplate = document.querySelector("#tutorial-template"); diff --git a/static/js/src/side-navigation.js b/static/js/src/side-navigation.js index dd5f5b3c8eb..813cca7427f 100644 --- a/static/js/src/side-navigation.js +++ b/static/js/src/side-navigation.js @@ -14,10 +14,10 @@ */ function toggleDrawer(sideNavigation, show, ignoreTogglerFocus = false) { const toggleButtonOutsideDrawer = sideNavigation.querySelector( - ".p-side-navigation__toggle" + ".p-side-navigation__toggle", ); const toggleButtonInsideDrawer = sideNavigation.querySelector( - ".p-side-navigation__toggle--in-drawer" + ".p-side-navigation__toggle--in-drawer", ); if (sideNavigation) { @@ -77,8 +77,8 @@ const handleToggleMenu = (e) => { [button, link, nestedList].forEach((el) => el.setAttribute( "aria-expanded", - el.getAttribute("aria-expanded") === "true" ? "false" : "true" - ) + el.getAttribute("aria-expanded") === "true" ? "false" : "true", + ), ); }; @@ -96,7 +96,7 @@ function setupSideNavigation(sideNavigation) { event.preventDefault(); toggleDrawer( sideNavigation, - !sideNavigation.classList.contains("is-expanded") + !sideNavigation.classList.contains("is-expanded"), ); }); }); diff --git a/static/js/src/static-forms.js b/static/js/src/static-forms.js index 97a424d4e24..490d6179209 100644 --- a/static/js/src/static-forms.js +++ b/static/js/src/static-forms.js @@ -20,25 +20,25 @@ function setUpStaticForms(form, formId) { Array.prototype.forEach.call(otherContainers, function (otherContainer) { const otherInput = otherContainer.querySelector( - ".js-other-container__other-toggle" + ".js-other-container__other-toggle", ); const textInput = otherContainer.querySelector( - ".js-other-container__input" + ".js-other-container__input", ); if (otherInput.type === "radio") { const radioGroupName = otherInput.name; const radioGroup = Array.from( - document.querySelectorAll(`input[name="${radioGroupName}"]`) + document.querySelectorAll(`input[name="${radioGroupName}"]`), ); radioGroup.forEach((radio) => { radio.addEventListener("change", () => - updateOtherInputVisibility(otherInput, textInput) + updateOtherInputVisibility(otherInput, textInput), ); }); } else if (otherInput.type === "checkbox") { otherInput.addEventListener("change", () => - updateOtherInputVisibility(otherInput, textInput) + updateOtherInputVisibility(otherInput, textInput), ); } }); @@ -198,7 +198,7 @@ if (forms.length) { function toggleCheckboxVisibility(fieldset, checklistItem) { const checkboxes = fieldset.querySelectorAll(".js-checkbox-visibility"); const otherCheckboxes = fieldset.querySelectorAll( - ".js-checkbox-visibility__other" + ".js-checkbox-visibility__other", ); const isVisible = checklistItem.classList.contains("js-checkbox-visibility"); @@ -237,7 +237,7 @@ function toggleCheckboxVisibility(fieldset, checklistItem) { } } const ubuntuVersionCheckboxes = document.querySelector( - "fieldset.js-toggle-checkbox-visibility" + "fieldset.js-toggle-checkbox-visibility", ); ubuntuVersionCheckboxes?.addEventListener("change", function (event) { toggleCheckboxVisibility(ubuntuVersionCheckboxes, event.target); @@ -264,7 +264,7 @@ function requiredCheckbox(fieldset, target) { } const requiredFieldset = document.querySelectorAll( - "fieldset.js-required-checkbox" + "fieldset.js-required-checkbox", ); requiredFieldset?.forEach((fieldset) => { fieldset.addEventListener("change", function (event) { diff --git a/static/js/src/tabbed-content.js b/static/js/src/tabbed-content.js index ad995e259a7..50f6f9a34cf 100644 --- a/static/js/src/tabbed-content.js +++ b/static/js/src/tabbed-content.js @@ -107,7 +107,7 @@ const setActiveTab = (tab, tabs) => { tabs.forEach((tabElement) => { var tabContent = document.querySelectorAll( - "#" + tabElement.getAttribute("aria-controls") + "#" + tabElement.getAttribute("aria-controls"), ); tabContent.forEach((content) => { if (tabElement === tab) { @@ -143,13 +143,13 @@ var currentHash = window.location.hash; var tabs = [].slice.call( - tabContainer.querySelectorAll("[aria-controls]") + tabContainer.querySelectorAll("[aria-controls]"), ); attachEvents(tabs, persistURLHash); if (persistURLHash && currentHash) { var activeTab = document.querySelector( - ".p-tabs__link[href='" + currentHash + "']" + ".p-tabs__link[href='" + currentHash + "']", ); if (activeTab) { @@ -197,7 +197,7 @@ if (e.target.classList.contains("js-tab")) { const tabContainer = e.target.closest(".js-tabs"); const tabs = [].slice.call( - tabContainer.querySelectorAll("[aria-controls]") + tabContainer.querySelectorAll("[aria-controls]"), ); if (tabs) { diff --git a/static/js/src/tabotronic.js b/static/js/src/tabotronic.js index 64bde010a88..4b3268f6742 100644 --- a/static/js/src/tabotronic.js +++ b/static/js/src/tabotronic.js @@ -4,7 +4,7 @@ tabContent.forEach((tab) => { const link = document.querySelector( - `#${tab.getAttribute("aria-labelledby")}` + `#${tab.getAttribute("aria-labelledby")}`, ); if (link && link.getAttribute("aria-selected") !== "true") { tab.classList.add("u-hide"); diff --git a/static/js/src/tutorial.js b/static/js/src/tutorial.js index 0afc7e3172e..7b1f895fd95 100644 --- a/static/js/src/tutorial.js +++ b/static/js/src/tutorial.js @@ -1,7 +1,7 @@ function toggleTutorialNavigation() { const toggleButton = document.querySelector(".l-tutorial__nav-toggle"); const menu = document.getElementById( - toggleButton.getAttribute("aria-controls") + toggleButton.getAttribute("aria-controls"), ); const expanded = toggleButton.getAttribute("aria-expanded") === "true"; @@ -48,7 +48,7 @@ window.addEventListener("hashchange", (e) => { const sectionIds = []; const tutorialSections = document.querySelectorAll( - ".l-tutorial__content section" + ".l-tutorial__content section", ); tutorialSections.forEach((section) => { sectionIds.push(section.id); @@ -76,11 +76,11 @@ if (!window.location.hash) { } const tutorialFeedbackOptions = document.querySelector( - ".l-tutorial__feedback-options" + ".l-tutorial__feedback-options", ); const tutorialFeedbackIcons = document.querySelectorAll(".js-feedback-icon"); const tutorialFeedbackResult = document.querySelector( - ".l-tutorial__feedback-result" + ".l-tutorial__feedback-result", ); tutorialFeedbackIcons.forEach((icon) => { @@ -108,7 +108,7 @@ polls.forEach((poll) => { answers.forEach((answer) => { answer.addEventListener("change", (e) => { const answerLabel = document.querySelector( - 'label[for="' + e.target.id + '"]' + 'label[for="' + e.target.id + '"]', ); const eventLabel = answerLabel.innerText; const eventAction = document.getElementById(pollId).innerText; diff --git a/static/js/src/tutorial.test.js b/static/js/src/tutorial.test.js index 82a8eb4dd22..311f7e91160 100644 --- a/static/js/src/tutorial.test.js +++ b/static/js/src/tutorial.test.js @@ -13,17 +13,17 @@ describe("toggleTutorialNavigation", () => { expect( document .querySelector(".l-tutorial__nav-toggle") - .classList.contains("p-icon--menu") + .classList.contains("p-icon--menu"), ).toBe(false); expect( document .querySelector(".l-tutorial__nav-toggle") - .classList.contains("p-icon--close") + .classList.contains("p-icon--close"), ).toBe(true); expect( document .querySelector(".l-tutorial__nav") - .classList.contains("u-hide--small") + .classList.contains("u-hide--small"), ).toBe(false); toggleTutorialNavigation(); @@ -31,17 +31,17 @@ describe("toggleTutorialNavigation", () => { expect( document .querySelector(".l-tutorial__nav-toggle") - .classList.contains("p-icon--menu") + .classList.contains("p-icon--menu"), ).toBe(true); expect( document .querySelector(".l-tutorial__nav-toggle") - .classList.contains("p-icon--close") + .classList.contains("p-icon--close"), ).toBe(false); expect( document .querySelector(".l-tutorial__nav") - .classList.contains("u-hide--small") + .classList.contains("u-hide--small"), ).toBe(true); }); }); diff --git a/static/js/src/ua-payment-methods.js b/static/js/src/ua-payment-methods.js index 01ec6a91715..d6b2306accb 100644 --- a/static/js/src/ua-payment-methods.js +++ b/static/js/src/ua-payment-methods.js @@ -62,7 +62,7 @@ if (cardElement) { const cancelButton = document.getElementById("cancel-payment-details"); const updateButton = document.getElementById("update-payment-details"); const previewSection = document.getElementById( - "default-payment-method-section" + "default-payment-method-section", ); const editSection = document.getElementById("edit-payment-method-section"); const cardErrorElement = document.getElementById("card-errors"); @@ -133,9 +133,8 @@ if (cardElement) { paymentErrorElement.classList.add("u-hide"); paymentWarningElement.classList.add("u-hide"); paymentSuccessElement.classList.remove("u-hide"); - paymentSuccessElement.querySelector( - ".p-notification__message" - ).innerHTML = `${message}. Reloading page...`; + paymentSuccessElement.querySelector(".p-notification__message").innerHTML = + `${message}. Reloading page...`; }; const handleError = () => { @@ -146,9 +145,8 @@ if (cardElement) { }; const handlePaymentMethodErrors = (message) => { - paymentErrorElement.querySelector( - ".p-notification__message" - ).innerHTML = `${message} Check the details and try again. Contact Canonical sales if the problem persists.`; + paymentErrorElement.querySelector(".p-notification__message").innerHTML = + `${message} Check the details and try again. Contact Canonical sales if the problem persists.`; paymentErrorElement.classList.remove("u-hide"); }; diff --git a/static/sass/_pattern_distributor.scss b/static/sass/_pattern_distributor.scss index 589b62e308e..b70070cddb3 100644 --- a/static/sass/_pattern_distributor.scss +++ b/static/sass/_pattern_distributor.scss @@ -50,8 +50,11 @@ } .distributor-shop-selector.p-card--radio--column.is-selected { - box-shadow: 0 4px 4px rgb(0 0 0 / 5%), 0 2px 16px rgb(0 0 0 / 5%), - 0 0 24px rgb(0 0 0 / 10%), 0 0 0 1px #757575; + box-shadow: + 0 4px 4px rgb(0 0 0 / 5%), + 0 2px 16px rgb(0 0 0 / 5%), + 0 0 24px rgb(0 0 0 / 10%), + 0 0 0 1px #757575; } .included { diff --git a/static/sass/_pattern_strip.scss b/static/sass/_pattern_strip.scss index 9b3d481fa1b..097c1d3f6d4 100644 --- a/static/sass/_pattern_strip.scss +++ b/static/sass/_pattern_strip.scss @@ -92,10 +92,18 @@ linear-gradient(-89deg, #e95420 0%, #772953 38%, #2c001e 85%); } - background-position: 0% 0%, top right, right 0 bottom 4rem, right bottom, + background-position: + 0% 0%, + top right, + right 0 bottom 4rem, + right bottom, 0% 0%; background-repeat: no-repeat; - background-size: 100% calc(100% - 4rem), 50% 100%, 100% 4rem, 100% 4rem, + background-size: + 100% calc(100% - 4rem), + 50% 100%, + 100% 4rem, + 100% 4rem, auto; margin-bottom: -4rem; overflow: hidden; @@ -113,20 +121,36 @@ &.is-deep { $padding: 3rem; - background-position: 0% 0%, top right, right 0 bottom $padding, - right bottom, 0% 0%; - background-size: 100% calc(100% - #{$padding}), 100% 100%, 100% $padding, - 100% $padding, auto; + background-position: + 0% 0%, + top right, + right 0 bottom $padding, + right bottom, + 0% 0%; + background-size: + 100% calc(100% - #{$padding}), + 100% 100%, + 100% $padding, + 100% $padding, + auto; margin-bottom: -$padding; padding-bottom: ($padding * 3) !important; @media (min-width: $breakpoint-medium) { $padding: 6rem; - background-position: 0% 0%, top right, right 0 bottom $padding, - right bottom, 0% 0%; - background-size: 100% calc(100% - #{$padding}), 50% 100%, 100% $padding, - 100% $padding, auto; + background-position: + 0% 0%, + top right, + right 0 bottom $padding, + right bottom, + 0% 0%; + background-size: + 100% calc(100% - #{$padding}), + 50% 100%, + 100% $padding, + 100% $padding, + auto; margin-bottom: -$padding; padding-bottom: ($padding * 3) !important; } @@ -184,9 +208,17 @@ linear-gradient(-89deg, #e95420 0%, #772953 38%, #2c001e 85%); } - background-position: 0% 0%, top right, right bottom, 0% 0%; + background-position: + 0% 0%, + top right, + right bottom, + 0% 0%; background-repeat: no-repeat; - background-size: 100% 100%, 50% 100%, 100% 4rem, auto; + background-size: + 100% 100%, + 50% 100%, + 100% 4rem, + auto; color: $color-x-light; padding-bottom: 6rem; } @@ -224,9 +256,17 @@ rgba(119, 41, 83, 1) 50%, rgba(233, 84, 32, 1) 88% ); - background-position: top right, top right, top left, top left; + background-position: + top right, + top right, + top left, + top left; background-repeat: no-repeat; - background-size: 39.4% 6rem, 54% 4rem, 63% 4rem, 62.6% 4rem; + background-size: + 39.4% 6rem, + 54% 4rem, + 63% 4rem, + 62.6% 4rem; padding-bottom: 4rem; padding-top: 6rem; } @@ -264,9 +304,17 @@ rgba(119, 41, 83, 1) 50%, rgba(233, 84, 32, 1) 88% ); - background-position: top right, top right, top left, top left; + background-position: + top right, + top right, + top left, + top left; background-repeat: no-repeat; - background-size: 39.4% 6rem, 54% 4rem, 63% 4rem, 62.6% 4rem; + background-size: + 39.4% 6rem, + 54% 4rem, + 63% 4rem, + 62.6% 4rem; padding-bottom: 4rem; padding-top: 6rem; } @@ -304,9 +352,17 @@ rgb(119, 41, 83) 38%, rgb(44, 0, 30) 85% ); - background-position: left bottom, left bottom, right bottom, right bottom; + background-position: + left bottom, + left bottom, + right bottom, + right bottom; background-repeat: no-repeat; - background-size: 42% 12rem, 65.2% 8rem, 73.7% 8rem, 73.7% 8rem; + background-size: + 42% 12rem, + 65.2% 8rem, + 73.7% 8rem, + 73.7% 8rem; padding-bottom: 8rem; } } @@ -373,10 +429,17 @@ ); } - background-position: right top, right top, right top, right top; + background-position: + right top, + right top, + right top, + right top; background-repeat: no-repeat; - background-size: 37.7% calc(100% - 6rem), 42.1% calc(100% - 151px), - 49.2% calc(100% - 12rem), 49.2% calc(100% - 12rem); + background-size: + 37.7% calc(100% - 6rem), + 42.1% calc(100% - 151px), + 49.2% calc(100% - 12rem), + 49.2% calc(100% - 12rem); padding-bottom: 4rem; padding-top: 4rem; @@ -430,9 +493,15 @@ #772953 63%, #2c001e 100% ); - background-position: top 60% left, top left, center right; + background-position: + top 60% left, + top left, + center right; background-repeat: no-repeat; - background-size: 90% 100%, 100% 100%, cover; + background-size: + 90% 100%, + 100% 100%, + cover; @media (max-width: $breakpoint-medium) { background-image: linear-gradient( @@ -517,9 +586,17 @@ ); } - background-position: right top, right top, 71.5% top, right top; + background-position: + right top, + right top, + 71.5% top, + right top; background-repeat: no-repeat; - background-size: 46.2% 68.6%, 38.4% 100%, 16.8% 100%, 40.5% 100%; + background-size: + 46.2% 68.6%, + 38.4% 100%, + 16.8% 100%, + 40.5% 100%; @media only screen and (max-width: $breakpoint-small) { background-blend-mode: normal; @@ -563,9 +640,15 @@ rgba(192, 82, 58, 1) 49.3%, transparent 49.4% ); - background-position: left top, left bottom, left center; + background-position: + left top, + left bottom, + left center; background-repeat: no-repeat; - background-size: 100% 100%, 100% 6rem, 100% 100%; + background-size: + 100% 100%, + 100% 6rem, + 100% 100%; padding-bottom: 174px; padding-top: 6rem; @@ -626,9 +709,17 @@ linear-gradient(251deg, #e95422 0%, #772953 49.5%, #2c001e 100%); } - background-position: top left, top right, center 66.5%, left top; + background-position: + top left, + top right, + center 66.5%, + left top; background-repeat: no-repeat; - background-size: 63% 97%, 100% 66%, 100% 31%, 100% 76.5%; + background-size: + 63% 97%, + 100% 66%, + 100% 31%, + 100% 76.5%; color: $color-light; padding-bottom: 10rem; padding-top: 6rem; @@ -704,11 +795,19 @@ linear-gradient(-89deg, #e95420 0%, #772953 38%, #2c001e 85%); } - background-position: bottom 4rem left, bottom 0 right, left 0 bottom 10.5rem, - right bottom, 0% 0%; + background-position: + bottom 4rem left, + bottom 0 right, + left 0 bottom 10.5rem, + right bottom, + 0% 0%; background-repeat: no-repeat; - background-size: 100% calc(100% - 4rem), 100% 100%, 101% 5.5rem, - 102% 10.5rem, auto; + background-size: + 100% calc(100% - 4rem), + 100% 100%, + 101% 5.5rem, + 102% 10.5rem, + auto; margin: 0; overflow: hidden; padding-bottom: 0; @@ -742,10 +841,18 @@ rgba(255, 255, 255, 1) 100% ), linear-gradient(-89deg, #e95420 0%, #772953 38%, #2c001e 85%); - background-position: 0% 0%, top right, left 0 bottom 6.45rem, right bottom, + background-position: + 0% 0%, + top right, + left 0 bottom 6.45rem, + right bottom, 0% 0%; - background-size: 100% calc(100% - 7rem), 67% calc(100% - 1.5rem), - 101% 5.5rem, 102% 6.5rem, auto; + background-size: + 100% calc(100% - 7rem), + 67% calc(100% - 1.5rem), + 101% 5.5rem, + 102% 6.5rem, + auto; } &.is-dark { @@ -792,9 +899,15 @@ linear-gradient(-89deg, #e95420 0%, #772953 42%, #2c001e 94%); } - background-position: bottom left, bottom 0 right, 0% 0%; + background-position: + bottom left, + bottom 0 right, + 0% 0%; background-repeat: no-repeat; - background-size: 100% 100%, 60% 100%, auto; + background-size: + 100% 100%, + 60% 100%, + auto; color: $color-x-light; overflow: hidden; position: relative; @@ -845,9 +958,17 @@ rgba(247, 247, 247, 0) 100% ), linear-gradient(-20deg, #e95420 0%, #772953 38%, #2c001e 85%); - background-position: top right, top left, right bottom -1px, left top; + background-position: + top right, + top left, + right bottom -1px, + left top; background-repeat: no-repeat; - background-size: 74% 99.83%, 98% 91%, 192.8% 23.26%, 100% 99.8%; + background-size: + 74% 99.83%, + 98% 91%, + 192.8% 23.26%, + 100% 99.8%; color: $color-x-light; margin: 0; padding-bottom: 6rem; @@ -877,9 +998,17 @@ } @media (max-width: $breakpoint-medium) { - background-position: top right, top left, right bottom -1px, left top; + background-position: + top right, + top left, + right bottom -1px, + left top; background-repeat: no-repeat; - background-size: 74% 99.83%, 148% 83%, 119% 13%, 100% 99.83%; + background-size: + 74% 99.83%, + 148% 83%, + 119% 13%, + 100% 99.83%; padding-bottom: 8rem; padding-top: 4rem; } @@ -905,9 +1034,15 @@ transparent 50% ), linear-gradient(201deg, #4e4e4e 0%, #333 46%, #111 90%); - background-position: top right, top left, left top; + background-position: + top right, + top left, + left top; background-repeat: no-repeat; - background-size: 77% 115%, 71% 104%, 100% 99.8%; + background-size: + 77% 115%, + 71% 104%, + 100% 99.8%; color: $color-x-light; } } @@ -933,9 +1068,15 @@ transparent 50% ), linear-gradient(201deg, #f7f7f7 30%, #e5e5e5 90%); - background-position: top right, top left, left top; + background-position: + top right, + top left, + left top; background-repeat: no-repeat; - background-size: 86% 125%, 77% 57%, 100% 99.8%; + background-size: + 86% 125%, + 77% 57%, + 100% 99.8%; } } } @@ -961,9 +1102,15 @@ rgba(228, 228, 228, 0) 100% ), linear-gradient(-89deg, #e95420 0%, #772953 38%, #2c001e 85%); - background-position: top right, top left, left top; + background-position: + top right, + top left, + left top; background-repeat: no-repeat; - background-size: 86% 105%, 67% 152%, 100% 99.9%; + background-size: + 86% 105%, + 67% 152%, + 100% 99.9%; color: $color-x-light; } } diff --git a/static/sass/_pattern_subscribe.scss b/static/sass/_pattern_subscribe.scss index 25d2674d00e..808ac9ddbbf 100644 --- a/static/sass/_pattern_subscribe.scss +++ b/static/sass/_pattern_subscribe.scss @@ -42,8 +42,11 @@ } .product-selector .p-card--radio--column.is-selected { - box-shadow: 0 4px 4px rgb(0 0 0 / 5%), 0 2px 16px rgb(0 0 0 / 5%), - 0 0 24px rgb(0 0 0 / 10%), 0 0 0 1px #757575; + box-shadow: + 0 4px 4px rgb(0 0 0 / 5%), + 0 2px 16px rgb(0 0 0 / 5%), + 0 0 24px rgb(0 0 0 / 10%), + 0 0 0 1px #757575; } .included { diff --git a/static/sass/_vanilla-placeholders.scss b/static/sass/_vanilla-placeholders.scss index 5b5ffc1c129..4f490af5d03 100644 --- a/static/sass/_vanilla-placeholders.scss +++ b/static/sass/_vanilla-placeholders.scss @@ -1,8 +1,10 @@ // placeholders that need to be moved to vanilla $nudge--small: 0.55rem; -$p-small-lh-diff: map-get($line-heights, default-text) - - map-get($line-heights, small); +$p-small-lh-diff: map-get($line-heights, default-text) - map-get( + $line-heights, + small + ); %small-text-base { font-size: math.div(1rem, pow($ms-ratio, 1)); diff --git a/static/sass/takeovers/_rigado-webinar.scss b/static/sass/takeovers/_rigado-webinar.scss index 588d5408930..282bfc168c3 100644 --- a/static/sass/takeovers/_rigado-webinar.scss +++ b/static/sass/takeovers/_rigado-webinar.scss @@ -30,7 +30,9 @@ $rigado-background-gradient-3 90%, $rigado-background-gradient-4 100% ); - background-position: bottom left, bottom right; + background-position: + bottom left, + bottom right; background-repeat: no-repeat; background-size: contain; } diff --git a/static/sass/takeovers/_vmware-to-os.scss b/static/sass/takeovers/_vmware-to-os.scss index a9a577fa7bb..3230e80c395 100644 --- a/static/sass/takeovers/_vmware-to-os.scss +++ b/static/sass/takeovers/_vmware-to-os.scss @@ -5,7 +5,9 @@ @media (min-width: $breakpoint-medium) { background-image: url("#{$assets-path}d3edfcd5-left.png"), url("#{$assets-path}17508275-right.png"); - background-position: bottom left, bottom right; + background-position: + bottom left, + bottom right; background-repeat: no-repeat; background-size: contain; } diff --git a/templates/16-04/_release-chart-1604.html b/templates/16-04/_release-chart-1604.html index 214233b2b74..678260b6e3e 100644 --- a/templates/16-04/_release-chart-1604.html +++ b/templates/16-04/_release-chart-1604.html @@ -93,5 +93,5 @@ - + diff --git a/templates/18-04/_release-chart-1604.html b/templates/18-04/_release-chart-1604.html index 214233b2b74..678260b6e3e 100644 --- a/templates/18-04/_release-chart-1604.html +++ b/templates/18-04/_release-chart-1604.html @@ -93,5 +93,5 @@ - + diff --git a/templates/about/index.html b/templates/about/index.html index a3d8dca46ab..70c6acda98a 100755 --- a/templates/about/index.html +++ b/templates/about/index.html @@ -44,6 +44,6 @@

Ubuntu today

- + {% endblock content %} diff --git a/templates/about/release-cycle.html b/templates/about/release-cycle.html index c1fd8d4ba5c..f853768d5ed 100755 --- a/templates/about/release-cycle.html +++ b/templates/about/release-cycle.html @@ -353,7 +353,7 @@

Canonical Kubernetes release cycle

- + diff --git a/templates/containers/chiselled/index.html b/templates/containers/chiselled/index.html index 0eee1409d16..ebeb1cb7a85 100644 --- a/templates/containers/chiselled/index.html +++ b/templates/containers/chiselled/index.html @@ -591,6 +591,6 @@

GitHub

data-return-url="https://ubuntu.com/containers#success" data-lp-url="https://pages.ubuntu.com/things-contact-us.html"> - + {% endblock %} diff --git a/templates/cpu-compatibility/index.html b/templates/cpu-compatibility/index.html index cb83bba62ce..9755a681946 100755 --- a/templates/cpu-compatibility/index.html +++ b/templates/cpu-compatibility/index.html @@ -252,7 +252,7 @@

Supported OpenStack versions

- + {% endblock content %} diff --git a/templates/desktop/developers.html b/templates/desktop/developers.html index 5415879c6fc..020f4d995d5 100755 --- a/templates/desktop/developers.html +++ b/templates/desktop/developers.html @@ -617,7 +617,7 @@

Join our community

{% include "desktop/partial/_desktop-latest-news.html" %} - + diff --git a/templates/engage/de_why-openstack.html b/templates/engage/de_why-openstack.html index f91d8af7a19..e8628d52049 100644 --- a/templates/engage/de_why-openstack.html +++ b/templates/engage/de_why-openstack.html @@ -135,7 +135,7 @@

Wissen, wo anzufangen

OpenStack Support

-

Die Veröffentlichung von OpenStack folgt dem Ubuntu-Rhythmus. Das bedeutet, dass zweimal im Jahr haben wir eine neue Version von OpenStack: im April und im Oktober. Sie werden mit neuen Versionen von Ubuntu als Pakete im Ubuntu-Archiv ausgeliefert:

+

Die Veröffentlichung von OpenStack folgt dem Ubuntu-Rhythmus. Das bedeutet, dass zweimal im Jahr haben wir eine neue Version von OpenStack: im April und im Oktober. Sie werden mit neuen Versionen von Ubuntu als Pakete im Ubuntu-Archiv ausgeliefert:

@@ -172,6 +172,6 @@

Kontaktieren Sie uns

- + {% endblock content %} diff --git a/templates/engage/es_why-openstack.html b/templates/engage/es_why-openstack.html index e7c1c292159..d015804c67f 100644 --- a/templates/engage/es_why-openstack.html +++ b/templates/engage/es_why-openstack.html @@ -154,6 +154,6 @@

Ponerse en contacto

- + {% endblock content %} diff --git a/templates/engage/fr_why-openstack.html b/templates/engage/fr_why-openstack.html index f226abef1d2..1d0e5236e22 100644 --- a/templates/engage/fr_why-openstack.html +++ b/templates/engage/fr_why-openstack.html @@ -157,6 +157,6 @@

Entrer en contact

- + {% endblock content %} diff --git a/templates/openstack/why-openstack.html b/templates/openstack/why-openstack.html index ff84d8e1a81..4a6d4e68422 100644 --- a/templates/openstack/why-openstack.html +++ b/templates/openstack/why-openstack.html @@ -170,6 +170,6 @@

Get in touch

- + {% endblock content %} diff --git a/templates/server/index.html b/templates/server/index.html index 0c20b8cb5d9..744f2c3a688 100755 --- a/templates/server/index.html +++ b/templates/server/index.html @@ -362,7 +362,7 @@

Security support for Ubuntu releases

- +
diff --git a/templates/shared/_kernel-support-schedule.html b/templates/shared/_kernel-support-schedule.html index 3dbd6597122..cd2bf0dab08 100644 --- a/templates/shared/_kernel-support-schedule.html +++ b/templates/shared/_kernel-support-schedule.html @@ -7,6 +7,6 @@

Kernel release schedule

- + diff --git a/templates/shared/_release_schedule.html b/templates/shared/_release_schedule.html index b0dd72d2250..3b24baafbf8 100644 --- a/templates/shared/_release_schedule.html +++ b/templates/shared/_release_schedule.html @@ -110,5 +110,5 @@

A release schedule you can depend - + diff --git a/yarn.lock b/yarn.lock index 8d798d8c838..aa3075658f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37,44 +37,11 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" -"@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4": - version "7.16.4" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz" - integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== - "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.8": version "7.24.9" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.9.tgz#53eee4e68f1c1d0282aa0eb05ddb02d033fc43a0" integrity sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng== -"@babel/core@>=7.9.0": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz" - integrity sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.7" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.24.9": version "7.24.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.9.tgz#dc07c9d307162c97fa9484ea997ade65841c7c82" @@ -96,15 +63,6 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz" - integrity sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg== - dependencies: - "@babel/types" "^7.16.7" - jsesc "^2.5.1" - source-map "^0.5.0" - "@babel/generator@^7.24.8", "@babel/generator@^7.24.9", "@babel/generator@^7.7.2": version "7.24.10" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.10.tgz#a4ab681ec2a78bbb9ba22a3941195e28a81d8e76" @@ -115,12 +73,15 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== +"@babel/generator@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" + integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.25.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" "@babel/helper-annotate-as-pure@^7.24.7": version "7.24.7" @@ -137,16 +98,6 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz" - integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== - dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz#b607c3161cd9d1744977d4f97139572fe778c271" @@ -158,18 +109,18 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz" - integrity sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz#a109bf9c3d58dfed83aaf42e85633c89f43a6253" + integrity sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/traverse" "^7.25.0" + semver "^6.3.1" "@babel/helper-create-class-features-plugin@^7.24.7": version "7.24.8" @@ -195,20 +146,6 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.3.0": - version "0.3.0" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz" - integrity sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - "@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": version "0.6.2" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" @@ -220,13 +157,6 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-environment-visitor@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" @@ -234,15 +164,6 @@ dependencies: "@babel/types" "^7.24.7" -"@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== - dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - "@babel/helper-function-name@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" @@ -251,20 +172,6 @@ "@babel/template" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-hoist-variables@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" @@ -272,13 +179,6 @@ dependencies: "@babel/types" "^7.24.7" -"@babel/helper-member-expression-to-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz" - integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-member-expression-to-functions@^7.24.7", "@babel/helper-member-expression-to-functions@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" @@ -287,20 +187,6 @@ "@babel/traverse" "^7.24.8" "@babel/types" "^7.24.8" -"@babel/helper-module-imports@^7.12.13": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz" - integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-module-imports@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" @@ -309,20 +195,6 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-module-transforms@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz" - integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - "@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.24.9": version "7.24.9" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz#e13d26306b89eea569180868e652e7f514de9d29" @@ -334,13 +206,6 @@ "@babel/helper-split-export-declaration" "^7.24.7" "@babel/helper-validator-identifier" "^7.24.7" -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-optimise-call-expression@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" @@ -348,7 +213,7 @@ dependencies: "@babel/types" "^7.24.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.16.7" resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz" integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== @@ -367,17 +232,6 @@ "@babel/helper-environment-visitor" "^7.24.7" "@babel/helper-wrap-function" "^7.24.7" -"@babel/helper-replace-supers@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz" - integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - "@babel/helper-replace-supers@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz#f933b7eed81a1c0265740edc91491ce51250f765" @@ -387,12 +241,14 @@ "@babel/helper-member-expression-to-functions" "^7.24.7" "@babel/helper-optimise-call-expression" "^7.24.7" -"@babel/helper-simple-access@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz" - integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== +"@babel/helper-replace-supers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" + integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== dependencies: - "@babel/types" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/traverse" "^7.25.0" "@babel/helper-simple-access@^7.24.7": version "7.24.7" @@ -410,13 +266,6 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-split-export-declaration@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" @@ -439,11 +288,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - "@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" @@ -459,15 +303,6 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helpers@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz" - integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - "@babel/helpers@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.8.tgz#2820d64d5d6686cca8789dd15b074cd862795873" @@ -476,7 +311,7 @@ "@babel/template" "^7.24.7" "@babel/types" "^7.24.8" -"@babel/highlight@^7.14.5", "@babel/highlight@^7.16.7": +"@babel/highlight@^7.14.5": version "7.16.7" resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz" integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw== @@ -505,10 +340,10 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.8.tgz#58a4dbbcad7eb1d48930524a3fd93d93e9084c6f" integrity sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w== -"@babel/parser@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz" - integrity sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA== +"@babel/parser@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.0.tgz#9fdc9237504d797b6e7b8f66e78ea7f570d256ad" + integrity sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA== "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.7": version "7.24.7" @@ -542,13 +377,13 @@ "@babel/helper-environment-visitor" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-proposal-class-properties@7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz" - integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== +"@babel/plugin-proposal-class-properties@7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -625,14 +460,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz" - integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-jsx@^7.24.7", "@babel/plugin-syntax-jsx@^7.7.2": +"@babel/plugin-syntax-jsx@7.24.7", "@babel/plugin-syntax-jsx@^7.24.7", "@babel/plugin-syntax-jsx@^7.7.2": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== @@ -695,14 +523,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz" - integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-typescript@^7.7.2": +"@babel/plugin-syntax-typescript@^7.24.7", "@babel/plugin-syntax-typescript@^7.7.2": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== @@ -897,7 +718,7 @@ "@babel/helper-module-transforms" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-modules-commonjs@^7.24.8": +"@babel/plugin-transform-modules-commonjs@^7.24.7", "@babel/plugin-transform-modules-commonjs@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== @@ -1070,17 +891,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-runtime@7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.7.tgz" - integrity sha512-2FoHiSAWkdq4L06uaDN3rS43i6x28desUVxq+zAFuE6kbWYQeiLPJI5IC7Sg9xKYVcrBKSQkVUfH6aeQYbl9QA== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.4.0" - babel-plugin-polyfill-regenerator "^0.3.0" - semver "^6.3.0" +"@babel/plugin-transform-runtime@7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz#00a5bfaf8c43cf5c8703a8a6e82b59d9c58f38ca" + integrity sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.1" + babel-plugin-polyfill-regenerator "^0.6.1" + semver "^6.3.1" "@babel/plugin-transform-shorthand-properties@^7.24.7": version "7.24.7" @@ -1118,14 +939,16 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-typescript@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.7.tgz" - integrity sha512-Hzx1lvBtOCWuCEwMmYOfpQpO7joFeXLgoPuzZZBtTxXqSqUGUubvFGZv2ygo1tB5Bp9q6PXV3H0E/kf7KM0RLA== +"@babel/plugin-transform-typescript@^7.24.7": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" + integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-typescript" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-syntax-typescript" "^7.24.7" "@babel/plugin-transform-unicode-escapes@^7.24.7": version "7.24.7" @@ -1266,14 +1089,16 @@ "@babel/plugin-transform-react-jsx-development" "^7.24.7" "@babel/plugin-transform-react-pure-annotations" "^7.24.7" -"@babel/preset-typescript@7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz" - integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== +"@babel/preset-typescript@7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" + integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-typescript" "^7.16.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.7" + "@babel/plugin-transform-typescript" "^7.24.7" "@babel/regjsgen@^0.8.0": version "0.8.0" @@ -1287,13 +1112,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.15.4": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz" - integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== - dependencies: - regenerator-runtime "^0.13.4" - "@babel/runtime@^7.21.0": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.8.tgz#5d958c3827b13cc6d05e038c07fb2e5e3420d82e" @@ -1301,15 +1119,6 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - "@babel/template@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" @@ -1319,6 +1128,15 @@ "@babel/parser" "^7.24.7" "@babel/types" "^7.24.7" +"@babel/template@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" + integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.25.0" + "@babel/types" "^7.25.0" + "@babel/template@^7.3.3": version "7.14.5" resolved "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz" @@ -1328,22 +1146,6 @@ "@babel/parser" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz" - integrity sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - debug "^4.1.0" - globals "^11.1.0" - "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.8.tgz#6c14ed5232b7549df3371d820fbd9abfcd7dfab7" @@ -1360,6 +1162,19 @@ debug "^4.3.1" globals "^11.1.0" +"@babel/traverse@^7.25.0": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.2.tgz#1a0a4aef53177bead359ccd0c89f4426c805b2ae" + integrity sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/parser" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.2" + debug "^4.3.1" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.14.5" resolved "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz" @@ -1368,14 +1183,6 @@ "@babel/helper-validator-identifier" "^7.14.5" to-fast-properties "^2.0.0" -"@babel/types@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz" - integrity sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.24.9": version "7.24.9" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.9.tgz#228ce953d7b0d16646e755acf204f4cf3d08cc73" @@ -1385,6 +1192,15 @@ "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" +"@babel/types@^7.25.0", "@babel/types@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" + integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== + dependencies: + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" @@ -1435,6 +1251,31 @@ react-is "^18.2.0" react-shallow-renderer "^16.15.0" +"@csstools/css-parser-algorithms@^2.7.1": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz#6d93a8f7d8aeb7cd9ed0868f946e46f021b6aa70" + integrity sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw== + +"@csstools/css-tokenizer@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz#1d8b2e200197cf5f35ceb07ca2dade31f3a00ae8" + integrity sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg== + +"@csstools/media-query-list-parser@^2.1.13": + version "2.1.13" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz#f00be93f6bede07c14ddf51a168ad2748e4fe9e5" + integrity sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA== + +"@csstools/selector-specificity@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz#63085d2995ca0f0e55aa8b8a07d69bfd48b844fe" + integrity sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA== + +"@dual-bundle/import-meta-resolve@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#519c1549b0e147759e7825701ecffd25e5819f7b" + integrity sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg== + "@esbuild/aix-ppc64@0.23.0": version "0.23.0" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz#145b74d5e4a5223489cabdc238d8dad902df5259" @@ -1890,15 +1731,15 @@ dependencies: playwright "1.40.0" -"@reduxjs/toolkit@1.7.1": - version "1.7.1" - resolved "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.7.1.tgz" - integrity sha512-wXwXYjBVz/ItxB7SMzEAMmEE/FBiY1ze18N+VVVX7NtVbRUrdOGKhpQMHivIJfkbJvSdLUU923a/yAagJQzY0Q== +"@reduxjs/toolkit@2.2.7": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.2.7.tgz#199e3d10ccb39267cb5aee92c0262fd9da7fdfb2" + integrity sha512-faI3cZbSdFb8yv9dhDTmGwclW0vk0z5o1cia+kf7gCbaCwHI5e+7tP57mJUv22pNcNbeA62GSrPpfrUfdXcQ6g== dependencies: - immer "^9.0.7" - redux "^4.1.2" - redux-thunk "^2.4.1" - reselect "^4.1.5" + immer "^10.0.3" + redux "^5.0.1" + redux-thunk "^3.1.0" + reselect "^5.1.0" "@remix-run/router@1.17.1": version "1.17.1" @@ -2028,6 +1869,11 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== +"@sindresorhus/merge-streams@^2.1.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958" + integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== + "@sinonjs/commons@^3.0.0": version "3.0.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" @@ -2054,21 +1900,6 @@ resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-4.1.0.tgz#11a54478df28b7a2d146251f645fb26e9efc9bfd" integrity sha512-HhstGRUz/4JdbZpb26OcOf8Qb/cFR02arvHvgz4sPFLSnI6ZNHC53Jc6JP/FGNwxtrF719YyUnK0gGy4oyhucQ== -"@stylelint/postcss-css-in-js@^0.37.2": - version "0.37.2" - resolved "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz" - integrity sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA== - dependencies: - "@babel/core" ">=7.9.0" - -"@stylelint/postcss-markdown@^0.36.2": - version "0.36.2" - resolved "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz" - integrity sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ== - dependencies: - remark "^13.0.0" - unist-util-find-all-after "^3.0.2" - "@tanstack/query-core@5.51.9": version "5.51.9" resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.51.9.tgz#eb2e02c715068d5664680b773e39eb44db6b48d8" @@ -2270,32 +2101,15 @@ "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@*": +"@types/json-schema@*", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/json-schema@^7.0.5": - version "7.0.11" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/lodash@4.14.175", "@types/lodash@^4.14.175": - version "4.14.175" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz" - integrity sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw== - -"@types/mdast@^3.0.0": - version "3.0.3" - resolved "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz" - integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== - dependencies: - "@types/unist" "*" - -"@types/minimist@^1.2.0": - version "1.2.1" - resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz" - integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== +"@types/lodash@4.17.7": + version "4.17.7" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.7.tgz#2f776bcb53adc9e13b2c0dfd493dfcbd7de43612" + integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== "@types/node@*": version "16.11.47" @@ -2316,16 +2130,6 @@ dependencies: undici-types "~5.26.4" -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - "@types/prop-types@*": version "15.7.3" resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz" @@ -2406,11 +2210,6 @@ resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== -"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": - version "2.0.3" - resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz" - integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== - "@types/yargs-parser@*": version "20.2.0" resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz" @@ -2430,62 +2229,62 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.17.0.tgz#c8ed1af1ad2928ede5cdd207f7e3090499e1f77b" - integrity sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A== +"@typescript-eslint/eslint-plugin@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0.tgz#0fee96f6b691e4bfb9c260fd77d1c86bfbac4f56" + integrity sha512-STIZdwEQRXAHvNUS6ILDf5z3u95Gc8jzywunxSNqX00OooIemaaNIA0vEgynJlycL5AjabYLLrIyHd4iazyvtg== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.17.0" - "@typescript-eslint/type-utils" "7.17.0" - "@typescript-eslint/utils" "7.17.0" - "@typescript-eslint/visitor-keys" "7.17.0" + "@typescript-eslint/scope-manager" "8.0.0" + "@typescript-eslint/type-utils" "8.0.0" + "@typescript-eslint/utils" "8.0.0" + "@typescript-eslint/visitor-keys" "8.0.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.17.0.tgz#be8e32c159190cd40a305a2121220eadea5a88e7" - integrity sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A== +"@typescript-eslint/parser@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.0.0.tgz#5a5030cf8123176b5a0abd966f99e5f9f110652d" + integrity sha512-pS1hdZ+vnrpDIxuFXYQpLTILglTjSYJ9MbetZctrUawogUsPdz31DIIRZ9+rab0LhYNTsk88w4fIzVheiTbWOQ== dependencies: - "@typescript-eslint/scope-manager" "7.17.0" - "@typescript-eslint/types" "7.17.0" - "@typescript-eslint/typescript-estree" "7.17.0" - "@typescript-eslint/visitor-keys" "7.17.0" + "@typescript-eslint/scope-manager" "8.0.0" + "@typescript-eslint/types" "8.0.0" + "@typescript-eslint/typescript-estree" "8.0.0" + "@typescript-eslint/visitor-keys" "8.0.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz#e072d0f914662a7bfd6c058165e3c2b35ea26b9d" - integrity sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA== +"@typescript-eslint/scope-manager@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.0.0.tgz#d14df46c9e43c53af7699dfa800cd615d7dfc118" + integrity sha512-V0aa9Csx/ZWWv2IPgTfY7T4agYwJyILESu/PVqFtTFz9RIS823mAze+NbnBI8xiwdX3iqeQbcTYlvB04G9wyQw== dependencies: - "@typescript-eslint/types" "7.17.0" - "@typescript-eslint/visitor-keys" "7.17.0" + "@typescript-eslint/types" "8.0.0" + "@typescript-eslint/visitor-keys" "8.0.0" -"@typescript-eslint/type-utils@7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.17.0.tgz#c5da78feb134c9c9978cbe89e2b1a589ed22091a" - integrity sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA== +"@typescript-eslint/type-utils@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.0.0.tgz#facecaf0736bfe8394b9290382f300554cf90884" + integrity sha512-mJAFP2mZLTBwAn5WI4PMakpywfWFH5nQZezUQdSKV23Pqo6o9iShQg1hP2+0hJJXP2LnZkWPphdIq4juYYwCeg== dependencies: - "@typescript-eslint/typescript-estree" "7.17.0" - "@typescript-eslint/utils" "7.17.0" + "@typescript-eslint/typescript-estree" "8.0.0" + "@typescript-eslint/utils" "8.0.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.17.0.tgz#7ce8185bdf06bc3494e73d143dbf3293111b9cff" - integrity sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A== +"@typescript-eslint/types@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.0.0.tgz#7195ea9369fe5ee46b958d7ffca6bd26511cce18" + integrity sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw== -"@typescript-eslint/typescript-estree@7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz#dcab3fea4c07482329dd6107d3c6480e228e4130" - integrity sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw== +"@typescript-eslint/typescript-estree@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0.tgz#d172385ced7cb851a038b5c834c245a97a0f9cf6" + integrity sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg== dependencies: - "@typescript-eslint/types" "7.17.0" - "@typescript-eslint/visitor-keys" "7.17.0" + "@typescript-eslint/types" "8.0.0" + "@typescript-eslint/visitor-keys" "8.0.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -2493,22 +2292,22 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.17.0.tgz#815cd85b9001845d41b699b0ce4f92d6dfb84902" - integrity sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw== +"@typescript-eslint/utils@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.0.0.tgz#1794d6f4b37ec253172a173dc938ae68651b9b99" + integrity sha512-k/oS/A/3QeGLRvOWCg6/9rATJL5rec7/5s1YmdS0ZU6LHveJyGFwBvLhSRBv6i9xaj7etmosp+l+ViN1I9Aj/Q== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "7.17.0" - "@typescript-eslint/types" "7.17.0" - "@typescript-eslint/typescript-estree" "7.17.0" + "@typescript-eslint/scope-manager" "8.0.0" + "@typescript-eslint/types" "8.0.0" + "@typescript-eslint/typescript-estree" "8.0.0" -"@typescript-eslint/visitor-keys@7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz#680465c734be30969e564b4647f38d6cdf49bfb0" - integrity sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A== +"@typescript-eslint/visitor-keys@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0.tgz#224a67230190d267e6e78586bd7d8dfbd32ae4f3" + integrity sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA== dependencies: - "@typescript-eslint/types" "7.17.0" + "@typescript-eslint/types" "8.0.0" eslint-visitor-keys "^3.4.3" abab@^2.0.6: @@ -2548,10 +2347,19 @@ agent-base@6: dependencies: debug "4" -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" ajv@^6.12.4: version "6.12.6" @@ -2563,6 +2371,16 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0, ajv@^8.9.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + ajv@^8.0.1: version "8.6.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz" @@ -2585,6 +2403,11 @@ ansi-regex@^5.0.0, ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" @@ -2754,11 +2577,6 @@ arraybuffer.prototype.slice@^1.0.3: is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" @@ -2769,36 +2587,18 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -autoprefixer@10.4.1: - version "10.4.1" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.1.tgz" - integrity sha512-B3ZEG7wtzXDRCEFsan7HmR2AeNsxdJB0+sEC0Hc5/c2NbhJqPwuZm+tn233GBVw82L+6CtD6IPSfVruwKjfV3A== +autoprefixer@10.4.19: + version "10.4.19" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f" + integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== dependencies: - browserslist "^4.19.1" - caniuse-lite "^1.0.30001294" - fraction.js "^4.1.2" + browserslist "^4.23.0" + caniuse-lite "^1.0.30001599" + fraction.js "^4.3.7" normalize-range "^0.1.2" picocolors "^1.0.0" postcss-value-parser "^4.2.0" -autoprefixer@^9.8.6: - version "9.8.6" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz" - integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" - colorette "^1.2.1" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" - available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" @@ -2811,10 +2611,10 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -axe-core@4.3.5: - version "4.3.5" - resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz" - integrity sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA== +axe-core@4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.0.tgz#d9e56ab0147278272739a000880196cdfe113b59" + integrity sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g== axe-core@~4.8.4: version "4.8.4" @@ -2834,15 +2634,13 @@ babel-jest@^29.7.0: graceful-fs "^4.2.9" slash "^3.0.0" -babel-loader@8.2.3: - version "8.2.3" - resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz" - integrity sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw== +babel-loader@9.1.3: + version "9.1.3" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a" + integrity sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw== dependencies: - find-cache-dir "^3.3.1" - loader-utils "^1.4.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" + find-cache-dir "^4.0.0" + schema-utils "^4.0.0" babel-plugin-istanbul@^6.1.1: version "6.1.1" @@ -2865,15 +2663,6 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz" - integrity sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.0" - semver "^6.1.1" - babel-plugin-polyfill-corejs2@^0.4.10: version "0.4.11" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" @@ -2883,7 +2672,7 @@ babel-plugin-polyfill-corejs2@^0.4.10: "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.10.4: +babel-plugin-polyfill-corejs3@^0.10.1, babel-plugin-polyfill-corejs3@^0.10.4: version "0.10.4" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== @@ -2891,21 +2680,6 @@ babel-plugin-polyfill-corejs3@^0.10.4: "@babel/helper-define-polyfill-provider" "^0.6.1" core-js-compat "^3.36.1" -babel-plugin-polyfill-corejs3@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz" - integrity sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.0" - core-js-compat "^3.18.0" - -babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz" - integrity sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.0" - babel-plugin-polyfill-regenerator@^0.6.1: version "0.6.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" @@ -2939,11 +2713,6 @@ babel-preset-jest@^29.6.3: babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" -bail@^1.0.0: - version "1.0.5" - resolved "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz" - integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" @@ -2954,11 +2723,6 @@ balanced-match@^2.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz" integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -2984,15 +2748,12 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.12.0, browserslist@^4.17.5, browserslist@^4.19.1: - version "4.21.4" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" + fill-range "^7.1.1" browserslist@^4.23.0, browserslist@^4.23.1: version "4.23.2" @@ -3045,15 +2806,6 @@ callsites@^3.0.0: resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - camelcase@^5.3.1: version "5.3.1" resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" @@ -3064,15 +2816,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001294: - version "1.0.30001448" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001448.tgz" - integrity sha512-tq2YI+MJnooG96XpbTRYkBxLxklZPOdLmNIOdIhvf7SNJan6u5vCKum8iT7ZfCt70m1GPkuC7P3TtX6UuhupuA== - -caniuse-lite@^1.0.30001400: - version "1.0.30001486" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001486.tgz#56a08885228edf62cbe1ac8980f2b5dae159997e" - integrity sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg== +caniuse-lite@^1.0.30001599: + version "1.0.30001645" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001645.tgz#4c4b7427683dea1170a152cd1654be8d0da7bd71" + integrity sha512-GFtY2+qt91kzyMk6j48dJcwJVq5uTkk71XxE3RtScx7XWRLsO7bU44LOFkOZYR8w9YMS0UhPSYpN/6rAMImmLw== caniuse-lite@^1.0.30001640: version "1.0.30001643" @@ -3096,7 +2843,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3118,21 +2865,6 @@ char-regex@^1.0.2: resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz" - integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== - -character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz" - integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== - -character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz" - integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== - cheerio-select@^1.5.0: version "1.5.0" resolved "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz" @@ -3187,15 +2919,6 @@ classnames@2.5.1: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -3205,13 +2928,6 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-regexp@^2.1.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz" - integrity sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q== - dependencies: - is-regexp "^2.0.0" - co@^4.6.0: version "4.6.0" resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" @@ -3246,10 +2962,10 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== +colord@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== combined-stream@^1.0.8: version "1.0.8" @@ -3263,10 +2979,10 @@ commander@^2.19.0: resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +common-path-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" + integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== concat-map@0.0.1: version "0.0.1" @@ -3288,26 +3004,11 @@ concurrently@8.2.0: tree-kill "^1.2.2" yargs "^17.7.2" -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -core-js-compat@^3.18.0: - version "3.20.2" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.2.tgz" - integrity sha512-qZEzVQ+5Qh6cROaTPFLNS4lkvQ6mBzE3R6A6EEpssj7Zr2egMHgsy4XapdifqJDGC9CBiNv7s+ejI96rLNQFdg== - dependencies: - browserslist "^4.19.1" - semver "7.0.0" - core-js-compat@^3.36.1, core-js-compat@^3.37.1: version "3.37.1" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee" @@ -3315,16 +3016,15 @@ core-js-compat@^3.36.1, core-js-compat@^3.37.1: dependencies: browserslist "^4.23.0" -cosmiconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== +cosmiconfig@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" create-jest@^29.7.0: version "29.7.0" @@ -3355,6 +3055,11 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +css-functions-list@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.2.tgz#9a54c6dd8416ed25c1079cd88234e927526c1922" + integrity sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ== + css-select@^4.1.3: version "4.1.3" resolved "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz" @@ -3366,6 +3071,14 @@ css-select@^4.1.3: domutils "^2.6.0" nth-check "^2.0.0" +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + css-what@^5.0.0, css-what@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz" @@ -3463,25 +3176,19 @@ debug@4, debug@^4.3.2, debug@^4.3.4: dependencies: ms "2.1.2" -debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= +debug@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + ms "2.1.2" decimal.js@^10.4.2: version "10.4.3" @@ -3562,10 +3269,10 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -dependency-graph@^0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.9.0.tgz" - integrity sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w== +dependency-graph@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" + integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== dequal@^2.0.3: version "2.0.3" @@ -3611,14 +3318,6 @@ dom-accessibility-api@^0.6.3: resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== -dom-serializer@0: - version "0.2.2" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^1.0.1, dom-serializer@^1.3.2: version "1.3.2" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz" @@ -3628,11 +3327,6 @@ dom-serializer@^1.0.1, dom-serializer@^1.3.2: domhandler "^4.2.0" entities "^2.0.0" -domelementtype@1, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz" @@ -3645,13 +3339,6 @@ domexception@^4.0.0: dependencies: webidl-conversions "^7.0.0" -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - domhandler@^4.0.0, domhandler@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz" @@ -3659,14 +3346,6 @@ domhandler@^4.0.0, domhandler@^4.2.0: dependencies: domelementtype "^2.2.0" -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - domutils@^2.5.2, domutils@^2.6.0, domutils@^2.7.0: version "2.7.0" resolved "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz" @@ -3681,11 +3360,6 @@ dotenv@^16.3.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== -electron-to-chromium@^1.4.251: - version "1.4.387" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.387.tgz#9a93ef1bd01b5898436026401ea3cabb1dd17d7a" - integrity sha512-tutLf+alr1/0YqJwKPdstVvDLmxmLb5xNyDLNS0RZmenHcEYk9qKfpKDCVZEKJ00JVbnayJm1MZAbYhYDFpcOw== - electron-to-chromium@^1.4.820: version "1.5.0" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz#0d3123a9f09189b9c7ab4b5d6848d71b3c1fd0e8" @@ -3701,16 +3375,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - entities@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" @@ -3721,6 +3385,11 @@ entities@^4.4.0: resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + enzyme-shallow-equal@^1.0.0, enzyme-shallow-equal@^1.0.1: version "1.0.4" resolved "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz" @@ -4173,13 +3842,6 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execall@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz" - integrity sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow== - dependencies: - clone-regexp "^2.1.0" - exit@^0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" @@ -4196,11 +3858,6 @@ expect@^29.0.0, expect@^29.7.0: jest-message-util "^29.7.0" jest-util "^29.7.0" -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" @@ -4211,18 +3868,7 @@ fast-diff@^1.1.2: resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@^3.1.1, fast-glob@^3.2.5: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.2.9: +fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -4243,10 +3889,15 @@ fast-levenshtein@^2.0.6: resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fastest-levenshtein@^1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== +fast-uri@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" + integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== + +fastest-levenshtein@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: version "1.15.0" @@ -4269,13 +3920,6 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - file-entry-cache@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" @@ -4283,6 +3927,13 @@ file-entry-cache@^8.0.0: dependencies: flat-cache "^4.0.0" +file-entry-cache@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-9.0.0.tgz#4478e7ceaa5191fa9676a2daa7030211c31b1e7e" + integrity sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw== + dependencies: + flat-cache "^5.0.0" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -4290,14 +3941,20 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-cache-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2" + integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" + common-path-prefix "^3.0.0" + pkg-dir "^7.0.0" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" @@ -4315,10 +3972,18 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -fishery@1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/fishery/-/fishery-1.4.0.tgz" - integrity sha512-uzPsEWtoHluyqgk9hC/MzMbm42NPWmDWjbdzMRLuJ+jxmAHo+nDbiI3zk2S+HQFXme/VlNnPsNYZQBryrbCTLw== +find-up@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== + dependencies: + locate-path "^7.1.0" + path-exists "^5.0.0" + +fishery@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/fishery/-/fishery-2.2.2.tgz#94d3d9380295dd3ce555021e9353c5348b8beb77" + integrity sha512-jeU0nDhPHJkupmjX+r9niKgVMTBDB8X+U/pktoGHAiWOSyNlMd0HhmqnjrpjUOCDPJYaSSu4Ze16h6dZOKSp2w== dependencies: lodash.mergewith "^4.6.2" @@ -4327,14 +3992,6 @@ fizzy-ui-utils@^3.0.0: resolved "https://registry.yarnpkg.com/fizzy-ui-utils/-/fizzy-ui-utils-3.0.0.tgz#cc5e876eea263d3d92828a3144745dbd7b972fc8" integrity sha512-uJj38QFQiJ/KCio5tiZhwAjIbTXSIgzBCKdKVbaYfLS053F6z23Nb0o1ZoO9gnxOQWN7BCc35jsvrCtAq3gY9g== -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - flat-cache@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" @@ -4343,12 +4000,15 @@ flat-cache@^4.0.0: flatted "^3.2.9" keyv "^4.5.4" -flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== +flat-cache@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-5.0.0.tgz#26c4da7b0f288b408bb2b506b2cb66c240ddf062" + integrity sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ== + dependencies: + flatted "^3.3.1" + keyv "^4.5.4" -flatted@^3.2.9: +flatted@^3.2.9, flatted@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== @@ -4394,17 +4054,16 @@ formik@2.4.6: tiny-warning "^1.0.2" tslib "^2.0.0" -fraction.js@^4.1.2: - version "4.2.0" - resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" - integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== +fraction.js@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== -fs-extra@^9.0.0: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== +fs-extra@^11.0.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== dependencies: - at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" @@ -4424,10 +4083,10 @@ fsevents@^2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -full-icu@1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/full-icu/-/full-icu-1.4.0.tgz" - integrity sha512-pH8z7WVKJ3QR/8UoIOZupjRCYqpMFSxjPruYbPS8Ra19UGHuUEsnXP8+ny8o7KCF/AZcEkzJXAtGsveYbP17Uw== +full-icu@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/full-icu/-/full-icu-1.5.0.tgz#1543dcd1821fd5bed5048351cdf683a847518317" + integrity sha512-BxB2otKUSFyvENjbI8EtQscpiPOEnhrf5V4MVpa6PjzsrLmdKKUUhulbydsfKS4ve6cGXNVRLlrOjizby/ZfDA== dependencies: yauzl "^2.10.0" @@ -4518,10 +4177,10 @@ get-size@^3.0.0: resolved "https://registry.yarnpkg.com/get-size/-/get-size-3.0.0.tgz#00e39a8042a3de237b2fcf288eaf55d3f472417c" integrity sha512-Y8aiXLq4leR7807UY0yuKEwif5s3kbVp1nTv+i4jBeoUzByTLKkLWu/HorS6/pB+7gsB0o7OTogC8AoOOeT0Hw== -get-stdin@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz" - integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== +get-stdin@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" + integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== get-stream@^6.0.0: version "6.0.1" @@ -4619,18 +4278,6 @@ globalthis@^1.0.3: define-properties "^1.2.1" gopd "^1.0.1" -globby@^11.0.0, globby@^11.0.3: - version "11.0.4" - resolved "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -4643,6 +4290,18 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +globby@^14.0.0: + version "14.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-14.0.2.tgz#06554a54ccfe9264e5a9ff8eded46aa1e306482f" + integrity sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw== + dependencies: + "@sindresorhus/merge-streams" "^2.1.0" + fast-glob "^3.3.2" + ignore "^5.2.4" + path-type "^5.0.0" + slash "^5.1.0" + unicorn-magic "^0.1.0" + globjoin@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz" @@ -4657,13 +4316,6 @@ globule@~0.1.0: lodash "~1.0.1" minimatch "~0.2.11" -gonzales-pe@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz" - integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== - dependencies: - minimist "^1.2.5" - gopd@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" @@ -4686,11 +4338,6 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - harmony-reflect@^1.4.6: version "1.6.2" resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" @@ -4790,18 +4437,6 @@ hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: dependencies: react-is "^16.7.0" -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz" - integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== - dependencies: - lru-cache "^6.0.0" - html-element-map@^1.2.0: version "1.3.1" resolved "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz" @@ -4822,22 +4457,10 @@ html-escaper@^2.0.0: resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-tags@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz" - integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== - -htmlparser2@^3.10.0: - version "3.10.1" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" +html-tags@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== htmlparser2@^6.1.0: version "6.1.0" @@ -4885,12 +4508,7 @@ identity-obj-proxy@^3.0.0: dependencies: harmony-reflect "^1.4.6" -ignore@^5.1.4, ignore@^5.1.8: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -ignore@^5.2.0, ignore@^5.3.1: +ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== @@ -4902,17 +4520,17 @@ imagesloaded@^5.0.0: dependencies: ev-emitter "^2.1.2" -immer@^9.0.7: - version "9.0.7" - resolved "https://registry.npmjs.org/immer/-/immer-9.0.7.tgz" - integrity sha512-KGllzpbamZDvOIxnmJ0jI840g7Oikx58lBPWV0hUh7dtAyZpFqqrBZdKka5GlTwMTZ1Tjc/bKKW4VSFAt6BqMA== +immer@^10.0.3: + version "10.1.1" + resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.1.tgz#206f344ea372d8ea176891545ee53ccc062db7bc" + integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== immutable@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be" integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg== -import-fresh@^3.2.1: +import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -4920,11 +4538,6 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-lazy@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - import-local@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz" @@ -4956,7 +4569,7 @@ inherits@1: resolved "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz" integrity sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js= -inherits@2, inherits@^2.0.1, inherits@^2.0.3: +inherits@2: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4984,23 +4597,10 @@ internal-slot@^1.0.7: hasown "^2.0.0" side-channel "^1.0.4" -intl-tel-input@23.3.2: - version "23.3.2" - resolved "https://registry.yarnpkg.com/intl-tel-input/-/intl-tel-input-23.3.2.tgz#04424e0333cac86b350041a70c44905d052b79b2" - integrity sha512-OGgCogiQAWG2iLGKuU9eb57XnLE6gon7Mrk2G16JqDM0bE1/z8rqet5FXLFCx60g1k1bk9J4vC6zp4QKg4923g== - -is-alphabetical@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz" - integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== - -is-alphanumerical@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz" - integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" +intl-tel-input@23.7.4: + version "23.7.4" + resolved "https://registry.yarnpkg.com/intl-tel-input/-/intl-tel-input-23.7.4.tgz#cad7c67766c1d867b224192a1147871906c88600" + integrity sha512-ICvIhqrBHHi7YY3izBpU2NCSLAYHW/7swEIH6FHyu5p/XchHPYH2kvpsVSjIcCILHLQyjmxJQPWLzkLZp3v0nA== is-arguments@^1.1.1: version "1.1.1" @@ -5058,11 +4658,6 @@ is-boolean-object@^1.0.1, is-boolean-object@^1.1.0: dependencies: call-bind "^1.0.2" -is-buffer@^2.0.0: - version "2.0.5" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz" @@ -5113,11 +4708,6 @@ is-date-object@^1.0.1, is-date-object@^1.0.5: dependencies: has-tostringtag "^1.0.0" -is-decimal@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz" - integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -5161,11 +4751,6 @@ is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-hexadecimal@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz" - integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== - is-map@^2.0.1, is-map@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz" @@ -5196,15 +4781,10 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-obj@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-potential-custom-element-name@^1.0.1: version "1.0.1" @@ -5219,11 +4799,6 @@ is-regex@^1.0.5, is-regex@^1.1.3, is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-regexp@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz" - integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA== - is-set@^2.0.1, is-set@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz" @@ -5285,16 +4860,6 @@ is-typed-array@^1.1.13: dependencies: which-typed-array "^1.1.14" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - is-weakmap@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz" @@ -5861,14 +5426,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json5@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2, json5@^2.2.3: +json5@^2.2.3: version "2.2.3" resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -5897,7 +5455,7 @@ keyv@^4.5.4: dependencies: json-buffer "3.0.1" -kind-of@^6.0.2, kind-of@^6.0.3: +kind-of@^6.0.2: version "6.0.3" resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -5907,10 +5465,10 @@ kleur@^3.0.3: resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -known-css-properties@^0.21.0: - version "0.21.0" - resolved "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz" - integrity sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw== +known-css-properties@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.34.0.tgz#ccd7e9f4388302231b3f174a8b1d5b1f7b576cea" + integrity sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ== leven@^3.1.0: version "3.1.0" @@ -5925,25 +5483,16 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lilconfig@^2.0.5: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== +lilconfig@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb" + integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -loader-utils@^1.4.0: - version "1.4.2" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz" - integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" @@ -5958,6 +5507,13 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +locate-path@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== + dependencies: + p-locate "^6.0.0" + lodash-es@^4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" @@ -5998,24 +5554,11 @@ lodash.truncate@^4.4.2: resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -lodash@4.17.21, lodash@^3.5.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21, lodash@~1.0.1: +lodash@4.17.21, lodash@^3.5.0, lodash@^4.17.15, lodash@^4.17.21, lodash@~1.0.1: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -longest-streak@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz" - integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== - loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" @@ -6030,19 +5573,12 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - lz-string@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: +make-dir@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -6056,66 +5592,20 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz" - integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ== - mathml-tag-names@^2.1.3: version "2.1.3" resolved "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== -mdast-util-from-markdown@^0.8.0: - version "0.8.5" - resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz" - integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-string "^2.0.0" - micromark "~2.11.0" - parse-entities "^2.0.0" - unist-util-stringify-position "^2.0.0" - -mdast-util-to-markdown@^0.6.0: - version "0.6.5" - resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz" - integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ== - dependencies: - "@types/unist" "^2.0.0" - longest-streak "^2.0.0" - mdast-util-to-string "^2.0.0" - parse-entities "^2.0.0" - repeat-string "^1.0.0" - zwitch "^1.0.0" - -mdast-util-to-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz" - integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== -meow@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz" - integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize "^1.2.0" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" +meow@^13.2.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz#6b7d63f913f984063b3cc261b6e8800c4cd3474f" + integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA== merge-stream@^2.0.0: version "2.0.0" @@ -6127,14 +5617,6 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromark@~2.11.0: - version "2.11.4" - resolved "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz" - integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== - dependencies: - debug "^4.0.0" - parse-entities "^2.0.0" - micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -6143,6 +5625,14 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" +micromatch@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -6165,23 +5655,14 @@ min-indent@^1.0.0: resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@3.0.5, minimatch@^3.0.4, minimatch@^3.1.2, minimatch@^9.0.4, minimatch@~0.2.11: - version "3.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" - integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== +minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.1.2, minimatch@^9.0.4, minimatch@~0.2.11: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.1: version "1.2.6" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== @@ -6196,15 +5677,10 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -nanoclone@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz" - integrity sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA== - -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== natural-compare@^1.4.0: version "1.4.0" @@ -6238,31 +5714,6 @@ node-releases@^2.0.14: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== -node-releases@^2.0.6: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz" - integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg== - dependencies: - hosted-git-info "^4.0.1" - resolve "^1.20.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -6273,11 +5724,6 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== -normalize-selector@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz" - integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= - npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -6292,11 +5738,6 @@ nth-check@^2.0.0: dependencies: boolbase "^1.0.0" -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - nwsapi@^2.2.2: version "2.2.12" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.12.tgz#fb6af5c0ec35b27b4581eb3bbad34ec9e5c696f8" @@ -6441,6 +5882,13 @@ p-limit@^3.0.2, p-limit@^3.1.0: dependencies: yocto-queue "^0.1.0" +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" @@ -6455,6 +5903,13 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== + dependencies: + p-limit "^4.0.0" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" @@ -6467,19 +5922,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-entities@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz" - integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-json@^5.0.0, parse-json@^5.2.0: +parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -6513,6 +5956,11 @@ path-exists@^4.0.0: resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" @@ -6533,6 +5981,11 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +path-type@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-5.0.0.tgz#14b01ed7aea7ddf9c7c3f46181d4d04f9c785bb8" + integrity sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg== + pend@~1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" @@ -6568,13 +6021,20 @@ pirates@^4.0.4: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== -pkg-dir@^4.1.0, pkg-dir@^4.2.0: +pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" +pkg-dir@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" + integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== + dependencies: + find-up "^6.3.0" + playwright-core@1.40.0: version "1.40.0" resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.40.0.tgz#82f61e5504cb3097803b6f8bbd98190dd34bdf14" @@ -6594,45 +6054,31 @@ possible-typed-array-names@^1.0.0: resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== -postcss-cli@8.3.1: - version "8.3.1" - resolved "https://registry.npmjs.org/postcss-cli/-/postcss-cli-8.3.1.tgz" - integrity sha512-leHXsQRq89S3JC9zw/tKyiVV2jAhnfQe0J8VI4eQQbUjwIe0XxVqLrR+7UsahF1s9wi4GlqP6SJ8ydf44cgF2Q== +postcss-cli@11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-11.0.0.tgz#649f4b9af447501feb6cbca7f7505a132f90442b" + integrity sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA== dependencies: - chalk "^4.0.0" chokidar "^3.3.0" - dependency-graph "^0.9.0" - fs-extra "^9.0.0" - get-stdin "^8.0.0" - globby "^11.0.0" - postcss-load-config "^3.0.0" + dependency-graph "^0.11.0" + fs-extra "^11.0.0" + get-stdin "^9.0.0" + globby "^14.0.0" + picocolors "^1.0.0" + postcss-load-config "^5.0.0" postcss-reporter "^7.0.0" pretty-hrtime "^1.0.3" read-cache "^1.0.0" - slash "^3.0.0" - yargs "^16.0.0" - -postcss-html@^0.36.0: - version "0.36.0" - resolved "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz" - integrity sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw== - dependencies: - htmlparser2 "^3.10.0" - -postcss-less@^3.1.4: - version "3.1.4" - resolved "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz" - integrity sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA== - dependencies: - postcss "^7.0.14" + slash "^5.0.0" + yargs "^17.0.0" -postcss-load-config@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" - integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== +postcss-load-config@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-5.1.0.tgz#4ded23410da973e05edae9d41fa99bb5c1d5477f" + integrity sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA== dependencies: - lilconfig "^2.0.5" - yaml "^1.10.2" + lilconfig "^3.1.1" + yaml "^2.4.2" postcss-media-query-parser@^0.2.3: version "0.2.3" @@ -6652,27 +6098,20 @@ postcss-resolve-nested-selector@^0.1.1: resolved "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz" integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= -postcss-safe-parser@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz" - integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== - dependencies: - postcss "^7.0.26" +postcss-resolve-nested-selector@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.4.tgz#0068767902fb40f0e6cd7b24faee4fa4bc14a5da" + integrity sha512-R6vHqZWgVnTAPq0C+xjyHfEZqfIYboCBVSy24MjxEDm+tIh1BU4O6o7DP7AA7kHzf136d+Qc5duI4tlpHjixDw== -postcss-sass@^0.4.4: - version "0.4.4" - resolved "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz" - integrity sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg== - dependencies: - gonzales-pe "^4.3.0" - postcss "^7.0.21" +postcss-safe-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz#6273d4e5149e286db5a45bc6cf6eafcad464014a" + integrity sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg== -postcss-scss@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz" - integrity sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA== - dependencies: - postcss "^7.0.6" +postcss-scss@^4.0.9: + version "4.0.9" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.9.tgz#a03c773cd4c9623cb04ce142a52afcec74806685" + integrity sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A== postcss-selector-parser@^6.0.2: version "6.0.6" @@ -6682,49 +6121,32 @@ postcss-selector-parser@^6.0.2: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-selector-parser@^6.0.5: - version "6.0.8" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz" - integrity sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ== +postcss-selector-parser@^6.1.0, postcss-selector-parser@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz#5be94b277b8955904476a2400260002ce6c56e38" + integrity sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-sorting@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-5.0.1.tgz" - integrity sha512-Y9fUFkIhfrm6i0Ta3n+89j56EFqaNRdUKqXyRp6kvTcSXnmgEjaVowCXH+JBe9+YKWqd4nc28r2sgwnzJalccA== - dependencies: - lodash "^4.17.14" - postcss "^7.0.17" - -postcss-syntax@^0.36.2: - version "0.36.2" - resolved "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz" - integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w== +postcss-sorting@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/postcss-sorting/-/postcss-sorting-8.0.2.tgz#6393385ece272baf74bee9820fb1b58098e4eeca" + integrity sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q== postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@8.4.31: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.31, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.6: - version "7.0.36" - resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz" - integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== +postcss@8.4.40, postcss@^8.4.32, postcss@^8.4.40: + version "8.4.40" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.40.tgz#eb81f2a4dd7668ed869a6db25999e02e9ad909d8" + integrity sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q== dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" + nanoid "^3.3.7" + picocolors "^1.0.1" + source-map-js "^1.2.0" prelude-ls@^1.2.1: version "1.2.1" @@ -6738,10 +6160,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz" - integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== +prettier@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" + integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== pretty-format@^27.0.2: version "27.0.6" @@ -6789,10 +6211,10 @@ prop-types@15.8.1, prop-types@^15.5.0, prop-types@^15.7.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" -property-expr@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/property-expr/-/property-expr-2.0.4.tgz" - integrity sha512-sFPkHQjVKheDNnPvotjQmm3KD3uk1fWKUN7CrpdbwmUx3CrG3QiM8QpTSimvig5vTXmTvjz7+TDvXOI9+4rkcg== +property-expr@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8" + integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== psl@^1.1.33: version "1.9.0" @@ -6824,11 +6246,6 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - raf@^3.4.1: version "3.4.1" resolved "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz" @@ -6928,13 +6345,6 @@ react-table@7.8.0: resolved "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz" integrity sha512-hNaz4ygkZO4bESeFfnfOft73iBUj8K5oKi1EcSHPAibEydfsX2MyU6Z8KCr3mv3C9Kqqh71U+DhZkFvibbnPbA== -react-useportal@1.0.16: - version "1.0.16" - resolved "https://registry.npmjs.org/react-useportal/-/react-useportal-1.0.16.tgz" - integrity sha512-sbmixDvJvWAS2YaGB4dA6e7EA08MXTjQxjcujC4WYLWSJOR2BsF3PnVAlJ9N70dDC/Z6zjgs8IKiaPzmGYHcXQ== - dependencies: - use-ssr "^1.0.22" - react-useportal@1.0.19: version "1.0.19" resolved "https://registry.yarnpkg.com/react-useportal/-/react-useportal-1.0.19.tgz#473168f1a1c4009833d49a46b05d974a5850a166" @@ -6956,34 +6366,6 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -readable-stream@^3.1.1: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -6999,17 +6381,15 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -redux-thunk@^2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz" - integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== +redux-thunk@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3" + integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw== -redux@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/redux/-/redux-4.1.2.tgz" - integrity sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw== - dependencies: - "@babel/runtime" "^7.9.2" +redux@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b" + integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== reflect.getprototypeof@^1.0.4: version "1.0.6" @@ -7091,34 +6471,6 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" -remark-parse@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz" - integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw== - dependencies: - mdast-util-from-markdown "^0.8.0" - -remark-stringify@^9.0.0: - version "9.0.1" - resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz" - integrity sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg== - dependencies: - mdast-util-to-markdown "^0.6.0" - -remark@^13.0.0: - version "13.0.0" - resolved "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz" - integrity sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA== - dependencies: - remark-parse "^9.0.0" - remark-stringify "^9.0.0" - unified "^9.1.0" - -repeat-string@^1.0.0: - version "1.6.1" - resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -7134,10 +6486,10 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -reselect@^4.1.5: - version "4.1.5" - resolved "https://registry.npmjs.org/reselect/-/reselect-4.1.5.tgz" - integrity sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ== +reselect@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.1.tgz#c766b1eb5d558291e5e550298adb0becc24bb72e" + integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w== resolve-cwd@^3.0.0: version "3.0.0" @@ -7161,14 +6513,6 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.10.0, resolve@^1.20.0: - version "1.20.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - resolve@^1.14.2: version "1.21.0" resolved "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz" @@ -7178,6 +6522,14 @@ resolve@^1.14.2: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.20.0: + version "1.20.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + resolve@^1.22.8: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" @@ -7206,13 +6558,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - rst-selector-parser@^2.2.3: version "2.2.3" resolved "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz" @@ -7245,16 +6590,6 @@ safe-array-concat@^1.1.2: has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - safe-identifier@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/safe-identifier/-/safe-identifier-0.4.2.tgz#cf6bfca31c2897c588092d1750d30ef501d59fcb" @@ -7306,37 +6641,21 @@ scheduler@^0.23.2: dependencies: loose-envify "^1.1.0" -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== +schema-utils@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -"semver@2 || 3 || 4 || 5": - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" @@ -7400,16 +6719,16 @@ side-channel@^1.0.6: get-intrinsic "^1.2.4" object-inspect "^1.13.1" -signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" @@ -7420,6 +6739,11 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slash@^5.0.0, slash@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" + integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== + slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" @@ -7434,11 +6758,16 @@ smartquotes@2.3.2: resolved "https://registry.npmjs.org/smartquotes/-/smartquotes-2.3.2.tgz" integrity sha512-0R6YJ5hLpDH4mZR7N5eZ12oCMLspvGOHL9A9SEm2e3b/CQmQidekW4SWSKEmor/3x6m3NCBBEqLzikcZC9VJNQ== -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: +"source-map-js@>=0.6.2 <2.0.0": version "1.0.2" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.0.1, source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" @@ -7447,11 +6776,6 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -7462,37 +6786,6 @@ spawn-command@0.0.2: resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.9" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz" - integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== - -specificity@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz" - integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" @@ -7520,7 +6813,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7608,13 +6901,6 @@ string.prototype.trimstart@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -7622,6 +6908,13 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-ansi@~0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz" @@ -7649,41 +6942,37 @@ strip-json-comments@^3.1.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -style-search@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz" - integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= - -stylelint-config-prettier@8.0.2: - version "8.0.2" - resolved "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-8.0.2.tgz" - integrity sha512-TN1l93iVTXpF9NJstlvP7nOu9zY2k+mN0NSFQ/VEGz15ZIP9ohdDZTtCWHs5LjctAhSAzaILULGbgiM0ItId3A== - -stylelint-config-recommended@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz" - integrity sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ== +stylelint-config-prettier@9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/stylelint-config-prettier/-/stylelint-config-prettier-9.0.5.tgz#9f78bbf31c7307ca2df2dd60f42c7014ee9da56e" + integrity sha512-U44lELgLZhbAD/xy/vncZ2Pq8sh2TnpiPvo38Ifg9+zeioR+LAkHu0i6YORIOxFafZoVg0xqQwex6e6F25S5XA== -stylelint-config-standard@20.0.0: - version "20.0.0" - resolved "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-20.0.0.tgz" - integrity sha512-IB2iFdzOTA/zS4jSVav6z+wGtin08qfj+YyExHB3LF9lnouQht//YyB0KZq9gGz5HNPkddHOzcY8HsUey6ZUlA== +stylelint-config-recommended-scss@14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.0.0.tgz#d3482c9817dada80b5ec01685b38fc8af8f7263f" + integrity sha512-HDvpoOAQ1RpF+sPbDOT2Q2/YrBDEJDnUymmVmZ7mMCeNiFSdhRdyGEimBkz06wsN+HaFwUh249gDR+I9JR7Onw== dependencies: - stylelint-config-recommended "^3.0.0" + postcss-scss "^4.0.9" + stylelint-config-recommended "^14.0.0" + stylelint-scss "^6.0.0" -stylelint-order@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/stylelint-order/-/stylelint-order-4.1.0.tgz" - integrity sha512-sVTikaDvMqg2aJjh4r48jsdfmqLT+nqB1MOsaBnvM3OwLx4S+WXcsxsgk5w18h/OZoxZCxuyXMh61iBHcj9Qiw== +stylelint-config-recommended@^14.0.0: + version "14.0.1" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz#d25e86409aaf79ee6c6085c2c14b33c7e23c90c6" + integrity sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg== + +stylelint-order@6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/stylelint-order/-/stylelint-order-6.0.4.tgz#3e80d876c61a98d2640de181433686f24284748b" + integrity sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA== dependencies: - lodash "^4.17.15" - postcss "^7.0.31" - postcss-sorting "^5.0.1" + postcss "^8.4.32" + postcss-sorting "^8.0.2" -stylelint-prettier@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/stylelint-prettier/-/stylelint-prettier-1.2.0.tgz" - integrity sha512-/MYz6W2CNgKHblPzPtk7cybu8H5dGG3c2GevL64RButERj1uJg4SdBIIat1hMfDOmN6QQpldc6tCc//ZAWh9WQ== +stylelint-prettier@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/stylelint-prettier/-/stylelint-prettier-5.0.2.tgz#82c0a813d8981fe094fca28126fc88cee22fa789" + integrity sha512-qJ+BN+1T2ZcKz9WIrv0x+eFGHzSUnXfXd5gL///T6XoJvr3D8/ztzz2fhtmXef7Vb8P33zBXmLTTveByr0nwBw== dependencies: prettier-linter-helpers "^1.0.0" @@ -7698,66 +6987,61 @@ stylelint-scss@3.21.0: postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -stylelint@13.13.1: - version "13.13.1" - resolved "https://registry.npmjs.org/stylelint/-/stylelint-13.13.1.tgz" - integrity sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ== +stylelint-scss@^6.0.0: + version "6.4.1" + resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-6.4.1.tgz#78a197bbcdf9a61b7365769a9a42dddc722a24c5" + integrity sha512-+clI2bQC2FPOt06ZwUlXZZ95IO2C5bKTP0GLN1LNQPVvISfSNcgMKv/VTwym1mK9vnqhHbOk8lO4rj4nY7L9pw== dependencies: - "@stylelint/postcss-css-in-js" "^0.37.2" - "@stylelint/postcss-markdown" "^0.36.2" - autoprefixer "^9.8.6" + known-css-properties "^0.34.0" + postcss-media-query-parser "^0.2.3" + postcss-resolve-nested-selector "^0.1.1" + postcss-selector-parser "^6.1.0" + postcss-value-parser "^4.2.0" + +stylelint@16.8.1: + version "16.8.1" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-16.8.1.tgz#7d4b2d7922771dd0514446a66f04e954f1dfa444" + integrity sha512-O8aDyfdODSDNz/B3gW2HQ+8kv8pfhSu7ZR7xskQ93+vI6FhKKGUJMQ03Ydu+w3OvXXE0/u4hWU4hCPNOyld+OA== + dependencies: + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/media-query-list-parser" "^2.1.13" + "@csstools/selector-specificity" "^3.1.1" + "@dual-bundle/import-meta-resolve" "^4.1.0" balanced-match "^2.0.0" - chalk "^4.1.1" - cosmiconfig "^7.0.0" - debug "^4.3.1" - execall "^2.0.0" - fast-glob "^3.2.5" - fastest-levenshtein "^1.0.12" - file-entry-cache "^6.0.1" - get-stdin "^8.0.0" + colord "^2.9.3" + cosmiconfig "^9.0.0" + css-functions-list "^3.2.2" + css-tree "^2.3.1" + debug "^4.3.6" + fast-glob "^3.3.2" + fastest-levenshtein "^1.0.16" + file-entry-cache "^9.0.0" global-modules "^2.0.0" - globby "^11.0.3" + globby "^11.1.0" globjoin "^0.1.4" - html-tags "^3.1.0" - ignore "^5.1.8" - import-lazy "^4.0.0" + html-tags "^3.3.1" + ignore "^5.3.1" imurmurhash "^0.1.4" - known-css-properties "^0.21.0" - lodash "^4.17.21" - log-symbols "^4.1.0" + is-plain-object "^5.0.0" + known-css-properties "^0.34.0" mathml-tag-names "^2.1.3" - meow "^9.0.0" - micromatch "^4.0.4" - normalize-selector "^0.2.0" - postcss "^7.0.35" - postcss-html "^0.36.0" - postcss-less "^3.1.4" - postcss-media-query-parser "^0.2.3" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^4.0.2" - postcss-sass "^0.4.4" - postcss-scss "^2.1.1" - postcss-selector-parser "^6.0.5" - postcss-syntax "^0.36.2" - postcss-value-parser "^4.1.0" + meow "^13.2.0" + micromatch "^4.0.7" + normalize-path "^3.0.0" + picocolors "^1.0.1" + postcss "^8.4.40" + postcss-resolve-nested-selector "^0.1.4" + postcss-safe-parser "^7.0.0" + postcss-selector-parser "^6.1.1" + postcss-value-parser "^4.2.0" resolve-from "^5.0.0" - slash "^3.0.0" - specificity "^0.4.1" - string-width "^4.2.2" - strip-ansi "^6.0.0" - style-search "^0.1.0" - sugarss "^2.0.0" + string-width "^4.2.3" + strip-ansi "^7.1.0" + supports-hyperlinks "^3.0.0" svg-tags "^1.0.0" - table "^6.6.0" - v8-compile-cache "^2.3.0" - write-file-atomic "^3.0.3" - -sugarss@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz" - integrity sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ== - dependencies: - postcss "^7.0.2" + table "^6.8.2" + write-file-atomic "^5.0.1" supports-color@^4.0.0: version "4.5.0" @@ -7773,14 +7057,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -7794,6 +7071,14 @@ supports-color@^8.0.0, supports-color@^8.1.1: dependencies: has-flag "^4.0.0" +supports-hyperlinks@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz#c711352a5c89070779b4dad54c05a2f14b15c94b" + integrity sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" @@ -7809,10 +7094,10 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.6.0: - version "6.7.5" - resolved "https://registry.npmjs.org/table/-/table-6.7.5.tgz" - integrity sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw== +table@^6.8.2: + version "6.8.2" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" + integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -7839,6 +7124,11 @@ thenby@^1.3.4: resolved "https://registry.yarnpkg.com/thenby/-/thenby-1.3.4.tgz#81581f6e1bb324c6dedeae9bfc28e59b1a2201cc" integrity sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ== +tiny-case@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03" + integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== + tiny-warning@^1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" @@ -7893,16 +7183,6 @@ tree-kill@^1.2.2: resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -trough@^1.0.0: - version "1.0.5" - resolved "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz" - integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== - ts-api-utils@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" @@ -7930,25 +7210,15 @@ type-detect@4.0.8: resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - type-fest@^0.21.3: version "0.21.3" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== typed-array-buffer@^1.0.2: version "1.0.2" @@ -7994,26 +7264,19 @@ typed-array-length@^1.0.6: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript-eslint@^7.17.0: - version "7.17.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-7.17.0.tgz#cc5eddafd38b3c1fe8a52826469d5c78700b7aa7" - integrity sha512-spQxsQvPguduCUfyUvLItvKqK3l8KJ/kqs5Pb/URtzQ5AC53Z6us32St37rpmlt2uESG23lOFpV4UErrmy4dZQ== +typescript-eslint@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.0.0.tgz#4d9098755d617d723853563a7ea41d2c6b1c3943" + integrity sha512-yQWBJutWL1PmpmDddIOl9/Mi6vZjqNCjqSGBMQ4vsc2Aiodk0SnbQQWPXbSy0HNuKCuGkw1+u4aQ2mO40TdhDQ== dependencies: - "@typescript-eslint/eslint-plugin" "7.17.0" - "@typescript-eslint/parser" "7.17.0" - "@typescript-eslint/utils" "7.17.0" + "@typescript-eslint/eslint-plugin" "8.0.0" + "@typescript-eslint/parser" "8.0.0" + "@typescript-eslint/utils" "8.0.0" -typescript@5.4.5: - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== +typescript@5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== unbox-primitive@^1.0.1: version "1.0.1" @@ -8063,6 +7326,11 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +unicorn-magic@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" + integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== + unidragger@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/unidragger/-/unidragger-3.0.1.tgz#72b2e63f2571ca6e95a884b139dfec764e08c7f3" @@ -8070,37 +7338,6 @@ unidragger@^3.0.0: dependencies: ev-emitter "^2.0.0" -unified@^9.1.0: - version "9.2.1" - resolved "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz" - integrity sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" - -unist-util-find-all-after@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz" - integrity sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ== - dependencies: - unist-util-is "^4.0.0" - -unist-util-is@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz" - integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== - -unist-util-stringify-position@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz" - integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== - dependencies: - "@types/unist" "^2.0.2" - universalify@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" @@ -8111,14 +7348,6 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -update-browserslist-db@^1.0.9: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - update-browserslist-db@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" @@ -8147,31 +7376,21 @@ url-polyfill@1.1.12: resolved "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.12.tgz" integrity sha512-mYFmBHCapZjtcNHW0MDq9967t+z4Dmg5CJ0KqysK3+ZbyoNOWQHksGCTWwDhxGXllkWlOc10Xfko6v4a3ucM6A== -url-search-params-polyfill@8.1.1: - version "8.1.1" - resolved "https://registry.npmjs.org/url-search-params-polyfill/-/url-search-params-polyfill-8.1.1.tgz" - integrity sha512-KmkCs6SjE6t4ihrfW9JelAPQIIIFbJweaaSLTh/4AO+c58JlDcb+GbdPt8yr5lRcFg4rPswRFRRhBGpWwh0K/Q== - -use-ssr@^1.0.22: - version "1.0.24" - resolved "https://registry.npmjs.org/use-ssr/-/use-ssr-1.0.24.tgz" - integrity sha512-0MFps7ezL57/3o0yl4CvrHLlp9z20n1rQZV/lSRz7if+TUoM6POU1XdOvEjIgjgKeIhTEye1U0khrIYWCTWw4g== +url-search-params-polyfill@8.2.5: + version "8.2.5" + resolved "https://registry.yarnpkg.com/url-search-params-polyfill/-/url-search-params-polyfill-8.2.5.tgz#2d31de6a2140c9b9cf6ee036fe0be07dd2644674" + integrity sha512-FOEojW4XReTmtZOB7xqSHmJZhrNTmClhBriwLTmle4iA7bwuCo6ldSfbtsFSb8bTf3E0a3XpfonAdaur9vqq8A== use-ssr@^1.0.25: version "1.0.25" resolved "https://registry.yarnpkg.com/use-ssr/-/use-ssr-1.0.25.tgz#c7f54b59d6e52db26749b1d4115a650101a190bd" integrity sha512-VYF8kJKI+X7+U4XgGoUER2BUl0vIr+8OhlIhyldgSGE0KHMoDRXPvWeHUUeUktq7ACEOVLzXGq1+QRxcvtwvyQ== -util-deprecate@^1.0.1, util-deprecate@^1.0.2: +util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -v8-compile-cache@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - v8-to-istanbul@^9.0.1: version "9.3.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" @@ -8181,14 +7400,6 @@ v8-to-istanbul@^9.0.1: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^2.0.0" -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - vanilla-framework@4.14.0: version "4.14.0" resolved "https://registry.yarnpkg.com/vanilla-framework/-/vanilla-framework-4.14.0.tgz#dca425c806462179467030ac30ef496997e2d8cb" @@ -8206,24 +7417,6 @@ verbalize@^0.1.2: dependencies: chalk "~0.4.0" -vfile-message@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz" - integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^2.0.0" - -vfile@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz" - integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== - dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^2.0.0" - vfile-message "^2.0.0" - w3c-xmlserializer@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" @@ -8382,16 +7575,6 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - write-file-atomic@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" @@ -8400,6 +7583,14 @@ write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" +write-file-atomic@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + ws@^8.11.0: version "8.18.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" @@ -8425,40 +7616,17 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0, yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yaml@^2.4.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.0.tgz#c6165a721cf8000e91c36490a41d7be25176cf5d" + integrity sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw== yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.0.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.3.1, yargs@^17.7.2: +yargs@^17.0.0, yargs@^17.3.1, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -8484,20 +7652,17 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -yup@0.32.11: - version "0.32.11" - resolved "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz" - integrity sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg== +yocto-queue@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" + integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== + +yup@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/yup/-/yup-1.4.0.tgz#898dcd660f9fb97c41f181839d3d65c3ee15a43e" + integrity sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg== dependencies: - "@babel/runtime" "^7.15.4" - "@types/lodash" "^4.14.175" - lodash "^4.17.21" - lodash-es "^4.17.21" - nanoclone "^0.2.1" - property-expr "^2.0.4" + property-expr "^2.0.5" + tiny-case "^1.0.3" toposort "^2.0.2" - -zwitch@^1.0.0: - version "1.0.5" - resolved "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz" - integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== + type-fest "^2.19.0"