diff --git a/plugins/woo-ai/changelog/update-short-description-generator b/plugins/woo-ai/changelog/update-short-description-generator new file mode 100644 index 00000000000..ab2b75fdcf4 --- /dev/null +++ b/plugins/woo-ai/changelog/update-short-description-generator @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +[Woo AI] Add a Write with AI button for the short description field in product editor. diff --git a/plugins/woo-ai/composer.lock b/plugins/woo-ai/composer.lock index ad6f0c9830a..d59c9c95c20 100644 --- a/plugins/woo-ai/composer.lock +++ b/plugins/woo-ai/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f04d60d67b018f03857889eabb4fde67", + "content-hash": "4422aa30be46b03afe33056e2f26359c", "packages": [ { "name": "composer/installers", diff --git a/plugins/woo-ai/includes/class-woo-ai-product-text-generation.php b/plugins/woo-ai/includes/class-woo-ai-product-text-generation.php index b7ddec6e9e9..0b5faffd396 100644 --- a/plugins/woo-ai/includes/class-woo-ai-product-text-generation.php +++ b/plugins/woo-ai/includes/class-woo-ai-product-text-generation.php @@ -20,6 +20,7 @@ class Woo_AI_Product_Text_Generation { public function __construct() { add_action( 'admin_enqueue_scripts', array( $this, 'add_woo_ai_register_script' ) ); add_action( 'media_buttons', array( $this, 'add_gpt_button' ), 40 ); + add_action( 'media_buttons', array( $this, 'add_short_description_gpt_button' ), 50 ); add_action( 'edit_form_before_permalink', array( $this, 'add_name_generation_form' ) ); add_filter( 'the_editor', array( $this, 'add_gpt_form' ), 10, 1 ); } @@ -82,6 +83,19 @@ class Woo_AI_Product_Text_Generation { echo '
'; } + /** + * Add gpt button to the editor. + * + * @param String $editor_id Editor Id. + */ + public function add_short_description_gpt_button( $editor_id ) { + if ( 'excerpt' !== $editor_id || ( ! current_user_can( 'edit_posts' ) && ! current_user_can( 'edit_pages' ) ) ) { + return; + } + + echo '
'; + } + /** * Add the form and button for generating product title suggestions to the editor. */ diff --git a/plugins/woo-ai/package.json b/plugins/woo-ai/package.json index a794104609d..6f2c4e98af6 100644 --- a/plugins/woo-ai/package.json +++ b/plugins/woo-ai/package.json @@ -10,6 +10,7 @@ "version": "0.2.0", "homepage": "http://github.com/woocommerce/woo-ai", "devDependencies": { + "@svgr/webpack": "^8.1.0", "@types/debug": "^4.1.7", "@types/jquery": "^3.5.16", "@types/react": "^17.0.2", @@ -17,6 +18,7 @@ "@types/wordpress__components": "^19.10.3", "@woocommerce/dependency-extraction-webpack-plugin": "workspace:*", "@woocommerce/eslint-plugin": "workspace:*", + "@wordpress/data": "wp-6.0", "@wordpress/env": "^8.2.0", "@wordpress/prettier-config": "2.17.0", "@wordpress/scripts": "^19.2.4", @@ -27,6 +29,7 @@ "uglify-js": "^3.5.3" }, "dependencies": { + "@automattic/tour-kit": "^1.1.1", "@emotion/react": "^11.10.4", "@types/prop-types": "^15.7.4", "@types/react-outside-click-handler": "^1.3.1", @@ -41,6 +44,7 @@ "@wordpress/i18n": "wp-6.0", "@wordpress/notices": "wp-6.0", "@wordpress/plugins": "wp-6.0", + "@wordpress/preferences": "wp-6.0", "debug": "^4.3.3", "prop-types": "^15.8.1", "react-query": "^3.39.3" @@ -48,7 +52,6 @@ "peerDependencies": { "@types/react": "^17.0.2", "@types/react-dom": "^17.0.2", - "@wordpress/data": "wp-6.0", "react": "^17.0.2", "react-dom": "^17.0.2" }, diff --git a/plugins/woo-ai/src/components/description-completion-buttons.tsx b/plugins/woo-ai/src/components/description-completion-buttons.tsx index 1c5d17867be..001c379bd07 100644 --- a/plugins/woo-ai/src/components/description-completion-buttons.tsx +++ b/plugins/woo-ai/src/components/description-completion-buttons.tsx @@ -2,13 +2,12 @@ * External dependencies */ import React from 'react'; -import { __, sprintf } from '@wordpress/i18n'; +import { __ } from '@wordpress/i18n'; /** * Internal dependencies */ import MagicIcon from '../../assets/images/icons/magic.svg'; -import { MIN_TITLE_LENGTH_FOR_DESCRIPTION } from '../constants'; type MagicButtonProps = { title?: string; @@ -17,6 +16,10 @@ type MagicButtonProps = { label: string; }; +type WriteItForMeBtnProps = MagicButtonProps & { + disabledMessage?: string; +}; + const MagicButton = ( { title, label, @@ -40,24 +43,14 @@ const MagicButton = ( { export const WriteItForMeBtn = ( { disabled, onClick, -}: Omit< MagicButtonProps, 'title' | 'label' > ) => { + disabledMessage, +}: Omit< WriteItForMeBtnProps, 'title' | 'label' > ) => { return ( ); }; @@ -71,7 +64,7 @@ export const StopCompletionBtn = ( { disabled={ disabled } onClick={ onClick } label={ __( 'Stop writing…', 'woocommerce' ) } - title={ __( 'Stop generating the description.', 'woocommerce' ) } + title={ __( 'Stop generating content.', 'woocommerce' ) } /> ); }; diff --git a/plugins/woo-ai/src/components/index.ts b/plugins/woo-ai/src/components/index.ts index 8b3e358145f..b6117b08f92 100644 --- a/plugins/woo-ai/src/components/index.ts +++ b/plugins/woo-ai/src/components/index.ts @@ -1,2 +1,3 @@ export * from './random-loading-message'; export * from './description-completion-buttons'; +export * from './info-modal'; diff --git a/plugins/woo-ai/src/components/info-modal/index.ts b/plugins/woo-ai/src/components/info-modal/index.ts new file mode 100644 index 00000000000..3826c03df5e --- /dev/null +++ b/plugins/woo-ai/src/components/info-modal/index.ts @@ -0,0 +1 @@ +export * from './info-modal'; diff --git a/plugins/woo-ai/src/components/info-modal/info-modal.scss b/plugins/woo-ai/src/components/info-modal/info-modal.scss new file mode 100644 index 00000000000..5ee9e113441 --- /dev/null +++ b/plugins/woo-ai/src/components/info-modal/info-modal.scss @@ -0,0 +1,34 @@ +.shortDescriptionGenerated-spotlight { + max-width: 400px; + padding:20px; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.1); + + span { + font-weight: 600; + font-size: 18px; + } + + p { + font-size:16px; + margin-bottom: 20px; + } + + button { + padding: 10px 15px; + border-radius: 5px; + color:#fff; + background-color: #0074a2; + border: 1px solid lightblue; + float:right; + border:none; + margin-bottom:20px; + + &:hover, &:focus { + background-color: darken(#0074a2, 10%); // Slightly darken the blue on hover and focus + } + + &:active { + background-color: darken(#0074a2, 15%); // Darken a bit more on active state + } + } +} \ No newline at end of file diff --git a/plugins/woo-ai/src/components/info-modal/info-modal.tsx b/plugins/woo-ai/src/components/info-modal/info-modal.tsx new file mode 100644 index 00000000000..15f2d8c9648 --- /dev/null +++ b/plugins/woo-ai/src/components/info-modal/info-modal.tsx @@ -0,0 +1,48 @@ +/** + * External dependencies + */ +import { useDispatch, select } from '@wordpress/data'; +import { store as preferencesStore } from '@wordpress/preferences'; +import React from 'react'; + +/** + * Internal dependencies + */ +import TourSpotlight from '../tour-spotlight/tour-spotlight'; +import './info-modal.scss'; + +interface InfoModalProps { + id: string; + message: string; + title: string; +} + +export const InfoModal: React.FC< InfoModalProps > = ( { + id, + message, + title, +} ) => { + const anchorElement = document.querySelector( '#postexcerpt' ); + const hasBeenDismissedBefore = select( preferencesStore ).get( + 'woo-ai-plugin', + `modalDismissed-${ id }` + ); + + const { set } = useDispatch( preferencesStore ); + + if ( ! anchorElement || hasBeenDismissedBefore ) return null; + + const closeTour = () => { + set( 'woo-ai-plugin', `modalDismissed-${ id }`, true ); + }; + + return ( + + ); +}; diff --git a/plugins/woo-ai/src/components/tour-spotlight/index.ts b/plugins/woo-ai/src/components/tour-spotlight/index.ts new file mode 100644 index 00000000000..3ea05b99449 --- /dev/null +++ b/plugins/woo-ai/src/components/tour-spotlight/index.ts @@ -0,0 +1 @@ +export * from './tour-spotlight'; diff --git a/plugins/woo-ai/src/components/tour-spotlight/tour-spotlight.tsx b/plugins/woo-ai/src/components/tour-spotlight/tour-spotlight.tsx new file mode 100644 index 00000000000..9ebd3a82f4c --- /dev/null +++ b/plugins/woo-ai/src/components/tour-spotlight/tour-spotlight.tsx @@ -0,0 +1,71 @@ +/** + * External dependencies + */ +import Tour, { TourStepRendererProps } from '@automattic/tour-kit'; +import { Button } from '@wordpress/components'; +import { useState } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import React from 'react'; + +type TourSpotlightProps = { + onDismiss: () => void; + title: string; + description: string; + reference: string; + className?: string; +}; + +export default function TourSpotlight( { + onDismiss, + title, + description, + reference, + className, +}: TourSpotlightProps ) { + const [ showTour, setShowTour ] = useState( true ); + + const handleDismiss = () => { + setShowTour( false ); + onDismiss(); + }; + // Define a configuration for the tour, passing along a handler for closing. + const config = { + steps: [ + { + referenceElements: { + desktop: reference, + }, + meta: { + description, + }, + }, + ], + renderers: { + tourStep: ( { currentStepIndex }: TourStepRendererProps ) => { + return ( +
+

