diff --git a/assets/apps/components/config/custom-plugins.js b/assets/apps/components/config/custom-plugins.js new file mode 100644 index 0000000000..26b9319401 --- /dev/null +++ b/assets/apps/components/config/custom-plugins.js @@ -0,0 +1,84 @@ +const path = require('path'); + +/** + * This plugin appends the non-entrypoint JS chunk file names to the asset files generated by the DependencyExtractionWebpackPlugin. + * + * This mostly used to load translation files for the non-entrypoint JS chunks. + */ +class ChunksNameAssetAppendPlugin { + apply(compiler) { + compiler.hooks.compilation.tap( + 'EntrypointChunksPlugin', + (compilation) => { + compilation.hooks.processAssets.tapAsync( + { + name: 'EntrypointChunksPlugin', + stage: compiler.webpack.Compilation + .PROCESS_ASSETS_STAGE_ANALYSE, + }, + (assets, callback) => { + // Get entrypoint names + const entrypoints = Array.from( + compilation.entrypoints.keys() + ); + + // Collecting non-entrypoint JS chunk file names + const jsChunkFiles = Object.keys(assets).filter( + (file) => + file.endsWith('.js') && + !entrypoints.includes( + path.basename(file, '.js') + ) + ); + + if (jsChunkFiles.length === 0) { + callback(); + return; + } + + // Manually constructing the array string for PHP + const jsChunkFilesArrayString = + 'array(' + + jsChunkFiles.map((file) => `'${file}'`).join(', ') + + ')'; + + // Process each asset + for (const assetName in assets) { + if (assetName.endsWith('.asset.php')) { + // Modify asset content + const assetContent = assets[assetName].source(); + const modifiedContent = assetContent.replace( + ' ${jsChunkFilesArrayString},` + ); + + /* eslint-disable no-console */ + console.log( + '\n\x1b[35m%s\x1b[0m \x1b[0m%s\x1b[0m \x1b[36m%s\x1b[0m \x1b[33m%s\x1b[0m\n', + '[Neve Webpack Plugin][ChunksNameAssetAppendPlugin]', + assetName, + 'has been changed to include the following file chunks name as array:', + jsChunkFilesArrayString + ); + + // Updating the asset in the compilation + compilation.updateAsset( + assetName, + new compiler.webpack.sources.RawSource( + modifiedContent + ) + ); + } + } + + callback(); + } + ); + } + ); + } +} + +module.exports = { + ChunksNameAssetAppendPlugin, +}; diff --git a/assets/apps/components/config/webpack.config.js b/assets/apps/components/config/webpack.config.js index 9c25fa2200..fa85ec59eb 100644 --- a/assets/apps/components/config/webpack.config.js +++ b/assets/apps/components/config/webpack.config.js @@ -1,5 +1,6 @@ const DependencyExtractionWebpackPlugin = require('@wordpress/dependency-extraction-webpack-plugin'); const config = require('@wordpress/scripts/config/webpack.config'); +const customPlugins = require('./custom-plugins'); const plugins = [ ...config.plugins.filter( @@ -19,6 +20,7 @@ const plugins = [ } }, }), + new customPlugins.ChunksNameAssetAppendPlugin(), ]; module.exports = (env) => { diff --git a/assets/apps/components/package.json b/assets/apps/components/package.json index 314474f3e3..d1ffa5fb6d 100644 --- a/assets/apps/components/package.json +++ b/assets/apps/components/package.json @@ -1,6 +1,6 @@ { "name": "@neve-wp/components", - "version": "0.0.51", + "version": "0.0.54", "description": "Neve React Components", "author": "themeisle ", "license": "GPL-2.0-or-later", diff --git a/assets/apps/components/src/Common/DropdownFix.js b/assets/apps/components/src/Common/DropdownFix.js index 01a3ad7a7a..ee15f07dc0 100644 --- a/assets/apps/components/src/Common/DropdownFix.js +++ b/assets/apps/components/src/Common/DropdownFix.js @@ -28,7 +28,10 @@ function useObservableState(initialState, onStateChange) { } /** - * This monitors all events across opened popver components + * This monitors all events across opened popover components + * + * @param {any} ref - The ref of the popover component. + * @param {any} callback - The callback function to execute. */ function useOutsideClickHook(ref, callback) { useEffect(() => { diff --git a/assets/apps/components/src/Common/icons.js b/assets/apps/components/src/Common/icons.js index d4df3e6d66..370f6d9cef 100644 --- a/assets/apps/components/src/Common/icons.js +++ b/assets/apps/components/src/Common/icons.js @@ -1,5 +1,49 @@ const getIcons = (size) => { return { + 'apple-music': ( + + + + + + + + + ), 'behance-square': ( { ), + 'twitter-x': ( + + + + ), 'vimeo-square': ( ), diff --git a/assets/apps/customizer-controls/src/@types/utils.d.ts b/assets/apps/customizer-controls/src/@types/utils.d.ts index 37b02ae15e..7f15b3b0dc 100644 --- a/assets/apps/customizer-controls/src/@types/utils.d.ts +++ b/assets/apps/customizer-controls/src/@types/utils.d.ts @@ -104,6 +104,52 @@ type BuilderActions = { updateSidebarItems: () => void; }; +type TrackingData = { + block?: string; + env?: string; + action?: string; + feature?: string; + groupID?: string; + featureComponent?: string; + featureValue?: string | number | Record; + hasOpenAIKey?: boolean; + usedTheme?: string; +}; + +type EventResponse = { + error?: string; + success?: boolean; + response?: any; +}; + +type EventOptions = { + directSave?: boolean; + consent?: boolean; + refreshTimer?: boolean; + sendNow?: boolean; + ignoreLimit?: boolean; +}; + +type EventTrackingAccumulatorWithPlugin = { + add: (data: TrackingData, options?: EventOptions) => string; + set: (key: string, data: TrackingData, options?: EventOptions) => void; + base: EventTrackingAccumulator; +}; + +interface EventTrackingAccumulator { + subscribe(callback: (response: EventResponse) => void): () => void; + hasConsent(): boolean; + sendBulkTracking(payload: Array): Promise; + trkMetadata(data: TrackingData): TrackingData; + with(pluginSlug: string): EventTrackingAccumulatorWithPlugin; + uploadEvents(): Promise; + sendIfLimitReached(): Promise | undefined; + start(): void; + stop(): void; + refreshTimer(): void; + clone(): EventTrackingAccumulator; +} + declare global { interface Window { wp: StringObjectKeys; @@ -129,6 +175,7 @@ declare global { }; }; NeveProReactCustomize: undefined | StringObjectKeys; + tiTrk?: EventTrackingAccumulator; } } diff --git a/assets/apps/customizer-controls/src/builder/components/BuilderItem.tsx b/assets/apps/customizer-controls/src/builder/components/BuilderItem.tsx index 1fcce4371d..b72e95657e 100644 --- a/assets/apps/customizer-controls/src/builder/components/BuilderItem.tsx +++ b/assets/apps/customizer-controls/src/builder/components/BuilderItem.tsx @@ -51,6 +51,12 @@ const BuilderItem: React.FC = (props) => { return a.id < b.id ? -1 : 1; }) ); + + window.tiTrk?.with('neve').set(`${componentId}_removed`, { + feature: builder + '_builder', + featureComponent: 'component-removed', + featureValue: { row, slot, item: componentId }, + }); }; const iconSize = 18; diff --git a/assets/apps/customizer-controls/src/builder/components/ComponentsPopover.tsx b/assets/apps/customizer-controls/src/builder/components/ComponentsPopover.tsx index 9abeeabb46..5d4ef6ee5a 100644 --- a/assets/apps/customizer-controls/src/builder/components/ComponentsPopover.tsx +++ b/assets/apps/customizer-controls/src/builder/components/ComponentsPopover.tsx @@ -36,6 +36,12 @@ const ComponentsPopover: React.FC = ({ nextItems.push({ id: itemId }); updateLayout(rowId, slotId, nextItems); setSidebarItems(sidebarItems.filter((i) => i.id !== itemId)); + + window.tiTrk?.with('neve').set(`${itemId}_added`, { + feature: builder + '_builder', + featureComponent: 'component-added', + featureValue: { row: rowId, slot: slotId, item: itemId }, + }); closePopup(); }; diff --git a/assets/apps/customizer-controls/src/builder/scss/_rows.scss b/assets/apps/customizer-controls/src/builder/scss/_rows.scss index 7de0bfbe0d..4ca36afa77 100644 --- a/assets/apps/customizer-controls/src/builder/scss/_rows.scss +++ b/assets/apps/customizer-controls/src/builder/scss/_rows.scss @@ -81,10 +81,25 @@ } .row.sidebar .row-inner { - width: 200px; + width: 210px; .droppable-wrap { height: 100%; + + max-height: 170px; + overflow-x: hidden; + overflow-y: auto; + + &::-webkit-scrollbar { + width: 10px; + } + + &::-webkit-scrollbar-track { + background: #D9D9D9; + } + &::-webkit-scrollbar-thumb { + background: #888; + } } .droppable { @@ -189,6 +204,13 @@ &:hover, &.has-popover { .open-popover { opacity: .25; - } + } } } + +/** + * Fix for the popover not being visible when it is inside a container with overflow. + */ +.rows-wrapper .vertical-rows .droppable-wrap.has-popover > .components-popover { + position: fixed !important; +} diff --git a/assets/apps/customizer-controls/src/repeater/RepeaterItemContent.js b/assets/apps/customizer-controls/src/repeater/RepeaterItemContent.js index c8e5770029..8064bdf607 100644 --- a/assets/apps/customizer-controls/src/repeater/RepeaterItemContent.js +++ b/assets/apps/customizer-controls/src/repeater/RepeaterItemContent.js @@ -3,6 +3,7 @@ import { SelectControl, TextControl, ToggleControl, + TextareaControl, } from '@wordpress/components'; import IconSelector from './IconSelector'; import { getIcons, ColorControl } from '@neve-wp/components'; @@ -74,6 +75,15 @@ const RepeaterItemContent = ({ key={key + index} /> ); + case 'textarea': + return ( + changeContent(key, newData)} + key={key + index} + /> + ); case 'icon': return ( { setValue(e.target.value); + if (slug === 'typekit_id') { + window.tiTrk?.with('neve').add({ + feature: 'typekit-fonts', + featureComponent: 'typekit-id', + featureValue: 'enabled', + }); + } }} />
diff --git a/assets/apps/dashboard/src/Components/Options/MultiSelect.js b/assets/apps/dashboard/src/Components/Options/MultiSelect.js index 4700ec9654..9f40ac5ad1 100644 --- a/assets/apps/dashboard/src/Components/Options/MultiSelect.js +++ b/assets/apps/dashboard/src/Components/Options/MultiSelect.js @@ -19,6 +19,11 @@ const MultiSelectOption = ({ choices={choices} currentValue={getOption(slug) || ['category']} onChange={(value) => { + window.tiTrk?.with('neve').set(slug, { + feature: 'module-settings', + featureComponent: slug, + featureValue: value, + }); changeSetting(slug, value).then((r) => { if (r.success) { changeOption(slug, value); diff --git a/assets/apps/dashboard/src/Components/Options/Select.js b/assets/apps/dashboard/src/Components/Options/Select.js index 3a07006af6..6f117d3112 100644 --- a/assets/apps/dashboard/src/Components/Options/Select.js +++ b/assets/apps/dashboard/src/Components/Options/Select.js @@ -18,6 +18,11 @@ const Select = ({ label={label} value={getOption(slug) || 'css'} onChange={(value) => { + window.tiTrk?.with('neve').set(slug, { + feature: 'module-settings', + featureComponent: slug, + featureValue: value, + }); changeSetting(slug, value).then((r) => { if (r.success) { changeOption(slug, value); diff --git a/assets/apps/dashboard/src/Components/Options/Toggle.js b/assets/apps/dashboard/src/Components/Options/Toggle.js index 2406702295..1d7ca3c598 100644 --- a/assets/apps/dashboard/src/Components/Options/Toggle.js +++ b/assets/apps/dashboard/src/Components/Options/Toggle.js @@ -22,6 +22,11 @@ const Toggle = ({ label={label} onChange={(value) => { setLoading(true); + window.tiTrk?.with('neve').set(slug, { + feature: 'module-settings', + featureComponent: slug, + featureValue: value, + }); changeSetting(slug, value).then((r) => { if (r.success) { changeOption(slug, value); diff --git a/assets/apps/dashboard/src/dashboard.js b/assets/apps/dashboard/src/dashboard.js index 4c52102e64..b60ba8dead 100644 --- a/assets/apps/dashboard/src/dashboard.js +++ b/assets/apps/dashboard/src/dashboard.js @@ -1,12 +1,14 @@ -import './style.scss'; -import App from './Components/App'; import { registerStore } from '@wordpress/data'; import { render } from '@wordpress/element'; +import './style.scss'; +import App from './Components/App'; + import actions from './store/actions'; import reducer from './store/reducer'; import selectors from './store/selectors'; import './utils/module-observer'; +import './utils/survey'; registerStore('neve-dashboard', { reducer, diff --git a/assets/apps/dashboard/src/scss/_general.scss b/assets/apps/dashboard/src/scss/_general.scss index 775d7bfc54..81ba284b90 100644 --- a/assets/apps/dashboard/src/scss/_general.scss +++ b/assets/apps/dashboard/src/scss/_general.scss @@ -3,7 +3,9 @@ } .container { + width: auto; padding: 0 15px; + &.content { padding-top: 20px; } diff --git a/assets/apps/dashboard/src/utils/survey.js b/assets/apps/dashboard/src/utils/survey.js new file mode 100644 index 0000000000..1c8d5a835d --- /dev/null +++ b/assets/apps/dashboard/src/utils/survey.js @@ -0,0 +1,43 @@ +/** + * This file is used to initialize the FormBricks survey. + */ +import formbricks from '@formbricks/js'; + +/** + * Take the number of days since install and convert it to a category for NPS user profile. + * + * @param {number} number - Number to convert. + * @param {number} scale - Scale to use. + * @return {number} - Converted number. + */ +const convertToCategory = (number, scale = 1) => { + const normalizedNumber = Math.round(number / scale); + if (0 === normalizedNumber || 1 === normalizedNumber) { + return 0; + } else if (1 < normalizedNumber && 8 > normalizedNumber) { + return 7; + } else if (8 <= normalizedNumber && 31 > normalizedNumber) { + return 30; + } else if (30 < normalizedNumber && 90 > normalizedNumber) { + return 90; + } else if (90 > normalizedNumber) { + return 91; + } +}; + +if ('undefined' !== typeof window && 'undefined' !== typeof window.neveDash) { + formbricks.init({ + environmentId: 'clr0ply35522h8up0bay2de4y', + apiHost: 'https://app.formbricks.com', + userId: + 'neve_' + + (window.neveDash?.license?.key ?? + window.neveDash?.rootUrl?.replace(/[^\w\d]*/g, '')), + attributes: { + plan: window.neveDash?.license?.type ?? 'free', + days_since_install: convertToCategory( + window.neveDash.daysSinceInstall + ), + }, + }); +} diff --git a/assets/js/src/frontend/hgf.js b/assets/js/src/frontend/hgf.js index 83fb8fcfc7..ac4f6498a2 100644 --- a/assets/js/src/frontend/hgf.js +++ b/assets/js/src/frontend/hgf.js @@ -38,16 +38,15 @@ const toggleAria = (elements, add = true) => { * @param {boolean} skipSidebar */ HFG.prototype.init = function (skipSidebar = false) { + const doc = window.document; if (skipSidebar === false) { - const closeButtons = document.querySelectorAll(closeNavSelector); + const closeButtons = doc.querySelectorAll(closeNavSelector); addEvent(closeButtons, 'click', () => { this.toggleMenuSidebar(false); }); } - const menuMobileToggleButtons = document.querySelectorAll( - '.menu-mobile-toggle' - ); + const menuMobileToggleButtons = doc.querySelectorAll('.menu-mobile-toggle'); addEvent(menuMobileToggleButtons, 'click', (event) => { this.toggleMenuSidebar( !event.target.parentElement.classList.contains('is-active'), @@ -58,7 +57,7 @@ HFG.prototype.init = function (skipSidebar = false) { /** * When click to outside of menu sidebar. */ - const overlay = document.querySelector('.header-menu-sidebar-overlay'); + const overlay = doc.querySelector('.header-menu-sidebar-overlay'); if (overlay) { addEvent( overlay, @@ -77,36 +76,37 @@ HFG.prototype.init = function (skipSidebar = false) { * @param {Element} target */ HFG.prototype.toggleMenuSidebar = function (toggle, target = null) { + const doc = window.document; const TOGGLE_CLASS_CONTAINER = '.menu-mobile-toggle'; - const buttonsContainer = document.querySelectorAll(TOGGLE_CLASS_CONTAINER); - removeClass(document.body, sidebarClasses[1]); + const buttonsContainer = doc.querySelectorAll(TOGGLE_CLASS_CONTAINER); + removeClass(doc.body, sidebarClasses[1]); /** * Elements to apply aria-hidden on */ - const ariaShowOnToggle = document.querySelectorAll( + const ariaShowOnToggle = doc.querySelectorAll( '#header-menu-sidebar, .hfg-ov' ); - const ariaHideOnToggle = document.querySelectorAll( + const ariaHideOnToggle = doc.querySelectorAll( '.neve-skip-link, #content, .scroll-to-top, #site-footer, .header--row' ); if ( (!NeveProperties.isCustomize && - document.body.classList.contains(sidebarClasses[0])) || + doc.body.classList.contains(sidebarClasses[0])) || toggle === false ) { - const navClickaway = document.querySelector('.nav-clickaway-overlay'); + const navClickaway = doc.querySelector('.nav-clickaway-overlay'); if (navClickaway !== null) { navClickaway.parentNode.removeChild(navClickaway); } - addClass(document.body, sidebarClasses[1]); - removeClass(document.body, sidebarClasses[0]); + addClass(doc.body, sidebarClasses[1]); + removeClass(doc.body, sidebarClasses[0]); removeClass(buttonsContainer, sidebarClasses[2]); // Remove the hiding class after 1 second. setTimeout( function () { - removeClass(document.body, sidebarClasses[1]); + removeClass(doc.body, sidebarClasses[1]); }.bind(this), 1000 ); @@ -117,17 +117,15 @@ HFG.prototype.toggleMenuSidebar = function (toggle, target = null) { toggleAria(ariaHideOnToggle, false); toggleAria(ariaShowOnToggle); // Remove focus trap when closing. - document.dispatchEvent(new CustomEvent(NV_FOCUS_TRAP_END)); + doc.dispatchEvent(new CustomEvent(NV_FOCUS_TRAP_END)); } else { - addClass(document.body, sidebarClasses[0]); + addClass(doc.body, sidebarClasses[0]); addClass(buttonsContainer, sidebarClasses[2]); if (target) { - document.dispatchEvent( + doc.dispatchEvent( new CustomEvent(NV_FOCUS_TRAP_START, { detail: { - container: document.getElementById( - 'header-menu-sidebar' - ), + container: doc.getElementById('header-menu-sidebar'), close: closeNavSelector, firstFocus: closeNavSelector + ',.menu-item a', backFocus: target, diff --git a/assets/js/src/frontend/navigation.js b/assets/js/src/frontend/navigation.js index 9336ff77ea..cb0c634ad4 100644 --- a/assets/js/src/frontend/navigation.js +++ b/assets/js/src/frontend/navigation.js @@ -29,14 +29,16 @@ export const initNavigation = () => { */ export const repositionDropdowns = () => { const { isRTL } = NeveProperties; - const dropDowns = - document.querySelectorAll('.sub-menu, .minimal .nv-nav-search') || []; + const dropDowns = document.querySelectorAll( + '.sub-menu, .minimal .nv-nav-search' + ); if (dropDowns.length === 0) return; const windowWidth = window.innerWidth; + dropDowns.forEach((dropDown) => { - const bounding = dropDown.getBoundingClientRect(), + let bounding = dropDown.getBoundingClientRect(), rightDist = bounding.left; if (rightDist < 0) { @@ -48,6 +50,19 @@ export const repositionDropdowns = () => { dropDown.style.right = isRTL ? 0 : '100%'; dropDown.style.left = 'auto'; } + + // Recalculate bounding after we've made adjustments. + bounding = dropDown.getBoundingClientRect(); + rightDist = bounding.left; + + if (rightDist < 0 || rightDist + bounding.width >= windowWidth) { + // Calculate how much should we offset the dropdown to make it fit. + dropDown.style.transform = + 'translateX(' + + (isRTL ? '-' : '') + + (Math.abs(rightDist) + 20) + + 'px)'; + } }); if (typeof menuCalcEvent !== 'undefined') { window.dispatchEvent(menuCalcEvent); @@ -171,15 +186,16 @@ function startFocusTrap(event) { * Handle searches. */ function handleSearch() { - const navSearch = document.querySelectorAll('.nv-nav-search') || [], - navItem = document.querySelectorAll('.menu-item-nav-search') || [], - close = document.querySelectorAll('.close-responsive-search') || []; + const doc = window.document; + const navSearch = doc.querySelectorAll('.nv-nav-search') || [], + navItem = doc.querySelectorAll('.menu-item-nav-search') || [], + close = doc.querySelectorAll('.close-responsive-search') || []; addEvent(navItem, 'click', (e, searchItem) => { e.preventDefault(); e.stopPropagation(); toggleClass(searchItem, strings[1]); createNavOverlay(searchItem, strings[1]); - document.dispatchEvent( + doc.dispatchEvent( new CustomEvent(NV_FOCUS_TRAP_START, { detail: { container: searchItem.querySelector('.nv-nav-search'), @@ -196,7 +212,7 @@ function handleSearch() { addEvent(close, 'click', (e) => { e.preventDefault(); removeClass(navItem, strings[1]); - const overlay = document.querySelector(`.${strings[2]}`); + const overlay = doc.querySelector(`.${strings[2]}`); if (overlay === null) { return; } diff --git a/assets/scss/components/compat/woocommerce/_notices.scss b/assets/scss/components/compat/woocommerce/_notices.scss index 3950f42fcf..1f4a9850e3 100644 --- a/assets/scss/components/compat/woocommerce/_notices.scss +++ b/assets/scss/components/compat/woocommerce/_notices.scss @@ -64,6 +64,77 @@ $notices: ( } } +$blockNotices: ( + "success": $success, + "error": $error, + "info": var(--nv-primary-accent), +); + +.neve-main .wc-block-components-notice-banner { + --btnfs: $text-sm; + --primarybtnpadding: 10px 15px; + --primarybtnborderwidth: 3px; + --primarybtncolor: #fff; + --primarybtnhovercolor: #fff; + --primarybtnhoverbg: transparent; + --primarybtnbg: transparent; + + .wc-block-components-notice-banner__content { + + &:has(.wc-forward, .showcoupon) { + display: inline-flex; + flex-basis: 100%; + flex-wrap: nowrap; + justify-content: space-between; + align-items: center; + } + + &:has(.wc-forward) { + flex-direction: row-reverse; + } + + &:has(.showcoupon) { + flex-direction: row; + } + } +} + +@each $noticeName, $color in $blockNotices { + .neve-main .wc-block-components-notice-banner.is-#{$noticeName} { + border-radius: 3px; + background-color: $color; + border: 0; + color: #fff; + font-size: inherit; + line-height: inherit; + align-items: center; + + svg { + background-color: #fff; + fill: $color; + } + + a:is(.wc-forward, .showcoupon) { + background: var(--primarybtnbg) !important; + border: var(--primarybtnborderwidth, 0) solid currentColor !important; + border-radius: var(--primarybtnborderradius, 3px); + color: var(--primarybtncolor) !important; + padding: var(--primarybtnpadding, 13px 15px) !important; + text-decoration: none !important; + opacity: 1; + float: none; + + &:hover { + background: var(--primarybtnhoverbg) !important; + color: var(--primarybtnhovercolor) !important; + border-color: var(--primarybtnhovercolor) !important; + opacity: 0.9; + } + } + + } +} + .woocommerce .woocommerce-error { padding-left: 3.5em; diff --git a/assets/scss/components/elements/blog/_single.scss b/assets/scss/components/elements/blog/_single.scss index 8b146b3708..7a6a60b679 100644 --- a/assets/scss/components/elements/blog/_single.scss +++ b/assets/scss/components/elements/blog/_single.scss @@ -110,6 +110,7 @@ background-size: cover; background-repeat: no-repeat; background-position: center; + text-align: var(--textalign, center); .nv-title-meta-wrap { color: var(--color, var(--nv-text-dark-bg)); @@ -130,7 +131,6 @@ .container { display: flex; justify-content: var(--justify, center); - text-align: var(--textalign, center); } } diff --git a/bin/envs/theme-check/start.sh b/bin/envs/theme-check/start.sh index 1cbe486a59..845f282237 100755 --- a/bin/envs/theme-check/start.sh +++ b/bin/envs/theme-check/start.sh @@ -1,3 +1,3 @@ -php -d memory_limit=1024M "$(which wp)" package install cristian-ungureanu/wp-cli-themecheck:dev-master#fcefc156d1eb7101d36b216e7c830ad7c2ade4b4 --allow-root +php -d memory_limit=1024M "$(which wp)" package install codeinwp/wp-cli-themecheck:dev-master#fcefc156d1eb7101d36b216e7c830ad7c2ade4b4 --allow-root wp plugin install theme-check --activate --allow-root wp themecheck --theme=neve --no-interactive --allow-root diff --git a/bin/envs/woo-sample/start.sh b/bin/envs/woo-sample/start.sh index ed74b83d97..0699d67240 100755 --- a/bin/envs/woo-sample/start.sh +++ b/bin/envs/woo-sample/start.sh @@ -9,4 +9,4 @@ wp --allow-root import ./themeunittestdata.wordpress.xml --authors=skip --skip= #Setup content for woo curl -O https://raw.githubusercontent.com/woocommerce/woocommerce/master/sample-data/sample_products.xml -wp --allow-root import ./sample_products.xml --authors=skip --skip=image_resize \ No newline at end of file +wp --allow-root import ./sample_products.xml --authors=skip --skip=image_resize diff --git a/composer-dev.json b/composer-dev.json index 7ba254ed8a..b26ac4fa07 100644 --- a/composer-dev.json +++ b/composer-dev.json @@ -23,7 +23,7 @@ "repositories": [ { "type": "vcs", - "url": "https://github.com/cristian-ungureanu/webfont-loader" + "url": "https://github.com/Codeinwp/webfont-loader" } ], "autoload": { diff --git a/composer-dev.lock b/composer-dev.lock index fba12fbe27..f1a14048c6 100644 --- a/composer-dev.lock +++ b/composer-dev.lock @@ -51,12 +51,12 @@ "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/cristian-ungureanu/webfont-loader.git", + "url": "https://github.com/Codeinwp/webfont-loader.git", "reference": "0294f21a20549f0c5e79700399946583dfa496b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cristian-ungureanu/webfont-loader/zipball/0294f21a20549f0c5e79700399946583dfa496b0", + "url": "https://api.github.com/repos/Codeinwp/webfont-loader/zipball/0294f21a20549f0c5e79700399946583dfa496b0", "reference": "0294f21a20549f0c5e79700399946583dfa496b0", "shasum": "" }, diff --git a/composer.json b/composer.json index 9e4d5d5b5b..cb017a5e76 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ "repositories": [ { "type": "vcs", - "url": "https://github.com/cristian-ungureanu/webfont-loader" + "url": "https://github.com/Codeinwp/webfont-loader" } ], "autoload": { diff --git a/composer.lock b/composer.lock index c0aa98ea00..0e360bc2ef 100644 --- a/composer.lock +++ b/composer.lock @@ -51,12 +51,12 @@ "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/cristian-ungureanu/webfont-loader.git", + "url": "https://github.com/Codeinwp/webfont-loader.git", "reference": "0294f21a20549f0c5e79700399946583dfa496b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cristian-ungureanu/webfont-loader/zipball/0294f21a20549f0c5e79700399946583dfa496b0", + "url": "https://api.github.com/repos/Codeinwp/webfont-loader/zipball/0294f21a20549f0c5e79700399946583dfa496b0", "reference": "0294f21a20549f0c5e79700399946583dfa496b0", "shasum": "" }, diff --git a/e2e-tests/fixtures/customizer/hfg/footer-mobile-setup.json b/e2e-tests/fixtures/customizer/hfg/footer-mobile-setup.json new file mode 100644 index 0000000000..e6c32c0c42 --- /dev/null +++ b/e2e-tests/fixtures/customizer/hfg/footer-mobile-setup.json @@ -0,0 +1,4 @@ +{ + "hfg_footer_layout_v2": "{\"desktop\":{\"top\":{\"left\":[],\"c-left\":[],\"center\":[],\"c-right\":[],\"right\":[]},\"main\":{\"left\":[],\"c-left\":[],\"center\":[],\"c-right\":[],\"right\":[]},\"bottom\":{\"left\":[],\"c-left\":[],\"center\":[{\"id\":\"footer_copyright\"}],\"c-right\":[],\"right\":[]}}, \"mobile\":{\"top\":{\"left\":[],\"c-left\":[],\"center\":[{\"id\":\"footer-menu\"}],\"c-right\":[],\"right\":[]},\"main\":{\"left\":[],\"c-left\":[],\"center\":[],\"c-right\":[],\"right\":[]},\"bottom\":{\"left\":[],\"c-left\":[],\"center\":[{\"id\":\"footer_copyright\"}],\"c-right\":[],\"right\":[]}}}", + "nav_menu_locations[footer]": 177 +} diff --git a/e2e-tests/specs/customizer/hfg/hfg-copyright-component.spec.ts b/e2e-tests/specs/customizer/hfg/hfg-copyright-component.spec.ts index cb0ede5291..0e4ee8ad62 100644 --- a/e2e-tests/specs/customizer/hfg/hfg-copyright-component.spec.ts +++ b/e2e-tests/specs/customizer/hfg/hfg-copyright-component.spec.ts @@ -2,7 +2,12 @@ import { test, expect } from '@playwright/test'; test('Checks the copyright in front-end', async ({ page }) => { await page.goto('/'); - await expect(page.locator('.hfg_footer')).toHaveText( - 'Neve | Powered by WordPress' - ); + // Check that the text is present for the Desktop footer + await expect( + page.locator('.hfg_footer .footer--row[data-show-on="desktop"]') + ).toHaveText('Neve | Powered by WordPress'); + // Check that the text is also present for the Mobile footer + await expect( + page.locator('.hfg_footer .footer--row[data-show-on="mobile"]') + ).toHaveText('Neve | Powered by WordPress'); }); diff --git a/e2e-tests/specs/customizer/hfg/hfg-footer-menu-component.spec.ts b/e2e-tests/specs/customizer/hfg/hfg-footer-menu-component.spec.ts index 1aa5d4dd36..28464f3feb 100644 --- a/e2e-tests/specs/customizer/hfg/hfg-footer-menu-component.spec.ts +++ b/e2e-tests/specs/customizer/hfg/hfg-footer-menu-component.spec.ts @@ -22,10 +22,10 @@ test.describe('Footer Menu component', function () { test('Check Footer Menu Style and Hover', async () => { await page.goto('/?test_name=hfgFooterMenu'); - await expect(page.locator('.nav-menu-footer')).toHaveClass(/style\-border\-bottom/); + await expect(page.locator('.footer--row[data-show-on="desktop"] .nav-menu-footer')).toHaveClass(/style\-border\-bottom/); const footerMenuItems = await page - .locator('.footer-menu.nav-ul li .wrap a') + .locator('.footer--row[data-show-on="desktop"] .footer-menu.nav-ul li .wrap a') .all(); for (const item of footerMenuItems) { diff --git a/e2e-tests/specs/customizer/hfg/hfg-footer-mobile.spec.ts b/e2e-tests/specs/customizer/hfg/hfg-footer-mobile.spec.ts new file mode 100644 index 0000000000..bc4945e4c7 --- /dev/null +++ b/e2e-tests/specs/customizer/hfg/hfg-footer-mobile.spec.ts @@ -0,0 +1,47 @@ +import { test, expect, Page } from '@playwright/test'; +import { setCustomizeSettings } from '../../../utils'; +import data from '../../../fixtures/customizer/hfg/footer-mobile-setup.json'; + +test.describe('Different Footer for Mobile vs Desktop', function () { + test.beforeAll(async ({ browser, request, baseURL }) => { + await browser.newPage(); + await setCustomizeSettings('hfgFooterMobile', data, { + request, + baseURL, + }); + }); + + test('Check Desktop Footer', async ({ page }) => { + await page.goto('/?test_name=hfgFooterMobile'); + + await expect( + page.locator('.hfg_footer .footer--row[data-show-on="desktop"]') + ).toHaveText('Neve | Powered by WordPress'); + + await expect( + page.locator( + '.hfg_footer .footer--row[data-show-on="desktop"] .nav-menu-footer' + ) + ).toHaveCount(0); + + await expect(page.locator('.hfg_footer .nav-menu-footer')).toBeHidden(); + }); + + test('Check Mobile Footer', async ({ page, browser }) => { + const context = await browser.newContext({ + viewport: { width: 600, height: 900 }, + }); + page = await context.newPage(); + await page.goto('/?test_name=hfgFooterMobile'); + + await expect( + page.locator( + '.hfg_footer .footer--row[data-show-on="mobile"] .nav-menu-footer' + ) + ).toHaveCount(1); + + await expect( + page.locator('.hfg_footer .nav-menu-footer') + ).toBeVisible(); + }); +}); diff --git a/e2e-tests/specs/customizer/hfg/hfg-menu-item-wrap.spec.ts b/e2e-tests/specs/customizer/hfg/hfg-menu-item-wrap.spec.ts new file mode 100644 index 0000000000..f413e7ea42 --- /dev/null +++ b/e2e-tests/specs/customizer/hfg/hfg-menu-item-wrap.spec.ts @@ -0,0 +1,31 @@ +import { test, expect } from '@playwright/test'; + +test.describe('Menu item alignment', function () { + test.use({ viewport: { width: 600, height: 900 } }); + + test('Checks mobile menu submenu item wrap', async ({ page }) => { + await page.goto('/'); + await page.getByRole('button', { name: 'Navigation Menu' }).click(); + await page + .getByRole('button', { name: 'Toggle About The Tests' }) + .click(); + + const firstLevelItem = page + .locator('#nv-primary-navigation-sidebar') + .getByRole('link', { + name: 'Page Markup And Formatting', + }); + await firstLevelItem.isVisible(); + await expect(firstLevelItem).toHaveCSS('white-space', 'normal'); + + await page.getByRole('button', { name: 'Toggle Level 1' }).click(); + + await page.getByRole('button', { name: 'Toggle Level 2' }).click(); + + const secondLevelItem = page + .locator('#nv-primary-navigation-sidebar') + .getByRole('link', { + name: 'Level 3b', + }); + }); +}); diff --git a/e2e-tests/specs/visual-regression/starter-sites.spec.ts b/e2e-tests/specs/visual-regression/starter-sites.spec.ts index 8af7b322fe..0b78314d9b 100644 --- a/e2e-tests/specs/visual-regression/starter-sites.spec.ts +++ b/e2e-tests/specs/visual-regression/starter-sites.spec.ts @@ -21,10 +21,12 @@ test.describe('Starter sites check', () => { for (const [name, urls] of Object.entries(starterSites)) { await test.step(`Check ${name} starter site.`, async () => { for (const url of urls) { - await page.goto(url + '?optml_off=true'); + await page.goto(url + '?optml_off=true&onboarding=true'); + await page.keyboard.press('End'); + await page.evaluate(() => window.scrollTo(0, 0)); await page.waitForTimeout(500); await expect(page).toHaveScreenshot({ - maxDiffPixelRatio: 0.15, + maxDiffPixelRatio: 0.18, fullPage: true, }); } diff --git a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-1-chromium.png b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-1-chromium.png index 144d27a2dc..5a538e8c7e 100644 Binary files a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-1-chromium.png and b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-1-chromium.png differ diff --git a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-2-chromium.png b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-2-chromium.png index fc9f952fa3..5bf7df7aba 100644 Binary files a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-2-chromium.png and b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-2-chromium.png differ diff --git a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-3-chromium.png b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-3-chromium.png index 71976017db..210de739f5 100644 Binary files a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-3-chromium.png and b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-3-chromium.png differ diff --git a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-4-chromium.png b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-4-chromium.png index bf2dae2232..9b00663a22 100644 Binary files a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-4-chromium.png and b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-4-chromium.png differ diff --git a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-5-chromium.png b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-5-chromium.png index b842606fd9..b656553765 100644 Binary files a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-5-chromium.png and b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-5-chromium.png differ diff --git a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-6-chromium.png b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-6-chromium.png index 0dbd00190e..b50792a3b3 100644 Binary files a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-6-chromium.png and b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-6-chromium.png differ diff --git a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-7-chromium.png b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-7-chromium.png index 9822e964ac..c9ccd627ff 100644 Binary files a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-7-chromium.png and b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-7-chromium.png differ diff --git a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-8-chromium.png b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-8-chromium.png index 326508cae1..8881881a6f 100644 Binary files a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-8-chromium.png and b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-8-chromium.png differ diff --git a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-9-chromium.png b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-9-chromium.png index 786dc20934..564b9a391b 100644 Binary files a/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-9-chromium.png and b/e2e-tests/specs/visual-regression/starter-sites.spec.ts-snapshots/Starter-sites-check-Check-frontpage-9-chromium.png differ diff --git a/functions.php b/functions.php index f5b1ec7ca4..c6b9ec64dd 100644 --- a/functions.php +++ b/functions.php @@ -164,3 +164,4 @@ function() { } ); +add_filter( 'themeisle_sdk_enable_telemetry', '__return_true' ); diff --git a/globals/google-fonts.php b/globals/google-fonts.php index 732aed729a..e3125ae4b6 100644 --- a/globals/google-fonts.php +++ b/globals/google-fonts.php @@ -1,6 +1,6 @@ array( '400',), 'Adamina' => array( '400',), 'Advent Pro' => array( '100', '200', '300', '400', '500', '600', '700', '800', '900', '100italic', '200italic', '300italic', '400italic', '500italic', '600italic', '700italic', '800italic', '900italic',), + 'Afacad' => array( '400', '500', '600', '700', '400italic', '500italic', '600italic', '700italic',), 'Agbalumo' => array( '400',), 'Agdasima' => array( '400', '700',), 'Aguafina Script' => array( '400',), @@ -660,6 +661,7 @@ 'Kaisei Opti' => array( '400', '500', '700',), 'Kaisei Tokumin' => array( '400', '500', '700', '800',), 'Kalam' => array( '300', '400', '700',), + 'Kalnia' => array( '100', '200', '300', '400', '500', '600', '700',), 'Kameron' => array( '400', '500', '600', '700',), 'Kanit' => array( '100', '200', '300', '400', '500', '600', '700', '800', '900', '100italic', '200italic', '300italic', '400italic', '500italic', '600italic', '700italic', '800italic', '900italic',), 'Kantumruy' => array(), @@ -1290,6 +1292,7 @@ 'Reem Kufi Ink' => array( '400',), 'Reenie Beanie' => array( '400',), 'Reggae One' => array( '400',), + 'Rethink Sans' => array( '400', '500', '600', '700', '800', '400italic', '500italic', '600italic', '700italic', '800italic',), 'Revalia' => array( '400',), 'Rhodium Libre' => array( '400',), 'Ribeye' => array( '400',), diff --git a/globals/utilities.php b/globals/utilities.php index 9d5b8da440..26e5ac50d5 100644 --- a/globals/utilities.php +++ b/globals/utilities.php @@ -281,9 +281,13 @@ function neve_get_svg_allowed_tags() { 'type' => true, ), 'g' => array( - 'fill' => true, - 'transform' => true, - 'style' => true, + 'fill' => true, + 'transform' => true, + 'style' => true, + 'stroke' => true, + 'stroke-linecap' => true, + 'stroke-linejoin' => true, + 'stroke-width' => true, ), 'circle' => array( 'cx' => true, @@ -302,15 +306,18 @@ function neve_get_svg_allowed_tags() { 'style' => true, 'class' => true, 'transform' => true, + 'stroke' => true, 'stroke-linecap' => true, 'stroke-linejoin' => true, 'stroke-width' => true, ), 'polyline' => array( - 'fill' => true, - 'stroke' => true, - 'stroke-width' => true, - 'points' => true, + 'fill' => true, + 'stroke' => true, + 'stroke-linecap' => true, + 'stroke-linejoin' => true, + 'stroke-width' => true, + 'points' => true, ), 'polygon' => array( 'class' => true, diff --git a/header-footer-grid/Core/Builder/Footer.php b/header-footer-grid/Core/Builder/Footer.php index 6da7a98ee7..576aa128ba 100644 --- a/header-footer-grid/Core/Builder/Footer.php +++ b/header-footer-grid/Core/Builder/Footer.php @@ -77,7 +77,8 @@ public function init() { ) ); $this->devices = [ - 'desktop' => __( 'Footer', 'neve' ), + 'desktop' => __( 'Desktop', 'neve' ), + 'mobile' => __( 'Mobile', 'neve' ), ]; /** @@ -101,6 +102,27 @@ function ( $params ) { } ); + /** + * Add mobile footer layout if not present using the same layout from desktop if mobile is empty. + * This will apply from Neve 3.5.8 and offer backward compatibility for users that have not set a mobile footer layout. + * + * @since 3.5.8 + */ + add_filter( + 'theme_mod_hfg_footer_layout_v2', + function ( $value ) { + if ( is_string( $value ) ) { + $maybe_parse_json = json_decode( $value, true ); + if ( ! empty( $maybe_parse_json['mobile'] ) ) { + return $value; + } + $maybe_parse_json['mobile'] = $maybe_parse_json['desktop']; + return wp_json_encode( $maybe_parse_json ); + } + return $value; + } + ); + add_action( 'neve_after_slot_component', [ $this, 'add_footer_component' ], 10, 3 ); } diff --git a/header-footer-grid/Core/Components/MenuIcon.php b/header-footer-grid/Core/Components/MenuIcon.php index 00f03c3a88..116baa1719 100644 --- a/header-footer-grid/Core/Components/MenuIcon.php +++ b/header-footer-grid/Core/Components/MenuIcon.php @@ -34,6 +34,8 @@ class MenuIcon extends Abstract_Component { const QUICK_LINKS_ID = 'quick-links'; const LABEL_MARGIN_ID = 'label_margin'; const MENU_ICON = 'menu_icon'; + const SIZE_ID = 'icon_size'; + const MENU_SVG = 'svg_menu_icon'; /** * Padding settings default values. @@ -205,7 +207,7 @@ public function toggle_style() { */ private function get_menu_style( $menu_icon ) { // We don't add any css for the default option. - if ( ! in_array( $menu_icon, [ 'arrow', 'donner', 'dots', 'minus', 'vortex', 'squeeze' ] ) ) { + if ( ! in_array( $menu_icon, [ 'arrow', 'donner', 'dots', 'minus', 'vortex', 'squeeze', 'svg' ] ) ) { return ''; } @@ -406,7 +408,18 @@ private function get_menu_style( $menu_icon ) { } CSS; } - + // SVG style + if ( $menu_icon === 'svg' ) { + $menu_icon_size = Mods::get( $this->get_id() . '_' . self::SIZE_ID, '15' ) . 'px'; + $css .= <<add( + [ + 'id' => self::SIZE_ID, + 'group' => $this->get_id(), + 'tab' => SettingsManager::TAB_STYLE, + 'transport' => 'postMessage', + 'sanitize_callback' => 'absint', + 'default' => 15, + 'label' => __( 'Icon Size', 'neve' ), + 'type' => 'Neve\Customizer\Controls\React\Range', + 'options' => [ + 'active_callback' => function () { + return Mods::get( $this->get_id() . '_' . self::MENU_ICON, 'default' ) === 'svg'; + + }, + 'priority' => 11, + 'input_attrs' => [ + 'min' => 10, + 'max' => 100, + 'defaultVal' => 15, + ], + ], + 'live_refresh_selector' => $this->default_selector . ' span.icon-svg', + 'live_refresh_css_prop' => [ + 'cssVar' => [ + 'vars' => '--menuiconsize', + 'selector' => '.builder-item--' . $this->get_id(), + 'suffix' => 'px', + ], + 'type' => 'svg-icon-size', + 'default' => 15, + ], + 'section' => $this->section, + 'conditional_header' => true, + ] + ); + $mod_key = self::BUTTON_APPEARANCE; $default = [ 'type' => 'outline', diff --git a/header-footer-grid/functions-migration.php b/header-footer-grid/functions-migration.php index 0d57403495..9c021f23cd 100644 --- a/header-footer-grid/functions-migration.php +++ b/header-footer-grid/functions-migration.php @@ -127,6 +127,11 @@ function neve_hfg_footer_settings() { 'main' => $empty_row, 'bottom' => $empty_row, ], + 'mobile' => [ + 'top' => $empty_row, + 'main' => $empty_row, + 'bottom' => $empty_row, + ], ]; return [ diff --git a/header-footer-grid/templates/components/component-logo.php b/header-footer-grid/templates/components/component-logo.php index 9e21480805..384f6f000d 100644 --- a/header-footer-grid/templates/components/component-logo.php +++ b/header-footer-grid/templates/components/component-logo.php @@ -12,7 +12,8 @@ use HFG\Core\Builder\Header as HeaderBuilder; use HFG\Core\Components\Logo; -$_id = current_component( HeaderBuilder::BUILDER_NAME )->get_id(); +$_id = current_component( HeaderBuilder::BUILDER_NAME )->get_id(); +$device = current_device( HeaderBuilder::BUILDER_NAME ); $show_name = component_setting( Logo::SHOW_TITLE ); $show_desc = component_setting( Logo::SHOW_TAGLINE ); @@ -26,7 +27,7 @@ $custom_logo_id = isset( $conditional_logo['light'] ) ? $conditional_logo['light'] : $active_logo; $wrapper_tag = 'p'; -if ( get_option( 'show_on_front' ) === 'posts' && is_home() ) { +if ( get_option( 'show_on_front' ) === 'posts' && is_home() && $device === 'desktop' ) { $wrapper_tag = 'h1'; } diff --git a/header-footer-grid/templates/components/component-menu-icon.php b/header-footer-grid/templates/components/component-menu-icon.php index 958e0d8560..20c2325284 100644 --- a/header-footer-grid/templates/components/component-menu-icon.php +++ b/header-footer-grid/templates/components/component-menu-icon.php @@ -14,7 +14,10 @@ $item_attributes = apply_filters( 'neve_nav_toggle_data_attrs', '' ); $label = component_setting( MenuIcon::TEXT_ID ); $menu_icon = component_setting( MenuIcon::MENU_ICON ); - +$menu_svg = component_setting( MenuIcon::MENU_SVG ); +if ( $menu_icon === 'svg' && empty( $menu_svg ) ) { + $menu_icon = 'default'; +} $class = ''; if ( $menu_icon !== 'default' ) { $class = apply_filters( 'neve_menu_icon_classes', 'hamburger ', $menu_icon ); @@ -43,8 +46,16 @@ - - + + + + get_property( 'control_id' ) . '_' . $row_index; +$row_visibility = 'hide-on-desktop'; +if ( $device === 'desktop' ) { + $row_visibility = 'hide-on-mobile hide-on-tablet'; +} + $row_classes = [ 'footer--row', 'footer-' . $row_index, + $row_visibility, ]; $row_classes[] = row_setting( Abstract_Builder::LAYOUT_SETTING ); diff --git a/header-footer-grid/templates/row-wrapper-mobile.php b/header-footer-grid/templates/row-wrapper-mobile.php index a8c3e322c2..000f3b1892 100644 --- a/header-footer-grid/templates/row-wrapper-mobile.php +++ b/header-footer-grid/templates/row-wrapper-mobile.php @@ -23,6 +23,12 @@ $close_classes = 'close-sidebar-panel navbar-toggle-wrapper' . ( $close_contained ? ' container' : '' ); $submenu_style = row_setting( 'layout', 'slide_left' ); $menu_icon_class = apply_filters( 'neve_menu_icon_classes', 'hamburger is-active ' ); + +$menu_icon = component_setting( MenuIcon::MENU_ICON ); +$menu_svg = component_setting( MenuIcon::MENU_SVG ); +if ( $menu_icon === 'svg' && empty( $menu_svg ) ) { + $menu_icon = 'default'; +} ?>
- + + - + + diff --git a/inc/admin/dashboard/main.php b/inc/admin/dashboard/main.php index 349801efbf..6ab5e65df6 100755 --- a/inc/admin/dashboard/main.php +++ b/inc/admin/dashboard/main.php @@ -9,6 +9,8 @@ use Neve\Core\Limited_Offers; use Neve\Core\Theme_Info; +use Neve\Core\Tracker; + /** * Class Main * @@ -381,6 +383,8 @@ private function get_localization() { 'canInstallPlugins' => current_user_can( 'install_plugins' ), 'canActivatePlugins' => current_user_can( 'activate_plugins' ), 'deal' => ! defined( 'NEVE_PRO_VERSION' ) ? $offer->get_localized_data() : array(), + 'rootUrl' => get_site_url(), + 'daysSinceInstall' => round( ( time() - get_option( 'neve_install', 0 ) ) / DAY_IN_SECONDS ), ]; if ( defined( 'NEVE_PRO_PATH' ) ) { diff --git a/inc/compatibility/starter-content/theme-mods.php b/inc/compatibility/starter-content/theme-mods.php index 55fa49ba48..28ff381865 100644 --- a/inc/compatibility/starter-content/theme-mods.php +++ b/inc/compatibility/starter-content/theme-mods.php @@ -627,7 +627,7 @@ 'tablet' => 'center', 'mobile' => 'center', ), - 'hfg_footer_layout_v2' => '{"desktop":{"top":{"left":[],"c-left":[],"center":[],"c-right":[],"right":[]},"main":{"left":[],"c-left":[],"center":[],"c-right":[],"right":[]},"bottom":{"left":[],"c-left":[{"id":"footer_copyright"}],"center":[],"c-right":[],"right":[]}}}', + 'hfg_footer_layout_v2' => '{"desktop":{"top":{"left":[],"c-left":[],"center":[],"c-right":[],"right":[]},"main":{"left":[],"c-left":[],"center":[],"c-right":[],"right":[]},"bottom":{"left":[],"c-left":[{"id":"footer_copyright"}],"center":[],"c-right":[],"right":[]}},"mobile":{"top":{"left":[],"c-left":[],"center":[],"c-right":[],"right":[]},"main":{"left":[],"c-left":[],"center":[],"c-right":[],"right":[]},"bottom":{"left":[],"c-left":[{"id":"footer_copyright"}],"center":[],"c-right":[],"right":[]}}}', 'neve_form_fields_spacing' => 4, 'neve_form_fields_background_color' => 'var(--nv-site-bg)', 'footer_copyright_component_typeface' => array( diff --git a/inc/core/admin.php b/inc/core/admin.php index 225ef585c7..ba2cca493e 100644 --- a/inc/core/admin.php +++ b/inc/core/admin.php @@ -188,6 +188,20 @@ public function register_react_components() { ] ); wp_set_script_translations( 'neve-components', 'neve' ); + + if ( isset( $deps['chunks'] ) ) { + foreach ( $deps['chunks'] as $chunk_file ) { + + $chunk_handle = 'neve-components-chunk-' . $chunk_file; + wp_register_script( $chunk_handle, trailingslashit( NEVE_ASSETS_URL ) . 'apps/components/build/' . $chunk_file, [], $deps['version'], true ); + wp_enqueue_script( $chunk_handle ); + + if ( function_exists( 'wp_set_script_translations' ) ) { + wp_set_script_translations( $chunk_handle, 'neve' ); + } + } + } + wp_register_style( 'neve-components', trailingslashit( NEVE_ASSETS_URL ) . 'apps/components/build/style-components.css', [ 'wp-components' ], $deps['version'] ); wp_add_inline_style( 'neve-components', Dynamic_Css::get_root_css() ); } diff --git a/inc/core/front_end.php b/inc/core/front_end.php index 61fb82a448..b58c0d962a 100644 --- a/inc/core/front_end.php +++ b/inc/core/front_end.php @@ -58,7 +58,7 @@ public function setup_theme() { add_theme_support( 'fl-theme-builder-headers' ); add_theme_support( 'fl-theme-builder-parts' ); add_theme_support( 'header-footer-elementor' ); - add_theme_support( 'html5', array( 'search-form' ) ); + add_theme_support( 'html5', array( 'search-form', 'script', 'style', 'comment-form', 'comment-list', 'gallery', 'caption' ) ); add_theme_support( 'lifterlms-sidebars' ); add_theme_support( 'lifterlms' ); add_theme_support( 'link-color' ); diff --git a/inc/core/tracker.php b/inc/core/tracker.php new file mode 100644 index 0000000000..a69e6c53cf --- /dev/null +++ b/inc/core/tracker.php @@ -0,0 +1,73 @@ + $events Data to track. + * @param array $options Options. + * @return void + */ + public static function track( $events, $options = array() ) { + if ( ! self::has_consent() && ( ! isset( $options['hasConsent'] ) || ! $options['hasConsent'] ) ) { + return; + } + + try { + $payload = array(); + + $license = apply_filters( 'product_neve_license_key', 'free' ); + + if ( 'free' !== $license ) { + $license = wp_hash( $license ); + } + + foreach ( $events as $event ) { + $payload[] = array( + 'slug' => 'neve', + 'site' => get_site_url(), + 'license' => $license, + 'data' => $event, + ); + } + + $args = array( + 'headers' => array( + 'Content-Type' => 'application/json', + ), + 'body' => wp_json_encode( $payload ), + ); + + wp_remote_post( self::$track_url, $args ); + } finally { + return; + } + } + + /** + * Check if the user has consented to tracking. + * + * @return bool + */ + public static function has_consent() { + return (bool) get_option( 'neve_logger_flag', false ); + } +} diff --git a/inc/customizer/loader.php b/inc/customizer/loader.php index bb3d10a91d..9313006a18 100644 --- a/inc/customizer/loader.php +++ b/inc/customizer/loader.php @@ -166,6 +166,19 @@ public function enqueue_customizer_controls() { wp_style_add_data( 'react-controls', 'rtl', 'replace' ); wp_enqueue_style( 'react-controls' ); + if ( isset( $dependencies['chunks'] ) ) { + foreach ( $dependencies['chunks'] as $chunk_file ) { + + $chunk_handle = 'neve-customizer-chunk-' . $chunk_file; + wp_register_script( $chunk_handle, $bundle_path . $chunk_file, [], $dependencies['version'], true ); + wp_enqueue_script( $chunk_handle ); + + if ( function_exists( 'wp_set_script_translations' ) ) { + wp_set_script_translations( $chunk_handle, 'neve' ); + } + } + } + $fonts = neve_get_google_fonts(); $chunks = array_chunk( $fonts, absint( count( $fonts ) / 5 ) ); diff --git a/inc/views/header.php b/inc/views/header.php index d4239ec55c..5085c431db 100644 --- a/inc/views/header.php +++ b/inc/views/header.php @@ -8,6 +8,7 @@ namespace Neve\Views; use HFG\Core\Components\Nav; +use Neve\Core\Tracker; /** * Class Header @@ -28,6 +29,7 @@ public function init() { add_filter( 'wp_nav_menu_items', array( $this, 'add_last_menu_item' ), 10, 2 ); add_filter( 'wp_page_menu', array( $this, 'add_fallback_last_menu_items' ), 10, 2 ); add_action( 'wp_enqueue_scripts', array( $this, 'hide_last_menu_item_search_in_sidebar' ) ); + add_action( 'wp_update_nav_menu', array( $this, 'track_mm_settings' ) ); } /** @@ -260,4 +262,35 @@ public function add_fallback_last_menu_items( $menu, $args ) { return $menu; } + + /** + * Track if the mega menu is active. + * + * @param int $menu_id The menu id. + * + * @return void + */ + public function track_mm_settings( $menu_id ) { + $menu_items = wp_get_nav_menu_items( $menu_id ); + if ( ! $menu_items ) { + return; + } + $has_mm = false; + foreach ( $menu_items as $menu_item ) { + if ( in_array( 'neve-mega-menu', $menu_item->classes, true ) ) { + $has_mm = true; + break; + } + } + + Tracker::track( + array( + array( + 'feature' => 'mega-menu-free', + 'featureComponent' => 'is-active', + 'featureValue' => $has_mm, + ), + ) + ); + } } diff --git a/inc/views/nav_walker.php b/inc/views/nav_walker.php index f108cf7d75..91e23792a2 100644 --- a/inc/views/nav_walker.php +++ b/inc/views/nav_walker.php @@ -209,6 +209,7 @@ public function get_mobile_caret_style() { $mobile_button_caret_css .= '.header-menu-sidebar .nav-ul li .wrap a { flex-grow: 1; display: flex; }'; $mobile_button_caret_css .= '.header-menu-sidebar .nav-ul li .wrap a .dd-title { width: var(--wrapdropdownwidth); }'; $mobile_button_caret_css .= '.header-menu-sidebar .nav-ul li .wrap button { border: 0; z-index: 1; background: 0; }'; + $mobile_button_caret_css .= '.header-menu-sidebar .nav-ul li:not([class*=block]):not(.menu-item-has-children) > .wrap > a { padding-right: calc(1em + (18px*2)); text-wrap: wrap; white-space: normal;}'; $mobile_button_caret_css .= '.header-menu-sidebar .nav-ul li.menu-item-has-children:not([class*=block]) > .wrap > a { margin-right: calc(-1em - (18px*2));}'; return Dynamic_Css::minify_css( $mobile_button_caret_css ); @@ -226,7 +227,7 @@ public function get_sidebar_and_accessibility_style() { $sidebar_animation_css .= '.is-menu-sidebar.menu_sidebar_dropdown .header-menu-sidebar { height: auto; }'; $sidebar_animation_css .= '.is-menu-sidebar.menu_sidebar_dropdown .header-menu-sidebar-inner { max-height: 400px; padding: 20px 0; }'; $sidebar_animation_css .= '.is-menu-sidebar.menu_sidebar_full_canvas .header-menu-sidebar { opacity: 1; }'; - $sidebar_animation_css .= '.header-menu-sidebar .menu-item-nav-search { pointer-events: none; }'; + $sidebar_animation_css .= '.header-menu-sidebar .menu-item-nav-search:not(.floating) { pointer-events: none; }'; $sidebar_animation_css .= '.header-menu-sidebar .menu-item-nav-search .is-menu-sidebar & { pointer-events: unset; }'; /* Accessibility css. */ $accessibility_caret_css = '.nav-ul li:focus-within .wrap.active + .sub-menu { opacity: 1; visibility: visible; }'; diff --git a/package.json b/package.json index 830a01a4e2..8ba200e3dd 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "pre-commit": "npx lint-staged" }, "dependencies": { + "@formbricks/js": "^1.4.1", "@neve-wp/components": "file:./assets/apps/components", "array-move": "^3.0.1", "classnames": "^2.2.6", @@ -133,7 +134,7 @@ "lint-staged": "^10.5.4", "load-project-config": "~0.2.1", "lodash": "^4.17.21", - "node-sass": "^6.0.1", + "node-sass": "8.0.0", "npm-run-all": "^4.1.5", "prettier": "^2.2.1", "react": "^17.0.2", diff --git a/start.php b/start.php index bdb63f6161..00f352ddf1 100644 --- a/start.php +++ b/start.php @@ -34,6 +34,9 @@ function neve_run() { 'hfg_d_search_iconbutton' => true, // Dynamic icon selection or a button for search components 'restrict_content' => true, 'theme_dedicated_menu' => true, // Theme uses the new menu location for settings and sub-pages. + 'track' => true, // Track theme usage. + 'menu_icon_svg' => true, + 'custom_payment_icons' => true, ] ); $vendor_file = trailingslashit( get_template_directory() ) . 'vendor/autoload.php'; diff --git a/yarn.lock b/yarn.lock index 3c4c1becb8..6d59d9f074 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2174,6 +2174,16 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@formbricks/js@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@formbricks/js/-/js-1.4.1.tgz#2dbba3463a0942a01e271a49021c1d90556a391b" + integrity sha512-lL+DsPAIdoiOPPQ4OX7bXOjvygGbD+hqU2nfurctz+iq/zZ2y/boQ3BpvqGxmqnsKLjY4scV31lPJi9kAnT7mw== + +"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + "@hapi/hoek@^9.0.0": version "9.2.1" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17" @@ -2459,7 +2469,7 @@ glob-to-regexp "^0.3.0" "@neve-wp/components@file:./assets/apps/components": - version "0.0.47" + version "0.0.51" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -2487,6 +2497,22 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/fs@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + "@npmcli/move-file@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" @@ -2495,6 +2521,14 @@ mkdirp "^1.0.4" rimraf "^3.0.2" +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + "@octokit/auth-token@^2.4.4": version "2.4.5" resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3" @@ -3805,6 +3839,11 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" @@ -5701,7 +5740,7 @@ agent-base@4, agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" -agent-base@6: +agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== @@ -5722,6 +5761,13 @@ agentkeepalive@^3.4.1: dependencies: humanize-ms "^1.2.1" +agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -5813,11 +5859,6 @@ alphanum-sort@^1.0.0, alphanum-sort@^1.0.2: resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" @@ -5944,7 +5985,7 @@ aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -"aproba@^1.1.2 || 2", aproba@^2.0.0: +"aproba@^1.0.3 || ^2.0.0", "aproba@^1.1.2 || 2", aproba@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== @@ -5954,6 +5995,14 @@ archy@~1.0.0: resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -6907,6 +6956,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -7161,6 +7217,54 @@ cacache@^15.0.5: tar "^6.0.2" unique-filename "^1.1.1" +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -7314,7 +7418,7 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4. escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^1.0.0, chalk@^1.1.1: +chalk@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -7333,7 +7437,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.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -7666,6 +7770,15 @@ cliui@^7.0.2: 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" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + clone-deep@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" @@ -7780,6 +7893,11 @@ color-string@^1.6.0: color-name "^1.0.0" simple-swizzle "^0.2.2" +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + color@^3.0.0: version "3.2.1" resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" @@ -8743,6 +8861,13 @@ debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -9397,7 +9522,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding@^0.1.11, encoding@^0.1.12: +encoding@^0.1.11, encoding@^0.1.12, encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -9532,6 +9657,11 @@ err-code@^1.0.0: resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + errlop@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/errlop/-/errlop-2.2.0.tgz#1ff383f8f917ae328bebb802d6ca69666a42d21b" @@ -10897,7 +11027,7 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" -fs-minipass@^2.0.0: +fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== @@ -10986,6 +11116,20 @@ fuse.js@^6.4.1: resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.4.6.tgz#62f216c110e5aa22486aff20be7896d19a059b79" integrity sha512-/gYxR/0VpXmWSfZOIPS3rWwU8SHgsRTwWuXhyb2O6s7aRuVtHtxCkR33bNYu3wyLyNx/Wpv0vU7FZy8Vj53VNw== +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -11237,6 +11381,17 @@ glob@^7.1.3, glob@^7.1.6, glob@^7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + glob@~5.0.0, glob@~5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -11467,6 +11622,11 @@ graceful-fs@^4.1.2: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== +graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + gradient-parser@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/gradient-parser/-/gradient-parser-0.1.5.tgz#0c7e2179559e5ce7d8d71f4423af937100b2248c" @@ -11712,7 +11872,7 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-unicode@^2.0.0, has-unicode@~2.0.1: +has-unicode@^2.0.0, has-unicode@^2.0.1, has-unicode@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= @@ -12020,6 +12180,11 @@ http-cache-semantics@^3.8.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== +http-cache-semantics@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -12055,7 +12220,7 @@ http-proxy-agent@^2.1.0: agent-base "4" debug "3.1.0" -http-proxy-agent@^4.0.0: +http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== @@ -12064,6 +12229,15 @@ http-proxy-agent@^4.0.0: agent-base "6" debug "4" +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -12374,6 +12548,11 @@ ip@1.1.5, ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -12704,6 +12883,11 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + is-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" @@ -13571,7 +13755,7 @@ joi@^17.3.0: "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" -js-base64@^2.1.8: +js-base64@^2.4.9: version "2.6.4" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== @@ -14393,7 +14577,7 @@ lodash@^3.10.1, lodash@~3.10.1: resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= -lodash@^4.0.0, lodash@^4.0.1, lodash@^4.1.1, lodash@^4.14.2, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.10, lodash@~4.17.19, lodash@~4.17.20: +lodash@^4.0.1, lodash@^4.1.1, lodash@^4.14.2, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.10, lodash@~4.17.19, lodash@~4.17.20: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -14477,6 +14661,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.7.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + magic-string@^0.25.2: version "0.25.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" @@ -14506,6 +14695,28 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" +make-fetch-happen@^10.0.4: + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + make-fetch-happen@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" @@ -14523,6 +14734,28 @@ make-fetch-happen@^5.0.0: socks-proxy-agent "^4.0.0" ssri "^6.0.0" +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + make-iterator@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" @@ -15130,6 +15363,13 @@ minimalistic-crypto-utils@^1.0.1: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0, minimist-options@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -15151,6 +15391,28 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -15158,13 +15420,20 @@ minipass-flush@^1.0.5: dependencies: minipass "^3.0.0" -minipass-pipeline@^1.2.2: +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -15180,6 +15449,18 @@ minipass@^3.0.0, minipass@^3.1.1: dependencies: yallist "^4.0.0" +minipass@^3.1.0, minipass@^3.1.3, minipass@^3.1.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + minizlib@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -15187,7 +15468,7 @@ minizlib@^1.2.1: dependencies: minipass "^2.9.0" -minizlib@^2.1.1: +minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -15318,11 +15599,16 @@ mute-stream@0.0.8, mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.12.1, nan@^2.13.2: +nan@^2.12.1: version "2.14.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== +nan@^2.17.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" + integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== + nanocolors@^0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/nanocolors/-/nanocolors-0.1.12.tgz#8577482c58cbd7b5bb1681db4cf48f11a87fd5f6" @@ -15377,6 +15663,11 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +negotiator@^0.6.2, negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" @@ -15464,20 +15755,20 @@ node-gyp@^5.0.2, node-gyp@^5.1.0: tar "^4.4.12" which "^1.3.1" -node-gyp@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" - integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== +node-gyp@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== dependencies: env-paths "^2.2.0" glob "^7.1.4" - graceful-fs "^4.2.3" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" nopt "^5.0.0" - npmlog "^4.1.2" - request "^2.88.2" + npmlog "^6.0.0" rimraf "^3.0.2" - semver "^7.3.2" - tar "^6.0.2" + semver "^7.3.5" + tar "^6.1.2" which "^2.0.2" node-int64@^0.4.0: @@ -15541,26 +15832,25 @@ node-releases@^2.0.0: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.0.tgz#67dc74903100a7deb044037b8a2e5f453bb05400" integrity sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA== -node-sass@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-6.0.1.tgz#cad1ccd0ce63e35c7181f545d8b986f3a9a887fe" - integrity sha512-f+Rbqt92Ful9gX0cGtdYwjTrWAaGURgaK5rZCWOgCNyGWusFYHhbqCCBoFBeat+HKETOU02AyTxNhJV0YZf2jQ== +node-sass@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-8.0.0.tgz#c80d52148db0ce88610bcf1e1d112027393c13e1" + integrity sha512-jPzqCF2/e6JXw6r3VxfIqYc8tKQdkj5Z/BDATYyG6FL6b/LuYBNFGFVhus0mthcWifHm/JzBpKAd+3eXsWeK/A== dependencies: async-foreach "^0.1.3" - chalk "^1.1.1" + chalk "^4.1.2" cross-spawn "^7.0.3" gaze "^1.0.0" get-stdin "^4.0.1" glob "^7.0.3" lodash "^4.17.15" + make-fetch-happen "^10.0.4" meow "^9.0.0" - nan "^2.13.2" - node-gyp "^7.1.0" - npmlog "^4.0.0" - request "^2.88.0" - sass-graph "2.2.5" + nan "^2.17.0" + node-gyp "^8.4.1" + sass-graph "^4.0.1" stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" + "true-case-path" "^2.2.1" node-wp-i18n@^1.2.2: version "1.2.5" @@ -15936,7 +16226,7 @@ npm@^6.14.9: worker-farm "^1.7.0" write-file-atomic "^2.4.3" -npmlog@^4.0.0, npmlog@^4.1.2, npmlog@~4.1.2: +npmlog@^4.1.2, npmlog@~4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -15946,6 +16236,16 @@ npmlog@^4.0.0, npmlog@^4.1.2, npmlog@~4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + nth-check@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -17639,6 +17939,14 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + promise.allsettled@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.4.tgz#65e71f2a604082ed69c548b68603294090ee6803" @@ -19277,15 +19585,15 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sass-graph@2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" - integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== +sass-graph@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-4.0.1.tgz#2ff8ca477224d694055bf4093f414cf6cfad1d2e" + integrity sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA== dependencies: glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^13.3.2" + lodash "^4.17.11" + scss-tokenizer "^0.4.3" + yargs "^17.2.1" sass-loader@^10.1.1: version "10.2.0" @@ -19368,13 +19676,13 @@ schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0, schema-utils@^2.7 ajv "^6.12.4" ajv-keywords "^3.5.2" -scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= +scss-tokenizer@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz#1058400ee7d814d71049c29923d2b25e61dc026c" + integrity sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw== dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" + js-base64 "^2.4.9" + source-map "^0.7.3" select@^1.1.2: version "1.1.2" @@ -19668,6 +19976,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +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== + signale@^1.2.1: version "1.4.0" resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" @@ -19773,6 +20086,11 @@ smart-buffer@^4.1.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -19811,6 +20129,32 @@ socks-proxy-agent@^4.0.0: agent-base "~4.2.1" socks "~2.3.2" +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + socks@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" @@ -19888,13 +20232,6 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - integrity sha1-66T12pwNyZneaAMti092FzZSA2s= - dependencies: - amdefine ">=0.0.4" - source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -20031,13 +20368,20 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -ssri@^8.0.0: +ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== dependencies: minipass "^3.1.1" +ssri@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -20178,6 +20522,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +"string-width@^1.0.2 || 2 || 3 || 4", 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== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -20196,15 +20549,6 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.2: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.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== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - "string.prototype.matchall@^4.0.0 || ^3.0.1", string.prototype.matchall@^4.0.2: version "4.0.4" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz#608f255e93e072107f5de066f81a2dfb78cf6b29" @@ -20715,6 +21059,18 @@ tar@^6.0.2: mkdirp "^1.0.3" yallist "^4.0.0" +tar@^6.1.11, tar@^6.1.2: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + telejson@^5.0.2, telejson@^5.3.2: version "5.3.3" resolved "https://registry.yarnpkg.com/telejson/-/telejson-5.3.3.tgz#fa8ca84543e336576d8734123876a9f02bf41d2e" @@ -21098,12 +21454,10 @@ trough@^1.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== -"true-case-path@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" - integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== - dependencies: - glob "^7.1.2" +"true-case-path@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" + integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== tryer@^1.0.1: version "1.0.1" @@ -21449,6 +21803,13 @@ unique-filename@^1.1.1: dependencies: unique-slug "^2.0.0" +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + unique-slug@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" @@ -21456,6 +21817,13 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" @@ -22208,6 +22576,13 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + widest-line@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" @@ -22387,14 +22762,6 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^15.0.1: version "15.0.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.3.tgz#316e263d5febe8b38eef61ac092b33dfcc9b1115" @@ -22416,6 +22783,11 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.3: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== +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-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" @@ -22423,22 +22795,6 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - yargs@^14.2, yargs@^14.2.3: version "14.2.3" resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" @@ -22486,6 +22842,19 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.2.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yargs@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"