diff --git a/assets/css/src/design-pack-notice.scss b/assets/css/src/design-pack-notice.scss new file mode 100644 index 0000000..0a4fc41 --- /dev/null +++ b/assets/css/src/design-pack-notice.scss @@ -0,0 +1,118 @@ +@custom-media --max-tablet (max-width: 769px); +@custom-media --max-desktop (max-width: 1200px); + +#raft-design-pack-notice { + + .notice-wrap { + display: flex; + align-items: center; + gap: 15px; + border: 0; + border-radius: 8px; + padding: 20px 25px; + opacity: 0; + animation: fade-down-in 0.3s ease forwards 0.3s; + z-index: 10000; + position: fixed; + background: #fff; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + right: 10px; + bottom: 35px; + + @media (--max-desktop) { + bottom: 10px; + right: 10px; + padding: 10px 15px; + margin-left: 10px; + } + + &.dismissed { + animation: fade-up-out 0.3s ease forwards 0s; + } + } + + svg { + flex-shrink: 0; + } + + button { + border: 0; + background: 0; + cursor: pointer; + padding: 0; + border-radius: 5px; + + &:hover { + background: #e7e7e7; + } + } + + .content-wrap { + display: grid; + } + + span { + font-weight: 600; + color: #6a6a6a; + font-size: 12px; + + @media (--max-desktop) { + font-size: 10px; + } + } + + p { + + @media (--max-desktop) { + font-size: 12px; + } + font-size: 16px; + margin: 0; + padding: 0; + } + + a { + margin-left: 35px; + font-weight: 700; + font-size: 16px; + text-decoration: 0; + color: #fff; + background: #383fef; + border-radius: 5px; + padding: 12px 16px; + text-align: center; + + @media (--max-desktop) { + font-size: 14px; + padding: 7px 10px; + margin-left: 0; + flex-shrink: 0; + } + } +} + +@keyframes fade-down-in { + + 0% { + opacity: 0; + transform: translateY(-20px); + } + + 100% { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes fade-up-out { + + 0% { + opacity: 1; + transform: translateY(0); + } + + 100% { + opacity: 0; + transform: translateY(-20px); + } +} diff --git a/assets/js/src/components/DesignPackNotice.js b/assets/js/src/components/DesignPackNotice.js new file mode 100644 index 0000000..d9afc33 --- /dev/null +++ b/assets/js/src/components/DesignPackNotice.js @@ -0,0 +1,98 @@ +/* global designPackNoticeData */ +import { useSelect } from '@wordpress/data'; +import { Icon, closeSmall } from '@wordpress/icons'; +import { useEffect, useState } from '@wordpress/element'; + +const logo = ( + + + +); + +const BLOCK_PATTERN_INSERTED_NOTICE = 'block-pattern-inserted-notice'; +export default () => { + const [ dismissed, setDismissed ] = useState( false ); + const [ noticeTriggered, setNoticeTriggered ] = useState( false ); + + const patternInserted = useSelect( + ( select ) => + select( 'core/notices' ) + .getNotices() + .filter( ( n ) => n.id === BLOCK_PATTERN_INSERTED_NOTICE ) + .length > 0 + ); + + useEffect( () => { + if ( noticeTriggered ) { + return; + } + if ( patternInserted ) { + setNoticeTriggered( true ); + } + }, [ patternInserted ] ); + + const { ajaxUrl, ajaxAction, nonce, strings, buttonLink } = + designPackNoticeData; + const { dismiss, recommends, learnMore, noticeHtml } = strings; + + const dismissNotice = () => { + const data = new window.FormData(); + + data.append( 'action', ajaxAction ); + data.append( 'nonce', nonce ); + + fetch( ajaxUrl, { + method: 'POST', + body: data, + } ).then( () => { + setDismissed( true ); + } ); + }; + + const classes = [ 'notice-wrap' ]; + + if ( dismissed ) { + classes.push( 'dismissed' ); + } + + if ( ! noticeTriggered ) { + return null; + } + + return ( +
+ { logo } + +
+ { recommends } + +

+
+ + + { learnMore } + + + +
+ ); +}; diff --git a/assets/js/src/design-pack-notice.js b/assets/js/src/design-pack-notice.js new file mode 100644 index 0000000..bfed226 --- /dev/null +++ b/assets/js/src/design-pack-notice.js @@ -0,0 +1,9 @@ +import { createRoot } from '@wordpress/element'; + +import DesignPackNotice from './components/DesignPackNotice'; + +const container = document.getElementById( 'raft-design-pack-notice' ); + +if ( container ) { + createRoot( container ).render( ); +} diff --git a/inc/Admin.php b/inc/Admin.php index 3773f24..93debf0 100644 --- a/inc/Admin.php +++ b/inc/Admin.php @@ -34,6 +34,82 @@ public function setup_admin_hooks() { add_action( 'wp_ajax_raft_set_otter_ref', array( $this, 'set_otter_ref' ) ); add_action( 'activated_plugin', array( $this, 'after_otter_activation' ) ); add_action( 'admin_print_scripts', array( $this, 'add_nps_form' ) ); + + add_action( 'enqueue_block_editor_assets', array( $this, 'add_fse_design_pack_notice' ) ); + add_action( 'wp_ajax_raft_dismiss_design_pack_notice', array( $this, 'remove_design_pack_notice' ) ); + } + + /** + * Render design pack notice. + * + * @return void + */ + public function add_fse_design_pack_notice() { + if ( ! $this->should_render_design_pack_notice() ) { + return; + } + + Assets_Manager::enqueue_style( Assets_Manager::ASSETS_SLUGS['design-pack-notice'], 'design-pack-notice' ); + Assets_Manager::enqueue_script( + Assets_Manager::ASSETS_SLUGS['design-pack-notice'], + 'design-pack-notice', + true, + array(), + array( + 'nonce' => wp_create_nonce( 'raft-dismiss-design-pack-notice' ), + 'ajaxUrl' => esc_url( admin_url( 'admin-ajax.php' ) ), + 'ajaxAction' => 'raft_dismiss_design_pack_notice', + 'buttonLink' => tsdk_utmify( 'https://themeisle.com/plugins/fse-design-pack', 'editor', 'raft' ), + 'strings' => array( + 'dismiss' => __( 'Dismiss', 'raft' ), + 'recommends' => __( 'Raft recommends', 'raft' ), + 'learnMore' => __( 'Learn More', 'raft' ), + 'noticeHtml' => sprintf( + /* translators: %s: FSE Design Pack: */ + __( '%s Access a collection of 40+ layout patterns ready to import to your website', 'raft' ), + 'FSE Design Pack:' + ), + ), + ), + 'designPackNoticeData' + ); + + echo '
'; + } + + /** + * Should we show the design pack notice? + * + * @return bool + */ + private function should_render_design_pack_notice() { + // Already using. + if ( is_plugin_active( 'fse-design-pack/fse-design-pack.php' ) ) { + return false; + } + + // Notice was dismissed. + if ( get_option( Constants::CACHE_KEYS['dismissed-fse-design-pack-notice'], 'no' ) === 'yes' ) { + return false; + } + + return true; + } + + /** + * Dismiss the design pack notice. + * + * @return void + */ + public function remove_design_pack_notice() { + if ( ! isset( $_POST['nonce'] ) ) { + return; + } + if ( ! wp_verify_nonce( sanitize_text_field( $_POST['nonce'] ), 'raft-dismiss-design-pack-notice' ) ) { + return; + } + update_option( Constants::CACHE_KEYS['dismissed-fse-design-pack-notice'], 'yes' ); + wp_die(); } /** diff --git a/inc/Assets_Manager.php b/inc/Assets_Manager.php index 40fd6c1..029546d 100644 --- a/inc/Assets_Manager.php +++ b/inc/Assets_Manager.php @@ -16,9 +16,10 @@ */ class Assets_Manager { const ASSETS_SLUGS = array( - 'frontend-css' => 'raft-style', - 'editor-css' => 'raft-editor', - 'welcome-notice' => 'raft-welcome-notice', + 'frontend-css' => 'raft-style', + 'editor-css' => 'raft-editor', + 'welcome-notice' => 'raft-welcome-notice', + 'design-pack-notice' => 'raft-design-pack-notice', ); /** diff --git a/inc/Constants.php b/inc/Constants.php index 2ebe9a7..71279f3 100644 --- a/inc/Constants.php +++ b/inc/Constants.php @@ -16,6 +16,7 @@ */ class Constants { const CACHE_KEYS = array( - 'dismissed-welcome-notice' => 'raft-welcome-notice-dismissed', + 'dismissed-welcome-notice' => 'raft-welcome-notice-dismissed', + 'dismissed-fse-design-pack-notice' => 'raft-design-pack-dismissed', ); } diff --git a/package.json b/package.json index da82116..e7114a4 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "@semantic-release/exec": "^6.0.3", "@semantic-release/git": "^10.0.1", "@wordpress/eslint-plugin": "^12.8.0", + "@wordpress/icons": "^9.47.0", "@wordpress/scripts": "^23.6.0", "@wordpress/stylelint-config": "^20.0.2", "conventional-changelog-simple-preset": "^1.0.20", diff --git a/yarn.lock b/yarn.lock index 0f2225e..4c8a773 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2176,6 +2176,21 @@ dependencies: "@types/react" "^17" +"@types/react-dom@^18.0.6": + version "18.3.0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0" + integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^18.0.21": + version "18.3.0" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.0.tgz#2e6ac50dea2f68f774b20f1bd536ef82365cd64a" + integrity sha512-DiUcKjzE6soLyln8NNZmyhcQjVv+WsUIFSqetMN0p8927OztKT4VTfFTqsbAi5oAGIcgOmOajlfBqyptDDjZRw== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + "@types/react@^17", "@types/react@^17.0.37": version "17.0.48" resolved "https://registry.npmjs.org/@types/react/-/react-17.0.48.tgz" @@ -2592,6 +2607,20 @@ react "^17.0.2" react-dom "^17.0.2" +"@wordpress/element@^5.33.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@wordpress/element/-/element-5.33.0.tgz#33ffd6c75ed8f711b55f8e6051dc09e963d23c78" + integrity sha512-RNisHbRgAO5/RLyfckgHYWgKq+IKd8Yn1mJHYWp+1Fx+1K6vjlhr/1D4a81fWL15IoCTV3tYh6zYei4/fRpZog== + dependencies: + "@babel/runtime" "^7.16.0" + "@types/react" "^18.0.21" + "@types/react-dom" "^18.0.6" + "@wordpress/escape-html" "^2.56.0" + change-case "^4.1.2" + is-plain-object "^5.0.0" + react "^18.2.0" + react-dom "^18.2.0" + "@wordpress/escape-html@^2.14.0": version "2.14.0" resolved "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-2.14.0.tgz" @@ -2599,6 +2628,13 @@ dependencies: "@babel/runtime" "^7.16.0" +"@wordpress/escape-html@^2.56.0": + version "2.56.0" + resolved "https://registry.yarnpkg.com/@wordpress/escape-html/-/escape-html-2.56.0.tgz#042626b9fc33dbd210b24ed554e71a9a9665b246" + integrity sha512-f+NDe9ZyUtaoiU8VYSKRjxsKqqzinrVcpcqj+umiLhKD5ShGW8V7LcSr3JOdE4TgjHvw2eezFvRmEo/kXowmMA== + dependencies: + "@babel/runtime" "^7.16.0" + "@wordpress/eslint-plugin@^12.8.0": version "12.8.0" resolved "https://registry.yarnpkg.com/@wordpress/eslint-plugin/-/eslint-plugin-12.8.0.tgz#e8e86d793ac884a8bf9ae23eaf56415e7be63926" @@ -2621,6 +2657,15 @@ globals "^13.12.0" requireindex "^1.2.0" +"@wordpress/icons@^9.47.0": + version "9.47.0" + resolved "https://registry.yarnpkg.com/@wordpress/icons/-/icons-9.47.0.tgz#ea817c822b2e307bdfb5c9ec555933037a2c0c6a" + integrity sha512-IQIoEr0LxPWUOgcHnMIqU/ytg3x/swxbl8AGG1ONFks3/2tYdDk3I2/CAYgQGpaiSFIOJjNVk1keqa8DBOnciw== + dependencies: + "@babel/runtime" "^7.16.0" + "@wordpress/element" "^5.33.0" + "@wordpress/primitives" "^3.54.0" + "@wordpress/jest-console@^5.4.0": version "5.4.0" resolved "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-5.4.0.tgz" @@ -2658,6 +2703,15 @@ resolved "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-1.4.0.tgz" integrity sha512-uvrgUAhRnOvIysXjcXH9VDsrKLqH9r3BfdGoy+WFLSHFnTfdMhW7bdDQXl4F4UIUuefUwGi+ZvT/rChg9zoBkQ== +"@wordpress/primitives@^3.54.0": + version "3.54.0" + resolved "https://registry.yarnpkg.com/@wordpress/primitives/-/primitives-3.54.0.tgz#7e46aed14c1e261314171b4fc496ce5214604d54" + integrity sha512-2TrXDvYW3V0nlq6ZCYYvJ5obPZNtrsuIdB0iLdUavCOSBoXTROhRZY9Pxz45bB2CLlmEUs9OfL7izx9IuAg4Mw== + dependencies: + "@babel/runtime" "^7.16.0" + "@wordpress/element" "^5.33.0" + classnames "^2.3.1" + "@wordpress/scripts@^23.6.0": version "23.6.0" resolved "https://registry.npmjs.org/@wordpress/scripts/-/scripts-23.6.0.tgz" @@ -3581,6 +3635,14 @@ callsites@^3.0.0: resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + camelcase-keys@^6.2.2: version "6.2.2" resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" @@ -3620,6 +3682,15 @@ caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz" integrity sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ== +capital-case@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" + integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + cardinal@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" @@ -3679,6 +3750,24 @@ chalk@^5.0.0: resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== +change-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" + integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== + dependencies: + camel-case "^4.1.2" + capital-case "^1.0.4" + constant-case "^3.0.4" + dot-case "^3.0.4" + header-case "^2.0.4" + no-case "^3.0.4" + param-case "^3.0.4" + pascal-case "^3.1.2" + path-case "^3.0.4" + sentence-case "^3.0.4" + snake-case "^3.0.4" + tslib "^2.0.3" + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" @@ -3783,6 +3872,11 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== +classnames@^2.3.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" @@ -4054,6 +4148,15 @@ console-control-strings@^1.0.0, console-control-strings@^1.1.0: resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== +constant-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" + integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case "^2.0.2" + content-disposition@0.5.4: version "0.5.4" resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" @@ -4718,6 +4821,14 @@ domutils@^3.0.1: domelementtype "^2.3.0" domhandler "^5.0.1" +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + dot-prop@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" @@ -6383,6 +6494,14 @@ has@^1.0.0, has@^1.0.3: dependencies: function-bind "^1.1.1" +header-case@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" + integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== + dependencies: + capital-case "^1.0.4" + tslib "^2.0.3" + homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" @@ -8248,6 +8367,13 @@ loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" @@ -8976,6 +9102,14 @@ nice-try@^1.0.4: resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-emoji@^1.11.0: version "1.11.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" @@ -9712,6 +9846,14 @@ pacote@^13.0.3, pacote@^13.6.1: ssri "^9.0.0" tar "^6.1.11" +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" @@ -9802,6 +9944,22 @@ parseurl@~1.3.2, parseurl@~1.3.3: resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" + integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + path-exists@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" @@ -10555,6 +10713,14 @@ react-dom@^17.0.2: object-assign "^4.1.1" scheduler "^0.20.2" +react-dom@^18.2.0: + version "18.3.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.0.tgz#98a3a1cc4e471d517c2a084f38ab1d58d02cada7" + integrity sha512-zaKdLBftQJnvb7FtDIpZtsAIb2MZU087RM8bRDZU8LVCCFYjPTsDZJNFUWPcVz3HFSN1n/caxi0ca4B/aaVQGQ== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.1" + react-is@^16.12.0, react-is@^16.13.1: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" @@ -10601,6 +10767,13 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" +react@^18.2.0: + version "18.3.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.0.tgz#84386d0a36fdf5ef50fa5755b7812bdfb76194a5" + integrity sha512-RPutkJftSAldDibyrjuku7q11d3oy6wKOyPe5K1HA/HwwrXcEqBdHsLypkC2FFYjP7bPUa6gbzSBhw4sY2JcDg== + dependencies: + loose-envify "^1.1.0" + read-cmd-shim@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" @@ -11106,6 +11279,13 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" +scheduler@^0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.1.tgz#ef964a7936d7cbe8f7bc0d38fc479a823aed2923" + integrity sha512-5GKS5JGfiah1O38Vfa9srZE4s3wdHbwjlCrvIookrg2FO9aIwKLOJXuJQFlEfNcVSOXuaL2hzDeY20uVXcUtrw== + dependencies: + loose-envify "^1.1.0" + schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" @@ -11251,6 +11431,15 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" +sentence-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" + integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + serialize-javascript@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" @@ -11438,6 +11627,14 @@ smart-buffer@^4.2.0: resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + sockjs@^0.3.24: version "0.3.24" resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" @@ -12286,6 +12483,11 @@ tslib@^1.8.1: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.0.3: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tslib@^2.1.0: version "2.4.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" @@ -12560,6 +12762,20 @@ update-browserslist-db@^1.0.5: escalade "^3.1.1" picocolors "^1.0.0" +upper-case-first@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" + integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== + dependencies: + tslib "^2.0.3" + +upper-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" + integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== + dependencies: + tslib "^2.0.3" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"