diff --git a/.wp-env/0-sandbox.php b/.wp-env/0-sandbox.php index 8db8e37b0..91a68caea 100644 --- a/.wp-env/0-sandbox.php +++ b/.wp-env/0-sandbox.php @@ -1,9 +1,15 @@ 'Debugging for Developers', + 'topics' => array( 'development' ), + 'levels' => array( 'Intermediate' ), + ), + array( + 'title' => 'Debugging for Site Owners', + 'topics' => array( 'site-management' ), + 'levels' => array( 'Beginner' ), + ), + array( + 'title' => 'eCommerce with WooCommerce', + 'topics' => array( 'woocommerce', 'ecommerce' ), + 'levels' => array( 'Beginner' ), + ), + array( + 'title' => 'SEO Foundations', + 'topics' => array( 'seo' ), + 'levels' => array( 'Beginner' ), + ), + array( + 'title' => 'WordPress Playground', + 'topics' => array( 'playground' ), + 'levels' => array( 'Beginner' ), + ), + array( + 'title' => 'Content Creation', + 'topics' => array( 'content-creation' ), + 'levels' => array( 'Beginner' ), + ), + array( + 'title' => 'Using AI in your WordPress Dashboard', + 'topics' => array( 'ai', 'site-management' ), + 'levels' => array( 'Beginner' ), + ), + array( + 'title' => 'Managing your WordPress site with AI', + 'topics' => array( 'ai', 'site-management' ), + 'levels' => array( 'Intermediate' ), + ), + array( + 'title' => 'Contributor Onboarding', + 'topics' => array( 'contributing' ), + 'levels' => array( 'Beginner' ), + ), + array( + 'title' => 'WordPress Security Essentials', + 'topics' => array( 'security' ), + 'levels' => array( 'Beginner' ), + ), + array( + 'title' => 'Accessibility Testing in WordPress', + 'topics' => array( 'accessibility' ), + 'levels' => array( 'Beginner' ), + ), + ); + + foreach ( $kits as $kit_data ) { + $existing_query = new \WP_Query( + array( + 'post_type' => 'activity_kit', + 'post_status' => 'any', + 'title' => $kit_data['title'], + 'posts_per_page' => 1, + 'fields' => 'ids', + ) + ); + $existing = $existing_query->have_posts() ? get_post( $existing_query->posts[0] ) : null; + + if ( $existing && ! $force ) { + \WP_CLI::log( sprintf( 'Skipping "%s" — already exists (ID %d). Use --force to re-import.', $kit_data['title'], $existing->ID ) ); + continue; + } + + $post_id = wp_insert_post( + array( + 'post_title' => $kit_data['title'], + 'post_type' => 'activity_kit', + 'post_status' => 'publish', + 'post_author' => 1, + ), + true + ); + + if ( is_wp_error( $post_id ) ) { + \WP_CLI::warning( sprintf( 'Failed to create "%s": %s', $kit_data['title'], $post_id->get_error_message() ) ); + continue; + } + + if ( ! empty( $kit_data['topics'] ) ) { + wp_set_object_terms( $post_id, $kit_data['topics'], 'topic' ); + } + + if ( ! empty( $kit_data['levels'] ) ) { + wp_set_object_terms( $post_id, $kit_data['levels'], 'level' ); + } + + \WP_CLI::success( sprintf( 'Created "%s" (ID %d)', $kit_data['title'], $post_id ) ); + } + + \WP_CLI::log( 'Import complete.' ); + } +} + +\WP_CLI::add_command( 'activity-kit', __NAMESPACE__ . '\Activity_Kit_CLI' ); diff --git a/wp-content/plugins/wporg-learn/inc/activity-kit-rest.php b/wp-content/plugins/wporg-learn/inc/activity-kit-rest.php new file mode 100644 index 000000000..64623cb92 --- /dev/null +++ b/wp-content/plugins/wporg-learn/inc/activity-kit-rest.php @@ -0,0 +1,307 @@ + 'POST', + 'callback' => __NAMESPACE__ . '\handle_track', + 'permission_callback' => '__return_true', + 'args' => array( + 'post_id' => array( + 'required' => true, + 'type' => 'integer', + 'sanitize_callback' => 'absint', + ), + 'action' => array( + 'required' => true, + 'type' => 'string', + 'enum' => array( 'view', 'download' ), + ), + ), + ) + ); + + register_rest_route( + 'activity-kits/v1', + '/stats', + array( + 'methods' => 'GET', + 'callback' => __NAMESPACE__ . '\handle_stats', + 'permission_callback' => function () { + return current_user_can( 'manage_options' ); + }, + 'args' => array( + 'metric' => array( + 'default' => 'both', + 'enum' => array( 'both', 'views', 'downloads' ), + ), + 'range' => array( + 'default' => 'all', + 'enum' => array( '7d', '30d', '90d', 'all', 'custom' ), + ), + 'kit' => array( + 'default' => '', + 'type' => 'string', + 'sanitize_callback' => 'sanitize_text_field', + ), + 'date_from' => array( + 'default' => '', + 'type' => 'string', + 'sanitize_callback' => 'sanitize_text_field', + ), + 'date_to' => array( + 'default' => '', + 'type' => 'string', + 'sanitize_callback' => 'sanitize_text_field', + ), + ), + ) + ); +} + +/** + * Handle POST /activity-kits/v1/track + * + * @param \WP_REST_Request $request + * @return \WP_REST_Response|\WP_Error + */ +function handle_track( $request ) { + $post_id = $request->get_param( 'post_id' ); + $action = $request->get_param( 'action' ); + + if ( 'activity_kit' !== get_post_type( $post_id ) ) { + return new \WP_Error( 'invalid_post', __( 'Invalid activity kit.', 'wporg-learn' ), array( 'status' => 404 ) ); + } + + // Downloads: rate-limit to one per IP per post per 24 hours. + // Views: count every page load (no rate limit). + if ( 'download' === $action ) { + $rate_key = 'ak_rate_dl_' . md5( $post_id . sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ?? '' ) ) ); + if ( get_transient( $rate_key ) ) { + return rest_ensure_response( + array( + 'tracked' => false, + 'reason' => 'rate_limited', + ) + ); + } + set_transient( $rate_key, 1, DAY_IN_SECONDS ); + } + + $meta_key = 'view' === $action ? '_view_count' : '_download_count'; + $current = (int) get_post_meta( $post_id, $meta_key, true ); + update_post_meta( $post_id, $meta_key, $current + 1 ); + + log_event( $post_id, $action ); + + return rest_ensure_response( array( 'tracked' => true ) ); +} + +/** + * Handle GET /activity-kits/v1/stats + * + * @param \WP_REST_Request $request + * @return \WP_REST_Response + */ +function handle_stats( $request ) { + $metric = $request->get_param( 'metric' ); + $range = $request->get_param( 'range' ); + $kit = $request->get_param( 'kit' ); + $date_from = $request->get_param( 'date_from' ); + $date_to = $request->get_param( 'date_to' ); + + $kits = get_posts( + array( + 'post_type' => 'activity_kit', + 'posts_per_page' => -1, + 'post_status' => 'publish', + 'orderby' => 'title', + 'order' => 'ASC', + ) + ); + + $results = array(); + + foreach ( $kits as $kit_post ) { + if ( $kit && $kit_post->post_name !== $kit ) { + continue; + } + + $data = array( + 'id' => $kit_post->ID, + 'title' => $kit_post->post_title, + 'slug' => $kit_post->post_name, + 'updated' => get_the_modified_date( 'Y-m-d', $kit_post->ID ), + ); + + if ( 'custom' === $range && $date_from && $date_to ) { + $data = array_merge( $data, get_stats_from_events_daterange( $kit_post->ID, $metric, $date_from, $date_to ) ); + } elseif ( 'all' === $range ) { + if ( 'both' === $metric || 'views' === $metric ) { + $data['views'] = (int) get_post_meta( $kit_post->ID, '_view_count', true ); + } + if ( 'both' === $metric || 'downloads' === $metric ) { + $data['downloads'] = (int) get_post_meta( $kit_post->ID, '_download_count', true ); + } + } else { + $data = array_merge( $data, get_stats_from_events( $kit_post->ID, $metric, $range ) ); + } + + $results[] = $data; + } + + return rest_ensure_response( $results ); +} + +/** + * Get stats from the events log table for a given kit, metric, and time range. + * + * @param int $post_id + * @param string $metric 'both', 'views', or 'downloads'. + * @param string $range '7d', '30d', or '90d'. + * @return array + */ +function get_stats_from_events( $post_id, $metric, $range ) { + global $wpdb; + + $table = $wpdb->prefix . 'activity_kit_events'; + $days = intval( str_replace( 'd', '', $range ) ); + $data = array(); + + if ( 'both' === $metric || 'views' === $metric ) { + $data['views'] = (int) $wpdb->get_var( + $wpdb->prepare( + // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Table name cannot use a placeholder. + "SELECT COUNT(*) FROM `{$table}` WHERE post_id = %d AND action = 'view' AND created_at >= DATE_SUB(NOW(), INTERVAL %d DAY)", + $post_id, + $days + ) + ); + } + + if ( 'both' === $metric || 'downloads' === $metric ) { + $data['downloads'] = (int) $wpdb->get_var( + $wpdb->prepare( + // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Table name cannot use a placeholder. + "SELECT COUNT(*) FROM `{$table}` WHERE post_id = %d AND action = 'download' AND created_at >= DATE_SUB(NOW(), INTERVAL %d DAY)", + $post_id, + $days + ) + ); + } + + return $data; +} + +/** + * Get stats from the events log table for a given kit between two specific dates. + * + * @param int $post_id + * @param string $metric 'both', 'views', or 'downloads'. + * @param string $date_from Start date in Y-m-d format. + * @param string $date_to End date in Y-m-d format (inclusive). + * @return array + */ +function get_stats_from_events_daterange( $post_id, $metric, $date_from, $date_to ) { + global $wpdb; + + $table = $wpdb->prefix . 'activity_kit_events'; + $data = array(); + + $from = sanitize_text_field( $date_from ) . ' 00:00:00'; + $to = sanitize_text_field( $date_to ) . ' 23:59:59'; + + if ( 'both' === $metric || 'views' === $metric ) { + $data['views'] = (int) $wpdb->get_var( + $wpdb->prepare( + // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Table name cannot use a placeholder. + "SELECT COUNT(*) FROM `{$table}` WHERE post_id = %d AND action = 'view' AND created_at BETWEEN %s AND %s", + $post_id, + $from, + $to + ) + ); + } + + if ( 'both' === $metric || 'downloads' === $metric ) { + $data['downloads'] = (int) $wpdb->get_var( + $wpdb->prepare( + // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Table name cannot use a placeholder. + "SELECT COUNT(*) FROM `{$table}` WHERE post_id = %d AND action = 'download' AND created_at BETWEEN %s AND %s", + $post_id, + $from, + $to + ) + ); + } + + return $data; +} + +/** + * Log a view or download event to the events table. + * + * @param int $post_id + * @param string $action 'view' or 'download'. + */ +function log_event( $post_id, $action ) { + global $wpdb; + + $table = $wpdb->prefix . 'activity_kit_events'; + + $wpdb->insert( + $table, + array( + 'post_id' => $post_id, + 'action' => $action, + 'created_at' => current_time( 'mysql', true ), + ), + array( '%d', '%s', '%s' ) + ); +} + +/** + * Create the events table if it does not already exist. + */ +function maybe_create_events_table() { + global $wpdb; + + $table = $wpdb->prefix . 'activity_kit_events'; + $version = get_option( 'activity_kit_events_db_version', '0' ); + + if ( '1.0' === $version ) { + return; + } + + $charset_collate = $wpdb->get_charset_collate(); + + $sql = "CREATE TABLE IF NOT EXISTS `{$table}` ( + id bigint(20) unsigned NOT NULL AUTO_INCREMENT, + post_id bigint(20) unsigned NOT NULL, + action varchar(20) NOT NULL, + created_at datetime NOT NULL, + PRIMARY KEY (id), + KEY post_id (post_id), + KEY created_at (created_at) + ) {$charset_collate};"; + + require_once ABSPATH . 'wp-admin/includes/upgrade.php'; + dbDelta( $sql ); + + update_option( 'activity_kit_events_db_version', '1.0' ); +} diff --git a/wp-content/plugins/wporg-learn/inc/activity-kit-settings.php b/wp-content/plugins/wporg-learn/inc/activity-kit-settings.php new file mode 100644 index 000000000..b1b1bbe93 --- /dev/null +++ b/wp-content/plugins/wporg-learn/inc/activity-kit-settings.php @@ -0,0 +1,88 @@ + 'string', + 'sanitize_callback' => 'esc_url_raw', + 'default' => '', + ) + ); +} + +/** + * Add a Settings submenu under the Activity Kits post-type menu. + */ +function add_settings_page(): void { + add_submenu_page( + 'edit.php?post_type=activity_kit', + __( 'Activity Kit Settings', 'wporg-learn' ), + __( 'Settings', 'wporg-learn' ), + 'manage_options', + 'activity-kit-settings', + __NAMESPACE__ . '\render_settings_page' + ); +} + +/** + * Render the settings page. + */ +function render_settings_page(): void { + if ( ! current_user_can( 'manage_options' ) ) { + return; + } + ?> +
+

+
+ + + + + + + + +
+
+ rest_url( 'activity-kits/v1/stats' ), + 'nonce' => wp_create_nonce( 'wp_rest' ), + ) + ); +} + +/** + * Render the Activity Kit Stats admin page. + */ +function render_page() { + if ( ! current_user_can( 'manage_options' ) ) { + wp_die( esc_html__( 'You do not have permission to access this page.', 'wporg-learn' ) ); + } + + $kits = get_posts( + array( + 'post_type' => 'activity_kit', + 'posts_per_page' => -1, + 'post_status' => 'publish', + 'orderby' => 'title', + 'order' => 'ASC', + ) + ); + + $total_views = 0; + $total_downloads = 0; + foreach ( $kits as $kit ) { + $total_views += (int) get_post_meta( $kit->ID, '_view_count', true ); + $total_downloads += (int) get_post_meta( $kit->ID, '_download_count', true ); + } + ?> + + +
+
+
+

+
+ +
+
+ + +
+
+ +
+ + + +
+
+ +
+ +
+ + + + + +
+
+ +
+ + +
+
+ + +
+ + + + +
+ + + + + +
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+
+

+ +
+
+
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+

+ +
+
+ + + + + + + + + + + + + +
+ + + + + + + + + +
+
+
+
+ is_main_query() || 'activity_kit' !== $query->get( 'post_type' ) ) { + return; + } + + $orderby = $query->get( 'orderby' ); + + if ( 'views' === $orderby ) { + $query->set( 'meta_key', '_view_count' ); + $query->set( 'orderby', 'meta_value_num' ); + } elseif ( 'downloads' === $orderby ) { + $query->set( 'meta_key', '_download_count' ); + $query->set( 'orderby', 'meta_value_num' ); + } +} + +/** + * Remove shared taxonomy submenu items from under Activity Kits. + * Level and Topic are shared across post types; editing them from here is confusing. + */ +function remove_activity_kit_taxonomy_submenus() { + global $submenu; + + $parent = 'edit.php?post_type=activity_kit'; + if ( ! isset( $submenu[ $parent ] ) ) { + return; + } + + foreach ( $submenu[ $parent ] as $key => $item ) { + if ( isset( $item[2] ) && ( + false !== strpos( $item[2], 'taxonomy=level' ) || + false !== strpos( $item[2], 'taxonomy=topic' ) + ) ) { + unset( $submenu[ $parent ][ $key ] ); + } + } +} + +/** + * Add a Stats submenu page under the Activity Kits post type menu. + */ +function add_activity_kit_stats_submenu() { + add_submenu_page( + 'edit.php?post_type=activity_kit', + __( 'Activity Kit Stats', 'wporg-learn' ), + __( 'Stats', 'wporg-learn' ), + 'manage_options', + 'activity-kit-stats', + 'WPOrg_Learn\Activity_Kit_Stats\render_page' + ); +} diff --git a/wp-content/plugins/wporg-learn/inc/blocks.php b/wp-content/plugins/wporg-learn/inc/blocks.php index 3bd22205c..9a571da5c 100644 --- a/wp-content/plugins/wporg-learn/inc/blocks.php +++ b/wp-content/plugins/wporg-learn/inc/blocks.php @@ -19,11 +19,14 @@ require_once get_views_path() . 'block-course-status.php'; require_once get_views_path() . 'block-learning-duration.php'; require_once get_views_path() . 'block-lesson-count.php'; +require_once get_views_path() . 'block-activity-kit-card.php'; /** * Actions and filters. */ add_action( 'init', __NAMESPACE__ . '\register_types' ); +add_action( 'enqueue_block_editor_assets', __NAMESPACE__ . '\enqueue_activity_kit_editor_assets' ); +add_filter( 'query_loop_block_query_vars', __NAMESPACE__ . '\activity_kit_query_vars', 10, 2 ); /** * Register block types. @@ -39,6 +42,7 @@ function register_types() { register_lesson_plan_details(); register_workshop_details(); register_workshop_application_form(); + register_activity_kit_card(); } /** @@ -457,3 +461,72 @@ function register_course_status() { ); } +/** + * Register the Activity Kit Card block. + */ +function register_activity_kit_card() { + register_block_type( + get_js_path() . 'activity-kit-card/', + array( + 'render_callback' => function( $attributes, $content, $block ) { + ob_start(); + require get_views_path() . 'block-activity-kit-card.php'; + return ob_get_clean(); + }, + ) + ); +} + +/** + * Enqueue editor assets for the Activity Kit sidebar panel and query variation. + * The sidebar panel is enqueued only when editing activity_kit posts. + */ +function enqueue_activity_kit_editor_assets() { + global $typenow; + + // Query variation: enqueue for all post types so it appears in the block inserter. + $variation_asset_path = get_build_path() . 'query-activity-kits.asset.php'; + if ( is_readable( $variation_asset_path ) ) { + $variation_asset = require $variation_asset_path; + wp_enqueue_script( + 'query-activity-kits', + get_build_url() . 'query-activity-kits.js', + $variation_asset['dependencies'], + $variation_asset['version'], + true + ); + } + + // Sidebar panel: only on activity_kit post edit screens. + if ( 'activity_kit' !== $typenow ) { + return; + } + + $sidebar_asset_path = get_build_path() . 'activity-kit-sidebar.asset.php'; + if ( ! is_readable( $sidebar_asset_path ) ) { + return; + } + + $sidebar_asset = require $sidebar_asset_path; + wp_enqueue_script( + 'activity-kit-sidebar', + get_build_url() . 'activity-kit-sidebar.js', + $sidebar_asset['dependencies'], + $sidebar_asset['version'], + true + ); +} + +/** + * Map the wporg/activity-kits query variation namespace to the activity_kit post type. + * + * @param array $query + * @param \WP_Block $block + * @return array + */ +function activity_kit_query_vars( $query, $block ) { + if ( isset( $block->context['query']['namespace'] ) && 'wporg/activity-kits' === $block->context['query']['namespace'] ) { + $query['post_type'] = 'activity_kit'; + } + return $query; +} diff --git a/wp-content/plugins/wporg-learn/inc/capabilities.php b/wp-content/plugins/wporg-learn/inc/capabilities.php index 939f1eb09..6769b4d58 100644 --- a/wp-content/plugins/wporg-learn/inc/capabilities.php +++ b/wp-content/plugins/wporg-learn/inc/capabilities.php @@ -27,6 +27,7 @@ function set_post_type_caps( $user_caps ) { $capability_types = array( array( 'lesson_plan', 'lesson_plans' ), array( 'tutorial', 'tutorials' ), + array( 'activity_kit', 'activity_kits' ), ); foreach ( $capability_types as $capability_type ) { @@ -80,7 +81,7 @@ function map_meta_caps( $required_caps, $current_cap, $user_id, $args ) { switch ( $current_cap ) { case 'edit_any_learn_content': $required_caps = array(); - $learn_content_types = array( 'lesson-plan', 'wporg_workshop', 'course', 'lesson' ); + $learn_content_types = array( 'lesson-plan', 'wporg_workshop', 'course', 'lesson', 'activity_kit' ); // Grant `edit_any_learn_content` when the user has `edit_posts` for any of our custom post types. foreach ( $learn_content_types as $post_type ) { diff --git a/wp-content/plugins/wporg-learn/inc/post-meta.php b/wp-content/plugins/wporg-learn/inc/post-meta.php index 8fa25df35..d01dae83c 100644 --- a/wp-content/plugins/wporg-learn/inc/post-meta.php +++ b/wp-content/plugins/wporg-learn/inc/post-meta.php @@ -35,6 +35,7 @@ function register() { register_lesson_meta(); register_lesson_plan_meta(); register_workshop_meta(); + register_activity_kit_meta(); } /** @@ -50,7 +51,7 @@ function register_course_meta() { 'single' => true, 'sanitize_callback' => 'sanitize_text_field', 'show_in_rest' => true, - 'auth_callback' => function( $allowed, $meta_key, $post_id ) { + 'auth_callback' => function ( $allowed, $meta_key, $post_id ) { return current_user_can( 'edit_post', $post_id ); }, ) @@ -66,7 +67,7 @@ function register_course_meta() { 'default' => '', 'sanitize_callback' => 'esc_url_raw', 'show_in_rest' => true, - 'auth_callback' => function( $allowed, $meta_key, $post_id ) { + 'auth_callback' => function ( $allowed, $meta_key, $post_id ) { return current_user_can( 'edit_post', $post_id ); }, ) @@ -86,7 +87,7 @@ function register_lesson_meta() { 'single' => true, 'sanitize_callback' => 'sanitize_text_field', 'show_in_rest' => true, - 'auth_callback' => function( $allowed, $meta_key, $post_id ) { + 'auth_callback' => function ( $allowed, $meta_key, $post_id ) { return current_user_can( 'edit_post', $post_id ); }, ), @@ -220,7 +221,7 @@ function register_common_meta() { } // Language field. - $post_types = array( 'lesson-plan', 'wporg_workshop', 'meeting', 'course', 'lesson' ); + $post_types = array( 'lesson-plan', 'wporg_workshop', 'meeting', 'course', 'lesson', 'activity_kit' ); foreach ( $post_types as $post_type ) { register_post_meta( $post_type, @@ -247,11 +248,11 @@ function register_common_meta() { 'type' => 'number', 'single' => true, 'default' => 0, - 'sanitize_callback' => function( $value ) { + 'sanitize_callback' => function ( $value ) { return floatval( $value ); }, 'show_in_rest' => true, - 'auth_callback' => function() { + 'auth_callback' => function () { return current_user_can( 'edit_courses' ) || current_user_can( 'edit_lessons' ); }, ) @@ -321,6 +322,11 @@ function register_common_meta() { */ function sanitize_locale( $meta_value, $meta_key, $object_type, $object_subtype ) { $meta_value = trim( $meta_value ); + + if ( ! function_exists( 'WordPressdotorg\Locales\get_locales_with_english_names' ) ) { + return sanitize_text_field( $meta_value ); + } + $locales = array_keys( get_locales_with_english_names() ); if ( ! in_array( $meta_value, $locales, true ) ) { @@ -352,7 +358,7 @@ function get_workshop_duration( WP_Post $workshop, $format = 'raw' ) { if ( $interval->d > 0 ) { $return = human_time_diff( 0, $interval->d * DAY_IN_SECONDS ); } elseif ( $interval->h > 0 ) { - $hours = human_time_diff( 0, $interval->h * HOUR_IN_SECONDS ); + $hours = human_time_diff( 0, $interval->h * HOUR_IN_SECONDS ); $return = $hours; if ( $interval->i > 0 ) { @@ -406,17 +412,19 @@ function get_available_post_type_locales( $meta_key, $post_type, $post_status, $ } } - $results = $wpdb->get_col( $wpdb->prepare( + $results = $wpdb->get_col( + $wpdb->prepare( // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- $and_post_status and $and_post_type only include $post_status and $post_type if they match an allowed string. - "SELECT DISTINCT postmeta.meta_value + "SELECT DISTINCT postmeta.meta_value FROM {$wpdb->postmeta} postmeta JOIN {$wpdb->posts} posts ON posts.ID = postmeta.post_id $and_post_type $and_post_status WHERE postmeta.meta_key = %s", - $meta_key + $meta_key // phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared - ) ); + ) + ); if ( empty( $results ) ) { return array(); @@ -425,7 +433,11 @@ function get_available_post_type_locales( $meta_key, $post_type, $post_status, $ $available_locales = array_fill_keys( $results, '' ); $locale_fn = "\WordPressdotorg\Locales\get_locales_with_{$label_language}_names"; - $locales = $locale_fn(); + if ( ! function_exists( $locale_fn ) ) { + // Fallback for environments without WordPressdotorg\Locales: use locale codes as labels. + return array_combine( $results, $results ); + } + $locales = $locale_fn(); return array_intersect_key( $locales, $available_locales ); } @@ -471,10 +483,12 @@ function save_lesson_plan_metabox_fields( $post_id ) { return; } - $view_url = filter_input( INPUT_POST, 'slides-view-url', FILTER_VALIDATE_URL ) ?: ''; + $filtered_view_url = filter_input( INPUT_POST, 'slides-view-url', FILTER_VALIDATE_URL ); + $view_url = $filtered_view_url ? $filtered_view_url : ''; update_post_meta( $post_id, 'slides_view_url', $view_url ); - $download_url = filter_input( INPUT_POST, 'slides-download-url', FILTER_VALIDATE_URL ) ?: ''; + $filtered_download_url = filter_input( INPUT_POST, 'slides-download-url', FILTER_VALIDATE_URL ); + $download_url = $filtered_download_url ? $filtered_download_url : ''; update_post_meta( $post_id, 'slides_download_url', $download_url ); // This language meta field is rendered in the editor sidebar using a PluginDocumentSettingPanel block, @@ -578,7 +592,8 @@ function add_meeting_metaboxes( $post_type = '' ) { function render_metabox_workshop_details( WP_Post $post ) { $duration_interval = get_workshop_duration( $post, 'interval' ); $locales = get_locales_with_english_names(); - $captions = get_post_meta( $post->ID, 'video_caption_language' ) ?: array(); + $captions_meta = get_post_meta( $post->ID, 'video_caption_language' ); + $captions = $captions_meta ? $captions_meta : array(); require get_views_path() . 'metabox-workshop-details.php'; } @@ -598,7 +613,8 @@ function render_metabox_lesson_video( WP_Post $post ) { * @param WP_Post $post */ function render_metabox_workshop_presenters( WP_Post $post ) { - $presenters = get_post_meta( $post->ID, 'presenter_wporg_username' ) ?: array(); + $presenters_meta = get_post_meta( $post->ID, 'presenter_wporg_username' ); + $presenters = $presenters_meta ? $presenters_meta : array(); require get_views_path() . 'metabox-workshop-presenters.php'; } @@ -609,7 +625,8 @@ function render_metabox_workshop_presenters( WP_Post $post ) { * @param WP_Post $post */ function render_metabox_workshop_other_contributors( WP_Post $post ) { - $other_contributors = get_post_meta( $post->ID, 'other_contributor_wporg_username' ) ?: array(); + $other_contributors_meta = get_post_meta( $post->ID, 'other_contributor_wporg_username' ); + $other_contributors = $other_contributors_meta ? $other_contributors_meta : array(); require get_views_path() . 'metabox-workshop-other-contributors.php'; } @@ -620,9 +637,10 @@ function render_metabox_workshop_other_contributors( WP_Post $post ) { * @param WP_Post $post */ function render_metabox_workshop_application( WP_Post $post ) { - $schema = get_workshop_application_field_schema(); - $application = wp_parse_args( - get_post_meta( $post->ID, 'original_application', true ) ?: array(), + $schema = get_workshop_application_field_schema(); + $application_meta = get_post_meta( $post->ID, 'original_application', true ); + $application = wp_parse_args( + $application_meta ? $application_meta : array(), wp_list_pluck( $schema['properties'], 'default' ) ); @@ -635,8 +653,9 @@ function render_metabox_workshop_application( WP_Post $post ) { * @param WP_Post $post */ function render_metabox_meeting_language( WP_Post $post ) { - $locales = get_locales_with_english_names(); - $language = get_post_meta( $post->ID, 'language', true ) ?: ''; + $locales = get_locales_with_english_names(); + $language_meta = get_post_meta( $post->ID, 'language', true ); + $language = $language_meta ? $language_meta : ''; require get_views_path() . 'metabox-meeting-language.php'; } @@ -767,7 +786,6 @@ function save_meeting_metabox_fields( $post_id ) { $language = filter_input( INPUT_POST, 'meeting-language' ); update_post_meta( $post_id, 'language', $language ); - } /** @@ -776,12 +794,39 @@ function save_meeting_metabox_fields( $post_id ) { function render_locales_list() { global $typenow; - $post_types_with_language = array( 'lesson-plan', 'wporg_workshop', 'meeting', 'course', 'lesson' ); - if ( in_array( $typenow, $post_types_with_language, true ) ) { - $locales = get_locales_with_english_names(); + $post_types_with_language = array( 'lesson-plan', 'wporg_workshop', 'meeting', 'course', 'lesson', 'activity_kit' ); + if ( ! in_array( $typenow, $post_types_with_language, true ) ) { + return; + } - require get_views_path() . 'locales-list.php'; + if ( function_exists( 'WordPressdotorg\Locales\get_locales_with_english_names' ) ) { + $locales = get_locales_with_english_names(); + } else { + $locales = array( + 'en_US' => 'English (United States)', + 'ar' => 'Arabic', + 'de_DE' => 'German', + 'es_ES' => 'Spanish (Spain)', + 'fr_FR' => 'French (France)', + 'he_IL' => 'Hebrew', + 'hi_IN' => 'Hindi', + 'id_ID' => 'Indonesian', + 'it_IT' => 'Italian', + 'ja' => 'Japanese', + 'ko_KR' => 'Korean', + 'nl_NL' => 'Dutch', + 'pt_BR' => 'Portuguese (Brazil)', + 'pt_PT' => 'Portuguese (Portugal)', + 'ro_RO' => 'Romanian', + 'ru_RU' => 'Russian', + 'sv_SE' => 'Swedish', + 'tr_TR' => 'Turkish', + 'zh_CN' => 'Chinese (China)', + 'zh_TW' => 'Chinese (Taiwan)', + ); } + + require get_views_path() . 'locales-list.php'; } /** @@ -808,7 +853,7 @@ function enqueue_expiration_date_assets() { wp_die( 'You need to run `yarn start` or `yarn build` to build the required assets.' ); } - $script_asset = require( $script_asset_path ); + $script_asset = require $script_asset_path; wp_enqueue_script( 'wporg-learn-expiration-date', get_build_url() . 'expiration-date.js', @@ -828,14 +873,14 @@ function enqueue_expiration_date_assets() { function enqueue_language_meta_assets() { global $typenow; - $post_types_with_language = array( 'lesson-plan', 'wporg_workshop', 'meeting', 'course', 'lesson' ); + $post_types_with_language = array( 'lesson-plan', 'wporg_workshop', 'meeting', 'course', 'lesson', 'activity_kit' ); if ( in_array( $typenow, $post_types_with_language, true ) ) { $script_asset_path = get_build_path() . 'language-meta.asset.php'; if ( ! file_exists( $script_asset_path ) ) { wp_die( 'You need to run `yarn start` or `yarn build` to build the required assets.' ); } - $script_asset = require( $script_asset_path ); + $script_asset = require $script_asset_path; wp_enqueue_script( 'wporg-learn-language-meta', get_build_url() . 'language-meta.js', @@ -860,7 +905,7 @@ function enqueue_lesson_featured_meta_assets() { wp_die( 'You need to run `yarn start` or `yarn build` to build the required assets.' ); } - $script_asset = require( $script_asset_path ); + $script_asset = require $script_asset_path; wp_enqueue_script( 'wporg-learn-lesson-featured-meta', get_build_url() . 'lesson-featured-meta.js', @@ -886,7 +931,7 @@ function enqueue_duration_meta_assets() { wp_die( 'You need to run `yarn start` or `yarn build` to build the required assets.' ); } - $script_asset = require( $script_asset_path ); + $script_asset = require $script_asset_path; wp_enqueue_script( 'wporg-learn-duration-meta', get_build_url() . 'duration-meta.js', @@ -911,7 +956,7 @@ function enqueue_course_completion_meta_assets() { wp_die( 'You need to run `yarn start` or `yarn build` to build the required assets.' ); } - $script_asset = require( $script_asset_path ); + $script_asset = require $script_asset_path; wp_enqueue_script( 'wporg-learn-course-completion-meta', get_build_url() . 'course-completion-meta.js', @@ -923,3 +968,110 @@ function enqueue_course_completion_meta_assets() { wp_set_script_translations( 'wporg-learn-course-completion-meta', 'wporg-learn' ); } } + +/** + * Register post meta keys for activity kits. + */ +function register_activity_kit_meta() { + $auth_callback = function ( $allowed, $meta_key, $post_id ) { + return current_user_can( 'edit_post', $post_id ); + }; + + register_post_meta( + 'activity_kit', + '_activity_duration', + array( + 'description' => __( 'Duration of the activity, e.g. "60–90 minutes".', 'wporg-learn' ), + 'type' => 'string', + 'single' => true, + 'default' => '', + 'sanitize_callback' => 'sanitize_text_field', + 'show_in_rest' => true, + 'auth_callback' => $auth_callback, + ) + ); + + register_post_meta( + 'activity_kit', + '_activity_guide_pdf_id', + array( + 'description' => __( 'Attachment ID of the Facilitator Guide PDF.', 'wporg-learn' ), + 'type' => 'integer', + 'single' => true, + 'default' => 0, + 'sanitize_callback' => 'absint', + 'show_in_rest' => true, + 'auth_callback' => $auth_callback, + ) + ); + + register_post_meta( + 'activity_kit', + '_activity_slides_pdf_id', + array( + 'description' => __( 'Attachment ID of the Slide Deck PDF.', 'wporg-learn' ), + 'type' => 'integer', + 'single' => true, + 'default' => 0, + 'sanitize_callback' => 'absint', + 'show_in_rest' => true, + 'auth_callback' => $auth_callback, + ) + ); + + register_post_meta( + 'activity_kit', + '_activity_zip_id', + array( + 'description' => __( 'Attachment ID of the downloadable ZIP file for this activity kit.', 'wporg-learn' ), + 'type' => 'integer', + 'single' => true, + 'default' => 0, + 'sanitize_callback' => 'absint', + 'show_in_rest' => true, + 'auth_callback' => $auth_callback, + ) + ); + + register_post_meta( + 'activity_kit', + '_view_count', + array( + 'description' => __( 'Number of times this activity kit has been viewed.', 'wporg-learn' ), + 'type' => 'integer', + 'single' => true, + 'default' => 0, + 'sanitize_callback' => 'absint', + 'show_in_rest' => true, + 'auth_callback' => $auth_callback, + ) + ); + + register_post_meta( + 'activity_kit', + '_download_count', + array( + 'description' => __( 'Number of times this activity kit has been downloaded.', 'wporg-learn' ), + 'type' => 'integer', + 'single' => true, + 'default' => 0, + 'sanitize_callback' => 'absint', + 'show_in_rest' => true, + 'auth_callback' => $auth_callback, + ) + ); + + register_post_meta( + 'activity_kit', + '_activity_feedback_url', + array( + 'description' => __( 'Optional per-kit feedback form URL. Overrides the global setting when set.', 'wporg-learn' ), + 'type' => 'string', + 'single' => true, + 'default' => '', + 'sanitize_callback' => 'esc_url_raw', + 'show_in_rest' => true, + 'auth_callback' => $auth_callback, + ) + ); +} diff --git a/wp-content/plugins/wporg-learn/inc/post-type.php b/wp-content/plugins/wporg-learn/inc/post-type.php index 567c64a57..c2750467d 100644 --- a/wp-content/plugins/wporg-learn/inc/post-type.php +++ b/wp-content/plugins/wporg-learn/inc/post-type.php @@ -20,6 +20,7 @@ function register() { register_lesson_plan(); register_workshop(); + register_activity_kit(); } /** @@ -156,6 +157,69 @@ function register_workshop() { register_post_type( 'wporg_workshop', $args ); } +/** + * Register an Activity Kit post type. + */ +function register_activity_kit() { + $labels = array( + 'name' => _x( 'Activity Kits', 'Post Type General Name', 'wporg_learn' ), + 'singular_name' => _x( 'Activity Kit', 'Post Type Singular Name', 'wporg_learn' ), + 'menu_name' => __( 'Activity Kits', 'wporg_learn' ), + 'name_admin_bar' => __( 'Activity Kit', 'wporg_learn' ), + 'archives' => __( 'Activity Kit Archives', 'wporg_learn' ), + 'attributes' => __( 'Activity Kit Attributes', 'wporg_learn' ), + 'parent_item_colon' => __( 'Parent Activity Kit:', 'wporg_learn' ), + 'all_items' => __( 'All Activity Kits', 'wporg_learn' ), + 'add_new_item' => __( 'Add New Activity Kit', 'wporg_learn' ), + 'add_new' => __( 'Add New', 'wporg_learn' ), + 'new_item' => __( 'New Activity Kit', 'wporg_learn' ), + 'edit_item' => __( 'Edit Activity Kit', 'wporg_learn' ), + 'update_item' => __( 'Update Activity Kit', 'wporg_learn' ), + 'view_item' => __( 'View Activity Kit', 'wporg_learn' ), + 'view_items' => __( 'View Activity Kits', 'wporg_learn' ), + 'search_items' => __( 'Search Activity Kits', 'wporg_learn' ), + 'not_found' => __( 'No activity kits found.', 'wporg_learn' ), + 'not_found_in_trash' => __( 'No activity kits found in Trash.', 'wporg_learn' ), + 'featured_image' => __( 'Featured image', 'wporg_learn' ), + 'set_featured_image' => __( 'Set featured image', 'wporg_learn' ), + 'remove_featured_image' => __( 'Remove featured image', 'wporg_learn' ), + 'use_featured_image' => __( 'Use as featured image', 'wporg_learn' ), + 'insert_into_item' => __( 'Insert into activity kit', 'wporg_learn' ), + 'uploaded_to_this_item' => __( 'Uploaded to this activity kit', 'wporg_learn' ), + 'items_list' => __( 'Activity kits list', 'wporg_learn' ), + 'items_list_navigation' => __( 'Activity kits list navigation', 'wporg_learn' ), + 'filter_items_list' => __( 'Filter activity kits list', 'wporg_learn' ), + ); + + $args = array( + 'label' => __( 'Activity Kit', 'wporg_learn' ), + 'description' => __( 'WordPress.org Training Activity Kit', 'wporg_learn' ), + 'labels' => $labels, + 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields' ), + 'hierarchical' => false, + 'public' => true, + 'show_ui' => true, + 'show_in_menu' => true, + 'menu_position' => 7, + 'menu_icon' => 'dashicons-clipboard', + 'show_in_admin_bar' => true, + 'show_in_nav_menus' => true, + 'can_export' => true, + 'has_archive' => 'activity-library', + 'exclude_from_search' => false, + 'publicly_queryable' => true, + 'capability_type' => array( 'activity_kit', 'activity_kits' ), + 'map_meta_cap' => true, + 'show_in_rest' => true, + 'rewrite' => array( + 'slug' => 'activity-library', + 'with_front' => false, + ), + ); + + register_post_type( 'activity_kit', $args ); +} + /** * Create an array representation of a workshop's content template. * @@ -237,6 +301,7 @@ function generate_workshop_template_structure() { function jetpack_copy_post_post_types( $post_types ) { $post_types[] = 'lesson-plan'; $post_types[] = 'wporg_workshop'; + $post_types[] = 'activity_kit'; return $post_types; } @@ -255,6 +320,7 @@ function jetpack_sitemap_post_types( $post_types ) { // The "lesson" has been excluded in Sensei LMS, but it is needed in Learn. // See https://github.com/Automattic/sensei/blob/trunk/includes/class-sensei-posttypes.php#L25. $post_types[] = 'lesson'; + $post_types[] = 'activity_kit'; return $post_types; } @@ -268,7 +334,7 @@ function jetpack_sitemap_post_types( $post_types ) { * @return array */ function jetpack_page_sitemap_other_urls( $urls ) { - foreach ( array( 'wporg_workshop', 'lesson-plan' ) as $post_type ) { + foreach ( array( 'wporg_workshop', 'lesson-plan', 'activity_kit' ) as $post_type ) { $url = get_post_type_archive_link( $post_type ); if ( ! $url ) { continue; diff --git a/wp-content/plugins/wporg-learn/inc/sensei.php b/wp-content/plugins/wporg-learn/inc/sensei.php index e7563e40e..37745ea34 100644 --- a/wp-content/plugins/wporg-learn/inc/sensei.php +++ b/wp-content/plugins/wporg-learn/inc/sensei.php @@ -261,6 +261,9 @@ class="sensei-date-picker" * Redirect requests for the "My Courses" page to the login page and back, if logged out. */ function restrict_my_courses_page_access() { + if ( ! function_exists( 'Sensei' ) ) { + return; + } if ( ! is_user_logged_in() && is_page( Sensei()->settings->get_my_courses_page_id() ) ) { $redirect_to = wp_unslash( $_GET['redirect_to'] ?? '' ) ?: sensei_get_current_page_url(); diff --git a/wp-content/plugins/wporg-learn/inc/taxonomy.php b/wp-content/plugins/wporg-learn/inc/taxonomy.php index 60ae22d8b..9386878f4 100644 --- a/wp-content/plugins/wporg-learn/inc/taxonomy.php +++ b/wp-content/plugins/wporg-learn/inc/taxonomy.php @@ -258,7 +258,7 @@ function register_lesson_level() { ), ); - register_taxonomy( 'level', array( 'lesson-plan', 'lesson', 'course' ), $args ); + register_taxonomy( 'level', array( 'lesson-plan', 'lesson', 'course', 'activity_kit' ), $args ); } /** @@ -445,7 +445,7 @@ function register_topic() { ), ); - register_taxonomy( 'topic', array( 'lesson-plan', 'wporg_workshop', 'course', 'lesson', 'meeting' ), $args ); + register_taxonomy( 'topic', array( 'lesson-plan', 'wporg_workshop', 'course', 'lesson', 'meeting', 'activity_kit' ), $args ); } /** @@ -682,6 +682,10 @@ function tax_edit_term_fields( $term, $taxonomy ) { * @param int $term_id the term id to update. */ function tax_save_term_fields( $term_id ) { + if ( defined( 'WP_CLI' ) && WP_CLI ) { + return; + } + $wp_list_table = \_get_list_table( 'WP_Terms_List_Table' ); if ( 'add-tag' === $wp_list_table->current_action() ) { @@ -749,3 +753,4 @@ function get_available_taxonomy_terms( $taxonomy, $post_type, $post_status = nul return $terms; }, array()); } + diff --git a/wp-content/plugins/wporg-learn/js/activity-kit-card/block.json b/wp-content/plugins/wporg-learn/js/activity-kit-card/block.json new file mode 100644 index 000000000..368c44855 --- /dev/null +++ b/wp-content/plugins/wporg-learn/js/activity-kit-card/block.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wporg/activity-kit-card", + "version": "0.1.0", + "title": "Activity Kit Card", + "category": "wporg-learn", + "description": "Displays a single activity kit as a card.", + "parent": [ "core/post-template" ], + "usesContext": [ "postId", "postType" ], + "attributes": {}, + "supports": { + "html": false + }, + "textdomain": "wporg-learn", + "editorScript": "file:../../build/activity-kit-card.js" +} diff --git a/wp-content/plugins/wporg-learn/js/activity-kit-card/src/index.js b/wp-content/plugins/wporg-learn/js/activity-kit-card/src/index.js new file mode 100644 index 000000000..d24b4ec87 --- /dev/null +++ b/wp-content/plugins/wporg-learn/js/activity-kit-card/src/index.js @@ -0,0 +1,7 @@ +import { registerBlockType } from '@wordpress/blocks'; +import Edit from '../../shared/dynamic-edit'; +import metadata from '../block.json'; + +registerBlockType( metadata.name, { + edit: Edit, +} ); diff --git a/wp-content/plugins/wporg-learn/js/activity-kit-sidebar/src/index.js b/wp-content/plugins/wporg-learn/js/activity-kit-sidebar/src/index.js new file mode 100644 index 000000000..34597afef --- /dev/null +++ b/wp-content/plugins/wporg-learn/js/activity-kit-sidebar/src/index.js @@ -0,0 +1,273 @@ +import { registerPlugin } from '@wordpress/plugins'; +import { PluginDocumentSettingPanel } from '@wordpress/edit-post'; +import { useDispatch, useSelect } from '@wordpress/data'; +import { store as coreStore } from '@wordpress/core-data'; +import { + TextControl, + BaseControl, + Button, + RadioControl, +} from '@wordpress/components'; +import { MediaUpload, MediaUploadCheck } from '@wordpress/block-editor'; +import { __ } from '@wordpress/i18n'; +import { useEffect } from '@wordpress/element'; + +function ActivityKitDetailsPanel() { + const postMeta = useSelect( + ( select ) => + select( 'core/editor' ).getEditedPostAttribute( 'meta' ) || {} + ); + const { editPost } = useDispatch( 'core/editor' ); + + const setMeta = ( key, value ) => + editPost( { meta: { ...postMeta, [ key ]: value } } ); + + const duration = postMeta._activity_duration || ''; + const guidePdfId = postMeta._activity_guide_pdf_id || 0; + const slidesPdfId = postMeta._activity_slides_pdf_id || 0; + const zipId = postMeta._activity_zip_id || 0; + const feedbackUrl = postMeta._activity_feedback_url || ''; + + const guideTitle = useSelect( + ( select ) => + guidePdfId + ? select( coreStore ).getMedia( guidePdfId )?.title?.rendered + : null, + [ guidePdfId ] + ); + const slidesTitle = useSelect( + ( select ) => + slidesPdfId + ? select( coreStore ).getMedia( slidesPdfId )?.title?.rendered + : null, + [ slidesPdfId ] + ); + const zipTitle = useSelect( + ( select ) => + zipId + ? select( coreStore ).getMedia( zipId )?.title?.rendered + : null, + [ zipId ] + ); + + return ( + + setMeta( '_activity_duration', value ) } + placeholder={ __( '60', 'wporg-learn' ) } + /> + + +
+ { guidePdfId ? ( + <> + + { guideTitle || `Attachment #${ guidePdfId }` } + + + + ) : ( + + + setMeta( + '_activity_guide_pdf_id', + media.id + ) + } + allowedTypes={ [ 'application/pdf' ] } + render={ ( { open } ) => ( + + ) } + /> + + ) } +
+
+ + +
+ { slidesPdfId ? ( + <> + + { slidesTitle || + `Attachment #${ slidesPdfId }` } + + + + ) : ( + + + setMeta( + '_activity_slides_pdf_id', + media.id + ) + } + allowedTypes={ [ 'application/pdf' ] } + render={ ( { open } ) => ( + + ) } + /> + + ) } +
+
+ + +
+ { zipId ? ( + <> + + { zipTitle || `Attachment #${ zipId }` } + + + + ) : ( + + + setMeta( '_activity_zip_id', media.id ) + } + allowedTypes={ [ + 'application/zip', + 'application/x-zip-compressed', + ] } + render={ ( { open } ) => ( + + ) } + /> + + ) } +
+
+ + + setMeta( '_activity_feedback_url', value ) + } + placeholder="https://..." + /> +
+ ); +} + +function ActivityKitLevelPanel() { + const { removeEditorPanel } = useDispatch( 'core/editor' ); + + const levelTermIds = useSelect( + ( select ) => + select( 'core/editor' ).getEditedPostAttribute( 'level' ) || [] + ); + const { editPost } = useDispatch( 'core/editor' ); + + const levelTerms = useSelect( + ( select ) => + select( coreStore ).getEntityRecords( 'taxonomy', 'level', { + per_page: 100, + orderby: 'id', + order: 'asc', + } ), + [] + ); + + useEffect( () => { + removeEditorPanel( 'taxonomy-panel-level' ); + }, [ removeEditorPanel ] ); + + const options = [ + { label: __( '— None —', 'wporg-learn' ), value: '' }, + ...( levelTerms || [] ).map( ( term ) => ( { + label: term.name, + value: String( term.id ), + } ) ), + ]; + + const selectedValue = + levelTermIds && levelTermIds.length > 0 + ? String( levelTermIds[ 0 ] ) + : ''; + + return ( + + + editPost( { + level: value ? [ parseInt( value, 10 ) ] : [], + } ) + } + /> + + ); +} + +function ActivityKitSidebar() { + return ( + <> + + + + ); +} + +registerPlugin( 'wporg-activity-kit-details', { + render: ActivityKitSidebar, +} ); diff --git a/wp-content/plugins/wporg-learn/js/activity-kit-stats/index.js b/wp-content/plugins/wporg-learn/js/activity-kit-stats/index.js new file mode 100644 index 000000000..873febffd --- /dev/null +++ b/wp-content/plugins/wporg-learn/js/activity-kit-stats/index.js @@ -0,0 +1,644 @@ +/* global activityKitStats, Chart */ + +( function () { + const { restUrl, nonce } = activityKitStats; + + // ── Constants ── + const CHART_PAGE = 8; + + // ── State ── + let allData = []; + let chart = null; + let activeMetric = 'both'; + let activeRange = 'all'; + let activeKit = ''; + let sortCol = 'views'; + let sortDir = 'desc'; + let chartOffset = 0; + let customFrom = ''; + let customTo = ''; + + // ── DOM refs ── + const filterKit = document.getElementById( 'ak-filter-kit' ); + const tableBody = document.getElementById( 'ak-stats-table-body' ); + const chartCanvas = document.getElementById( 'ak-stats-chart' ); + + if ( ! filterKit || ! tableBody || ! chartCanvas ) { + return; + } + + const summaryViews = document.getElementById( 'ak-summary-views' ); + const summaryDownloads = document.getElementById( 'ak-summary-downloads' ); + const summaryRate = document.getElementById( 'ak-summary-rate' ); + const boxKits = document.getElementById( 'ak-box-kits' ); + const boxViews = document.getElementById( 'ak-box-views' ); + const boxDownloads = document.getElementById( 'ak-box-downloads' ); + const boxRate = document.getElementById( 'ak-box-rate' ); + const totalKits = document.getElementById( 'ak-total-kits' ); + const chartTitle = document.getElementById( 'ak-chart-title' ); + const chartSubtitle = document.getElementById( 'ak-chart-subtitle' ); + const legendViews = document.getElementById( 'ak-legend-views' ); + const legendDownloads = document.getElementById( 'ak-legend-downloads' ); + const tableSubtitle = document.getElementById( 'ak-table-subtitle' ); + const backLinkBar = document.getElementById( 'ak-back-link-bar' ); + const kitBanner = document.getElementById( 'ak-kit-banner' ); + const kitBannerName = document.getElementById( 'ak-kit-banner-name' ); + const thViews = document.getElementById( 'ak-th-views' ); + const thDownloads = document.getElementById( 'ak-th-downloads' ); + const exportBtn = document.getElementById( 'ak-export-csv' ); + const customRangePicker = document.getElementById( + 'ak-custom-range-picker' + ); + const dateFromInput = document.getElementById( 'ak-date-from' ); + const dateToInput = document.getElementById( 'ak-date-to' ); + const applyCustomRange = document.getElementById( 'ak-apply-custom-range' ); + const chartSliderWrap = document.getElementById( 'ak-chart-slider-wrap' ); + const chartSlider = document.getElementById( 'ak-chart-slider' ); + const chartSliderLabel = document.getElementById( 'ak-chart-slider-label' ); + + const metricBtns = document.querySelectorAll( '[data-ak-metric]' ); + const rangeBtns = document.querySelectorAll( '[data-ak-range]' ); + + // ── Helpers ── + function fmt( num ) { + return ( num ?? 0 ).toLocaleString(); + } + + function formatDate( dateStr ) { + if ( ! dateStr ) { + return '—'; + } + const date = new Date( dateStr + 'T00:00:00' ); + return date.toLocaleDateString( 'en-US', { + month: 'short', + day: 'numeric', + year: 'numeric', + } ); + } + + function escHtml( s ) { + return String( s ) + .replace( /&/g, '&' ) + .replace( //g, '>' ) + .replace( /"/g, '"' ); + } + + function rangeLabel() { + const labels = { + '7d': 'Last 7 days', + '30d': 'Last 30 days', + '90d': 'Last 90 days', + all: 'All time', + }; + if ( activeRange === 'custom' && customFrom && customTo ) { + return customFrom + ' – ' + customTo; + } + return labels[ activeRange ] || 'All time'; + } + + const metricLabel = { + both: 'Views vs. Downloads', + views: 'Views', + downloads: 'Downloads', + }; + + // ── Fetch ── + async function fetchStats() { + const url = new URL( restUrl ); + url.searchParams.set( 'metric', 'both' ); + + if ( activeRange === 'custom' ) { + url.searchParams.set( 'range', 'custom' ); + if ( customFrom ) { + url.searchParams.set( 'date_from', customFrom ); + } + if ( customTo ) { + url.searchParams.set( 'date_to', customTo ); + } + } else { + url.searchParams.set( 'range', activeRange ); + } + + if ( activeKit ) { + url.searchParams.set( 'kit', activeKit ); + } else { + url.searchParams.delete( 'kit' ); + } + + const resp = await fetch( url.toString(), { + headers: { 'X-WP-Nonce': nonce }, + } ); + if ( ! resp.ok ) { + throw new Error( 'Failed to fetch stats.' ); + } + return resp.json(); + } + + // ── Summary ── + function updateSummary( data ) { + const isSingle = !! activeKit; + const totalV = data.reduce( ( s, r ) => s + ( r.views ?? 0 ), 0 ); + const totalD = data.reduce( ( s, r ) => s + ( r.downloads ?? 0 ), 0 ); + const rate = + totalV > 0 ? ( ( totalD / totalV ) * 100 ).toFixed( 1 ) + '%' : '—'; + + if ( summaryViews ) { + summaryViews.textContent = fmt( totalV ); + } + if ( summaryDownloads ) { + summaryDownloads.textContent = fmt( totalD ); + } + if ( summaryRate ) { + summaryRate.textContent = rate; + } + if ( totalKits ) { + totalKits.textContent = isSingle ? '1' : data.length; + } + + if ( boxKits ) { + boxKits.style.display = isSingle ? 'none' : ''; + } + if ( boxViews ) { + boxViews.style.display = activeMetric === 'downloads' ? 'none' : ''; + } + if ( boxDownloads ) { + boxDownloads.style.display = activeMetric === 'views' ? 'none' : ''; + } + if ( boxRate ) { + boxRate.style.display = isSingle ? '' : 'none'; + } + } + + // ── Chart ── + function initChart() { + const ctx = chartCanvas.getContext( '2d' ); + chart = new Chart( ctx, { + type: 'bar', + data: { labels: [], datasets: [] }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { display: false }, + tooltip: { + callbacks: { + label: ( c ) => + ' ' + + c.dataset.label + + ': ' + + c.parsed.y.toLocaleString(), + }, + }, + }, + scales: { + x: { + grid: { display: false }, + ticks: { + font: { size: 11 }, + color: '#646970', + maxRotation: 30, + }, + border: { color: '#c3c4c7' }, + }, + y: { + beginAtZero: true, + grid: { color: '#f0f0f1' }, + ticks: { font: { size: 11 }, color: '#646970' }, + border: { color: '#c3c4c7' }, + }, + }, + }, + } ); + } + + function renderChart( data ) { + if ( ! chart ) { + return; + } + + const total = data.length; + const paged = total > CHART_PAGE; + const sliced = paged + ? data.slice( chartOffset, chartOffset + CHART_PAGE ) + : data; + + // Slider visibility and state. + if ( chartSliderWrap ) { + chartSliderWrap.classList.toggle( 'is-visible', paged ); + } + if ( paged && chartSlider ) { + const maxOffset = Math.max( 0, total - CHART_PAGE ); + chartSlider.max = maxOffset; + chartSlider.value = chartOffset; + } + if ( paged && chartSliderLabel ) { + const end = Math.min( chartOffset + CHART_PAGE, total ); + chartSliderLabel.textContent = + chartOffset + 1 + '–' + end + ' of ' + total; + } + + const labels = sliced.map( ( r ) => + r.title.length > 20 ? r.title.slice( 0, 18 ) + '…' : r.title + ); + const datasets = []; + + if ( activeMetric !== 'downloads' ) { + datasets.push( { + label: 'Views', + backgroundColor: '#3858e9', + barPercentage: 0.75, + categoryPercentage: 0.7, + data: sliced.map( ( r ) => r.views ?? 0 ), + } ); + } + if ( activeMetric !== 'views' ) { + datasets.push( { + label: 'Downloads', + backgroundColor: '#9fb1ff', + barPercentage: 0.75, + categoryPercentage: 0.7, + data: sliced.map( ( r ) => r.downloads ?? 0 ), + } ); + } + + chart.data.labels = labels; + chart.data.datasets = datasets; + chart.update(); + } + + // ── Table ── + function renderTable( data ) { + if ( ! data.length ) { + tableBody.innerHTML = + 'No data found.'; + return; + } + + const sorted = [ ...data ].sort( ( a, b ) => { + if ( sortCol === 'title' ) { + const na = a.title.toLowerCase(); + const nb = b.title.toLowerCase(); + if ( sortDir === 'asc' ) { + if ( na < nb ) { + return -1; + } + if ( na > nb ) { + return 1; + } + return 0; + } + if ( nb < na ) { + return -1; + } + if ( nb > na ) { + return 1; + } + return 0; + } + if ( sortCol === 'updated' ) { + return sortDir === 'asc' + ? ( a.updated || '' ).localeCompare( b.updated || '' ) + : ( b.updated || '' ).localeCompare( a.updated || '' ); + } + let va; + if ( sortCol === 'views' ) { + va = a.views ?? 0; + } else if ( sortCol === 'downloads' ) { + va = a.downloads ?? 0; + } else { + va = + ( a.views ?? 0 ) > 0 + ? ( a.downloads ?? 0 ) / ( a.views ?? 0 ) + : 0; + } + let vb; + if ( sortCol === 'views' ) { + vb = b.views ?? 0; + } else if ( sortCol === 'downloads' ) { + vb = b.downloads ?? 0; + } else { + vb = + ( b.views ?? 0 ) > 0 + ? ( b.downloads ?? 0 ) / ( b.views ?? 0 ) + : 0; + } + return sortDir === 'asc' ? va - vb : vb - va; + } ); + + tableBody.innerHTML = ''; + sorted.forEach( ( row ) => { + const v = row.views ?? 0; + const d = row.downloads ?? 0; + const rate = v > 0 ? ( ( d / v ) * 100 ).toFixed( 1 ) + '%' : '—'; + const isSelected = row.slug === activeKit; + const tr = document.createElement( 'tr' ); + if ( isSelected ) { + tr.classList.add( 'is-selected' ); + } + + const viewsClass = + 'ak-col-number' + + ( activeMetric === 'downloads' ? ' ak-hidden-col' : '' ); + const dlClass = + 'ak-col-number' + + ( activeMetric === 'views' ? ' ak-hidden-col' : '' ); + + tr.innerHTML = ` + ${ escHtml( + row.title + ) } + ${ fmt( v ) } + ${ fmt( d ) } + ${ rate } + ${ formatDate( row.updated ) } + `; + + tr.querySelector( 'a' ).addEventListener( 'click', ( e ) => { + e.preventDefault(); + setKit( e.currentTarget.dataset.slug ); + } ); + tr.addEventListener( 'click', ( e ) => { + if ( e.target.tagName !== 'A' ) { + setKit( row.slug ); + } + } ); + + tableBody.appendChild( tr ); + } ); + + // Update sort arrows. + document + .querySelectorAll( '#ak-stats-table thead th' ) + .forEach( ( th ) => { + const col = th.dataset.col; + const arrow = th.querySelector( '.ak-sort-arrow' ); + th.classList.remove( 'is-sorted' ); + if ( arrow ) { + arrow.textContent = ''; + } + if ( col === sortCol && arrow ) { + th.classList.add( 'is-sorted' ); + arrow.textContent = sortDir === 'asc' ? ' ↑' : ' ↓'; + } + } ); + } + + // ── UI state ── + function updateUI() { + const isSingle = !! activeKit; + const kitObj = isSingle + ? allData.find( ( r ) => r.slug === activeKit ) + : null; + + if ( chartTitle ) { + chartTitle.textContent = + metricLabel[ activeMetric ] + + ' — ' + + ( isSingle && kitObj ? kitObj.title : 'All Kits' ); + } + if ( chartSubtitle ) { + chartSubtitle.textContent = rangeLabel(); + } + + if ( legendViews ) { + legendViews.style.display = + activeMetric === 'downloads' ? 'none' : ''; + } + if ( legendDownloads ) { + legendDownloads.style.display = + activeMetric === 'views' ? 'none' : ''; + } + + if ( thViews ) { + thViews.classList.toggle( + 'ak-hidden-col', + activeMetric === 'downloads' + ); + } + if ( thDownloads ) { + thDownloads.classList.toggle( + 'ak-hidden-col', + activeMetric === 'views' + ); + } + + if ( backLinkBar ) { + backLinkBar.classList.toggle( 'is-visible', isSingle ); + } + if ( kitBanner ) { + kitBanner.classList.toggle( 'is-visible', isSingle ); + if ( isSingle && kitObj && kitBannerName ) { + kitBannerName.textContent = kitObj.title; + } + } + + if ( tableSubtitle ) { + tableSubtitle.textContent = isSingle + ? 'Showing single kit' + : 'Click a row to drill into a single kit'; + } + } + + // ── Main render ── + async function render() { + tableBody.innerHTML = 'Loading…'; + + try { + allData = await fetchStats(); + const data = activeKit + ? allData.filter( ( r ) => r.slug === activeKit ) + : allData; + updateSummary( data ); + updateUI(); + renderChart( data ); + renderTable( data ); + } catch ( e ) { + tableBody.innerHTML = `Error loading stats: ${ escHtml( + e.message + ) }`; + } + } + + // ── Setters ── + function setMetric( m ) { + activeMetric = m; + metricBtns.forEach( ( b ) => + b.classList.toggle( 'is-active', b.dataset.akMetric === m ) + ); + const data = activeKit + ? allData.filter( ( r ) => r.slug === activeKit ) + : allData; + updateSummary( data ); + updateUI(); + renderChart( data ); + renderTable( data ); + } + + function setRange( r ) { + activeRange = r; + rangeBtns.forEach( ( b ) => + b.classList.toggle( 'is-active', b.dataset.akRange === r ) + ); + + const isCustom = r === 'custom'; + if ( customRangePicker ) { + customRangePicker.classList.toggle( 'is-visible', isCustom ); + } + + if ( ! isCustom ) { + render(); + } + } + + function setKit( slug ) { + activeKit = slug === activeKit ? '' : slug; + chartOffset = 0; + if ( filterKit ) { + filterKit.value = activeKit; + } + render(); + } + + function resetKit() { + activeKit = ''; + chartOffset = 0; + if ( filterKit ) { + filterKit.value = ''; + } + render(); + } + + // ── Export CSV ── + function exportCSV() { + const data = activeKit + ? allData.filter( ( r ) => r.slug === activeKit ) + : allData; + const rows = [ + [ + 'Kit Name', + 'Views', + 'Downloads', + 'Download Rate', + 'Last Updated', + ], + ]; + data.forEach( ( r ) => { + const v = r.views ?? 0; + const d = r.downloads ?? 0; + const rate = v > 0 ? ( ( d / v ) * 100 ).toFixed( 1 ) + '%' : '0%'; + rows.push( [ r.title, v, d, rate, r.updated || '' ] ); + } ); + const csv = rows + .map( ( row ) => + row + .map( ( c ) => `"${ String( c ).replace( /"/g, '""' ) }"` ) + .join( ',' ) + ) + .join( '\n' ); + const blob = new Blob( [ csv ], { type: 'text/csv' } ); + const url = URL.createObjectURL( blob ); + const a = document.createElement( 'a' ); + a.href = url; + a.download = 'activity-kit-stats.csv'; + a.click(); + URL.revokeObjectURL( url ); + } + + // ── Event listeners ── + metricBtns.forEach( ( btn ) => { + btn.addEventListener( 'click', () => + setMetric( btn.dataset.akMetric ) + ); + } ); + + rangeBtns.forEach( ( btn ) => { + btn.addEventListener( 'click', () => setRange( btn.dataset.akRange ) ); + } ); + + filterKit.addEventListener( 'change', () => { + activeKit = filterKit.value; + chartOffset = 0; + render(); + } ); + + if ( applyCustomRange ) { + applyCustomRange.addEventListener( 'click', () => { + customFrom = dateFromInput ? dateFromInput.value : ''; + customTo = dateToInput ? dateToInput.value : ''; + if ( customFrom && customTo ) { + render(); + } + } ); + } + + const clearCustomRange = document.getElementById( 'ak-clear-custom-range' ); + if ( clearCustomRange ) { + clearCustomRange.addEventListener( 'click', () => { + customFrom = ''; + customTo = ''; + if ( dateFromInput ) { + dateFromInput.value = ''; + } + if ( dateToInput ) { + dateToInput.value = ''; + } + setRange( 'all' ); + } ); + } + + if ( chartSlider ) { + chartSlider.addEventListener( 'input', () => { + chartOffset = parseInt( chartSlider.value, 10 ); + const data = activeKit + ? allData.filter( ( r ) => r.slug === activeKit ) + : allData; + renderChart( data ); + } ); + } + + const backLink = document.getElementById( 'ak-back-link' ); + const bannerBack = document.getElementById( 'ak-kit-banner-back' ); + if ( backLink ) { + backLink.addEventListener( 'click', ( e ) => { + e.preventDefault(); + resetKit(); + } ); + } + if ( bannerBack ) { + bannerBack.addEventListener( 'click', ( e ) => { + e.preventDefault(); + resetKit(); + } ); + } + if ( exportBtn ) { + exportBtn.addEventListener( 'click', ( e ) => { + e.preventDefault(); + exportCSV(); + } ); + } + + // Sortable column headers. + document.querySelectorAll( '#ak-stats-table thead th' ).forEach( ( th ) => { + th.addEventListener( 'click', () => { + const col = th.dataset.col; + if ( ! col ) { + return; + } + if ( sortCol === col ) { + sortDir = sortDir === 'asc' ? 'desc' : 'asc'; + } else { + sortCol = col; + sortDir = th.dataset.type === 'number' ? 'desc' : 'asc'; + } + const data = activeKit + ? allData.filter( ( r ) => r.slug === activeKit ) + : allData; + renderTable( data ); + } ); + } ); + + // ── Init ── + initChart(); + render(); +} )(); diff --git a/wp-content/plugins/wporg-learn/js/constants.js b/wp-content/plugins/wporg-learn/js/constants.js index fb4e5aaf9..dedaa25f4 100644 --- a/wp-content/plugins/wporg-learn/js/constants.js +++ b/wp-content/plugins/wporg-learn/js/constants.js @@ -4,6 +4,12 @@ import { __ } from '@wordpress/i18n'; export const errors = { - BLOCK_SIDEBAR_TYPE_INCOMPATIBLE: __( 'Error: This block is not compatible with this sidebar.', 'wporg-learn' ), - BLOCK_POST_TYPE_INCOMPATIBLE: __( 'Error: This block is not compatible with this post type.', 'wporg-learn' ), + BLOCK_SIDEBAR_TYPE_INCOMPATIBLE: __( + 'Error: This block is not compatible with this sidebar.', + 'wporg-learn' + ), + BLOCK_POST_TYPE_INCOMPATIBLE: __( + 'Error: This block is not compatible with this post type.', + 'wporg-learn' + ), }; diff --git a/wp-content/plugins/wporg-learn/js/course-completion-meta/index.js b/wp-content/plugins/wporg-learn/js/course-completion-meta/index.js index f2c50b0cc..325ca6065 100644 --- a/wp-content/plugins/wporg-learn/js/course-completion-meta/index.js +++ b/wp-content/plugins/wporg-learn/js/course-completion-meta/index.js @@ -8,14 +8,19 @@ import { __ } from '@wordpress/i18n'; import { registerPlugin } from '@wordpress/plugins'; const CourseCompletionMeta = () => { - const postMetaData = useSelect( ( select ) => select( 'core/editor' ).getEditedPostAttribute( 'meta' ) || {} ); + const postMetaData = useSelect( + ( select ) => + select( 'core/editor' ).getEditedPostAttribute( 'meta' ) || {} + ); const { editPost } = useDispatch( 'core/editor' ); const message = postMetaData?._course_completion_success_message || ''; const link = postMetaData?._course_completion_survey_link || ''; return ( - +

{ __( @@ -28,7 +33,10 @@ const CourseCompletionMeta = () => { { editPost( { meta: { diff --git a/wp-content/plugins/wporg-learn/js/course-data/src/edit.js b/wp-content/plugins/wporg-learn/js/course-data/src/edit.js index e41d523c9..32c6bbdf7 100644 --- a/wp-content/plugins/wporg-learn/js/course-data/src/edit.js +++ b/wp-content/plugins/wporg-learn/js/course-data/src/edit.js @@ -12,7 +12,10 @@ export default function Edit( { clientId } ) { 'lesson-plan', useGetCurrentPostType(), useIsBlockInSidebar( clientId, 'wporg-learn-courses' ), - __( 'This will be dynamically populated based on the current course data.', 'wporg-learn' ) + __( + 'This will be dynamically populated based on the current course data.', + 'wporg-learn' + ) ); return ( diff --git a/wp-content/plugins/wporg-learn/js/course-data/src/index.js b/wp-content/plugins/wporg-learn/js/course-data/src/index.js index 66798db83..83de891a7 100644 --- a/wp-content/plugins/wporg-learn/js/course-data/src/index.js +++ b/wp-content/plugins/wporg-learn/js/course-data/src/index.js @@ -43,7 +43,10 @@ registerBlockType( metadata.name, { * This is a short description for your block, can be translated with `i18n` functions. * It will be shown in the Block Tab in the Settings Sidebar. */ - description: __( 'Show average learner details for the course.', 'wporg-learn' ), + description: __( + 'Show average learner details for the course.', + 'wporg-learn' + ), /** * Blocks are grouped into categories to help users browse and discover them. diff --git a/wp-content/plugins/wporg-learn/js/duration-meta/index.js b/wp-content/plugins/wporg-learn/js/duration-meta/index.js index 64a7cb9a7..491e4afb0 100644 --- a/wp-content/plugins/wporg-learn/js/duration-meta/index.js +++ b/wp-content/plugins/wporg-learn/js/duration-meta/index.js @@ -9,12 +9,17 @@ import { __ } from '@wordpress/i18n'; import { registerPlugin } from '@wordpress/plugins'; const DurationMeta = () => { - const postMetaData = useSelect( ( select ) => select( 'core/editor' ).getEditedPostAttribute( 'meta' ) || {} ); + const postMetaData = useSelect( + ( select ) => + select( 'core/editor' ).getEditedPostAttribute( 'meta' ) || {} + ); const { editPost } = useDispatch( 'core/editor' ); const [ duration, setDuration ] = useState( postMetaData?._duration ); return ( - + { - const postMetaData = useSelect( ( select ) => select( 'core/editor' ).getEditedPostAttribute( 'meta' ) || {} ); + const postMetaData = useSelect( + ( select ) => + select( 'core/editor' ).getEditedPostAttribute( 'meta' ) || {} + ); const { editPost } = useDispatch( 'core/editor' ); const [ expDate, setExpDate ] = useState( postMetaData?.expiration_date ); const anchorRef = useRef(); @@ -66,7 +77,8 @@ const ExpirationDate = () => { }, } ); - const { ownerDocument } = pickerRef.current; + const { ownerDocument } = + pickerRef.current; ownerDocument.activeElement.blur(); } } /> diff --git a/wp-content/plugins/wporg-learn/js/form.js b/wp-content/plugins/wporg-learn/js/form.js index 739ca51bc..a9ef04ad9 100644 --- a/wp-content/plugins/wporg-learn/js/form.js +++ b/wp-content/plugins/wporg-learn/js/form.js @@ -8,7 +8,10 @@ const jQuery = window.jQuery || {}; const checkbox = container.querySelector( 'input[type="checkbox"]' ), text = container.querySelector( 'input[type="text"]' ); - text.addEventListener( 'input', ( event ) => ( checkbox.checked = !! event.target.value ) ); + text.addEventListener( + 'input', + ( event ) => ( checkbox.checked = !! event.target.value ) + ); checkbox.addEventListener( 'change', ( event ) => { if ( event.target.checked ) { diff --git a/wp-content/plugins/wporg-learn/js/hooks/use-is-block-in-sidebar.js b/wp-content/plugins/wporg-learn/js/hooks/use-is-block-in-sidebar.js index 11d1eb97e..07bea309e 100644 --- a/wp-content/plugins/wporg-learn/js/hooks/use-is-block-in-sidebar.js +++ b/wp-content/plugins/wporg-learn/js/hooks/use-is-block-in-sidebar.js @@ -5,7 +5,8 @@ import { useSelect } from '@wordpress/data'; export const useIsBlockInSidebar = ( clientId, sidebarName ) => { return useSelect( ( select ) => { - const { getBlockAttributes, getBlockName, getBlockParents } = select( 'core/block-editor' ); + const { getBlockAttributes, getBlockName, getBlockParents } = + select( 'core/block-editor' ); const parents = getBlockParents( clientId ); return parents.some( ( parent ) => { if ( 'core/widget-area' !== getBlockName( parent ) ) { diff --git a/wp-content/plugins/wporg-learn/js/language-meta/index.js b/wp-content/plugins/wporg-learn/js/language-meta/index.js index 295b9096a..617587bdf 100644 --- a/wp-content/plugins/wporg-learn/js/language-meta/index.js +++ b/wp-content/plugins/wporg-learn/js/language-meta/index.js @@ -14,7 +14,10 @@ import { registerPlugin } from '@wordpress/plugins'; const locales = wporgLearnLocales; const LanguageMeta = () => { - const postMetaData = useSelect( ( select ) => select( 'core/editor' ).getEditedPostAttribute( 'meta' ) || {} ); + const postMetaData = useSelect( + ( select ) => + select( 'core/editor' ).getEditedPostAttribute( 'meta' ) || {} + ); const { editPost } = useDispatch( 'core/editor' ); const [ language, setLanguage ] = useState( postMetaData?.language ); diff --git a/wp-content/plugins/wporg-learn/js/lesson-featured-meta/index.js b/wp-content/plugins/wporg-learn/js/lesson-featured-meta/index.js index 93443e785..adc5ead1c 100644 --- a/wp-content/plugins/wporg-learn/js/lesson-featured-meta/index.js +++ b/wp-content/plugins/wporg-learn/js/lesson-featured-meta/index.js @@ -11,15 +11,25 @@ import { registerPlugin } from '@wordpress/plugins'; const FEATURED = 'featured'; const LessonFeaturedMeta = () => { - const postMetaData = useSelect( ( select ) => select( 'core/editor' ).getEditedPostAttribute( 'meta' ) || {} ); + const postMetaData = useSelect( + ( select ) => + select( 'core/editor' ).getEditedPostAttribute( 'meta' ) || {} + ); const { editPost } = useDispatch( 'core/editor' ); - const [ lessonFeatured, setLessonFeatured ] = useState( postMetaData?._lesson_featured === FEATURED ); + const [ lessonFeatured, setLessonFeatured ] = useState( + postMetaData?._lesson_featured === FEATURED + ); return ( - + { setLessonFeatured( newLessonFeatured ); @@ -27,7 +37,9 @@ const LessonFeaturedMeta = () => { editPost( { meta: { ...postMetaData, - _lesson_featured: newLessonFeatured ? FEATURED : '', + _lesson_featured: newLessonFeatured + ? FEATURED + : '', }, } ); } } diff --git a/wp-content/plugins/wporg-learn/js/lesson-plan-actions/src/edit.js b/wp-content/plugins/wporg-learn/js/lesson-plan-actions/src/edit.js index 652c79051..48e95ac4a 100644 --- a/wp-content/plugins/wporg-learn/js/lesson-plan-actions/src/edit.js +++ b/wp-content/plugins/wporg-learn/js/lesson-plan-actions/src/edit.js @@ -12,7 +12,10 @@ export default function Edit( { clientId } ) { 'lesson-plan', useGetCurrentPostType(), useIsBlockInSidebar( clientId, 'wporg-learn-lesson-plans' ), - __( 'This will be dynamically populated based on media attached to the Lesson Plan.', 'wporg-learn' ) + __( + 'This will be dynamically populated based on media attached to the Lesson Plan.', + 'wporg-learn' + ) ); return ( diff --git a/wp-content/plugins/wporg-learn/js/lesson-plan-actions/src/index.js b/wp-content/plugins/wporg-learn/js/lesson-plan-actions/src/index.js index 3d9991089..4f8045ad3 100644 --- a/wp-content/plugins/wporg-learn/js/lesson-plan-actions/src/index.js +++ b/wp-content/plugins/wporg-learn/js/lesson-plan-actions/src/index.js @@ -43,7 +43,10 @@ registerBlockType( 'wporg-learn/lesson-plan-actions', { * This is a short description for your block, can be translated with `i18n` functions. * It will be shown in the Block Tab in the Settings Sidebar. */ - description: __( 'Show actions for the Lesson Plan, depending on post media.', 'wporg-learn' ), + description: __( + 'Show actions for the Lesson Plan, depending on post media.', + 'wporg-learn' + ), /** * Blocks are grouped into categories to help users browse and discover them. diff --git a/wp-content/plugins/wporg-learn/js/lesson-plan-details/src/index.js b/wp-content/plugins/wporg-learn/js/lesson-plan-details/src/index.js index 3df2941c8..0d9bab4e7 100644 --- a/wp-content/plugins/wporg-learn/js/lesson-plan-details/src/index.js +++ b/wp-content/plugins/wporg-learn/js/lesson-plan-details/src/index.js @@ -43,7 +43,10 @@ registerBlockType( metadata.name, { * This is a short description for your block, can be translated with `i18n` functions. * It will be shown in the Block Tab in the Settings Sidebar. */ - description: __( 'Show details about the Lesson Plan, pulled from post meta.', 'wporg-learn' ), + description: __( + 'Show details about the Lesson Plan, pulled from post meta.', + 'wporg-learn' + ), /** * Blocks are grouped into categories to help users browse and discover them. diff --git a/wp-content/plugins/wporg-learn/js/locale-notice.js b/wp-content/plugins/wporg-learn/js/locale-notice.js index 927780d44..d744e9d9a 100644 --- a/wp-content/plugins/wporg-learn/js/locale-notice.js +++ b/wp-content/plugins/wporg-learn/js/locale-notice.js @@ -8,16 +8,20 @@ const app = $.extend( localeNotice, { $notice: $(), - init: function () { + init() { app.$notice = $( '.wporg-learn-locale-notice' ); - app.$notice.on( 'click', '.wporg-learn-locale-notice-dismiss', function ( event ) { - event.preventDefault(); - app.dismissNotice(); - } ); + app.$notice.on( + 'click', + '.wporg-learn-locale-notice-dismiss', + function ( event ) { + event.preventDefault(); + app.dismissNotice(); + } + ); }, - dismissNotice: function () { + dismissNotice() { app.$notice.fadeTo( 100, 0, function () { app.$notice.slideUp( 100, function () { app.$notice.remove(); diff --git a/wp-content/plugins/wporg-learn/js/query-activity-kits/src/index.js b/wp-content/plugins/wporg-learn/js/query-activity-kits/src/index.js new file mode 100644 index 000000000..9204f4674 --- /dev/null +++ b/wp-content/plugins/wporg-learn/js/query-activity-kits/src/index.js @@ -0,0 +1,26 @@ +import { registerBlockVariation } from '@wordpress/blocks'; +import { __ } from '@wordpress/i18n'; + +registerBlockVariation( 'core/query', { + name: 'wporg/activity-kits', + title: __( 'Activity Kits', 'wporg-learn' ), + description: __( + 'Display a filterable grid of activity kits.', + 'wporg-learn' + ), + isActive: [ 'namespace' ], + attributes: { + namespace: 'wporg/activity-kits', + query: { + postType: 'activity_kit', + perPage: 12, + order: 'desc', + orderBy: 'date', + }, + }, + innerBlocks: [ + [ 'core/post-template', {}, [ [ 'wporg/activity-kit-card', {} ] ] ], + [ 'core/query-pagination', {} ], + ], + scope: [ 'inserter' ], +} ); diff --git a/wp-content/plugins/wporg-learn/js/utils.js b/wp-content/plugins/wporg-learn/js/utils.js index 91d5dc13c..0cc04033c 100644 --- a/wp-content/plugins/wporg-learn/js/utils.js +++ b/wp-content/plugins/wporg-learn/js/utils.js @@ -1,6 +1,11 @@ import { errors } from './constants'; -export const getBlockPlaceholderMessage = ( blockPostType, currentPostType, isBlockInSidebar, defaultMessage ) => { +export const getBlockPlaceholderMessage = ( + blockPostType, + currentPostType, + isBlockInSidebar, + defaultMessage +) => { if ( currentPostType === null ) { if ( ! isBlockInSidebar ) { return errors.BLOCK_SIDEBAR_TYPE_INCOMPATIBLE; diff --git a/wp-content/plugins/wporg-learn/js/workshop-application-form/src/edit.js b/wp-content/plugins/wporg-learn/js/workshop-application-form/src/edit.js index bf8e393ae..445f1aa01 100644 --- a/wp-content/plugins/wporg-learn/js/workshop-application-form/src/edit.js +++ b/wp-content/plugins/wporg-learn/js/workshop-application-form/src/edit.js @@ -8,7 +8,10 @@ export default function Edit() { return ( ); } diff --git a/wp-content/plugins/wporg-learn/js/workshop-application-form/src/index.js b/wp-content/plugins/wporg-learn/js/workshop-application-form/src/index.js index 37d9f723d..71d99dd20 100644 --- a/wp-content/plugins/wporg-learn/js/workshop-application-form/src/index.js +++ b/wp-content/plugins/wporg-learn/js/workshop-application-form/src/index.js @@ -11,7 +11,10 @@ import Edit from './edit'; registerBlockType( 'wporg-learn/workshop-application-form', { title: __( 'Workshop Application Form', 'wporg-learn' ), - description: __( 'Render a form for applying to present a workshop.', 'wporg-learn' ), + description: __( + 'Render a form for applying to present a workshop.', + 'wporg-learn' + ), category: 'widgets', icon: 'forms', supports: { diff --git a/wp-content/plugins/wporg-learn/js/workshop-details/src/index.js b/wp-content/plugins/wporg-learn/js/workshop-details/src/index.js index b07c42f76..4d0203278 100644 --- a/wp-content/plugins/wporg-learn/js/workshop-details/src/index.js +++ b/wp-content/plugins/wporg-learn/js/workshop-details/src/index.js @@ -42,7 +42,10 @@ registerBlockType( 'wporg-learn/workshop-details', { * This is a short description for your block, can be translated with `i18n` functions. * It will be shown in the Block Tab in the Settings Sidebar. */ - description: __( 'Show details about the workshop, pulled from post meta.', 'wporg-learn' ), + description: __( + 'Show details about the workshop, pulled from post meta.', + 'wporg-learn' + ), /** * Blocks are grouped into categories to help users browse and discover them. diff --git a/wp-content/plugins/wporg-learn/views/block-activity-kit-card.php b/wp-content/plugins/wporg-learn/views/block-activity-kit-card.php new file mode 100644 index 000000000..b15473f12 --- /dev/null +++ b/wp-content/plugins/wporg-learn/views/block-activity-kit-card.php @@ -0,0 +1,100 @@ +context['postId'] ?? 0; + +if ( ! $kit_post_id || 'activity_kit' !== get_post_type( $kit_post_id ) ) { + return ''; +} + +$kit_post = get_post( $kit_post_id ); +$kit_title = get_the_title( $kit_post_id ); +$permalink = get_permalink( $kit_post_id ); +$excerpt = get_the_excerpt( $kit_post ); + +$duration = get_post_meta( $kit_post_id, '_activity_duration', true ); +$zip_id = (int) get_post_meta( $kit_post_id, '_activity_zip_id', true ); +$zip_url = $zip_id ? wp_get_attachment_url( $zip_id ) : ''; + +$level_terms = wp_get_post_terms( $kit_post_id, 'level', array( 'fields' => 'names' ) ); +$level_name = ! is_wp_error( $level_terms ) && ! empty( $level_terms ) ? $level_terms[0] : ''; + +$thumbnail_html = ''; +if ( has_post_thumbnail( $kit_post_id ) ) { + $thumbnail_html = get_the_post_thumbnail( + $kit_post_id, + 'medium', + array( + 'style' => 'width:100%;height:100%;object-fit:cover;', + 'alt' => esc_attr( $kit_title ), + ) + ); +} +?> +

+
+ + + +
+ +
+ +
+

+ +

+ + +

+ +

+ + + +
+ + + + + + + + +
+ + +
+ + + + + + + + +
+
+
diff --git a/wp-content/plugins/wporg-learn/webpack.config.js b/wp-content/plugins/wporg-learn/webpack.config.js index a9fb05412..01e82e509 100644 --- a/wp-content/plugins/wporg-learn/webpack.config.js +++ b/wp-content/plugins/wporg-learn/webpack.config.js @@ -20,6 +20,10 @@ config.entry = { 'lesson-plan-details': './js/lesson-plan-details/src/index.js', 'course-data': './js/course-data/src/index.js', 'language-meta': './js/language-meta/index.js', + 'activity-kit-card': './js/activity-kit-card/src/index.js', + 'activity-kit-sidebar': './js/activity-kit-sidebar/src/index.js', + 'query-activity-kits': './js/query-activity-kits/src/index.js', + 'activity-kit-stats': './js/activity-kit-stats/index.js', }; module.exports = config; diff --git a/wp-content/plugins/wporg-learn/wporg-learn.php b/wp-content/plugins/wporg-learn/wporg-learn.php index fcf31eac5..1c8da8389 100644 --- a/wp-content/plugins/wporg-learn/wporg-learn.php +++ b/wp-content/plugins/wporg-learn/wporg-learn.php @@ -89,6 +89,10 @@ function load_files() { require_once get_includes_path() . 'taxonomy.php'; require_once get_includes_path() . 'export.php'; require_once get_includes_path() . 'utils.php'; + require_once get_includes_path() . 'activity-kit-rest.php'; + require_once get_includes_path() . 'activity-kit-settings.php'; + require_once get_includes_path() . 'activity-kit-stats-page.php'; + require_once get_includes_path() . 'activity-kit-import.php'; } /** diff --git a/wp-content/themes/pub/wporg-learn-2024/inc/block-config.php b/wp-content/themes/pub/wporg-learn-2024/inc/block-config.php index e93b38f65..dd973427b 100644 --- a/wp-content/themes/pub/wporg-learn-2024/inc/block-config.php +++ b/wp-content/themes/pub/wporg-learn-2024/inc/block-config.php @@ -5,11 +5,14 @@ namespace WordPressdotorg\Theme\Learn_2024\Block_Config; -use function WPOrg_Learn\Post_Meta\{get_available_post_type_locales}; use Sensei_Learner; +use function WPOrg_Learn\Post_Meta\{get_available_post_type_locales}; add_filter( 'wporg_query_filter_options_content_type', __NAMESPACE__ . '\get_content_type_options' ); +add_filter( 'wporg_query_filter_options_activity_kit_topic', __NAMESPACE__ . '\get_activity_kit_topic_options' ); +add_filter( 'wporg_query_filter_options_activity_kit_level', __NAMESPACE__ . '\get_activity_kit_level_options' ); + add_filter( 'wporg_query_filter_options_language', __NAMESPACE__ . '\get_language_options' ); add_filter( 'wporg_query_filter_options_archive_language', __NAMESPACE__ . '\get_language_options_by_post_type' ); @@ -49,21 +52,22 @@ function get_content_type_options( $options ) { global $wp_query; $options = array( - 'any' => __( 'Any', 'wporg-learn' ), - 'course' => __( 'Course', 'wporg-learn' ), - 'lesson' => __( 'Lesson', 'wporg-learn' ), + 'any' => __( 'Any', 'wporg-learn' ), + 'course' => __( 'Course', 'wporg-learn' ), + 'lesson' => __( 'Lesson', 'wporg-learn' ), + 'activity_kit' => __( 'Activity Kit', 'wporg-learn' ), ); - $post_type = $wp_query->get( 'post_type' ); + $post_type = $wp_query->get( 'post_type' ); $selected_slug = is_string( $post_type ) ? $post_type : 'any'; - $label = $options[ $selected_slug ] ?? $options['any']; + $label = $options[ $selected_slug ] ?? $options['any']; return array( - 'label' => sprintf( __( 'Type: %s', 'wporg-learn' ), $label ), - 'title' => __( 'Content type', 'wporg-learn' ), - 'key' => 'post_type', - 'action' => get_filtered_url(), - 'options' => $options, + 'label' => sprintf( __( 'Type: %s', 'wporg-learn' ), $label ), + 'title' => __( 'Content type', 'wporg-learn' ), + 'key' => 'post_type', + 'action' => get_filtered_url(), + 'options' => $options, 'selected' => array( $selected_slug ), ); } @@ -109,18 +113,18 @@ function ( $a, $b ) { $selected_level = wp_list_filter( $levels, array( 'slug' => $selected_slug ) ); if ( ! empty( $selected_level ) ) { $selected_level = array_shift( $selected_level ); - $label = $selected_level->name; + $label = $selected_level->name; } } else { $selected_slug = 'all'; } return array( - 'label' => sprintf( __( 'Level: %s', 'wporg-learn' ), $label ), - 'title' => __( 'Level', 'wporg-learn' ), - 'key' => 'wporg_lesson_level', - 'action' => get_filtered_url(), - 'options' => array_combine( wp_list_pluck( $levels, 'slug' ), wp_list_pluck( $levels, 'name' ) ), + 'label' => sprintf( __( 'Level: %s', 'wporg-learn' ), $label ), + 'title' => __( 'Level', 'wporg-learn' ), + 'key' => 'wporg_lesson_level', + 'action' => get_filtered_url(), + 'options' => array_combine( wp_list_pluck( $levels, 'slug' ), wp_list_pluck( $levels, 'name' ) ), 'selected' => array( $selected_slug ), ); } @@ -142,18 +146,18 @@ function get_level_options_by_post_type( $options ) { // Get top 10 levels ordered by count, not empty, filtered by post_type. $object_ids = get_posts( array( - 'post_type' => $wp_query->query_vars['post_type'], - 'fields' => 'ids', + 'post_type' => $wp_query->query_vars['post_type'], + 'fields' => 'ids', 'posts_per_page' => -1, - 'post_status' => 'publish', + 'post_status' => 'publish', ) ); - $levels = get_terms( + $levels = get_terms( array( - 'taxonomy' => 'level', - 'orderby' => 'count', - 'order' => 'DESC', - 'number' => 10, + 'taxonomy' => 'level', + 'orderby' => 'count', + 'order' => 'DESC', + 'number' => 10, 'hide_empty' => true, 'object_ids' => $object_ids, ) @@ -173,10 +177,10 @@ function get_level_options( $options ) { // Get top 10 levels ordered by count, not empty. $levels = get_terms( array( - 'taxonomy' => 'level', - 'orderby' => 'count', - 'order' => 'DESC', - 'number' => 10, + 'taxonomy' => 'level', + 'orderby' => 'count', + 'order' => 'DESC', + 'number' => 10, 'hide_empty' => true, ) ); @@ -200,25 +204,25 @@ function get_learning_pathway_level_options( $options ) { // Get top 10 levels ordered by count, not empty, filtered by post_type. $object_ids = get_posts( array( - 'fields' => 'ids', + 'fields' => 'ids', 'posts_per_page' => -1, - 'post_status' => 'publish', - 'post_type' => 'course', - 'tax_query' => array( + 'post_status' => 'publish', + 'post_type' => 'course', + 'tax_query' => array( array( 'taxonomy' => 'learning-pathway', - 'field' => 'slug', - 'terms' => $wp_query->query_vars['wporg_learning_pathway'], + 'field' => 'slug', + 'terms' => $wp_query->query_vars['wporg_learning_pathway'], ), ), ) ); - $levels = get_terms( + $levels = get_terms( array( - 'taxonomy' => 'level', - 'orderby' => 'count', - 'order' => 'DESC', - 'number' => 10, + 'taxonomy' => 'level', + 'orderby' => 'count', + 'order' => 'DESC', + 'number' => 10, 'hide_empty' => true, 'object_ids' => $object_ids, ) @@ -250,19 +254,19 @@ function ( $a, $b ) { ); $selected = isset( $wp_query->query['wporg_workshop_topic'] ) ? (array) $wp_query->query['wporg_workshop_topic'] : array(); - $count = count( $selected ); - $label = sprintf( + $count = count( $selected ); + $label = sprintf( /* translators: The dropdown label for filtering, %s is the selected term count. */ _n( 'Topic %s', 'Topic %s', $count, 'wporg-learn' ), $count ); return array( - 'label' => $label, - 'title' => __( 'Filter', 'wporg-learn' ), - 'key' => 'wporg_workshop_topic', - 'action' => get_filtered_url(), - 'options' => array_combine( wp_list_pluck( $topics, 'slug' ), wp_list_pluck( $topics, 'name' ) ), + 'label' => $label, + 'title' => __( 'Filter', 'wporg-learn' ), + 'key' => 'wporg_workshop_topic', + 'action' => get_filtered_url(), + 'options' => array_combine( wp_list_pluck( $topics, 'slug' ), wp_list_pluck( $topics, 'name' ) ), 'selected' => $selected, ); } @@ -282,18 +286,20 @@ function get_topic_options_by_post_type( $options ) { } // Get top 20 topics ordered by count, not empty, filtered by post_type. - $object_ids = get_posts( array( - 'fields' => 'ids', - 'posts_per_page' => -1, - 'post_status' => 'publish', - 'post_type' => $wp_query->query_vars['post_type'], - ) ); - $topics = get_terms( + $object_ids = get_posts( array( - 'taxonomy' => 'topic', - 'orderby' => 'count', - 'order' => 'DESC', - 'number' => 20, + 'fields' => 'ids', + 'posts_per_page' => -1, + 'post_status' => 'publish', + 'post_type' => $wp_query->query_vars['post_type'], + ) + ); + $topics = get_terms( + array( + 'taxonomy' => 'topic', + 'orderby' => 'count', + 'order' => 'DESC', + 'number' => 20, 'hide_empty' => true, 'object_ids' => $object_ids, ) @@ -313,10 +319,10 @@ function get_topic_options( $options ) { // Get top 20 topics ordered by count, not empty. $topics = get_terms( array( - 'taxonomy' => 'topic', - 'orderby' => 'count', - 'order' => 'DESC', - 'number' => 20, + 'taxonomy' => 'topic', + 'orderby' => 'count', + 'order' => 'DESC', + 'number' => 20, 'hide_empty' => true, ) ); @@ -340,25 +346,25 @@ function get_learning_pathway_topic_options( $options ) { // Get top 20 topics ordered by count, not empty, filtered by post_type. $object_ids = get_posts( array( - 'fields' => 'ids', + 'fields' => 'ids', 'posts_per_page' => -1, - 'post_status' => 'publish', - 'post_type' => 'course', - 'tax_query' => array( + 'post_status' => 'publish', + 'post_type' => 'course', + 'tax_query' => array( array( 'taxonomy' => 'learning-pathway', - 'field' => 'slug', - 'terms' => $wp_query->query_vars['wporg_learning_pathway'], + 'field' => 'slug', + 'terms' => $wp_query->query_vars['wporg_learning_pathway'], ), ), ) ); - $topics = get_terms( + $topics = get_terms( array( - 'taxonomy' => 'topic', - 'orderby' => 'count', - 'order' => 'DESC', - 'number' => 20, + 'taxonomy' => 'topic', + 'orderby' => 'count', + 'order' => 'DESC', + 'number' => 20, 'hide_empty' => true, 'object_ids' => $object_ids, ) @@ -431,19 +437,19 @@ function create_language_options( $languages ) { } $selected = get_meta_query_values_by_key( $wp_query, 'language' ); - $count = count( $selected ); - $label = sprintf( + $count = count( $selected ); + $label = sprintf( /* translators: The dropdown label for filtering, %s is the selected term count. */ _n( 'Language %s', 'Language %s', $count, 'wporg-learn' ), $count ); return array( - 'label' => $label, - 'title' => __( 'Filter', 'wporg-learn' ), - 'key' => 'language', - 'action' => get_filtered_url(), - 'options' => $languages, + 'label' => $label, + 'title' => __( 'Filter', 'wporg-learn' ), + 'key' => 'language', + 'action' => get_filtered_url(), + 'options' => $languages, 'selected' => $selected, ); } @@ -520,20 +526,20 @@ function get_student_course_options( $options ) { $key = get_student_course_filter_query_var_name(); $options = array( - 'all' => __( 'All', 'wporg-learn' ), - 'active' => __( 'Active', 'wporg-learn' ), + 'all' => __( 'All', 'wporg-learn' ), + 'active' => __( 'Active', 'wporg-learn' ), 'completed' => __( 'Completed', 'wporg-learn' ), ); $selected_slug = $wp_query->get( $key ) ? $wp_query->get( $key ) : 'all'; - $label = $options[ $selected_slug ] ?? $options['all']; + $label = $options[ $selected_slug ] ?? $options['all']; return array( - 'label' => sprintf( __( 'Status: %s', 'wporg-learn' ), $label ), - 'title' => __( 'Completion status', 'wporg-learn' ), - 'key' => $key, - 'action' => get_filtered_url(), - 'options' => $options, + 'label' => sprintf( __( 'Status: %s', 'wporg-learn' ), $label ), + 'title' => __( 'Completion status', 'wporg-learn' ), + 'key' => $key, + 'action' => get_filtered_url(), + 'options' => $options, 'selected' => array( $selected_slug ), ); } @@ -550,7 +556,7 @@ function get_student_course_options( $options ) { function inject_other_filters( $key ) { global $wp_query; - $single_query_vars = array( 'wporg_lesson_level', 'wporg_learning_pathway', 'post_type' ); + $single_query_vars = array( 'wporg_lesson_level', 'wporg_learning_pathway', 'post_type', 'level' ); foreach ( $single_query_vars as $single_query_var ) { if ( ! isset( $wp_query->query[ $single_query_var ] ) ) { continue; @@ -565,7 +571,7 @@ function inject_other_filters( $key ) { printf( '', esc_attr( $single_query_var ), esc_attr( $value ) ); } - $multi_query_vars = array( 'wporg_workshop_topic' ); + $multi_query_vars = array( 'wporg_workshop_topic', 'topic' ); foreach ( $multi_query_vars as $multi_query_var ) { if ( ! isset( $wp_query->query[ $multi_query_var ] ) ) { continue; @@ -639,3 +645,113 @@ function modify_course_query( $query ) { return $query; } + +/** + * Get topic filter options for the Activity Kit archive. + * + * @return array + */ +function get_activity_kit_topic_options() { + $terms = get_terms( + array( + 'taxonomy' => 'topic', + 'object_ids' => get_posts( + array( + 'post_type' => 'activity_kit', + 'post_status' => 'publish', + 'posts_per_page' => -1, + 'fields' => 'ids', + ) + ), + 'hide_empty' => true, + 'number' => 20, + 'orderby' => 'count', + 'order' => 'DESC', + ) + ); + + if ( is_wp_error( $terms ) || count( $terms ) < 2 ) { + return array(); + } + + usort( + $terms, + function ( $a, $b ) { + return strcmp( strtolower( $a->name ), strtolower( $b->name ) ); + } + ); + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended + $selected = isset( $_GET['topic'] ) ? array_map( 'sanitize_text_field', (array) wp_unslash( $_GET['topic'] ) ) : array(); + $count = count( $selected ); + $label = $count + ? sprintf( _n( 'Topic %s', 'Topic %s', $count, 'wporg-learn' ), $count ) + : __( 'Topic', 'wporg-learn' ); + + return array( + 'label' => $label, + 'title' => __( 'Topic', 'wporg-learn' ), + 'key' => 'topic', + 'action' => get_filtered_url(), + 'options' => array_combine( + wp_list_pluck( $terms, 'slug' ), + wp_list_pluck( $terms, 'name' ) + ), + 'selected' => $selected, + ); +} + +/** + * Get level filter options for the Activity Kit archive. + * + * @return array + */ +function get_activity_kit_level_options() { + $terms = get_terms( + array( + 'taxonomy' => 'level', + 'object_ids' => get_posts( + array( + 'post_type' => 'activity_kit', + 'post_status' => 'publish', + 'posts_per_page' => -1, + 'fields' => 'ids', + ) + ), + 'hide_empty' => true, + 'orderby' => 'name', + 'order' => 'ASC', + ) + ); + + if ( is_wp_error( $terms ) || empty( $terms ) ) { + return array(); + } + + $all_levels = array_merge( + array( + (object) array( + 'slug' => 'all', + 'name' => __( 'All', 'wporg-learn' ), + ), + ), + $terms + ); + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended + $selected_slug = isset( $_GET['level'] ) ? sanitize_text_field( wp_unslash( $_GET['level'] ) ) : 'all'; + $matching = wp_list_filter( $all_levels, array( 'slug' => $selected_slug ) ); + $selected_label = ! empty( $matching ) ? reset( $matching )->name : __( 'All', 'wporg-learn' ); + + return array( + 'label' => sprintf( __( 'Level: %s', 'wporg-learn' ), $selected_label ), + 'title' => __( 'Level', 'wporg-learn' ), + 'key' => 'level', + 'action' => get_filtered_url(), + 'options' => array_combine( + wp_list_pluck( $all_levels, 'slug' ), + wp_list_pluck( $all_levels, 'name' ) + ), + 'selected' => array( $selected_slug ), + ); +} diff --git a/wp-content/themes/pub/wporg-learn-2024/inc/block-hooks.php b/wp-content/themes/pub/wporg-learn-2024/inc/block-hooks.php index 5f51defde..e76600cb6 100644 --- a/wp-content/themes/pub/wporg-learn-2024/inc/block-hooks.php +++ b/wp-content/themes/pub/wporg-learn-2024/inc/block-hooks.php @@ -14,6 +14,7 @@ add_filter( 'render_block_sensei-lms/course-outline', __NAMESPACE__ . '\update_course_outline_block_add_aria' ); add_filter( 'render_block_sensei-lms/course-theme-notices', __NAMESPACE__ . '\update_lesson_quiz_notice_text' ); add_filter( 'render_block_sensei-lms/quiz-actions', __NAMESPACE__ . '\update_quiz_actions' ); +add_filter( 'render_block_core/template-part', __NAMESPACE__ . '\replace_card_with_activity_kit_card', 10, 2 ); /** * Update header template based on current query. @@ -53,10 +54,10 @@ function modify_course_outline_lesson_block_attrs( $parsed_block ) { } $lesson_id = $parsed_block['attrs']['id']; - $classes = array(); + $classes = array(); $classes[] = $parsed_block['attrs']['className'] ?? ''; - $status = 'not-started'; + $status = 'not-started'; $lesson_status = Sensei_Utils::user_lesson_status( $lesson_id ); if ( $lesson_status ) { $status = $lesson_status->comment_approved; @@ -95,7 +96,7 @@ function update_course_outline_block_add_aria( $block_content ) { while ( $html->next_tag( array( 'class_name' => 'wp-block-sensei-lms-course-outline-lesson' ) ) ) { if ( $html->has_class( 'is-complete' ) || $html->has_class( 'is-passed' ) ) { $label = __( 'Completed', 'wporg-learn' ); - } else if ( $html->has_class( 'is-in-progress' ) ) { + } elseif ( $html->has_class( 'is-in-progress' ) ) { $label = __( 'In progress', 'wporg-learn' ); } else { $label = __( 'Not started', 'wporg-learn' ); @@ -149,17 +150,19 @@ function update_lesson_quiz_notice_text( $block_content ) { */ function update_quiz_actions( $block_content ) { if ( is_singular( 'quiz' ) && is_quiz_ungraded() ) { - $lesson_id = Sensei()->quiz->get_lesson_id(); + $lesson_id = Sensei()->quiz->get_lesson_id(); $lesson_link = get_permalink( $lesson_id ); // Add a new button to go back to the lesson. - $new_button_block = do_blocks( ' + $new_button_block = do_blocks( + ' - '); + ' + ); $block_content = str_replace( '
', @@ -171,6 +174,114 @@ function update_quiz_actions( $block_content ) { return $block_content; } +/** + * Replace the generic card template part with the activity kit card when the + * current post in the loop is an activity_kit. + * + * This ensures that search results pages (which use the generic `card` template + * part) render the same card component as the activity library archive grid. + * + * @param string $block_content The rendered block HTML. + * @param array $parsed_block The parsed block data. + * @return string The (possibly replaced) block HTML. + */ +function replace_card_with_activity_kit_card( $block_content, $parsed_block ) { + if ( ( $parsed_block['attrs']['slug'] ?? '' ) !== 'card' ) { + return $block_content; + } + + global $post; + if ( ! $post || 'activity_kit' !== $post->post_type ) { + return $block_content; + } + + $kit_post_id = $post->ID; + $kit_title = get_the_title( $kit_post_id ); + $permalink = get_permalink( $kit_post_id ); + $excerpt = get_the_excerpt( $post ); + $duration = get_post_meta( $kit_post_id, '_activity_duration', true ); + $zip_id = (int) get_post_meta( $kit_post_id, '_activity_zip_id', true ); + $zip_url = $zip_id ? wp_get_attachment_url( $zip_id ) : ''; + + $level_terms = wp_get_post_terms( $kit_post_id, 'level', array( 'fields' => 'names' ) ); + $level_name = ! is_wp_error( $level_terms ) && ! empty( $level_terms ) ? $level_terms[0] : ''; + + $thumbnail_html = ''; + if ( has_post_thumbnail( $kit_post_id ) ) { + $thumbnail_html = get_the_post_thumbnail( + $kit_post_id, + 'medium', + array( + 'style' => 'width:100%;height:100%;object-fit:cover;', + 'alt' => esc_attr( $kit_title ), + ) + ); + } + + ob_start(); + ?> +
+
+ + + +
+ +
+ +
+

+ +

+ + +

+ +

+ + + +
+ + + + + + + + +
+ + +
+ + + + + + + + +
+
+
+ quiz_progress_repository->get( $quiz_id, $user_id ); if ( $quiz_progress && 'ungraded' === $quiz_progress->get_status() ) { diff --git a/wp-content/themes/pub/wporg-learn-2024/inc/query.php b/wp-content/themes/pub/wporg-learn-2024/inc/query.php index 6e8fb2aa6..4a9ced767 100644 --- a/wp-content/themes/pub/wporg-learn-2024/inc/query.php +++ b/wp-content/themes/pub/wporg-learn-2024/inc/query.php @@ -8,6 +8,7 @@ add_action( 'pre_get_posts', __NAMESPACE__ . '\add_language_to_archive_queries' ); add_action( 'pre_get_posts', __NAMESPACE__ . '\filter_hidden_lessons_from_archive_and_search' ); add_action( 'pre_get_posts', __NAMESPACE__ . '\filter_search_queries_by_post_type' ); +add_action( 'pre_get_posts', __NAMESPACE__ . '\filter_activity_kit_archive' ); add_filter( 'request', __NAMESPACE__ . '\handle_all_level_query' ); add_filter( 'jetpack_search_es_wp_query_args', __NAMESPACE__ . '\filter_jetpack_wp_search_query', 10, 2 ); add_filter( 'jetpack_search_es_query_args', __NAMESPACE__ . '\filter_jetpack_es_search_query', 10, 2 ); @@ -65,7 +66,7 @@ function filter_hidden_lessons_from_archive_and_search( $query ) { // If there's an existing tax query, add the new condition if ( ! empty( $tax_query ) ) { $tax_query['relation'] = 'AND'; - $tax_query[] = $exclude_lessons_by_taxonomy; + $tax_query[] = $exclude_lessons_by_taxonomy; } else { $tax_query = array( $exclude_lessons_by_taxonomy ); } @@ -151,10 +152,74 @@ function filter_jetpack_es_search_query( $es_query_args, $query ) { } $es_query_args['query'] = array( 'bool' => array( - 'must' => array( $es_query_args['query'] ), + 'must' => array( $es_query_args['query'] ), 'must_not' => $must_not, ), ); return $es_query_args; } + +/** + * Filter the activity kit archive by taxonomy terms from URL query params. + * + * @param \WP_Query $query + */ +function filter_activity_kit_archive( $query ) { + if ( is_admin() || ! $query->is_main_query() ) { + return; + } + + if ( ! is_post_type_archive( 'activity_kit' ) && ! ( $query->is_search() && isset( $_GET['post_type'] ) && 'activity_kit' === $_GET['post_type'] ) ) { + return; + } + + $query->set( 'posts_per_page', 12 ); + + $tax_query = array(); + + if ( ! empty( $_GET['topic'] ) ) { + $tax_query[] = array( + 'taxonomy' => 'topic', + 'field' => 'slug', + 'terms' => array_map( 'sanitize_text_field', (array) wp_unslash( $_GET['topic'] ) ), + ); + } + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended + $level_slug = isset( $_GET['level'] ) ? sanitize_text_field( wp_unslash( $_GET['level'] ) ) : ''; + if ( $level_slug && 'all' !== $level_slug ) { + $tax_query[] = array( + 'taxonomy' => 'level', + 'field' => 'slug', + 'terms' => $level_slug, + ); + } + + if ( ! empty( $tax_query ) ) { + $query->set( 'tax_query', $tax_query ); + } + + if ( ! empty( $_GET['language'] ) ) { + // Merge with any existing meta_query (e.g. set by add_language_to_archive_queries) + // rather than replacing it, to avoid discarding other meta conditions. + $existing_meta_query = $query->get( 'meta_query' ); + $lang_clause = array( + 'key' => 'language', + 'value' => sanitize_text_field( wp_unslash( $_GET['language'] ) ), + 'compare' => '=', + ); + + if ( ! empty( $existing_meta_query ) && is_array( $existing_meta_query ) ) { + $existing_meta_query[] = $lang_clause; + } else { + $existing_meta_query = array( $lang_clause ); + } + + $query->set( 'meta_query', $existing_meta_query ); + } + + if ( $query->is_search() && isset( $_GET['post_type'] ) && 'activity_kit' === $_GET['post_type'] ) { + $query->set( 'post_type', 'activity_kit' ); + } +} diff --git a/wp-content/themes/pub/wporg-learn-2024/patterns/archive-activity-kits-content.php b/wp-content/themes/pub/wporg-learn-2024/patterns/archive-activity-kits-content.php new file mode 100644 index 000000000..3a63b95ba --- /dev/null +++ b/wp-content/themes/pub/wporg-learn-2024/patterns/archive-activity-kits-content.php @@ -0,0 +1,94 @@ + + + +
+ + +

+ + + +

+ + +
+ + + +
+ + + + +
+ + + +
+ + +
+ + + +
+ + + + + + + + + + +

+ + + + + + + + + + + + + + +
+ + + +
+ + +

+ + + +

+ + + +
+ +
+ + + +
+ +
+ + +
+ diff --git a/wp-content/themes/pub/wporg-learn-2024/patterns/sensei-lesson-actions.php b/wp-content/themes/pub/wporg-learn-2024/patterns/sensei-lesson-actions.php index 3d78e5df6..10e415040 100644 --- a/wp-content/themes/pub/wporg-learn-2024/patterns/sensei-lesson-actions.php +++ b/wp-content/themes/pub/wporg-learn-2024/patterns/sensei-lesson-actions.php @@ -7,6 +7,10 @@ * Original source: https://github.com/Automattic/sensei/blob/af62fb1115daf2063bc56331a7d8b1b3ea805866/themes/sensei-course-theme/templates/default/lesson.php */ +if ( ! function_exists( 'sensei_get_prev_next_lessons' ) ) { + return; +} + $prev_next_lessons = sensei_get_prev_next_lessons( get_the_ID() ); $prev_url = $prev_next_lessons['previous']['url'] ?? null; $next_url = $prev_next_lessons['next']['url'] ?? null; diff --git a/wp-content/themes/pub/wporg-learn-2024/patterns/single-activity-kit-content.php b/wp-content/themes/pub/wporg-learn-2024/patterns/single-activity-kit-content.php new file mode 100644 index 000000000..3ab1a2eb4 --- /dev/null +++ b/wp-content/themes/pub/wporg-learn-2024/patterns/single-activity-kit-content.php @@ -0,0 +1,358 @@ + 'names' ) ); +$topic_terms = wp_get_post_terms( $kit_id, 'topic', array( 'fields' => 'names' ) ); + +$archive_url = get_post_type_archive_link( 'activity_kit' ); + +// ZIP file size. +$zip_path = $zip_id ? get_attached_file( $zip_id ) : ''; +$zip_size = ( $zip_path && file_exists( $zip_path ) ) ? size_format( filesize( $zip_path ) ) : ''; + +// Build dynamic "what's inside" description for the download box. +if ( $guide_url && $slides_url ) { + $download_desc = __( 'This download includes a facilitator guide and presentation slide deck.', 'wporg-learn' ); +} elseif ( $guide_url ) { + $download_desc = __( 'This download includes a facilitator guide.', 'wporg-learn' ); +} elseif ( $slides_url ) { + $download_desc = __( 'This download includes a presentation slide deck.', 'wporg-learn' ); +} else { + $download_desc = __( 'All files included as a single .zip download from the WordPress Media Library.', 'wporg-learn' ); +} + +// SVG icons (matching @wordpress/icons viewBox). +$icon_file = ''; +$icon_desktop = ''; +$icon_download = ''; +$icon_back = ''; +$icon_clock = ''; +$icon_calendar = ''; +$icon_file_lg = ''; +$icon_desk_lg = ''; +?> + + +
+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+ + +
+
+
+ + + + + + +
+ + + + + +
+ + +
+ +
+ + + +
> + +
+ +
+
+ + + +

+ + +'; + ?> + + + + +
+ +
+ + + +
+

+
+ +
+ + + +
+

+

+
+
+ + +
+ + + +
+

+

+
+
+ +
+
+ + + + +
+

+

+ + + + +

+ + · + + · + +

+
+ + + + + diff --git a/wp-content/themes/pub/wporg-learn-2024/src/style/_activity-kit.scss b/wp-content/themes/pub/wporg-learn-2024/src/style/_activity-kit.scss new file mode 100644 index 000000000..81ca34875 --- /dev/null +++ b/wp-content/themes/pub/wporg-learn-2024/src/style/_activity-kit.scss @@ -0,0 +1,497 @@ +// ------------------------------------------------------------------------- +// Activity Kit Card (archive grid) +// ------------------------------------------------------------------------- +.wporg-activity-kit-card { + display: flex; + flex-direction: column; + border: 1px solid var(--wp--custom--color--border); + border-radius: 2px; + overflow: hidden; + background: var(--wp--preset--color--white); + height: 100%; + + &__image { + height: 152px; + flex-shrink: 0; + overflow: hidden; + background: var(--wp--preset--color--light-grey-2); + + a { + display: block; + height: 100%; + } + + img { + width: 100%; + height: 100%; + object-fit: cover; + } + + &-placeholder { + width: 100%; + height: 100%; + background: var(--wp--preset--color--light-grey-2); + } + } + + &__body { + display: flex; + flex-direction: column; + flex: 1; + padding: 16px; + gap: 12px; + } + + &__title { + font-size: var(--wp--preset--font-size--normal); + font-weight: 600; + margin: 0; + + a { + color: var(--wp--custom--link--color--text); + text-decoration: none; + + &:hover { + text-decoration: underline; + } + } + } + + &__excerpt { + font-size: var(--wp--preset--font-size--small); + color: var(--wp--preset--color--charcoal-2); + margin: 0; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + } + + &__meta { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: var(--wp--preset--spacing--10); + font-size: var(--wp--preset--font-size--small); + color: var(--wp--preset--color--charcoal-3); + margin-top: auto; + + span + span::before { + content: "·"; + margin-right: var(--wp--preset--spacing--10); + } + } + + &__duration { + display: flex; + align-items: center; + gap: 4px; + + &::before { + content: ""; + display: inline-block; + width: 14px; + height: 14px; + background: url(../../assets/icon-clock.svg) no-repeat center / contain; + flex-shrink: 0; + } + } + + &__actions { + display: flex; + gap: 8px; + flex-wrap: wrap; + margin-top: auto; + } + + &__view-btn, + &__download-btn { + flex: 1; + text-align: center; + padding: 7px 12px; + font-size: var(--wp--preset--font-size--small); + font-weight: 500; + border-radius: 2px; + text-decoration: none; + line-height: 1.4; + display: inline-block; + } + + &__view-btn { + border: 1px solid var(--wp--preset--color--blueberry-1); + color: var(--wp--preset--color--blueberry-1); + + &:hover { + background: color-mix(in sRGB, var(--wp--preset--color--blueberry-1) 8%, transparent); + text-decoration: none; + } + } + + &__download-btn { + background: var(--wp--preset--color--blueberry-1); + color: var(--wp--preset--color--white) !important; + + &:hover { + background: var(--wp--preset--color--deep-blueberry); + text-decoration: none; + } + } +} + +// ------------------------------------------------------------------------- +// Activity Kit Single Page +// ------------------------------------------------------------------------- +.wporg-activity-kit-breadcrumb { + font-size: var(--wp--preset--font-size--small); + color: var(--wp--preset--color--charcoal-3); + margin-bottom: var(--wp--preset--spacing--30); + + a { + color: var(--wp--preset--color--blueberry-1); + text-decoration: none; + + &:hover { + text-decoration: underline; + } + } +} + +.wporg-activity-kit-action-row { + display: flex; + align-items: center; + justify-content: space-between; + flex-wrap: wrap; + gap: var(--wp--preset--spacing--20); + margin-bottom: var(--wp--preset--spacing--40); + + &__back { + font-size: var(--wp--preset--font-size--small); + color: var(--wp--preset--color--blueberry-1); + text-decoration: none; + display: inline-flex; + align-items: center; + gap: 5px; + + &:hover { + text-decoration: underline; + } + } + + &__download { + display: inline-flex; + align-items: center; + gap: 7px; + background: var(--wp--preset--color--blueberry-1); + color: var(--wp--preset--color--white) !important; + padding: 9px 20px; + border-radius: 2px; + font-size: var(--wp--preset--font-size--small); + font-weight: 500; + text-decoration: none; + + &:hover { + background: var(--wp--preset--color--deep-blueberry); + text-decoration: none; + } + } +} + +.wporg-activity-kit-header { + margin-bottom: var(--wp--preset--spacing--30); +} + +.wporg-activity-kit-title { + margin-bottom: var(--wp--preset--spacing--20); +} + +.wporg-activity-kit-meta { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: var(--wp--preset--spacing--10); + font-size: var(--wp--preset--font-size--small); + color: var(--wp--preset--color--charcoal-2); + + &__duration, + &__updated { + display: flex; + align-items: center; + gap: 5px; + + svg { + flex-shrink: 0; + color: var(--wp--preset--color--charcoal-3); + } + } + + span + span::before { + content: "·"; + margin-right: var(--wp--preset--spacing--10); + } +} + +// Section label (e.g. "Kit Preview") +.wporg-activity-kit-section-label { + font-size: 11px; + color: var(--wp--preset--color--charcoal-3); + text-transform: uppercase; + letter-spacing: 0.06em; + font-weight: 500; + margin-bottom: var(--wp--preset--spacing--20); +} + +.wporg-activity-kit-pdf-section { + margin-bottom: var(--wp--preset--spacing--40); +} + +// PDF tab toggle +.wporg-activity-kit-pdf-tabs { + &__header { + display: flex; + align-items: flex-end; + justify-content: space-between; + gap: var(--wp--preset--spacing--20); + } + + &__dl-btn { + display: none; // shown via JS only for non-Chromium browsers (Firefox, Safari) + align-items: center; + gap: 5px; + font-size: var(--wp--preset--font-size--small); + color: var(--wp--preset--color--blueberry-1); + text-decoration: none; + padding-bottom: 9px; // align baseline with tab bottom border + white-space: nowrap; + flex-shrink: 0; + + svg { + flex-shrink: 0; + } + + &:hover { + text-decoration: underline; + } + } + + &__nav { + display: flex; + gap: 0; + border: 1px solid var(--wp--custom--color--border); + border-bottom: none; + border-radius: 2px 2px 0 0; + overflow: hidden; + width: fit-content; + } + + &__tab { + background: var(--wp--preset--color--light-grey-2); + border: none; + border-right: 1px solid var(--wp--custom--color--border); + padding: 9px 20px; + font-size: var(--wp--preset--font-size--small); + font-weight: 400; + color: var(--wp--preset--color--charcoal-2); + cursor: pointer; + transition: background 0.1s, color 0.1s; + display: inline-flex; + align-items: center; + gap: 7px; + + &:last-child { + border-right: none; + } + + &:hover { + background: #ebebeb; + color: var(--wp--preset--color--charcoal-1); + } + + &.is-active { + background: var(--wp--preset--color--white); + color: var(--wp--preset--color--charcoal-1); + font-weight: 500; + } + } + + &__panel { + display: none; + border: 1px solid var(--wp--custom--color--border); + border-radius: 0 2px 2px 2px; + + &.is-active { + display: block; + } + + iframe { + width: 100%; + height: 520px; + border: none; + display: block; + } + } +} + +.wporg-activity-kit-no-pdf { + color: var(--wp--preset--color--charcoal-3); + font-style: italic; +} + +// Feedback strip — appears below PDF preview tabs, above post content. +.wporg-activity-kit-feedback-strip { + display: flex; + align-items: center; + justify-content: space-between; + flex-wrap: wrap; + gap: 12px; + padding: 14px 20px; + margin-bottom: 44px; + background: #f6f7f7; + border: 1px solid #d9d9d9; + border-radius: 2px; + + &__prompt { + font-size: var(--wp--preset--font-size--small); + color: var(--wp--preset--color--charcoal-2); + margin: 0; + } + + &__btn { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 7px 18px; + font-size: 13px; + font-weight: 500; + color: var(--wp--preset--color--blueberry-1); + background: var(--wp--preset--color--white); + border: 1px solid var(--wp--preset--color--blueberry-1); + border-radius: 2px; + text-decoration: none; + white-space: nowrap; + transition: background 0.1s ease, color 0.1s ease; + + svg { + flex-shrink: 0; + } + + &:hover { + background: var(--wp--preset--color--blueberry-1); + color: var(--wp--preset--color--white); + text-decoration: none; + } + + &:focus-visible { + background: var(--wp--preset--color--blueberry-1); + color: var(--wp--preset--color--white); + outline: 2px solid var(--wp--preset--color--blueberry-1); + outline-offset: 2px; + text-decoration: none; + } + } +} + +// "What's included" grid +.wporg-activity-kit-included { + margin-bottom: var(--wp--preset--spacing--40); + + h2 { + font-size: var(--wp--preset--font-size--large); + font-family: var(--wp--preset--font-family--eb-garamond); + margin-bottom: var(--wp--preset--spacing--30); + } + + &__grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); + gap: var(--wp--preset--spacing--30); + } + + &__card { + border: 1px solid var(--wp--custom--color--border); + border-radius: 2px; + padding: var(--wp--preset--spacing--30); + display: flex; + flex-direction: row; + gap: var(--wp--preset--spacing--20); + align-items: flex-start; + background: var(--wp--preset--color--white); + } + + &__card-body { + flex: 1; + min-width: 0; + + h3 { + font-size: var(--wp--preset--font-size--normal); + font-weight: 600; + margin: 0 0 6px; + line-height: 1.4; + } + + p { + font-size: var(--wp--preset--font-size--small); + color: var(--wp--preset--color--charcoal-2); + margin: 0; + line-height: 1.5; + } + } + + &__icon { + flex-shrink: 0; + margin-top: 3px; + color: var(--wp--preset--color--blueberry-1); + display: flex; + } + + // Higher-specificity override for parent theme's h3 margin-top rule. + .wporg-activity-kit-included__card-body h3 { + margin-top: 0; + } +} + +// "Download this kit" box at bottom +.wporg-activity-kit-download-box { + border: 1px solid var(--wp--custom--color--border); + border-radius: 2px; + padding: 32px; + text-align: center; + margin-top: var(--wp--preset--spacing--40); + + h2 { + font-size: var(--wp--preset--font-size--large); + font-family: var(--wp--preset--font-family--eb-garamond); + margin-bottom: var(--wp--preset--spacing--20); + } + + p { + font-size: var(--wp--preset--font-size--normal); + color: var(--wp--preset--color--charcoal-1); + margin-bottom: var(--wp--preset--spacing--40); + line-height: 1.7; + } + + &__btn { + display: inline-flex; + align-items: center; + gap: 8px; + background: var(--wp--preset--color--blueberry-1); + color: var(--wp--preset--color--white) !important; + padding: 12px 32px; + border-radius: 2px; + font-size: var(--wp--preset--font-size--normal); + font-weight: 500; + text-decoration: none; + + &:hover { + background: var(--wp--preset--color--deep-blueberry); + text-decoration: none; + } + } + + &__note { + font-size: var(--wp--preset--font-size--small); + color: var(--wp--preset--color--charcoal-3); + margin: var(--wp--preset--spacing--20) 0 0; + } +} + diff --git a/wp-content/themes/pub/wporg-learn-2024/src/style/style.scss b/wp-content/themes/pub/wporg-learn-2024/src/style/style.scss index c27657021..8dc54ff23 100644 --- a/wp-content/themes/pub/wporg-learn-2024/src/style/style.scss +++ b/wp-content/themes/pub/wporg-learn-2024/src/style/style.scss @@ -3,6 +3,7 @@ * templates or theme.json settings. */ +@import "activity-kit"; @import "card-grid"; @import "jetpack"; @import "playground"; diff --git a/wp-content/themes/pub/wporg-learn-2024/templates/archive-activity_kit.html b/wp-content/themes/pub/wporg-learn-2024/templates/archive-activity_kit.html new file mode 100644 index 000000000..c6eb7db8f --- /dev/null +++ b/wp-content/themes/pub/wporg-learn-2024/templates/archive-activity_kit.html @@ -0,0 +1,17 @@ + + + +
+ + +
+ + + +
+ + +
+ + + diff --git a/wp-content/themes/pub/wporg-learn-2024/templates/single-activity_kit.html b/wp-content/themes/pub/wporg-learn-2024/templates/single-activity_kit.html new file mode 100644 index 000000000..4dc17b285 --- /dev/null +++ b/wp-content/themes/pub/wporg-learn-2024/templates/single-activity_kit.html @@ -0,0 +1,17 @@ + + + +
+ + +
+ + + +
+ + +
+ + + diff --git a/yarn.lock b/yarn.lock index eeb3cdd04..847190e06 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2349,11 +2349,6 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== -"@types/q@^1.5.1": - version "1.5.8" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.8.tgz#95f6c6a08f2ad868ba230ead1d2d7f7be3db3837" - integrity sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw== - "@types/qs@*": version "6.9.15" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" @@ -2876,7 +2871,7 @@ "@wordpress/i18n" "^3.20.0" "@wordpress/url" "^2.22.2" -"@wordpress/api-fetch@^6.19.0", "@wordpress/api-fetch@^6.48.1": +"@wordpress/api-fetch@^6.19.0": version "6.53.0" resolved "https://registry.yarnpkg.com/@wordpress/api-fetch/-/api-fetch-6.53.0.tgz#0f3bd1cca516011f64166299073943d9e550ce54" integrity sha512-jHYueGfGfe89akyw1A28WGl17qIKTukMTwol4rHkZY43ygUmSJiTF/FSsExzMwk/j7OmGGr+GTa1TPO/tc71Lw== @@ -2908,34 +2903,11 @@ dependencies: "@babel/runtime" "^7.16.0" -"@wordpress/babel-plugin-import-jsx-pragma@^4.39.0": - version "4.39.0" - resolved "https://registry.yarnpkg.com/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-4.39.0.tgz#be82b0ed378b68a4a7df573aeaeca788e436bb48" - integrity sha512-yQySutPQq+Joa3ePzc9X8f5hZacmcn5e9KMiJYrXBUqj5VKl4RR8N3e+UOl1lWoB2NI/7bA9tW9TXJlDpHJX1w== - "@wordpress/babel-plugin-import-jsx-pragma@^4.41.0": version "4.41.0" resolved "https://registry.yarnpkg.com/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-4.41.0.tgz#32b2034ed9b7cf5adeef3957e8a861ce316673d4" integrity sha512-hYxj2Uobxk86ctlfaJou9v13XqXZ30yx4ZwRNu5cH5/LWXe2MIXBTPv7dUk6wqN/qFOjsFvP9jCB0NsW6MnkrA== -"@wordpress/babel-preset-default@^7.35.0", "@wordpress/babel-preset-default@^7.40.0": - version "7.40.0" - resolved "https://registry.yarnpkg.com/@wordpress/babel-preset-default/-/babel-preset-default-7.40.0.tgz#d40dfa9e66813f21d2f77478a047486181d54f19" - integrity sha512-/guM3C4NMoLK0pNO5Epbm/50L/MqXB0k3+fLtPbw3BC3v8Aus7ktE2l85gilowNyE3kYAyjFR/BsG5tassnaVQ== - dependencies: - "@babel/core" "^7.16.0" - "@babel/plugin-transform-react-jsx" "^7.16.0" - "@babel/plugin-transform-runtime" "^7.16.0" - "@babel/preset-env" "^7.16.0" - "@babel/preset-typescript" "^7.16.0" - "@babel/runtime" "^7.16.0" - "@wordpress/babel-plugin-import-jsx-pragma" "^4.39.0" - "@wordpress/browserslist-config" "^5.39.0" - "@wordpress/warning" "^2.56.0" - browserslist "^4.21.10" - core-js "^3.31.0" - react "^18.2.0" - "@wordpress/babel-preset-default@^7.42.0": version "7.42.0" resolved "https://registry.yarnpkg.com/@wordpress/babel-preset-default/-/babel-preset-default-7.42.0.tgz#f6189a75d20193d12b21833dc41bacdbe0be5888" @@ -2954,11 +2926,6 @@ core-js "^3.31.0" react "^18.3.0" -"@wordpress/base-styles@^4.47.0": - version "4.47.0" - resolved "https://registry.yarnpkg.com/@wordpress/base-styles/-/base-styles-4.47.0.tgz#c52ece65fc15c2eb87bcb7ce86d9354ea461c411" - integrity sha512-1myPBFLuMnuxUE8M2VGZ+wbGhgasLNqFdxQnWfYDMRhaSESsZgaLaMoasNZ4+e/N7Nssl97ad/XGwZ721HXqvQ== - "@wordpress/base-styles@^4.49.0": version "4.49.0" resolved "https://registry.yarnpkg.com/@wordpress/base-styles/-/base-styles-4.49.0.tgz#b7aa24c0330924a9a30628ffbfbdbd114cbcd5fe" @@ -3240,16 +3207,6 @@ tinycolor2 "^1.4.2" uuid "^8.3.0" -"@wordpress/browserslist-config@2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@wordpress/browserslist-config/-/browserslist-config-2.6.0.tgz#00074a1cb1ba979ba7ac5afc4e322bc8447035d1" - integrity sha512-vRgzGoxhcNVChBP30XZlyK4w6r/9ZpO+Fi1dzmButp31lUEb1pT5WBxTIQl3HE0JZ9YTEJ00WWGO5sjGi5MHZA== - -"@wordpress/browserslist-config@^5.34.0", "@wordpress/browserslist-config@^5.39.0": - version "5.39.0" - resolved "https://registry.yarnpkg.com/@wordpress/browserslist-config/-/browserslist-config-5.39.0.tgz#26090163fbf48c671920a2fe27d24b9aa8d210b3" - integrity sha512-oy5CRWS3WsaFN/KAgOUIE6mmyuFu5qmKZZhQ+voCN+ifXTsj1J6ypR3RyY03Cbojy6kidyVYl3qRyMxbbUwWSQ== - "@wordpress/browserslist-config@^5.41.0": version "5.41.0" resolved "https://registry.yarnpkg.com/@wordpress/browserslist-config/-/browserslist-config-5.41.0.tgz#51a5aa1f3e008dad6779690e4657d26118139cc3" @@ -3707,13 +3664,6 @@ moment "^2.29.4" moment-timezone "^0.5.40" -"@wordpress/dependency-extraction-webpack-plugin@^5.2.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-5.7.0.tgz#4f20fdf11141f897568a4dd2cbd3e19263b6690a" - integrity sha512-s/xUnAEKwXmSUZLqrvX4n3tBWegxaiQfXJwd264MRJUmz4JibWJnvevkxM6tooEetu36xGiVHAIPvfvEEEtntQ== - dependencies: - json2php "^0.0.7" - "@wordpress/dependency-extraction-webpack-plugin@^5.9.0": version "5.9.0" resolved "https://registry.yarnpkg.com/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-5.9.0.tgz#58220f88e489226720bd19ea9bc93eb6f7020231" @@ -3767,21 +3717,6 @@ "@babel/runtime" "^7.16.0" "@wordpress/deprecated" "^3.56.0" -"@wordpress/e2e-test-utils-playwright@^0.19.0": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-0.19.2.tgz#e463acfb699e0aafe71c49acf4cbb147470b415e" - integrity sha512-pB/WsJwtbKLrKEhdr8HEmjThP6XGuFJmEHfxSm76l/S5Hc0dzhFHAYojk3iu0VEZMUlgppUNYfXTab8JTCkwBA== - dependencies: - "@wordpress/api-fetch" "^6.48.1" - "@wordpress/keycodes" "^3.51.1" - "@wordpress/url" "^3.52.1" - change-case "^4.1.2" - form-data "^4.0.0" - get-port "^5.1.1" - lighthouse "^10.4.0" - mime "^3.0.0" - web-vitals "^3.5.0" - "@wordpress/e2e-test-utils-playwright@^0.26.0": version "0.26.0" resolved "https://registry.yarnpkg.com/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-0.26.0.tgz#e05be4377e87d73d6169c9d2ba7a34f65caa50ea" @@ -3981,29 +3916,6 @@ dependencies: "@babel/runtime" "^7.16.0" -"@wordpress/eslint-plugin@^17.8.0": - version "17.13.0" - resolved "https://registry.yarnpkg.com/@wordpress/eslint-plugin/-/eslint-plugin-17.13.0.tgz#e1ab509caba98289bf01735f4e16e46c1a002c73" - integrity sha512-QnG5HmOd+XsweKOvrqbOugm9rINUjcsh1jo2SN4cbbTWZJ6nPmcfLS0YJdrKkgOQUnKDPQgBPVEyI8tp19OtBw== - dependencies: - "@babel/eslint-parser" "^7.16.0" - "@typescript-eslint/eslint-plugin" "^6.4.1" - "@typescript-eslint/parser" "^6.4.1" - "@wordpress/babel-preset-default" "^7.40.0" - "@wordpress/prettier-config" "^3.13.0" - cosmiconfig "^7.0.0" - eslint-config-prettier "^8.3.0" - eslint-plugin-import "^2.25.2" - eslint-plugin-jest "^27.2.3" - eslint-plugin-jsdoc "^46.4.6" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-playwright "^0.15.3" - eslint-plugin-prettier "^5.0.0" - eslint-plugin-react "^7.27.0" - eslint-plugin-react-hooks "^4.3.0" - globals "^13.12.0" - requireindex "^1.2.0" - "@wordpress/eslint-plugin@^18.1.0": version "18.1.0" resolved "https://registry.yarnpkg.com/@wordpress/eslint-plugin/-/eslint-plugin-18.1.0.tgz#bcf3e4b5256b4a05b6f5d579c00346448f92c60c" @@ -4175,14 +4087,6 @@ dependencies: "@babel/runtime" "^7.16.0" -"@wordpress/jest-console@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@wordpress/jest-console/-/jest-console-7.27.0.tgz#34e175f9a8cf0abb6c88ed7f7736c456d6636272" - integrity sha512-mzKShc0zUHyWsHt/fK2L3cJDWWAp9AttzENDTo7RuynqJWTDOGsqsnDr6zITyVcaL0my8ApVTiWu5OxzBXXvfg== - dependencies: - "@babel/runtime" "^7.16.0" - jest-matcher-utils "^29.6.2" - "@wordpress/jest-console@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@wordpress/jest-console/-/jest-console-7.29.0.tgz#45f30566db56118a128cbf9923780aff38ab28c1" @@ -4191,14 +4095,6 @@ "@babel/runtime" "^7.16.0" jest-matcher-utils "^29.6.2" -"@wordpress/jest-preset-default@^11.22.0": - version "11.27.0" - resolved "https://registry.yarnpkg.com/@wordpress/jest-preset-default/-/jest-preset-default-11.27.0.tgz#bf4fd1bb111578914461dc0607ed33bc8a392273" - integrity sha512-5fyyKthW+BNpv+Ndtgl2+1uHsmEWqTtf3PN+FL3qRfYCTPbvasxZBkGx2bpnt0D9ajcrpGmbllwOoM0dhY8Q6w== - dependencies: - "@wordpress/jest-console" "^7.27.0" - babel-jest "^29.6.2" - "@wordpress/jest-preset-default@^11.29.0": version "11.29.0" resolved "https://registry.yarnpkg.com/@wordpress/jest-preset-default/-/jest-preset-default-11.29.0.tgz#be5732a4ee94ddaf0c18eb0a78bc3ab76c5eb45b" @@ -4240,7 +4136,7 @@ "@wordpress/i18n" "^3.20.0" lodash "^4.17.19" -"@wordpress/keycodes@^3.20.0", "@wordpress/keycodes@^3.22.0", "@wordpress/keycodes@^3.51.1", "@wordpress/keycodes@^3.56.0": +"@wordpress/keycodes@^3.20.0", "@wordpress/keycodes@^3.22.0", "@wordpress/keycodes@^3.56.0": version "3.56.0" resolved "https://registry.yarnpkg.com/@wordpress/keycodes/-/keycodes-3.56.0.tgz#06378bf696232ece6c4fbbe8ffd0afe7a5346b7f" integrity sha512-YIvqB0AEsu3fjkuQHNT7XladaTDE1Thntv+oqzkRejdNodH5tbPb3CAePAK3F7iQurZ0GCaqlmJTy9qcHwDU0Q== @@ -4287,11 +4183,6 @@ "@wordpress/a11y" "^3.31.0" "@wordpress/data" "^9.1.0" -"@wordpress/npm-package-json-lint-config@^4.36.0": - version "4.41.0" - resolved "https://registry.yarnpkg.com/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-4.41.0.tgz#0b3a0d1e29966a1c60ce559eaf4b86bc893f1955" - integrity sha512-HStjqoxdB4zTU9i3BCzvbI0OyVZ3L6phSeoRwk2uU1cT41O883ouoBGE9DcEIzufKeuFCeqCBJf8NRk8S2h/sg== - "@wordpress/npm-package-json-lint-config@^4.43.0": version "4.43.0" resolved "https://registry.yarnpkg.com/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-4.43.0.tgz#d85ad592742de042eaf80de4a73c5eb9c28dda89" @@ -4322,14 +4213,6 @@ lodash "^4.17.19" memize "^1.1.0" -"@wordpress/postcss-plugins-preset@^4.35.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-4.40.0.tgz#824d0b3ef51cc7cc0355eb44895b83e6ca03187d" - integrity sha512-xnd+XZI5s9hyGtt314WgH3prxQVBMLEjmTTz0g1+9x1avrYxIwhv1ZxMNittrAq2IP1qBzT5IwsPzJ+wCgcEyw== - dependencies: - "@wordpress/base-styles" "^4.47.0" - autoprefixer "^10.2.5" - "@wordpress/postcss-plugins-preset@^4.42.0": version "4.42.0" resolved "https://registry.yarnpkg.com/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-4.42.0.tgz#f429cb6416b436d00c1fa4cc351b0909f1a05bce" @@ -4338,11 +4221,6 @@ "@wordpress/base-styles" "^4.49.0" autoprefixer "^10.2.5" -"@wordpress/prettier-config@^3.13.0", "@wordpress/prettier-config@^3.8.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@wordpress/prettier-config/-/prettier-config-3.13.0.tgz#4e702e5ae333c9084c3570f37eb22b7070c6d411" - integrity sha512-oNayHsdAhP3ER4T7KjNrmdtEIZjYJAdIDdScjNOKmK3Qvp02VP9TPfDGhLSjiYmOiQcyrIz/uuf9MJ9JCcdGng== - "@wordpress/prettier-config@^3.15.0": version "3.15.0" resolved "https://registry.yarnpkg.com/@wordpress/prettier-config/-/prettier-config-3.15.0.tgz#3ee67ca7469c8a10302aa5119c99999bf0f6d6ed" @@ -4470,70 +4348,6 @@ memize "^1.1.0" rememo "^4.0.0" -"@wordpress/scripts@27.2.0": - version "27.2.0" - resolved "https://registry.yarnpkg.com/@wordpress/scripts/-/scripts-27.2.0.tgz#6870925a2c0a1f70bd2c2f3bbbf1bdce0b111f5d" - integrity sha512-xkrNYRuXxtkCkxtBWq7H46cgvbBHzfy8VdELqXn5XwK8S+ytDVOe3YUXqhisn9VdPurrjgfgAa/qNMA3xPr90Q== - dependencies: - "@babel/core" "^7.16.0" - "@pmmmwh/react-refresh-webpack-plugin" "^0.5.11" - "@svgr/webpack" "^8.0.1" - "@wordpress/babel-preset-default" "^7.35.0" - "@wordpress/browserslist-config" "^5.34.0" - "@wordpress/dependency-extraction-webpack-plugin" "^5.2.0" - "@wordpress/e2e-test-utils-playwright" "^0.19.0" - "@wordpress/eslint-plugin" "^17.8.0" - "@wordpress/jest-preset-default" "^11.22.0" - "@wordpress/npm-package-json-lint-config" "^4.36.0" - "@wordpress/postcss-plugins-preset" "^4.35.0" - "@wordpress/prettier-config" "^3.8.0" - "@wordpress/stylelint-config" "^21.34.0" - adm-zip "^0.5.9" - babel-jest "^29.6.2" - babel-loader "^8.2.3" - browserslist "^4.21.10" - chalk "^4.0.0" - check-node-version "^4.1.0" - clean-webpack-plugin "^3.0.0" - copy-webpack-plugin "^10.2.0" - cross-spawn "^5.1.0" - css-loader "^6.2.0" - cssnano "^6.0.1" - cwd "^0.10.0" - dir-glob "^3.0.1" - eslint "^8.3.0" - expect-puppeteer "^4.4.0" - fast-glob "^3.2.7" - filenamify "^4.2.0" - jest "^29.6.2" - jest-dev-server "^9.0.1" - jest-environment-jsdom "^29.6.2" - jest-environment-node "^29.6.2" - markdownlint-cli "^0.31.1" - merge-deep "^3.0.3" - mini-css-extract-plugin "^2.5.1" - minimist "^1.2.0" - npm-package-json-lint "^6.4.0" - npm-packlist "^3.0.0" - playwright-core "1.39.0" - postcss "^8.4.5" - postcss-loader "^6.2.1" - prettier "npm:wp-prettier@3.0.3" - puppeteer-core "^13.2.0" - react-refresh "^0.14.0" - read-pkg-up "^7.0.1" - resolve-bin "^0.4.0" - sass "^1.35.2" - sass-loader "^12.1.0" - source-map-loader "^3.0.0" - stylelint "^14.2.0" - terser-webpack-plugin "^5.3.9" - url-loader "^4.1.1" - webpack "^5.88.2" - webpack-bundle-analyzer "^4.9.1" - webpack-cli "^5.1.4" - webpack-dev-server "^4.15.1" - "@wordpress/scripts@27.9.0": version "27.9.0" resolved "https://registry.yarnpkg.com/@wordpress/scripts/-/scripts-27.9.0.tgz#e3fbb4de7f4768545a56f6d097b53276ecb8efdd" @@ -4648,14 +4462,6 @@ stylelint-config-recommended "^6.0.0" stylelint-config-recommended-scss "^5.0.2" -"@wordpress/stylelint-config@^21.34.0": - version "21.39.0" - resolved "https://registry.yarnpkg.com/@wordpress/stylelint-config/-/stylelint-config-21.39.0.tgz#f90303e8e03b6524a80b4f9ef2122f4f5d734828" - integrity sha512-MNFsOpriCtNXs1TfPQwPkU7/4Jo0e0IfGJdvRYHp8mSv0VqY1vn9CW8QJ8xqrWYqxCOG6Z+Zn9IPToEM5mqz5A== - dependencies: - stylelint-config-recommended "^6.0.0" - stylelint-config-recommended-scss "^5.0.2" - "@wordpress/stylelint-config@^21.41.0": version "21.41.0" resolved "https://registry.yarnpkg.com/@wordpress/stylelint-config/-/stylelint-config-21.41.0.tgz#27e32b0d037550badaefa24f31a13107ba50ad98" @@ -4704,7 +4510,7 @@ lodash "^4.17.19" react-native-url-polyfill "^1.1.2" -"@wordpress/url@^3.21.0", "@wordpress/url@^3.23.0", "@wordpress/url@^3.52.1", "@wordpress/url@^3.57.0": +"@wordpress/url@^3.21.0", "@wordpress/url@^3.23.0", "@wordpress/url@^3.57.0": version "3.57.0" resolved "https://registry.yarnpkg.com/@wordpress/url/-/url-3.57.0.tgz#a552798e4d71772dfa4caedf0c1027f3d5913fcc" integrity sha512-W3F0KVEaMoRENya7GGUPXrZGYnhAg3fuLSLpNcf1skSrM5rUVMNdeRlZj+jln1O/+qjboJnC+y+IzOlQRwlS6A== @@ -4735,7 +4541,7 @@ resolved "https://registry.yarnpkg.com/@wordpress/warning/-/warning-1.4.2.tgz#433e5b2b711cac5b954bafbe1b5bfc626f933b08" integrity sha512-MjrkSp6Jyfx+92AE32A83P503noUtGb6//BYUH4GiWzzzSNhDHgbQ0UcOJwJaEYK166DxSNpMk/JXc4YENi1Cw== -"@wordpress/warning@^2.20.0", "@wordpress/warning@^2.22.0", "@wordpress/warning@^2.56.0": +"@wordpress/warning@^2.20.0", "@wordpress/warning@^2.22.0": version "2.56.0" resolved "https://registry.yarnpkg.com/@wordpress/warning/-/warning-2.56.0.tgz#6fabe9bf3671810e359a9f675b35d755becdcf17" integrity sha512-Bd1Zy5eWQPKoQsfQwD9T1KZWPpq+ZFyozirx+Z5MnX59J0i80p8KiEMcmXhPH+Os9An2PtlVV9j0gY9z5z0oAw== @@ -4924,11 +4730,6 @@ abab@^2.0.5, abab@^2.0.6: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -5043,11 +4844,6 @@ ajv@^8.0.0, ajv@^8.0.1, ajv@^8.9.0: require-from-string "^2.0.2" uri-js "^4.2.2" -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ== - ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -5065,11 +4861,6 @@ ansi-html-community@^0.0.8: resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - ansi-regex@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" @@ -5080,11 +4871,6 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== - ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -5149,11 +4935,6 @@ array-buffer-byte-length@^1.0.1: call-bind "^1.0.5" is-array-buffer "^3.0.4" -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -5248,19 +5029,6 @@ array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.reduce@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" - integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-array-method-boxes-properly "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - is-string "^1.0.7" - array.prototype.toreversed@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" @@ -5318,36 +5086,11 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async@^2.6.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -async@~1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -autoprefixer@9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.1.tgz#51967a02d2d2300bb01866c1611ec8348d355a47" - integrity sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw== - dependencies: - browserslist "^4.6.3" - caniuse-lite "^1.0.30000980" - chalk "^2.4.2" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.17" - postcss-value-parser "^4.0.0" - autoprefixer@^10.2.5: version "10.4.19" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f" @@ -5616,16 +5359,6 @@ body-scroll-lock@^3.0.2, body-scroll-lock@^3.1.5: resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz#c1392d9217ed2c3e237fee1e910f6cdd80b7aaec" integrity sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg== -body@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" - integrity sha512-chUsBxGRtuElD6fmw1gHLpvnKdVLK302peeFa9ZqAEk8TyzZ3fygLyUEDDPTJvL9+Bor0dIwn6ePOsRM2y0zQQ== - dependencies: - continuable-cache "^0.3.1" - error "^7.0.0" - raw-body "~1.1.0" - safe-json-parse "~1.0.1" - bonjour-service@^1.0.11: version "1.2.1" resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02" @@ -5634,7 +5367,7 @@ bonjour-service@^1.0.11: fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" -boolbase@^1.0.0, boolbase@~1.0.0: +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== @@ -5666,7 +5399,7 @@ brcast@^2.0.2: resolved "https://registry.yarnpkg.com/brcast/-/brcast-2.0.2.tgz#2db16de44140e418dc37fab10beec0369e78dcef" integrity sha512-Tfn5JSE7hrUlFcOoaLzVvkbgIemIorMIyoMr3TgvszWW7jFt2C9PdeMLtysYD9RU0MmU17b69+XJG1eRY2OBRg== -browserslist@^4.0.0, browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.23.0, browserslist@^4.3.6, browserslist@^4.6.3: +browserslist@^4.0.0, browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.23.0: version "4.23.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== @@ -5713,11 +5446,6 @@ builtins@^5.0.0: dependencies: semver "^7.0.0" -bytes@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" - integrity sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ== - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -5757,25 +5485,6 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -5789,14 +5498,6 @@ camel-case@^4.1.2: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ== - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - camelcase-keys@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" @@ -5806,11 +5507,6 @@ camelcase-keys@^6.2.2: map-obj "^4.0.0" quick-lru "^4.0.1" -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw== - camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -5836,7 +5532,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000980, caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: version "1.0.30001612" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz#d34248b4ec1f117b70b24ad9ee04c90e0b8a14ae" integrity sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g== @@ -5850,18 +5546,7 @@ capital-case@^1.0.4: tslib "^2.0.3" upper-case-first "^2.0.2" -chalk@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4.1: +chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -6077,26 +5762,12 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -coffeescript@~1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-1.10.0.tgz#e7aa8301917ef621b35d8a39f348dcdd1db7e33e" - integrity sha512-ZQmMbvOYLFz9ylTKWCdWmGPWMMCRFhz3pC4R0IBikWUpEvwsJk9P0ut/eQU39TbU3vBaBEWsJZngkIruVV7Yqw== - collect-v8-coverage@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== -color-convert@^1.9.0, color-convert@^1.9.3: +color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -6115,27 +5786,11 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@^1.0.0, color-name@~1.1.4: +color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.6.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" - colord@^2.7.0, colord@^2.9.3: version "2.9.3" resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" @@ -6146,11 +5801,6 @@ colorette@^2.0.10, colorette@^2.0.14: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - integrity sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w== - combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -6286,11 +5936,6 @@ content-type@~1.0.4, content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -continuable-cache@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" - integrity sha512-TF30kpKhTH8AGCG3dut0rdd/19B7Z+qCnrMoBLpyQu/2drZdNrrpcjPEoJeSVsQM+8KmWG5O56oPDjSSUsuTyA== - convert-source-map@^1.5.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" @@ -6367,16 +6012,6 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - cosmiconfig@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" @@ -6479,19 +6114,6 @@ css-color-keywords@^1.0.0: resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q== - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - css-declaration-sorter@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz#6dec1c9523bc4a643e088aab8f09e67a54961024" @@ -6521,21 +6143,6 @@ css-mediaquery@^0.1.2: resolved "https://registry.yarnpkg.com/css-mediaquery/-/css-mediaquery-0.1.2.tgz#6a2c37344928618631c54bd33cedd301da18bea0" integrity sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q== -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - css-select@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" @@ -6556,22 +6163,6 @@ css-to-react-native@^2.2.1: css-color-keywords "^1.0.0" postcss-value-parser "^3.3.0" -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - css-tree@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" @@ -6588,16 +6179,6 @@ css-tree@~2.2.0: mdn-data "2.0.28" source-map-js "^1.0.1" -css-unit-converter@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" - integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== - -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - css-what@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" @@ -6608,42 +6189,6 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^4.0.7: - version "4.0.8" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" - integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.3" - postcss-unique-selectors "^4.0.1" - cssnano-preset-default@^6.1.2: version "6.1.2" resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz#adf4b89b975aa775f2750c89dbaf199bbd9da35e" @@ -6680,43 +6225,11 @@ cssnano-preset-default@^6.1.2: postcss-svgo "^6.0.3" postcss-unique-selectors "^6.0.4" -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw== - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw== - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== - cssnano-utils@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.2.tgz#56f61c126cd0f11f2eef1596239d730d9fceff3c" integrity sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ== -cssnano@4.1.10: - version "4.1.10" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" - integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.7" - is-resolvable "^1.0.0" - postcss "^7.0.0" - cssnano@^6.0.1: version "6.1.2" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.1.2.tgz#4bd19e505bd37ee7cf0dc902d3d869f6d79c66b8" @@ -6725,13 +6238,6 @@ cssnano@^6.0.1: cssnano-preset-default "^6.1.2" lilconfig "^3.1.1" -csso@^4.0.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - csso@^5.0.5: version "5.0.5" resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" @@ -6766,13 +6272,6 @@ csstype@^3.0.2, csstype@^3.0.3: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng== - dependencies: - array-find-index "^1.0.1" - cwd@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/cwd/-/cwd-0.10.0.tgz#172400694057c22a13b0cf16162c7e4b7a7fe567" @@ -6839,14 +6338,6 @@ date-fns@^3.6.0: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.6.0.tgz#f20ca4fe94f8b754951b24240676e8618c0206bf" integrity sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww== -dateformat@~1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" - integrity sha512-5sFRfAAmbHdIts+eKjR9kYJoF0ViCMVX9yqLu5A7S/v+nd077KgCITOMiirmyCBiZpKLDXbBOkYm6tu7rX/TKg== - dependencies: - get-stdin "^4.0.1" - meow "^3.3.0" - debounce@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" @@ -6866,7 +6357,7 @@ debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, de dependencies: ms "2.1.2" -debug@^3.1.0, debug@^3.2.7: +debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -6881,7 +6372,7 @@ decamelize-keys@^1.1.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== @@ -7052,11 +6543,6 @@ diff-sequences@^29.6.3: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== -diff@^3.0.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - diff@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -7114,14 +6600,6 @@ dom-scroll-into-view@^1.2.1: resolved "https://registry.yarnpkg.com/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz#e8f36732dd089b0201a88d7815dc3f88e6d66c7e" integrity sha512-LwNVg3GJOprWDO+QhLL1Z9MMgWe/KAFLxVWKzjRTxNSPn8/LLDIfmuG71YHznXCqaqTjvHJDYO1MEAgX6XCNbQ== -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" @@ -7131,12 +6609,7 @@ dom-serializer@^2.0.0: domhandler "^5.0.2" entities "^4.2.0" -domelementtype@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1, domelementtype@^2.3.0: +domelementtype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== @@ -7155,14 +6628,6 @@ domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" -domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - domutils@^3.0.1: version "3.1.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" @@ -7300,11 +6765,6 @@ enquirer@^2.3.6: ansi-colors "^4.1.1" strip-ansi "^6.0.1" -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - entities@^4.2.0, entities@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" @@ -7325,7 +6785,7 @@ equivalent-key-map@^0.2.2: resolved "https://registry.yarnpkg.com/equivalent-key-map/-/equivalent-key-map-0.2.2.tgz#be4d57049bb8d46a81d6e256c1628465620c2a13" integrity sha512-xvHeyCDbZzkpN4VHQj/n+j2lOwL0VWszG30X4cOrc9Y7Tuo2qCdZK/0AMod23Z5dCtNUbaju6p0rwOhHUk05ew== -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== @@ -7339,14 +6799,7 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.3.4" -error@^7.0.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/error/-/error-7.2.1.tgz#eab21a4689b5f684fc83da84a0e390de82d94894" - integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA== - dependencies: - string-template "~0.2.1" - -es-abstract@^1.17.2, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2: +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== @@ -7398,11 +6851,6 @@ es-abstract@^1.17.2, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23 unbox-primitive "^1.0.2" which-typed-array "^1.1.15" -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - es-define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" @@ -7756,11 +7204,6 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -eventemitter2@~0.4.13: - version "0.4.14" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" - integrity sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ== - eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -7786,7 +7229,7 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -exit@^0.1.2, exit@~0.1.1: +exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== @@ -7941,13 +7384,6 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" -faye-websocket@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - integrity sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ== - dependencies: - websocket-driver ">=0.5.1" - fb-watchman@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" @@ -8053,14 +7489,6 @@ find-root@^1.1.0: resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -8084,13 +7512,6 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -findup-sync@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" - integrity sha512-z8Nrwhi6wzxNMIbxlrTzuUW6KWuKkogZ/7OdDVq+0+kxn77KUH1nipx8iU6suqkHqc4y6n7a9A8IpmxY/pTjWg== - dependencies: - glob "~5.0.0" - flat-cache@^3.0.4: version "3.2.0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" @@ -8258,13 +7679,6 @@ functions-have-names@^1.2.3: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gaze@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" - integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== - dependencies: - globule "^1.0.0" - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -8296,11 +7710,6 @@ get-port@^5.1.1: resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw== - get-stdin@~9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" @@ -8337,11 +7746,6 @@ get-uri@^6.0.1: debug "^4.3.4" fs-extra "^11.2.0" -getobject@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/getobject/-/getobject-0.1.0.tgz#047a449789fa160d018f5486ed91320b6ec7885c" - integrity sha512-hIGEBfnHcZpWkXPsAVeVmpYDvfy/matVl03yOY91FPmnpCC12Lm5izNxCjO3lHAeO6uaTwMxu7g450Siknlhig== - gettext-parser@^1.3.1: version "1.4.0" resolved "https://registry.yarnpkg.com/gettext-parser/-/gettext-parser-1.4.0.tgz#f8baf34a292f03d5e42f02df099d301f167a7ace" @@ -8381,41 +7785,6 @@ glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@~5.0.0: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@~7.0.0: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" - integrity sha512-f8c0rE8JiCxpa52kWPAOa3ZaYEnzofDzCQLCn3Vdk0Z5OVLq3BsRFJI4S4ykpeVW6QMGBUkMeUpoEgWnMTnw5Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@~7.1.1: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - global-cache@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/global-cache/-/global-cache-1.2.1.tgz#39ca020d3dd7b3f0934c52b75363f8d53312c16d" @@ -8517,15 +7886,6 @@ globjoin@^0.1.4: resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== -globule@^1.0.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.4.tgz#7c11c43056055a75a6e68294453c17f2796170fb" - integrity sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg== - dependencies: - glob "~7.1.1" - lodash "^4.17.21" - minimatch "~3.0.2" - good-listener@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" @@ -8572,112 +7932,6 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -grunt-cli@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.2.0.tgz#562b119ebb069ddb464ace2845501be97b35b6a8" - integrity sha512-8oM6ZAe4yG8Y7co/Ejc9613AixyN+gdCADyAFvJ1BbHGvrNa0ltaqrEWXV9P/W0gbQbAh3C8swJIaDuAX7syiw== - dependencies: - findup-sync "~0.3.0" - grunt-known-options "~1.1.0" - nopt "~3.0.6" - resolve "~1.1.0" - -grunt-contrib-watch@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz#c143ca5b824b288a024b856639a5345aedb78ed4" - integrity sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg== - dependencies: - async "^2.6.0" - gaze "^1.1.0" - lodash "^4.17.10" - tiny-lr "^1.1.1" - -grunt-known-options@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/grunt-known-options/-/grunt-known-options-1.1.1.tgz#6cc088107bd0219dc5d3e57d91923f469059804d" - integrity sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ== - -grunt-legacy-log-utils@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz#d2f442c7c0150065d9004b08fd7410d37519194e" - integrity sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA== - dependencies: - chalk "~2.4.1" - lodash "~4.17.10" - -grunt-legacy-log@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz#c8cd2c6c81a4465b9bbf2d874d963fef7a59ffb9" - integrity sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw== - dependencies: - colors "~1.1.2" - grunt-legacy-log-utils "~2.0.0" - hooker "~0.2.3" - lodash "~4.17.5" - -grunt-legacy-util@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz#e10624e7c86034e5b870c8a8616743f0a0845e42" - integrity sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A== - dependencies: - async "~1.5.2" - exit "~0.1.1" - getobject "~0.1.0" - hooker "~0.2.3" - lodash "~4.17.10" - underscore.string "~3.3.4" - which "~1.3.0" - -grunt-postcss@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/grunt-postcss/-/grunt-postcss-0.9.0.tgz#fbe5934a6be9eac893af6d057e2318c97fae9da3" - integrity sha512-lglLcVaoOIqH0sFv7RqwUKkEFGQwnlqyAKbatxZderwZGV1nDyKHN7gZS9LUiTx1t5GOvRBx0BEalHMyVwFAIA== - dependencies: - chalk "^2.1.0" - diff "^3.0.0" - postcss "^6.0.11" - -grunt-rtlcss@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/grunt-rtlcss/-/grunt-rtlcss-2.0.1.tgz#e9e61ce437406397f9e3a4b1bf669e47e71ffcc3" - integrity sha512-t+3oBQHu9InA7qMRV0C3VsBuJa5y9WLnKWI6OJmlGvwpRL7CERDVnN2m4EPMbIIp/Mu4d9geDpKr73c0Fb6saQ== - dependencies: - chalk "^1.0.0" - rtlcss "^2.0.0" - -grunt-sass-globbing@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/grunt-sass-globbing/-/grunt-sass-globbing-1.5.1.tgz#9e60955cd8cb3f496ddd07cf71cf94405b2382d1" - integrity sha512-v1b+xQYGen1uRZ+LSZCVHfYR5JhSlsjT/F9sSatzxKh0vn65wZ0kA5OLta/l8o+uL036oJluqkqSWJRV0k7kUQ== - -grunt-sass@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/grunt-sass/-/grunt-sass-3.1.0.tgz#a5936cc2a80ec08092d9f31c101dc307d1e4f71c" - integrity sha512-90s27H7FoCDcA8C8+R0GwC+ntYD3lG6S/jqcavWm3bn9RiJTmSfOvfbFa1PXx4NbBWuiGQMLfQTj/JvvqT5w6A== - -grunt@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grunt/-/grunt-1.0.4.tgz#c799883945a53a3d07622e0737c8f70bfe19eb38" - integrity sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ== - dependencies: - coffeescript "~1.10.0" - dateformat "~1.0.12" - eventemitter2 "~0.4.13" - exit "~0.1.1" - findup-sync "~0.3.0" - glob "~7.0.0" - grunt-cli "~1.2.0" - grunt-known-options "~1.1.0" - grunt-legacy-log "~2.0.0" - grunt-legacy-util "~1.1.1" - iconv-lite "~0.4.13" - js-yaml "~3.13.0" - minimatch "~3.0.2" - mkdirp "~0.5.1" - nopt "~3.0.6" - path-is-absolute "~1.0.0" - rimraf "~2.6.2" - gzip-size@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" @@ -8695,13 +7949,6 @@ hard-rejection@^2.1.0: resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== - dependencies: - ansi-regex "^2.0.0" - has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -8729,7 +7976,7 @@ has-proto@^1.0.1, has-proto@^1.0.3: resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== @@ -8741,7 +7988,7 @@ has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: dependencies: has-symbols "^1.0.3" -has@^1.0.0, has@^1.0.3: +has@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== @@ -8761,11 +8008,6 @@ header-case@^2.0.4: capital-case "^1.0.4" tslib "^2.0.3" -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - hey-listen@^1.0.5, hey-listen@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" @@ -8802,11 +8044,6 @@ homedir-polyfill@^1.0.0: dependencies: parse-passwd "^1.0.0" -hooker@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959" - integrity sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA== - hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -8834,16 +8071,6 @@ hpq@^1.3.0: resolved "https://registry.yarnpkg.com/hpq/-/hpq-1.4.0.tgz#a65ad6ea8e9dfd835d990118597357befa5a88d9" integrity sha512-ycJQMRaRPBcfnoT1gS5I1XCvbbw9KO94Y0vkwksuOjcJMqNZtb03MF2tCItLI2mQbkZWSSeFinoRDPmjzv4tKg== -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A== - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA== - html-encoding-sniffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" @@ -8973,7 +8200,7 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -9024,14 +8251,6 @@ immutable@^4.0.0: resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -9058,23 +8277,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg== - dependencies: - repeating "^2.0.0" - indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -9171,11 +8378,6 @@ irregular-plurals@^3.2.0: resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.5.0.tgz#0835e6639aa8425bdc8b0d33d0dc4e89d9c01d2b" integrity sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ== -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg== - is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" @@ -9189,11 +8391,6 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - is-async-function@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" @@ -9240,18 +8437,6 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA== - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" - is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0: version "2.13.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" @@ -9273,11 +8458,6 @@ is-date-object@^1.0.1, is-date-object@^1.0.5: dependencies: has-tostringtag "^1.0.0" -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== - is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" @@ -9300,11 +8480,6 @@ is-finalizationregistry@^1.0.2: dependencies: call-bind "^1.0.2" -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -9430,11 +8605,6 @@ is-regex@^1.1.0, is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" @@ -9488,11 +8658,6 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== - is-weakmap@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" @@ -10049,14 +9214,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -js-yaml@~3.13.0: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - jsbn@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" @@ -10114,11 +9271,6 @@ json-buffer@3.0.1: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" @@ -10346,22 +9498,6 @@ linkify-it@^3.0.1: dependencies: uc.micro "^1.0.1" -livereload-js@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz#447c31cf1ea9ab52fc20db615c5ddf678f78009c" - integrity sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw== - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - loader-runner@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" @@ -10423,7 +9559,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.1.1, lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.21, lodash@~4.17.10, lodash@~4.17.5: +lodash@^4.1.1, lodash@^4.17.19, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -10455,14 +9591,6 @@ loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ== - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.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" @@ -10528,7 +9656,7 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" -map-obj@^1.0.0, map-obj@^1.0.1: +map-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== @@ -10592,11 +9720,6 @@ mathml-tag-names@^2.1.3: resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - mdn-data@2.0.28: version "2.0.28" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" @@ -10607,11 +9730,6 @@ mdn-data@2.0.30: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" @@ -10639,22 +9757,6 @@ memize@^2.0.1, memize@^2.1.0: resolved "https://registry.yarnpkg.com/memize/-/memize-2.1.0.tgz#6ddd4717887d94825748149ece00d04cf868ce0d" integrity sha512-yywVJy8ctVlN5lNPxsep5urnZ6TTclwPEyigM9M3Bi8vseJBOfqNrGWN/r8NzuIt3PovM323W04blJfGQfQSVg== -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA== - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - meow@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" @@ -10770,13 +9872,6 @@ minimalistic-assert@^1.0.0: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - minimatch@9.0.3: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" @@ -10784,7 +9879,14 @@ minimatch@9.0.3: dependencies: brace-expansion "^2.0.1" -minimatch@~3.0.2, minimatch@~3.0.5: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@~3.0.5: version "3.0.8" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== @@ -10800,7 +9902,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -10828,7 +9930,7 @@ mkdirp-classic@^0.5.2: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@^0.5.4: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -10947,14 +10049,7 @@ node-releases@^2.0.14: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== -nopt@~3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: +normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -10984,11 +10079,6 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - normalize-url@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" @@ -11051,13 +10141,6 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -11065,11 +10148,6 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg== - nwsapi@^2.2.2: version "2.2.9" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.9.tgz#7f3303218372db2e9f27c27766bcfc59ae7e61c6" @@ -11132,19 +10210,6 @@ object.fromentries@^2.0.7: es-abstract "^1.23.2" es-object-atoms "^1.0.0" -object.getownpropertydescriptors@^2.1.0: - version "2.1.8" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" - integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== - dependencies: - array.prototype.reduce "^1.0.6" - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - gopd "^1.0.1" - safe-array-concat "^1.1.2" - object.groupby@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" @@ -11353,21 +10418,6 @@ parse-cache-control@1.0.1: resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -11411,13 +10461,6 @@ path-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== - dependencies: - pinkie-promise "^2.0.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -11428,7 +10471,7 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0, path-is-absolute@~1.0.0: +path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== @@ -11460,15 +10503,6 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -11479,11 +10513,6 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -11521,15 +10550,6 @@ pirates@^4.0.4: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== -pixrem@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pixrem/-/pixrem-5.0.0.tgz#460c534fbc19e4e9fbf39012ae26c7107cd40bca" - integrity sha512-ugJ4Imy92u55zeznaN/5d7iqOBIZjZ7q10/T+dcd0IuFtbLlsGDvAUabFu1cafER+G9f0T1WtTqvzm4KAdcDgQ== - dependencies: - browserslist "^4.3.6" - postcss "^7.0.7" - reduce-css-calc "^2.1.5" - pkg-dir@4.2.0, pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -11537,11 +10557,6 @@ pkg-dir@4.2.0, pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -playwright-core@1.39.0: - version "1.39.0" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.39.0.tgz#efeaea754af4fb170d11845b8da30b2323287c63" - integrity sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw== - plur@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/plur/-/plur-4.0.0.tgz#729aedb08f452645fe8c58ef115bf16b0a73ef84" @@ -11574,15 +10589,6 @@ possible-typed-array-names@^1.0.0: resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== -postcss-calc@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" - integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== - dependencies: - postcss "^7.0.27" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" - postcss-calc@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6" @@ -11591,17 +10597,6 @@ postcss-calc@^9.0.1: postcss-selector-parser "^6.0.11" postcss-value-parser "^4.2.0" -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - postcss-colormin@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.1.0.tgz#076e8d3fb291fbff7b10e6b063be9da42ff6488d" @@ -11612,14 +10607,6 @@ postcss-colormin@^6.1.0: colord "^2.9.3" postcss-value-parser "^4.2.0" -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - postcss-convert-values@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz#3498387f8efedb817cbc63901d45bd1ceaa40f48" @@ -11628,49 +10615,21 @@ postcss-convert-values@^6.1.0: browserslist "^4.23.0" postcss-value-parser "^4.2.0" -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" - postcss-discard-comments@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz#e768dcfdc33e0216380623652b0a4f69f4678b6c" integrity sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw== -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" - postcss-discard-duplicates@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz#d121e893c38dc58a67277f75bb58ba43fce4c3eb" integrity sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw== -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" - postcss-discard-empty@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz#ee39c327219bb70473a066f772621f81435a79d9" integrity sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ== -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" - postcss-discard-overridden@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz#4e9f9c62ecd2df46e8fdb44dc17e189776572e2d" @@ -11690,16 +10649,6 @@ postcss-media-query-parser@^0.2.3: resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - postcss-merge-longhand@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz#ba8a8d473617c34a36abbea8dda2b215750a065a" @@ -11708,18 +10657,6 @@ postcss-merge-longhand@^6.0.5: postcss-value-parser "^4.2.0" stylehacks "^6.1.1" -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - postcss-merge-rules@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz#7aa539dceddab56019469c0edd7d22b64c3dea9d" @@ -11730,14 +10667,6 @@ postcss-merge-rules@^6.1.1: cssnano-utils "^4.0.2" postcss-selector-parser "^6.0.16" -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - postcss-minify-font-values@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz#a0e574c02ee3f299be2846369211f3b957ea4c59" @@ -11745,16 +10674,6 @@ postcss-minify-font-values@^6.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - postcss-minify-gradients@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz#ca3eb55a7bdb48a1e187a55c6377be918743dbd6" @@ -11764,18 +10683,6 @@ postcss-minify-gradients@^6.0.3: cssnano-utils "^4.0.2" postcss-value-parser "^4.2.0" -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - postcss-minify-params@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz#54551dec77b9a45a29c3cb5953bf7325a399ba08" @@ -11785,16 +10692,6 @@ postcss-minify-params@^6.1.0: cssnano-utils "^4.0.2" postcss-value-parser "^4.2.0" -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - postcss-minify-selectors@^6.0.4: version "6.0.4" resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz#197f7d72e6dd19eed47916d575d69dc38b396aff" @@ -11830,27 +10727,11 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== - dependencies: - postcss "^7.0.0" - postcss-normalize-charset@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz#1ec25c435057a8001dac942942a95ffe66f721e1" integrity sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ== -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - postcss-normalize-display-values@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz#54f02764fed0b288d5363cbb140d6950dbbdd535" @@ -11858,16 +10739,6 @@ postcss-normalize-display-values@^6.0.2: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - postcss-normalize-positions@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz#e982d284ec878b9b819796266f640852dbbb723a" @@ -11875,16 +10746,6 @@ postcss-normalize-positions@^6.0.2: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - postcss-normalize-repeat-style@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz#f8006942fd0617c73f049dd8b6201c3a3040ecf3" @@ -11892,15 +10753,6 @@ postcss-normalize-repeat-style@^6.0.2: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - postcss-normalize-string@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz#e3cc6ad5c95581acd1fc8774b309dd7c06e5e363" @@ -11908,15 +10760,6 @@ postcss-normalize-string@^6.0.2: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - postcss-normalize-timing-functions@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz#40cb8726cef999de984527cbd9d1db1f3e9062c0" @@ -11924,15 +10767,6 @@ postcss-normalize-timing-functions@^6.0.2: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - postcss-normalize-unicode@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz#aaf8bbd34c306e230777e80f7f12a4b7d27ce06e" @@ -11941,16 +10775,6 @@ postcss-normalize-unicode@^6.1.0: browserslist "^4.23.0" postcss-value-parser "^4.2.0" -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - postcss-normalize-url@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz#292792386be51a8de9a454cb7b5c58ae22db0f79" @@ -11958,14 +10782,6 @@ postcss-normalize-url@^6.0.2: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - postcss-normalize-whitespace@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz#fbb009e6ebd312f8b2efb225c2fcc7cf32b400cd" @@ -11973,15 +10789,6 @@ postcss-normalize-whitespace@^6.0.2: dependencies: postcss-value-parser "^4.2.0" -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - postcss-ordered-values@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz#366bb663919707093451ab70c3f99c05672aaae5" @@ -11990,16 +10797,6 @@ postcss-ordered-values@^6.0.2: cssnano-utils "^4.0.2" postcss-value-parser "^4.2.0" -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-reduce-initial@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz#4401297d8e35cb6e92c8e9586963e267105586ba" @@ -12008,16 +10805,6 @@ postcss-reduce-initial@^6.1.0: browserslist "^4.23.0" caniuse-api "^3.0.0" -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - postcss-reduce-transforms@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz#6fa2c586bdc091a7373caeee4be75a0f3e12965d" @@ -12040,15 +10827,6 @@ postcss-scss@^4.0.2: resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.9.tgz#a03c773cd4c9623cb04ce142a52afcec74806685" integrity sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A== -postcss-selector-parser@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== - dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: version "6.0.16" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" @@ -12057,15 +10835,6 @@ postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16, postcss-select cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-svgo@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" - integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - postcss-svgo@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.3.tgz#1d6e180d6df1fa8a3b30b729aaa9161e94f04eaa" @@ -12074,15 +10843,6 @@ postcss-svgo@^6.0.3: postcss-value-parser "^4.2.0" svgo "^3.2.0" -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - postcss-unique-selectors@^6.0.4: version "6.0.4" resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz#983ab308896b4bf3f2baaf2336e14e52c11a2088" @@ -12090,17 +10850,17 @@ postcss-unique-selectors@^6.0.4: dependencies: postcss-selector-parser "^6.0.16" -postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0: +postcss-value-parser@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^6.0.11, postcss@^6.0.23: +postcss@^6.0.23: version "6.0.23" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== @@ -12109,14 +10869,6 @@ postcss@^6.0.11, postcss@^6.0.23: source-map "^0.6.1" supports-color "^5.4.0" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.17, postcss@^7.0.27, postcss@^7.0.7: - version "7.0.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - postcss@^8.3.11, postcss@^8.4.19, postcss@^8.4.33, postcss@^8.4.5: version "8.4.38" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" @@ -12283,11 +11035,6 @@ pure-rand@^6.0.0: resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - qs@6.11.0: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" @@ -12295,13 +11042,6 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -qs@^6.4.0: - version "6.12.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.1.tgz#39422111ca7cbdb70425541cba20c7d7b216599a" - integrity sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ== - dependencies: - side-channel "^1.0.6" - querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -12349,14 +11089,6 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@~1.1.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" - integrity sha512-WmJJU2e9Y6M5UzTOkHaM7xJGAPQD8PNzx3bAd2+uhZAim6wDk6dAZxPVYLF67XhbR4hmKGh33Lpmh4XWrCH5Mg== - dependencies: - bytes "1" - string_decoder "0.10" - re-resizable@^6.4.0: version "6.9.14" resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.9.14.tgz#b31e2bdef5e9068f295ca2ec2118d1e7b64449d9" @@ -12610,14 +11342,6 @@ react@^18.3.0: dependencies: loose-envify "^1.1.0" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" @@ -12627,15 +11351,6 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" @@ -12754,14 +11469,6 @@ rechoir@^0.8.0: dependencies: resolve "^1.20.0" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g== - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -12770,14 +11477,6 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -reduce-css-calc@^2.1.5: - version "2.1.8" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03" - integrity sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg== - dependencies: - css-unit-converter "^1.1.1" - postcss-value-parser "^3.3.0" - redux-multi@^0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/redux-multi/-/redux-multi-0.1.12.tgz#28e1fe5e49672cbc5bd8a07f0b2aeaf0ef8355c2" @@ -12891,13 +11590,6 @@ remove-accents@^0.5.0: resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687" integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A== - dependencies: - is-finite "^1.0.0" - requestidlecallback@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/requestidlecallback/-/requestidlecallback-0.3.0.tgz#6fb74e0733f90df3faa4838f9f6a2a5f9b742ac5" @@ -12955,11 +11647,6 @@ resolve-dir@^0.1.0: expand-tilde "^1.2.2" global-modules "^0.2.3" -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -12998,11 +11685,6 @@ resolve@^2.0.0-next.5: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@~1.1.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== - responselike@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" @@ -13028,16 +11710,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w== - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg== - rimraf@3.0.2, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -13052,13 +11724,6 @@ rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - robots-parser@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/robots-parser/-/robots-parser-3.0.1.tgz#3d8a3cdfa8ac240cbb062a4bd16fcc0e0fb9ed23" @@ -13072,7 +11737,7 @@ rtlcss-webpack-plugin@^4.0.7: babel-runtime "~6.25.0" rtlcss "^3.5.0" -rtlcss@^2.0.0, rtlcss@^2.6.2: +rtlcss@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-2.6.2.tgz#55b572b52c70015ba6e03d497e5c5cb8137104b4" integrity sha512-06LFAr+GAPo+BvaynsXRfoYTJvSaWRyOhURCQ7aeI1MKph9meM222F+Zkt3bDamyHHJuGi3VPtiRkpyswmQbGA== @@ -13154,11 +11819,6 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@^5.1.1, resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-json-parse@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" - integrity sha512-o0JmTu17WGUaUOHa1l0FPGXKBfijbxK6qoHzlkihsDXxzBHvJcA7zgviKR92Xs841rX9pK16unfphLq0/KqX7A== - safe-regex-test@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" @@ -13181,15 +11841,6 @@ sass-loader@^12.1.0: klona "^2.0.4" neo-async "^2.6.2" -sass@1.49.9: - version "1.49.9" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.9.tgz#b15a189ecb0ca9e24634bae5d1ebc191809712f9" - integrity sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A== - dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - sass@^1.35.2: version "1.75.0" resolved "https://registry.yarnpkg.com/sass/-/sass-1.75.0.tgz#91bbe87fb02dfcc34e052ddd6ab80f60d392be6c" @@ -13199,11 +11850,6 @@ sass@^1.35.2: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - saxes@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" @@ -13462,7 +12108,7 @@ side-channel@^1.0.4, side-channel@^1.0.6: get-intrinsic "^1.2.4" object-inspect "^1.13.1" -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -13486,13 +12132,6 @@ simple-html-tokenizer@^0.5.7: resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.5.11.tgz#4c5186083c164ba22a7b477b7687ac056ad6b1d9" integrity sha512-C2WEK/Z3HoSFbYq8tI7ni3eOo/NneSPRoPpcM7WdLjFOArFuyXEjAoCdOC3DgMfRyziZQ1hCNR4mrNdWEvD0og== -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - sirv@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" @@ -13694,11 +12333,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - stack-utils@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" @@ -13744,11 +12378,6 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-template@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" - integrity sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw== - string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -13813,11 +12442,6 @@ string.prototype.trimstart@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" -string_decoder@0.10: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -13832,13 +12456,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -13853,13 +12470,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== - dependencies: - is-utf8 "^0.2.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -13875,13 +12485,6 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA== - dependencies: - get-stdin "^4.0.1" - strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -13932,15 +12535,6 @@ styled-griddie@^0.1.3: resolved "https://registry.yarnpkg.com/styled-griddie/-/styled-griddie-0.1.3.tgz#57bda4ab05f082c2916f049ae0ee03b9c49b9614" integrity sha512-RjsiiADJrRpdPTF8NR26nlZutnvkrX78tiM5/za/E+ftVdpjD8ZBb2iOzrIzfix80uDcHYQbg3iIR0lOGaYmEQ== -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - stylehacks@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.1.1.tgz#543f91c10d17d00a440430362d419f79c25545a6" @@ -14022,11 +12616,6 @@ stylis@4.2.0: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== - supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -14071,25 +12660,6 @@ svg-tags@^1.0.0: resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== -svgo@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - svgo@^3.0.2, svgo@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.2.0.tgz#7a5dff2938d8c6096e00295c2390e8e652fa805d" @@ -14236,11 +12806,6 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A== - tiny-emitter@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" @@ -14251,18 +12816,6 @@ tiny-invariant@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== -tiny-lr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" - integrity sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA== - dependencies: - body "^5.1.0" - debug "^3.1.0" - faye-websocket "~0.10.0" - livereload-js "^2.3.0" - object-assign "^4.1.0" - qs "^6.4.0" - tiny-warning@^1.0.0, tiny-warning@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" @@ -14348,11 +12901,6 @@ tree-kill@^1.2.2: resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw== - trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" @@ -14548,14 +13096,6 @@ unbzip2-stream@1.4.3: buffer "^5.2.1" through "^2.3.8" -underscore.string@~3.3.4: - version "3.3.6" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.6.tgz#ad8cf23d7423cb3b53b898476117588f4e2f9159" - integrity sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ== - dependencies: - sprintf-js "^1.1.1" - util-deprecate "^1.0.2" - undici-types@~5.26.4: version "5.26.5" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" @@ -14584,16 +13124,6 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ== - unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -14616,11 +13146,6 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== - update-browserslist-db@^1.0.13: version "1.0.13" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" @@ -14714,16 +13239,6 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -14787,11 +13302,6 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - w3c-xmlserializer@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" @@ -15093,7 +13603,7 @@ which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: gopd "^1.0.1" has-tostringtag "^1.0.2" -which@^1.2.12, which@^1.2.9, which@^1.3.1, which@~1.3.0: +which@^1.2.12, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==