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 (
+
+ );
+};
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"