{ title }

+

+ { + config.steps[ currentStepIndex ].meta + .description + } +

+ +
+ ); + }, + tourMinimized: () =>
, + }, + closeHandler: () => handleDismiss(), + options: {}, + }; + + if ( ! showTour ) { + return null; + } + + return ; +} diff --git a/plugins/woo-ai/src/constants.ts b/plugins/woo-ai/src/constants.ts index e20778c5838..dddeeca962a 100644 --- a/plugins/woo-ai/src/constants.ts +++ b/plugins/woo-ai/src/constants.ts @@ -1,3 +1,4 @@ export const WOO_AI_PLUGIN_FEATURE_NAME = 'woo_ai_plugin'; export const MAX_TITLE_LENGTH = 200; export const MIN_TITLE_LENGTH_FOR_DESCRIPTION = 15; +export const MIN_DESC_LENGTH_FOR_SHORT_DESC = 100; diff --git a/plugins/woo-ai/src/custom.d.ts b/plugins/woo-ai/src/custom.d.ts index e8dfdf4c716..5720ec958fb 100644 --- a/plugins/woo-ai/src/custom.d.ts +++ b/plugins/woo-ai/src/custom.d.ts @@ -1,2 +1,8 @@ -declare module '@wordpress/notices'; -declare module '@wordpress/data'; \ No newline at end of file +declare module '*.svg' { + const content: string; + export default content; +} +declare const wp: any; +declare module '@wordpress/data'; +declare module '@wordpress/preferences'; +declare module '@wordpress/notices'; \ No newline at end of file diff --git a/plugins/woo-ai/src/customer.d.ts b/plugins/woo-ai/src/customer.d.ts deleted file mode 100644 index ad01f9d04a5..00000000000 --- a/plugins/woo-ai/src/customer.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -declare module '*.svg' { - const content: string; - export default content; -} - -declare module '@wordpress/data'; diff --git a/plugins/woo-ai/src/hooks/useTinyEditor.ts b/plugins/woo-ai/src/hooks/useTinyEditor.ts index 3d27e861f01..9ccb0f89350 100644 --- a/plugins/woo-ai/src/hooks/useTinyEditor.ts +++ b/plugins/woo-ai/src/hooks/useTinyEditor.ts @@ -1,11 +1,39 @@ +/** + * External dependencies + */ +import { useState, useEffect } from 'react'; + /** * Internal dependencies */ -import { setTinyContent, getTinyContent } from '../utils/tiny-tools'; +import { + getTinyContentObject, + setTinyContent, + getTinyContent, + TinyContent, +} from '../utils/tiny-tools'; export const useTinyEditor = ( editorId?: string ) => { + const [ editor, setEditor ] = useState< TinyContent | null >( null ); + + useEffect( () => { + const fetchEditor = () => { + const editorInstance = getTinyContentObject( editorId ); + if ( editorInstance ) { + setEditor( editorInstance ); + } + }; + + window.addEventListener( 'load', fetchEditor ); + + return () => { + document.removeEventListener( 'load', fetchEditor ); + }; + }, [ editorId ] ); + return { setContent: ( str: string ) => setTinyContent( str, editorId ), getContent: () => getTinyContent( editorId ), + getEditorObject: () => editor, }; }; diff --git a/plugins/woo-ai/src/index.js b/plugins/woo-ai/src/index.js index a4edb35664c..a16d2d3ecd5 100644 --- a/plugins/woo-ai/src/index.js +++ b/plugins/woo-ai/src/index.js @@ -9,9 +9,14 @@ import { QueryClient, QueryClientProvider } from 'react-query'; */ import { WriteItForMeButtonContainer } from './product-description'; import { ProductNameSuggestions } from './product-name'; +import { WriteShortDescriptionButtonContainer } from './product-short-description'; +import setPreferencesPersistence from './utils/preferencesPersistence'; import './index.scss'; +// This sets up loading and saving the plugin's preferences. +setPreferencesPersistence(); + const queryClient = new QueryClient(); const renderComponent = ( Component, rootElement ) => { @@ -39,7 +44,15 @@ const nameSuggestionsRoot = document.getElementById( 'woocommerce-ai-app-product-name-suggestions' ); +const shortDescriptionButtonRoot = document.getElementById( + 'woocommerce-ai-app-product-short-description-gpt-button' +); + if ( window.JP_CONNECTION_INITIAL_STATE?.connectionStatus?.isActive ) { renderComponent( WriteItForMeButtonContainer, descriptionButtonRoot ); renderComponent( ProductNameSuggestions, nameSuggestionsRoot ); + renderComponent( + WriteShortDescriptionButtonContainer, + shortDescriptionButtonRoot + ); } diff --git a/plugins/woo-ai/src/index.scss b/plugins/woo-ai/src/index.scss index aab82b42e5b..83c8aa2df71 100644 --- a/plugins/woo-ai/src/index.scss +++ b/plugins/woo-ai/src/index.scss @@ -1,2 +1,3 @@ -@import "product-description/product-description.scss"; -@import "product-name/product-name.scss"; +@import 'product-description/product-description.scss'; +@import 'product-name/product-name.scss'; +@import 'product-short-description/product-short-description.scss'; diff --git a/plugins/woo-ai/src/product-description/product-description-button-container.tsx b/plugins/woo-ai/src/product-description/product-description-button-container.tsx index 48e74a85713..0931d214379 100644 --- a/plugins/woo-ai/src/product-description/product-description-button-container.tsx +++ b/plugins/woo-ai/src/product-description/product-description-button-container.tsx @@ -3,7 +3,7 @@ */ import { useDispatch } from '@wordpress/data'; import { store as noticesStore } from '@wordpress/notices'; -import { __ } from '@wordpress/i18n'; +import { __, sprintf } from '@wordpress/i18n'; import { useState, useEffect, useRef } from '@wordpress/element'; import { __experimentalUseCompletion as useCompletion, @@ -18,7 +18,7 @@ import { MIN_TITLE_LENGTH_FOR_DESCRIPTION, WOO_AI_PLUGIN_FEATURE_NAME, } from '../constants'; -import { StopCompletionBtn, WriteItForMeBtn } from '../components'; +import { InfoModal, StopCompletionBtn, WriteItForMeBtn } from '../components'; import { useFeedbackSnackbar, useStoreBranding, useTinyEditor } from '../hooks'; import { getProductName, @@ -29,24 +29,11 @@ import { recordTracksFactory, } from '../utils'; import { Attribute } from '../utils/types'; +import { translateApiErrors as getApiError } from '../utils/apiErrors'; +import { buildShortDescriptionPrompt } from '../product-short-description/product-short-description-button-container'; const DESCRIPTION_MAX_LENGTH = 300; -const getApiError = ( error?: string ) => { - switch ( error ) { - case 'connection_error': - return __( - '❗ We were unable to reach the experimental service. Please check back in shortly.', - 'woocommerce' - ); - default: - return __( - `❗ We encountered an issue with this experimental feature. Please check back in shortly.`, - 'woocommerce' - ); - } -}; - const recordDescriptionTracks = recordTracksFactory( 'description_completion', () => ( { @@ -161,12 +148,16 @@ export function WriteItForMeButtonContainer() { ); }; - title?.addEventListener( 'keyup', updateTitleHandler ); - title?.addEventListener( 'change', updateTitleHandler ); + // We have to keep track of manually typing, pasting, undo/redo, and when description is generated. + const eventsToTrack = [ 'keyup', 'change', 'undo', 'redo', 'paste' ]; + for ( const event of eventsToTrack ) { + title?.addEventListener( event, updateTitleHandler ); + } return () => { - title?.removeEventListener( 'keyup', updateTitleHandler ); - title?.removeEventListener( 'change', updateTitleHandler ); + for ( const event of eventsToTrack ) { + title?.removeEventListener( event, updateTitleHandler ); + } }; }, [ titleEl ] ); @@ -257,19 +248,11 @@ export function WriteItForMeButtonContainer() { try { await requestCompletion( prompt ); - if ( ! shortTinyEditor.getContent() || shortDescriptionGenerated ) { - await requestShortCompletion( - [ - 'Please write a high-converting Meta Description for the WooCommerce product description below.', - 'It should strictly adhere to the following guidelines:', - 'It should entice someone from a search results page to click on the product link.', - 'It should be no more than 155 characters so that the entire meta description fits within the space provided by the search engine result without being cut off or truncated.', - 'It should explain what users will see if they click on the product page link.', - 'Do not wrap in double quotes or use any other special characters.', - `It should include the target keyword for the product.`, - `Here is the full product description: \n${ tinyEditor.getContent() }`, - ].join( '\n' ) - ); + const longDescription = tinyEditor.getContent(); + if ( ! longDescription || shortDescriptionGenerated ) { + const shortDescriptionPrompt = + buildShortDescriptionPrompt( longDescription ); + await requestShortCompletion( shortDescriptionPrompt ); setShortDescriptionGenerated( true ); } } catch ( err ) { @@ -280,9 +263,31 @@ export function WriteItForMeButtonContainer() { return completionActive ? ( ) : ( - + <> + + { shortDescriptionGenerated && ( + + ) } + ); } diff --git a/plugins/woo-ai/src/product-short-description/index.ts b/plugins/woo-ai/src/product-short-description/index.ts new file mode 100644 index 00000000000..eeaabcce9c6 --- /dev/null +++ b/plugins/woo-ai/src/product-short-description/index.ts @@ -0,0 +1 @@ +export * from './product-short-description-button-container'; diff --git a/plugins/woo-ai/src/product-short-description/product-short-description-button-container.tsx b/plugins/woo-ai/src/product-short-description/product-short-description-button-container.tsx new file mode 100644 index 00000000000..2f35ce7cb29 --- /dev/null +++ b/plugins/woo-ai/src/product-short-description/product-short-description-button-container.tsx @@ -0,0 +1,132 @@ +/** + * External dependencies + */ +import { __, sprintf } from '@wordpress/i18n'; +import { useState, useEffect } from '@wordpress/element'; +import { + __experimentalUseCompletion as useCompletion, + UseCompletionError, +} from '@woocommerce/ai'; +import { useDispatch } from '@wordpress/data'; + +/** + * Internal dependencies + */ +import { + MIN_DESC_LENGTH_FOR_SHORT_DESC, + WOO_AI_PLUGIN_FEATURE_NAME, +} from '../constants'; +import { StopCompletionBtn, WriteItForMeBtn } from '../components'; +import { useTinyEditor } from '../hooks'; +import { getPostId, recordTracksFactory } from '../utils'; +import { translateApiErrors as getApiError } from '../utils/apiErrors'; + +const recordShortDescriptionTracks = recordTracksFactory( + 'short_description_completion', + () => ( { + post_id: getPostId(), + } ) +); + +export function buildShortDescriptionPrompt( longDesc: string ) { + return [ + 'Please write a high-converting Meta Description for the WooCommerce product description below.', + 'It should strictly adhere to the following guidelines:', + 'It should entice someone from a search results page to click on the product link.', + 'It should be no more than 155 characters so that the entire meta description fits within the space provided by the search engine result without being cut off or truncated.', + 'It should explain what users will see if they click on the product page link.', + 'Do not wrap in double quotes or use any other special characters.', + 'It should include the target keyword for the product.', + `Here is the full product description: \n${ longDesc }`, + ].join( '\n' ); +} + +export function WriteShortDescriptionButtonContainer() { + const { createWarningNotice } = useDispatch( 'core/notices' ); + + const [ fetching, setFetching ] = useState< boolean >( false ); + const tinyEditor = useTinyEditor(); + const shortTinyEditor = useTinyEditor( 'excerpt' ); + const [ postContent, setPostContent ] = useState( '' ); + + const handleUseCompletionError = ( err: UseCompletionError ) => { + createWarningNotice( getApiError( err.code ?? '' ) ); + setFetching( false ); + // eslint-disable-next-line no-console + console.error( err ); + }; + + const { requestCompletion, completionActive, stopCompletion } = + useCompletion( { + feature: WOO_AI_PLUGIN_FEATURE_NAME, + onStreamMessage: ( content ) => { + shortTinyEditor.setContent( content ); + }, + onStreamError: handleUseCompletionError, + onCompletionFinished: ( reason, content ) => { + recordShortDescriptionTracks( 'stop', { + reason, + character_count: content.length, + } ); + + setFetching( false ); + }, + } ); + + useEffect( () => { + recordShortDescriptionTracks( 'view_button' ); + }, [] ); + + // This effect sets up the 'init' listener to update the 'isEditorReady' state + useEffect( () => { + const editor = tinyEditor.getEditorObject(); + if ( editor ) { + // Set the content on initial page load. + setPostContent( tinyEditor.getContent() ); + // Register a listener for the tinyMCE editor to update the postContent state. + const changeHandler = () => { + setPostContent( tinyEditor.getContent() ); + }; + editor.on( 'input', changeHandler ); + editor.on( 'change', changeHandler ); + return () => { + editor.off( 'input', changeHandler ); + editor.off( 'change', changeHandler ); + }; + } + }, [ tinyEditor ] ); + + const writeItForMeEnabled = + ! fetching && postContent.length >= MIN_DESC_LENGTH_FOR_SHORT_DESC; + const onWriteItForMeClick = async () => { + setFetching( true ); + + const prompt = buildShortDescriptionPrompt( tinyEditor.getContent() ); + recordShortDescriptionTracks( 'start', { + prompt, + } ); + + try { + await requestCompletion( prompt ); + } catch ( err ) { + handleUseCompletionError( err as UseCompletionError ); + } + }; + + return completionActive ? ( + + ) : ( + + ); +} diff --git a/plugins/woo-ai/src/product-short-description/product-short-description.scss b/plugins/woo-ai/src/product-short-description/product-short-description.scss new file mode 100644 index 00000000000..70fe49d9684 --- /dev/null +++ b/plugins/woo-ai/src/product-short-description/product-short-description.scss @@ -0,0 +1,4 @@ +// Why do we need this but the other button works without it? +div#woocommerce-ai-app-product-short-description-gpt-button { + display: inline-block; +} \ No newline at end of file diff --git a/plugins/woo-ai/src/utils/apiErrors.ts b/plugins/woo-ai/src/utils/apiErrors.ts new file mode 100644 index 00000000000..cf352c3e18b --- /dev/null +++ b/plugins/woo-ai/src/utils/apiErrors.ts @@ -0,0 +1,19 @@ +/** + * External dependencies + */ +import { __ } from '@wordpress/i18n'; + +export const translateApiErrors = ( error?: string ) => { + switch ( error ) { + case 'connection_error': + return __( + '❗ We were unable to reach the experimental service. Please check back in shortly.', + 'woocommerce' + ); + default: + return __( + `❗ We encountered an issue with this experimental feature. Please check back in shortly.`, + 'woocommerce' + ); + } +}; diff --git a/plugins/woo-ai/src/utils/preferencesPersistence.ts b/plugins/woo-ai/src/utils/preferencesPersistence.ts new file mode 100644 index 00000000000..b4223b36f56 --- /dev/null +++ b/plugins/woo-ai/src/utils/preferencesPersistence.ts @@ -0,0 +1,23 @@ +/** + * External dependencies + */ +import { dispatch } from '@wordpress/data'; +import { store as preferencesStore } from '@wordpress/preferences'; + +const setPreferencesPersistence = () => + dispatch( preferencesStore ).setPersistenceLayer( { + get: async () => { + const savedPreferences = window.localStorage.getItem( + 'woo-ai-plugin-prefs' + ); + return savedPreferences ? JSON.parse( savedPreferences ) : {}; + }, + set: ( preferences: object ) => { + window.localStorage.setItem( + 'woo-ai-plugin-prefs', + JSON.stringify( preferences ) + ); + }, + } ); + +export default setPreferencesPersistence; diff --git a/plugins/woo-ai/src/utils/tiny-tools.ts b/plugins/woo-ai/src/utils/tiny-tools.ts index c183742f464..86d801c42a0 100644 --- a/plugins/woo-ai/src/utils/tiny-tools.ts +++ b/plugins/woo-ai/src/utils/tiny-tools.ts @@ -1,7 +1,9 @@ -type TinyContent = { +export type TinyContent = { getContent: () => string; setContent: ( str: string ) => void; id: string; + on: ( event: string, callback: ( event: Event ) => void ) => void; + off: ( event: string, callback: ( event: Event ) => void ) => void; }; declare const tinymce: { @@ -9,7 +11,7 @@ declare const tinymce: { editors: TinyContent[]; }; -const getTinyContentObject = ( editorId = 'content' ) => +export const getTinyContentObject = ( editorId = 'content' ) => typeof tinymce === 'object' ? tinymce.editors.find( ( editor: { id: string } ) => editor.id === editorId @@ -38,5 +40,5 @@ export const setTinyContent = ( str: string, editorId?: string ) => { }; export const getTinyContent = ( editorId?: string ) => { - return getTinyContentObject( editorId )?.getContent(); + return getTinyContentObject( editorId )?.getContent() ?? ''; }; diff --git a/plugins/woo-ai/webpack.config.js b/plugins/woo-ai/webpack.config.js index 9ce86d2e18e..3bdf5e0eb8a 100644 --- a/plugins/woo-ai/webpack.config.js +++ b/plugins/woo-ai/webpack.config.js @@ -23,6 +23,11 @@ module.exports = { }, resolve: { extensions: [ '.js', '.jsx', '.tsx', '.ts' ], + fallback: { + stream: false, + path: false, + fs: false, + }, }, plugins: [ ...defaultConfig.plugins.filter( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 63a91eaaef2..ca0c10121c2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2460,6 +2460,9 @@ importers: plugins/woo-ai: dependencies: + '@automattic/tour-kit': + specifier: ^1.1.1 + version: 1.1.1(@babel/core@7.21.3)(@types/react@17.0.50)(@wordpress/data@6.6.1)(react-dom@17.0.2)(react-with-direction@1.4.0)(react@17.0.2)(reakit-utils@0.15.2)(redux@4.2.0) '@emotion/react': specifier: ^11.10.4 version: 11.10.5(@babel/core@7.21.3)(@types/react@17.0.50)(react@17.0.2) @@ -2487,9 +2490,6 @@ importers: '@wordpress/compose': specifier: wp-6.0 version: 5.4.1(react@17.0.2) - '@wordpress/data': - specifier: wp-6.0 - version: 6.6.1(react@17.0.2) '@wordpress/element': specifier: wp-6.0 version: 4.4.1 @@ -2505,6 +2505,9 @@ importers: '@wordpress/plugins': specifier: wp-6.0 version: 4.4.3(react@17.0.2) + '@wordpress/preferences': + specifier: wp-6.0 + version: 1.2.5(@babel/core@7.21.3)(@types/react@17.0.50)(react-dom@17.0.2)(react-with-direction@1.4.0)(react@17.0.2) debug: specifier: ^4.3.3 version: 4.3.3 @@ -2521,6 +2524,9 @@ importers: specifier: ^3.39.3 version: 3.39.3(react-dom@17.0.2)(react@17.0.2) devDependencies: + '@svgr/webpack': + specifier: ^8.1.0 + version: 8.1.0 '@types/debug': specifier: ^4.1.7 version: 4.1.7 @@ -2542,6 +2548,9 @@ importers: '@woocommerce/eslint-plugin': specifier: workspace:* version: link:../../packages/js/eslint-plugin + '@wordpress/data': + specifier: wp-6.0 + version: 6.6.1(react@17.0.2) '@wordpress/env': specifier: ^8.2.0 version: 8.2.0 @@ -4040,7 +4049,7 @@ packages: '@wordpress/url': 3.41.0 fast-json-stable-stringify: 2.1.0 i18n-calypso: 6.0.1(@types/react@17.0.50)(react@17.0.2) - qs: 6.10.3 + qs: 6.11.2 react: 17.0.2 redux: 4.2.0 tslib: 2.5.0 @@ -4180,6 +4189,45 @@ packages: - utf-8-validate dev: false + /@automattic/tour-kit@1.1.1(@babel/core@7.21.3)(@types/react@17.0.50)(@wordpress/data@6.6.1)(react-dom@17.0.2)(react-with-direction@1.4.0)(react@17.0.2)(reakit-utils@0.15.2)(redux@4.2.0): + resolution: {integrity: sha512-qC15YGZZW5VUhvl47y9C+aN0q0QIejP9g9pFZ9M3PRRgaZcXx00+ZrL1Ngg0+V9eS5io5OZcji3D8OU6i48t/w==} + peerDependencies: + '@wordpress/data': ^6.1.5 + react: ^17.0.2 + react-dom: ^17.0.2 + reakit-utils: ^0.15.1 + redux: ^4.1.2 + dependencies: + '@automattic/components': 2.0.1(@types/react@17.0.50)(@wordpress/data@6.6.1)(react-dom@17.0.2)(react@17.0.2) + '@automattic/viewport': 1.1.0 + '@automattic/viewport-react': 1.0.0(react@17.0.2) + '@popperjs/core': 2.11.4 + '@wordpress/base-styles': 4.25.0 + '@wordpress/components': 19.12.0(@babel/core@7.21.3)(@types/react@17.0.50)(react-dom@17.0.2)(react-with-direction@1.4.0)(react@17.0.2) + '@wordpress/data': 6.6.1(react@17.0.2) + '@wordpress/dom': 3.40.0 + '@wordpress/element': 4.20.0 + '@wordpress/i18n': 4.40.0 + '@wordpress/icons': 9.31.0 + '@wordpress/primitives': 3.38.0 + '@wordpress/react-i18n': 3.8.0 + classnames: 2.3.1 + debug: 4.3.4(supports-color@9.2.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-popper: 2.2.5(@popperjs/core@2.11.4)(react@17.0.2) + reakit-utils: 0.15.2(react-dom@17.0.2)(react@17.0.2) + redux: 4.2.0 + transitivePeerDependencies: + - '@babel/core' + - '@types/react' + - bufferutil + - react-native + - react-with-direction + - supports-color + - utf-8-validate + dev: false + /@automattic/typography@1.0.0: resolution: {integrity: sha512-TnT+vPaNUXQYwDsPCPxhNY0d4LnOKvrb0SizUCC5iybo5sfOlX/rYalGDyz6nPQDF0EBaQwMf7qhVsflFR0cBg==} dev: false @@ -4280,6 +4328,13 @@ packages: dependencies: '@babel/highlight': 7.18.6 + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.13 + chalk: 2.4.2 + /@babel/compat-data@7.16.4: resolution: {integrity: sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==} engines: {node: '>=6.9.0'} @@ -4343,20 +4398,20 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.13 '@babel/generator': 7.21.3 '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) - '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-module-transforms': 7.22.15(@babel/core@7.21.3) '@babel/helpers': 7.21.0 - '@babel/parser': 7.21.3 - '@babel/template': 7.20.7 + '@babel/parser': 7.22.15 + '@babel/template': 7.22.15 '@babel/traverse': 7.21.3 - '@babel/types': 7.22.4 + '@babel/types': 7.22.15 convert-source-map: 1.8.0 debug: 4.3.4(supports-color@9.2.2) gensync: 1.0.0-beta.2 json5: 2.2.3 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -4461,6 +4516,12 @@ packages: dependencies: '@babel/types': 7.22.4 + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.15 + /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9: resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} engines: {node: '>=6.9.0'} @@ -4676,6 +4737,40 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.12.9): + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.15 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.12.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.21.3): + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.15 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.21.3) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + /@babel/helper-create-regexp-features-plugin@7.19.0(@babel/core@7.12.9): resolution: {integrity: sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==} engines: {node: '>=6.9.0'} @@ -4775,6 +4870,10 @@ packages: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} + /@babel/helper-environment-visitor@7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + /@babel/helper-explode-assignable-expression@7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} @@ -4795,6 +4894,13 @@ packages: '@babel/template': 7.20.7 '@babel/types': 7.22.4 + /@babel/helper-function-name@7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.22.15 + /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} @@ -4807,6 +4913,12 @@ packages: dependencies: '@babel/types': 7.22.4 + /@babel/helper-member-expression-to-functions@7.22.15: + resolution: {integrity: sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.15 + /@babel/helper-module-imports@7.16.0: resolution: {integrity: sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==} engines: {node: '>=6.9.0'} @@ -4832,6 +4944,12 @@ packages: dependencies: '@babel/types': 7.22.4 + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.15 + /@babel/helper-module-transforms@7.17.7: resolution: {integrity: sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==} engines: {node: '>=6.9.0'} @@ -4877,12 +4995,44 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-module-transforms@7.22.15(@babel/core@7.12.9): + resolution: {integrity: sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.15 + + /@babel/helper-module-transforms@7.22.15(@babel/core@7.21.3): + resolution: {integrity: sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.15 + /@babel/helper-optimise-call-expression@7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.4 + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.15 + /@babel/helper-plugin-utils@7.10.4: resolution: {integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==} dev: true @@ -4903,6 +5053,10 @@ packages: resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==} engines: {node: '>=6.9.0'} + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + /@babel/helper-remap-async-to-generator@7.16.4: resolution: {integrity: sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==} engines: {node: '>=6.9.0'} @@ -4992,6 +5146,28 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-replace-supers@7.22.9(@babel/core@7.12.9): + resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.15 + '@babel/helper-optimise-call-expression': 7.22.5 + + /@babel/helper-replace-supers@7.22.9(@babel/core@7.21.3): + resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.15 + '@babel/helper-optimise-call-expression': 7.22.5 + /@babel/helper-simple-access@7.18.6: resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==} engines: {node: '>=6.9.0'} @@ -5004,18 +5180,36 @@ packages: dependencies: '@babel/types': 7.22.4 + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.15 + /@babel/helper-skip-transparent-expression-wrappers@7.18.9: resolution: {integrity: sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.4 + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.15 + /@babel/helper-split-export-declaration@7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.4 + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.15 + /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} @@ -5024,10 +5218,18 @@ packages: resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} engines: {node: '>=6.9.0'} + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.22.15: + resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} + engines: {node: '>=6.9.0'} + /@babel/helper-validator-option@7.14.5: resolution: {integrity: sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==} engines: {node: '>=6.9.0'} @@ -5045,6 +5247,11 @@ packages: resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-option@7.22.15: + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-wrap-function@7.19.0: resolution: {integrity: sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==} engines: {node: '>=6.9.0'} @@ -5084,6 +5291,14 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 + /@babel/highlight@7.22.13: + resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.15 + chalk: 2.4.2 + js-tokens: 4.0.0 + /@babel/parser@7.17.8: resolution: {integrity: sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==} engines: {node: '>=6.0.0'} @@ -5105,6 +5320,13 @@ packages: dependencies: '@babel/types': 7.22.4 + /@babel/parser@7.22.15: + resolution: {integrity: sha512-RWmQ/sklUN9BvGGpCDgSubhHWfAx24XDTDObup4ffvxaYsptOg2P3KG0j+1eWKLxpkX0j0uHxmpq2Z1SP/VhxA==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.15 + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.16.7(@babel/core@7.12.9): resolution: {integrity: sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==} engines: {node: '>=6.9.0'} @@ -5992,7 +6214,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.12.9) dev: true @@ -6795,7 +7017,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-jsx@7.16.0(@babel/core@7.12.9): @@ -6855,6 +7077,24 @@ packages: '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.12.9): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.12.9): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -7081,15 +7321,6 @@ packages: '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-syntax-typescript@7.18.6(@babel/core@7.12.9): - resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-syntax-typescript@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==} engines: {node: '>=6.9.0'} @@ -7097,7 +7328,25 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.12.9): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-arrow-functions@7.16.0(@babel/core@7.12.9): resolution: {integrity: sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==} @@ -8352,6 +8601,7 @@ packages: '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: - supports-color + dev: true /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.17.8): resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} @@ -8380,6 +8630,28 @@ packages: transitivePeerDependencies: - supports-color + /@babel/plugin-transform-modules-commonjs@7.22.15(@babel/core@7.12.9): + resolution: {integrity: sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-module-transforms': 7.22.15(@babel/core@7.12.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + + /@babel/plugin-transform-modules-commonjs@7.22.15(@babel/core@7.21.3): + resolution: {integrity: sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-module-transforms': 7.22.15(@babel/core@7.21.3) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + /@babel/plugin-transform-modules-systemjs@7.16.0(@babel/core@7.12.9): resolution: {integrity: sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==} engines: {node: '>=6.9.0'} @@ -8936,16 +9208,6 @@ packages: '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-transform-react-constant-elements@7.17.6(@babel/core@7.21.3): - resolution: {integrity: sha512-OBv9VkyyKtsHZiHLoSfCn+h6yU7YKX8nrs32xUmOa1SRSk+t03FosB6fBZ0Yz4BpD1WV7l73Nsad+2Tz7APpqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.21.5 - dev: true - /@babel/plugin-transform-react-constant-elements@7.22.3(@babel/core@7.21.3): resolution: {integrity: sha512-b5J6muxQYp4H7loAQv/c7GO5cPuRA6H5hx4gO+/Hn+Cu9MRQU0PNiUoWq1L//8sq6kFSNxGXFb2XTaUfa9y+Pg==} engines: {node: '>=6.9.0'} @@ -9011,7 +9273,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-react-jsx-self@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==} @@ -9020,7 +9282,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-react-jsx-source@7.18.6(@babel/core@7.12.9): resolution: {integrity: sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==} @@ -9029,7 +9291,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-react-jsx-source@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==} @@ -9038,7 +9300,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-react-jsx@7.16.0(@babel/core@7.12.9): resolution: {integrity: sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==} @@ -9338,11 +9600,11 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-module-imports': 7.21.4 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.12.9) babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.12.9) babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.12.9) - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -9354,11 +9616,11 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-module-imports': 7.21.4 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3) babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.3) babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.3) - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -9732,19 +9994,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/plugin-transform-typescript@7.19.3(@babel/core@7.12.9): - resolution: {integrity: sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-create-class-features-plugin': 7.19.0(@babel/core@7.12.9) - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-typescript': 7.18.6(@babel/core@7.12.9) - transitivePeerDependencies: - - supports-color - /@babel/plugin-transform-typescript@7.19.3(@babel/core@7.21.3): resolution: {integrity: sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==} engines: {node: '>=6.9.0'} @@ -9758,6 +10007,30 @@ packages: transitivePeerDependencies: - supports-color + /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.12.9): + resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.12.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.12.9) + + /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.21.3): + resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.21.3) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.21.3) + /@babel/plugin-transform-unicode-escapes@7.16.0(@babel/core@7.12.9): resolution: {integrity: sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==} engines: {node: '>=6.9.0'} @@ -10625,6 +10898,20 @@ packages: transitivePeerDependencies: - supports-color + /@babel/preset-typescript@7.22.15(@babel/core@7.21.3): + resolution: {integrity: sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.21.3) + '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.21.3) + '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.21.3) + dev: true + /@babel/register@7.12.1(@babel/core@7.12.9): resolution: {integrity: sha512-XWcmseMIncOjoydKZnWvWi0/5CUCD+ZYKhRwgYlWOrA8fGZ/FjuLRpqtIhLOVD/fvR1b9DQHtZPn68VvhpYf+Q==} peerDependencies: @@ -10721,6 +11008,14 @@ packages: '@babel/parser': 7.21.3 '@babel/types': 7.22.4 + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.22.15 + '@babel/types': 7.22.15 + /@babel/traverse@7.17.3: resolution: {integrity: sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==} engines: {node: '>=6.9.0'} @@ -10759,14 +11054,14 @@ packages: resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.13 '@babel/generator': 7.21.3 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.21.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.21.3 - '@babel/types': 7.22.4 + '@babel/parser': 7.22.15 + '@babel/types': 7.22.15 debug: 4.3.4(supports-color@9.2.2) globals: 11.12.0 transitivePeerDependencies: @@ -10802,6 +11097,14 @@ packages: '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + /@babel/types@7.22.15: + resolution: {integrity: sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.15 + to-fast-properties: 2.0.0 + /@babel/types@7.22.4: resolution: {integrity: sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==} engines: {node: '>=6.9.0'} @@ -11324,7 +11627,7 @@ packages: '@floating-ui/dom': 0.4.5 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - use-isomorphic-layout-effect: 1.1.1(@types/react@17.0.50)(react@17.0.2) + use-isomorphic-layout-effect: 1.1.2(@types/react@17.0.50)(react@17.0.2) transitivePeerDependencies: - '@types/react' dev: false @@ -14624,7 +14927,7 @@ packages: node-stream-zip: 1.15.0 ora: 5.4.1 prompts: 2.4.2 - semver: 6.3.0 + semver: 6.3.1 strip-ansi: 5.2.0 sudo-prompt: 9.2.1 wcwidth: 1.0.1 @@ -14714,7 +15017,7 @@ packages: node-fetch: 2.6.7 open: 6.4.0 ora: 5.4.1 - semver: 6.3.0 + semver: 6.3.1 shell-quote: 1.7.3 transitivePeerDependencies: - encoding @@ -14745,7 +15048,7 @@ packages: fs-extra: 8.1.0 graceful-fs: 4.2.9 prompts: 2.4.2 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - '@babel/core' - bufferutil @@ -16114,11 +16417,11 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/generator': 7.21.3 - '@babel/parser': 7.21.3 + '@babel/parser': 7.22.15 '@babel/plugin-transform-react-jsx': 7.22.3(@babel/core@7.21.3) '@babel/preset-env': 7.20.2(@babel/core@7.21.3) '@babel/traverse': 7.21.3 - '@babel/types': 7.22.4 + '@babel/types': 7.22.15 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/mdx1-csf': 0.0.1(@babel/core@7.21.3) core-js: 3.29.1 @@ -16319,9 +16622,9 @@ packages: resolution: {integrity: sha512-4biZIWWzoWlCarMZmTpqcJNgo/RBesYZwGFbQeXiGYsswuvfWARZnW9RE9aUEMZ4XPn7B1N3EKkWcdcWe/K2tg==} dependencies: '@babel/generator': 7.21.3 - '@babel/parser': 7.21.3 + '@babel/parser': 7.22.15 '@babel/preset-env': 7.20.2(@babel/core@7.17.8) - '@babel/types': 7.22.4 + '@babel/types': 7.22.15 '@mdx-js/mdx': 1.6.22 '@types/lodash': 4.14.184 js-string-escape: 1.0.1 @@ -16827,16 +17130,43 @@ packages: '@babel/core': 7.21.3 dev: true + /@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + /@svgr/babel-plugin-remove-jsx-attribute@5.4.0: resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} engines: {node: '>=10'} dev: true + /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + /@svgr/babel-plugin-remove-jsx-empty-expression@5.0.1: resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} engines: {node: '>=10'} dev: true + /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + /@svgr/babel-plugin-replace-jsx-attribute-value@5.0.1: resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} engines: {node: '>=10'} @@ -16851,6 +17181,15 @@ packages: '@babel/core': 7.21.3 dev: true + /@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + /@svgr/babel-plugin-svg-dynamic-title@5.4.0: resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} engines: {node: '>=10'} @@ -16865,6 +17204,15 @@ packages: '@babel/core': 7.21.3 dev: true + /@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + /@svgr/babel-plugin-svg-em-dimensions@5.4.0: resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} engines: {node: '>=10'} @@ -16879,6 +17227,15 @@ packages: '@babel/core': 7.21.3 dev: true + /@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + /@svgr/babel-plugin-transform-react-native-svg@5.4.0: resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} engines: {node: '>=10'} @@ -16893,6 +17250,15 @@ packages: '@babel/core': 7.21.3 dev: true + /@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.21.3): + resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + /@svgr/babel-plugin-transform-svg-component@5.5.0: resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} engines: {node: '>=10'} @@ -16907,6 +17273,15 @@ packages: '@babel/core': 7.21.3 dev: true + /@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.21.3): + resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} + engines: {node: '>=12'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + dev: true + /@svgr/babel-preset@5.5.0: resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==} engines: {node: '>=10'} @@ -16938,6 +17313,23 @@ packages: '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.21.3) dev: true + /@svgr/babel-preset@8.1.0(@babel/core@7.21.3): + resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.21.3) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.21.3) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.21.3) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.21.3) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.21.3) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.21.3) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.21.3) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.21.3) + dev: true + /@svgr/core@5.5.0: resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==} engines: {node: '>=10'} @@ -16962,16 +17354,37 @@ packages: - supports-color dev: true + /@svgr/core@8.1.0: + resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} + engines: {node: '>=14'} + dependencies: + '@babel/core': 7.21.3 + '@svgr/babel-preset': 8.1.0(@babel/core@7.21.3) + camelcase: 6.2.1 + cosmiconfig: 8.2.0 + snake-case: 3.0.4 + transitivePeerDependencies: + - supports-color + dev: true + /@svgr/hast-util-to-babel-ast@5.5.0: resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} engines: {node: '>=10'} dependencies: - '@babel/types': 7.22.4 + '@babel/types': 7.22.15 dev: true /@svgr/hast-util-to-babel-ast@6.5.1: resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} engines: {node: '>=10'} + dependencies: + '@babel/types': 7.22.15 + entities: 4.5.0 + dev: true + + /@svgr/hast-util-to-babel-ast@8.0.0: + resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} + engines: {node: '>=14'} dependencies: '@babel/types': 7.22.4 entities: 4.5.0 @@ -17004,6 +17417,21 @@ packages: - supports-color dev: true + /@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0): + resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==} + engines: {node: '>=14'} + peerDependencies: + '@svgr/core': '*' + dependencies: + '@babel/core': 7.21.3 + '@svgr/babel-preset': 8.1.0(@babel/core@7.21.3) + '@svgr/core': 8.1.0 + '@svgr/hast-util-to-babel-ast': 8.0.0 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: true + /@svgr/plugin-svgo@5.5.0: resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==} engines: {node: '>=10'} @@ -17025,12 +17453,24 @@ packages: svgo: 2.8.0 dev: true + /@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0): + resolution: {integrity: sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==} + engines: {node: '>=14'} + peerDependencies: + '@svgr/core': '*' + dependencies: + '@svgr/core': 8.1.0 + cosmiconfig: 8.2.0 + deepmerge: 4.3.1 + svgo: 3.0.2 + dev: true + /@svgr/webpack@5.5.0: resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} engines: {node: '>=10'} dependencies: '@babel/core': 7.21.3 - '@babel/plugin-transform-react-constant-elements': 7.17.6(@babel/core@7.21.3) + '@babel/plugin-transform-react-constant-elements': 7.22.3(@babel/core@7.21.3) '@babel/preset-env': 7.20.2(@babel/core@7.21.3) '@babel/preset-react': 7.22.3(@babel/core@7.21.3) '@svgr/core': 5.5.0 @@ -17057,6 +17497,22 @@ packages: - supports-color dev: true + /@svgr/webpack@8.1.0: + resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==} + engines: {node: '>=14'} + dependencies: + '@babel/core': 7.21.3 + '@babel/plugin-transform-react-constant-elements': 7.22.3(@babel/core@7.21.3) + '@babel/preset-env': 7.20.2(@babel/core@7.21.3) + '@babel/preset-react': 7.22.3(@babel/core@7.21.3) + '@babel/preset-typescript': 7.22.15(@babel/core@7.21.3) + '@svgr/core': 8.1.0 + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0) + transitivePeerDependencies: + - supports-color + dev: true + /@szmarczak/http-timer@4.0.6: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} @@ -17252,7 +17708,7 @@ packages: /@types/babel__traverse@7.14.2: resolution: {integrity: sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==} dependencies: - '@babel/types': 7.22.4 + '@babel/types': 7.22.15 /@types/body-parser@1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} @@ -20848,7 +21304,7 @@ packages: '@wordpress/keycodes': 3.6.1 '@wordpress/media-utils': 3.4.1 '@wordpress/notices': 3.6.1(react@17.0.2) - '@wordpress/preferences': 1.3.0(@babel/core@7.21.3)(@types/react@17.0.50)(react-dom@17.0.2)(react-with-direction@1.4.0)(react@17.0.2) + '@wordpress/preferences': 1.2.5(@babel/core@7.21.3)(@types/react@17.0.50)(react-dom@17.0.2)(react-with-direction@1.4.0)(react@17.0.2) '@wordpress/reusable-blocks': 3.17.0(@babel/core@7.21.3)(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2) '@wordpress/rich-text': 5.4.2(react@17.0.2) '@wordpress/server-side-render': 3.17.0(@babel/core@7.21.3)(@types/react@17.0.50)(react-dom@17.0.2)(react@17.0.2) @@ -21378,7 +21834,7 @@ packages: '@wordpress/i18n': 4.6.1 '@wordpress/icons': 8.2.3 '@wordpress/plugins': 4.4.3(react@17.0.2) - '@wordpress/preferences': 1.3.0(@babel/core@7.21.3)(@types/react@17.0.50)(react-dom@17.0.2)(react-with-direction@1.4.0)(react@17.0.2) + '@wordpress/preferences': 1.2.5(@babel/core@7.21.3)(@types/react@17.0.50)(react-dom@17.0.2)(react-with-direction@1.4.0)(react@17.0.2) '@wordpress/viewport': 4.4.1(react@17.0.2) classnames: 2.3.1 lodash: 4.17.21 @@ -21875,19 +22331,19 @@ packages: postcss: 7.0.39 dev: true - /@wordpress/preferences@1.3.0(@babel/core@7.21.3)(@types/react@17.0.50)(react-dom@17.0.2)(react-with-direction@1.4.0)(react@17.0.2): - resolution: {integrity: sha512-2ACfz6LkQY2oAcEgTVpkfpasywo/nSmN5jbpT2gNoF/W/RCFBso+VDyuLsfpJ1INbbq+6pPKLccLBWYAvwuFdA==} + /@wordpress/preferences@1.2.5(@babel/core@7.21.3)(@types/react@17.0.50)(react-dom@17.0.2)(react-with-direction@1.4.0)(react@17.0.2): + resolution: {integrity: sha512-/AyotisluO81NI1weWBDSsU2Nfc+BzGB/Hrzp6u7cQiWH/HZjouAdjG7RvKMlicCu5R/v6FTCQcjmimRfaYhEA==} engines: {node: '>=12'} peerDependencies: react: ^17.0.0 react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.21.0 - '@wordpress/a11y': 3.40.0 - '@wordpress/components': 19.12.0(@babel/core@7.21.3)(@types/react@17.0.50)(react-dom@17.0.2)(react-with-direction@1.4.0)(react@17.0.2) - '@wordpress/data': 6.15.0(react@17.0.2) - '@wordpress/i18n': 4.40.0 - '@wordpress/icons': 8.4.0 + '@wordpress/a11y': 3.6.1 + '@wordpress/components': 19.8.5(@babel/core@7.21.3)(@types/react@17.0.50)(react-dom@17.0.2)(react-with-direction@1.4.0)(react@17.0.2) + '@wordpress/data': 6.6.1(react@17.0.2) + '@wordpress/i18n': 4.6.1 + '@wordpress/icons': 8.2.3 classnames: 2.3.1 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) @@ -23737,10 +24193,10 @@ packages: peerDependencies: eslint: '>= 4.12.1' dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.21.3 + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.22.15 '@babel/traverse': 7.21.3 - '@babel/types': 7.22.4 + '@babel/types': 7.22.15 eslint: 7.32.0 eslint-visitor-keys: 1.3.0 resolve: 1.20.0 @@ -24119,7 +24575,7 @@ packages: resolution: {integrity: sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==} engines: {node: '>=6'} dependencies: - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 find-up: 3.0.0 istanbul-lib-instrument: 3.3.0 test-exclude: 5.2.3 @@ -24593,7 +25049,7 @@ packages: '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.12.9) '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.12.9) '@babel/plugin-syntax-flow': 7.16.7(@babel/core@7.12.9) - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.12.9) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.12.9) '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) '@babel/plugin-transform-arrow-functions': 7.18.6(@babel/core@7.12.9) '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.12.9) @@ -24606,7 +25062,7 @@ packages: '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.12.9) '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.12.9) '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.12.9) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.12.9) + '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.12.9) '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.12.9) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.12.9) '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.12.9) @@ -24629,7 +25085,7 @@ packages: '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.3) '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.3) '@babel/plugin-syntax-flow': 7.16.7(@babel/core@7.21.3) - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.3) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.21.3) '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3) '@babel/plugin-transform-arrow-functions': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.3) @@ -24642,7 +25098,7 @@ packages: '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.3) '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.3) '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3) + '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.21.3) '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3) '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.3) @@ -26914,7 +27370,7 @@ packages: postcss-modules-values: 3.0.0 postcss-value-parser: 4.2.0 schema-utils: 2.7.1 - semver: 6.3.0 + semver: 6.3.1 webpack: 4.46.0(webpack-cli@3.3.12) dev: true @@ -26957,7 +27413,7 @@ packages: postcss-modules-values: 3.0.0 postcss-value-parser: 4.2.0 schema-utils: 2.7.1 - semver: 6.3.0 + semver: 6.3.1 webpack: 5.76.3(webpack-cli@3.3.12) dev: true @@ -27034,6 +27490,16 @@ packages: domutils: 2.8.0 nth-check: 2.0.1 + /css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.0.1 + dev: true + /css-tree@1.0.0-alpha.37: resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} engines: {node: '>=8.0.0'} @@ -27048,6 +27514,22 @@ packages: mdn-data: 2.0.14 source-map: 0.6.1 + /css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.0.2 + dev: true + + /css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.0.2 + dev: true + /css-what@3.4.2: resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} engines: {node: '>= 6'} @@ -27056,6 +27538,11 @@ packages: resolution: {integrity: sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==} engines: {node: '>= 6'} + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: true + /css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} @@ -27198,6 +27685,13 @@ packages: dependencies: css-tree: 1.1.3 + /csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + css-tree: 2.2.1 + dev: true + /cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} @@ -27545,6 +28039,11 @@ packages: resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} engines: {node: '>=0.10.0'} + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + /deepsignal@1.3.6(@preact/signals@1.2.1)(preact@10.17.1): resolution: {integrity: sha512-yjd+vtiznL6YaMptOsKnEKkPr60OEApa+LRe+Qe6Ile/RfCOrELKk/YM3qVpXFZiyOI3Ng67GDEyjAlqVc697g==} peerDependencies: @@ -27902,6 +28401,14 @@ packages: domhandler: 4.2.2 entities: 2.2.0 + /dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + dev: true + /dom-walk@0.1.2: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} dev: true @@ -27917,6 +28424,10 @@ packages: /domelementtype@2.2.0: resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==} + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: true + /domexception@1.0.1: resolution: {integrity: sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==} dependencies: @@ -27947,6 +28458,13 @@ packages: dependencies: domelementtype: 2.2.0 + /domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + /dompurify@2.3.6: resolution: {integrity: sha512-OFP2u/3T1R5CEgWCEONuJ1a5+MFKnOYpkywpUSxv/dj1LeBT1erK+JwM7zK0ROy2BRhqVCf0LRw/kHqKuMkVGg==} dev: false @@ -27964,6 +28482,14 @@ packages: domelementtype: 2.2.0 domhandler: 4.2.2 + /domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dev: true + /dot-case@1.1.2: resolution: {integrity: sha512-NzEIt12UjECXi6JZ/R/nBey6EE1qCN0yUTEFaPIaKW0AcOEwlKqujtcJVbtSfLNnj3CDoXLQyli79vAaqohyvw==} dependencies: @@ -28821,7 +29347,7 @@ packages: lodash: 4.17.21 object.entries-ponyfill: 1.0.1 regextras: 0.7.1 - semver: 6.3.0 + semver: 6.3.1 spdx-expression-parse: 3.0.1 transitivePeerDependencies: - supports-color @@ -29039,7 +29565,7 @@ packages: object.values: 1.1.5 prop-types: 15.8.1 resolve: 2.0.0-next.3 - semver: 6.3.0 + semver: 6.3.1 string.prototype.matchall: 4.0.6 dev: true @@ -29216,7 +29742,7 @@ packages: engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} hasBin: true dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.13 ajv: 6.12.6 chalk: 2.4.2 cross-spawn: 6.0.5 @@ -29247,7 +29773,7 @@ packages: optionator: 0.8.3 progress: 2.0.3 regexpp: 2.0.1 - semver: 6.3.0 + semver: 6.3.1 strip-ansi: 5.2.0 strip-json-comments: 3.1.1 table: 5.4.6 @@ -29424,7 +29950,7 @@ packages: engines: {node: '>=8.3.0'} dependencies: '@babel/traverse': 7.21.3 - '@babel/types': 7.22.4 + '@babel/types': 7.22.15 c8: 7.11.0 transitivePeerDependencies: - supports-color @@ -30359,7 +30885,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.13 chalk: 2.4.2 eslint: 8.32.0 micromatch: 3.1.10(supports-color@6.1.0) @@ -33227,12 +33753,12 @@ packages: engines: {node: '>=6'} dependencies: '@babel/generator': 7.21.3 - '@babel/parser': 7.21.3 - '@babel/template': 7.20.7 + '@babel/parser': 7.22.15 + '@babel/template': 7.22.15 '@babel/traverse': 7.21.3 - '@babel/types': 7.22.4 + '@babel/types': 7.22.15 istanbul-lib-coverage: 2.0.5 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false @@ -33244,7 +33770,7 @@ packages: '@babel/core': 7.21.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true @@ -34217,7 +34743,7 @@ packages: '@jest/types': 25.5.0 jest-mock: 25.5.0 jest-util: 25.5.0 - semver: 6.3.0 + semver: 6.3.1 dev: true /jest-environment-node@26.6.2: @@ -34646,7 +35172,7 @@ packages: resolution: {integrity: sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==} engines: {node: '>= 6'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.13 '@jest/test-result': 24.9.0 '@jest/types': 24.9.0 '@types/stack-utils': 1.0.1 @@ -35468,7 +35994,7 @@ packages: resolution: {integrity: sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==} engines: {node: '>= 6'} dependencies: - '@babel/types': 7.22.4 + '@babel/types': 7.22.15 '@jest/types': 24.9.0 chalk: 2.4.2 expect: 24.9.0 @@ -35480,7 +36006,7 @@ packages: mkdirp: 0.5.5 natural-compare: 1.4.0 pretty-format: 24.9.0 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false @@ -37421,6 +37947,14 @@ packages: /mdn-data@2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + /mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + dev: true + + /mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + dev: true + /mdn-data@2.0.4: resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} @@ -37734,7 +38268,7 @@ packages: '@babel/plugin-transform-flow-strip-types': 7.16.7(@babel/core@7.12.9) '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.12.9) '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.12.9) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.12.9) + '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.12.9) '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1(@babel/core@7.12.9) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.12.9) '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.12.9) @@ -37746,9 +38280,9 @@ packages: '@babel/plugin-transform-spread': 7.19.0(@babel/core@7.12.9) '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.12.9) '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.12.9) - '@babel/plugin-transform-typescript': 7.19.3(@babel/core@7.12.9) + '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.12.9) '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.12.9) - '@babel/template': 7.20.7 + '@babel/template': 7.22.15 react-refresh: 0.4.3 transitivePeerDependencies: - supports-color @@ -37781,7 +38315,7 @@ packages: '@babel/plugin-transform-flow-strip-types': 7.16.7(@babel/core@7.21.3) '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.3) '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.3) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3) + '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.21.3) '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1(@babel/core@7.21.3) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3) '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.21.3) @@ -37793,9 +38327,9 @@ packages: '@babel/plugin-transform-spread': 7.19.0(@babel/core@7.21.3) '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.3) - '@babel/plugin-transform-typescript': 7.19.3(@babel/core@7.21.3) + '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.21.3) '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.3) - '@babel/template': 7.20.7 + '@babel/template': 7.22.15 react-refresh: 0.4.3 transitivePeerDependencies: - supports-color @@ -37836,7 +38370,7 @@ packages: resolution: {integrity: sha512-77TZuf10Ru+USo97HwDT8UceSzOGBZB8EYTObOsR0n1sjQHjvKsMflLA9Pco13o9NsIYAG6c6P/0vIpiHKqaKA==} dependencies: '@babel/traverse': 7.21.3 - '@babel/types': 7.22.4 + '@babel/types': 7.22.15 invariant: 2.2.4 metro-symbolicate: 0.72.1 nullthrows: 1.1.1 @@ -37850,7 +38384,7 @@ packages: resolution: {integrity: sha512-dqYK8DZ4NzGkhik0IkKRBLuPplXqF6GoKrFQ/XMw0FYGy3+dFJ9nIDxsCyg3GcjCt6Mg8FEqGrXlpMG7MrtC9Q==} dependencies: '@babel/traverse': 7.21.3 - '@babel/types': 7.22.4 + '@babel/types': 7.22.15 invariant: 2.2.4 metro-symbolicate: 0.72.2 nullthrows: 1.1.1 @@ -37893,7 +38427,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/generator': 7.21.3 - '@babel/template': 7.20.7 + '@babel/template': 7.22.15 '@babel/traverse': 7.21.3 nullthrows: 1.1.1 transitivePeerDependencies: @@ -37904,8 +38438,8 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/generator': 7.21.3 - '@babel/parser': 7.21.3 - '@babel/types': 7.22.4 + '@babel/parser': 7.22.15 + '@babel/types': 7.22.15 babel-preset-fbjs: 3.4.0(@babel/core@7.21.3) metro: 0.72.2 metro-babel-transformer: 0.72.2 @@ -37925,13 +38459,13 @@ packages: resolution: {integrity: sha512-TWqKnPMu4OX7ew7HJwsD4LBzhtn7Iqeu2OAqjlMCJtqMKqi/YWoxFf1VGZxH/mJVLhbe/5SWU5St/tqsST8swg==} hasBin: true dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.13 '@babel/core': 7.21.3 '@babel/generator': 7.21.3 - '@babel/parser': 7.21.3 - '@babel/template': 7.20.7 + '@babel/parser': 7.22.15 + '@babel/template': 7.22.15 '@babel/traverse': 7.21.3 - '@babel/types': 7.22.4 + '@babel/types': 7.22.15 absolute-path: 0.0.0 accepts: 1.3.8 async: 3.2.4 @@ -38675,7 +39209,7 @@ packages: dependencies: growly: 1.3.0 is-wsl: 2.2.0 - semver: 6.3.0 + semver: 6.3.1 shellwords: 0.1.1 which: 1.3.1 dev: true @@ -41400,7 +41934,6 @@ packages: engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 - dev: true /qs@6.5.2: resolution: {integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==} @@ -41914,7 +42447,7 @@ packages: /react-native-codegen@0.70.4(@babel/preset-env@7.12.7): resolution: {integrity: sha512-bPyd5jm840omfx24VRyMP+KPzAefpRDwE18w5ywMWHCWZBSqLn1qI9WgBPnavlIrjTEuzxznWQNcaA26lw8AMQ==} dependencies: - '@babel/parser': 7.21.3 + '@babel/parser': 7.22.15 flow-parser: 0.121.0 jscodeshift: 0.13.1(@babel/preset-env@7.12.7) nullthrows: 1.1.1 @@ -43723,6 +44256,10 @@ packages: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + /semver@7.0.0: resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} hasBin: true @@ -45269,6 +45806,19 @@ packages: stable: 0.1.8 dev: true + /svgo@3.0.2: + resolution: {integrity: sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + csso: 5.0.5 + picocolors: 1.0.0 + dev: true + /swap-case@1.1.2: resolution: {integrity: sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=} dependencies: