@@ -732,9 +829,15 @@ public function dokan_setup_withdraw_save() {
$options = get_option( 'dokan_withdraw', [] );
$options['withdraw_methods'] = ! empty( $_POST['withdraw_methods'] ) ? wc_clean( wp_unslash( $_POST['withdraw_methods'] ) ) : [];
- $options['withdraw_limit'] = ! empty( $_POST['withdraw_limit'] ) ? (float) wc_format_decimal( sanitize_text_field( wp_unslash( $_POST['withdraw_limit'] ) ) ) < 0 ? 0 : wc_format_decimal( sanitize_text_field( wp_unslash( $_POST['withdraw_limit'] ) ) ) : 0;
$options['withdraw_order_status'] = ! empty( $_POST['withdraw_order_status'] ) ? wc_clean( wp_unslash( $_POST['withdraw_order_status'] ) ) : [];
+ if ( ! empty( $_POST['withdraw_limit'] ) ) {
+ $input_limit = sanitize_text_field( wp_unslash( $_POST['withdraw_limit'] ) );
+ $options['withdraw_limit'] = is_numeric( $input_limit ) && $input_limit >= 0 ? wc_format_decimal( $input_limit ) : 0;
+ } else {
+ $options['withdraw_limit'] = 0;
+ }
+
/**
* Filter dokan_withdraw options before saving in setup wizard
*
diff --git a/includes/Admin/SetupWizardNoWC.php b/includes/Admin/SetupWizardNoWC.php
index 71f1a1e10a..3c15210fe9 100644
--- a/includes/Admin/SetupWizardNoWC.php
+++ b/includes/Admin/SetupWizardNoWC.php
@@ -129,7 +129,7 @@ public function install_woocommerce() {
delete_transient( '_wc_activation_redirect' );
if ( is_wp_error( $installed ) ) {
- wp_die( $installed->get_error_message(), __( 'Error installing WooCommerce plugin', 'dokan-lite' ) );
+ wp_die( esc_html( $installed->get_error_message() ), esc_html__( 'Error installing WooCommerce plugin', 'dokan-lite' ) );
}
set_transient( 'dokan_setup_wizard_no_wc', true, 15 * MINUTE_IN_SECONDS );
diff --git a/includes/Admin/UserProfile.php b/includes/Admin/UserProfile.php
index 00a86458f6..3fcfb64cdd 100755
--- a/includes/Admin/UserProfile.php
+++ b/includes/Admin/UserProfile.php
@@ -65,8 +65,6 @@ public function add_meta_fields( $user ) {
$publishing = get_user_meta( $user->ID, 'dokan_publishing', true );
$store_settings = dokan_get_store_info( $user->ID );
$banner = ! empty( $store_settings['banner'] ) ? absint( $store_settings['banner'] ) : 0;
- $admin_commission = get_user_meta( $user->ID, 'dokan_admin_percentage', true );
- $admin_commission_type = get_user_meta( $user->ID, 'dokan_admin_percentage_type', true );
$feature_seller = get_user_meta( $user->ID, 'dokan_feature_seller', true );
$social_fields = dokan_get_social_profile_fields();
@@ -80,7 +78,6 @@ public function add_meta_fields( $user ) {
$address_state = isset( $store_settings['address']['state'] ) ? $store_settings['address']['state'] : '';
$banner_width = dokan_get_vendor_store_banner_width();
$banner_height = dokan_get_vendor_store_banner_height();
- $admin_commission = ( 'flat' === $admin_commission_type ) ? wc_format_localized_price( $admin_commission ) : wc_format_localized_decimal( $admin_commission );
$country_state = array(
'country' => array(
@@ -323,26 +320,6 @@ public function add_meta_fields( $user ) {
-
diff --git a/includes/Ajax.php b/includes/Ajax.php
index 7b983a18f7..b7f93a7c52 100755
--- a/includes/Ajax.php
+++ b/includes/Ajax.php
@@ -265,8 +265,8 @@ public function grant_access_to_download() {
include dirname( __DIR__ ) . '/templates/orders/order-download-permission-html.php';
- $loop ++;
- $file_count ++;
+ ++$loop;
+ ++$file_count;
}
}
}
@@ -414,7 +414,7 @@ public function add_order_note() {
echo 'customer-note';
}
echo '">';
- echo wpautop( wptexturize( $note ) ); // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( wpautop( wptexturize( $note ) ) );
echo '
' . esc_html__( 'Delete note', 'dokan-lite' ) . '
';
echo '';
}
@@ -484,7 +484,7 @@ public function add_shipping_tracking_info() {
echo '';
- echo wpautop( wptexturize( $ship_info ) ); // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( wpautop( wptexturize( $ship_info ) ) );
echo '
' . esc_html__( 'Delete', 'dokan-lite' ) . '
';
echo ' ';
@@ -692,6 +692,7 @@ public function dokan_json_search_products_tags() {
$drop_down_tags = apply_filters(
'dokan_search_product_tags_for_vendor_products', [
+ 'taxonomy' => 'product_tag',
'name__like' => $name,
'hide_empty' => 0,
'orderby' => 'name',
@@ -701,7 +702,7 @@ public function dokan_json_search_products_tags() {
]
);
- $product_tags = get_terms( 'product_tag', $drop_down_tags );
+ $product_tags = get_terms( $drop_down_tags );
if ( $product_tags ) {
foreach ( $product_tags as $pro_term ) {
diff --git a/includes/Analytics/Reports/BaseQueryFilter.php b/includes/Analytics/Reports/BaseQueryFilter.php
new file mode 100644
index 0000000000..c5e4f58be4
--- /dev/null
+++ b/includes/Analytics/Reports/BaseQueryFilter.php
@@ -0,0 +1,181 @@
+register_hooks();
+ }
+
+ /**
+ * Add join clause for Dokan order state table in WooCommerce analytics queries.
+ *
+ * @param array $clauses The existing join clauses.
+ *
+ * @return array The modified join clauses.
+ */
+ public function add_join_subquery( array $clauses ): array {
+ global $wpdb;
+
+ $dokan_order_state_table = $this->get_dokan_table();
+
+ $clauses[] = "JOIN {$dokan_order_state_table} ON {$wpdb->prefix}{$this->wc_table}.order_id = {$dokan_order_state_table}.order_id";
+
+ return array_unique( $clauses );
+ }
+
+ /**
+ * Add where clause for Dokan order state in WooCommerce analytics queries.
+ *
+ * @param array $clauses The existing where clauses.
+ *
+ * @return array The modified where clauses.
+ */
+ public function add_where_subquery( array $clauses ): array {
+ $dokan_order_state_table = $this->get_dokan_table();
+ $order_types = $this->get_order_and_refund_types_to_include();
+
+ $clauses[] = "AND {$dokan_order_state_table}.order_type in ( $order_types ) ";
+
+ $clauses = $this->add_where_subquery_for_refund( $clauses );
+ $clauses = $this->add_where_subquery_for_vendor_filter( $clauses );
+
+ return array_unique( $clauses );
+ }
+
+ /**
+ * Add where clause for refunds in WooCommerce analytics queries.
+ *
+ * @param array $clauses The existing where clauses.
+ *
+ * @return array The modified where clauses.
+ */
+ protected function add_where_subquery_for_refund( array $clauses ): array {
+ if ( ! isset( $_GET['refunds'] ) ) {
+ return $clauses;
+ }
+
+ $dokan_order_state_table = $this->get_dokan_table();
+ $order_types = $this->get_refund_types_to_include();
+
+ $clauses[] = "AND {$dokan_order_state_table}.order_type in ( $order_types ) ";
+
+ return $clauses;
+ }
+
+ /**
+ * Determine if the query should be filtered by seller ID.
+ *
+ * @return bool True if the query should be filtered by seller ID, false otherwise.
+ */
+ public function should_filter_by_vendor_id(): bool {
+ return true;
+ }
+
+ /**
+ * Get the order types to include in WooCommerce analytics queries.
+ *
+ * @return string The order types to include.
+ */
+ protected function get_order_and_refund_types_to_include(): string {
+ $order_type = new OrderType();
+
+ if ( $this->should_filter_by_vendor_id() ) {
+ return implode( ',', $order_type->get_vendor_order_types() );
+ }
+
+ return implode( ',', $order_type->get_admin_order_types() );
+ }
+
+ /**
+ * Get the refund types to include in WooCommerce analytics queries.
+ *
+ * @return string The refund types to include.
+ */
+ protected function get_refund_types_to_include(): string {
+ $order_type = new OrderType();
+
+ if ( $this->should_filter_by_vendor_id() ) {
+ return implode( ',', $order_type->get_vendor_refund_types() );
+ }
+
+ return implode( ',', $order_type->get_admin_refund_types() );
+ }
+
+ protected function get_dokan_table(): string {
+ return DataStore::get_db_table_name();
+ }
+
+ /**
+ * Get the non refund order types to include in WooCommerce analytics queries.
+ *
+ * @return string The refund types to include.
+ */
+ protected function get_order_types_for_sql_excluding_refunds(): string {
+ $order_type = new OrderType();
+
+ if ( $this->should_filter_by_vendor_id() ) {
+ return implode( ',', $order_type->get_vendor_order_types_excluding_refunds() );
+ }
+
+ return implode( ',', $order_type->get_admin_order_types_excluding_refunds() );
+ }
+
+ /**
+ * Add where clause for seller query filter in WooCommerce analytics queries.
+ *
+ * @param array $clauses The existing where clauses.
+ *
+ * @return array The modified where clauses.
+ */
+ protected function add_where_subquery_for_vendor_filter( array $clauses ): array {
+ $vendor_id = $this->get_vendor_id();
+
+ if ( ! $vendor_id ) {
+ return $clauses;
+ }
+
+ $dokan_order_state_table = $this->get_dokan_table();
+
+ global $wpdb;
+
+ $clauses[] = $wpdb->prepare( "AND {$dokan_order_state_table}.vendor_id = %s", $vendor_id ); //phpcs:ignore
+
+ return $clauses;
+ }
+
+ /**
+ * Get seller id from Query param for Admin and currently logged in user as Vendor
+ *
+ * @return int
+ */
+ public function get_vendor_id() {
+ if ( ! is_user_logged_in() ) {
+ return 0;
+ }
+
+ if ( ! current_user_can( 'manage_options' ) ) {
+ return dokan_get_current_user_id();
+ }
+
+ return (int) ( wp_unslash( $_GET['sellers'] ?? 0 ) ); // phpcs:ignore
+ }
+}
diff --git a/includes/Analytics/Reports/Categories/QueryFilter.php b/includes/Analytics/Reports/Categories/QueryFilter.php
new file mode 100644
index 0000000000..2aed675880
--- /dev/null
+++ b/includes/Analytics/Reports/Categories/QueryFilter.php
@@ -0,0 +1,34 @@
+context ) {
+ return $column;
+ }
+
+ $order_type = new OrderType();
+ $vendor_types = implode( ',', $order_type->get_vendor_order_types() );
+ $admin_types = implode( ',', $order_type->get_admin_order_types() );
+ $table_name = $this->get_dokan_table();
+
+ /**
+ * Parent order ID need to be set to 0 for Dokan suborder.
+ * Because, WC orders analytics generates order details link against the parent order
+ * assuming the order having parent ID as a refund order.
+ */
+ // $column['parent_id'] = "(CASE WHEN {$table_name}.order_type NOT IN ($refund_types) THEN 0 ELSE {$wc_table_name}.parent_id END ) as parent_id";
+ $column['amount'] = "SUM(CASE WHEN {$table_name}.order_type IN ($admin_types) THEN discount_amount ELSE 0 END ) as amount";
+ $column['orders_count'] = "COUNT( DISTINCT (CASE WHEN {$table_name}.order_type IN ($vendor_types) THEN {$table_name}.order_id END) ) as orders_count";
+
+ return $column;
+ }
+}
diff --git a/includes/Analytics/Reports/Coupons/Stats/QueryFilter.php b/includes/Analytics/Reports/Coupons/Stats/QueryFilter.php
new file mode 100644
index 0000000000..03bebebd6d
--- /dev/null
+++ b/includes/Analytics/Reports/Coupons/Stats/QueryFilter.php
@@ -0,0 +1,39 @@
+clear_all_clauses();
+ unset( $this->subquery );
+ $this->total_query = new WcSqlQuery( $this->context . '_total' );
+ $this->total_query->add_sql_clause( 'from', self::get_db_table_name() );
+
+ $this->interval_query = new WcSqlQuery( $this->context . '_interval' );
+ $this->interval_query->add_sql_clause( 'from', self::get_db_table_name() );
+ $this->interval_query->add_sql_clause( 'group_by', 'time_interval' );
+ }
+}
diff --git a/includes/Analytics/Reports/Customers/QueryFilter.php b/includes/Analytics/Reports/Customers/QueryFilter.php
new file mode 100644
index 0000000000..f03afe9cf5
--- /dev/null
+++ b/includes/Analytics/Reports/Customers/QueryFilter.php
@@ -0,0 +1,67 @@
+context ) {
+ return $column;
+ }
+
+ $types = $this->get_order_and_refund_types_to_include();
+ $table_name = $this->get_dokan_table();
+
+ $orders_count = "COUNT( DISTINCT (CASE WHEN {$table_name}.order_type IN ($types) THEN {$table_name}.order_id END) ) "; //'SUM( CASE WHEN parent_id = 0 THEN 1 ELSE 0 END )';
+ $total_spend = "SUM(CASE WHEN {$table_name}.order_type IN ($types) THEN total_sales ELSE 0 END )"; //'SUM( total_sales )';
+
+ /**
+ * Parent order ID need to be set to 0 for Dokan suborder.
+ * Because, WC orders analytics generates order details link against the parent order
+ * assuming the order having parent ID as a refund order.
+ */
+ $column['orders_count'] = "{$orders_count} as orders_count";
+ $column['total_spend'] = "{$total_spend} as total_spend";
+ $column['avg_order_value'] = "CASE WHEN {$orders_count} = 0 THEN NULL ELSE {$total_spend} / {$orders_count} END AS avg_order_value";
+
+ return $column;
+ }
+}
diff --git a/includes/Analytics/Reports/Customers/Stats/QueryFilter.php b/includes/Analytics/Reports/Customers/Stats/QueryFilter.php
new file mode 100644
index 0000000000..d59e3b9525
--- /dev/null
+++ b/includes/Analytics/Reports/Customers/Stats/QueryFilter.php
@@ -0,0 +1,86 @@
+modify_select_field( $clause );
+ }
+
+ return $modified_clauses;
+ }
+
+ protected function modify_select_field( string $field ): string {
+ $parts = explode( ' as ', strtolower( $field ) );
+ $renamed_field = trim( $parts[1] ?? '' );
+
+ // The following fields need be modified.
+ // [0] => SUM( total_sales ) AS total_spend,
+ // [1] => SUM( CASE WHEN parent_id = 0 THEN 1 END ) as orders_count,
+ // [2] => CASE WHEN SUM( CASE WHEN parent_id = 0 THEN 1 ELSE 0 END ) = 0 THEN NULL ELSE SUM( total_sales ) / SUM( CASE WHEN parent_id = 0 THEN 1 ELSE 0 END ) END AS avg_order_value
+
+ $table_name = $this->get_dokan_table();
+
+ $types = $this->get_order_and_refund_types_to_include();
+
+ switch ( str_replace( ',', '', $renamed_field ) ) {
+ case 'total_spend':
+ $field = "SUM(CASE WHEN {$table_name}.order_type IN ($types) THEN total_sales ELSE 0 END ) as total_spend";
+ break;
+ case 'orders_count':
+ $field = "COUNT( DISTINCT (CASE WHEN {$table_name}.order_type IN ($types) THEN {$table_name}.order_id END) ) as orders_count";
+ break;
+ case 'avg_order_value':
+ $order_types_conditions = "CASE WHEN {$table_name}.order_type IN ($types) THEN 1 ELSE 0 END";
+
+ $field = "CASE WHEN SUM( $order_types_conditions ) = 0 THEN NULL ELSE SUM( total_sales ) / SUM( $order_types_conditions ) END AS avg_order_value";
+ break;
+ default:
+ break;
+ }
+
+ // Append comma if the given field ends with comma[","].
+ if ( str_ends_with( $renamed_field, ',' ) ) {
+ $field = $field . ',';
+ }
+
+ return $field;
+ }
+}
diff --git a/includes/Analytics/Reports/DataStoreModifier.php b/includes/Analytics/Reports/DataStoreModifier.php
new file mode 100644
index 0000000000..a7171c8a69
--- /dev/null
+++ b/includes/Analytics/Reports/DataStoreModifier.php
@@ -0,0 +1,60 @@
+register_hooks();
+ }
+
+ public function register_hooks(): void {
+ add_filter( 'woocommerce_data_stores', [ $this, 'modify_wc_products_stats_datastore' ], 20 );
+ }
+
+ /**
+ * Customize the WooCommerce products stats datastore to override the $total_query and $interval_query properties.
+ * This modification replaces the Automattic\WooCommerce\Admin\API\Reports\SqlQuery class with WeDevs\Dokan\Analytics\Reports\WcSqlQuery
+ * to apply specific filters to queries.
+ * The reason for this change is that the "get_sql_clause" method's second parameter defaults to "unfiltered," which blocks the filters we need
+ * to add JOIN and WHERE clauses for the dokan_order_stats table.
+ *
+ * @see https://github.com/woocommerce/woocommerce/blob/9297409c5a705d1cd0ae65ec9b058271bd90851e/plugins/woocommerce/src/Admin/API/Reports/Products/Stats/DataStore.php#L170
+ *
+ * @param array $wc_stores An array of WooCommerce datastores.
+ * @return array Modified array of WooCommerce datastores.
+ */
+ public function modify_wc_products_stats_datastore( $wc_stores ) {
+ if ( isset( $wc_stores['report-products-stats'] ) ) {
+ $wc_stores['report-products-stats'] = \WeDevs\Dokan\Analytics\Reports\Products\Stats\WcDataStore::class;
+ }
+
+ if ( isset( $wc_stores['report-taxes-stats'] ) ) {
+ $wc_stores['report-taxes-stats'] = \WeDevs\Dokan\Analytics\Reports\Taxes\Stats\WcDataStore::class;
+ }
+
+ if ( isset( $wc_stores['report-orders-stats'] ) ) {
+ $wc_stores['report-orders-stats'] = \WeDevs\Dokan\Analytics\Reports\Orders\Stats\WcDataStore::class;
+ }
+
+ if ( isset( $wc_stores['report-coupons-stats'] ) ) {
+ $wc_stores['report-coupons-stats'] = \WeDevs\Dokan\Analytics\Reports\Coupons\Stats\WcDataStore::class;
+ }
+
+ if ( isset( $wc_stores['report-stock-stats'] ) ) {
+ $wc_stores['report-stock-stats'] = \WeDevs\Dokan\Analytics\Reports\Stock\Stats\WcDataStore::class;
+ }
+
+ return $wc_stores;
+ }
+}
diff --git a/includes/Analytics/Reports/OrderType.php b/includes/Analytics/Reports/OrderType.php
new file mode 100644
index 0000000000..e396838ace
--- /dev/null
+++ b/includes/Analytics/Reports/OrderType.php
@@ -0,0 +1,193 @@
+get_parent_id() ) {
+ return false;
+ }
+
+ if ( $order instanceof \WC_Order ) {
+ return true;
+ }
+
+ $parent_order = wc_get_order( $order->get_parent_id() );
+
+ return $this->is_dokan_suborder_related( $parent_order );
+ }
+
+ /**
+ * Determines the type of the given order based on its relation to Dokan suborders and refunds.
+ *
+ * @param \WC_Abstract_Order $order The order object to classify.
+ *
+ * @return int The order type constant.
+ */
+ public function get_type( \WC_Abstract_Order $order ): int {
+ $is_suborder_related = $this->is_dokan_suborder_related( $order );
+
+ if ( $is_suborder_related ) {
+ // Refund of Dokan suborder.
+ if ( $order instanceof WC_Order_Refund ) {
+ return self::DOKAN_SUBORDER_REFUND;
+ }
+
+ // Dokan Suborder
+ return self::DOKAN_SUBORDER;
+ }
+
+ if ( ! $is_suborder_related ) {
+ // Refund of WC order.
+ if ( $order instanceof WC_Order_Refund ) {
+ $suborder_ids = array_filter(
+ (array) dokan_get_suborder_ids_by( $order->get_parent_id() )
+ );
+
+ if ( count( $suborder_ids ) ) {
+ return self::DOKAN_PARENT_ORDER_REFUND;
+ }
+
+ return self::DOKAN_SINGLE_ORDER_REFUND;
+ }
+
+ $suborder_ids = dokan_get_suborder_ids_by( $order->get_id() );
+
+ // Dokan Single Vendor Order
+ if ( $suborder_ids === null || ( is_array( $suborder_ids ) && count( $suborder_ids ) === 0 ) ) {
+ return self::DOKAN_SINGLE_ORDER;
+ }
+ }
+
+ return self::DOKAN_PARENT_ORDER;
+ }
+
+ /**
+ * Gets the list of order types relevant to admin users.
+ *
+ * @return array List of admin order type constants.
+ */
+ public function get_admin_order_types(): array {
+ return [
+ self::DOKAN_PARENT_ORDER,
+ self::DOKAN_SINGLE_ORDER,
+ self::DOKAN_PARENT_ORDER_REFUND,
+ self::DOKAN_SINGLE_ORDER_REFUND,
+ ];
+ }
+
+ /**
+ * Gets the list of order types relevant to sellers.
+ *
+ * @return array List of seller order type constants.
+ */
+ public function get_vendor_order_types(): array {
+ return [
+ self::DOKAN_SINGLE_ORDER,
+ self::DOKAN_SUBORDER,
+ self::DOKAN_SUBORDER_REFUND,
+ self::DOKAN_SINGLE_ORDER_REFUND,
+ ];
+ }
+
+ /**
+ * Gets the list of order types (excluding refunds) relevant to admin users.
+ *
+ * @return array List of admin order type constants (non-refund).
+ */
+ public function get_admin_order_types_excluding_refunds(): array {
+ return [
+ self::DOKAN_PARENT_ORDER,
+ self::DOKAN_SINGLE_ORDER,
+ ];
+ }
+
+ /**
+ * Gets the list of order types (excluding refunds) relevant to sellers.
+ *
+ * @return array List of seller order type constants (non-refund).
+ */
+ public function get_vendor_order_types_excluding_refunds(): array {
+ return [
+ self::DOKAN_SINGLE_ORDER,
+ self::DOKAN_SUBORDER,
+ ];
+ }
+
+ /**
+ * Gets the list of refund types relevant to all users.
+ *
+ * @return array List of refund type constants.
+ */
+ public function get_refund_types(): array {
+ return [
+ self::DOKAN_PARENT_ORDER_REFUND,
+ self::DOKAN_SUBORDER_REFUND,
+ self::DOKAN_SINGLE_ORDER_REFUND,
+ ];
+ }
+
+ /**
+ * Gets the list of refund types relevant to sellers.
+ *
+ * @return array List of seller refund type constants.
+ */
+ public function get_vendor_refund_types(): array {
+ return [
+ self::DOKAN_SUBORDER_REFUND,
+ self::DOKAN_SINGLE_ORDER_REFUND,
+ ];
+ }
+
+ /**
+ * Gets the list of refund types relevant to admin users.
+ *
+ * @return array List of admin refund type constants.
+ */
+ public function get_admin_refund_types(): array {
+ return [
+ self::DOKAN_PARENT_ORDER_REFUND,
+ self::DOKAN_SINGLE_ORDER_REFUND,
+ ];
+ }
+
+ /**
+ * Gets the list of refund types relevant to admin users.
+ *
+ * @return array List of admin refund type constants.
+ */
+ public function get_all_order_types(): array {
+ return [
+ self::DOKAN_PARENT_ORDER,
+ self::DOKAN_SINGLE_ORDER,
+ self::DOKAN_SUBORDER,
+ self::DOKAN_PARENT_ORDER_REFUND,
+ self::DOKAN_SUBORDER_REFUND,
+ self::DOKAN_SINGLE_ORDER_REFUND,
+ ];
+ }
+}
diff --git a/includes/Analytics/Reports/Orders/QueryFilter.php b/includes/Analytics/Reports/Orders/QueryFilter.php
new file mode 100644
index 0000000000..315b0fa72f
--- /dev/null
+++ b/includes/Analytics/Reports/Orders/QueryFilter.php
@@ -0,0 +1,93 @@
+get_refund_types() );
+ $table_name = Stats\DataStore::get_db_table_name();
+
+ /**
+ * Parent order ID need to be set to 0 for Dokan suborder.
+ * Because, WC orders analytics generates order details link against the parent order
+ * assuming the order having parent ID as a refund order.
+ */
+ $column['parent_id'] = "(CASE WHEN {$table_name}.order_type NOT IN ($refund_types) THEN 0 ELSE {$wc_table_name}.parent_id END ) as parent_id";
+
+ return $column;
+ }
+
+ /**
+ * Exclude order IDs from WooCommerce analytics queries based on seller or admin context.
+ *
+ * @param array $ids The existing excluded order IDs.
+ * @param array $query_args The query arguments.
+ * @param string $field The field being queried.
+ * @param string $context The context of the query.
+ *
+ * @return array The modified excluded order IDs.
+ */
+ public function exclude_order_ids( array $ids, array $query_args, string $field, $context ): array {
+ if ( $context !== 'orders' || ! $this->should_filter_by_vendor_id() ) {
+ return $ids;
+ }
+
+ return [];
+ }
+
+ /**
+ * Add custom columns to the select clause of WooCommerce analytics queries.
+ *
+ * @param array $clauses The existing select clauses.
+ *
+ * @return array The modified select clauses.
+ */
+ public function add_select_subquery( array $clauses ): array {
+ $clauses[] = ', vendor_earning, vendor_gateway_fee, vendor_discount, admin_commission, admin_gateway_fee, admin_discount, admin_subsidy';
+
+ return array_unique( $clauses );
+ }
+}
diff --git a/includes/Analytics/Reports/Orders/Stats/DataStore.php b/includes/Analytics/Reports/Orders/Stats/DataStore.php
new file mode 100644
index 0000000000..7662b164e9
--- /dev/null
+++ b/includes/Analytics/Reports/Orders/Stats/DataStore.php
@@ -0,0 +1,257 @@
+date_column_name = get_option( 'woocommerce_date_type', 'date_paid' );
+ parent::__construct();
+ }
+
+ /**
+ * Get the data based on args.
+ *
+ * @param array $args Query parameters.
+ * @return stdClass|WP_Error
+ */
+ public function get_data( $args ) {
+ throw new Exception( 'Not supported by Dokan' );
+ }
+
+ /**
+ * Add order information to the lookup table when orders are created or modified.
+ *
+ * @param int $post_id Post ID.
+ * @return int|bool Returns -1 if order won't be processed, or a boolean indicating processing success.
+ */
+ public static function sync_order( $post_id ) {
+ $order = wc_get_order( $post_id );
+ if ( ! $order ) {
+ return -1;
+ }
+
+ return self::update( $order );
+ }
+
+ /**
+ * Update the database with stats data.
+ *
+ * @param \WC_Order|\WC_Order_Refund $order Order or refund to update row for.
+ * @return int|bool Returns -1 if order won't be processed, or a boolean indicating processing success.
+ */
+ public static function update( $order ) {
+ global $wpdb;
+ $table_name = self::get_db_table_name();
+
+ if ( ! $order->get_id() || ! $order->get_date_created() ) {
+ dokan_log( 'Dokan Analytics Order not found: ' . $order->get_id() );
+
+ return -1;
+ }
+
+ // Following values are applicable for Refund Order.
+ $vendor_earning = 0;
+ $admin_earning = 0;
+
+ $gateway_fee = 0;
+ $gateway_fee_provider = '';
+
+ $shipping_fee = $order->get_shipping_total();
+ $shipping_fee_recipient = '';
+
+ // Override the values if order is a shop order.
+ switch ( $order->get_type() ) {
+ case 'shop_order':
+ $vendor_earning = (float) dokan()->commission->get_earning_by_order( $order );
+ $admin_earning = (float) dokan()->commission->get_earning_by_order( $order, 'admin' );
+
+ $gateway_fee = $order->get_meta( 'dokan_gateway_fee' );
+ $gateway_fee_provider = $order->get_meta( 'dokan_gateway_fee_paid_by' );
+ $shipping_fee_recipient = $order->get_meta( 'shipping_fee_recipient' );
+ break;
+
+ case 'shop_order_refund':
+ $parent_order = wc_get_order( $order->get_parent_id() );
+ $shipping_fee_recipient = $parent_order->get_meta( 'shipping_fee_recipient' );
+ break;
+ default:
+ break;
+ }
+
+ /**
+ * Filters order stats data.
+ *
+ * @param array $data Data written to order stats lookup table.
+ * @param WC_Order $order Order object.
+ *
+ * @since 3.13.0
+ */
+ $data = apply_filters(
+ 'dokan_analytics_update_order_stats_data',
+ array(
+ 'order_id' => $order->get_id(),
+ 'vendor_id' => (int) self::get_vendor_id_from_order( $order ),
+ 'order_type' => (int) ( ( new OrderType() )->get_type( $order ) ),
+ // Seller Data
+ 'vendor_earning' => $vendor_earning,
+ 'vendor_gateway_fee' => $gateway_fee_provider === 'seller' ? $gateway_fee : '0',
+ 'vendor_shipping_fee' => $shipping_fee_recipient === 'seller' ? $shipping_fee : '0',
+ 'vendor_discount' => $order->get_meta( '_vendor_discount' ),
+ // Admin Data
+ 'admin_commission' => $admin_earning,
+ 'admin_gateway_fee' => $gateway_fee_provider !== 'seller' ? $gateway_fee : '0',
+ 'admin_shipping_fee' => $shipping_fee_recipient !== 'seller' ? $shipping_fee : '0',
+ 'admin_discount' => $order->get_meta( '_admin_discount' ),
+ 'admin_subsidy' => $order->get_meta( '_admin_subsidy' ),
+ ),
+ $order,
+ );
+
+ $format = array(
+ '%d',
+ '%d',
+ '%d',
+ // Seller data
+ '%f',
+ '%f',
+ '%f',
+ '%f',
+ // Admin data
+ '%f',
+ '%f',
+ '%f',
+ '%f',
+ '%f',
+ );
+
+ // Update or add the information to the DB.
+ $result = $wpdb->replace( $table_name, $data, $format );
+
+ /**
+ * Fires when Dokan order's stats reports are updated.
+ *
+ * @param int $order_id Order ID.
+ *
+ * @since 3.13.0
+ */
+ do_action( 'dokan_analytics_update_order_stats', $order->get_id() );
+
+ // Check the rows affected for success. Using REPLACE can affect 2 rows if the row already exists.
+ return ( 1 === $result || 2 === $result );
+ }
+
+ /**
+ * Deletes the order stats when an order is deleted.
+ *
+ * @param int $post_id Post ID.
+ */
+ public static function delete_order( $post_id ) {
+ global $wpdb;
+ $order_id = (int) $post_id;
+
+ if ( ! OrderUtil::is_order( $post_id, array( 'shop_order', 'shop_order_refund' ) ) ) {
+ return;
+ }
+
+ // Retrieve customer details before the order is deleted.
+ $order = wc_get_order( $order_id );
+ $customer_id = absint( CustomersDataStore::get_existing_customer_id_from_order( $order ) );
+
+ // Delete the order.
+ $wpdb->delete( self::get_db_table_name(), array( 'order_id' => $order_id ) );
+
+ /**
+ * Fires when orders stats are deleted.
+ *
+ * @param int $order_id Order ID.
+ * @param int $customer_id Customer ID.
+ *
+ * @since 3.13.0
+ */
+ do_action( 'dokan_analytics_delete_order_stats', $order_id, $customer_id );
+ }
+
+ /**
+ * Gets the vendor ID associated with an order.
+ *
+ * @param \WC_Order $order Order object.
+ *
+ * @return int Vendor ID.
+ */
+ protected static function get_vendor_id_from_order( $order ) {
+ $order_type = ( new OrderType() )->get_type( $order );
+
+ switch ( $order_type ) {
+ case OrderType::DOKAN_SUBORDER:
+ case OrderType::DOKAN_SINGLE_ORDER:
+ $vendor_id = $order->get_meta( '_dokan_vendor_id' );
+ break;
+ case OrderType::DOKAN_SUBORDER_REFUND:
+ case OrderType::DOKAN_SINGLE_ORDER_REFUND:
+ $parent_order = wc_get_order( $order->get_parent_id() );
+ $vendor_id = $parent_order->get_meta( '_dokan_vendor_id' );
+ break;
+ default:
+ $vendor_id = 0;
+ break;
+ }
+
+ return (int) $vendor_id;
+ }
+}
diff --git a/includes/Analytics/Reports/Orders/Stats/QueryFilter.php b/includes/Analytics/Reports/Orders/Stats/QueryFilter.php
new file mode 100644
index 0000000000..f849b5f41e
--- /dev/null
+++ b/includes/Analytics/Reports/Orders/Stats/QueryFilter.php
@@ -0,0 +1,141 @@
+context ) {
+ return $column;
+ }
+
+ $dokan_table_name = $this->get_dokan_table();
+ $order_types = $this->get_order_types_for_sql_excluding_refunds();
+ $types = implode( ',', ( new OrderType() )->get_vendor_order_types() );
+ // $types = $this->get_order_types_for_sql_excluding_refunds();
+
+ $parent_order_types_str = implode( ',', ( new OrderType() )->get_admin_order_types_excluding_refunds() );
+ $refund_order_types_str = implode( ',', ( new OrderType() )->get_vendor_refund_types() );
+
+ $order_count = "SUM( CASE WHEN {$dokan_table_name}.order_type IN($order_types) THEN 1 ELSE 0 END )";
+
+ /**
+ * Override WC column.
+ *
+ * We can apply the common where clause after Dokan Coupon Distribution.
+ * File to restore: @see https://github.com/getdokan/dokan/blob/2cffa360a94b32033e7591fece5950068ab758f5/includes/Analytics/Reports/Orders/Stats/QueryFilter.php#L4
+ */
+ $coupon = "SUM(CASE WHEN {$dokan_table_name}.order_type IN($parent_order_types_str) THEN discount_amount END)";
+
+ $net_total = "SUM(CASE WHEN {$dokan_table_name}.order_type IN($types) THEN {$table_name}.net_total END)";
+
+ $item_sold = "SUM( CASE WHEN {$dokan_table_name}.order_type IN($types) THEN {$table_name}.num_items_sold END)";
+
+ $refunds = "ABS( SUM( CASE WHEN {$table_name}.net_total < 0 AND {$dokan_table_name}.order_type IN($refund_order_types_str) THEN {$table_name}.net_total ELSE 0 END ) )";
+
+ $gross_sales =
+ "( SUM( CASE WHEN {$dokan_table_name}.order_type IN($types) THEN {$table_name}.total_sales END )" .
+ " + COALESCE( $coupon, 0 )" . // SUM() all nulls gives null.
+ " - SUM(CASE WHEN {$dokan_table_name}.order_type IN($types) THEN {$table_name}.tax_total END)" .
+ " - SUM(CASE WHEN {$dokan_table_name}.order_type IN($types) THEN {$table_name}.shipping_total END)" .
+ " + {$refunds}" .
+ ' ) as gross_sales';
+
+ $column['num_items_sold'] = "$item_sold as num_items_sold";
+ $column['gross_sales'] = $gross_sales;
+ $column['total_sales'] = "SUM( CASE WHEN {$dokan_table_name}.order_type IN($types) THEN {$table_name}.total_sales END) AS total_sales";
+ $column['coupons'] = "COALESCE( $coupon, 0 ) AS coupons"; // SUM() all nulls gives null;
+ $column['coupons_count'] = 'COALESCE( coupons_count, 0 ) as coupons_count';
+ $column['refunds'] = "{$refunds} AS refunds";
+ $column['taxes'] = "SUM(CASE WHEN {$dokan_table_name}.order_type IN($types) THEN {$table_name}.tax_total END) AS taxes";
+ $column['shipping'] = "SUM(CASE WHEN {$dokan_table_name}.order_type IN($types) THEN {$table_name}.shipping_total END) AS shipping";
+ $column['net_revenue'] = " $net_total AS net_revenue";
+ $column['total_customers'] = "COUNT( DISTINCT( {$table_name}.customer_id ) ) as total_customers";
+ // End of override
+
+ $column['orders_count'] = "{$order_count} as orders_count";
+
+ $column['avg_items_per_order'] = "{$item_sold} / {$order_count} AS avg_items_per_order";
+ $column['avg_order_value'] = "{$net_total} / {$order_count} AS avg_order_value";
+ $column['avg_admin_commission'] = "SUM( CASE WHEN {$dokan_table_name}.order_type IN($types) THEN {$dokan_table_name}.admin_commission END) / {$order_count} AS avg_admin_commission";
+ $column['avg_vendor_earning'] = "SUM( CASE WHEN {$dokan_table_name}.order_type IN($types) THEN {$dokan_table_name}.vendor_earning END) / {$order_count} AS avg_vendor_earning";
+
+ return $column;
+ }
+
+ /**
+ * Adds custom select subqueries for calculating Dokan-specific totals in the analytics reports.
+ *
+ * @param array $clauses The existing SQL select clauses.
+ *
+ * @return array Modified SQL select clauses.
+ */
+ public function add_select_subquery_for_total( $clauses ) {
+ $table_name = $this->get_dokan_table();
+ $types = $this->get_order_and_refund_types_to_include();
+
+ $clauses[] = ', sum(vendor_earning) as total_vendor_earning, sum(vendor_gateway_fee) as total_vendor_gateway_fee, sum(vendor_discount) as total_vendor_discount, sum(admin_commission) as total_admin_commission, sum(admin_gateway_fee) as total_admin_gateway_fee, sum(admin_discount) as total_admin_discount, sum(admin_subsidy) as total_admin_subsidy';
+ $clauses[] = ", SUM( {$table_name}.admin_commission ) / SUM( CASE WHEN {$table_name}.order_type IN($types) THEN 1 ELSE 0 END ) AS avg_admin_commission";
+ $clauses[] = ", SUM( {$table_name}.vendor_earning ) / SUM( CASE WHEN {$table_name}.order_type IN($types) THEN 1 ELSE 0 END ) AS avg_vendor_earning";
+
+ return $clauses;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function add_where_subquery_for_vendor_filter( array $clauses ): array {
+ return parent::add_where_subquery_for_vendor_filter( $clauses );
+ }
+}
diff --git a/includes/Analytics/Reports/Orders/Stats/ScheduleListener.php b/includes/Analytics/Reports/Orders/Stats/ScheduleListener.php
new file mode 100644
index 0000000000..645d60d41e
--- /dev/null
+++ b/includes/Analytics/Reports/Orders/Stats/ScheduleListener.php
@@ -0,0 +1,54 @@
+register_hooks();
+ }
+
+ /**
+ * Register hooks for WooCommerce analytics order events.
+ *
+ * @return void
+ */
+ public function register_hooks(): void {
+ add_action( 'woocommerce_analytics_update_order_stats', [ $this, 'sync_dokan_order' ] );
+ add_action( 'woocommerce_analytics_delete_order_stats', [ $this, 'delete_order' ] );
+ }
+
+ /**
+ * Sync Dokan order data when WooCommerce analytics updates order stats.
+ *
+ * @param int $order_id The ID of the order being updated.
+ *
+ * @return void
+ */
+ public function sync_dokan_order( $order_id ) {
+ return \WeDevs\Dokan\Analytics\Reports\Orders\Stats\DataStore::sync_order( $order_id );
+ }
+
+ /**
+ * Delete Dokan order data when WooCommerce deletes an order.
+ *
+ * @param int $order_id The ID of the order being deleted.
+ *
+ * @return void
+ */
+ public function delete_order( $order_id ) {
+ return \WeDevs\Dokan\Analytics\Reports\Orders\Stats\DataStore::delete_order( $order_id );
+ }
+}
diff --git a/includes/Analytics/Reports/Orders/Stats/WcDataStore.php b/includes/Analytics/Reports/Orders/Stats/WcDataStore.php
new file mode 100644
index 0000000000..c410c65173
--- /dev/null
+++ b/includes/Analytics/Reports/Orders/Stats/WcDataStore.php
@@ -0,0 +1,33 @@
+clear_all_clauses();
+ unset( $this->subquery );
+ $this->total_query = new WcSqlQuery( $this->context . '_total' );
+ $this->total_query->add_sql_clause( 'from', self::get_db_table_name() );
+
+ $this->interval_query = new WcSqlQuery( $this->context . '_interval' );
+ $this->interval_query->add_sql_clause( 'from', self::get_db_table_name() );
+ $this->interval_query->add_sql_clause( 'group_by', 'time_interval' );
+ }
+}
diff --git a/includes/Analytics/Reports/Products/QueryFilter.php b/includes/Analytics/Reports/Products/QueryFilter.php
new file mode 100644
index 0000000000..c56062ae77
--- /dev/null
+++ b/includes/Analytics/Reports/Products/QueryFilter.php
@@ -0,0 +1,34 @@
+clear_all_clauses();
+ $this->total_query = new WcSqlQuery( $this->context . '_total' );
+ $this->total_query->add_sql_clause( 'from', self::get_db_table_name() );
+
+ $this->interval_query = new WcSqlQuery( $this->context . '_interval' );
+ $this->interval_query->add_sql_clause( 'from', self::get_db_table_name() );
+ $this->interval_query->add_sql_clause( 'group_by', 'time_interval' );
+ }
+}
diff --git a/includes/Analytics/Reports/Stock/QueryFilter.php b/includes/Analytics/Reports/Stock/QueryFilter.php
new file mode 100644
index 0000000000..1abee9f339
--- /dev/null
+++ b/includes/Analytics/Reports/Stock/QueryFilter.php
@@ -0,0 +1,60 @@
+get_route() === '/wc-analytics/reports/stock' ) {
+ add_filter( 'posts_clauses', array( $this, 'add_author_clause' ), 10, 2 );
+ }
+
+ return $result;
+ }
+
+ /**
+ * Apply seller ID query param to where SQL Clause.
+ *
+ * @param WP_Query $wp_query
+ * @return array
+ */
+ public function add_author_clause( $args, $wp_query ) {
+ global $wpdb;
+
+ $vendor_id = $this->get_vendor_id();
+
+ if ( $vendor_id ) {
+ $args['where'] = $args['where'] . $wpdb->prepare(
+ " AND {$wpdb->posts}.post_author = %d ",
+ $vendor_id
+ );
+ }
+
+ return $args;
+ }
+}
diff --git a/includes/Analytics/Reports/Stock/Stats/WcDataStore.php b/includes/Analytics/Reports/Stock/Stats/WcDataStore.php
new file mode 100644
index 0000000000..4c7e359678
--- /dev/null
+++ b/includes/Analytics/Reports/Stock/Stats/WcDataStore.php
@@ -0,0 +1,177 @@
+get_vendor_id();
+
+ $report_data = array();
+ $cache_expire = DAY_IN_SECONDS * 30;
+ // Set seller specific key.
+ $low_stock_transient_name = 'wc_admin_stock_count_lowstock' . $vendor_id;
+ $low_stock_count = get_transient( $low_stock_transient_name );
+
+ if ( false === $low_stock_count ) {
+ $low_stock_count = $this->get_low_stock_count();
+ set_transient( $low_stock_transient_name, $low_stock_count, $cache_expire );
+ } else {
+ $low_stock_count = intval( $low_stock_count );
+ }
+
+ $report_data['lowstock'] = $low_stock_count;
+
+ $status_options = wc_get_product_stock_status_options();
+ foreach ( $status_options as $status => $label ) {
+ // Set seller specific key.
+ $transient_name = 'wc_admin_stock_count_' . $status . $vendor_id;
+ $count = get_transient( $transient_name );
+ if ( false === $count ) {
+ $count = $this->get_count( $status );
+ set_transient( $transient_name, $count, $cache_expire );
+ } else {
+ $count = intval( $count );
+ }
+ $report_data[ $status ] = $count;
+ }
+
+ // Set seller specific key.
+ $product_count_transient_name = 'wc_admin_product_count' . $vendor_id;
+ $product_count = get_transient( $product_count_transient_name );
+ if ( false === $product_count ) {
+ $product_count = $this->get_product_count();
+ set_transient( $product_count_transient_name, $product_count, $cache_expire );
+ } else {
+ $product_count = intval( $product_count );
+ }
+ $report_data['products'] = $product_count;
+ return $report_data;
+ }
+
+ /**
+ * Get low stock count (products with stock < low stock amount, but greater than no stock amount).
+ *
+ * @phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
+ *
+ *
+ * @return int Low stock count.
+ */
+ protected function get_low_stock_count() {
+ global $wpdb;
+
+ $no_stock_amount = absint( max( get_option( 'woocommerce_notify_no_stock_amount' ), 0 ) );
+ $low_stock_amount = absint( max( get_option( 'woocommerce_notify_low_stock_amount' ), 1 ) );
+ $vendor_where = $this->get_vendor_where_query();
+
+ return (int) $wpdb->get_var(
+ $wpdb->prepare(
+ "
+ SELECT count( DISTINCT posts.ID ) FROM {$wpdb->posts} posts
+ LEFT JOIN {$wpdb->wc_product_meta_lookup} wc_product_meta_lookup ON posts.ID = wc_product_meta_lookup.product_id
+ LEFT JOIN {$wpdb->postmeta} low_stock_amount_meta ON posts.ID = low_stock_amount_meta.post_id AND low_stock_amount_meta.meta_key = '_low_stock_amount'
+ WHERE posts.post_type IN ( 'product', 'product_variation' )
+ AND wc_product_meta_lookup.stock_quantity IS NOT NULL
+ AND wc_product_meta_lookup.stock_status = 'instock'
+ AND (
+ (
+ low_stock_amount_meta.meta_value > ''
+ AND wc_product_meta_lookup.stock_quantity <= CAST(low_stock_amount_meta.meta_value AS SIGNED)
+ AND wc_product_meta_lookup.stock_quantity > %d
+ )
+ OR (
+ (
+ low_stock_amount_meta.meta_value IS NULL OR low_stock_amount_meta.meta_value <= ''
+ )
+ AND wc_product_meta_lookup.stock_quantity <= %d
+ AND wc_product_meta_lookup.stock_quantity > %d
+ )
+ )
+ {$vendor_where}
+ ",
+ $no_stock_amount,
+ $low_stock_amount,
+ $no_stock_amount
+ )
+ );
+ }
+
+ /**
+ * Get count for the passed in stock status.
+ *
+ * @param string $status Status slug.
+ * @return int Count.
+ */
+ protected function get_count( $status ) {
+ global $wpdb;
+
+ $vendor_where = $this->get_vendor_where_query();
+
+ return (int) $wpdb->get_var(
+ $wpdb->prepare(// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
+ "
+ SELECT count( DISTINCT posts.ID ) FROM {$wpdb->posts} posts
+ LEFT JOIN {$wpdb->wc_product_meta_lookup} wc_product_meta_lookup ON posts.ID = wc_product_meta_lookup.product_id
+ WHERE posts.post_type IN ( 'product', 'product_variation' )
+ AND wc_product_meta_lookup.stock_status = %s {$vendor_where}
+ ",
+ $status
+ )
+ );
+ }
+
+ /**
+ * Get product count for the store.
+ *
+ * @return int Product count.
+ */
+ protected function get_product_count() {
+ $query_args = array();
+ $query_args['post_type'] = array( 'product', 'product_variation' );
+ $vendor_id = $this->get_vendor_id();
+
+ if ( $vendor_id ) {
+ $query_args['author'] = $vendor_id;
+ }
+
+ $query = new \WP_Query();
+ $query->query( $query_args );
+
+ return intval( $query->found_posts );
+ }
+
+ protected function get_vendor_id(): int {
+ return (int) dokan()->get_container()->get( \WeDevs\Dokan\Analytics\Reports\Stock\QueryFilter::class )->get_vendor_id();
+ }
+
+ protected function get_vendor_where_query() {
+ $vendor_id = $this->get_vendor_id();
+ $where = '';
+
+ if ( $vendor_id ) {
+ global $wpdb;
+
+ $where = $wpdb->prepare(
+ ' AND posts.post_author = %d ',
+ $vendor_id
+ );
+ }
+
+ return $where;
+ }
+}
diff --git a/includes/Analytics/Reports/Taxes/QueryFilter.php b/includes/Analytics/Reports/Taxes/QueryFilter.php
new file mode 100644
index 0000000000..aa6b6d27c6
--- /dev/null
+++ b/includes/Analytics/Reports/Taxes/QueryFilter.php
@@ -0,0 +1,35 @@
+context ) {
+ return $column;
+ }
+
+ $table_name = $this->get_dokan_table();
+ $types = $this->get_order_types_for_sql_excluding_refunds();
+
+ $column['orders_count'] = "SUM( CASE WHEN {$table_name}.order_type IN ($types) THEN 1 ELSE 0 END ) as orders_count";
+
+ return $column;
+ }
+}
diff --git a/includes/Analytics/Reports/Taxes/Stats/WcDataStore.php b/includes/Analytics/Reports/Taxes/Stats/WcDataStore.php
new file mode 100644
index 0000000000..a76a5d052a
--- /dev/null
+++ b/includes/Analytics/Reports/Taxes/Stats/WcDataStore.php
@@ -0,0 +1,33 @@
+clear_all_clauses();
+ unset( $this->subquery );
+ $this->total_query = new WcSqlQuery( $this->context . '_total' );
+ $this->total_query->add_sql_clause( 'from', self::get_db_table_name() );
+
+ $this->interval_query = new WcSqlQuery( $this->context . '_interval' );
+ $this->interval_query->add_sql_clause( 'from', self::get_db_table_name() );
+ $this->interval_query->add_sql_clause( 'group_by', 'time_interval' );
+ }
+}
diff --git a/includes/Analytics/Reports/Variations/QueryFilter.php b/includes/Analytics/Reports/Variations/QueryFilter.php
new file mode 100644
index 0000000000..d17f32b94b
--- /dev/null
+++ b/includes/Analytics/Reports/Variations/QueryFilter.php
@@ -0,0 +1,35 @@
+ admin_url( 'admin-ajax.php' ),
@@ -59,7 +60,8 @@ public function enqueue_admin_scripts( $hook ) {
// load vue app inside the parent menu only
if ( 'toplevel_page_dokan' === $hook ) {
- $localize_script = $this->get_admin_localized_scripts();
+ $localize_script = $this->get_admin_localized_scripts();
+ $vue_admin_localize_script = $this->get_vue_admin_localized_scripts();
// Load common styles and scripts
wp_enqueue_script( 'dokan-tinymce' );
@@ -89,6 +91,7 @@ public function enqueue_admin_scripts( $hook ) {
// fire the admin app
wp_enqueue_script( 'dokan-vue-admin' );
+ wp_localize_script( 'dokan-vue-vendor', 'dokanAdmin', $vue_admin_localize_script );
if ( version_compare( $wp_version, '5.3', '<' ) ) {
wp_enqueue_style( 'dokan-wp-version-before-5-3' );
@@ -211,6 +214,11 @@ public function get_vue_admin_routes() {
'name' => 'Vendors',
'component' => 'Vendors',
],
+ [
+ 'path' => '/vendors/:id',
+ 'name' => 'VendorSingle',
+ 'component' => 'VendorSingle',
+ ],
[
'path' => '/dummy-data',
'name' => 'DummyData',
@@ -348,7 +356,7 @@ public function get_styles() {
'src' => DOKAN_PLUGIN_ASSEST . '/css/dokan-admin-product-style.css',
'version' => filemtime( DOKAN_DIR . '/assets/css/dokan-admin-product-style.css' ),
],
- 'dokan-tailwind' => [
+ 'dokan-tailwind' => [
'src' => DOKAN_PLUGIN_ASSEST . '/css/dokan-tailwind.css',
'version' => filemtime( DOKAN_DIR . '/assets/css/dokan-tailwind.css' ),
],
@@ -368,17 +376,18 @@ public function get_scripts() {
$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
$asset_url = DOKAN_PLUGIN_ASSEST;
$asset_path = DOKAN_DIR . '/assets/';
- $bootstrap_deps = [ 'dokan-vue-vendor', 'dokan-i18n-jed', 'wp-hooks' ];
+ $bootstrap_deps = [ 'dokan-vue-vendor', 'wp-i18n', 'wp-hooks' ];
$scripts = [
'jquery-tiptip' => [
'src' => WC()->plugin_url() . '/assets/js/jquery-tiptip/jquery.tipTip' . $suffix . '.js',
'deps' => [ 'jquery' ],
],
- 'dokan-i18n-jed' => [
- 'src' => $asset_url . '/vendors/i18n/jed.js',
- 'deps' => [ 'jquery' ],
- ],
+ // Remove `dokan-i18n-jed` in next release.
+ 'dokan-i18n-jed' => [
+ 'src' => $asset_url . '/vendors/i18n/jed.js',
+ 'deps' => [ 'jquery', 'wp-i18n' ],
+ ],
'dokan-accounting' => [
'src' => WC()->plugin_url() . '/assets/js/accounting/accounting.min.js',
'deps' => [ 'jquery' ],
@@ -472,23 +481,23 @@ public function get_scripts() {
],
'dokan-admin' => [
'src' => $asset_url . '/js/dokan-admin.js',
- 'deps' => [ 'jquery', 'dokan-i18n-jed' ],
+ 'deps' => [ 'jquery', 'wp-i18n' ],
'version' => filemtime( $asset_path . 'js/dokan-admin.js' ),
],
'dokan-vendor-registration' => [
'src' => $asset_url . '/js/vendor-registration.js',
- 'deps' => [ 'dokan-form-validate', 'jquery', 'speaking-url', 'dokan-i18n-jed' ],
+ 'deps' => [ 'dokan-form-validate', 'jquery', 'speaking-url', 'wp-i18n' ],
'version' => filemtime( $asset_path . 'js/vendor-registration.js' ),
],
'dokan-script' => [
'src' => $asset_url . '/js/dokan.js',
- 'deps' => [ 'imgareaselect', 'customize-base', 'customize-model', 'dokan-i18n-jed', 'jquery-tiptip', 'moment', 'dokan-date-range-picker', 'dokan-accounting' ],
+ 'deps' => [ 'imgareaselect', 'customize-base', 'customize-model', 'wp-i18n', 'jquery-tiptip', 'moment', 'dokan-date-range-picker', 'dokan-accounting' ],
'version' => filemtime( $asset_path . 'js/dokan.js' ),
],
'dokan-vue-vendor' => [
'src' => $asset_url . '/js/vue-vendor.js',
'version' => filemtime( $asset_path . 'js/vue-vendor.js' ),
- 'deps' => [ 'dokan-i18n-jed', 'dokan-tinymce-plugin', 'dokan-chart' ],
+ 'deps' => [ 'wp-i18n', 'dokan-tinymce-plugin', 'dokan-chart' ],
],
'dokan-vue-bootstrap' => [
'src' => $asset_url . '/js/vue-bootstrap.js',
@@ -497,23 +506,23 @@ public function get_scripts() {
],
'dokan-vue-admin' => [
'src' => $asset_url . '/js/vue-admin.js',
- 'deps' => [ 'jquery', 'jquery-ui-datepicker', 'dokan-i18n-jed', 'dokan-vue-vendor', 'dokan-vue-bootstrap', 'selectWoo' ],
+ 'deps' => [ 'jquery', 'jquery-ui-datepicker', 'wp-i18n', 'dokan-vue-vendor', 'dokan-vue-bootstrap', 'selectWoo' ],
'version' => filemtime( $asset_path . 'js/vue-admin.js' ),
],
'dokan-vue-frontend' => [
'src' => $asset_url . '/js/vue-frontend.js',
- 'deps' => [ 'jquery', 'dokan-i18n-jed', 'dokan-vue-vendor', 'dokan-vue-bootstrap' ],
+ 'deps' => [ 'jquery', 'wp-i18n', 'dokan-vue-vendor', 'dokan-vue-bootstrap' ],
'version' => filemtime( $asset_path . 'js/vue-frontend.js' ),
],
'dokan-login-form-popup' => [
'src' => $asset_url . '/js/login-form-popup.js',
- 'deps' => [ 'dokan-modal', 'dokan-i18n-jed' ],
+ 'deps' => [ 'dokan-modal', 'wp-i18n' ],
'version' => filemtime( $asset_path . 'js/login-form-popup.js' ),
],
'dokan-sweetalert2' => [
'src' => $asset_url . '/vendors/sweetalert2/sweetalert2.all.min.js',
- 'deps' => [ 'dokan-modal', 'dokan-i18n-jed' ],
+ 'deps' => [ 'dokan-modal', 'wp-i18n' ],
'version' => filemtime( $asset_path . 'vendors/sweetalert2/sweetalert2.all.min.js' ),
],
'dokan-util-helper' => [
@@ -527,6 +536,11 @@ public function get_scripts() {
'deps' => [ 'jquery', 'dokan-vue-vendor' ],
'version' => filemtime( $asset_path . 'js/dokan-promo-notice.js' ),
],
+ 'dokan-admin-notice-js' => [
+ 'src' => $asset_url . '/js/dokan-admin-notice.js',
+ 'deps' => [ 'jquery', 'dokan-vue-vendor' ],
+ 'version' => filemtime( $asset_path . 'js/dokan-admin-notice.js' ),
+ ],
'dokan-reverse-withdrawal' => [
'src' => $asset_url . '/js/reverse-withdrawal.js',
'deps' => [ 'jquery', 'dokan-util-helper', 'dokan-vue-vendor', 'dokan-date-range-picker' ],
@@ -579,6 +593,9 @@ public function enqueue_front_scripts() {
}
}
+ $vendor = dokan()->vendor->get( dokan_get_current_user_id() );
+ $commision_settings = $vendor->get_commission_settings();
+
$default_script = [
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'dokan_reviews' ),
@@ -589,8 +606,8 @@ public function enqueue_front_scripts() {
],
'delete_confirm' => __( 'Are you sure?', 'dokan-lite' ),
'wrong_message' => __( 'Something went wrong. Please try again.', 'dokan-lite' ),
- 'vendor_percentage' => dokan_get_seller_percentage( dokan_get_current_user_id() ),
- 'commission_type' => dokan_get_commission_type( dokan_get_current_user_id() ),
+ 'vendor_percentage' => $commision_settings->get_percentage(),
+ 'commission_type' => $commision_settings->get_type(),
'rounding_precision' => wc_get_rounding_precision(),
'mon_decimal_point' => wc_get_price_decimal_separator(),
'currency_format_num_decimals' => wc_get_price_decimals(),
@@ -635,7 +652,11 @@ public function enqueue_front_scripts() {
$localize_data = array_merge( $localize_script, $vue_localize_script );
+ // Remove `dokan-i18n-jed` in next release.
wp_localize_script( 'dokan-i18n-jed', 'dokan', $localize_data );
+ wp_localize_script( 'dokan-util-helper', 'dokan', $localize_data );
+ // wp_localize_script( 'dokan-vue-bootstrap', 'dokan', $localize_data );
+ // wp_localize_script( 'dokan-script', 'dokan', $localize_data );
// localized vendor-registration script
wp_localize_script(
@@ -1083,6 +1104,7 @@ public function register_scripts( $scripts ) {
$version = isset( $script['version'] ) ? $script['version'] : DOKAN_PLUGIN_VERSION;
wp_register_script( $handle, $script['src'], $deps, $version, $in_footer );
+ wp_set_script_translations( $handle, 'dokan-lite', plugin_dir_path( DOKAN_FILE ) . 'languages' );
}
}
@@ -1162,7 +1184,6 @@ public function get_admin_localized_scripts() {
'showPromoBanner' => empty( Helper::dokan_get_promo_notices() ),
'hasNewVersion' => Helper::dokan_has_new_version(),
'proVersion' => dokan()->is_pro_exists() ? dokan_pro()->version : '',
- 'i18n' => [ 'dokan-lite' => dokan_get_jed_locale_data( 'dokan-lite', DOKAN_DIR . '/languages/' ) ],
'urls' => [
'adminRoot' => admin_url(),
'siteUrl' => home_url( '/' ),
@@ -1198,4 +1219,19 @@ public function get_admin_localized_scripts() {
]
);
}
+
+ /**
+ * Admin vue localized scripts
+ *
+ * @since 3.14.0
+ *
+ * @return array
+ */
+ private function get_vue_admin_localized_scripts() {
+ return apply_filters(
+ 'dokan_vue_admin_localize_script', [
+ 'commission_types' => dokan_commission_types(),
+ ]
+ );
+ }
}
diff --git a/includes/Commission.php b/includes/Commission.php
index 1cdc9041cc..cb8fcd6c72 100644
--- a/includes/Commission.php
+++ b/includes/Commission.php
@@ -4,9 +4,15 @@
use WC_Order;
use WC_Product;
+use WeDevs\Dokan\Commission\Calculator;
+use WeDevs\Dokan\Commission\Settings\DefaultSetting;
+use WeDevs\Dokan\Commission\Strategies\DefaultStrategy;
+use WeDevs\Dokan\Commission\Strategies\GlobalStrategy;
+use WeDevs\Dokan\Commission\Strategies\OrderItem;
+use WeDevs\Dokan\Commission\Strategies\Product;
+use WeDevs\Dokan\Commission\Strategies\Vendor;
use WeDevs\Dokan\ProductCategory\Helper;
use WP_Error;
-use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway;
/**
* Dokan Commission Class
@@ -42,23 +48,11 @@ class Commission {
*/
public $quantity = 0;
- /**
- * Class constructor
- *
- * @since 2.9.21
- *
- * @return void
- */
- public function __construct() {
- add_filter( 'woocommerce_order_item_get_formatted_meta_data', [ $this, 'hide_extra_data' ] );
- add_action( 'woocommerce_order_status_changed', [ $this, 'calculate_gateway_fee' ], 100 );
- add_action( 'woocommerce_thankyou_ppec_paypal', [ $this, 'calculate_gateway_fee' ] );
- add_action( 'woocommerce_paypal_payments_order_captured', [ $this, 'calculate_gateway_fee' ], 99 );
- }
-
/**
* Calculate gateway fee
*
+ * @deprecated 3.14.0 Use dokan()->fees->calculate_gateway_fee insted.
+ *
* @since 2.9.21
*
* @param int $order_id
@@ -66,91 +60,15 @@ public function __construct() {
* @return void
*/
public function calculate_gateway_fee( $order_id ) {
- global $wpdb;
- $order = wc_get_order( $order_id );
- $processing_fee = $this->get_processing_fee( $order );
-
- if ( ! $processing_fee ) {
- return;
- }
-
- foreach ( $this->get_all_order_to_be_processed( $order ) as $tmp_order ) {
- $gateway_fee_added = $tmp_order->get_meta( 'dokan_gateway_fee' );
- $vendor_earning = $this->get_earning_from_order_table( $tmp_order->get_id() );
-
- if ( is_null( $vendor_earning ) || $gateway_fee_added ) {
- continue;
- }
-
- $gateway_fee = wc_format_decimal( ( $processing_fee / $order->get_total() ) * $tmp_order->get_total() );
-
- // Ensure sub-orders also get the correct payment gateway fee (if any)
- $gateway_fee = apply_filters( 'dokan_get_processing_gateway_fee', $gateway_fee, $tmp_order, $order );
- $net_amount = $vendor_earning - $gateway_fee;
- $net_amount = apply_filters( 'dokan_orders_vendor_net_amount', $net_amount, $vendor_earning, $gateway_fee, $tmp_order, $order );
-
- // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
- $wpdb->update(
- $wpdb->dokan_orders,
- [ 'net_amount' => (float) $net_amount ],
- [ 'order_id' => $tmp_order->get_id() ],
- [ '%f' ],
- [ '%d' ]
- );
-
- $wpdb->update(
- $wpdb->dokan_vendor_balance,
- [ 'debit' => (float) $net_amount ],
- [
- 'trn_id' => $tmp_order->get_id(),
- 'trn_type' => 'dokan_orders',
- ],
- [ '%f' ],
- [ '%d', '%s' ]
- );
- // phpcs:enable
-
- $tmp_order->update_meta_data( 'dokan_gateway_fee', $gateway_fee );
- $tmp_order->save();
-
- if ( apply_filters( 'dokan_commission_log_gateway_fee_to_order_note', true, $tmp_order ) ) {
- // translators: %s: Geteway fee
- $tmp_order->add_order_note( sprintf( __( 'Payment gateway processing fee %s', 'dokan-lite' ), wc_format_decimal( $gateway_fee, 2 ) ) );
- }
- //remove cache for seller earning
- $cache_key = "get_earning_from_order_table_{$tmp_order->get_id()}_seller";
- Cache::delete( $cache_key );
-
- // remove cache for seller earning
- $cache_key = "get_earning_from_order_table_{$tmp_order->get_id()}_admin";
- Cache::delete( $cache_key );
- }
- }
-
- /**
- * Hide extra meta data
- *
- * @since 2.9.21
- *
- * @param array
- *
- * @return array
- */
- public function hide_extra_data( $formatted_meta ) {
- $meta_to_hide = [ '_dokan_commission_rate', '_dokan_commission_type', '_dokan_additional_fee' ];
-
- foreach ( $formatted_meta as $key => $meta ) {
- if ( in_array( $meta->key, $meta_to_hide, true ) ) {
- unset( $formatted_meta[ $key ] );
- }
- }
-
- return $formatted_meta;
+ _deprecated_function( __METHOD__, '3.14.0', 'dokan()->fees->calculate_gateway_fee()' );
+ dokan()->fees->calculate_gateway_fee( $order_id );
}
/**
* Set order id
*
+ * @deprecated 3.14.0
+ *
* @since 2.9.21
*
* @param int $id
@@ -158,12 +76,15 @@ public function hide_extra_data( $formatted_meta ) {
* @return void
*/
public function set_order_id( $id ) {
+ _deprecated_function( __METHOD__, '3.14.0' );
$this->order_id = $id;
}
/**
* Set order line item id
*
+ * @deprecated 3.14.0
+ *
* @since 3.8.0
*
* @param int $item_id
@@ -171,34 +92,43 @@ public function set_order_id( $id ) {
* @return void
*/
public function set_order_item_id( $item_id ) {
+ _deprecated_function( __METHOD__, '3.14.0' );
$this->order_item_id = absint( $item_id );
}
/**
* Get order id
*
+ * @deprecated 3.14.0
+ *
* @since 2.9.21
*
* @return int
*/
public function get_order_id() {
+ _deprecated_function( __METHOD__, '3.14.0' );
return $this->order_id;
}
/**
* Get order line item id
*
+ * @deprecated 3.14.0
+ *
* @since 3.8.0
*
* @return int
*/
public function get_order_item_id() {
+ _deprecated_function( __METHOD__, '3.14.0' );
return $this->order_item_id;
}
/**
* Set order quantity
*
+ * @deprecated 3.14.0
+ *
* @since 2.9.21
*
* @param int $number
@@ -206,17 +136,21 @@ public function get_order_item_id() {
* @return void
*/
public function set_order_qunatity( $number ) {
+ _deprecated_function( __METHOD__, '3.14.0' );
$this->quantity = $number;
}
/**
* Get order quantity
*
+ * @deprecated 3.14.0
+ *
* @since 2.9.21
*
* @return int
*/
public function get_order_qunatity() {
+ _deprecated_function( __METHOD__, '3.14.0' );
return $this->quantity;
}
@@ -244,10 +178,17 @@ public function get_earning_by_product( $product, $context = 'seller', $price =
$vendor_id = (int) dokan_get_vendor_by_product( $product, true );
$product_id = $product->get_id();
- $earning = $this->calculate_commission( $product_id, $product_price, $vendor_id );
- $earning = 'admin' === $context ? $product_price - $earning : $earning;
+ $commission = $this->get_commission(
+ [
+ 'product_id' => $product_id,
+ 'total_amount' => $product_price,
+ 'total_quantity' => 1,
+ 'vendor_id' => $vendor_id,
+ ]
+ );
- return apply_filters( 'dokan_get_earning_by_product', $earning, $product, $context );
+ $commission_or_earning = 'admin' === $context ? $commission->get_admin_commission() : $commission->get_vendor_earning();
+ return apply_filters( 'dokan_get_earning_by_product', $commission_or_earning, $product, $context );
}
/**
@@ -257,7 +198,7 @@ public function get_earning_by_product( $product, $context = 'seller', $price =
* @since 3.7.19 Shipping tax recipient support added.
*
* @param int|WC_Order $order Order.
- * @param string $context
+ * @param string $context Accepted values are `admin`, `seller`
*
* @return float|void|WP_Error|null on failure
*/
@@ -279,202 +220,60 @@ public function get_earning_by_order( $order, $context = 'seller' ) {
$saved_admin_fee = $order->get_meta( '_dokan_admin_fee', true );
if ( $saved_admin_fee !== '' ) {
- $saved_fee = ( 'seller' === $context ) ? $order->get_total() - $saved_admin_fee : $saved_admin_fee;
+ $saved_fee = ( 'seller' === $context ) ? floatval( $order->get_total() ) - floatval( $saved_admin_fee ) : $saved_admin_fee;
return apply_filters( 'dokan_order_admin_commission', $saved_fee, $order );
}
- // Set user passed `order_id`
- $this->set_order_id( $order->get_id() );
-
// get earning from order table
- $earning = $this->get_earning_from_order_table( $order->get_id(), $context );
- if ( ! is_null( $earning ) ) {
- return $earning;
+ $earning_or_commission = $this->get_earning_from_order_table( $order->get_id(), $context );
+ if ( ! is_null( $earning_or_commission ) ) {
+ return $earning_or_commission;
}
- $earning = 0;
+ $earning_or_commission = 0;
$vendor_id = (int) $order->get_meta( '_dokan_vendor_id' );
foreach ( $order->get_items() as $item_id => $item ) {
- // Set user passed `order_id` so that we can track if any commission_rate has been saved previously.
- // Specially on order table `re-generation`.
- $this->set_order_item_id( $item->get_id() );
-
- // Set line item quantity so that we can use it later in the `\WeDevs\Dokan\Commission::prepare_for_calculation()` method
- $this->set_order_qunatity( $item->get_quantity() );
-
$product_id = $item->get_variation_id() ? $item->get_variation_id() : $item->get_product_id();
$refund = $order->get_total_refunded_for_item( $item_id );
- if ( dokan_is_admin_coupon_applied( $order, $vendor_id, $product_id ) ) {
- $earning += dokan_pro()->coupon->get_earning_by_admin_coupon( $order, $item, $context, $item->get_product(), $vendor_id, $refund );
+ if ( dokan_is_admin_coupon_applied( $order, $vendor_id, $product_id ) && dokan()->is_pro_exists() ) {
+ $earning_or_commission += dokan_pro()->coupon->get_earning_by_admin_coupon( $order, $item, $context, $item->get_product(), $vendor_id, $refund );
} else {
$item_price = apply_filters( 'dokan_earning_by_order_item_price', $item->get_total(), $item, $order );
- $item_price = $refund ? $item_price - $refund : $item_price;
-
- $item_earning = $this->calculate_commission( $product_id, $item_price, $vendor_id );
- $item_earning = 'admin' === $context ? $item_price - $item_earning : $item_earning;
- $earning += $item_earning;
+ $item_price = $refund ? floatval( $item_price ) - floatval( $refund ) : $item_price;
+
+ $item_earning_or_commission = $this->get_commission(
+ [
+ 'order_item_id' => $item->get_id(),
+ 'product_id' => $product_id,
+ 'total_amount' => $item_price,
+ 'total_quantity' => $item->get_quantity(),
+ 'vendor_id' => $vendor_id,
+ ],
+ true
+ );
+ $item_earning_or_commission = 'admin' === $context ? $item_earning_or_commission->get_admin_commission() : $item_earning_or_commission->get_vendor_earning();
+ $earning_or_commission += floatval( $item_earning_or_commission );
}
-
- // reset order item id to zero
- $this->set_order_item_id( 0 );
- // set order quantity to zero
- $this->set_order_qunatity( 0 );
- }
-
- // reset order id to zero, we don't need this value anymore
- $this->set_order_id( 0 );
-
- if ( $context === $this->get_shipping_fee_recipient( $order ) ) {
- $earning += wc_format_decimal( floatval( $order->get_shipping_total() ) ) - $order->get_total_shipping_refunded();
- }
-
- if ( $context === $this->get_tax_fee_recipient( $order->get_id() ) ) {
- $earning += ( ( $order->get_total_tax() - $order->get_total_tax_refunded() ) - ( $order->get_shipping_tax() - $this->get_total_shipping_tax_refunded( $order ) ) );
}
- if ( $context === $this->get_shipping_tax_fee_recipient( $order ) ) {
- $earning += ( $order->get_shipping_tax() - $this->get_total_shipping_tax_refunded( $order ) );
+ if ( $context === dokan()->fees->get_shipping_fee_recipient( $order ) ) {
+ $earning_or_commission += $order->get_shipping_total() - $order->get_total_shipping_refunded();
}
- $earning = apply_filters_deprecated( 'dokan_order_admin_commission', [ $earning, $order, $context ], '2.9.21', 'dokan_get_earning_by_order' );
-
- return apply_filters( 'dokan_get_earning_by_order', $earning, $order, $context );
- }
-
- /**
- * Get global rate
- *
- * @since 2.9.21
- *
- * @return float
- */
- public function get_global_rate() {
- return $this->validate_rate( dokan_get_option( 'admin_percentage', 'dokan_selling', 0 ) );
- }
-
- /**
- * Get vendor wise commission rate
- *
- * @since 2.9.21
- *
- * @param int $vendor_id
- *
- * @return float
- */
- public function get_vendor_wise_rate( $vendor_id ) {
- return $this->validate_rate( get_user_meta( $vendor_id, 'dokan_admin_percentage', true ) );
- }
-
- /**
- * Get product wise commission rate
- *
- * @since 2.9.21
- *
- * @param int $product_id
- *
- * @return float
- */
- public function get_product_wise_rate( $product_id ) {
- return $this->validate_rate( get_post_meta( $this->validate_product_id( $product_id ), '_per_product_admin_commission', true ) );
- }
-
- /**
- * Validate product id (if it's a variable product, return it's parent id)
- *
- * @since 2.9.21
- *
- * @param int $product_id
- *
- * @return int
- */
- public function validate_product_id( $product_id ) {
- $product = wc_get_product( $product_id );
- if ( ! $product ) {
- return 0;
+ if ( $context === dokan()->fees->get_tax_fee_recipient( $order->get_id() ) ) {
+ $earning_or_commission += ( ( floatval( $order->get_total_tax() ) - floatval( $order->get_total_tax_refunded() ) ) - ( floatval( $order->get_shipping_tax() ) - floatval( dokan()->fees->get_total_shipping_tax_refunded( $order ) ) ) );
}
- $parent_id = $product->get_parent_id();
-
- return $parent_id ? $parent_id : $product_id;
- }
-
- /**
- * Get category wise commission rate
- *
- * @since 2.9.21
- *
- * @param int $product_id
- *
- * @return float
- */
- public function get_category_wise_rate( $product_id ) {
- $terms = Helper::get_product_chosen_category( $this->validate_product_id( $product_id ) );
-
- // Category commission will not applicable if 'Product Category Selection' is set as 'Multiple' in Dokan settings.
- if ( ! is_array( $terms ) || empty( $terms ) || count( $terms ) > 1 || ! Helper::product_category_selection_is_single() ) {
- return null;
+ if ( $context === dokan()->fees->get_shipping_tax_fee_recipient( $order ) ) {
+ $earning_or_commission += ( floatval( $order->get_shipping_tax() ) - floatval( dokan()->fees->get_total_shipping_tax_refunded( $order ) ) );
}
- $term_id = $terms[0];
- $rate = ! $terms ? null : get_term_meta( $term_id, 'per_category_admin_commission', true );
+ $earning_or_commission = apply_filters_deprecated( 'dokan_order_admin_commission', [ $earning_or_commission, $order, $context ], '2.9.21', 'dokan_get_earning_by_order' );
- return $this->validate_rate( $rate );
- }
-
- /**
- * Get global commission type
- *
- * @since 2.9.21
- *
- * @return string
- */
- public function get_global_type() {
- return dokan_get_option( 'commission_type', 'dokan_selling', 'percentage' );
- }
-
- /**
- * Get vendor wise commission type
- *
- * @since 2.9.21
- *
- * @param int $vendor_id
- *
- * @return string
- */
- public function get_vendor_wise_type( $vendor_id ) {
- return get_user_meta( $vendor_id, 'dokan_admin_percentage_type', true );
- }
-
- /**
- * Get category wise commission type
- *
- * @since 2.9.21
- *
- * @param int $product_id
- *
- * @return string
- */
- public function get_category_wise_type( $product_id ) {
- $terms = get_the_terms( $this->validate_product_id( $product_id ), 'product_cat' );
- $term_id = $terms[0]->term_id;
-
- return ! $terms ? null : get_term_meta( $term_id, 'per_category_admin_commission_type', true );
- }
-
- /**
- * Get product wise commission type
- *
- * @since 2.9.21
- *
- * @param int $product_id
- *
- * @return string
- */
- public function get_product_wise_type( $product_id ) {
- return get_post_meta( $this->validate_product_id( $product_id ), '_per_product_admin_commission_type', true );
+ return apply_filters( 'dokan_get_earning_by_order', $earning_or_commission, $order, $context );
}
/**
@@ -488,203 +287,33 @@ public function get_product_wise_type( $product_id ) {
*/
public function validate_rate( $rate ) {
if ( '' === $rate || ! is_numeric( $rate ) || $rate < 0 ) {
- return null;
+ $rate = 0.0;
}
return (float) $rate;
}
/**
- * Get global earning
- *
- * @since 2.9.21
- *
- * @param float $product_price
- *
- * @return float|null on failure
- */
- public function get_global_earning( $product_price ) {
- return $this->prepare_for_calculation( __FUNCTION__, null, $product_price );
- }
-
- /**
- * Get vendor wise earning
- *
- * @since 2.9.21
- *
- * @param int $vendor_id
- * @param float $product_price
- *
- * @return float|null on failure
- */
- public function get_vendor_wise_earning( $vendor_id, $product_price ) {
- return $this->prepare_for_calculation( __FUNCTION__, $vendor_id, $product_price );
- }
-
- /**
- * Get category wise earning
- *
- * @since 2.9.21
- *
- * @param int $product_id
- * @param float $product_price
- *
- * @return float|null on failure
- */
- public function get_category_wise_earning( $product_id, $product_price ) {
- if ( ! dokan()->is_pro_exists() ) {
- return null;
- }
-
- return $this->prepare_for_calculation( __FUNCTION__, $product_id, $product_price );
- }
-
- /**
- * Get product wise earning
- *
- * @since 2.9.21
- *
- * @param int $product_id
- * @param int $product_price
- *
- * @return float|null on failure
- */
- public function get_product_wise_earning( $product_id, $product_price ) {
- if ( ! dokan()->is_pro_exists() ) {
- return null;
- }
-
- return $this->prepare_for_calculation( __FUNCTION__, $product_id, $product_price );
- }
-
- /**
- * Prepare for calculation
- *
- * @since 2.9.21
- *
- * @param callable $callable
- * @param int $product_id
- * @param float $product_price
- *
- * @return float | null on failure
- */
- public function prepare_for_calculation( $callable, $product_id = 0, $product_price = 0 ) {
- do_action( 'dokan_before_prepare_for_calculation', $callable, $product_id, $product_price, $this );
-
- // If an order has been purchased previously, calculate the earning with the previously stated commission rate.
- // It's important cause commission rate may get changed by admin during the order table `re-generation`.
- $commission_rate = $this->get_order_item_id() ? wc_get_order_item_meta( $this->get_order_item_id(), '_dokan_commission_rate', true ) : null;
- $commission_type = $this->get_order_item_id() ? wc_get_order_item_meta( $this->get_order_item_id(), '_dokan_commission_type', true ) : null;
- $additional_fee = $this->get_order_item_id() ? wc_get_order_item_meta( $this->get_order_item_id(), '_dokan_additional_fee', true ) : null;
-
- if ( empty( $commission_rate ) ) { // this is the first time we are calculating commission for this order
- // Set default value as null
- $commission_rate = null;
- $commission_type = null;
- $additional_fee = null;
-
- $func_rate = str_replace( 'earning', 'rate', $callable );
- $func_type = str_replace( 'earning', 'type', $callable );
- $func_fee = str_replace( 'earning', 'additional_fee', $callable );
-
- // get[product,category,vendor,global]_wise_rate
- if ( is_callable( [ $this, $func_rate ] ) ) {
- $commission_rate = $this->$func_rate( $product_id );
- }
-
- if ( is_null( $commission_rate ) ) {
- return $commission_rate;
- }
-
- // get[product,category,vendor,global]_wise_type
- if ( is_callable( [ $this, $func_type ] ) ) {
- $commission_type = $this->$func_type( $product_id );
- }
-
- // get[product,category,vendor,global]_wise_additional_fee
- if ( is_callable( [ $this, $func_fee ] ) ) {
- $additional_fee = $this->$func_fee( $product_id );
- }
-
- // Saving applied commission rates and types for current order item in order item meta.
- wc_add_order_item_meta( $this->get_order_item_id(), '_dokan_commission_rate', $commission_rate );
- wc_add_order_item_meta( $this->get_order_item_id(), '_dokan_commission_type', $commission_type );
- wc_add_order_item_meta( $this->get_order_item_id(), '_dokan_additional_fee', $additional_fee );
- }
-
- /**
- * If dokan pro doesn't exist but combine commission is found in database due to it was active before
- * Then make the commission type 'flat'. We are making it flat cause when commission type is there in database
- * But in option field, looks like flat commission is selected.
- *
- * @since 3.0.0
- */
- if ( ! dokan()->is_pro_exists() && 'combine' === $commission_type ) {
- $commission_type = 'flat';
- }
-
- $earning = null;
-
- if ( 'flat' === $commission_type ) {
- if ( (int) $this->get_order_qunatity() > 1 ) {
- $commission_rate *= apply_filters( 'dokan_commission_multiply_by_order_quantity', $this->get_order_qunatity() );
- }
-
- // If `_dokan_item_total` returns value non-falsy value, it means the request is comming from the `order refund requst`.
- // As it's `flat` fee, So modify `commission rate` to the correct amount to get refunded. (commission_rate/item_total)*product_price.
- $item_total = 0;
- if ( $this->get_order_id() ) {
- $order = wc_get_order( $this->get_order_id() );
- $item_total = $order->get_meta( '_dokan_item_total', true );
- }
-
- if ( $item_total ) {
- $commission_rate = ( $commission_rate / $item_total ) * $product_price;
- }
-
- $earning = $product_price - $commission_rate;
- } elseif ( 'percentage' === $commission_type ) {
- $earning = ( $product_price * $commission_rate ) / 100;
- $earning = $product_price - $earning;
-
- // vendor will get 100 percent if commission rate > 100
- if ( $commission_rate > 100 ) {
- $earning = $product_price;
- }
- }
-
- return apply_filters( 'dokan_prepare_for_calculation', $earning, $commission_rate, $commission_type, $additional_fee, $product_price, $this->get_order_id() );
- }
-
- /**
- * Get product wise additional fee
- *
- * @since 2.9.21
- *
- * @param int $product_id
+ * Get vendor wise additional rate
*
- * @return float|null on failure
- */
- public function get_product_wise_additional_fee( $product_id ) {
- return $this->validate_rate( get_post_meta( $this->validate_product_id( $product_id ), '_per_product_admin_additional_fee', true ) );
- }
-
- /**
- * Get global wise additional fee
+ * @deprecated 3.14.0 Use dokan()->vendor->get( $vendor_id )->get_commission_settings()->get_percentage() insted
*
* @since 2.9.21
*
- * @param int $product_id
+ * @param int $vendor_id
*
* @return float|null on failure
*/
- public function get_global_additional_fee() {
- return $this->validate_rate( dokan_get_option( 'additional_fee', 'dokan_selling', 0 ) );
+ public function get_vendor_wise_rate( $vendor_id ) {
+ _deprecated_function( __METHOD__, '3.14.0', 'dokan()->vendor->get( $vendor_id )->get_commission_settings()->get_percentage()' );
+ return dokan()->vendor->get( $vendor_id )->get_commission_settings()->get_percentage();
}
/**
* Get vendor wise additional fee
*
+ * @deprecated 3.14.0 Use dokan()->vendor->get( $vendor_id )->get_commission_settings()->get_flat() instead
+ *
* @since 2.9.21
*
* @param int $vendor_id
@@ -692,29 +321,24 @@ public function get_global_additional_fee() {
* @return float|null on failure
*/
public function get_vendor_wise_additional_fee( $vendor_id ) {
- return $this->validate_rate( get_user_meta( $vendor_id, 'dokan_admin_additional_fee', true ) );
+ _deprecated_function( __METHOD__, '3.14.0', 'dokan()->vendor->get( $vendor_id )->get_commission_settings()->get_flat()' );
+ return dokan()->vendor->get( $vendor_id )->get_commission_settings()->get_flat();
}
/**
- * Get category wise additional fee
+ * Get vendor wise additional type
+ *
+ * @deprecated 3.14.0 Use dokan()->vendor->get( $vendor_id )->get_commission_settings()->get_type() instead
*
* @since 2.9.21
*
- * @param int $product_id
+ * @param int $vendor_id
*
* @return float|null on failure
*/
- public function get_category_wise_additional_fee( $product_id ) {
- $terms = get_the_terms( $this->validate_product_id( $product_id ), 'product_cat' );
-
- if ( empty( $terms ) ) {
- return null;
- }
-
- $term_id = $terms[0]->term_id;
- $rate = ! $terms ? null : get_term_meta( $term_id, 'per_category_admin_additional_fee', true );
-
- return $this->validate_rate( $rate );
+ public function get_vendor_wise_type( $vendor_id ) {
+ _deprecated_function( __METHOD__, '3.14.0', 'dokan()->vendor->get( $vendor_id )->get_commission_settings()->get_type()' );
+ return dokan()->vendor->get( $vendor_id )->get_commission_settings()->get_type();
}
/**
@@ -759,6 +383,8 @@ public function get_earning_from_order_table( $order_id, $context = 'seller' ) {
/**
* Get shipping fee recipient
*
+ * @deprecated 3.14.0 Use dokan()->fees->get_shipping_fee_recipient() instead
+ *
* @since 2.9.21
* @since 3.4.1 introduced the shipping fee recipient hook
*
@@ -767,30 +393,16 @@ public function get_earning_from_order_table( $order_id, $context = 'seller' ) {
* @return string
*/
public function get_shipping_fee_recipient( $order ) {
- if ( is_numeric( $order ) ) {
- $order = wc_get_order( $order );
- }
-
- if ( ! $order ) {
- return new WP_Error( 'invalid-order-object', __( 'Please provide a valid order object.', 'dokan-lite' ) );
- }
+ _deprecated_function( __METHOD__, '3.14.0', 'dokan()->fees->get_shipping_fee_recipient()' );
- $saved_shipping_recipient = $order->get_meta( 'shipping_fee_recipient', true );
-
- if ( $saved_shipping_recipient ) {
- $shipping_recipient = $saved_shipping_recipient;
- } else {
- $shipping_recipient = apply_filters( 'dokan_shipping_fee_recipient', dokan_get_option( 'shipping_fee_recipient', 'dokan_selling', 'seller' ), $order->get_id() );
- $order->update_meta_data( 'shipping_fee_recipient', $shipping_recipient );
- $order->save();
- }
-
- return $shipping_recipient;
+ return dokan()->fees->get_shipping_fee_recipient( $order );
}
/**
* Get tax fee recipient
*
+ * @deprecated 3.14.0 Use dokan()->fees->get_tax_fee_recipient() instead
+ *
* @since 2.9.21
* @since 3.4.1 introduced the tax fee recipient hook
*
@@ -799,30 +411,16 @@ public function get_shipping_fee_recipient( $order ) {
* @return string|WP_Error
*/
public function get_tax_fee_recipient( $order ) {
- if ( is_numeric( $order ) ) {
- $order = wc_get_order( $order );
- }
+ _deprecated_function( __METHOD__, '3.14.0', 'dokan()->fees->get_tax_fee_recipient()' );
- if ( ! $order ) {
- return new WP_Error( 'invalid-order-object', __( 'Please provide a valid order object.', 'dokan-lite' ) );
- }
-
- $saved_tax_recipient = $order->get_meta( 'tax_fee_recipient', true );
-
- if ( $saved_tax_recipient ) {
- $tax_recipient = $saved_tax_recipient;
- } else {
- $tax_recipient = apply_filters( 'dokan_tax_fee_recipient', dokan_get_option( 'tax_fee_recipient', 'dokan_selling', 'seller' ), $order->get_id() );
- $order->update_meta_data( 'tax_fee_recipient', $tax_recipient );
- $order->save();
- }
-
- return $tax_recipient;
+ return dokan()->fees->get_tax_fee_recipient( $order );
}
/**
* Get shipping tax fee recipient.
*
+ * @deprecated 3.14.0 Use dokan()->fees->get_shipping_tax_fee_recipient() instead
+ *
* @since 3.7.19
*
* @param WC_Order $order Order.
@@ -830,25 +428,15 @@ public function get_tax_fee_recipient( $order ) {
* @return string
*/
public function get_shipping_tax_fee_recipient( $order ): string {
- // get saved tax recipient
- $saved_shipping_tax_recipient = $order->get_meta( 'shipping_tax_fee_recipient', true );
- if ( ! empty( $saved_shipping_tax_recipient ) ) {
- return $saved_shipping_tax_recipient;
- }
-
- $default_tax_fee_recipient = $this->get_tax_fee_recipient( $order->get_id() ); // this is needed for backward compatibility
- $shipping_tax_recipient = dokan_get_option( 'shipping_tax_fee_recipient', 'dokan_selling', $default_tax_fee_recipient );
- $shipping_tax_recipient = apply_filters( 'dokan_shipping_tax_fee_recipient', $shipping_tax_recipient, $order->get_id() );
-
- $order->update_meta_data( 'shipping_tax_fee_recipient', $shipping_tax_recipient, true );
- $order->save();
-
- return $shipping_tax_recipient;
+ _deprecated_function( __METHOD__, '3.14.0', 'dokan()->fees->get_shipping_tax_fee_recipient()' );
+ return dokan()->fees->get_shipping_tax_fee_recipient( $order );
}
/**
* Get total shipping tax refunded for the order.
*
+ * @deprecated 3.14.0 Use dokan()->fees->get_total_shipping_tax_refunded() instead
+ *
* @since 3.7.19
*
* @param WC_Order $order Order.
@@ -856,23 +444,16 @@ public function get_shipping_tax_fee_recipient( $order ): string {
* @return float
*/
public function get_total_shipping_tax_refunded( WC_Order $order ): float {
- $tax_refunded = 0.0;
-
- foreach ( $order->get_items( 'shipping' ) as $item_id => $item ) {
- /**
- * @var \WC_Order_Item_Shipping $item Shipping item.
- */
- foreach ( $item->get_taxes()['total'] as $tax_id => $tax_amount ) {
- $tax_refunded += $order->get_tax_refunded_for_item( $item->get_id(), $tax_id, 'shipping' );
- }
- }
+ _deprecated_function( __METHOD__, '3.14.0', 'dokan()->fees->get_total_shipping_tax_refunded()' );
- return $tax_refunded;
+ return dokan()->fees->get_total_shipping_tax_refunded( $order );
}
/**
* Get processing fee
*
+ * @deprecated 3.14.0 Use dokan()->fees->get_processing_fee instead.
+ *
* @since DOKAN_LITE_SINCE
*
* @param WC_Order $order
@@ -880,21 +461,9 @@ public function get_total_shipping_tax_refunded( WC_Order $order ): float {
* @return float
*/
public function get_processing_fee( $order ) {
- $processing_fee = 0;
- $payment_method = $order->get_payment_method();
-
- if ( 'paypal' === $payment_method ) {
- $processing_fee = $order->get_meta( 'PayPal Transaction Fee' );
- } elseif ( 'ppec_paypal' === $payment_method && defined( 'PPEC_FEE_META_NAME_NEW' ) ) {
- $processing_fee = $order->get_meta( PPEC_FEE_META_NAME_NEW );
- } elseif ( 'ppcp-gateway' === $payment_method && class_exists( PayPalGateway::class ) ) {
- $breakdown = $order->get_meta( PayPalGateway::FEES_META_KEY );
- if ( is_array( $breakdown ) && isset( $breakdown['paypal_fee'] ) && is_array( $breakdown['paypal_fee'] ) ) {
- $processing_fee = $breakdown['paypal_fee']['value'];
- }
- }
+ _deprecated_function( __METHOD__, '3.14.0', 'dokan()->fees->get_processing_fee' );
- return apply_filters( 'dokan_get_processing_fee', $processing_fee, $order );
+ return dokan()->fees->get_processing_fee( $order );
}
/**
@@ -920,6 +489,9 @@ public function get_all_order_to_be_processed( $order ) {
/**
* Calculate commission (commission priority [1.product, 2.category, 3.vendor, 4.global] wise)
+ * I this function the calculation was written for vendor perspective it is deprecated now it is recomanded to use `get_commission` method it works fo admin perspective.
+ *
+ * @deprecated 3.14.0 Use get_commission() instead.
*
* @since 2.9.21
*
@@ -930,30 +502,129 @@ public function get_all_order_to_be_processed( $order ) {
* @return float
*/
public function calculate_commission( $product_id, $product_price, $vendor_id = null ) {
- $product_wise_earning = $this->get_product_wise_earning( $product_id, $product_price );
+ _deprecated_function( __METHOD__, '3.14.0', 'get_commission' );
+
+ $commission_data = $this->get_commission(
+ [
+ 'order_item_id' => $this->get_order_item_id(),
+ 'total_amount' => $product_price,
+ 'total_quantity' => $this->get_order_qunatity(),
+ 'product_id' => $product_id,
+ 'vendor_id' => $vendor_id,
+ ],
+ true
+ );
- if ( ! is_null( $product_wise_earning ) ) {
- return $product_wise_earning;
- }
+ $parameters = $commission_data->get_parameters() ?? [];
+ $percentage = $parameters['percentage'] ?? 0;
+ $flat = $parameters['flat'] ?? 0;
+
+ return apply_filters(
+ 'dokan_after_commission_calculation',
+ $commission_data->get_vendor_earning() ?? 0,
+ $percentage, $commission_data->get_type() ?? 'none',
+ $flat,
+ $product_price,
+ $this->get_order_id()
+ );
+ }
+
+ /**
+ * Returns all the commission types that ware in dokan. These types were existed before dokan lite version 3.14.0
+ *
+ * @since 3.14.0
+ *
+ * @return array
+ */
+ public function get_legacy_commission_types() {
+ return [
+ 'combine' => __( 'Combine', 'dokan-lite' ),
+ 'percentage' => __( 'Percentage', 'dokan-lite' ),
+ 'flat' => __( 'Flat', 'dokan-lite' ),
+ ];
+ }
- $category_wise_earning = $this->get_category_wise_earning( $product_id, $product_price );
+ /**
+ * Returns commission (commission priority [1.Order item if exists. 2.product, 3.vendor, 4.global] wise)
+ *
+ * @since 3.14.0
+ *
+ * @param array $args {
+ * Accepted arguments are below.
+ *
+ * @type int $order_item_id Order item id. Default ''. Accepted values numbers.
+ * @type float|int $total_amount The amount on which the commission will be calculated. Default 0. Accepted values numbers.
+ * Ff you want to calculate for order line item the $total_amount should be total line item amount and
+ * $total_quantity should be total line item quantity. EX: for product item apple with cost $100 then $total_amount = 500, $total_quantity = 5
+ * or if you want to calculate for product price the $total_amount should be the product price and $total_quantity should be 1
+ * EX: for product apple with cost $100 then $total_amount = 100, $total_quantity = 1
+ * @type int $total_quantity This is the total quantity that represents the $total_amounts item units. Default 1. Accepted values numbers.
+ * Please read $total_amount doc above to understand clearly.
+ * @type int $product_id Product id. Default 0. Accepted values numbers.
+ * @type int $vendor_id Vendor id. Default ''. Accepted values numbers.
+ * @type int $category_id Product category id. Default 0'. Accepted values numbers.
+ * }
+ * @param boolean $auto_save If true, it will save the calculated commission automatically to the given `$order_item_id`. Default 'false`. Accepted values boolean.
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Commission
+ */
+ public function get_commission( $args = [], $auto_save = false ) {
+ $order_item_id = ! empty( $args['order_item_id'] ) ? $args['order_item_id'] : '';
+ $total_amount = ! empty( $args['total_amount'] ) ? $args['total_amount'] : 0;
+ $total_quantity = ! empty( $args['total_quantity'] ) ? $args['total_quantity'] : 1;
+ $product_id = ! empty( $args['product_id'] ) ? $args['product_id'] : 0;
+ $vendor_id = ! empty( $args['vendor_id'] ) ? $args['vendor_id'] : '';
+ $category_id = ! empty( $args['category_id'] ) ? $args['category_id'] : 0;
- if ( ! is_null( $category_wise_earning ) ) {
- return $category_wise_earning;
+ // Category commission will not applicable if 'Product Category Selection' is set as 'Multiple' in Dokan settings.
+ if ( ! empty( $product_id ) && empty( $category_id ) ) {
+ $product_categories = Helper::get_saved_products_category( $product_id );
+ $chosen_categories = $product_categories['chosen_cat'];
+ $category_id = reset( $chosen_categories );
+ $category_id = $category_id ? $category_id : 0;
}
- $vendor_wise_earning = $this->get_vendor_wise_earning( $vendor_id, $product_price );
+ /**
+ * If the $total_amount is empty and $order_item_id is empty then we will calculate the commission based on the product price.
+ * There is a case where the $total_amount is empty and $order_item_id is empty but the $product_id is not empty
+ * In this case, we will calculate the commission based on the product price.
+ * Also there is an issue when 100% coupon is applied see the below link for more details
+ *
+ * @see https://github.com/getdokan/dokan/pull/2440#issuecomment-2488159960
+ */
+ if ( ! empty( $product_id ) && empty( $total_amount ) && empty( $order_item_id ) ) {
+ $product = dokan()->product->get( $product_id );
- if ( ! is_null( $vendor_wise_earning ) ) {
- return $vendor_wise_earning;
+ // If product price is empty the setting the price as 0
+ $total_amount = $product && $product->get_price() && ! empty( $product->get_price() ) ? $product->get_price() : 0;
}
- $global_earning = $this->get_global_earning( $product_price );
+ $order_item_strategy = new OrderItem( $order_item_id, $total_amount, $total_quantity );
- if ( ! is_null( $global_earning ) ) {
- return $global_earning;
+ $strategies = [
+ $order_item_strategy,
+ new Product( $product_id ),
+ new Vendor( $vendor_id, $category_id ),
+ new GlobalStrategy( $category_id ),
+ new DefaultStrategy(),
+ ];
+
+ $context = new Calculator( $strategies );
+ $commission_data = $context->calculate_commission( $total_amount, $total_quantity );
+
+ if ( ! empty( $order_item_id ) && $auto_save && $commission_data->get_source() !== $order_item_strategy::SOURCE ) {
+ $parameters = $commission_data->get_parameters() ?? [];
+ $percentage = $parameters['percentage'] ?? 0;
+ $flat = $parameters['flat'] ?? 0;
+
+ $order_item_strategy->save_line_item_commission_to_meta(
+ $commission_data->get_type() ?? DefaultSetting::TYPE,
+ $percentage,
+ $flat,
+ $commission_data->get_data()
+ );
}
- return $product_price;
+ return $commission_data;
}
}
diff --git a/includes/Commission/Calculator.php b/includes/Commission/Calculator.php
new file mode 100644
index 0000000000..d5dc34fdd8
--- /dev/null
+++ b/includes/Commission/Calculator.php
@@ -0,0 +1,80 @@
+strategies = $strategies;
+ }
+
+ /**
+ * Returns applied commission data
+ *
+ * @since 3.14.0
+ *
+ * @param int|float $total_amount
+ * @param int $total_quantity
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Commission
+ */
+ public function calculate_commission( $total_amount, $total_quantity = 1 ): Commission {
+ if ( ! is_numeric( $total_quantity ) || $total_quantity < 1 ) {
+ $total_quantity = 1;
+ }
+
+ if ( ! is_numeric( $total_amount ) ) {
+ $total_quantity = 0;
+ }
+
+ $commission_data = new Commission();
+ $commission_data->set_vendor_earning( $total_amount )
+ ->set_total_quantity( $total_quantity )
+ ->set_total_amount( $total_amount );
+
+ foreach ( $this->strategies as $strategy ) {
+ $formula = $strategy->create_formula();
+ if ( $formula->is_applicable() ) {
+ $formula->set_amount( $total_amount )
+ ->set_quantity( $total_quantity )
+ ->calculate();
+
+ $commission_data->set_source( $strategy->get_source() )
+ ->set_per_item_admin_commission( $formula->get_per_item_admin_commission() )
+ ->set_admin_commission( $formula->get_admin_commission() )
+ ->set_vendor_earning( $formula->get_vendor_earning() )
+ ->set_total_quantity( $formula->get_items_total_quantity() )
+ ->set_total_amount( $total_amount )
+ ->set_type( $formula->get_source() )
+ ->set_parameters( $formula->get_parameters() );
+
+ return $commission_data;
+ }
+ }
+
+ // If no commission is defined at any level.
+ return $commission_data;
+ }
+}
diff --git a/includes/Commission/Formula/AbstractFormula.php b/includes/Commission/Formula/AbstractFormula.php
new file mode 100644
index 0000000000..931f56cf92
--- /dev/null
+++ b/includes/Commission/Formula/AbstractFormula.php
@@ -0,0 +1,189 @@
+settings = $setting;
+
+ return $this;
+ }
+
+ /**
+ * Returns the commission settings.
+ *
+ * @since 3.14.0
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function get_settings(): Setting {
+ return $this->settings;
+ }
+
+ /**
+ * Sets the total amount on which the commission will be calculated.
+ *
+ * @param float|int $amount
+ *
+ * @since 3.14.0
+ *
+ * @return AbstractFormula
+ */
+ public function set_amount( $amount ): AbstractFormula {
+ $this->total_amount = $amount;
+
+ return $this;
+ }
+
+ /**
+ * Sets the total quantity on which the commission will be calculated.
+ *
+ * @param int $quantity
+ *
+ * @since 3.14.0
+ *
+ * @return AbstractFormula
+ */
+ public function set_quantity( $quantity ): AbstractFormula {
+ $this->total_quantity = $quantity;
+
+ return $this;
+ }
+
+ /**
+ * Returns the total amount on which the commission will be calculated.
+ *
+ * @since 3.14.0
+ *
+ * @return float|int
+ */
+ public function get_amount() {
+ return $this->total_amount;
+ }
+
+ /**
+ * Returns the total quantity on which the commission will be calculated.
+ *
+ * @since 3.14.0
+ *
+ * @return int
+ */
+ public function get_quantity(): int {
+ return $this->total_quantity;
+ }
+
+ /**
+ * Calculate the commission here and set the commission values.
+ *
+ * @since 3.14.0
+ *
+ * @param $total_amount
+ *
+ * @param $total_quantity
+ *
+ * @return void
+ */
+ abstract public function calculate();
+
+ /**
+ * Returns admin commission.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ abstract public function get_admin_commission(): float;
+
+ /**
+ * Returns vendor earning.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ abstract public function get_vendor_earning(): float;
+
+ /**
+ * Returns applied commission parameters.
+ *
+ * @since 3.14.0
+ *
+ * @return array
+ */
+ abstract public function get_parameters(): array;
+
+ /**
+ * Returns applied commission source.
+ *
+ * @since 3.14.0
+ *
+ * @return string
+ */
+ abstract public function get_source(): string;
+
+ /**
+ * Returns per item admin commission amount.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ abstract public function get_per_item_admin_commission(): float;
+
+ /**
+ * Returns the quantity for which the commission will be calculated.
+ *
+ * @since 3.14.0
+ *
+ * @return int
+ */
+ abstract public function get_items_total_quantity(): int;
+
+ /**
+ * Returns if the commission is applicable or not.
+ *
+ * @since 3.14.0
+ *
+ * @return bool
+ */
+ abstract public function is_applicable(): bool;
+}
diff --git a/includes/Commission/Formula/CategoryBased.php b/includes/Commission/Formula/CategoryBased.php
new file mode 100644
index 0000000000..4cdff74f7a
--- /dev/null
+++ b/includes/Commission/Formula/CategoryBased.php
@@ -0,0 +1,354 @@
+set_settings( $this->get_valid_commission_settings( $settings ) );
+ $this->fixed_formula = new Fixed( $this->fixed_commission_setting );
+ }
+
+ /**
+ * Calculating the category commission.
+ *
+ * @since 3.14.0
+ *
+ * @return void
+ */
+ public function calculate() {
+ $this->set_quantity( max( $this->get_quantity(), 1 ) );
+
+ if ( $this->is_applicable() && $this->fixed_formula->is_applicable() ) {
+ $this->fixed_formula->set_amount( $this->get_amount() );
+ $this->fixed_formula->set_quantity( $this->get_quantity() );
+ $this->fixed_formula->calculate();
+
+ $this->per_item_admin_commission = $this->fixed_formula->get_per_item_admin_commission();
+ $this->admin_commission = $this->fixed_formula->get_admin_commission();
+ $this->vendor_earning = $this->fixed_formula->get_vendor_earning();
+ } else {
+ $this->per_item_admin_commission = 0;
+ $this->admin_commission = 0;
+ $this->vendor_earning = $this->get_amount();
+ }
+
+ $this->items_total_quantity = $this->get_quantity();
+ }
+
+ /**
+ * Returns calculated commissions meta data.
+ *
+ * @since 3.14.0
+ *
+ * @return array
+ */
+ public function get_meta_data(): array {
+ return $this->meta_data;
+ }
+
+ /**
+ * Sets category commission meta data.
+ *
+ * @since 3.14.0
+ *
+ * @param array $meta_data
+ *
+ * @return \WeDevs\Dokan\Commission\Formula\CategoryBased
+ */
+ public function set_meta_data( array $meta_data ): CategoryBased {
+ $this->meta_data = $meta_data;
+
+ return $this;
+ }
+
+ /**
+ * Returns type.
+ *
+ * @since 3.14.0
+ *
+ * @return mixed
+ */
+ public function get_type() {
+ return $this->type;
+ }
+
+ /**
+ * Get commission date parameters.
+ *
+ * @since 3.14.0
+ *
+ * @return array
+ */
+ public function get_parameters(): array {
+ $parameters = $this->fixed_formula->get_parameters();
+
+ $parameters['category_id'] = $this->get_settings()->get_category_id();
+ $parameters['meta_data'] = $this->get_settings()->get_meta_data();
+
+ return $parameters;
+ }
+
+ /**
+ * Returns commission source.
+ *
+ * @since 3.14.0
+ *
+ * @return string
+ */
+ public function get_source(): string {
+ return self::SOURCE;
+ }
+
+ /**
+ * Returns if a category commission is applicable or not.
+ *
+ * @since 3.14.0
+ *
+ * @return bool
+ */
+ public function is_applicable(): bool {
+ if ( $this->is_valid_commission_type() && $this->is_valid_commission_data() ) {
+ // Changing the type here another wise fixed commission is applicable will always be false, we will set back the type to category later.
+ $this->set_settings( $this->get_settings()->set_type( Fixed::SOURCE ) );
+ $applicable = $this->fixed_formula->is_applicable();
+
+ // Setting the commission type back to category based.
+ $this->set_settings( $this->get_settings()->set_type( self::SOURCE ) );
+ return $applicable;
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns true if commission type is valid.
+ *
+ * @since 3.14.0
+ *
+ * @return bool
+ */
+ protected function is_valid_commission_type(): bool {
+ return $this->get_settings()->get_type() === $this->get_source();
+ }
+
+ /**
+ * Returns if saved commission data is valid to be applied.
+ *
+ * @since 3.14.0
+ *
+ * @return bool
+ */
+ protected function is_valid_commission_data(): bool {
+ $valid_category_id = is_numeric( $this->get_settings()->get_category_id() );
+ $has_category_setting = isset( $this->get_settings()->get_category_commissions()['items'][ $this->get_settings()->get_category_id() ] );
+ $category_flat_value = $has_category_setting && isset( $this->get_settings()->get_category_commissions()['items'][ $this->get_settings()->get_category_id() ]['flat'] )
+ ? $this->get_settings()->get_category_commissions()['items'][ $this->get_settings()->get_category_id() ]['flat']
+ : '';
+ $category_percentage_value = $has_category_setting && isset( $this->get_settings()->get_category_commissions()['items'][ $this->get_settings()->get_category_id() ]['percentage'] )
+ ? $this->get_settings()->get_category_commissions()['items'][ $this->get_settings()->get_category_id() ]['percentage']
+ : '';
+
+ $has_all_setting = isset( $this->get_settings()->get_category_commissions()['all'] );
+ $has_all_flat_setting = $has_all_setting && isset( $this->get_settings()->get_category_commissions()['all']['flat'] ) ? $this->get_settings()->get_category_commissions()['all']['flat'] : '';
+ $has_all_percentage_setting = $has_all_setting && isset( $this->get_settings()->get_category_commissions()['all']['percentage'] ) ? $this->get_settings()->get_category_commissions()['all']['percentage'] : '';
+
+ if (
+ $valid_category_id &&
+ $has_category_setting &&
+ ( is_numeric( $category_flat_value ) || is_numeric( $category_percentage_value ) )
+ ) {
+ return true;
+ } elseif (
+ $valid_category_id &&
+ $has_category_setting &&
+ ( ! is_numeric( $category_flat_value ) && ! is_numeric( $category_percentage_value ) )
+ ) {
+ return false;
+ } elseif ( $has_all_setting && ( is_numeric( $has_all_flat_setting ) || is_numeric( $has_all_percentage_setting ) ) ) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Validates and returns commission.
+ *
+ * @since 3.14.0
+ *
+ * @param Setting $setting
+ *
+ * @return Setting
+ */
+ protected function get_valid_commission_settings( Setting $setting ): Setting {
+ $this->set_settings( $setting );
+
+ $this->fixed_commission_setting = new Setting();
+ $this->fixed_commission_setting->set_type( Fixed::SOURCE )
+ ->set_flat( $this->get_settings()->get_flat() )
+ ->set_percentage( $this->get_settings()->get_percentage() )
+ ->set_category_id( $this->get_settings()->get_category_id() )
+ ->set_category_commissions( $this->get_settings()->get_category_commissions() )
+ ->set_meta_data( $this->get_settings()->get_meta_data() );
+
+ if ( ! $this->is_valid_commission_data() ) {
+ return $setting;
+ }
+
+ // $validated_setting = new Setting();
+ $commissions = $setting->get_category_commissions();
+ if ( is_numeric( $setting->get_category_id() ) && isset( $setting->get_category_commissions()['items'][ $setting->get_category_id() ] ) ) {
+ $items = $commissions['items'];
+ $item = $items[ $setting->get_category_id() ];
+
+ $this->fixed_commission_setting->set_flat( isset( $item['flat'] ) ? $item['flat'] : '' );
+ $this->fixed_commission_setting->set_percentage( isset( $item['percentage'] ) ? $item['percentage'] : '' );
+ $this->fixed_commission_setting->set_category_commissions( $commissions );
+ } elseif ( isset( $setting->get_category_commissions()['all'] ) && ( is_numeric( $setting->get_category_commissions()['all']['flat'] ) || is_numeric( $setting->get_category_commissions()['all']['percentage'] ) ) ) {
+ $all = $commissions['all'];
+
+ $this->fixed_commission_setting->set_flat( isset( $all['flat'] ) ? $all['flat'] : '' );
+ $this->fixed_commission_setting->set_percentage( isset( $all['percentage'] ) ? $all['percentage'] : '' );
+ $this->fixed_commission_setting->set_category_commissions( $commissions );
+ }
+
+ return $setting;
+ }
+
+ /**
+ * Returns admin commission amount.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_admin_commission(): float {
+ return $this->admin_commission;
+ }
+
+ /**
+ * Returns vendor earning amount.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_vendor_earning(): float {
+ return $this->vendor_earning;
+ }
+
+
+ /**
+ * Returns per item admin commission amount.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_per_item_admin_commission(): float {
+ return dokan()->commission->validate_rate( $this->per_item_admin_commission );
+ }
+
+ /**
+ * Returns the quantity on which the commission has been calculated.
+ *
+ * @since 3.14.0
+ *
+ * @return int
+ */
+ public function get_items_total_quantity(): int {
+ return $this->items_total_quantity;
+ }
+}
diff --git a/includes/Commission/Formula/Combine.php b/includes/Commission/Formula/Combine.php
new file mode 100644
index 0000000000..d93d0836dd
--- /dev/null
+++ b/includes/Commission/Formula/Combine.php
@@ -0,0 +1,198 @@
+set_settings( $settings );
+ }
+
+ /**
+ * Calculation is doing here.
+ *
+ * @since 3.14.0
+ *
+ * @return void
+ */
+ public function calculate() {
+ $percent_commission = $this->get_amount() * ( dokan()->commission->validate_rate( $this->get_settings()->get_percentage() ) / 100 );
+ $commission = (float) dokan()->commission->validate_rate( $this->get_settings()->get_flat() ) + $percent_commission;
+
+ $per_item_flat = dokan()->commission->validate_rate( $this->get_settings()->get_flat() ) / $this->get_quantity();
+ $per_item_percentage = $percent_commission / $this->get_quantity();
+
+ $this->admin_commission = $commission;
+ $this->per_item_admin_commission = $per_item_flat + $per_item_percentage;
+
+ if ( $this->get_per_item_admin_commission() > $this->get_amount() ) {
+ $this->per_item_admin_commission = $this->get_amount();
+ }
+
+ if ( $this->get_admin_commission() > $this->get_amount() ) {
+ $this->admin_commission = $this->get_amount();
+ }
+
+ $this->vendor_earning = $this->get_amount() - $this->admin_commission;
+ $this->items_total_quantity = $this->get_quantity();
+ }
+
+ /**
+ * Commission calculation parameters.
+ *
+ * @since 3.14.0
+ *
+ * @return array
+ */
+ public function get_parameters(): array {
+ return [
+ 'flat' => $this->get_settings()->get_flat(),
+ 'percentage' => $this->get_settings()->get_percentage(),
+ 'meta_data' => $this->get_settings()->get_meta_data(),
+ ];
+ }
+
+ /**
+ * Returns the combine commission surce text.
+ *
+ * @since 3.14.0
+ *
+ * @return string
+ */
+ public function get_source(): string {
+ return self::SOURCE;
+ }
+
+ /**
+ * Returns if the combine commission is applicable or not based on data.
+ *
+ * @since 3.14.0
+ *
+ * @return bool
+ */
+ public function is_applicable(): bool {
+ return $this->is_valid_commission_type() && $this->is_valid_commission_data();
+ }
+
+ /**
+ * Returns if the commission type data is valid.
+ *
+ * @since 3.14.0
+ *
+ * @return bool
+ */
+ protected function is_valid_commission_type(): bool {
+ $legacy_types = dokan()->commission->get_legacy_commission_types();
+
+ $all_types = array_keys( $legacy_types );
+
+ return in_array( $this->get_settings()->get_type(), $all_types, true ) || $this->get_settings()->get_type() === self::SOURCE;
+ }
+
+ /**
+ * Returns if commission is valid.
+ *
+ * @since 3.14.0
+ *
+ * @return bool
+ */
+ protected function is_valid_commission_data(): bool {
+ return is_numeric( $this->get_settings()->get_flat() ) || is_numeric( $this->get_settings()->get_percentage() );
+ }
+
+ /**
+ * Returns the admin commission
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_admin_commission(): float {
+ return dokan()->commission->validate_rate( $this->admin_commission );
+ }
+
+ /**
+ * Returns the vendors earning.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_vendor_earning(): float {
+ return dokan()->commission->validate_rate( $this->vendor_earning );
+ }
+
+ /**
+ * Returns per item admin commission.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_per_item_admin_commission(): float {
+ return dokan()->commission->validate_rate( $this->per_item_admin_commission );
+ }
+
+ /**
+ * Returns the quantity on which the commission is calculated.
+ *
+ * @since 3.14.0
+ *
+ * @return int
+ */
+ public function get_items_total_quantity(): int {
+ return $this->items_total_quantity;
+ }
+}
diff --git a/includes/Commission/Formula/Fixed.php b/includes/Commission/Formula/Fixed.php
new file mode 100644
index 0000000000..5c97d1f1b6
--- /dev/null
+++ b/includes/Commission/Formula/Fixed.php
@@ -0,0 +1,226 @@
+set_settings( $settings );
+
+ $this->flat_calculator = new Flat( $this->get_settings() );
+ $this->percentage_calculator = new Percentage( $this->get_settings() );
+ }
+
+ /**
+ * Calculating the fixed commission.
+ *
+ * @since 3.14.0
+ *
+ * @return void
+ */
+ public function calculate() {
+ $this->set_quantity( max( $this->get_quantity(), 1 ) );
+
+ if ( $this->flat_calculator->is_applicable() ) {
+ $this->flat_calculator->set_amount( $this->get_amount() );
+ $this->flat_calculator->set_quantity( $this->get_quantity() );
+ $this->flat_calculator->calculate();
+
+ $this->per_item_admin_commission += $this->flat_calculator->get_per_item_admin_commission();
+ $this->admin_commission += $this->flat_calculator->get_admin_commission();
+ }
+
+ if ( $this->percentage_calculator->is_applicable() ) {
+ $this->percentage_calculator->set_amount( $this->get_amount() );
+ $this->percentage_calculator->set_quantity( $this->get_quantity() );
+ $this->percentage_calculator->calculate();
+
+ $this->per_item_admin_commission += $this->percentage_calculator->get_per_item_admin_commission();
+ $this->admin_commission += $this->percentage_calculator->get_admin_commission();
+ }
+
+ if ( $this->get_per_item_admin_commission() > $this->get_amount() ) {
+ $this->per_item_admin_commission = $this->get_amount();
+ }
+
+ if ( $this->get_admin_commission() > $this->get_amount() ) {
+ $this->admin_commission = $this->get_amount();
+ }
+
+ $this->vendor_earning = $this->get_amount() - $this->get_admin_commission();
+ $this->items_total_quantity = $this->get_quantity();
+ }
+
+ /**
+ * Get commission date parameters.
+ *
+ * @since 3.14.0
+ *
+ * @return array
+ */
+ public function get_parameters(): array {
+ return [
+ 'flat' => $this->get_settings()->get_flat(),
+ 'percentage' => $this->get_settings()->get_percentage(),
+ 'meta_data' => $this->get_settings()->get_meta_data(),
+ ];
+ }
+
+ /**
+ * Returns commission source.
+ *
+ * @since 3.14.0
+ *
+ * @return string
+ */
+ public function get_source(): string {
+ return self::SOURCE;
+ }
+
+ /**
+ * Returns if a fixed commission is applicable or not.
+ *
+ * @since 3.14.0
+ *
+ * @return bool
+ */
+ public function is_applicable(): bool {
+ return $this->is_valid_commission_type() && $this->is_valid_commission_data();
+ }
+
+ /**
+ * Returns true if commission type is valid.
+ *
+ * @since 3.14.0
+ *
+ * @return bool
+ */
+ protected function is_valid_commission_type(): bool {
+ $legacy_types = dokan()->commission->get_legacy_commission_types();
+
+ $all_types = array_keys( $legacy_types );
+
+ return in_array( $this->get_settings()->get_type(), $all_types, true ) || $this->get_settings()->get_type() === self::SOURCE;
+ }
+
+ /**
+ * Returns if saved commission data is valid to be applied.
+ *
+ * @since 3.14.0
+ *
+ * @return bool
+ */
+ protected function is_valid_commission_data(): bool {
+ return is_numeric( $this->get_settings()->get_flat() ) || is_numeric( $this->get_settings()->get_percentage() );
+ }
+
+ /**
+ * Returns admin commission amount.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_admin_commission(): float {
+ return dokan()->commission->validate_rate( $this->admin_commission );
+ }
+
+ /**
+ * Returns vendor earning amount.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_vendor_earning(): float {
+ return dokan()->commission->validate_rate( $this->vendor_earning );
+ }
+
+ /**
+ * Returns per item admin commission amount.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_per_item_admin_commission(): float {
+ return dokan()->commission->validate_rate( $this->per_item_admin_commission );
+ }
+
+ /**
+ * Returns the quantity on which the commission has been calculated.
+ *
+ * @since 3.14.0
+ *
+ * @return int
+ */
+ public function get_items_total_quantity(): int {
+ return $this->items_total_quantity;
+ }
+}
diff --git a/includes/Commission/Formula/Flat.php b/includes/Commission/Formula/Flat.php
new file mode 100644
index 0000000000..0e8f4cb47f
--- /dev/null
+++ b/includes/Commission/Formula/Flat.php
@@ -0,0 +1,184 @@
+set_settings( $settings );
+ }
+
+ /**
+ * Calculating the flat commission.
+ *
+ * @since 3.14.0
+ *
+ * @return void
+ */
+ public function calculate() {
+ $this->set_quantity( max( $this->get_quantity(), 1 ) );
+
+ if ( $this->is_applicable() ) {
+ $this->per_item_admin_commission = dokan()->commission->validate_rate( $this->get_settings()->get_flat() );
+ }
+
+ if ( $this->per_item_admin_commission > $this->get_amount() ) {
+ $this->per_item_admin_commission = $this->get_amount();
+ }
+
+ $this->flat_commission = $this->per_item_admin_commission;
+ if ( (int) $this->get_quantity() > 1 ) {
+ $this->flat_commission = $this->per_item_admin_commission * apply_filters( 'dokan_commission_multiply_by_order_quantity', $this->get_quantity() );
+ }
+
+ $this->admin_commission = $this->flat_commission;
+
+ if ( $this->admin_commission > $this->get_amount() ) {
+ $this->admin_commission = $this->get_amount();
+ }
+
+ $this->vendor_earning = $this->get_amount() - $this->admin_commission;
+ $this->items_total_quantity = $this->get_quantity();
+ }
+
+ /**
+ * Get commission date parameters.
+ *
+ * @since 3.14.0
+ *
+ * @return array
+ */
+ public function get_parameters(): array {
+ return [
+ 'flat' => $this->get_settings()->get_flat(),
+ 'meta_data' => $this->get_settings()->get_meta_data(),
+ ];
+ }
+
+ /**
+ * Returns commission source.
+ *
+ * @since 3.14.0
+ *
+ * @return string
+ */
+ public function get_source(): string {
+ return self::SOURCE;
+ }
+
+ /**
+ * Returns if a flat commission is applicable or not.
+ *
+ * @since 3.14.0
+ *
+ * @return bool
+ */
+ public function is_applicable(): bool {
+ return is_numeric( $this->get_settings()->get_flat() );
+ }
+
+ /**
+ * Returns admin commission amount.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_admin_commission(): float {
+ return $this->admin_commission;
+ }
+
+ /**
+ * Returns vendor earning amount.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_vendor_earning(): float {
+ return $this->vendor_earning;
+ }
+
+ /**
+ * Returns per item admin commission amount.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_per_item_admin_commission(): float {
+ return dokan()->commission->validate_rate( $this->per_item_admin_commission );
+ }
+
+ /**
+ * Returns the quantity on which the commission has been calculated.
+ *
+ * @since 3.14.0
+ *
+ * @return int
+ */
+ public function get_items_total_quantity(): int {
+ return $this->items_total_quantity;
+ }
+}
diff --git a/includes/Commission/Formula/Percentage.php b/includes/Commission/Formula/Percentage.php
new file mode 100644
index 0000000000..1c99d57528
--- /dev/null
+++ b/includes/Commission/Formula/Percentage.php
@@ -0,0 +1,159 @@
+set_settings( $settings );
+ }
+
+ /**
+ * Class constructor.
+ *
+ * @since 3.14.0
+ *
+ * @return void
+ */
+ public function calculate() {
+ if ( $this->is_applicable() ) {
+ $this->admin_commission = ( $this->get_amount() * dokan()->commission->validate_rate( $this->get_settings()->get_percentage() ) ) / 100;
+ }
+
+ $this->per_item_admin_commission = $this->admin_commission / $this->get_quantity();
+ $this->vendor_earning = $this->get_amount() - $this->admin_commission;
+
+ // Admin will get 100 percent if commission rate > 100
+ if ( $this->get_settings()->get_percentage() > 100 ) {
+ $this->admin_commission = $this->get_amount();
+ $this->vendor_earning = 0;
+ }
+
+ $this->items_total_quantity = $this->get_quantity();
+ }
+
+ /**
+ * Get commission date parameters.
+ *
+ * @since 3.14.0
+ *
+ * @return array
+ */
+ public function get_parameters(): array {
+ return [
+ 'percentage' => $this->get_settings()->get_percentage(),
+ 'meta_data' => $this->get_settings()->get_meta_data(),
+ ];
+ }
+
+ /**
+ * Returns commission source.
+ *
+ * @since 3.14.0
+ *
+ * @return string
+ */
+ public function get_source(): string {
+ return self::SOURCE;
+ }
+
+ /**
+ * Returns if a percentage commission is applicable or not.
+ *
+ * @since 3.14.0
+ *
+ * @return bool
+ */
+ public function is_applicable(): bool {
+ return is_numeric( $this->get_settings()->get_percentage() );
+ }
+
+ /**
+ * Returns admin commission amount.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_admin_commission(): float {
+ return dokan()->commission->validate_rate( $this->admin_commission );
+ }
+
+ /**
+ * Returns vendor earning amount.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_vendor_earning(): float {
+ return dokan()->commission->validate_rate( $this->vendor_earning );
+ }
+
+ /**
+ * Returns per item admin commission amount.
+ *
+ * @since 3.14.0
+ *
+ * @return float
+ */
+ public function get_per_item_admin_commission(): float {
+ return dokan()->commission->validate_rate( $this->per_item_admin_commission ) ?? 0;
+ }
+
+ /**
+ * Returns the quantity on which the commission has been calculated.
+ *
+ * @since 3.14.0
+ *
+ * @return int
+ */
+ public function get_items_total_quantity(): int {
+ return $this->items_total_quantity;
+ }
+}
diff --git a/includes/Commission/FormulaFactory.php b/includes/Commission/FormulaFactory.php
new file mode 100644
index 0000000000..a8d30deb06
--- /dev/null
+++ b/includes/Commission/FormulaFactory.php
@@ -0,0 +1,48 @@
+get_type() ) {
+ case Flat::SOURCE:
+ // In Dokan before 3.14.0 version if the commission type was flat the flat value used to be saved in the percentage key, that is why we are passing the percentage value.
+ return new Flat( $settings );
+ case Percentage::SOURCE:
+ return new Percentage( $settings );
+ case Combine::SOURCE: // Assuming 'combine' implies a combination of flat + percentage
+ return new Combine( $settings );
+ case Fixed::SOURCE:
+ return new Fixed( $settings );
+ case CategoryBased::SOURCE:
+ return new CategoryBased( $settings );
+ default:
+ $default_setting = new DefaultSetting();
+ return new Percentage( $default_setting->get() );
+ }
+ }
+}
diff --git a/includes/Commission/Model/Commission.php b/includes/Commission/Model/Commission.php
new file mode 100644
index 0000000000..4a0eccf3e6
--- /dev/null
+++ b/includes/Commission/Model/Commission.php
@@ -0,0 +1,308 @@
+source;
+ }
+
+ /**
+ * Sets commission source.
+ *
+ * @since 3.14.0
+ *
+ * @param string $source
+ *
+ * @return Commission
+ */
+ public function set_source( string $source ): Commission {
+ $this->source = $source;
+
+ return $this;
+ }
+
+ /**
+ * Returns per item admin commission.
+ *
+ * @since 3.14.0
+ *
+ * @return int|float
+ */
+ public function get_per_item_admin_commission() {
+ return $this->per_item_admin_commission;
+ }
+
+ /**
+ * Sets per item admin commission.
+ *
+ * @since 3.14.0
+ *
+ * @param int|float $per_item_admin_commission
+ *
+ * @return Commission
+ */
+ public function set_per_item_admin_commission( $per_item_admin_commission ): Commission {
+ $this->per_item_admin_commission = $per_item_admin_commission;
+
+ return $this;
+ }
+
+ /**
+ * Returns the admin commission amount.
+ *
+ * @since 3.14.0
+ *
+ * @return int|float
+ */
+ public function get_admin_commission() {
+ return $this->admin_commission;
+ }
+
+ /**
+ * Sets admin commission amount.
+ *
+ * @since 3.14.0
+ *
+ * @param $admin_commission
+ *
+ * @return Commission
+ */
+ public function set_admin_commission( $admin_commission ): Commission {
+ $this->admin_commission = $admin_commission;
+
+ return $this;
+ }
+
+ /**
+ * Returns vendor earning.
+ *
+ * @since 3.14.0
+ *
+ * @return int|float
+ */
+ public function get_vendor_earning() {
+ return $this->vendor_earning;
+ }
+
+ /**
+ * Sets vendor earning..
+ *
+ * @since 3.14.0
+ *
+ * @param int|float $vendor_earning
+ *
+ * @return Commission
+ */
+ public function set_vendor_earning( $vendor_earning ): Commission {
+ $this->vendor_earning = $vendor_earning;
+
+ return $this;
+ }
+
+ /**
+ * Returns the quantity on which the commission will be calculated.
+ *
+ * @since 3.14.0
+ *
+ * @return int
+ */
+ public function get_total_quantity(): int {
+ return $this->total_quantity;
+ }
+
+ /**
+ * Sets the total quantity on which the commission will be calculated.
+ *
+ * @since 3.14.0
+ *
+ * @param int $total_quantity
+ *
+ * @return Commission
+ */
+ public function set_total_quantity( int $total_quantity ): Commission {
+ $this->total_quantity = $total_quantity;
+
+ return $this;
+ }
+
+ /**
+ * Returns the total amount on which the commission will be calculated.
+ *
+ * @since 3.14.0
+ *
+ * @return int
+ */
+ public function get_total_amount() {
+ return $this->total_amount;
+ }
+
+ /**
+ * Sets the total amount on which the commission will be calculated.
+ *
+ * @since 3.14.0
+ *
+ * @param int|float $total_amount
+ *
+ * @return Commission
+ */
+ public function set_total_amount( $total_amount ): Commission {
+ $this->total_amount = $total_amount;
+
+ return $this;
+ }
+
+ /**
+ * Returns the commission type.
+ *
+ * @since 3.14.0
+ *
+ * @return string
+ */
+ public function get_type(): string {
+ return $this->type;
+ }
+
+ /**
+ * Sets the commission type
+ *
+ * @param string $type
+ *
+ * @return Commission
+ */
+ public function set_type( string $type ): Commission {
+ $this->type = $type;
+
+ return $this;
+ }
+
+ /**
+ * Returns applied commission parameters.
+ *
+ * @since 3.14.0
+ *
+ * @return array
+ */
+ public function get_parameters(): array {
+ return $this->parameters;
+ }
+
+ /**
+ * Sets commission parameters.
+ *
+ * @since 3.14.0
+ *
+ * @param array $parameters
+ *
+ * @return Commission
+ */
+ public function set_parameters( array $parameters ): Commission {
+ $this->parameters = $parameters;
+
+ return $this;
+ }
+
+ /**
+ * Returns commission data as array.
+ *
+ * @since 3.14.0
+ *
+ * @return array
+ */
+ public function get_data(): array {
+ return [
+ 'source' => $this->get_source(),
+ 'per_item_admin_commission' => $this->get_per_item_admin_commission(),
+ 'admin_commission' => $this->get_admin_commission(),
+ 'vendor_earning' => $this->get_vendor_earning(),
+ 'total_quantity' => $this->get_total_quantity(),
+ 'total_amount' => $this->get_total_amount(),
+ 'type' => $this->get_type(),
+ 'parameters' => $this->get_parameters(),
+ ];
+ }
+}
diff --git a/includes/Commission/Model/Setting.php b/includes/Commission/Model/Setting.php
new file mode 100644
index 0000000000..85ac7217c8
--- /dev/null
+++ b/includes/Commission/Model/Setting.php
@@ -0,0 +1,217 @@
+meta_data;
+ }
+
+ /**
+ * Sets the commission meta data.
+ *
+ * @since 3.14.0
+ *
+ * @param array $meta_data
+ *
+ * @return $this
+ */
+ public function set_meta_data( array $meta_data ): Setting {
+ $this->meta_data = $meta_data;
+
+ return $this;
+ }
+
+ /**
+ * Sets the commission type.
+ *
+ * @since 3.14.0
+ *
+ * @param mixed|string $type
+ *
+ * @return $this
+ */
+ public function set_type( $type ): Setting {
+ $this->type = $type;
+
+ return $this;
+ }
+
+ /**
+ * Sets the flat commissin amount.
+ *
+ * @since 3.14.0
+ *
+ * @param mixed|string $flat
+ *
+ * @return $this
+ */
+ public function set_flat( $flat ): Setting {
+ $this->flat = $flat;
+
+ return $this;
+ }
+
+ /**
+ * Sets the percentage amount.
+ *
+ * @since 3.14.0
+ *
+ * @param mixed|string $percentage
+ *
+ * @return $this
+ */
+ public function set_percentage( $percentage ): Setting {
+ $this->percentage = $percentage;
+
+ return $this;
+ }
+
+ /**
+ * Sets the category id.
+ *
+ * @since 3.14.0
+ *
+ * @param mixed|string $category_id
+ *
+ * @return $this
+ */
+ public function set_category_id( $category_id ): Setting {
+ $this->category_id = $category_id;
+
+ return $this;
+ }
+
+ /**
+ * Sets the category commission data.
+ *
+ * @since 3.14.0.
+ *
+ * @param array|mixed $category_commissions
+ *
+ * @return $this
+ */
+ public function set_category_commissions( $category_commissions ): Setting {
+ $this->category_commissions = $category_commissions;
+
+ return $this;
+ }
+
+ /**
+ * Sets the commission type.
+ *
+ * @since 3.14.0
+ *
+ * @return mixed|string|null
+ */
+ public function get_type() {
+ return $this->type;
+ }
+
+ /**
+ * Returns the flat amount.
+ *
+ * @since 3.14.0
+ *
+ * @return mixed|string
+ */
+ public function get_flat() {
+ return $this->flat;
+ }
+
+ /**
+ * Returns the percentage amount.
+ *
+ * @since 3.14.0
+ *
+ * @return mixed|string
+ */
+ public function get_percentage() {
+ return $this->percentage;
+ }
+
+ /**
+ * Returns the category commission data.
+ *
+ * @since 3.14.0
+ *
+ * @return array|mixed|null
+ */
+ public function get_category_commissions() {
+ return $this->category_commissions;
+ }
+
+ /**
+ * Returns the category id
+ *
+ * @since 3.14.0
+ *
+ * @return array|mixed|null
+ */
+ public function get_category_id() {
+ return $this->category_id;
+ }
+}
diff --git a/includes/Commission/Settings/Builder.php b/includes/Commission/Settings/Builder.php
new file mode 100644
index 0000000000..4e18270106
--- /dev/null
+++ b/includes/Commission/Settings/Builder.php
@@ -0,0 +1,41 @@
+set_type( self::TYPE );
+
+ return $setting;
+ }
+
+ /**
+ * Saves and returns default setting
+ *
+ * @since 3.14.0
+ *
+ * @param array $setting
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function save( array $setting ): Setting {
+ return $this->get();
+ }
+}
diff --git a/includes/Commission/Settings/GlobalSetting.php b/includes/Commission/Settings/GlobalSetting.php
new file mode 100644
index 0000000000..25dee085bf
--- /dev/null
+++ b/includes/Commission/Settings/GlobalSetting.php
@@ -0,0 +1,78 @@
+category_id = $category_id;
+ }
+
+ /**
+ * Returns product commission settings data.
+ *
+ * @since 3.14.0
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function get(): Setting {
+ $percentage = dokan_get_option( 'admin_percentage', 'dokan_selling', '' );
+ $type = dokan_get_option( 'commission_type', 'dokan_selling', '' );
+ $flat = dokan_get_option( 'additional_fee', 'dokan_selling', '' );
+ $category_commissions = dokan_get_option( 'commission_category_based_values', 'dokan_selling', [] );
+
+ $settings = new Setting();
+ $settings->set_type( $type )
+ ->set_flat( $flat )
+ ->set_percentage( $percentage )
+ ->set_category_commissions( $category_commissions )
+ ->set_category_id( $this->category_id );
+
+ return $settings;
+ }
+
+ /**
+ * Saves and returns product commission settings data.
+ *
+ * @since 3.14.0
+ *
+ * @param array $setting {
+ *
+ * @type string $percentage
+ * @type string $type
+ * @type string $flat
+ * @type array $category_commissions
+ * }
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function save( array $setting ): Setting {
+ $options = get_option( 'dokan_selling', [] );
+ $options['commission_type'] = isset( $setting['type'] ) ? $setting['type'] : '';
+ $options['admin_percentage'] = isset( $setting['percentage'] ) ? $setting['percentage'] : '';
+ $options['additional_fee'] = isset( $setting['flat'] ) ? $setting['flat'] : '';
+ $options['commission_category_based_values'] = isset( $setting['category_commissions'] ) ? $setting['category_commissions'] : [];
+
+ update_option( 'dokan_selling', $options );
+
+ return $this->get();
+ }
+}
diff --git a/includes/Commission/Settings/InterfaceSetting.php b/includes/Commission/Settings/InterfaceSetting.php
new file mode 100644
index 0000000000..2099066b22
--- /dev/null
+++ b/includes/Commission/Settings/InterfaceSetting.php
@@ -0,0 +1,33 @@
+order_item_id = $data['id'];
+ $this->product_price_to_calculate_commission = $data['price'];
+ }
+
+ /**
+ * Rrturns order item commission settings.
+ *
+ * @since 3.14.0
+ *
+ * @throws \Exception
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function get(): Setting {
+ $commission_percentage = '';
+ $commission_type = '';
+ $additional_flat = '';
+ $commission_meta = [];
+
+ if ( ! empty( $this->order_item_id ) ) {
+ $commission_percentage = wc_get_order_item_meta( $this->order_item_id, '_dokan_commission_rate', true ) ?? '';
+ $commission_type = wc_get_order_item_meta( $this->order_item_id, '_dokan_commission_type', true ) ?? '';
+ $additional_flat = wc_get_order_item_meta( $this->order_item_id, '_dokan_additional_fee', true ) ?? '';
+ $commission_meta = wc_get_order_item_meta( $this->order_item_id, 'dokan_commission_meta', true );
+
+ $commission_meta = empty( $commission_meta ) ? [] : $commission_meta;
+ }
+
+ /**
+ * If `_dokan_item_total` returns `non-falsy` value that means, the request comes from the `order refund request`.
+ * So modify `additional_fee` to the correct amount to get refunded. (additional_fee/item_total)*product_price.
+ * Where `product_price` means item_total - refunded_total_for_item.
+ *
+ * To understand clearly, how and when these codes work and how dokan commission works, you can also go through dokan-lite previous codes as provided below.
+ *
+ * @see https://github.com/getdokan/dokan/blob/28888e6824d96747ed65004fbd6de80d0eee5161/includes/Commission.php#L629
+ * @see https://github.com/getdokan/dokan/blob/28888e6824d96747ed65004fbd6de80d0eee5161/includes/Commission.php#L567-L653
+ * @see https://github.com/getdokan/dokan/blob/28888e6824d96747ed65004fbd6de80d0eee5161/includes/Commission.php
+ */
+ $order_id = wc_get_order_id_by_order_item_id( $this->order_item_id );
+
+ if ( $order_id ) {
+ $order = dokan()->order->get( $order_id );
+ $item_total = floatval( $order->get_meta( '_dokan_item_total' ) );
+ }
+
+ $product_price = (float) wc_format_decimal( $this->product_price_to_calculate_commission );
+ if ( $order_id && $item_total ) {
+ $additional_flat = ( floatval( $additional_flat ) / $item_total ) * $product_price;
+ }
+
+ $settings = new Setting();
+ $settings->set_type( $commission_type )
+ ->set_flat( $additional_flat )
+ ->set_percentage( $commission_percentage )
+ ->set_meta_data( $commission_meta );
+
+ if ( $commission_type === CategoryBased::SOURCE && isset( $commission_meta['parameters']['category_id'] ) ) {
+ $settings->set_category_id( $commission_meta['parameters']['category_id'] );
+ $settings->set_category_commissions(
+ [
+ 'all' => [],
+ 'items' => [
+ $settings->get_category_id() => [
+ 'flat' => $settings->get_flat(),
+ 'percentage' => $settings->get_percentage(),
+ ],
+ ],
+ ]
+ );
+ } else {
+ $settings->set_category_commissions(
+ [
+ 'all' => [
+ 'flat' => $settings->get_flat(),
+ 'percentage' => $settings->get_percentage(),
+ ],
+ 'items' => [],
+ ]
+ );
+ }
+
+ return $settings;
+ }
+
+ /**
+ * Saves order item commission settings.
+ *
+ * @since 3.14.0
+ *
+ * @param array $setting
+ *
+ * @throws \Exception
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function save( array $setting ): Setting {
+ $percentage = isset( $setting['percentage'] ) ? $setting['percentage'] : '';
+ $type = isset( $setting['type'] ) ? $setting['type'] : '';
+ $flat = isset( $setting['flat'] ) ? $setting['flat'] : '';
+ $meta_data = isset( $setting['meta_data'] ) ? $setting['meta_data'] : [];
+
+ wc_add_order_item_meta( $this->order_item_id, '_dokan_commission_type', $type );
+ wc_add_order_item_meta( $this->order_item_id, '_dokan_commission_rate', $percentage );
+ wc_add_order_item_meta( $this->order_item_id, '_dokan_additional_fee', $flat );
+ wc_add_order_item_meta( $this->order_item_id, 'dokan_commission_meta', $meta_data );
+
+ return $this->get();
+ }
+}
diff --git a/includes/Commission/Settings/Product.php b/includes/Commission/Settings/Product.php
new file mode 100644
index 0000000000..b389991e97
--- /dev/null
+++ b/includes/Commission/Settings/Product.php
@@ -0,0 +1,89 @@
+product = dokan()->product->get( $product_id );
+
+ if ( $this->product && $this->product->is_type( 'variation' ) ) {
+ $this->product = dokan()->product->get( $this->product->get_parent_id() );
+ }
+ }
+
+
+ /**
+ * Returns product commission settings data.
+ *
+ * @since 3.14.0
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function get(): Setting {
+ $percentage = '';
+ $type = '';
+ $flat = '';
+
+ if ( is_a( $this->product, WC_Product::class ) && $this->product->get_id() ) {
+ $percentage = $this->product->get_meta( '_per_product_admin_commission', true );
+ $type = $this->product->get_meta( '_per_product_admin_commission_type', true );
+ $flat = $this->product->get_meta( '_per_product_admin_additional_fee', true );
+ }
+
+ $settings = new Setting();
+ $settings->set_type( $type )
+ ->set_flat( $flat )
+ ->set_percentage( $percentage );
+
+ return $settings;
+ }
+
+ /**
+ * Saves and returns product commission settings data.
+ *
+ * @since 3.14.0
+ *
+ * @param array $setting {
+ *
+ * @type string $percentage
+ * @type string $type
+ * @type string $flat
+ * }
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function save( array $setting ): Setting {
+ $commission_percentage = isset( $setting['percentage'] ) ? $setting['percentage'] : '';
+ $commission_type = isset( $setting['type'] ) ? $setting['type'] : '';
+ $additional_flat = isset( $setting['flat'] ) ? $setting['flat'] : '';
+
+ if ( is_a( $this->product, WC_Product::class ) && $this->product->get_id() ) {
+ $this->product->update_meta_data( '_per_product_admin_commission', $commission_percentage );
+ $this->product->update_meta_data( '_per_product_admin_commission_type', $commission_type );
+ $this->product->update_meta_data( '_per_product_admin_additional_fee', $additional_flat );
+
+ $this->product->save_meta_data();
+ $this->product->save();
+ }
+
+ $commission = new Setting();
+ $commission->set_type( $commission_type )
+ ->set_flat( $additional_flat )
+ ->set_percentage( $commission_percentage );
+
+ return $commission;
+ }
+}
diff --git a/includes/Commission/Settings/Vendor.php b/includes/Commission/Settings/Vendor.php
new file mode 100644
index 0000000000..de0b2b0561
--- /dev/null
+++ b/includes/Commission/Settings/Vendor.php
@@ -0,0 +1,97 @@
+vendor = dokan()->vendor->get( $vendor_id );
+ }
+
+
+ /**
+ * Returns product commission settings data.
+ *
+ * @since 3.14.0
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function get(): Setting {
+ $percentage = '';
+ $type = '';
+ $flat = '';
+ $category_commissions = [];
+
+ if ( 0 !== $this->vendor->get_id() ) {
+ $percentage = $this->vendor->get_meta( 'dokan_admin_percentage', true );
+ $type = $this->vendor->get_meta( 'dokan_admin_percentage_type', true );
+ $flat = $this->vendor->get_meta( 'dokan_admin_additional_fee', true );
+ $category_commissions = $this->vendor->get_meta( 'admin_category_commission', true );
+
+ $category_commissions = ! is_array( $category_commissions ) ? [] : $category_commissions;
+ }
+
+ $settings = new Setting();
+ $settings->set_type( $type )
+ ->set_flat( $flat )
+ ->set_percentage( $percentage )
+ ->set_category_commissions( $category_commissions );
+
+ return $settings;
+ }
+
+ /**
+ * Saves and returns product commission settings data.
+ *
+ * @since 3.14.0
+ *
+ * @param array $setting {
+ *
+ * @type string $percentage
+ * @type string $type
+ * @type string $flat
+ * @type array $category_commissions
+ * }
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function save( array $setting ): Setting {
+ if ( ! $this->vendor->get_id() ) {
+ return $this->get();
+ }
+
+ $percentage = isset( $setting['percentage'] ) ? $setting['percentage'] : '';
+ $type = isset( $setting['type'] ) ? $setting['type'] : '';
+ $flat = isset( $setting['flat'] ) ? $setting['flat'] : '';
+ $category_commissions = isset( $setting['category_commissions'] ) ? $setting['category_commissions'] : [];
+
+ $this->vendor->update_meta( 'dokan_admin_percentage', $percentage );
+ $this->vendor->update_meta( 'dokan_admin_percentage_type', $type );
+ $this->vendor->update_meta( 'dokan_admin_additional_fee', $flat );
+ $this->vendor->update_meta( 'admin_category_commission', $category_commissions );
+
+ return $this->get();
+ }
+
+ public function delete() {
+ if ( ! $this->vendor->get_id() ) {
+ return $this->get();
+ }
+
+ delete_user_meta( $this->vendor->get_id(), 'dokan_admin_percentage' );
+ delete_user_meta( $this->vendor->get_id(), 'dokan_admin_percentage_type' );
+ delete_user_meta( $this->vendor->get_id(), 'dokan_admin_additional_fee' );
+ delete_user_meta( $this->vendor->get_id(), 'admin_category_commission' );
+ }
+}
diff --git a/includes/Commission/Strategies/AbstractStrategy.php b/includes/Commission/Strategies/AbstractStrategy.php
new file mode 100644
index 0000000000..60c9c63c56
--- /dev/null
+++ b/includes/Commission/Strategies/AbstractStrategy.php
@@ -0,0 +1,41 @@
+get_settings();
+
+ return FormulaFactory::get_formula( $settings );
+ }
+}
diff --git a/includes/Commission/Strategies/DefaultStrategy.php b/includes/Commission/Strategies/DefaultStrategy.php
new file mode 100644
index 0000000000..3e3cc4125b
--- /dev/null
+++ b/includes/Commission/Strategies/DefaultStrategy.php
@@ -0,0 +1,50 @@
+get();
+
+ $setting->set_type( DefaultSetting::TYPE )
+ ->set_flat( 0 )
+ ->set_percentage( 0 )
+ ->set_category_commissions( [] );
+
+ return $setting;
+ }
+}
diff --git a/includes/Commission/Strategies/GlobalStrategy.php b/includes/Commission/Strategies/GlobalStrategy.php
new file mode 100644
index 0000000000..c0f4807332
--- /dev/null
+++ b/includes/Commission/Strategies/GlobalStrategy.php
@@ -0,0 +1,71 @@
+category_id = $category_id;
+ }
+
+ /**
+ * Returns category id.
+ *
+ * @since 3.14.0
+ *
+ * @return mixed
+ */
+ public function get_category_id() {
+ return $this->category_id;
+ }
+
+ /**
+ * Returns global strategy source.
+ *
+ * @since 3.14.0
+ *
+ * @return string
+ */
+ public function get_source(): string {
+ return self::SOURCE;
+ }
+
+ /**
+ * Returns global commission settings.
+ *
+ * @since 3.14.0
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function get_settings(): Setting {
+ $setting = Builder::build( Builder::TYPE_GLOBAL, $this->get_category_id() );
+
+ return $setting->get();
+ }
+}
diff --git a/includes/Commission/Strategies/OrderItem.php b/includes/Commission/Strategies/OrderItem.php
new file mode 100644
index 0000000000..5cc0e59562
--- /dev/null
+++ b/includes/Commission/Strategies/OrderItem.php
@@ -0,0 +1,125 @@
+order_item_id = $order_item_id;
+ $this->total_amount = $total_amount;
+ $this->total_quantity = $total_quantity;
+ }
+
+ /**
+ * Returns order item strategy source.
+ *
+ * @since 3.14.0
+ *
+ * @return string
+ */
+ public function get_source(): string {
+ return self::SOURCE;
+ }
+
+ /**
+ * Returns order item commission settings.
+ *
+ * @since 3.14.0
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function get_settings(): Setting {
+ $settings = Builder::build(
+ Builder::TYPE_ORDER_ITEM,
+ [
+ 'id' => $this->order_item_id,
+ 'price' => $this->total_amount,
+ ]
+ );
+
+ return $settings->get();
+ }
+
+ /**
+ * Save order item commission meta data.
+ *
+ * @since 3.14.0
+ *
+ * @param string $type
+ * @param int|float $percentage
+ * @param int|float $flat
+ * @param array $meta_data
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function save_line_item_commission_to_meta( $type, $percentage, $flat, $meta_data ) {
+ $settings = Builder::build(
+ Builder::TYPE_ORDER_ITEM,
+ [
+ 'id' => $this->order_item_id,
+ 'price' => $this->total_amount,
+ ]
+ );
+
+ return $settings->save(
+ [
+ 'type' => $type,
+ 'percentage' => $percentage,
+ 'flat' => $flat,
+ 'meta_data' => $meta_data ,
+ ]
+ );
+ }
+}
diff --git a/includes/Commission/Strategies/Product.php b/includes/Commission/Strategies/Product.php
new file mode 100644
index 0000000000..0a143623d0
--- /dev/null
+++ b/includes/Commission/Strategies/Product.php
@@ -0,0 +1,60 @@
+product_id = $product_id;
+ }
+
+ /**
+ * Returns product strategy source.
+ *
+ * @since 3.14.0
+ *
+ * @return string
+ */
+ public function get_source(): string {
+ return self::SOURCE;
+ }
+
+ /**
+ * Returns product commission settings.
+ *
+ * @since 3.14.0
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function get_settings(): Setting {
+ $settings = Builder::build( Builder::TYPE_PRODUCT, $this->product_id );
+
+ return $settings->get();
+ }
+}
diff --git a/includes/Commission/Strategies/Vendor.php b/includes/Commission/Strategies/Vendor.php
new file mode 100644
index 0000000000..59b7b91122
--- /dev/null
+++ b/includes/Commission/Strategies/Vendor.php
@@ -0,0 +1,86 @@
+vendor_id = $vendor_id;
+ $this->category_id = $category_id;
+ }
+
+ /**
+ * Returns category id.
+ *
+ * @since 3.14.0
+ *
+ * @return int
+ */
+ public function get_category_id() {
+ return $this->category_id;
+ }
+
+ /**
+ * Returns vendor commission source.
+ *
+ * @since 3.14.0
+ *
+ * @return string
+ */
+ public function get_source(): string {
+ return self::SOURCE;
+ }
+
+ /**
+ * Returns vendor commission settings.
+ *
+ * @since 3.14.0
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function get_settings(): Setting {
+ $settings = Builder::build( Builder::TYPE_VENDOR, $this->vendor_id );
+ $settings = $settings->get();
+ $settings->set_category_id( $this->get_category_id() );
+
+ return $settings;
+ }
+}
diff --git a/includes/Commission/Upugrader/Update_Category_Commission.php b/includes/Commission/Upugrader/Update_Category_Commission.php
new file mode 100644
index 0000000000..1e2ea42057
--- /dev/null
+++ b/includes/Commission/Upugrader/Update_Category_Commission.php
@@ -0,0 +1,222 @@
+queue()->add(
+ self::PROCESS_BATCH_HOOK_CREATOR,
+ [],
+ 'dokan_updater_category_processing_creator'
+ );
+ }
+
+ /**
+ * Batch queue creator.
+ *
+ * @since 3.14.0
+ *
+ * @return void
+ */
+ public function process_batch_creator() {
+ // Get total number of products
+ $total = $this->category_count();
+
+ if ( is_wp_error( $total ) || $total === 0 ) {
+ return;
+ }
+
+ $total = $total + 50;
+ $offset = 0;
+
+ do {
+ $this->schedule_next_batch( $offset );
+
+ // Calculate next offset
+ $offset = $offset + self::BATCH_SIZE;
+ } while ( $offset < $total );
+ }
+
+ /**
+ * Process a batch of categories
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @param int $page_number Current page number
+ *
+ * @return void
+ */
+ public function process_batch( $offset ) {
+ // Get categories for this batch
+ $categories = $this->get_categories_batch( $offset );
+
+ if ( ! empty( $categories ) && ! is_wp_error( $categories ) ) {
+ foreach ( $categories as $category ) {
+ $this->schedule_cat_item( $category->term_id );
+ }
+ }
+ }
+
+ /**
+ * Schedule the next batch of categories
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @param int $page_number Next page number to process
+ *
+ * @return void
+ */
+ protected function schedule_next_batch( $offset ) {
+ WC()->queue()->add(
+ self::PROCESS_BATCH_HOOK,
+ [ $offset ],
+ 'dokan_updater_category_processing'
+ );
+ }
+
+ /**
+ * Schedule a category item for processing.
+ *
+ * @since 3.14.0
+ *
+ * @param $term
+ *
+ * @return void
+ */
+ private function schedule_cat_item( $term ) {
+ WC()->queue()->add(
+ self::PROCESS_ITEM_HOOK,
+ [ $term ],
+ 'dokan_updater_category_item_processing'
+ );
+ }
+
+ /**
+ * Get a batch of categories.
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @param int $page_number Page number to fetch
+ *
+ * @return array Array of term objects
+ */
+ protected function get_categories_batch( $offset ) {
+ $args = [
+ 'taxonomy' => 'product_cat',
+ 'number' => self::BATCH_SIZE,
+ 'orderby' => 'name',
+ 'order' => 'ASC',
+ 'hide_empty' => false,
+ 'offset' => $offset,
+ ];
+
+ return get_terms( $args );
+ }
+
+ /**
+ * Get the total number of categories
+ *
+ * @since 3.14.0
+ *
+ * @return int[]|string|string[]|\WP_Error|\WP_Term[]
+ */
+ protected function category_count() {
+ return get_terms(
+ array(
+ 'taxonomy' => 'product_cat',
+ 'hide_empty' => false,
+ 'fields' => 'count',
+ )
+ );
+ }
+
+ /**
+ * Process a single category.
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @param int $term Category term object
+ *
+ * @return void
+ */
+ public function process_single_category( $term_id ) {
+ $dokan_selling = get_option( 'dokan_selling', [] );
+ $category_commission = dokan_get_option( 'commission_category_based_values', 'dokan_selling', [] );
+
+ $commission_type = get_term_meta( $term_id, 'per_category_admin_commission_type', true );
+ $admin_additional_fee = get_term_meta( $term_id, 'per_category_admin_additional_fee', true );
+ $commission = get_term_meta( $term_id, 'per_category_admin_commission', true );
+
+ if ( ! empty( $commission_type ) ) {
+ $category_commission_item = [
+ 'flat' => $admin_additional_fee,
+ 'percentage' => $commission,
+ ];
+
+ if ( Flat::SOURCE === $commission_type ) {
+ $category_commission_item['percentage'] = '';
+ $category_commission_item['flat'] = $commission;
+ } elseif ( Percentage::SOURCE === $commission_type ) {
+ $category_commission_item['percentage'] = $commission;
+ $category_commission_item['flat'] = '';
+ }
+
+ $category_commission['items'][ $term_id ] = $category_commission_item;
+ }
+
+ $dokan_selling['commission_category_based_values'] = $category_commission;
+ update_option( 'dokan_selling', $dokan_selling );
+ }
+
+ /**
+ * Check if processing is currently running.
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @return bool
+ */
+ public function is_processing() {
+ return WC()->queue()->get_next( self::PROCESS_BATCH_HOOK ) !== null;
+ }
+}
diff --git a/includes/Commission/Upugrader/Update_Product_Commission.php b/includes/Commission/Upugrader/Update_Product_Commission.php
new file mode 100644
index 0000000000..4f86b09b70
--- /dev/null
+++ b/includes/Commission/Upugrader/Update_Product_Commission.php
@@ -0,0 +1,220 @@
+queue()->add(
+ self::PROCESS_BATCH_HOOK_CREATOR,
+ [],
+ 'dokan_updater_product_processing_creator'
+ );
+ }
+
+ /**
+ * Batch queue creator.
+ *
+ * @since 3.14.0
+ *
+ * @return void
+ */
+ public function process_batch_creator() {
+ // Get total number of products
+ $total_products = $this->get_total_products();
+ $total_products = $total_products + 50;
+
+ if ( $total_products === 0 ) {
+ return;
+ }
+
+ $offset = 0;
+
+ do {
+ $this->schedule_next_batch( $offset, $total_products );
+
+ // Calculate next offset
+ $offset = $offset + self::BATCH_SIZE;
+ } while ( $offset < $total_products );
+ }
+
+ /**
+ * Process a batch of products
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @param int $offset Current offset
+ * @param int $total_products Total number of products
+ *
+ * @return void
+ */
+ public function process_batch( $offset, $total_products ) {
+ // Get products for this batch
+ $products = $this->get_products_batch( $offset );
+
+ foreach ( $products as $product ) {
+ $this->schedule_item( $product->get_id() );
+ }
+ }
+
+ /**
+ * Schedule the next batch of products
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @param int $offset Current offset
+ * @param int $total_products Total number of products
+ *
+ * @return void
+ */
+ protected function schedule_next_batch( $offset, $total_products ) {
+ WC()->queue()->add(
+ self::PROCESS_BATCH_HOOK, [
+ $offset,
+ $total_products,
+ ],
+ 'dokan_updater_product_processing'
+ );
+ }
+
+ /**
+ * Schedule a single product for processing.
+ *
+ * @since 3.14.0
+ *
+ * @param $item
+ *
+ * @return void
+ */
+ private function schedule_item( $item ) {
+ WC()->queue()->add(
+ self::PROCESS_ITEM_HOOK,
+ [ $item ],
+ 'dokan_updater_product_item_processing'
+ );
+ }
+
+ /**
+ * Get a batch of products
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @param int $offset Current offset
+ *
+ * @return WC_Product[] Array of product objects
+ */
+ protected function get_products_batch( $offset ) {
+ $args = [
+ 'status' => 'publish',
+ 'limit' => self::BATCH_SIZE,
+ 'offset' => $offset,
+ 'orderby' => 'ID',
+ 'order' => 'ASC',
+ ];
+
+ return wc_get_products( $args );
+ }
+
+ /**
+ * Get total number of products
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @return int
+ */
+ protected function get_total_products() {
+ $args = [
+ 'status' => 'any',
+ 'limit' => -1,
+ 'return' => 'ids',
+ ];
+
+ $products = wc_get_products( $args );
+
+ return count( $products );
+ }
+
+ /**
+ * Process a single product
+ * Customize this method based on what you need to do with each product
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @param int $product
+ *
+ * @return void
+ */
+ public function process_single_product( $product_id ) {
+ $commission = dokan()->product->get_commission_settings( $product_id );
+
+ $commission_type_old = $commission->get_type();
+
+ $commission->set_type( Fixed::SOURCE );
+
+ if ( Flat::SOURCE === $commission_type_old ) {
+ $commission->set_flat( $commission->get_percentage() );
+ $commission->set_percentage( '' );
+ } elseif ( Percentage::SOURCE === $commission_type_old ) {
+ $commission->set_flat( '' );
+ }
+
+ dokan()->product->save_commission_settings(
+ $product_id,
+ [
+ 'type' => $commission->get_type(),
+ 'percentage' => $commission->get_percentage(),
+ 'flat' => $commission->get_flat(),
+ ]
+ );
+ }
+
+ /**
+ * Check if processing is currently running
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @return bool
+ */
+ public function is_processing() {
+ return WC()->queue()->get_next( self::PROCESS_BATCH_HOOK ) !== null;
+ }
+}
diff --git a/includes/Commission/Upugrader/Update_Vendor_Commission.php b/includes/Commission/Upugrader/Update_Vendor_Commission.php
new file mode 100644
index 0000000000..b310fe3cc4
--- /dev/null
+++ b/includes/Commission/Upugrader/Update_Vendor_Commission.php
@@ -0,0 +1,203 @@
+queue()->add(
+ self::PROCESS_BATCH_HOOK_CREATOR,
+ [],
+ 'dokan_updater_vendor_processing_creator'
+ );
+ }
+
+ /**
+ * Batch queue creator.
+ *
+ * @since 3.14.0
+ *
+ * @return void
+ */
+ public function process_batch_creator() {
+ $counts = dokan_get_seller_status_count();
+ $total_items = $counts['total'];
+ $max_pages = ceil( $total_items / self::BATCH_SIZE );
+ $max_pages = $max_pages + 5;
+
+ for ( $page = 1; $page <= $max_pages; $page++ ) {
+ // Schedule the current page for batch processing
+ WC()->queue()->add(
+ self::PROCESS_BATCH_HOOK,
+ [ $page, $max_pages ],
+ 'dokan_updater_vendor_processing'
+ );
+ }
+ }
+
+ /**
+ * Process a batch of vendors
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @param int $page_number Current page number
+ * @param int $max_pages Total number of pages
+ *
+ * @return void
+ */
+ public function process_batch( $page_number, $max_pages ) { // phpcs:ignore
+ $vendors = $this->get_vendors_batch( $page_number );
+
+ if ( ! empty( $vendors ) ) {
+ foreach ( $vendors as $vendor ) {
+ $this->schedule_item( $vendor->get_id() );
+ }
+ }
+ }
+
+ /**
+ * Get a batch of vendors
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @param int $page_number Page number to fetch
+ *
+ * @return \WeDevs\Dokan\Vendor\Vendor[] Array of vendor objects
+ */
+ protected function get_vendors_batch( $page_number ) {
+ return dokan()->vendor->all(
+ [
+ 'paged' => $page_number,
+ 'number' => self::BATCH_SIZE,
+ ]
+ );
+ }
+
+ /**
+ * Schedule an individual vendor for processing
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @param int $vendor_id
+ *
+ * @return void
+ */
+ private function schedule_item( $vendor_id ) {
+ WC()->queue()->add(
+ self::PROCESS_ITEM_HOOK,
+ [ $vendor_id ],
+ 'dokan_updater_vendor_item_processing'
+ );
+ }
+
+ /**
+ * Process a single vendor
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @param int $vendor_id Vendor ID
+ *
+ * @return void
+ */
+ public function process_single_vendor( $vendor_id ) {
+ try {
+ $vendor = dokan()->vendor->get( $vendor_id );
+ $commission = $vendor->get_commission_settings();
+
+ $commission_type_old = $commission->get_type();
+ $commission->set_type( Fixed::SOURCE );
+
+ $percentage = $commission->get_percentage();
+
+ if ( Flat::SOURCE === $commission_type_old ) {
+ $commission->set_percentage( '' );
+ $commission->set_flat( $percentage );
+ } elseif ( Percentage::SOURCE === $commission_type_old ) {
+ $commission->set_percentage( $percentage );
+ $commission->set_flat( '' );
+ }
+
+ $vendor->save_commission_settings(
+ [
+ 'type' => $commission->get_type(),
+ 'flat' => $commission->get_flat(),
+ 'percentage' => $commission->get_percentage(),
+ 'category_commissions' => $commission->get_category_commissions(),
+ ]
+ );
+
+ // Log success
+ $this->log_vendor_update( $vendor_id, true );
+ } catch ( \Exception $e ) {
+ // Log error
+ $this->log_vendor_update( $vendor_id, false, $e->getMessage() );
+ }
+ }
+
+ /**
+ * Log vendor update status
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @param int $vendor_id
+ * @param bool $success
+ * @param string $error_message
+ *
+ * @return void
+ */
+ private function log_vendor_update( $vendor_id, $success, $error_message = '' ) {
+ $log_key = 'dokan_commission_upgrade_vendor_' . $vendor_id;
+ update_option(
+ $log_key, [
+ 'status' => $success ? 'success' : 'error',
+ 'error_message' => $error_message,
+ 'timestamp' => current_time( 'mysql' ),
+ ]
+ );
+ }
+
+ /**
+ * Check if processing is currently running
+ *
+ * @since DOKAN_PRO_SINCE
+ *
+ * @return bool
+ */
+ public function is_processing() {
+ return WC()->queue()->get_next( self::PROCESS_BATCH_HOOK ) !== null
+ || WC()->queue()->get_next( self::PROCESS_ITEM_HOOK ) !== null;
+ }
+}
diff --git a/includes/Contracts/Hookable.php b/includes/Contracts/Hookable.php
new file mode 100644
index 0000000000..9dacefeb32
--- /dev/null
+++ b/includes/Contracts/Hookable.php
@@ -0,0 +1,19 @@
+
description ) ) { ?>
- description; ?>
+
+ description ); ?>
+
id ) . esc_attr( $value ); ?>">
diff --git a/includes/Dashboard/Templates/Products.php b/includes/Dashboard/Templates/Products.php
index 7128a1092f..25547dadca 100644
--- a/includes/Dashboard/Templates/Products.php
+++ b/includes/Dashboard/Templates/Products.php
@@ -621,6 +621,8 @@ public function handle_delete_product() {
exit;
}
+ do_action( 'dokan_product_delete', $product_id );
+
dokan()->product->delete( $product_id, true );
do_action( 'dokan_product_deleted', $product_id );
diff --git a/includes/DependencyManagement/BaseServiceProvider.php b/includes/DependencyManagement/BaseServiceProvider.php
new file mode 100644
index 0000000000..0ad0ae078e
--- /dev/null
+++ b/includes/DependencyManagement/BaseServiceProvider.php
@@ -0,0 +1,81 @@
+services as $class ) {
+ $implements_more = class_implements( $class );
+ if ( $implements_more ) {
+ $implements = array_merge( $implements, $implements_more );
+ }
+ }
+
+ $implements = array_unique( $implements );
+
+ return array_key_exists( $alias, $implements );
+ }
+
+ /**
+ * Register a class in the container and add tags for all the interfaces it implements.
+ *
+ * This also updates the `$this->provides` property with the interfaces provided by the class, and ensures
+ * that the property doesn't contain duplicates.
+ *
+ * @param string $id Entry ID (typically a class or interface name).
+ * @param mixed|null $concrete Concrete entity to register under that ID, null for automatic creation.
+ * @param bool|null $shared Whether to register the class as shared (`get` always returns the same instance)
+ * or not.
+ *
+ * @return DefinitionInterface
+ */
+ protected function add_with_implements_tags( string $id, $concrete = null, bool $shared = null ): DefinitionInterface {
+ $definition = $this->getContainer()->add( $id, $concrete, $shared );
+
+ foreach ( class_implements( $id ) as $interface ) {
+ $definition->addTag( $interface );
+ }
+
+ return $definition;
+ }
+
+ /**
+ * Register a shared class in the container and add tags for all the interfaces it implements.
+ *
+ * @param string $id Entry ID (typically a class or interface name).
+ * @param mixed|null $concrete Concrete entity to register under that ID, null for automatic creation.
+ *
+ * @return DefinitionInterface
+ */
+ protected function share_with_implements_tags( string $id, $concrete = null ): DefinitionInterface {
+ return $this->add_with_implements_tags( $id, $concrete, true );
+ }
+}
diff --git a/includes/DependencyManagement/BootableServiceProvider.php b/includes/DependencyManagement/BootableServiceProvider.php
new file mode 100644
index 0000000000..7216b5bead
--- /dev/null
+++ b/includes/DependencyManagement/BootableServiceProvider.php
@@ -0,0 +1,21 @@
+invokeInit( $instance );
+ return $instance;
+ }
+
+ /**
+ * Invoke methods on resolved instance, including 'init'.
+ *
+ * @param object $instance The concrete to invoke methods on.
+ *
+ * @return object
+ */
+ protected function invokeMethods( $instance ): object {
+ $this->invokeInit( $instance );
+ parent::invokeMethods( $instance );
+ return $instance;
+ }
+
+ /**
+ * Invoke the 'init' method on a resolved object.
+ *
+ * Constructor injection causes backwards compatibility problems
+ * so we will rely on method injection via an internal method.
+ *
+ * @param object $instance The resolved object.
+ * @return void
+ */
+ private function invokeInit( $instance ) {
+ $resolved = $this->resolveArguments( $this->arguments );
+
+ if ( method_exists( $instance, static::INJECTION_METHOD ) ) {
+ call_user_func_array( array( $instance, static::INJECTION_METHOD ), $resolved );
+ }
+ }
+
+ /**
+ * Forget the cached resolved object, so the next time it's requested
+ * it will be resolved again.
+ */
+ public function forgetResolved() {
+ $this->resolved = null;
+ }
+}
diff --git a/includes/DependencyManagement/Providers/AdminServiceProvider.php b/includes/DependencyManagement/Providers/AdminServiceProvider.php
new file mode 100644
index 0000000000..0b81f74577
--- /dev/null
+++ b/includes/DependencyManagement/Providers/AdminServiceProvider.php
@@ -0,0 +1,61 @@
+services, true );
+ }
+
+ /**
+ * Register the classes.
+ */
+ public function register(): void {
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Admin\Hooks::class, \WeDevs\Dokan\Admin\Hooks::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Admin\Menu::class, \WeDevs\Dokan\Admin\Menu::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Admin\AdminBar::class, \WeDevs\Dokan\Admin\AdminBar::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Admin\Pointers::class, \WeDevs\Dokan\Admin\Pointers::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Admin\Settings::class, \WeDevs\Dokan\Admin\Settings::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Admin\UserProfile::class, \WeDevs\Dokan\Admin\UserProfile::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Admin\SetupWizard::class, \WeDevs\Dokan\Admin\SetupWizard::class )
+ ->addTag( self::TAG );
+ }
+}
diff --git a/includes/DependencyManagement/Providers/AjaxServiceProvider.php b/includes/DependencyManagement/Providers/AjaxServiceProvider.php
new file mode 100644
index 0000000000..96a830e730
--- /dev/null
+++ b/includes/DependencyManagement/Providers/AjaxServiceProvider.php
@@ -0,0 +1,37 @@
+services, true );
+ }
+
+ /**
+ * Register the classes.
+ */
+ public function register(): void {
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Ajax::class, \WeDevs\Dokan\Ajax::class )
+ ->addTag( self::TAG );
+ }
+}
diff --git a/includes/DependencyManagement/Providers/AnalyticsServiceProvider.php b/includes/DependencyManagement/Providers/AnalyticsServiceProvider.php
new file mode 100644
index 0000000000..44f9d17ab5
--- /dev/null
+++ b/includes/DependencyManagement/Providers/AnalyticsServiceProvider.php
@@ -0,0 +1,68 @@
+services, true ) || in_array( $alias, self::TAGS, true );
+ }
+
+ /**
+ * Register the classes.
+ */
+ public function register(): void {
+ foreach ( $this->services as $service ) {
+ $definition = $this->getContainer()
+ ->addShared(
+ $service, function () use ( $service ) {
+ return new $service();
+ }
+ );
+ $this->add_tags( $definition, self::TAGS );
+ }
+ }
+
+ private function add_tags( DefinitionInterface $definition, $tags ) {
+ foreach ( $tags as $tag ) {
+ $definition = $definition->addTag( $tag );
+ }
+ }
+}
diff --git a/includes/DependencyManagement/Providers/CommonServiceProvider.php b/includes/DependencyManagement/Providers/CommonServiceProvider.php
new file mode 100644
index 0000000000..03d0fb2858
--- /dev/null
+++ b/includes/DependencyManagement/Providers/CommonServiceProvider.php
@@ -0,0 +1,69 @@
+services, true );
+ }
+
+ /**
+ * Register the classes.
+ */
+ public function register(): void {
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Withdraw\Hooks::class, \WeDevs\Dokan\Withdraw\Hooks::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Product\Hooks::class, \WeDevs\Dokan\Product\Hooks::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\ProductCategory\Hooks::class, \WeDevs\Dokan\ProductCategory\Hooks::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Upgrade\Hooks::class, \WeDevs\Dokan\Upgrade\Hooks::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Vendor\Hooks::class, \WeDevs\Dokan\Vendor\Hooks::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Vendor\UserSwitch::class, \WeDevs\Dokan\Vendor\UserSwitch::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\CacheInvalidate::class, \WeDevs\Dokan\CacheInvalidate::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Shipping\Hooks::class, \WeDevs\Dokan\Shipping\Hooks::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Privacy::class, \WeDevs\Dokan\Privacy::class )
+ ->addTag( self::TAG );
+ }
+}
diff --git a/includes/DependencyManagement/Providers/FrontendServiceProvider.php b/includes/DependencyManagement/Providers/FrontendServiceProvider.php
new file mode 100644
index 0000000000..54fa4b247d
--- /dev/null
+++ b/includes/DependencyManagement/Providers/FrontendServiceProvider.php
@@ -0,0 +1,41 @@
+services, true );
+ }
+
+ /**
+ * Register the classes.
+ */
+ public function register(): void {
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\Vendor\StoreListsFilter::class, \WeDevs\Dokan\Vendor\StoreListsFilter::class )
+ ->addTag( self::TAG );
+
+ $this->getContainer()
+ ->addShared( \WeDevs\Dokan\ThemeSupport\Manager::class, \WeDevs\Dokan\ThemeSupport\Manager::class )
+ ->addTag( self::TAG );
+ }
+}
diff --git a/includes/DependencyManagement/Providers/ServiceProvider.php b/includes/DependencyManagement/Providers/ServiceProvider.php
new file mode 100644
index 0000000000..9ae5b8e70c
--- /dev/null
+++ b/includes/DependencyManagement/Providers/ServiceProvider.php
@@ -0,0 +1,91 @@
+ \WeDevs\Dokan\Blocks\ProductBlock::class,
+ 'pageview' => \WeDevs\Dokan\PageViews::class,
+ 'seller_wizard' => \WeDevs\Dokan\Vendor\SetupWizard::class,
+ 'core' => \WeDevs\Dokan\Core::class,
+ 'scripts' => \WeDevs\Dokan\Assets::class,
+ 'email' => \WeDevs\Dokan\Emails\Manager::class,
+ 'vendor' => \WeDevs\Dokan\Vendor\Manager::class,
+ 'product' => \WeDevs\Dokan\Product\Manager::class,
+ 'shortcodes' => \WeDevs\Dokan\Shortcodes\Shortcodes::class,
+ 'registration' => \WeDevs\Dokan\Registration::class,
+ 'order' => \WeDevs\Dokan\Order\Manager::class,
+ 'order_controller' => \WeDevs\Dokan\Order\Controller::class,
+ 'api' => \WeDevs\Dokan\REST\Manager::class,
+ 'withdraw' => \WeDevs\Dokan\Withdraw\Manager::class,
+ 'dashboard' => \WeDevs\Dokan\Dashboard\Manager::class,
+ 'commission' => \WeDevs\Dokan\Commission::class,
+ 'fees' => \WeDevs\Dokan\Fees::class,
+ 'customizer' => \WeDevs\Dokan\Customizer::class,
+ 'upgrades' => \WeDevs\Dokan\Upgrade\Manager::class,
+ 'product_sections' => \WeDevs\Dokan\ProductSections\Manager::class,
+ 'reverse_withdrawal' => \WeDevs\Dokan\ReverseWithdrawal\ReverseWithdrawal::class,
+ 'dummy_data_importer' => \WeDevs\Dokan\DummyData\Importer::class,
+ 'catalog_mode' => \WeDevs\Dokan\CatalogMode\Controller::class,
+ 'bg_process' => \WeDevs\Dokan\BackgroundProcess\Manager::class,
+ 'frontend_manager' => \WeDevs\Dokan\Frontend\Frontend::class,
+ 'rewrite' => \WeDevs\Dokan\Rewrites::class,
+ 'widgets' => \WeDevs\Dokan\Widgets\Manager::class,
+ 'admin_notices' => \WeDevs\Dokan\Admin\Notices\Manager::class,
+ 'tracker' => \WeDevs\Dokan\Tracker::class,
+ ];
+
+ /**
+ * @inheritDoc
+ *
+ * @return void
+ */
+ public function boot(): void {
+ $this->getContainer()->addServiceProvider( new AdminServiceProvider() );
+ $this->getContainer()->addServiceProvider( new CommonServiceProvider() );
+ $this->getContainer()->addServiceProvider( new FrontendServiceProvider() );
+ $this->getContainer()->addServiceProvider( new AjaxServiceProvider() );
+ $this->getContainer()->addServiceProvider( new AnalyticsServiceProvider() );
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * Check if the service provider can provide the given service alias.
+ *
+ * @param string $alias The service alias to check.
+ * @return bool True if the service provider can provide the service, false otherwise.
+ */
+ public function provides( string $alias ): bool {
+ if ( isset( $this->services[ $alias ] ) ) {
+ return true;
+ }
+
+ return parent::provides( $alias );
+ }
+
+ /**
+ * Register the classes.
+ */
+ public function register(): void {
+ foreach ( $this->services as $key => $class_name ) {
+ $this->getContainer()->addShared( $key, $class_name )->addTag( self::TAG );
+ }
+ }
+}
diff --git a/includes/Fees.php b/includes/Fees.php
new file mode 100644
index 0000000000..0132612bdd
--- /dev/null
+++ b/includes/Fees.php
@@ -0,0 +1,268 @@
+commission in version in 3.14.0
+ *
+ * @since 3.14.0
+ *
+ * @return void
+ */
+ public function __construct() {
+ add_filter( 'woocommerce_order_item_get_formatted_meta_data', [ $this, 'hide_extra_data' ] );
+ add_action( 'woocommerce_order_status_changed', [ $this, 'calculate_gateway_fee' ], 100 );
+ add_action( 'woocommerce_thankyou_ppec_paypal', [ $this, 'calculate_gateway_fee' ] );
+ add_action( 'woocommerce_paypal_payments_order_captured', [ $this, 'calculate_gateway_fee' ], 99 );
+ }
+
+ /**
+ * Hide extra meta data
+ *
+ * @since 2.9.21
+ *
+ * @param array
+ *
+ * @return array
+ */
+ public function hide_extra_data( $formatted_meta ) {
+ $meta_to_hide = [ '_dokan_commission_rate', '_dokan_commission_type', '_dokan_additional_fee' ];
+
+ foreach ( $formatted_meta as $key => $meta ) {
+ if ( in_array( $meta->key, $meta_to_hide, true ) ) {
+ unset( $formatted_meta[ $key ] );
+ }
+ }
+
+ return $formatted_meta;
+ }
+
+ /**
+ * Calculate gateway fee
+ * Moved from dokan()->commission in version in 3.14.0
+ *
+ * @since 2.9.21
+ *
+ * @param int $order_id
+ *
+ * @return void
+ */
+ public function calculate_gateway_fee( $order_id ) {
+ global $wpdb;
+ $order = wc_get_order( $order_id );
+ $processing_fee = $this->get_processing_fee( $order );
+
+ if ( ! $processing_fee ) {
+ return;
+ }
+
+ foreach ( dokan()->commission->get_all_order_to_be_processed( $order ) as $tmp_order ) {
+ $gateway_fee_added = $tmp_order->get_meta( 'dokan_gateway_fee' );
+ $vendor_earning = dokan()->commission->get_earning_from_order_table( $tmp_order->get_id() );
+
+ if ( is_null( $vendor_earning ) || $gateway_fee_added ) {
+ continue;
+ }
+
+ $gateway_fee = wc_format_decimal( ( $processing_fee / $order->get_total() ) * $tmp_order->get_total() );
+
+ // Ensure sub-orders also get the correct payment gateway fee (if any)
+ $gateway_fee = apply_filters( 'dokan_get_processing_gateway_fee', $gateway_fee, $tmp_order, $order );
+ $net_amount = $vendor_earning - $gateway_fee;
+ $net_amount = apply_filters( 'dokan_orders_vendor_net_amount', $net_amount, $vendor_earning, $gateway_fee, $tmp_order, $order );
+
+ $wpdb->update(
+ $wpdb->dokan_orders,
+ [ 'net_amount' => (float) $net_amount ],
+ [ 'order_id' => $tmp_order->get_id() ],
+ [ '%f' ],
+ [ '%d' ]
+ );
+
+ $wpdb->update(
+ $wpdb->dokan_vendor_balance,
+ [ 'debit' => (float) $net_amount ],
+ [
+ 'trn_id' => $tmp_order->get_id(),
+ 'trn_type' => 'dokan_orders',
+ ],
+ [ '%f' ],
+ [ '%d', '%s' ]
+ );
+
+ $tmp_order->update_meta_data( 'dokan_gateway_fee', $gateway_fee );
+ $tmp_order->save();
+
+ if ( apply_filters( 'dokan_commission_log_gateway_fee_to_order_note', true, $tmp_order ) ) {
+ // translators: %s: Geteway fee
+ $tmp_order->add_order_note( sprintf( __( 'Payment gateway processing fee %s', 'dokan-lite' ), wc_format_decimal( $gateway_fee, 2 ) ) );
+ }
+ //remove cache for seller earning
+ $cache_key = "get_earning_from_order_table_{$tmp_order->get_id()}_seller";
+ Cache::delete( $cache_key );
+
+ // remove cache for seller earning
+ $cache_key = "get_earning_from_order_table_{$tmp_order->get_id()}_admin";
+ Cache::delete( $cache_key );
+ }
+ }
+
+ /**
+ * Get processing fee
+ *
+ * @since DOKAN_LITE_SINCE
+ *
+ * @param WC_Order $order
+ *
+ * @return float
+ */
+ public function get_processing_fee( $order ) {
+ $processing_fee = 0;
+ $payment_method = $order->get_payment_method();
+
+ if ( 'paypal' === $payment_method ) {
+ $processing_fee = $order->get_meta( 'PayPal Transaction Fee' );
+ } elseif ( 'ppec_paypal' === $payment_method && defined( 'PPEC_FEE_META_NAME_NEW' ) ) {
+ $processing_fee = $order->get_meta( PPEC_FEE_META_NAME_NEW );
+ } elseif ( 'ppcp-gateway' === $payment_method && class_exists( PayPalGateway::class ) ) {
+ $breakdown = $order->get_meta( PayPalGateway::FEES_META_KEY );
+ if ( is_array( $breakdown ) && isset( $breakdown['paypal_fee'] ) && is_array( $breakdown['paypal_fee'] ) ) {
+ $processing_fee = $breakdown['paypal_fee']['value'];
+ }
+ }
+
+ return apply_filters( 'dokan_get_processing_fee', $processing_fee, $order );
+ }
+
+ /**
+ * Get shipping fee recipient
+ * Move from commission.php in version 3.14.0
+ *
+ * @since 2.9.21
+ * @since 3.4.1 introduced the shipping fee recipient hook
+ *
+ * @param WC_Order|int $order
+ *
+ * @return string
+ */
+ public function get_shipping_fee_recipient( $order ) {
+ if ( is_numeric( $order ) ) {
+ $order = wc_get_order( $order );
+ }
+
+ if ( ! $order ) {
+ return new WP_Error( 'invalid-order-object', __( 'Please provide a valid order object.', 'dokan-lite' ) );
+ }
+
+ $saved_shipping_recipient = $order->get_meta( 'shipping_fee_recipient', true );
+
+ if ( $saved_shipping_recipient ) {
+ $shipping_recipient = $saved_shipping_recipient;
+ } else {
+ $shipping_recipient = apply_filters( 'dokan_shipping_fee_recipient', dokan_get_option( 'shipping_fee_recipient', 'dokan_selling', 'seller' ), $order->get_id() );
+ $order->update_meta_data( 'shipping_fee_recipient', $shipping_recipient );
+ $order->save();
+ }
+
+ return $shipping_recipient;
+ }
+
+ /**
+ * Get tax fee recipient
+ * Move from commission.php in version 3.14.0
+ *
+ * @since 2.9.21
+ * @since 3.4.1 introduced the tax fee recipient hook
+ *
+ * @param WC_Order|int $order
+ *
+ * @return string|WP_Error
+ */
+ public function get_tax_fee_recipient( $order ) {
+ if ( is_numeric( $order ) ) {
+ $order = wc_get_order( $order );
+ }
+
+ if ( ! $order ) {
+ return new WP_Error( 'invalid-order-object', __( 'Please provide a valid order object.', 'dokan-lite' ) );
+ }
+
+ $saved_tax_recipient = $order->get_meta( 'tax_fee_recipient', true );
+
+ if ( $saved_tax_recipient ) {
+ $tax_recipient = $saved_tax_recipient;
+ } else {
+ $tax_recipient = apply_filters( 'dokan_tax_fee_recipient', dokan_get_option( 'tax_fee_recipient', 'dokan_selling', 'seller' ), $order->get_id() );
+ $order->update_meta_data( 'tax_fee_recipient', $tax_recipient );
+ $order->save();
+ }
+
+ return $tax_recipient;
+ }
+
+ /**
+ * Get shipping tax fee recipient.
+ * Move from commission.php in version 3.14.0
+ *
+ * @since 3.7.19
+ *
+ * @param WC_Order $order Order.
+ *
+ * @return string
+ */
+ public function get_shipping_tax_fee_recipient( $order ): string {
+ // get saved tax recipient
+ $saved_shipping_tax_recipient = $order->get_meta( 'shipping_tax_fee_recipient', true );
+ if ( ! empty( $saved_shipping_tax_recipient ) ) {
+ return $saved_shipping_tax_recipient;
+ }
+
+ $default_tax_fee_recipient = $this->get_tax_fee_recipient( $order->get_id() ); // this is needed for backward compatibility
+ $shipping_tax_recipient = dokan_get_option( 'shipping_tax_fee_recipient', 'dokan_selling', $default_tax_fee_recipient );
+ $shipping_tax_recipient = apply_filters( 'dokan_shipping_tax_fee_recipient', $shipping_tax_recipient, $order->get_id() );
+
+ $order->update_meta_data( 'shipping_tax_fee_recipient', $shipping_tax_recipient, true );
+ $order->save();
+
+ return $shipping_tax_recipient;
+ }
+
+ /**
+ * Get total shipping tax refunded for the order.
+ * Move from commission.php in version 3.14.0
+ *
+ * @since 3.7.19
+ *
+ * @param WC_Order $order Order.
+ *
+ * @return float
+ */
+ public function get_total_shipping_tax_refunded( WC_Order $order ): float {
+ $tax_refunded = 0.0;
+
+ foreach ( $order->get_items( 'shipping' ) as $item_id => $item ) {
+ /**
+ * @var \WC_Order_Item_Shipping $item Shipping item.
+ */
+ foreach ( $item->get_taxes()['total'] as $tax_id => $tax_amount ) {
+ $tax_refunded += $order->get_tax_refunded_for_item( $item->get_id(), $tax_id, 'shipping' );
+ }
+ }
+
+ return $tax_refunded;
+ }
+}
diff --git a/includes/Frontend/MyAccount/BecomeAVendor.php b/includes/Frontend/MyAccount/BecomeAVendor.php
index 60506c5a15..40a735c16f 100644
--- a/includes/Frontend/MyAccount/BecomeAVendor.php
+++ b/includes/Frontend/MyAccount/BecomeAVendor.php
@@ -158,6 +158,10 @@ public function load_customer_to_vendor_update_template() {
$user_id = get_current_user_id();
$error_message = '';
+ if ( is_admin() ) {
+ return;
+ }
+
if ( ! $user_id ) {
$error_message = __( 'You need to login before applying for vendor.', 'dokan-lite' );
} elseif ( $user_id && dokan_is_user_seller( $user_id ) ) {
@@ -167,7 +171,7 @@ public function load_customer_to_vendor_update_template() {
}
if ( $error_message ) {
- if ( function_exists( 'wc_add_notice' ) && function_exists( 'wc_print_notices' ) ) {
+ if ( WC()->session && function_exists( 'wc_add_notice' ) && function_exists( 'wc_print_notices' ) ) {
wc_add_notice( $error_message, 'error' );
// print error message
wc_print_notices();
diff --git a/includes/Install/Installer.php b/includes/Install/Installer.php
index ee3ceeb14c..4a49cd0ae4 100755
--- a/includes/Install/Installer.php
+++ b/includes/Install/Installer.php
@@ -41,9 +41,8 @@ public function do_install() {
$was_installed_before = get_option( 'dokan_theme_version', false );
- update_option( 'dokan_theme_version', DOKAN_PLUGIN_VERSION );
-
if ( ! $was_installed_before ) {
+ update_option( 'dokan_theme_version', DOKAN_PLUGIN_VERSION );
update_option( 'dokan_admin_setup_wizard_ready', false );
set_transient( '_dokan_setup_page_redirect', true, 30 );
}
@@ -327,6 +326,7 @@ public function create_tables() {
$this->create_refund_table();
$this->create_vendor_balance_table();
$this->create_reverse_withdrawal_table();
+ $this->create_dokan_order_stats_table();
}
/**
@@ -536,4 +536,31 @@ private static function parse_update_notice( $content, $new_version ) {
return wp_kses_post( $upgrade_notice );
}
+
+ public function create_dokan_order_stats_table() {
+ // Following imported here because this method could be called from the others file.
+ include_once ABSPATH . 'wp-admin/includes/upgrade.php';
+
+ global $wpdb;
+
+ $sql = "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}dokan_order_stats` (
+ `order_id` bigint UNSIGNED NOT NULL,
+ `vendor_id` bigint UNSIGNED NOT NULL DEFAULT '0',
+ `order_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0 = Dokan Parent Order, 1 = Dokan Single Vendor Order, 2 = Dokan Suborder, 3 = Refund of Dokan Parent Order, 4 = Refund of Dokan Suborder, 5 = Refund of Dokan Single Order',
+ `vendor_earning` double NOT NULL DEFAULT '0',
+ `vendor_gateway_fee` double NOT NULL DEFAULT '0',
+ `vendor_shipping_fee` double NOT NULL DEFAULT '0',
+ `vendor_discount` double NOT NULL DEFAULT '0',
+ `admin_commission` double NOT NULL DEFAULT '0',
+ `admin_gateway_fee` double NOT NULL DEFAULT '0',
+ `admin_shipping_fee` double NOT NULL DEFAULT '0',
+ `admin_discount` double NOT NULL DEFAULT '0',
+ `admin_subsidy` double NOT NULL DEFAULT '0',
+ PRIMARY KEY (order_id),
+ KEY vendor_id (vendor_id),
+ KEY order_type (order_type)
+ ) ENGINE=InnoDB {$wpdb->get_charset_collate()};";
+
+ dbDelta( $sql );
+ }
}
diff --git a/includes/Order/Admin/Hooks.php b/includes/Order/Admin/Hooks.php
index 1fc7e739bf..591334a43b 100644
--- a/includes/Order/Admin/Hooks.php
+++ b/includes/Order/Admin/Hooks.php
@@ -55,6 +55,9 @@ public function __construct() {
add_filter( 'woocommerce_order_item_display_meta_value', [ $this, 'change_order_item_display_meta_value' ], 10, 2 );
add_filter( 'woocommerce_reports_get_order_report_query', [ $this, 'admin_order_reports_remove_parents' ] );
add_filter( 'post_class', [ $this, 'admin_shop_order_row_classes' ], 10, 3 );
+
+ // Add commission meta-box in order details page.
+ add_action( 'add_meta_boxes', [ $this, 'add_commission_metabox_and_related_orders_in_order_details_page' ], 10, 2 );
}
/**
@@ -89,9 +92,10 @@ public function admin_shop_order_edit_columns( $existing_columns ) {
}
$column_to_insert = [
- 'seller' => __( 'Vendor', 'dokan-lite' ),
- 'wc_actions' => __( 'Actions', 'dokan-lite' ),
- 'suborder' => __( 'Sub Order', 'dokan-lite' ),
+ 'admin_commission' => __( 'Commission', 'dokan-lite' ),
+ 'seller' => __( 'Vendor', 'dokan-lite' ),
+ 'wc_actions' => __( 'Actions', 'dokan-lite' ),
+ 'suborder' => __( 'Sub Order', 'dokan-lite' ),
];
$columns = dokan_array_insert_after( $existing_columns, $column_to_insert );
@@ -120,7 +124,7 @@ public function shop_order_custom_columns( $col, $post_id ) {
return;
}
- if ( ! in_array( $col, [ 'order_number', 'suborder', 'seller' ], true ) ) {
+ if ( ! in_array( $col, [ 'order_number', 'suborder', 'seller', 'admin_commission' ], true ) ) {
return;
}
@@ -155,10 +159,25 @@ public function shop_order_custom_columns( $col, $post_id ) {
}
break;
+
+ case 'admin_commission':
+ if ( '1' === $order->get_meta( 'has_sub_order', true ) ) {
+ $output = '--';
+ } else {
+ $commission = dokan()->commission->get_earning_by_order( $order->get_id(), 'admin' );
+ /**
+ * In case of refund, we are not excluding gateway fee; in case of stripe full/partial refund net amount can be negative
+ */
+ if ( $commission < 0 ) {
+ $commission = 0;
+ }
+ $output = wc_price( $commission );
+ }
+ break;
}
if ( ! empty( $output ) ) {
- echo apply_filters( "dokan_manage_shop_order_custom_columns_{$col}", $output, $order );
+ echo wp_kses_post( apply_filters( "dokan_manage_shop_order_custom_columns_{$col}", $output, $order ) );
}
}
@@ -168,15 +187,15 @@ public function shop_order_custom_columns( $col, $post_id ) {
* @since 3.8.0 Moved from includes/Admin/Hooks.php file
* @since 3.8.0 Rewritten for HPOS
*
- * @param string[] $classes An array of post class names.
- * @param string[] $class An array of additional class names added to the post.
+ * @param string[] $classes An array of post class names.
+ * @param string[] $css_class An array of additional class names added to the post.
* @param int $post_id The post ID.
*
* @global WP_Post $post
*
* @return array
*/
- public function admin_shop_order_row_classes( $classes, $class, $post_id ) {
+ public function admin_shop_order_row_classes( $classes, $css_class, $post_id ) {
if ( ! OrderUtil::is_order( $post_id ) ) {
return $classes;
}
@@ -513,4 +532,127 @@ public function admin_shop_order_toggle_sub_orders( $typenow ) {
echo '' . esc_html__( 'Toggle Sub-orders', 'dokan-lite' ) . ' ';
}
}
+
+ /**
+ * Add dokan commission meta-box in woocommerce order details page
+ * and add suborders or related sibling orders in meta-box.
+ *
+ * @since 3.14.0
+ *
+ * @return void
+ */
+ public function add_commission_metabox_and_related_orders_in_order_details_page( $post_type, $post ) {
+ $screen = OrderUtil::get_order_admin_screen();
+
+ if ( $screen !== $post_type ) {
+ return;
+ }
+
+ $order = dokan()->order->get( OrderUtil::get_post_or_order_id( $post ) );
+ $has_sub_order = '1' === $order->get_meta( 'has_sub_order', true );
+
+ // Check if the screen is order details page and if it is a child order.
+ if ( ! $has_sub_order ) {
+ add_meta_box(
+ 'dokan_commission_box',
+ __( 'Commissions', 'dokan-lite' ),
+ [ $this, 'commission_meta_box' ],
+ $screen,
+ 'normal',
+ 'core'
+ );
+ }
+
+ // If the order has is a parent order or a child order, avoid those order that has no parent order or child order.
+ if ( $has_sub_order || ! empty( $order->get_parent_id() ) ) {
+ $title = $has_sub_order ? __( 'Sub orders', 'dokan-lite' ) : __( 'Related orders', 'dokan-lite' );
+
+ add_meta_box(
+ 'dokan_sub_or_related_orders',
+ $title,
+ [ $this, 'sub_or_related_orders_meta_box' ],
+ $screen,
+ 'normal',
+ 'core'
+ );
+ }
+ }
+
+ /**
+ * Dokan order commission meta-box body.
+ *
+ * @since 3.14.0
+ *
+ * @param WP_Post|WC_Order $post_or_order
+ *
+ * @return void
+ */
+ public function commission_meta_box( $post_or_order ) {
+ global $wpdb;
+ $order = dokan()->order->get( OrderUtil::get_post_or_order_id( $post_or_order ) );
+
+ $data = $wpdb->get_row(
+ $wpdb->prepare( "SELECT order_total,net_amount FROM {$wpdb->prefix}dokan_orders WHERE order_id = %d LIMIT 1", $order->get_id() )
+ );
+
+ $order_total = $data && property_exists( $data, 'order_total' ) ? $data->order_total : 0;
+ $net_amount = $data && property_exists( $data, 'net_amount' ) ? $data->net_amount : 0;
+
+ $total_commission = (float) $order_total - (float) $net_amount;
+ $all_commission_types = array_merge( dokan_commission_types(), dokan()->commission->get_legacy_commission_types() );
+
+ dokan_get_template_part(
+ 'orders/commission-meta-box-html', '', [
+ 'order' => $order,
+ 'data' => $data,
+ 'total_commission' => $total_commission,
+ 'all_commission_types' => $all_commission_types,
+ ]
+ );
+ }
+
+ /**
+ * Content of suborder or related order meta-box.
+ *
+ * @param $post_or_order
+ *
+ * @return void
+ */
+ public function sub_or_related_orders_meta_box( $post_or_order ) {
+ $order = dokan()->order->get( OrderUtil::get_post_or_order_id( $post_or_order ) );
+ $parent_order = new WC_Order();
+ $has_sub_order = '1' === $order->get_meta( 'has_sub_order', true );
+
+ if ( $has_sub_order ) {
+ $orders_to_render = dokan()->order->get_child_orders( $order->get_id() );
+ } else {
+ $orders_to_render = dokan()->order->all(
+ [
+ 'parent' => $order->get_parent_id(),
+ 'limit' => -1,
+ 'type' => 'shop_order',
+ ]
+ );
+
+ $parent_order = dokan()->order->get( $order->get_parent_id() );
+
+ $orders_to_render = array_filter(
+ $orders_to_render,
+ function ( $item ) use ( $order ) {
+ return $item->get_id() !== $order->get_id();
+ }
+ );
+
+ array_unshift( $orders_to_render, $parent_order );
+ }
+
+ dokan_get_template_part(
+ 'orders/sub-order-related-order-meta-box-html', '', array(
+ 'order' => $order,
+ 'parent_order' => $parent_order,
+ 'has_sub_order' => $has_sub_order,
+ 'orders_to_render' => $orders_to_render,
+ )
+ );
+ }
}
diff --git a/includes/Order/Controller.php b/includes/Order/Controller.php
index 6f1750f2f3..9dfd1b0426 100644
--- a/includes/Order/Controller.php
+++ b/includes/Order/Controller.php
@@ -37,6 +37,7 @@ public function init_classes() {
$this->container['email_hooks'] = new EmailHooks();
$this->container['cache'] = new OrderCache();
$this->container['frontend_hooks'] = new Frontend\Hooks();
+ $this->container['event_listener'] = new OrderEventListener();
if ( is_admin() ) {
$this->container['permission'] = new Admin\Permissions();
diff --git a/includes/Order/Hooks.php b/includes/Order/Hooks.php
index 6bbc834613..dc2e1abecf 100644
--- a/includes/Order/Hooks.php
+++ b/includes/Order/Hooks.php
@@ -56,9 +56,6 @@ public function __construct() {
add_action( 'woocommerce_reduce_order_stock', [ $this, 'restore_reduced_order_stock' ] );
add_action( 'woocommerce_reduce_order_stock', [ $this, 'handle_order_notes_for_suborder' ], 99 );
-
- // Suborder pdf button
- add_filter( 'dokan_my_account_my_sub_orders_actions', [ $this, 'suborder_pdf_invoice_button' ], 10, 2 );
}
/**
@@ -93,7 +90,7 @@ public function on_order_status_change( $order_id, $old_status, $new_status, $or
}
// insert on dokan sync table
- $wpdb->update(
+ $wpdb->update( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->dokan_orders,
[ 'order_status' => $new_status ],
[ 'order_id' => $order_id ],
@@ -101,12 +98,17 @@ public function on_order_status_change( $order_id, $old_status, $new_status, $or
[ '%d' ]
);
- // if any child orders found, change the orders as well
+ // Update sub-order statuses
$sub_orders = dokan()->order->get_child_orders( $order_id );
if ( $sub_orders ) {
foreach ( $sub_orders as $sub_order ) {
if ( is_callable( [ $sub_order, 'update_status' ] ) ) {
- $sub_order->update_status( $new_status );
+ $current_status = $sub_order->get_status();
+ if ( $this->is_status_change_allowed( $current_status, $new_status ) ) {
+ $sub_order->update_status( $new_status );
+ } else {
+ $this->log_skipped_status_update( $sub_order->get_id(), $current_status, $new_status );
+ }
}
}
}
@@ -123,7 +125,7 @@ public function on_order_status_change( $order_id, $old_status, $new_status, $or
}
// update on vendor-balance table
- $wpdb->update(
+ $wpdb->update( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->dokan_vendor_balance,
[ 'status' => $new_status ],
[
@@ -135,6 +137,98 @@ public function on_order_status_change( $order_id, $old_status, $new_status, $or
);
}
+ /**
+ * Check if a status change is allowed for a sub-order.
+ *
+ * This method determines whether a sub-order can transition from its current status
+ * to a new status, based on a configurable whitelist of allowed transitions.
+ *
+ * @since 3.12.2
+ *
+ * @param string $current_status The current status of the sub-order (should include 'wc-' prefix).
+ * @param string $new_status The new status to check (should include 'wc-' prefix).
+ *
+ * @return bool True if the status change is allowed, false otherwise.
+ */
+ private function is_status_change_allowed( string $current_status, string $new_status ): bool {
+ // Ensure both statuses have 'wc-' prefix
+ $current_status = $this->maybe_add_wc_prefix( $current_status );
+ $new_status = $this->maybe_add_wc_prefix( $new_status );
+
+ // Define the default whitelist of allowed status transitions
+ $default_whitelist = [
+ 'wc-pending' => [ 'any' ],
+ 'wc-on-hold' => [ 'wc-pending', 'wc-on-hold', 'wc-processing', 'wc-completed', 'wc-failed' ],
+ 'wc-processing' => [ 'wc-completed', 'wc-failed', 'wc-cancelled', 'wc-refunded' ],
+ 'wc-completed' => [ 'wc-refunded' ],
+ 'wc-failed' => [ 'wc-pending', 'wc-on-hold', 'wc-processing', 'wc-failed', 'wc-cancelled' ],
+ 'wc-cancelled' => [],
+ 'wc-refunded' => [],
+ ];
+
+ /**
+ * Filter the whitelist of allowed status transitions for sub-orders.
+ *
+ * This filter allows developers to customize the whitelist that determines
+ * which status transitions are allowed for sub-orders when the main order
+ * status is updated. By modifying this whitelist, you can control how
+ * sub-order statuses are updated in relation to the main order.
+ *
+ * @since 3.12.2
+ *
+ * @param array $whitelist An associative array where keys are current statuses
+ * and values are arrays of allowed new statuses.
+ * The special value 'any' allows transition to any status.
+ *
+ * @return array Modified whitelist of allowed status transitions.
+ */
+ $whitelist = apply_filters( 'dokan_sub_order_status_update_whitelist', $default_whitelist );
+
+ // Allow any status change if the current status is not in the whitelist or the new status is not allowed
+ if ( ! array_key_exists( $current_status, $whitelist ) || ! array_key_exists( $new_status, $whitelist ) ) {
+ return true;
+ }
+
+ // If 'any' is allowed for the current status, all transitions are allowed
+ if ( in_array( 'any', $whitelist[ $current_status ], true ) ) {
+ return true;
+ }
+
+ // Check if the new status is in the list of allowed transitions
+ return in_array( $new_status, $whitelist[ $current_status ], true );
+ }
+
+ /**
+ * Ensure a status string has the 'wc-' prefix.
+ *
+ * @since 3.12.2
+ *
+ * @param string $status The status string to check.
+ *
+ * @return string The status string with 'wc-' prefix added if it was missing.
+ */
+ private function maybe_add_wc_prefix( string $status ): string {
+ return strpos( $status, 'wc-' ) === 0 ? $status : 'wc-' . $status;
+ }
+
+ /**
+ * Log a skipped status update for a sub-order.
+ *
+ * This method logs a message to the error log when a status update for a sub-order
+ * is skipped because the status change is not allowed.
+ *
+ * @since 3.12.2
+ *
+ * @param int $order_id The ID of the sub-order.
+ * @param string $current_status The current status of the sub-order.
+ * @param string $new_status The new status that was not allowed.
+ *
+ * @return void
+ */
+ private function log_skipped_status_update( int $order_id, string $current_status, string $new_status ) {
+ dokan_log( sprintf( 'Dokan: Skipped status update for sub-order %d from %s to %s', $order_id, $current_status, $new_status ) );
+ }
+
/**
* If order status is set to refunded from vendor dashboard, enter remaining balance into vendor balance table.
*
@@ -168,6 +262,7 @@ public function manage_refunded_for_order( $order_id, $old_status, $new_status,
return;
}
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$balance_data = $wpdb->get_var(
$wpdb->prepare(
"SELECT 1 FROM $wpdb->dokan_vendor_balance WHERE trn_id = %d AND trn_type = %s AND status = 'approved'",
@@ -182,6 +277,7 @@ public function manage_refunded_for_order( $order_id, $old_status, $new_status,
$seller_id = dokan_get_seller_id_by_order( $order_id );
$net_amount = dokan()->commission->get_earning_by_order( $order );
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
$wpdb->insert(
$wpdb->dokan_vendor_balance,
[
@@ -207,7 +303,7 @@ public function manage_refunded_for_order( $order_id, $old_status, $new_status,
);
// update the order table with new refund amount
- $order_data = $wpdb->get_row(
+ $order_data = $wpdb->get_row( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->prepare(
"select * from $wpdb->dokan_orders where order_id = %d",
$order_id
@@ -216,7 +312,7 @@ public function manage_refunded_for_order( $order_id, $old_status, $new_status,
if ( isset( $order_data->order_total, $order_data->net_amount ) ) {
// insert on dokan sync table
- $wpdb->update(
+ $wpdb->update( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->dokan_orders,
[
'order_total' => 0,
@@ -322,14 +418,20 @@ public function ensure_vendor_coupon( $valid, $coupon, $discount ) {
$available_vendors = [];
$available_products = [];
- if ( WC()->cart ) {
+ if ( WC()->cart && ! WC()->cart->is_empty() ) {
foreach ( WC()->cart->get_cart() as $item ) {
$product_id = $item['data']->get_id();
$available_vendors[] = (int) dokan_get_vendor_by_product( $product_id, true );
$available_products[] = $product_id;
}
} else {
- foreach ( $discount->get_items() as $item_id => $item ) {
+ foreach ( $discount->get_items() as $item ) {
+ if ( ! isset( $item->product ) || ! $item->product instanceof \WC_Product ) {
+ continue;
+ }
+
+ $item_id = $item->product->get_id();
+
$available_vendors[] = (int) dokan_get_vendor_by_product( $item_id, true );
$available_products[] = $item_id;
}
@@ -448,23 +550,4 @@ public function handle_order_notes_for_suborder( $order ) {
}
}
}
-
- /**
- * PDF Invoices & Packing Slips for WooCommerce plugin integration on suborder section.
- *
- * @since 3.8.3
- *
- * @param $actions
- * @param $order
- *
- * @return mixed
- */
- public function suborder_pdf_invoice_button( $actions, $order ) {
- $woocommerce_all_actions = apply_filters( 'woocommerce_my_account_my_orders_actions', $actions, $order );
-
- if ( isset( $woocommerce_all_actions['invoice'] ) ) {
- $actions['action'] = $woocommerce_all_actions['invoice'];
- }
- return $actions;
- }
}
diff --git a/includes/Order/Manager.php b/includes/Order/Manager.php
index 9cd6b096d4..345d4c4fe6 100644
--- a/includes/Order/Manager.php
+++ b/includes/Order/Manager.php
@@ -646,7 +646,10 @@ public function create_sub_order( $parent_order, $seller_id, $seller_products )
dokan_log( 'Created sub order : #' . $order->get_id() );
do_action( 'dokan_checkout_update_order_meta', $order->get_id(), $seller_id );
- } catch ( Exception $e ) {
+ } catch ( \Throwable $e ) {
+ dokan_log( 'Error in create_sub_order: ' . $e->getMessage() );
+ dokan_log( 'Stack trace: ' . $e->getTraceAsString() );
+ dokan_log( 'Backtrace at error: ' . wp_debug_backtrace_summary() );
return new WP_Error( 'dokan-suborder-error', $e->getMessage() );
}
}
@@ -929,10 +932,7 @@ public function maybe_split_orders( $parent_order_id, $force_create = false ) {
$parent_order->update_meta_data( '_dokan_vendor_id', $seller_id );
$parent_order->save();
- // if the request is made from rest api then insert the order data to the sync table
- if ( defined( 'REST_REQUEST' ) ) {
- do_action( 'dokan_checkout_update_order_meta', $parent_order_id, $seller_id );
- }
+ do_action( 'dokan_checkout_update_order_meta', $parent_order_id, $seller_id );
return;
}
diff --git a/includes/Order/MiscHooks.php b/includes/Order/MiscHooks.php
index a4b897530b..60cd36abc0 100644
--- a/includes/Order/MiscHooks.php
+++ b/includes/Order/MiscHooks.php
@@ -22,13 +22,6 @@ class MiscHooks {
* @since 3.8.0
*/
public function __construct() {
- //Wc remove child order from wc_order_product_lookup & trim child order from posts for analytics
- add_action( 'wc-admin_import_orders', [ $this, 'delete_child_order_from_wc_order_product' ] );
-
- // Exclude suborders in woocommerce analytics.
- add_filter( 'woocommerce_analytics_orders_select_query', [ $this, 'trim_child_order_for_analytics_order' ] );
- add_filter( 'woocommerce_analytics_update_order_stats_data', [ $this, 'trim_child_order_for_analytics_order_stats' ], 10, 2 );
-
// remove customer info from order export based on setting
add_filter( 'dokan_csv_export_headers', [ $this, 'hide_customer_info_from_vendor_order_export' ], 20, 1 );
@@ -36,46 +29,6 @@ public function __construct() {
add_filter( 'wp_count_posts', [ $this, 'modify_vendor_order_counts' ], 10, 1 ); // no need to add hpos support for this filter
}
- /**
- * Delete_child_order_from_wc_order_product
- *
- * @since 3.8.0 Moved this method from Order/Hooks.php file
- *
- * @param \ActionScheduler_Action $args
- *
- * @return void
- */
- public function delete_child_order_from_wc_order_product( $args ) {
- $order = wc_get_order( $args );
-
- if ( $order->get_parent_id() ) {
- global $wpdb;
- // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
- $wpdb->delete( $wpdb->prefix . 'wc_order_product_lookup', [ 'order_id' => $order->get_id() ] );
- // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
- $wpdb->delete( $wpdb->prefix . 'wc_order_stats', [ 'order_id' => $order->get_id() ] );
- }
- }
-
- /**
- * Trim child order if parent exist from wc_order_product_lookup for analytics order
- *
- * @since 3.8.0 Moved this method from Order/Hooks.php file
- *
- * @param WC_Order $orders
- *
- * @return WC_Order
- */
- public function trim_child_order_for_analytics_order( $orders ) {
- foreach ( $orders->data as $key => $order ) {
- if ( $order['parent_id'] ) {
- unset( $orders->data[ $key ] );
- }
- }
-
- return $orders;
- }
-
/**
* Remove customer sensitive information while exporting order
*
@@ -195,28 +148,4 @@ public function modify_vendor_order_counts( $counts ) {
return $counts;
}
-
- /**
- * Exclude suborders and include dokan subscription product orders when generate woocommerce analytics data.
- *
- * @see https://github.com/getdokan/dokan-pro/issues/2735
- *
- * @param array $data
- * @param \WC_Order $order
- *
- * @return array
- */
- public function trim_child_order_for_analytics_order_stats( $data, $order ) {
- if ( ! $order->get_parent_id() ||
- (
- dokan()->is_pro_exists()
- && dokan_pro()->module->is_active( 'product_subscription' )
- && \DokanPro\Modules\Subscription\Helper::is_vendor_subscription_order( $order )
- )
- ) {
- return $data;
- }
-
- return [];
- }
}
diff --git a/includes/Order/OrderEventListener.php b/includes/Order/OrderEventListener.php
new file mode 100644
index 0000000000..ac9e95b3c3
--- /dev/null
+++ b/includes/Order/OrderEventListener.php
@@ -0,0 +1,144 @@
+process_order_status( $order, $wpdb, $order_id );
+ $this->log_status_change( 'trashed', $order_id );
+ }
+
+ /**
+ * Perform actions after an order is untrashed (restored).
+ *
+ * This method is triggered when an order is restored from the trash. It updates the order status
+ * in the Dokan tables and logs the action.
+ *
+ * @param int $order_id ID of the restored order.
+ *
+ * @return void
+ */
+ public function after_order_untrash( int $order_id ) {
+ global $wpdb;
+
+ $order = wc_get_order( $order_id );
+ if ( ! $order instanceof WC_Order ) {
+ dokan_log( "Failed to fetch order {$order_id} after untrash." );
+ return;
+ }
+
+ $this->process_order_status( $order, $wpdb, $order_id );
+ $this->log_status_change( 'restored', $order_id );
+ }
+
+ /**
+ * Update the order status in Dokan tables.
+ *
+ * This method updates the order status in the `dokan_orders` and `dokan_vendor_balance` tables
+ * based on the current status of the WooCommerce order.
+ *
+ * @since 3.13.1
+ *
+ * @param WC_Order $order The WooCommerce order object.
+ * @param \wpdb $wpdb The WordPress database object.
+ * @param int $order_id The ID of the order.
+ *
+ * @return void
+ */
+ protected function process_order_status( WC_Order $order, \wpdb $wpdb, int $order_id ): void {
+ $previous_status = $order->get_status( 'edit' );
+ if ( strpos( $previous_status, 'wc-' ) === false ) {
+ $previous_status = 'wc-' . $previous_status;
+ }
+
+ // Update Dokan orders table
+ $wpdb->update(
+ $wpdb->prefix . 'dokan_orders',
+ array( 'order_status' => $previous_status ),
+ array( 'order_id' => $order_id ),
+ array( '%s' ),
+ array( '%d' )
+ );
+
+ // Update Dokan vendor balance table
+ $wpdb->update(
+ $wpdb->prefix . 'dokan_vendor_balance',
+ array( 'status' => $previous_status ),
+ array(
+ 'trn_id' => $order_id,
+ 'trn_type' => 'dokan_orders',
+ ),
+ array( '%s' ),
+ array( '%d', '%s' )
+ );
+ }
+
+ /**
+ * Log order status change events.
+ *
+ * @param string $action The action performed (trashed/restored)
+ * @param int $order_id The order ID
+ *
+ * @return void
+ */
+ private function log_status_change( string $action, int $order_id ): void {
+ $user_id = dokan_get_current_user_id();
+ $action_message = $action === 'trashed' ? 'moved to trash' : 'restored from trash';
+
+ if ( $user_id ) {
+ $user = get_user_by( 'id', $user_id );
+
+ $user_name = trim( sprintf( '%s %s', $user->first_name, $user->last_name ) );
+ if ( empty( $user_name ) ) {
+ $user_name = $user->user_login;
+ }
+
+ dokan_log(
+ sprintf(
+ '[Order Sync] Order #%d %s by %s (%s) from IP: %s',
+ $order_id,
+ $action_message,
+ $user_name,
+ implode( ', ', $user->roles ),
+ WC_Geolocation::get_ip_address()
+ )
+ );
+ return;
+ }
+
+ dokan_log(
+ sprintf(
+ '[Order Sync] Order #%d %s by System',
+ $order_id,
+ $action_message
+ )
+ );
+ }
+}
diff --git a/includes/Order/functions.php b/includes/Order/functions.php
index 6ddde73040..d831572676 100644
--- a/includes/Order/functions.php
+++ b/includes/Order/functions.php
@@ -137,6 +137,7 @@ function dokan_get_seller_withdraw_by_date( $start_date, $end_date, $seller_id =
$seller_id = ! $seller_id ? dokan_get_current_user_id() : intval( $seller_id );
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
return $wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}dokan_withdraw
@@ -249,6 +250,7 @@ function dokan_sync_insert_order( $order_id ) {
dokan()->order->delete_seller_order( $order_id, $seller_id );
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
$wpdb->insert(
$wpdb->prefix . 'dokan_orders',
[
@@ -267,6 +269,7 @@ function dokan_sync_insert_order( $order_id ) {
]
);
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
$wpdb->insert(
$wpdb->prefix . 'dokan_vendor_balance',
[
@@ -318,6 +321,7 @@ function dokan_get_seller_id_by_order( $order ) {
$items = [];
if ( false === $seller_id ) {
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$seller_id = (int) $wpdb->get_var(
$wpdb->prepare( "SELECT seller_id FROM {$wpdb->prefix}dokan_orders WHERE order_id = %d LIMIT 1", $order_id )
);
@@ -514,6 +518,7 @@ function dokan_total_orders() {
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$order_count = $wpdb->get_var( 'SELECT COUNT(id) FROM ' . $wpdb->prefix . 'dokan_orders ' );
return (int) $order_count;
diff --git a/includes/PageViews.php b/includes/PageViews.php
index 028e9bca28..b20390887d 100755
--- a/includes/PageViews.php
+++ b/includes/PageViews.php
@@ -3,83 +3,84 @@
namespace WeDevs\Dokan;
/**
- * Pageviews - for counting product post views.
+ * Page views - for counting product post views.
*/
class PageViews {
- private $meta_key = 'pageview';
-
- public function __construct() {
- /* Registers the entry views extension scripts if we're on the correct page. */
- add_action( 'template_redirect', array( $this, 'load_views' ), 25 );
-
- /* Add the entry views AJAX actions to the appropriate hooks. */
- add_action( 'wp_ajax_dokan_pageview', array( $this, 'update_ajax' ) );
- add_action( 'wp_ajax_nopriv_dokan_pageview', array( $this, 'update_ajax' ) );
- }
-
- public function load_scripts() {
- $nonce = wp_create_nonce( 'dokan_pageview' );
-
- echo '';
- }
-
- public function load_views() {
- if ( is_singular( 'product' ) ) {
- global $post;
-
- if ( $post->post_author !== dokan_get_current_user_id() ) {
- wp_enqueue_script( 'jquery' );
- add_action( 'wp_footer', array( $this, 'load_scripts' ) );
- }
- }
- }
-
- public function update_view( $post_id = '' ) {
- if ( ! empty( $post_id ) ) {
- $old_views = get_post_meta( $post_id, $this->meta_key, true );
- $new_views = absint( $old_views ) + 1;
-
- update_post_meta( $post_id, $this->meta_key, $new_views, $old_views );
- $seller_id = get_post_field( 'post_author', $post_id );
- Cache::delete( "pageview_{$seller_id}" );
- }
- }
-
- public function update_ajax() {
- check_ajax_referer( 'dokan_pageview' );
-
- if ( isset( $_POST['post_id'] ) ) {
- $post_id = absint( $_POST['post_id'] );
- }
-
- if ( ! empty( $post_id ) ) {
- $this->update_view( $post_id );
- }
-
- wp_die();
- }
-
+ private $meta_key = 'pageview';
+
+ public function __construct() {
+ /* Registers the entry views extension scripts if we're on the correct page. */
+ add_action( 'template_redirect', array( $this, 'load_views' ), 25 );
+
+ /* Add the entry views AJAX actions to the appropriate hooks. */
+ add_action( 'wp_ajax_dokan_pageview', array( $this, 'update_ajax' ) );
+ add_action( 'wp_ajax_nopriv_dokan_pageview', array( $this, 'update_ajax' ) );
+ }
+
+ /**
+ * Load the scripts
+ *
+ * @return void
+ */
+ public function load_scripts() {
+ wp_enqueue_script( 'dokan-page-views', DOKAN_PLUGIN_ASSEST . '/js/page-views.js', array( 'jquery' ), DOKAN_PLUGIN_VERSION, true );
+ wp_localize_script(
+ 'dokan-page-views',
+ 'dokanPageViewsParams',
+ array(
+ 'nonce' => wp_create_nonce( 'dokan_pageview' ),
+ 'post_id' => get_the_ID(),
+ 'ajax_url' => admin_url( 'admin-ajax.php' ),
+ )
+ );
+ }
+
+ public function load_views() {
+ if ( is_singular( 'product' ) ) {
+ global $post;
+
+ if ( dokan_get_current_user_id() !== $post->post_author ) {
+ wp_enqueue_script( 'jquery' );
+ add_action( 'wp_footer', array( $this, 'load_scripts' ) );
+ }
+ }
+ }
+
+ /**
+ * Update the view count
+ *
+ * @param int $post_id The post ID
+ *
+ * @return void
+ */
+ public function update_view( $post_id = '' ) {
+ if ( ! empty( $post_id ) ) {
+ $old_views = get_post_meta( $post_id, $this->meta_key, true );
+ $new_views = absint( $old_views ) + 1;
+
+ update_post_meta( $post_id, $this->meta_key, $new_views, $old_views );
+ $seller_id = get_post_field( 'post_author', $post_id );
+ Cache::delete( "pageview_{$seller_id}" );
+ }
+ }
+
+ /**
+ * Update the view count via AJAX
+ *
+ * @return void
+ */
+ public function update_ajax() {
+ check_ajax_referer( 'dokan_pageview' );
+
+ if ( isset( $_POST['post_id'] ) ) {
+ $post_id = absint( $_POST['post_id'] );
+ }
+
+ if ( ! empty( $post_id ) ) {
+ $this->update_view( $post_id );
+ }
+
+ wp_die();
+ }
}
diff --git a/includes/Product/Hooks.php b/includes/Product/Hooks.php
index a2c9cb99a2..02f45a9847 100644
--- a/includes/Product/Hooks.php
+++ b/includes/Product/Hooks.php
@@ -2,6 +2,7 @@
namespace WeDevs\Dokan\Product;
+use WeDevs\Dokan\Commission\Formula\Fixed;
use WeDevs\Dokan\ProductCategory\Helper;
use WC_Product;
@@ -40,6 +41,11 @@ public function __construct() {
// Init Product Cache Class
new VendorStoreInfo();
new ProductCache();
+
+ // Product commission
+ add_action( 'woocommerce_product_options_advanced', array( $this, 'add_per_product_commission_options' ), 15 );
+ add_action( 'woocommerce_process_product_meta_simple', array( $this, 'save_per_product_commission_options' ), 15 );
+ add_action( 'woocommerce_process_product_meta_variable', array( $this, 'save_per_product_commission_options' ), 15 );
}
/**
@@ -247,11 +253,13 @@ public function bulk_product_delete( $action, $products ) {
return;
}
+ do_action( 'dokan_product_bulk_delete', $products );
foreach ( $products as $product_id ) {
if ( dokan_is_product_author( $product_id ) ) {
dokan()->product->delete( $product_id, true );
}
}
+ do_action( 'dokan_product_bulk_deleted', $products );
wp_safe_redirect( add_query_arg( [ 'message' => 'product_deleted' ], dokan_get_navigation_url( 'products' ) ) );
exit;
@@ -409,7 +417,7 @@ public function own_product_not_purchasable_notice() {
wc_print_notice( __( 'As this is your own product, the "Add to Cart" button has been removed. Please visit as a guest to view it.', 'dokan-lite' ), 'notice' );
}
-
+
/**
* Filter the recipients of the product review notification.
*
@@ -451,4 +459,113 @@ public function product_review_notification_recipients( $emails, $comment_id ) {
return $filtered_emails;
}
+
+ /**
+ * Add per product commission options
+ * Moved from dokan pro in version 3.14.0
+ *
+ * @since 2.4.12
+ *
+ * @return void
+ */
+ public function add_per_product_commission_options() {
+ if ( ! current_user_can( 'manage_woocommerce' ) ) {
+ return;
+ }
+
+ $product = wc_get_product( get_the_ID() );
+ $admin_commission = $product->get_meta( '_per_product_admin_commission' );
+ $additional_fee = $product->get_meta( '_per_product_admin_additional_fee' );
+ ?>
+
+
+
+
+ = $_per_product_admin_commission ) {
+ $admin_commission = ( '' === $data['_per_product_admin_commission'] ) ? '' : $_per_product_admin_commission;
+ }
+ }
+
+ if ( isset( $data['_per_product_admin_additional_fee'] ) ) {
+ $additional_fee = ( '' === $data['_per_product_admin_additional_fee'] ) ? '' : sanitize_text_field( $data['_per_product_admin_additional_fee'] );
+
+ if ( 0 > $additional_fee ) {
+ $additional_fee = '';
+ }
+
+ $additional_fee = wc_format_decimal( $additional_fee );
+ }
+
+ dokan()->product->save_commission_settings(
+ $post_id,
+ [
+ 'type' => $commission_type,
+ 'percentage' => $admin_commission,
+ 'flat' => $additional_fee,
+ ]
+ );
+ }
}
diff --git a/includes/Product/Manager.php b/includes/Product/Manager.php
index 6fdeaf0362..0a6a74cb69 100644
--- a/includes/Product/Manager.php
+++ b/includes/Product/Manager.php
@@ -5,8 +5,10 @@
use WC_Product;
use WC_Product_Download;
use WeDevs\Dokan\Cache;
-use WP_Query;
+use WeDevs\Dokan\Commission\Model\Setting;
+use WeDevs\Dokan\Commission\Settings\Product;
use WP_Error;
+use WP_Query;
/**
* Product manager Class
@@ -714,4 +716,55 @@ public function top_rated( $args = [] ) {
return $products;
}
+
+ /**
+ * Validate product id (if it's a variable product, return it's parent id)
+ *
+ * Moved from \WeDevs\Dokan\Commission() ( commission.php file ) in version 3.14.0
+ *
+ * @since 2.9.21
+ *
+ * @param int $product_id
+ *
+ * @return int
+ */
+ public function validate_product_id( $product_id ) {
+ $product = $this->get( $product_id );
+ if ( ! $product ) {
+ return 0;
+ }
+
+ $parent_id = $product->get_parent_id();
+
+ return $parent_id ? $parent_id : $product_id;
+ }
+
+ /**
+ * Returns product commission settings data.
+ *
+ * @since 3.14.0
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function get_commission_settings( $product_id = 0 ) {
+ $settings = new Product( $product_id );
+
+ return $settings->get();
+ }
+
+ /**
+ * Saves and returns product commission settings data.
+ *
+ * @since 3.14.0
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function save_commission_settings( $product_id, $commission ) {
+ $data['percentage'] = isset( $commission['percentage'] ) ? $commission['percentage'] : '';
+ $data['type'] = isset( $commission['type'] ) ? $commission['type'] : '';
+ $data['flat'] = isset( $commission['flat'] ) ? $commission['flat'] : '';
+
+ $setting = new Product( $product_id );
+ return $setting->save( $data );
+ }
}
diff --git a/includes/Product/ProductAttribute.php b/includes/Product/ProductAttribute.php
index 820a04249e..024fc34b50 100644
--- a/includes/Product/ProductAttribute.php
+++ b/includes/Product/ProductAttribute.php
@@ -173,7 +173,7 @@ public function get( $post_id ) {
*/
public function set( &$product, $needs_save = false ) {
// Stop if no attributes found.
- if ( ! count( $this->request_attributes ) ) {
+ if ( ! is_array( $this->request_attributes ) ) {
return $product;
}
diff --git a/includes/ProductCategory/Categories.php b/includes/ProductCategory/Categories.php
index dd65b1d627..11fd91eced 100644
--- a/includes/ProductCategory/Categories.php
+++ b/includes/ProductCategory/Categories.php
@@ -20,16 +20,7 @@ class Categories {
* @return void|array
*/
public function get_all_categories( $ret = false ) {
- $transient_key = function_exists( 'wpml_get_current_language' ) && ! empty( wpml_get_current_language() ) ? 'multistep_categories_' . wpml_get_current_language() : 'multistep_categories';
-
- $this->categories = Cache::get_transient( $transient_key );
-
- if ( false === $this->categories ) {
- //calculate category data
- $this->get_categories();
- // set category data to cache
- Cache::set_transient( $transient_key, $this->categories, '', MONTH_IN_SECONDS );
- }
+ $this->get_categories();
if ( $ret ) {
return $this->categories;
@@ -134,36 +125,37 @@ public function get_topmost_parent( $category_id ) {
* @return void
*/
private function get_categories() {
- global $wpdb;
-
- // get all categories
- $table = $wpdb->prefix . 'terms';
- $fields = 'terms.term_id, terms.name, tax.parent AS parent_id';
- $join = "INNER JOIN `{$wpdb->prefix}term_taxonomy` AS tax ON terms.term_id = tax.term_id";
- $where = " AND tax.taxonomy = 'product_cat'";
-
- // If wpml plugin exists then get categories as language set.
- if ( function_exists( 'wpml_get_current_language' ) && ! empty( wpml_get_current_language() ) ) {
- $current_language = wpml_get_current_language();
-
- $join .= " INNER JOIN `{$wpdb->prefix}icl_translations` AS tr ON terms.term_id = tr.element_id";
- $where .= " AND tr.language_code = '{$current_language}' AND tr.element_type = 'tax_product_cat'";
- }
+ // Get all product categories.
+ $product_categories = get_terms(
+ [
+ 'taxonomy' => 'product_cat',
+ 'hide_empty' => false,
+ ]
+ );
- // @codingStandardsIgnoreStart
- $categories = $wpdb->get_results(
- $wpdb->prepare( "SELECT $fields FROM $table AS terms $join WHERE %d=%d $where", 1, 1 ),
- OBJECT_K
+ // Transform the categories with required data.
+ $transformed_categories = array_map(
+ function ( $category ) {
+ return [
+ 'term_id' => $category->term_id,
+ 'name' => $category->name,
+ 'parent_id' => $category->parent,
+ ];
+ },
+ $product_categories
);
- // @codingStandardsIgnoreEnd
+
+ // Set categories index as term_id.
+ $categories = array_column( $transformed_categories, null, 'term_id' );
if ( empty( $categories ) ) {
$this->categories = [];
return;
}
- // convert category data to array
- $this->categories = json_decode( wp_json_encode( $categories ), true );
+ // Set categories data.
+ $this->categories = $categories;
+
// we don't need old categories variable
unset( $categories );
@@ -193,16 +185,16 @@ private function get_categories() {
* @return void
*/
private function recursively_get_parent_categories( $current_item ) {
- $parent_id = intval( $this->categories[ $current_item ]['parent_id'] );
+ $parent_id = intval( $this->categories[ $current_item ]['parent_id'] ?? 0 );
// setting base condition to exit recursion
if ( 0 === $parent_id ) {
$this->categories[ $current_item ]['parents'] = [];
- $this->categories[ $current_item ]['breadcumb'][] = $this->categories[ $current_item ]['name'];
+ $this->categories[ $current_item ]['breadcumb'][] = $this->categories[ $current_item ]['name'] ?? '';
// if parent category parents value is empty, no more recursion is needed
} elseif ( isset( $this->categories[ $parent_id ]['parents'] ) && empty( $this->categories[ $parent_id ]['parents'] ) ) {
$this->categories[ $current_item ]['parents'][] = $parent_id;
- $this->categories[ $current_item ]['breadcumb'][] = $this->categories[ $parent_id ]['name'];
+ $this->categories[ $current_item ]['breadcumb'][] = $this->categories[ $parent_id ]['name'] ?? '';
// if parent category parents value is not empty, set that value as current category parents
} elseif ( ! empty( $this->categories[ $parent_id ]['parents'] ) ) {
$this->categories[ $current_item ]['parents'] = array_merge( $this->categories[ $parent_id ]['parents'], [ $parent_id ] );
diff --git a/includes/ProductCategory/Helper.php b/includes/ProductCategory/Helper.php
index b8bdfd671e..c582787ff6 100644
--- a/includes/ProductCategory/Helper.php
+++ b/includes/ProductCategory/Helper.php
@@ -99,13 +99,17 @@ private static function get_formatted_chosen_cat( $all_children, $all_ancestors
*
* @since 3.6.4
*
- * @param object $terms
+ * @param array $terms
*
* @return array
*/
public static function generate_chosen_categories( $terms ) {
$all_parents = [];
+ if ( ! is_array( $terms ) ) {
+ $terms = [];
+ }
+
// If any category selection option is turned we don't need to generate chosen categories, all terms are also chosen category.
if ( self::is_any_category_selection_enabled() ) {
return $terms;
diff --git a/includes/REST/AdminMiscController.php b/includes/REST/AdminMiscController.php
index 6716d8c3ae..db0c8ce644 100644
--- a/includes/REST/AdminMiscController.php
+++ b/includes/REST/AdminMiscController.php
@@ -36,6 +36,30 @@ public function register_routes() {
),
)
);
+
+ register_rest_route(
+ $this->namespace, '/option', [
+ [
+ 'methods' => WP_REST_Server::READABLE,
+ 'callback' => [ $this, 'get_option' ],
+ 'args' => [
+ 'section' => [
+ 'type' => 'string',
+ 'description' => __( 'Dokan setting section', 'dokan-lite' ),
+ 'required' => true,
+ 'sanitize_callback' => 'sanitize_text_field',
+ ],
+ 'option' => [
+ 'type' => 'string',
+ 'description' => __( 'Dokan setting section key', 'dokan-lite' ),
+ 'required' => true,
+ 'sanitize_callback' => 'sanitize_text_field',
+ ],
+ ],
+ 'permission_callback' => [ $this, 'check_permission' ],
+ ],
+ ]
+ );
}
/**
@@ -51,4 +75,20 @@ public function get_help() {
return rest_ensure_response( $help );
}
+ /**
+ * Get dokan option.
+ *
+ * @since 3.14.0
+ *
+ * @param \WP_REST_Request $request
+ *
+ * @return \WP_REST_Response|\WP_Error
+ */
+ public function get_option( $request ) {
+ $section = $request->get_param( 'section' );
+ $option = $request->get_param( 'option' );
+ $default = '';
+
+ return rest_ensure_response( dokan_get_option( $option, $section, $default ) );
+ }
}
diff --git a/includes/REST/AdminNoticeController.php b/includes/REST/AdminNoticeController.php
index e044b5fcf5..d5e2a8552f 100644
--- a/includes/REST/AdminNoticeController.php
+++ b/includes/REST/AdminNoticeController.php
@@ -5,6 +5,7 @@
use WeDevs\Dokan\Admin\Notices\Helper;
use WP_REST_Response;
use WP_REST_Server;
+use WP_REST_Request;
use WeDevs\Dokan\Abstracts\DokanRESTAdminController;
/**
@@ -36,6 +37,16 @@ public function register_routes() {
'methods' => WP_REST_Server::READABLE,
'callback' => [ $this, 'dokan_get_admin_notices' ],
'permission_callback' => [ $this, 'check_permission' ],
+ 'args' => [
+ 'scope' => [
+ 'description' => __( 'Choose notice scope: "local" displays only on Dokan pages, "global" displays across the entire site.', 'dokan-lite' ),
+ 'type' => 'string',
+ 'enum' => [ 'local', 'global' ],
+ 'required' => false,
+ 'default' => '',
+ 'sanitize_callback' => 'sanitize_text_field',
+ ],
+ ],
],
]
);
@@ -53,13 +64,26 @@ public function register_routes() {
/**
* Get dokan specific notices
+ * @param WP_REST_Request $request
*
* @return WP_REST_Response
*/
- public function dokan_get_admin_notices() {
+ public function dokan_get_admin_notices( WP_REST_Request $request ) {
+ $notice_scope = $request->get_param( 'scope' );
+ $notice_scope = ! empty( $notice_scope ) ? $notice_scope : 'local';
+
$notices = Helper::dokan_get_admin_notices();
- return rest_ensure_response( $notices );
+ // Filter notices by scope
+ $filter_notices = array_filter(
+ $notices,
+ function ( $notice ) use ( $notice_scope ) {
+ return $notice_scope === ( $notice['scope'] ?? 'local' );
+ }
+ );
+ $filter_notices = array_values( $filter_notices );
+
+ return rest_ensure_response( $filter_notices );
}
/**
diff --git a/includes/REST/CommissionControllerV1.php b/includes/REST/CommissionControllerV1.php
new file mode 100644
index 0000000000..b8e47bc13d
--- /dev/null
+++ b/includes/REST/CommissionControllerV1.php
@@ -0,0 +1,143 @@
+namespace, '/' . $this->base, [
+ [
+ 'methods' => WP_REST_Server::READABLE,
+ 'callback' => [ $this, 'get_commission' ],
+ 'args' => [
+ 'product_id' => [
+ 'description' => __( 'Products price', 'dokan-lite' ),
+ 'type' => 'integer',
+ 'default' => 0,
+ 'required' => true,
+ 'sanitize_callback' => 'absint',
+ ],
+ 'amount' => [
+ 'description' => __( 'The amount on that the commission will be calculated.', 'dokan-lite' ),
+ 'type' => 'number',
+ 'default' => 0,
+ 'required' => true,
+ 'sanitize_callback' => 'sanitize_text_field',
+ ],
+ 'vendor_id' => [
+ 'description' => __( 'Vendor id', 'dokan-lite' ),
+ 'type' => 'integer',
+ 'default' => 0,
+ 'required' => true,
+ 'sanitize_callback' => 'absint',
+ ],
+ 'category_ids' => [
+ 'description' => __( 'Category ids', 'dokan-lite' ),
+ 'type' => 'array',
+ 'sanitize_callback' => 'wc_clean',
+ 'items' => array(
+ 'type' => 'integer',
+ ),
+ 'default' => [],
+ 'required' => true,
+ ],
+ 'context' => [
+ 'required' => false,
+ 'description' => __( 'In which context the commission will be calculated', 'dokan-lite' ),
+ 'type' => 'string',
+ 'enum' => [ 'admin', 'seller' ],
+ 'context' => [ 'view', 'edit' ],
+ 'default' => 'seller',
+ ],
+ ],
+ 'permission_callback' => [ $this, 'get_permissions_check' ],
+ ],
+ ]
+ );
+ }
+
+ /**
+ * Checking if have any permission.
+ *
+ * @since 3.14.0
+ *
+ * @return boolean
+ */
+ public function get_permissions_check() {
+ // phpcs:ignore WordPress.WP.Capabilities.Unknown
+ return current_user_can( 'dokandar' ) || current_user_can( 'manage_options' );
+ }
+
+ /**
+ * Returns commission or earning based on context.
+ *
+ * @param WP_REST_Request $request
+ *
+ * @return WP_Error|WP_HTTP_Response|WP_REST_Response
+ */
+ public function get_commission( $request ) {
+ $product_id = $request->get_param( 'product_id' );
+ $amount = $request->get_param( 'amount' );
+ $vendor_id = $request->get_param( 'vendor_id' );
+ $category_ids = $request->get_param( 'category_ids' );
+ $context = $request->get_param( 'context' );
+
+ $chosen_cats = Helper::generate_chosen_categories( $category_ids );
+ $category_id = reset( $chosen_cats );
+
+ if ( ! $category_id ) {
+ $category_id = 0;
+ }
+
+ if ( ! $vendor_id ) {
+ $vendor_id = dokan_get_vendor_by_product( $product_id, true );
+ $vendor_id = $vendor_id ? $vendor_id : 0;
+ }
+
+ if ( ! is_numeric( $amount ) ) {
+ $amount = 0;
+ }
+
+ $commission_or_earning = dokan()->commission->get_commission(
+ [
+ 'total_amount' => $amount,
+ 'total_quantity' => 1,
+ 'product_id' => $product_id,
+ 'vendor_id' => $vendor_id,
+ 'category_id' => $category_id,
+ ]
+ );
+
+ $data = 'seller' === $context ? $commission_or_earning->get_vendor_earning() : $commission_or_earning->get_admin_commission();
+
+ return rest_ensure_response( wc_format_decimal( $data, wc_get_price_decimals() + 2 ) );
+ }
+}
diff --git a/includes/REST/Manager.php b/includes/REST/Manager.php
index ce0d1f936b..10d0a5970d 100644
--- a/includes/REST/Manager.php
+++ b/includes/REST/Manager.php
@@ -27,9 +27,6 @@ public function __construct() {
add_filter( 'woocommerce_rest_prepare_product_object', array( $this, 'prepeare_product_response' ), 10, 3 );
add_filter( 'dokan_vendor_to_array', array( $this, 'filter_store_open_close_option' ) );
- // populate admin commission data for admin
- add_filter( 'dokan_rest_store_additional_fields', array( $this, 'populate_admin_commission' ), 10, 2 );
-
// Send email to admin on adding a new product
add_action( 'dokan_rest_insert_product_object', array( $this, 'on_dokan_rest_insert_product' ), 10, 3 );
add_filter( 'dokan_vendor_to_array', [ $this, 'filter_payment_response' ] );
@@ -130,37 +127,6 @@ public function filter_store_open_close_option( $data ) {
return $data;
}
- /**
- * Populate admin commission
- *
- * @param array $data
- * @param array $store
- *
- * @since 2.9.13
- *
- * @return array
- */
- public function populate_admin_commission( $data, $store ) {
- if ( ! current_user_can( 'manage_woocommerce' ) ) {
- return $data;
- }
-
- $store_id = $store->get_id();
-
- if ( ! $store_id ) {
- return $data;
- }
-
- $commission = get_user_meta( $store_id, 'dokan_admin_percentage', true );
- $additional_fee = get_user_meta( $store_id, 'dokan_admin_additional_fee', true );
- $commission_type = get_user_meta( $store_id, 'dokan_admin_percentage_type', true );
- $data['admin_commission'] = $commission;
- $data['admin_additional_fee'] = $additional_fee;
- $data['admin_commission_type'] = $commission_type;
-
- return $data;
- }
-
/**
* Send email to admin on adding a new product
*
@@ -234,6 +200,7 @@ private function get_rest_api_class_map() {
DOKAN_DIR . '/includes/REST/StoreSettingControllerV2.php' => '\WeDevs\Dokan\REST\StoreSettingControllerV2',
DOKAN_DIR . '/includes/REST/VendorDashboardController.php' => '\WeDevs\Dokan\REST\VendorDashboardController',
DOKAN_DIR . '/includes/REST/ProductBlockController.php' => '\WeDevs\Dokan\REST\ProductBlockController',
+ DOKAN_DIR . '/includes/REST/CommissionControllerV1.php' => '\WeDevs\Dokan\REST\CommissionControllerV1',
)
);
}
diff --git a/includes/REST/ProductAttributeController.php b/includes/REST/ProductAttributeController.php
index 2ca681dcf3..b080d83b15 100644
--- a/includes/REST/ProductAttributeController.php
+++ b/includes/REST/ProductAttributeController.php
@@ -237,7 +237,7 @@ public function update_product_attribute( $request ) {
return new WP_Error( 'product_bulk_attribute_terms_saved_failed', __( 'Failed to save product bulk attribute and terms. Please try again later.', 'dokan-lite' ), [ 'status' => 400 ] );
}
- return rest_ensure_response( $is_saved );
+ return rest_ensure_response( $product_attribute->get( $product_id ) );
}
/**
diff --git a/includes/REST/ProductController.php b/includes/REST/ProductController.php
index fbbd5df543..ee78d383e0 100644
--- a/includes/REST/ProductController.php
+++ b/includes/REST/ProductController.php
@@ -1197,24 +1197,24 @@ protected function prepare_object_for_database( $request, $creating = false ) {
/**
* Prepare links for the request.
*
- * @param WC_Data $object Object data.
- * @param WP_REST_Request $request Request object.
+ * @param WC_Data $data_object Object data.
+ * @param WP_REST_Request $request Request object.
*
- * @return array Links for the given post.
+ * @return array Links for the given post.
*/
- protected function prepare_links( $object, $request ) {
+ protected function prepare_links( $data_object, $request ) {
$links = [
'self' => [
- 'href' => rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->base, $object->get_id() ) ),
+ 'href' => rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->base, $data_object->get_id() ) ),
],
'collection' => [
'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $this->base ) ),
],
];
- if ( $object->get_parent_id() ) {
+ if ( $data_object->get_parent_id() ) {
$links['up'] = [
- 'href' => rest_url( sprintf( '/%s/products/%d', $this->namespace, $object->get_parent_id() ) ),
+ 'href' => rest_url( sprintf( '/%s/products/%d', $this->namespace, $data_object->get_parent_id() ) ),
];
}
@@ -1343,9 +1343,7 @@ protected function get_attribute_taxonomy_name( $slug, $product ) {
// Taxonomy attribute name.
if ( $attribute->is_taxonomy() ) {
- $taxonomy = $attribute->get_taxonomy_object();
-
- return $taxonomy->attribute_label;
+ return $attribute->get_taxonomy_object()->attribute_label;
}
// Custom product attribute name.
@@ -1398,7 +1396,9 @@ protected function get_attribute_options( $product_id, $attribute ) {
'fields' => 'names',
]
);
- } elseif ( isset( $attribute['value'] ) ) {
+ }
+
+ if ( isset( $attribute['value'] ) ) {
return array_map( 'trim', explode( '|', $attribute['value'] ) );
}
@@ -1505,7 +1505,8 @@ protected function set_product_images( $product, $images ) {
if ( is_wp_error( $upload ) ) {
if ( ! apply_filters( 'woocommerce_rest_suppress_image_upload_error', false, $upload, $product->get_id(), $images ) ) {
- throw new WC_REST_Exception( 'woocommerce_product_image_upload_error', $upload->get_error_message(), 400 );
+ dokan_log( 'Error uploading image: ' . $upload->get_error_message() );
+ throw new WC_REST_Exception( 'woocommerce_product_image_upload_error', esc_html( $upload->get_error_message() ), 400 );
} else {
continue;
}
@@ -1514,9 +1515,9 @@ protected function set_product_images( $product, $images ) {
$attachment_id = wc_rest_set_uploaded_image_as_attachment( $upload, $product->get_id() );
}
- if ( ! wp_attachment_is_image( $attachment_id ) ) {
+ if ( $attachment_id && ! wp_attachment_is_image( $attachment_id ) ) {
/* translators: %s: attachment id */
- throw new WC_REST_Exception( 'woocommerce_product_invalid_image_id', sprintf( __( '#%s is an invalid image ID.', 'dokan-lite' ), $attachment_id ), 400 );
+ throw new WC_REST_Exception( 'woocommerce_product_invalid_image_id', sprintf( esc_html__( '#%s is an invalid image ID.', 'dokan-lite' ), esc_html( $attachment_id ) ), 400 );
}
if ( isset( $image['position'] ) && 0 === absint( $image['position'] ) ) {
@@ -2308,5 +2309,4 @@ public function get_item_schema() {
return $this->add_additional_fields_schema( $schema );
}
-
}
diff --git a/includes/REST/ProductControllerV2.php b/includes/REST/ProductControllerV2.php
index 2015555b87..60d21506a9 100644
--- a/includes/REST/ProductControllerV2.php
+++ b/includes/REST/ProductControllerV2.php
@@ -2,6 +2,8 @@
namespace WeDevs\Dokan\REST;
+use WP_Error;
+use WP_REST_Response;
use WP_REST_Server;
use WP_REST_Request;
use WeDevs\Dokan\ProductCategory\Helper;
diff --git a/includes/REST/StoreController.php b/includes/REST/StoreController.php
index e9f11fbb88..63a40a4cb1 100644
--- a/includes/REST/StoreController.php
+++ b/includes/REST/StoreController.php
@@ -625,14 +625,21 @@ public function get_total_review_count( $id, $post_type, $status ) {
/**
* Prepare a single user output for response
*
- * @param $store
+ * @param Vendor $store
* @param WP_REST_Request $request Request object.
* @param array $additional_fields (optional)
*
* @return WP_REST_Response $response Response data.
*/
public function prepare_item_for_response( $store, $request, $additional_fields = [] ) {
- $data = $store->to_array();
+ $data = $store->to_array();
+
+ $commission_settings = $store->get_commission_settings();
+ $data['admin_category_commission'] = $commission_settings->get_category_commissions();
+ $data['admin_commission'] = $commission_settings->get_percentage();
+ $data['admin_additional_fee'] = $commission_settings->get_flat();
+ $data['admin_commission_type'] = $commission_settings->get_type();
+
$data = array_merge( $data, apply_filters( 'dokan_rest_store_additional_fields', $additional_fields, $store, $request ) );
$response = rest_ensure_response( $data );
$response->add_links( $this->prepare_links( $data, $request ) );
@@ -937,7 +944,22 @@ public function get_store_category( $request ) {
}
$category_data = $store->get_store_categories( $best_selling );
- $response = rest_ensure_response( $category_data );
+ $commission_settings = $store->get_commission_settings();
+ $category_commissions = $commission_settings->get_category_commissions();
+
+ foreach ( $category_data as $term ) {
+ $term->admin_commission_type = $commission_settings->get_type();
+
+ if ( isset( $category_commissions['items'][ $term->term_id ] ) ) {
+ $term->commission = $category_commissions['items'][ $term->term_id ];
+ } elseif ( $category_commissions['all'] ) {
+ $term->commission = $category_commissions['all'];
+ } else {
+ $term->commission = [];
+ }
+ }
+
+ $response = rest_ensure_response( $category_data );
return $response;
}
diff --git a/includes/Registration.php b/includes/Registration.php
index d59f34a8d8..8c888c459f 100644
--- a/includes/Registration.php
+++ b/includes/Registration.php
@@ -37,15 +37,8 @@ public function validate_registration( $error ) {
return $error;
}
- $nonce_check = apply_filters( 'dokan_register_nonce_check', true );
-
- if ( $nonce_check ) {
- $nonce_value = isset( $_POST['_wpnonce'] ) ? sanitize_key( $_POST['_wpnonce'] ) : '';
- $nonce_value = isset( $_POST['woocommerce-register-nonce'] ) ? sanitize_key( $_POST['woocommerce-register-nonce'] ) : $nonce_value;
-
- if ( empty( $nonce_value ) || ! wp_verify_nonce( $nonce_value, 'woocommerce-register' ) ) {
- return new WP_Error( 'nonce_verification_failed', __( 'Nonce verification failed', 'dokan-lite' ) );
- }
+ if ( ! $this->validate_nonce() ) {
+ return new WP_Error( 'nonce_verification_failed', __( 'Nonce verification failed', 'dokan-lite' ) );
}
$allowed_roles = apply_filters( 'dokan_register_user_role', [ 'customer', 'seller' ] );
@@ -92,10 +85,7 @@ public function validate_registration( $error ) {
* @return array
*/
public function set_new_vendor_names( $data ) {
- $nonce_value = isset( $_POST['_wpnonce'] ) ? sanitize_key( wp_unslash( $_POST['_wpnonce'] ) ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
- $nonce_value = isset( $_POST['woocommerce-register-nonce'] ) ? sanitize_key( wp_unslash( $_POST['woocommerce-register-nonce'] ) ) : $nonce_value; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
-
- if ( ! wp_verify_nonce( $nonce_value, 'woocommerce-register' ) ) {
+ if ( ! $this->validate_nonce() ) {
return $data;
}
@@ -124,10 +114,8 @@ public function set_new_vendor_names( $data ) {
* @return void
*/
public function save_vendor_info( $user_id, $data ) {
- $nonce_value = isset( $_POST['_wpnonce'] ) ? sanitize_key( wp_unslash( $_POST['_wpnonce'] ) ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
- $nonce_value = isset( $_POST['woocommerce-register-nonce'] ) ? sanitize_key( wp_unslash( $_POST['woocommerce-register-nonce'] ) ) : $nonce_value; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
- if ( ! wp_verify_nonce( $nonce_value, 'woocommerce-register' ) ) {
+ if ( ! $this->validate_nonce() ) {
return;
}
@@ -229,4 +217,24 @@ public function check_and_set_address_profile_completion( $vendor_id, $new_dokan
return $new_dokan_settings;
}
+
+ /**
+ * Validate nonce for seller registration.
+ * This function checks the nonce value to ensure the request is valid and secure.
+ * If the "dokan_register_nonce_check" filter returns false, the validation is bypassed,
+ * third-party developers to override the nonce check if necessary.
+ *
+ * @return bool True if nonce is valid or validation is bypassed, false otherwise.
+ */
+ protected function validate_nonce() {
+ if ( apply_filters( 'dokan_register_nonce_check', true ) ) {
+ $nonce_value = isset( $_POST['_wpnonce'] ) ? sanitize_key( $_POST['_wpnonce'] ) : '';
+ $nonce_value = isset( $_POST['woocommerce-register-nonce'] ) ? sanitize_key( $_POST['woocommerce-register-nonce'] ) : $nonce_value;
+
+ return ! empty( $nonce_value ) && wp_verify_nonce( $nonce_value, 'woocommerce-register' );
+ }
+
+ // Bypass validation if the filter returns false
+ return true;
+ }
}
diff --git a/includes/ReverseWithdrawal/ReverseWithdrawal.php b/includes/ReverseWithdrawal/ReverseWithdrawal.php
index a7139ba0da..4d4ff4d32c 100644
--- a/includes/ReverseWithdrawal/ReverseWithdrawal.php
+++ b/includes/ReverseWithdrawal/ReverseWithdrawal.php
@@ -28,7 +28,7 @@ class ReverseWithdrawal {
*/
public function __clone() {
$message = ' Backtrace: ' . wp_debug_backtrace_summary();
- _doing_it_wrong( __METHOD__, $message . esc_html__( 'Cloning is forbidden.', 'dokan-lite' ), DOKAN_PLUGIN_VERSION );
+ _doing_it_wrong( __METHOD__, $message . esc_html__( 'Cloning is forbidden.', 'dokan-lite' ), DOKAN_PLUGIN_VERSION ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
/**
@@ -38,7 +38,7 @@ public function __clone() {
*/
public function __wakeup() {
$message = ' Backtrace: ' . wp_debug_backtrace_summary();
- _doing_it_wrong( __METHOD__, $message . esc_html__( 'Unserializing instances of this class is forbidden.', 'dokan-lite' ), DOKAN_PLUGIN_VERSION );
+ _doing_it_wrong( __METHOD__, $message . esc_html__( 'Unserializing instances of this class is forbidden.', 'dokan-lite' ), DOKAN_PLUGIN_VERSION ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
/**
diff --git a/includes/Traits/ChainableContainer.php b/includes/Traits/ChainableContainer.php
index 2b0d3a8288..55a39f7130 100644
--- a/includes/Traits/ChainableContainer.php
+++ b/includes/Traits/ChainableContainer.php
@@ -18,7 +18,7 @@ trait ChainableContainer {
*/
public function __clone() {
$message = ' Backtrace: ' . wp_debug_backtrace_summary();
- _doing_it_wrong( __METHOD__, $message . esc_html__( 'Cloning is forbidden.', 'dokan-lite' ), DOKAN_PLUGIN_VERSION );
+ _doing_it_wrong( __METHOD__, $message . esc_html__( 'Cloning is forbidden.', 'dokan-lite' ), DOKAN_PLUGIN_VERSION ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
/**
@@ -28,7 +28,7 @@ public function __clone() {
*/
public function __wakeup() {
$message = ' Backtrace: ' . wp_debug_backtrace_summary();
- _doing_it_wrong( __METHOD__, $message . esc_html__( 'Unserializing instances of this class is forbidden.', 'dokan-lite' ), DOKAN_PLUGIN_VERSION );
+ _doing_it_wrong( __METHOD__, $message . esc_html__( 'Unserializing instances of this class is forbidden.', 'dokan-lite' ), DOKAN_PLUGIN_VERSION ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
/**
diff --git a/includes/Upgrade/AdminNotice.php b/includes/Upgrade/AdminNotice.php
index 980536c346..abf6c1c0c0 100644
--- a/includes/Upgrade/AdminNotice.php
+++ b/includes/Upgrade/AdminNotice.php
@@ -37,8 +37,9 @@ public static function show_notice( $notices ) {
$notices[] = [
'type' => 'info',
'title' => __( 'Dokan Data Update Required', 'dokan-lite' ),
- 'description' => __( 'We need to update your install to the latest version', 'dokan-lite' ),
+ 'description' => __( 'Updating your Dokan data is required to continue functional operations. Kindly backup your database before running upgrade for safety.', 'dokan-lite' ),
'priority' => 1,
+ 'scope' => 'global',
'actions' => [
[
'type' => 'primary',
diff --git a/includes/Upgrade/Hooks.php b/includes/Upgrade/Hooks.php
index c7cd4d9aa5..4c9bfc5f84 100644
--- a/includes/Upgrade/Hooks.php
+++ b/includes/Upgrade/Hooks.php
@@ -2,6 +2,10 @@
namespace WeDevs\Dokan\Upgrade;
+use WeDevs\Dokan\Commission\Upugrader\Update_Category_Commission;
+use WeDevs\Dokan\Commission\Upugrader\Update_Product_Commission;
+use WeDevs\Dokan\Commission\Upugrader\Update_Vendor_Commission;
+
class Hooks {
/**
@@ -18,5 +22,13 @@ public function __construct() {
add_action( 'wp_ajax_dokan_do_upgrade', [ AdminNotice::class, 'do_upgrade' ] );
add_action( 'dokan_upgrade_is_not_required', [ Upgrades::class, 'update_db_dokan_version' ] );
add_action( 'dokan_upgrade_finished', [ Upgrades::class, 'update_db_dokan_version' ] );
+
+ $p_scheduler = new Update_Product_Commission();
+ $v_scheduler = new Update_Vendor_Commission();
+ $c_scheduler = new Update_Category_Commission();
+
+ $p_scheduler->init_hooks();
+ $v_scheduler->init_hooks();
+ $c_scheduler->init_hooks();
}
}
diff --git a/includes/Upgrade/Manager.php b/includes/Upgrade/Manager.php
index cb622d8efa..eae16fd326 100644
--- a/includes/Upgrade/Manager.php
+++ b/includes/Upgrade/Manager.php
@@ -32,7 +32,7 @@ public function is_upgrade_required() {
* @return bool
*/
public function has_ongoing_process() {
- return ! ! get_option( $this->is_upgrading_db_key, false );
+ return (bool) get_option( $this->is_upgrading_db_key, false );
}
/**
@@ -112,4 +112,3 @@ public function do_upgrade() {
do_action( 'dokan_upgrade_finished' );
}
}
-
diff --git a/includes/Upgrade/Upgrades.php b/includes/Upgrade/Upgrades.php
index f12d269472..68b999e47e 100644
--- a/includes/Upgrade/Upgrades.php
+++ b/includes/Upgrade/Upgrades.php
@@ -43,6 +43,8 @@ class Upgrades {
'3.6.5' => Upgrades\V_3_6_5::class,
'3.7.10' => Upgrades\V_3_7_10::class,
'3.7.19' => Upgrades\V_3_7_19::class,
+ '3.13.0' => Upgrades\V_3_13_0::class,
+ '3.14.0' => Upgrades\V_3_14_0::class,
];
/**
diff --git a/includes/Upgrade/Upgrades/V_3_13_0.php b/includes/Upgrade/Upgrades/V_3_13_0.php
new file mode 100644
index 0000000000..3620a0c75a
--- /dev/null
+++ b/includes/Upgrade/Upgrades/V_3_13_0.php
@@ -0,0 +1,17 @@
+create_dokan_order_stats_table();
+
+ // Sync the WC order stats.
+ $import = ReportsSync::regenerate_report_data( null, false );
+ }
+}
diff --git a/includes/Upgrade/Upgrades/V_3_14_0.php b/includes/Upgrade/Upgrades/V_3_14_0.php
new file mode 100644
index 0000000000..d97969f94b
--- /dev/null
+++ b/includes/Upgrade/Upgrades/V_3_14_0.php
@@ -0,0 +1,71 @@
+commission->get_legacy_commission_types() ), true ) ) {
+ if ( Flat::SOURCE === $commission_type ) {
+ $options['admin_percentage'] = 0;
+ $options['additional_fee'] = $admin_percentage;
+ } elseif ( Percentage::SOURCE === $commission_type ) {
+ $options['admin_percentage'] = $admin_percentage;
+ $options['additional_fee'] = 0;
+ }
+ }
+
+ $options['commission_type'] = $type_to_update;
+ update_option( 'dokan_selling', $options );
+ }
+
+ /**
+ * Update vendor and product comission settings.
+ *
+ * @since 3.14.0
+ *
+ * @return void
+ */
+ public static function update_commission() {
+ $product_scheduler = new Update_Product_Commission();
+ if ( ! $product_scheduler->is_processing() ) {
+ $product_scheduler->start_processing();
+ }
+
+ $vendor_scheduler = new Update_Vendor_Commission();
+ if ( ! $vendor_scheduler->is_processing() ) {
+ $vendor_scheduler->start_processing();
+ }
+
+ $category_scheduler = new Update_Category_Commission();
+ if ( ! $category_scheduler->is_processing() ) {
+ $category_scheduler->start_processing();
+ }
+ }
+}
diff --git a/includes/Vendor/Manager.php b/includes/Vendor/Manager.php
index 2346f5822b..95346741d6 100644
--- a/includes/Vendor/Manager.php
+++ b/includes/Vendor/Manager.php
@@ -325,6 +325,14 @@ public function update( $vendor_id, $data = [] ) {
if ( isset( $data['admin_commission'] ) && ( is_numeric( wc_format_decimal( $data['admin_commission'] ) ) || '' === $data['admin_commission'] ) ) {
$vendor->update_meta( 'dokan_admin_percentage', wc_format_decimal( $data['admin_commission'] ) );
}
+
+ if ( isset( $data['admin_additional_fee'] ) && ( is_numeric( wc_format_decimal( $data['admin_additional_fee'] ) ) || '' === $data['admin_additional_fee'] ) ) {
+ $vendor->update_meta( 'dokan_admin_additional_fee', wc_format_decimal( $data['admin_additional_fee'] ) );
+ }
+
+ if ( isset( $data['admin_category_commission'] ) ) {
+ $vendor->update_meta( 'admin_category_commission', wc_clean( $data['admin_category_commission'] ) );
+ }
}
// update vendor store data
@@ -429,11 +437,28 @@ public function update( $vendor_id, $data = [] ) {
}
}
+ /**
+ * Fires before a vendor is updated.
+ *
+ * @since 2.9.10
+ *
+ * @param int $vendor_id The ID of the vendor being updated.
+ * @param array $data The array of vendor data being updated.
+ */
do_action( 'dokan_before_update_vendor', $vendor->get_id(), $data );
$vendor->save();
- do_action( 'dokan_update_vendor', $vendor->get_id() );
+ /**
+ * Fires after a vendor has been updated.
+ *
+ * @since 2.9.10
+ * @since 3.12.4 added $data parameter
+ *
+ * @param int $vendor_id The ID of the vendor that was updated.
+ * @param array $data The array of vendor data that was updated.
+ */
+ do_action( 'dokan_update_vendor', $vendor->get_id(), $data );
return $vendor->get_id();
}
diff --git a/includes/Vendor/Vendor.php b/includes/Vendor/Vendor.php
index 3449228979..ae6ee2063d 100644
--- a/includes/Vendor/Vendor.php
+++ b/includes/Vendor/Vendor.php
@@ -5,9 +5,8 @@
use Automattic\WooCommerce\Utilities\NumberUtil;
use WC_Order;
use WeDevs\Dokan\Cache;
-use WeDevs\Dokan\Product\ProductCache;
+use WeDevs\Dokan\Commission\Model\Setting;
use WP_Error;
-use WP_Query;
use WP_User;
/**
@@ -630,8 +629,6 @@ public function get_store_categories( $best_selling = false ) {
// get extra information
$display_type = get_term_meta( $term->term_id, 'display_type', true );
$thumbnail_id = absint( get_term_meta( $term->term_id, 'thumbnail_id', true ) );
- $category_commision_type = get_term_meta( $term->term_id, 'per_category_admin_commission_type', true );
- $category_commision = get_term_meta( $term->term_id, 'per_category_admin_commission', true );
$category_icon = get_term_meta( $term->term_id, 'dokan_cat_icon', true );
$category_icon_color = get_term_meta( $term->term_id, 'dokan_cat_icon_color', true );
@@ -645,9 +642,6 @@ public function get_store_categories( $best_selling = false ) {
$image = $thumbnail = wc_placeholder_img_src();
}
- // fix commission
- $category_commision = ! empty( $category_commision ) ? wc_format_decimal( $category_commision ) : 0.00;
-
// set extra fields to term object
$term->thumbnail = $thumbnail;
$term->image = $image;
@@ -655,9 +649,6 @@ public function get_store_categories( $best_selling = false ) {
$term->icon = $category_icon;
$term->icon_color = $category_icon_color;
$term->display_type = $display_type;
- // set commissions
- $term->admin_commission_type = $category_commision_type;
- $term->admin_commission = $category_commision;
// finally store category data
$all_categories[] = $term;
@@ -943,17 +934,6 @@ public function get_readable_rating( $display = true ) {
echo esc_html( $html );
}
- /**
- * Get vendor percentage
- *
- * @param integer $product_id
- *
- * @return integer
- */
- public function get_percentage( $product_id = 0 ) {
- return dokan_get_seller_percentage( $this->id, $product_id );
- }
-
/**
* Make vendor active
*
@@ -1375,7 +1355,7 @@ protected function set_prop( $prop, $value ) {
* @param string $key
* @param bool $single Whether to return a single value
*
- * @return Mix
+ * @return mixed|null|false
*/
public function get_meta( $key, $single = false ) {
return get_user_meta( $this->get_id(), $key, $single );
@@ -1567,6 +1547,32 @@ public function save() {
$this->apply_changes();
}
+ /**
+ * Returns vendor commission settings data.
+ *
+ * @since 3.14.0
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function get_commission_settings() {
+ $settings = new \WeDevs\Dokan\Commission\Settings\Vendor( $this->get_id() );
+ return $settings->get();
+ }
+
+ /**
+ * Saves commission settings.
+ *
+ * @since 3.14.0
+ *
+ * @param array $commission
+ *
+ * @return \WeDevs\Dokan\Commission\Model\Setting
+ */
+ public function save_commission_settings( $commission = [] ) {
+ $settings = new \WeDevs\Dokan\Commission\Settings\Vendor( $this->get_id() );
+ return $settings->save( $commission );
+ }
+
/**
* Get vendor profile url for admin
*
diff --git a/includes/Walkers/CategoryDropdownSingle.php b/includes/Walkers/CategoryDropdownSingle.php
deleted file mode 100644
index eed9a56e57..0000000000
--- a/includes/Walkers/CategoryDropdownSingle.php
+++ /dev/null
@@ -1,56 +0,0 @@
- 'parent',
- 'id' => 'term_id',
- );
-
- public function __construct( $post_id ) {
- $this->post_id = $post_id;
- parent::__construct( $post_id );
- }
-
-
- public function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
- if ( defined( 'DOKAN_PRO_PLUGIN_VERSION' ) && version_compare( DOKAN_PRO_PLUGIN_VERSION, '2.9.14', '<' ) ) {
- $commission_val = dokan_get_seller_percentage( dokan_get_current_user_id(), $this->post_id, $category->term_id );
- $commission_type = dokan_get_commission_type( dokan_get_current_user_id(), $this->post_id, $category->term_id );
- } else {
- $commission_val = dokan()->commission->get_earning_by_product( $this->post_id );
-
- if ( is_wp_error( $commission_val ) ) {
- $commission_val = 0;
- }
- }
-
- $pad = str_repeat( ' —', $depth * 1 );
- $cat_name = apply_filters( 'list_cats', $category->name, $category );
- $output .= "\tterm_id . '"';
-
- if ( defined( 'DOKAN_PRO_PLUGIN_VERSION' ) && version_compare( DOKAN_PRO_PLUGIN_VERSION, '2.9.14', '<' ) ) {
- $output .= ' data-commission="' . $commission_val . '" data-commission_type="' . $commission_type . '"';
- } else {
- $output .= ' data-commission="' . $commission_val . '" data-product-id="' . $this->post_id . '"';
- }
-
- if ( (int) $category->term_id === (int) $args['selected'] ) {
- $output .= ' selected="selected"';
- }
-
- $output .= '>';
- $output .= $pad . ' ' . $cat_name;
- $output .= " \n";
- }
-}
diff --git a/includes/Walkers/TaxonomyDropdown.php b/includes/Walkers/TaxonomyDropdown.php
index 106a1359d6..43228aa7e5 100644
--- a/includes/Walkers/TaxonomyDropdown.php
+++ b/includes/Walkers/TaxonomyDropdown.php
@@ -51,16 +51,16 @@ public function __construct( $post_id = 0 ) {
* @return void
*/
public function start_el( &$output, $category, $depth = 0, $args = [], $id = 0 ) {
- if ( defined( 'DOKAN_PRO_PLUGIN_VERSION' ) && version_compare( DOKAN_PRO_PLUGIN_VERSION, '2.9.14', '<' ) ) {
- $commission_val = dokan_get_seller_percentage( dokan_get_current_user_id(), $this->post_id, $category->term_id );
- $commission_type = dokan_get_commission_type( dokan_get_current_user_id(), $this->post_id, $category->term_id );
- } else {
- $commission_val = dokan()->commission->get_earning_by_product( $this->post_id );
-
- if ( is_wp_error( $commission_val ) ) {
- $commission_val = 0;
- }
- }
+ $commission_data = dokan()->commission->get_commission(
+ [
+ 'product_id' => $this->post_id,
+ 'category_id' => $category->term_id,
+ 'vendor_id' => dokan_get_current_user_id(),
+ ]
+ );
+
+ $commission_val = $commission_data->get_vendor_earning();
+ $commission_type = $commission_data->get_type();
$pad = str_repeat( ' —', $depth * 1 );
$cat_name = apply_filters( 'list_cats', $category->name, $category );
diff --git a/includes/Widgets/BestSellingProducts.php b/includes/Widgets/BestSellingProducts.php
index a6963e1327..b519d6b515 100755
--- a/includes/Widgets/BestSellingProducts.php
+++ b/includes/Widgets/BestSellingProducts.php
@@ -37,9 +37,10 @@ public function widget( $args, $instance ) {
$r = dokan_get_best_selling_products( $no_of_product, $vendor_id, $paged, $hide_outofstock );
- echo $args['before_widget']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_widget'] );
+
if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_title'] . $title . $args['after_title'] );
}
dokan_get_template_part(
@@ -49,7 +50,7 @@ public function widget( $args, $instance ) {
)
);
- echo $args['after_widget']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['after_widget'] );
wp_reset_postdata();
}
diff --git a/includes/Widgets/FilterByAttributes.php b/includes/Widgets/FilterByAttributes.php
index 09978cab34..1045290d1b 100755
--- a/includes/Widgets/FilterByAttributes.php
+++ b/includes/Widgets/FilterByAttributes.php
@@ -38,9 +38,9 @@ public function widget( $args, $instance ) {
// load frontend script
wp_enqueue_script( 'dokan-frontend' );
- $taxonomy = $this->get_instance_taxonomy( $instance );
- $seller_id = empty( $seller_id ) ? get_query_var( 'author' ) : $seller_id;
- $vendor = dokan()->vendor->get( $seller_id );
+ $taxonomy = $this->get_instance_taxonomy( $instance );
+ $seller_id = empty( $seller_id ) ? get_query_var( 'author' ) : $seller_id;
+ $vendor = dokan()->vendor->get( $seller_id );
if ( ! $vendor instanceof Vendor ) {
return;
@@ -54,16 +54,17 @@ public function widget( $args, $instance ) {
$title = isset( $instance['title'] ) ? apply_filters( 'widget_title', $instance['title'] ) : '';
$query_type = isset( $instance['query_type'] ) ? apply_filters( 'widget_query_type', $instance['query_type'] ) : '';
- echo $args['before_widget']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_widget'] );
+
if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_title'] . $title . $args['after_title'] );
}
$seller_id = empty( $seller_id ) ? get_query_var( 'author' ) : $seller_id;
dokan_store_term_menu_list( $seller_id, $taxonomy, $query_type );
- echo $args['after_widget']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['after_widget'] );
wp_reset_postdata();
}
@@ -110,7 +111,7 @@ public function form( $instance ) {
-
+
$option_value ) : ?>
>
@@ -118,7 +119,7 @@ public function form( $instance ) {
-
+
$option_value ) : ?>
>
@@ -177,5 +178,4 @@ protected function get_instance_taxonomy( $instance ) {
return '';
}
-
}
diff --git a/includes/Widgets/ProductCategoryMenu.php b/includes/Widgets/ProductCategoryMenu.php
index 11e9f4e951..e5c2a0dcd1 100755
--- a/includes/Widgets/ProductCategoryMenu.php
+++ b/includes/Widgets/ProductCategoryMenu.php
@@ -23,8 +23,8 @@ public function __construct() {
/**
* Outputs the HTML for this widget.
*
- * @param array An array of standard parameters for widgets in this theme
- * @param array An array of settings for this widget instance
+ * @param array $args An array of standard parameters for widgets in this theme
+ * @param array $instance An array of settings for this widget instance
* @return void Echoes it's output
**/
public function widget( $args, $instance ) {
@@ -33,41 +33,42 @@ public function widget( $args, $instance ) {
$title = isset( $instance['title'] ) ? apply_filters( 'widget_title', $instance['title'] ) : '';
- echo $args['before_widget']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_widget'] );
if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_title'] . $title . $args['after_title'] );
}
?>
'product_cat',
'hide_empty' => false,
'orderby' => 'name',
'depth' => 3,
)
);
- $categories = get_terms( 'product_cat', $term_args );
+ $categories = get_terms( $term_args );
$walker = new CategoryWalker();
echo '
';
- echo call_user_func_array( array( &$walker, 'walk' ), array( $categories, 0, array() ) ); // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( call_user_func_array( array( &$walker, 'walk' ), array( $categories, 0, array() ) ) );
echo ' ';
?>
__( 'Store Product Category', 'dokan-lite' ),
@@ -43,12 +43,12 @@ public function widget( $args, $instance ) {
$seller_id = (int) get_query_var( 'author' );
if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_title'] . $title . $args['after_title'] );
}
dokan_store_category_menu( $seller_id, $title );
- echo $args['after_widget']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['after_widget'] );
}
do_action( 'dokan_widget_store_categories_render', $args, $instance, $this );
@@ -58,8 +58,8 @@ public function widget( $args, $instance ) {
* Deals with the settings when they are saved by the admin. Here is
* where any validation should be dealt with.
*
- * @param array An array of new settings as submitted by the admin
- * @param array An array of the previous settings
+ * @param array $new_instance An array of new settings as submitted by the admin
+ * @param array $old_instance An array of the previous settings
* @return array The validated and (if necessary) amended settings
**/
public function update( $new_instance, $old_instance ) {
@@ -72,7 +72,7 @@ public function update( $new_instance, $old_instance ) {
/**
* Displays the form for this widget on the Widgets page of the WP Admin area.
*
- * @param array An array of the current settings for this widget
+ * @param array $instance An array of the current settings for this widget
* @return void Echoes it's output
**/
public function form( $instance ) {
diff --git a/includes/Widgets/StoreContactForm.php b/includes/Widgets/StoreContactForm.php
index d8d1289e7a..f9d3d1e77d 100755
--- a/includes/Widgets/StoreContactForm.php
+++ b/includes/Widgets/StoreContactForm.php
@@ -29,8 +29,8 @@ public function __construct() {
/**
* Outputs the HTML for this widget.
*
- * @param array An array of standard parameters for widgets in this theme
- * @param array An array of settings for this widget instance
+ * @param array $args An array of standard parameters for widgets in this theme
+ * @param array $instance An array of settings for this widget instance
*
* @return void Echoes it's output
**/
@@ -59,10 +59,10 @@ public function widget( $args, $instance ) {
$store_info = dokan_get_store_info( $seller_id );
- echo $args['before_widget']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_widget'] );
if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_title'] . $title . $args['after_title'] );
}
$username = '';
@@ -83,7 +83,7 @@ public function widget( $args, $instance ) {
)
);
- echo $args['after_widget']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['after_widget'] );
}
do_action( 'dokan_widget_store_contact_form_render', $args, $instance, $this );
@@ -93,13 +93,12 @@ public function widget( $args, $instance ) {
* Deals with the settings when they are saved by the admin. Here is
* where any validation should be dealt with.
*
- * @param array An array of new settings as submitted by the admin
- * @param array An array of the previous settings
+ * @param array $new_instance An array of new settings as submitted by the admin
+ * @param array $old_instance An array of the previous settings
*
* @return array The validated and (if necessary) amended settings
*/
public function update( $new_instance, $old_instance ) {
-
// update logic goes here
$updated_instance = $new_instance;
return $updated_instance;
@@ -108,7 +107,7 @@ public function update( $new_instance, $old_instance ) {
/**
* Displays the form for this widget on the Widgets page of the WP Admin area.
*
- * @param array An array of the current settings for this widget
+ * @param array $instance An array of the current settings for this widget
*
* @return void Echoes it's output
*/
diff --git a/includes/Widgets/StoreLocation.php b/includes/Widgets/StoreLocation.php
index b60ddcaed7..d54ab21730 100755
--- a/includes/Widgets/StoreLocation.php
+++ b/includes/Widgets/StoreLocation.php
@@ -50,10 +50,10 @@ public function widget( $args, $instance ) {
return;
}
- echo $args['before_widget']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_widget'] );
if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_title'] . $title . $args['after_title'] );
}
do_action( 'dokan_store_widget_before_map', $store_info );
@@ -66,7 +66,7 @@ public function widget( $args, $instance ) {
do_action( 'dokan_store_widget_after_map', $store_info );
- echo $args['after_widget']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['after_widget'] );
}
do_action( 'dokan_widget_store_location_render', $args, $instance, $this );
@@ -76,8 +76,8 @@ public function widget( $args, $instance ) {
* Deals with the settings when they are saved by the admin. Here is
* where any validation should be dealt with.
*
- * @param array An array of new settings as submitted by the admin
- * @param array An array of the previous settings
+ * @param array $new_instance array of new settings as submitted by the admin
+ * @param array $old_instance array of the previous settings
*
* @return array The validated and (if necessary) amended settings
*/
@@ -91,7 +91,7 @@ public function update( $new_instance, $old_instance ) {
/**
* Displays the form for this widget on the Widgets page of the WP Admin area.
*
- * @param array An array of the current settings for this widget
+ * @param array $instance array of the current settings for this widget
*
* @return void Echoes it's output
*/
diff --git a/includes/Widgets/StoreOpenClose.php b/includes/Widgets/StoreOpenClose.php
index 122e7b66e3..ffdf3a2f48 100644
--- a/includes/Widgets/StoreOpenClose.php
+++ b/includes/Widgets/StoreOpenClose.php
@@ -28,8 +28,8 @@ public function __construct() {
/**
* Outputs the HTML for this widget.
*
- * @param array An array of standard parameters for widgets in this theme
- * @param array An array of settings for this widget instance
+ * @param array $args array of standard parameters for widgets in this theme
+ * @param array $instance An array of settings for this widget instance
*
* @return void Echoes it's output
**/
@@ -61,10 +61,10 @@ public function widget( $args, $instance ) {
return;
}
- echo $args['before_widget']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_widget'] );
if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_title'] . $title . $args['after_title'] );
}
dokan_get_template_part(
@@ -75,7 +75,7 @@ public function widget( $args, $instance ) {
]
);
- echo $args['after_widget']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['after_widget'] );
}
do_action( 'dokan_widget_store_open_close_render', $args, $instance, $this );
@@ -85,8 +85,8 @@ public function widget( $args, $instance ) {
* Deals with the settings when they are saved by the admin. Here is
* where any validation should be dealt with.
*
- * @param array An array of new settings as submitted by the admin
- * @param array An array of the previous settings
+ * @param array $new_instance array of new settings as submitted by the admin
+ * @param array $old_instance array of the previous settings
*
* @return array The validated and (if necessary) amended settings
*/
@@ -100,7 +100,7 @@ public function update( $new_instance, $old_instance ) {
/**
* Displays the form for this widget on the Widgets page of the WP Admin area.
*
- * @param array An array of the current settings for this widget
+ * @param array $instance array of the current settings for this widget
*
* @return void Echoes it's output
*/
diff --git a/includes/Widgets/TopratedProducts.php b/includes/Widgets/TopratedProducts.php
index b70580be27..693f0c95af 100755
--- a/includes/Widgets/TopratedProducts.php
+++ b/includes/Widgets/TopratedProducts.php
@@ -34,9 +34,10 @@ public function widget( $args, $instance ) {
$r = dokan_get_top_rated_products( $no_of_product );
- echo $args['before_widget']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_widget'] );
+
if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['before_title'] . $title . $args['after_title'] );
}
dokan_get_template_part(
@@ -46,7 +47,7 @@ public function widget( $args, $instance ) {
)
);
- echo $args['after_widget']; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( $args['after_widget'] );
wp_reset_postdata();
}
@@ -103,5 +104,4 @@ public function update( $new_instance, $old_instance ) {
$instance['show_rating'] = ( ! empty( $new_instance['show_rating'] ) ) ? sanitize_text_field( $new_instance['show_rating'] ) : '';
return $instance;
}
-
-} // class Dokan best selling product widget
+}
diff --git a/includes/Withdraw/functions.php b/includes/Withdraw/functions.php
index f5fafa71e0..35b8e35dd8 100644
--- a/includes/Withdraw/functions.php
+++ b/includes/Withdraw/functions.php
@@ -541,10 +541,10 @@ function dokan_withdraw_get_chargeable_methods() {
* @return array
*/
function dokan_withdraw_get_method_charges() {
- $charges = dokan_get_option( 'withdraw_charges', 'dokan_withdraw', [] );
- $all_methods = array_keys( dokan_withdraw_get_methods() );
+ $charges = dokan_get_option( 'withdraw_charges', 'dokan_withdraw', [] );
+ $all_methods = array_keys( dokan_withdraw_get_methods() );
$chargeable_methods = array_keys( dokan_withdraw_get_chargeable_methods() );
- $default_val = [
+ $default_val = [
'fixed' => 0.00,
'percentage' => 0.00,
];
@@ -553,8 +553,8 @@ function dokan_withdraw_get_method_charges() {
if ( empty( $charges ) || ! is_array( $charges ) || ! in_array( $method, $chargeable_methods, true ) ) {
$charges[ $method ] = $default_val;
} else {
- $charges[ $method ]['fixed'] = ! empty( $charges[ $method ]['fixed'] ) ? (float) wc_format_decimal( $charges[ $method ]['fixed'] ) : 0.00;
- $charges[ $method ]['percentage'] = ! empty( $charges[ $method ]['percentage'] ) ? (float) wc_format_decimal( $charges[ $method ]['percentage'] ) : 0.00;
+ $charges[ $method ]['fixed'] = wc_format_decimal( $charges[ $method ]['fixed'] ?? 0.00 );
+ $charges[ $method ]['percentage'] = wc_format_decimal( $charges[ $method ]['percentage'] ?? 0.00 );
}
}
diff --git a/includes/functions-dashboard-navigation.php b/includes/functions-dashboard-navigation.php
index a9cdd1e460..97301b5af5 100644
--- a/includes/functions-dashboard-navigation.php
+++ b/includes/functions-dashboard-navigation.php
@@ -214,7 +214,7 @@ function dokan_dashboard_nav( $active_menu = '' ) {
*
* @param string $menu_key
*/
- $filtered_key = apply_filters( 'dokan_dashboard_nav_menu_key', $key );
+ $filtered_key = rawurlencode_deep( apply_filters( 'dokan_dashboard_nav_menu_key', $key ) );
$class = $active_menu === $filtered_key || 0 === stripos( $active_menu, $filtered_key ) ? 'active ' . $key : $key; // checking starts with the key
$title = __( 'No Title', 'dokan-lite' );
@@ -247,7 +247,7 @@ function dokan_dashboard_nav( $active_menu = '' ) {
* @param string $submenu_key
* @param string $menu_key
*/
- $filtered_subkey = apply_filters( 'dokan_dashboard_nav_submenu_key', $sub_key, $key );
+ $filtered_subkey = rawurlencode_deep( apply_filters( 'dokan_dashboard_nav_submenu_key', $sub_key, $key ) );
$submenu_class = $active_submenu === $filtered_subkey || 0 === stripos( $active_submenu, $filtered_subkey ) ? "current $sub_key" : $sub_key;
$submenu_title = __( 'No Title', 'dokan-lite' );
@@ -278,9 +278,10 @@ function dokan_dashboard_nav( $active_menu = '' ) {
}
$menu .= sprintf(
- '%s %s %s ',
+ '%s %s %s ',
$class,
isset( $item['url'] ) ? $item['url'] : dokan_get_navigation_url( $menu_slug ),
+ isset( $item['target'] ) ? $item['target'] : '_self',
isset( $item['icon'] ) ? $item['icon'] : ' ',
apply_filters( 'dokan_vendor_dashboard_menu_title', $title, $item ),
$submenu
diff --git a/includes/functions.php b/includes/functions.php
index 1636bd171d..32db2499c8 100755
--- a/includes/functions.php
+++ b/includes/functions.php
@@ -106,11 +106,7 @@ function dokan_is_product_author( $product_id = 0 ) {
$author = get_post_field( 'post_author', $product_id );
}
- if ( absint( $author ) === apply_filters( 'dokan_is_product_author', dokan_get_current_user_id(), $product_id ) ) {
- return true;
- }
-
- return false;
+ return absint( $author ) === apply_filters( 'dokan_is_product_author', dokan_get_current_user_id(), $product_id );
}
/**
@@ -136,11 +132,7 @@ function dokan_is_store_page() {
* @return bool
*/
function dokan_is_product_edit_page() {
- if ( get_query_var( 'edit' ) && is_singular( 'product' ) ) {
- return true;
- }
-
- return false;
+ return get_query_var( 'edit' ) && is_singular( 'product' );
}
/**
@@ -288,6 +280,7 @@ function dokan_count_stock_posts( $post_type, $user_id, $stock_type, $exclude_pr
$exclude_product_types_text = "'" . implode( "', '", esc_sql( $exclude_product_types ) ) . "'";
if ( ! $results ) {
+ // @codingStandardsIgnoreStart
$results = $wpdb->get_results(
$wpdb->prepare(
"SELECT p.post_status, COUNT( * ) AS num_posts
@@ -309,6 +302,7 @@ function dokan_count_stock_posts( $post_type, $user_id, $stock_type, $exclude_pr
),
ARRAY_A
);
+ // @codingStandardsIgnoreEnd
}
$post_status = array_keys( dokan_get_post_status() );
@@ -346,7 +340,7 @@ function dokan_count_comments( $post_type, $user_id ) {
$counts = Cache::get( $cache_key, $cache_group );
if ( $counts === false ) {
- $count = $wpdb->get_results(
+ $count = $wpdb->get_results( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->prepare(
"SELECT c.comment_approved, COUNT( * ) AS num_comments
FROM $wpdb->comments as c, $wpdb->posts as p
@@ -406,7 +400,7 @@ function dokan_author_pageviews( $seller_id ) {
$pageview = Cache::get( $cache_key );
if ( false === $pageview ) {
- $count = $wpdb->get_row(
+ $count = $wpdb->get_row( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->prepare(
"SELECT SUM(meta_value) as pageview
FROM {$wpdb->postmeta} AS meta
@@ -429,82 +423,25 @@ function dokan_author_pageviews( $seller_id ) {
/**
* Get store seller percentage settings
*
+ * @deprecated 3.14.0 Do Not Use This Function
+ *
* @param int $seller_id
* @param int $product_id
*
* @return int
*/
function dokan_get_seller_percentage( $seller_id = 0, $product_id = 0, $category_id = 0 ) {
+ wc_deprecated_function( __FUNCTION__, '3.14.0', 'dokan()->commission->get_commission()' );
- // Seller will get 100 percent if ( any_input_val < 0 || percentage_input_val > 100 )
- $commission_val = 100;
-
- //Global percentage
- $global_percentage = dokan_get_option( 'admin_percentage', 'dokan_selling', 0 );
-
- if ( $global_percentage !== '' && is_numeric( $global_percentage ) && $global_percentage >= 0 ) {
- $global_type = dokan_get_option( 'commission_type', 'dokan_selling', 'percentage' );
-
- if ( 'percentage' === $global_type ) {
- if ( $global_percentage <= 100 ) {
- $commission_val = (float) ( 100 - $global_percentage );
- }
- } elseif ( 'flat' === $global_type ) {
- $commission_val = (float) $global_percentage;
- }
- }
-
- //seller wise percentage
- if ( $seller_id ) {
- $admin_commission = get_user_meta( $seller_id, 'dokan_admin_percentage', true );
-
- if ( $admin_commission !== '' && is_numeric( $admin_commission ) && $admin_commission >= 0 ) {
- $admin_percentage_type = get_user_meta( $seller_id, 'dokan_admin_percentage_type', true );
-
- if ( 'percentage' === $admin_percentage_type ) {
- if ( $admin_commission <= 100 ) {
- $commission_val = (float) ( 100 - $admin_commission );
- }
- } elseif ( 'flat' === $admin_percentage_type ) {
- $commission_val = (float) $admin_commission;
- }
- }
- }
-
- //product and category wise percentage
- if ( $product_id ) {
-
- //category wise percentage
- $category_commission = dokan_get_category_wise_seller_commission( $product_id, $category_id );
- $is_single_category = dokan_get_option( 'product_category_style', 'dokan_selling', 'single' );
-
- if ( $is_single_category === 'single' && $category_commission !== '' && is_numeric( $category_commission ) && $category_commission >= 0 ) {
- $category_commission_type = dokan_get_category_wise_seller_commission_type( $product_id, $category_id );
-
- if ( 'percentage' === $category_commission_type ) {
- if ( $category_commission <= 100 ) {
- $commission_val = (float) ( 100 - $category_commission );
- }
- } elseif ( 'flat' === $category_commission_type ) {
- $commission_val = (float) $category_commission;
- }
- }
-
- //product wise percentage
- $_per_product_commission = get_post_meta( $product_id, '_per_product_admin_commission', true );
-
- if ( $_per_product_commission !== '' && is_numeric( $_per_product_commission ) && $_per_product_commission >= 0 ) {
- $_per_product_commission_type = get_post_meta( $product_id, '_per_product_admin_commission_type', true );
+ $commission_data = dokan()->commission->get_commission(
+ [
+ 'vendor_id' => $seller_id,
+ 'product_id' => $product_id,
+ 'category_id' => $category_id,
+ ]
+ );
- if ( 'percentage' === $_per_product_commission_type ) {
- if ( $_per_product_commission <= 100 ) {
- $commission_val = (float) ( 100 - $_per_product_commission );
- }
- } elseif ( 'flat' === $_per_product_commission_type ) {
- $commission_val = (float) $_per_product_commission;
- }
- }
- }
+ $commission_val = $commission_data->get_vendor_earning();
return apply_filters( 'dokan_get_seller_percentage', $commission_val, $seller_id, $product_id );
}
@@ -513,6 +450,8 @@ function dokan_get_seller_percentage( $seller_id = 0, $product_id = 0, $category
/**
* Get Dokan commission type by seller or product or both
*
+ * @deprecated 3.14.0 Do Not Use This Function
+ *
* @since 2.6.9
*
* @param int $seller_id
@@ -521,48 +460,17 @@ function dokan_get_seller_percentage( $seller_id = 0, $product_id = 0, $category
* @return string $type
*/
function dokan_get_commission_type( $seller_id = 0, $product_id = 0, $category_id = 0 ) {
- //return product wise percentage
- if ( $product_id ) {
- $_per_product_commission = get_post_meta( $product_id, '_per_product_admin_commission', true );
-
- if ( $_per_product_commission !== '' ) {
- $type = get_post_meta( $product_id, '_per_product_admin_commission_type', true );
- $type = empty( $type ) ? 'percentage' : $type;
-
- if ( 'flat' === $type || ( 'percentage' === $type && $_per_product_commission <= 100 ) ) {
- return $type;
- }
- }
-
- $category_commission = dokan_get_category_wise_seller_commission( $product_id, $category_id );
-
- if ( ! empty( $category_commission ) && $category_commission ) {
- $type = dokan_get_category_wise_seller_commission_type( $product_id, $category_id );
- $type = empty( $type ) ? 'percentage' : $type;
+ wc_deprecated_function( __FUNCTION__, '3.14.0', 'dokan()->commission->get_commission()' );
- if ( 'flat' === $type || ( 'percentage' === $type && $category_commission <= 100 ) ) {
- return $type;
- }
- }
- }
-
- //return seller wise percentage
- if ( $seller_id ) {
- $admin_commission = get_user_meta( $seller_id, 'dokan_admin_percentage', true );
-
- if ( $admin_commission !== '' ) {
- $type = get_user_meta( $seller_id, 'dokan_admin_percentage_type', true );
- $type = empty( $type ) ? 'percentage' : $type;
-
- if ( 'flat' === $type || ( 'percentage' === $type && $admin_commission <= 100 ) ) {
- return $type;
- }
- }
- }
-
- $global_type = dokan_get_option( 'commission_type', 'dokan_selling', 'percentage' );
+ $commission_data = dokan()->commission->get_commission(
+ [
+ 'vendor_id' => $seller_id,
+ 'product_id' => $product_id,
+ 'category_id' => $category_id,
+ ]
+ );
- return $global_type;
+ return $commission_data->get_type();
}
/**
@@ -838,7 +746,7 @@ function dokan_get_post_status_label_class( $status = '' ) {
*
* @param string $status
*
- * @return string
+ * @return array
*/
function dokan_get_product_types( $status = '' ) {
$types = apply_filters(
@@ -1083,7 +991,8 @@ function dokan_edit_product_url( $product, bool $is_new_product = false ) {
* @return array
*/
function dokan_admin_product_columns( $columns ) {
- $columns['author'] = __( 'Author', 'dokan-lite' );
+ $columns['admin_commission'] = __( 'Commission', 'dokan-lite' );
+ $columns['author'] = __( 'Author', 'dokan-lite' );
return $columns;
}
@@ -1095,11 +1004,11 @@ function dokan_admin_product_columns( $columns ) {
*
* @param string $option settings field name
* @param string $section the section name this field belongs to
- * @param string $default default text if it's not found
+ * @param string $default_value default text if it's not found
*
* @return mixed
*/
-function dokan_get_option( $option, $section, $default = '' ) {
+function dokan_get_option( $option, $section, $default_value = '' ) {
[ $option, $section ] = dokan_admin_settings_rearrange_map( $option, $section );
$options = get_option( $section );
@@ -1108,7 +1017,7 @@ function dokan_get_option( $option, $section, $default = '' ) {
return $options[ $option ];
}
- return $default;
+ return $default_value;
}
/**
@@ -1154,11 +1063,7 @@ function dokan_is_seller_enabled( $user_id ): bool {
function dokan_is_seller_trusted( $user_id ) {
$publishing = get_user_meta( $user_id, 'dokan_publishing', true );
- if ( $publishing === 'yes' ) {
- return true;
- }
-
- return false;
+ return $publishing === 'yes';
}
/**
@@ -1199,7 +1104,11 @@ function dokan_get_store_url( $user_id ) {
function dokan_get_current_page_url() {
global $wp;
- return add_query_arg( $_SERVER['QUERY_STRING'], '', home_url( $wp->request ) );
+ if ( ! empty( $_SERVER['QUERY_STRING'] ) ) {
+ return add_query_arg( wc_clean( wp_unslash( $_SERVER['QUERY_STRING'] ) ), '', home_url( $wp->request ) );
+ }
+
+ return home_url( $wp->request );
}
/**
@@ -1210,11 +1119,7 @@ function dokan_get_current_page_url() {
* @return bool
*/
function dokan_is_store_review_page() {
- if ( get_query_var( 'store_review' ) === 'true' ) {
- return true;
- }
-
- return false;
+ return get_query_var( 'store_review' ) === 'true';
}
/**
@@ -1481,7 +1386,7 @@ function dokan_get_percentage_of( $this_period = 0, $last_period = 0 ) {
$this_period = intval( $this_period );
$last_period = intval( $last_period );
- if ( 0 === $this_period && 0 === $last_period || $this_period === $last_period ) {
+ if ( ( 0 === $this_period && 0 === $last_period ) || $this_period === $last_period ) {
$class = 'up';
} elseif ( 0 === $this_period ) {
$parcent = $last_period * 100;
@@ -2196,7 +2101,7 @@ function dokan_wc_email_recipient_add_seller_no_stock( $recipient, $product ) {
function dokan_get_products_listing_months_for_vendor( $user_id ) {
global $wpdb, $wp_locale;
- $months = $wpdb->get_results(
+ $months = $wpdb->get_results( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->prepare(
"SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month
FROM $wpdb->posts
@@ -2325,6 +2230,7 @@ function dokan_product_search_by_sku( $where ) {
$find = wc_clean( $term );
$like = $wild . $wpdb->esc_like( $find ) . $wild;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$sku_to_id = $wpdb->get_col( $wpdb->prepare( "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_sku' AND meta_value LIKE %s", $like ) );
if ( $sku_to_id && count( $sku_to_id ) > 0 ) {
@@ -2394,7 +2300,8 @@ function dokan_get_social_profile_fields() {
*
* @since 2.3
*
- * @param bool verified
+ * @param bool $verified verified
+ * @param bool $required required
*
* @return void
*/
@@ -2472,7 +2379,6 @@ function dokan_get_seller_address( $seller_id = 0, $get_array = false ) {
$zip = isset( $address['zip'] ) ? $address['zip'] : '';
$country_code = isset( $address['country'] ) ? $address['country'] : '';
- $state_code = isset( $address['state'] ) ? $address['state'] : '';
$state_code = isset( $address['state'] ) ? ( $address['state'] === 'N/A' ) ? '' : $address['state'] : '';
$country_name = isset( $countries[ $country_code ] ) ? $countries[ $country_code ] : '';
@@ -2662,7 +2568,9 @@ function dokan_register_store_widget() {
add_action( 'widgets_init', 'dokan_register_store_widget' );
/**
- * Calculate category wise commission for given product
+ * Calculate category wise commission for given product.
+ *
+ * @deprecated 3.14.0 Do Not Use This Function
*
* @since 2.6.8
*
@@ -2671,34 +2579,15 @@ function dokan_register_store_widget() {
* @return int $commission_rate
*/
function dokan_get_category_wise_seller_commission( $product_id, $category_id = 0 ) {
- $terms = get_the_terms( $product_id, 'product_cat' );
-
- if ( empty( $terms ) ) {
- return 0;
- }
-
- $term_id = $terms[0]->term_id;
-
- $category_commision = null;
-
- if ( $category_id ) {
- $terms = get_term( $category_id );
- $term_id = $terms->term_id;
- }
-
- if ( $terms ) {
- $category_commision = get_term_meta( $term_id, 'per_category_admin_commission', true );
- }
-
- if ( ! empty( $category_commision ) ) {
- return wc_format_decimal( $category_commision );
- }
+ wc_deprecated_function( __FUNCTION__, '3.14.0' );
return 0;
}
/**
- * Calculate category wise commission type for given product
+ * Calculate category wise commission type for given product.
+ *
+ * @deprecated 3.14.0 Do Not Use This Function
*
* @since 2.6.9
*
@@ -2707,20 +2596,9 @@ function dokan_get_category_wise_seller_commission( $product_id, $category_id =
* @return int $commission_rate
*/
function dokan_get_category_wise_seller_commission_type( $product_id, $category_id = 0 ) {
- $terms = get_the_terms( $product_id, 'product_cat' );
- $term_id = $terms[0]->term_id;
- $category_commision = '';
+ wc_deprecated_function( __FUNCTION__, '3.14.0' );
- if ( $category_id ) {
- $terms = get_term( $category_id );
- $term_id = $terms->term_id;
- }
-
- if ( $terms ) {
- $category_commision = get_term_meta( $term_id, 'per_category_admin_commission_type', true );
- }
-
- return $category_commision;
+ return '';
}
/**
@@ -3200,6 +3078,8 @@ function dokan_remove_hook_for_anonymous_class( $hook_name = '', $class_name = '
/**
* Dokan get variable product earnings
*
+ * @deprecated 2.9.21
+ *
* @param int $product_id
* @param bool $formated
* @param bool $deprecated
@@ -3373,8 +3253,8 @@ function dokan_privacy_policy_text( $return = false ) {
function dokan_commission_types() {
return apply_filters(
'dokan_commission_types', [
- 'flat' => __( 'Flat', 'dokan-lite' ),
- 'percentage' => __( 'Percentage', 'dokan-lite' ),
+ 'fixed' => __( 'Fixed', 'dokan-lite' ),
+ 'category_based' => __( 'Category Based', 'dokan-lite' ),
]
);
}
diff --git a/includes/template-tags.php b/includes/template-tags.php
index 87c3a4171f..9a5e08fbec 100755
--- a/includes/template-tags.php
+++ b/includes/template-tags.php
@@ -271,10 +271,10 @@ function dokan_order_listing_status_filter() {
{$status_key} ?? 0;
- $formatted_order_count = $status_key === 'all' ? number_format_i18n( $total_orders ) : number_format_i18n( $status_order_count );
+ $formatted_order_count = $status_key === 'all' ? $total_orders : $status_order_count;
/* translators: 1: Order status label 2: Order count */
- printf( esc_html__( '%1$s (%2$s)', 'dokan-lite' ), $status_label, $formatted_order_count );
+ printf( esc_html__( '%1$s (%2$s)', 'dokan-lite' ), esc_html( $status_label ), number_format_i18n( $formatted_order_count ) );
?>
@@ -296,7 +296,7 @@ function dokan_order_listing_status_filter() {
*
* @return void
*/
- function dokan_store_category_menu( $seller_id, $title = '' ) {
+ function dokan_store_category_menu( $seller_id ) {
?>
get_store_categories();
$walker = new \WeDevs\Dokan\Walkers\StoreCategory( $seller_id );
echo '
';
- echo call_user_func_array( array( &$walker, 'walk' ), array( $categories, 0, array() ) ); //phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ echo wp_kses_post( call_user_func_array( array( &$walker, 'walk' ), array( $categories, 0, array() ) ) );
echo ' ';
}
?>
@@ -384,7 +384,7 @@ function dokan_store_term_menu_list( $seller_id, $taxonomy, $query_type ) {
echo '
- ' . $term->name . ' (' . $term->count . ')
+ ' . esc_html( $term->name ) . ' (' . esc_html( $term->count ) . ')
';
}
echo '';
diff --git a/includes/wc-functions.php b/includes/wc-functions.php
index 736bf30831..91fa6fae21 100755
--- a/includes/wc-functions.php
+++ b/includes/wc-functions.php
@@ -288,16 +288,12 @@ function ( $value ) {
if ( 'yes' === get_option( 'woocommerce_manage_stock' ) ) {
$manage_stock = 'no';
$backorders = 'no';
- $stock = '';
$stock_status = wc_clean( $data['_stock_status'] );
-
if ( 'external' === $product_type ) {
$stock_status = 'instock';
} elseif ( 'variable' === $product_type ) {
-
// Stock status is always determined by children so sync later
$stock_status = '';
-
if ( ! empty( $data['_manage_stock'] ) && $data['_manage_stock'] === 'yes' ) {
$manage_stock = 'yes';
$backorders = wc_clean( $data['_backorders'] );
@@ -306,10 +302,9 @@ function ( $value ) {
$manage_stock = $data['_manage_stock'];
$backorders = wc_clean( $data['_backorders'] );
}
-
+
update_post_meta( $post_id, '_manage_stock', $manage_stock );
update_post_meta( $post_id, '_backorders', $backorders );
-
if ( $stock_status ) {
try {
wc_update_product_stock_status( $post_id, $stock_status );
@@ -317,19 +312,25 @@ function ( $value ) {
dokan_log( 'product stock update exception' );
}
}
-
- if ( ! empty( $data['_manage_stock'] ) ) {
+
+ // Retrieve original stock value from the hidden field
+ $original_stock = isset( $data['_original_stock'] ) ? wc_stock_amount( wc_clean( $data['_original_stock'] ) ) : '';
+ // Clean the current stock value
+ $stock_amount = isset( $data['_stock'] ) ? wc_clean( $data['_stock'] ) : '';
+ $stock_amount = 'yes' === $manage_stock ? wc_stock_amount( wp_unslash( $stock_amount ) ) : '';
+ // Only update the stock amount if it has changed
+ if ( $original_stock != $stock_amount ) {
if ( 'variable' === $product_type ) {
update_post_meta( $post_id, '_stock', $stock_amount );
} else {
wc_update_product_stock( $post_id, $stock_amount );
}
-
- update_post_meta( $post_id, '_low_stock_amount', $_low_stock_amount );
- } else {
- update_post_meta( $post_id, '_stock', '' );
- update_post_meta( $post_id, '_low_stock_amount', '' );
}
+
+ // Update low stock amount regardless of stock changes
+ $_low_stock_amount = isset( $data['_low_stock_amount'] ) ? wc_clean( $data['_low_stock_amount'] ) : '';
+ $_low_stock_amount = 'yes' === $manage_stock ? wc_stock_amount( wp_unslash( $_low_stock_amount ) ) : '';
+ update_post_meta( $post_id, '_low_stock_amount', $_low_stock_amount );
} else {
wc_update_product_stock_status( $post_id, wc_clean( $data['_stock_status'] ) );
}
@@ -439,7 +440,8 @@ function dokan_process_product_file_download_paths( int $product_id, int $variat
if ( ! empty( $new_download_ids ) || ! empty( $removed_download_ids ) ) {
// determine whether downloadable file access has been granted via the typical order completion, or via the admin ajax method
- $existing_permissions = $wpdb->get_results( $wpdb->prepare( "SELECT * from {$wpdb->prefix}woocommerce_downloadable_product_permissions WHERE product_id = %d GROUP BY order_id", $product_id ) );
+ $permission_query = $wpdb->prepare( "SELECT * from {$wpdb->prefix}woocommerce_downloadable_product_permissions WHERE product_id = %d GROUP BY order_id", $product_id );
+ $existing_permissions = $wpdb->get_results( $permission_query ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
foreach ( $existing_permissions as $existing_permission ) {
$order = wc_get_order( $existing_permission->order_id );
@@ -449,6 +451,7 @@ function dokan_process_product_file_download_paths( int $product_id, int $variat
if ( ! empty( $removed_download_ids ) ) {
foreach ( $removed_download_ids as $download_id ) {
if ( apply_filters( 'woocommerce_process_product_file_download_paths_remove_access_to_old_file', true, $download_id, $product_id, $order ) ) {
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}woocommerce_downloadable_product_permissions WHERE order_id = %d AND product_id = %d AND download_id = %s", dokan_get_prop( $order, 'id' ), $product_id, $download_id ) );
}
}
@@ -458,6 +461,7 @@ function dokan_process_product_file_download_paths( int $product_id, int $variat
foreach ( $new_download_ids as $download_id ) {
if ( apply_filters( 'woocommerce_process_product_file_download_paths_grant_access_to_new_file', true, $download_id, $product_id, $order ) ) {
// grant permission if it doesn't already exist
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
if ( ! $wpdb->get_var( $wpdb->prepare( "SELECT 1=1 FROM {$wpdb->prefix}woocommerce_downloadable_product_permissions WHERE order_id = %d AND product_id = %d AND download_id = %s", dokan_get_prop( $order, 'id' ), $product_id, $download_id ) ) ) {
wc_downloadable_file_permission( $download_id, $product_id, $order );
}
@@ -478,10 +482,11 @@ function dokan_process_product_file_download_paths( int $product_id, int $variat
*
* @return int
*/
-function dokan_sub_order_get_total_coupon( int $order_id ) : int {
+function dokan_sub_order_get_total_coupon( int $order_id ): int {
wc_deprecated_function( 'dokan_sub_order_get_total_coupon', '3.8.0' );
global $wpdb;
+ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$result = $wpdb->get_var(
$wpdb->prepare(
"SELECT SUM(oim.meta_value) FROM {$wpdb->prefix}woocommerce_order_itemmeta oim
@@ -662,7 +667,7 @@ function dokan_get_top_rated_products( $per_page = 8, $seller_id = '', $page = 1
*
* @return WP_Query
*/
-function dokan_get_on_sale_products( int $per_page = 10, int $paged = 1, int $seller_id = 0 ) : WP_Query {
+function dokan_get_on_sale_products( int $per_page = 10, int $paged = 1, int $seller_id = 0 ): WP_Query {
// Get products on sale
$product_ids_on_sale = wc_get_product_ids_on_sale();
diff --git a/includes/wc-template.php b/includes/wc-template.php
index bca7bece9e..9b3b2d5410 100755
--- a/includes/wc-template.php
+++ b/includes/wc-template.php
@@ -217,9 +217,27 @@ function dokan_vendor_quick_edit_data( $column, $post_id ) {
commission->get_earning_by_product( $post_id, 'admin' );
+ echo is_numeric( $commission ) ? wc_price( $commission ) : '';
+
+ break;
+
default:
break;
}
+
+ ?>
+
+ \n"
"Language-Team: LANGUAGE \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"POT-Creation-Date: 2024-06-07T09:14:47+00:00\n"
+"POT-Creation-Date: 2024-12-27T05:39:23+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"X-Generator: WP-CLI 2.9.0\n"
+"X-Generator: WP-CLI 2.11.0\n"
"X-Domain: dokan-lite\n"
#. Plugin Name of the plugin
+#: dokan.php
#: includes/Admin/AdminBar.php:44
#: includes/Admin/Menu.php:43
#: includes/Customizer.php:56
@@ -22,31 +23,35 @@ msgid "Dokan"
msgstr ""
#. Plugin URI of the plugin
+#: dokan.php
msgid "https://dokan.co/wordpress/"
msgstr ""
#. Description of the plugin
+#: dokan.php
msgid "An e-commerce marketplace plugin for WordPress. Powered by WooCommerce and weDevs."
msgstr ""
#. Author of the plugin
+#: dokan.php
msgid "weDevs"
msgstr ""
#. Author URI of the plugin
+#: dokan.php
msgid "https://dokan.co/"
msgstr ""
#. translators: 1: Required PHP Version 2: Running php version
-#: dokan.php:203
+#: dokan-class.php:163
msgid "The Minimum PHP Version Requirement for Dokan is %1$s. You are Running PHP %2$s"
msgstr ""
-#: dokan.php:512
+#: dokan-class.php:408
msgid "Get Pro"
msgstr ""
-#: dokan.php:515
+#: dokan-class.php:411
#: includes/Admin/AdminBar.php:81
#: includes/Admin/Menu.php:68
#: includes/Dashboard/Templates/Settings.php:60
@@ -56,8 +61,8 @@ msgstr ""
msgid "Settings"
msgstr ""
-#: dokan.php:516
-#: templates/admin-header.php:63
+#: dokan-class.php:412
+#: templates/admin-header.php:118
#: assets/js/vue-admin.js:2
msgid "Documentation"
msgstr ""
@@ -73,7 +78,7 @@ msgstr ""
#: includes/Abstracts/DokanPromotion.php:185
#: includes/Admin/Notices/LimitedTimePromotion.php:50
-#: includes/Admin/Notices/Manager.php:171
+#: includes/Admin/Notices/Manager.php:186
#: includes/Admin/Notices/PluginReview.php:119
#: includes/Admin/Notices/SetupWizard.php:81
msgid "You have no permission to do that"
@@ -81,12 +86,12 @@ msgstr ""
#: includes/Abstracts/DokanPromotion.php:189
#: includes/Admin/Notices/LimitedTimePromotion.php:46
-#: includes/Admin/Notices/Manager.php:166
+#: includes/Admin/Notices/Manager.php:181
#: includes/Admin/Notices/PluginReview.php:115
#: includes/Admin/Notices/SetupWizard.php:77
#: includes/Admin/Notices/WhatsNew.php:74
-#: includes/Admin/Settings.php:98
-#: includes/Admin/Settings.php:124
+#: includes/Admin/Settings.php:120
+#: includes/Admin/Settings.php:146
#: includes/Ajax.php:320
#: includes/ReverseWithdrawal/Ajax.php:37
msgid "Invalid nonce"
@@ -122,9 +127,9 @@ msgstr ""
#: includes/Admin/AdminBar.php:54
#: includes/Admin/Menu.php:46
-#: includes/Admin/Settings.php:671
+#: includes/Admin/Settings.php:749
#: includes/functions-dashboard-navigation.php:30
-#: includes/Install/Installer.php:234
+#: includes/Install/Installer.php:233
#: assets/js/vue-admin.js:2
msgid "Dashboard"
msgstr ""
@@ -132,9 +137,9 @@ msgstr ""
#: includes/Admin/AdminBar.php:63
#: includes/Admin/Menu.php:34
#: includes/Admin/Menu.php:47
-#: includes/Admin/SetupWizard.php:164
+#: includes/Admin/SetupWizard.php:205
#: includes/functions-dashboard-navigation.php:51
-#: includes/functions.php:2887
+#: includes/functions.php:2765
#: templates/withdraw/header.php:11
msgid "Withdraw"
msgstr ""
@@ -190,32 +195,33 @@ msgstr ""
msgid "Commision: "
msgstr ""
-#: includes/Admin/Hooks.php:66
-#: includes/Admin/Settings.php:513
-#: includes/Admin/Settings.php:524
-#: includes/Admin/Settings.php:535
-#: includes/Admin/SetupWizard.php:366
-#: includes/Install/Installer.php:171
-#: includes/Order/Admin/Hooks.php:92
-#: includes/Order/Admin/Hooks.php:375
+#: includes/Admin/Hooks.php:70
+#: includes/Admin/Settings.php:590
+#: includes/Admin/Settings.php:601
+#: includes/Admin/Settings.php:612
+#: includes/Admin/SetupWizard.php:407
+#: includes/Install/Installer.php:170
+#: includes/Order/Admin/Hooks.php:96
+#: includes/Order/Admin/Hooks.php:394
#: includes/wc-template.php:18
#: includes/wc-template.php:164
-#: includes/wc-template.php:311
+#: includes/wc-template.php:329
#: templates/my-orders.php:29
+#: templates/orders/sub-order-related-order-meta-box-html.php:41
#: assets/js/vue-admin.js:2
msgid "Vendor"
msgstr ""
-#: includes/Admin/Hooks.php:93
+#: includes/Admin/Hooks.php:97
#: assets/js/vue-admin.js:2
msgid "Select vendor"
msgstr ""
-#: includes/Admin/Hooks.php:99
+#: includes/Admin/Hooks.php:103
msgid "You can search vendors and assign them."
msgstr ""
-#: includes/Admin/Hooks.php:112
+#: includes/Admin/Hooks.php:116
msgid "Unauthorized operation"
msgstr ""
@@ -225,7 +231,7 @@ msgid "Withdraw %s"
msgstr ""
#: includes/Admin/Menu.php:48
-#: includes/Admin/Settings.php:326
+#: includes/Admin/Settings.php:348
#: includes/ReverseWithdrawal/Hooks.php:232
#: templates/reverse-withdrawal/header.php:9
#: assets/js/vue-admin.js:2
@@ -248,20 +254,32 @@ msgid "Help "
msgstr ""
#. translators: %s permalink settings url
-#: includes/Admin/Notices/Manager.php:115
+#: includes/Admin/Notices/Manager.php:116
msgid "The Plain permalink structure is not working for the Dokan plugin. Please change your permalink structure from Settings > Permalinks "
msgstr ""
-#: includes/Admin/Notices/Manager.php:120
+#: includes/Admin/Notices/Manager.php:121
msgid "Go to Settings"
msgstr ""
-#: includes/Admin/Notices/Manager.php:143
-msgid "New One-Step Product Form"
+#: includes/Admin/Notices/Manager.php:146
+msgid "Dokan came up with a new look!"
msgstr ""
-#: includes/Admin/Notices/Manager.php:144
-msgid "Try it now to enhance your vendor's product upload experience, the older two-step version will be retired in one month."
+#: includes/Admin/Notices/Manager.php:147
+msgid "A new rebranded look is introduced in the entire platform. Check the updated visuals in different places."
+msgstr ""
+
+#: includes/Admin/Notices/Manager.php:214
+msgid "Dokan Update Required"
+msgstr ""
+
+#: includes/Admin/Notices/Manager.php:215
+msgid "To ensure all the feature compatibility and accessibility, Dokan Pro minimum v3.14.0 is required."
+msgstr ""
+
+#: includes/Admin/Notices/Manager.php:219
+msgid "Update Now"
msgstr ""
#: includes/Admin/Notices/PluginReview.php:66
@@ -343,7 +361,7 @@ msgid "Get all the latest news and updates of Dokan from here."
msgstr ""
#: includes/Admin/Pointers.php:174
-#: includes/Admin/Settings.php:303
+#: includes/Admin/Settings.php:325
msgid "General Settings"
msgstr ""
@@ -352,7 +370,7 @@ msgid "Configure all general settings for your marketplace from this tab."
msgstr ""
#: includes/Admin/Pointers.php:191
-#: includes/Admin/Settings.php:308
+#: includes/Admin/Settings.php:330
msgid "Selling Options"
msgstr ""
@@ -361,7 +379,7 @@ msgid "You can configure different selling options for your vendors"
msgstr ""
#: includes/Admin/Pointers.php:208
-#: includes/Admin/Settings.php:317
+#: includes/Admin/Settings.php:339
msgid "Withdraw Options"
msgstr ""
@@ -433,892 +451,924 @@ msgstr ""
msgid "With the simplest configuration options available, only by enabling a single toggle button you will be able to do everything your competitors are doing and even more."
msgstr ""
-#: includes/Admin/Settings.php:94
+#: includes/Admin/Settings.php:116
msgid "You have no permission to get settings value"
msgstr ""
-#: includes/Admin/Settings.php:120
-#: includes/Admin/Settings.php:931
+#: includes/Admin/Settings.php:142
+#: includes/Admin/Settings.php:1009
msgid "You are not authorized to perform this action."
msgstr ""
-#: includes/Admin/Settings.php:128
+#: includes/Admin/Settings.php:150
msgid "`section` parameter is required."
msgstr ""
-#: includes/Admin/Settings.php:160
+#: includes/Admin/Settings.php:182
msgid "Setting has been saved successfully."
msgstr ""
-#: includes/Admin/Settings.php:299
+#: includes/Admin/Settings.php:321
#: includes/Vendor/SettingsApi/Settings/Pages/Payments/Payments.php:60
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:48
msgid "General"
msgstr ""
-#: includes/Admin/Settings.php:301
+#: includes/Admin/Settings.php:323
msgid "Site Settings and Store Options"
msgstr ""
-#: includes/Admin/Settings.php:304
+#: includes/Admin/Settings.php:326
msgid "You can configure your general site settings and vendor store options from this settings menu. Dokan offers countless custom options when setting up your store to provide you with the ultimate flexibility."
msgstr ""
-#: includes/Admin/Settings.php:310
+#: includes/Admin/Settings.php:332
msgid "Store Settings, Commissions"
msgstr ""
-#: includes/Admin/Settings.php:312
+#: includes/Admin/Settings.php:334
msgid "Selling Option Settings"
msgstr ""
-#: includes/Admin/Settings.php:313
+#: includes/Admin/Settings.php:335
msgid "You can configure commissions scales and vendor capabilities from this menu."
msgstr ""
-#: includes/Admin/Settings.php:319
+#: includes/Admin/Settings.php:341
msgid "Withdraw Settings, Threshold"
msgstr ""
-#: includes/Admin/Settings.php:321
+#: includes/Admin/Settings.php:343
msgid "Withdraw Settings"
msgstr ""
-#: includes/Admin/Settings.php:322
+#: includes/Admin/Settings.php:344
msgid "You can configure your store's withdrawal methods, charges, limits, order status and more."
msgstr ""
-#: includes/Admin/Settings.php:328
+#: includes/Admin/Settings.php:350
msgid "Admin commission config (on COD)"
msgstr ""
-#: includes/Admin/Settings.php:330
+#: includes/Admin/Settings.php:352
msgid "Reverse Withdrawal Settings"
msgstr ""
-#: includes/Admin/Settings.php:331
+#: includes/Admin/Settings.php:353
msgid "Configure commission from vendors on Cash on Delivery orders, method and threshold for reverse balance, restrictive actions on vendors and more."
msgstr ""
-#: includes/Admin/Settings.php:335
+#: includes/Admin/Settings.php:357
msgid "Page Settings"
msgstr ""
-#: includes/Admin/Settings.php:337
+#: includes/Admin/Settings.php:359
msgid "Store Page Settings Manage"
msgstr ""
-#: includes/Admin/Settings.php:339
+#: includes/Admin/Settings.php:361
msgid "Site and Store Page Settings"
msgstr ""
-#: includes/Admin/Settings.php:340
+#: includes/Admin/Settings.php:362
msgid "You can configure and setup your necessary page settings from this menu."
msgstr ""
-#: includes/Admin/Settings.php:344
+#: includes/Admin/Settings.php:366
msgid "Appearance"
msgstr ""
-#: includes/Admin/Settings.php:346
+#: includes/Admin/Settings.php:368
msgid "Custom Store Appearance"
msgstr ""
-#: includes/Admin/Settings.php:348
+#: includes/Admin/Settings.php:370
msgid "Appearance Settings"
msgstr ""
-#: includes/Admin/Settings.php:349
+#: includes/Admin/Settings.php:371
msgid "You can configure your store appearance settings, configure map API, Google reCaptcha and more. Dokan offers various store header templates to choose from."
msgstr ""
-#: includes/Admin/Settings.php:353
-#: includes/Admin/Settings.php:867
+#: includes/Admin/Settings.php:375
+#: includes/Admin/Settings.php:945
msgid "Privacy Policy"
msgstr ""
-#: includes/Admin/Settings.php:355
+#: includes/Admin/Settings.php:377
msgid "Update Store Privacy Policies"
msgstr ""
-#: includes/Admin/Settings.php:356
+#: includes/Admin/Settings.php:378
msgid "Privacy Settings"
msgstr ""
-#: includes/Admin/Settings.php:357
+#: includes/Admin/Settings.php:379
msgid "You can configure your site's privacy settings and policy."
msgstr ""
-#: includes/Admin/Settings.php:378
-#: includes/Admin/SetupWizard.php:557
+#: includes/Admin/Settings.php:400
+#: includes/Admin/SetupWizard.php:654
#: includes/Dashboard/Templates/Dashboard.php:104
-#: includes/Order/functions.php:426
+#: includes/Order/functions.php:430
#: templates/dashboard/orders-widget.php:33
msgid "Completed"
msgstr ""
-#: includes/Admin/Settings.php:379
-#: includes/Admin/SetupWizard.php:564
+#: includes/Admin/Settings.php:401
+#: includes/Admin/SetupWizard.php:661
#: includes/Dashboard/Templates/Dashboard.php:114
-#: includes/Order/functions.php:441
+#: includes/Order/functions.php:445
#: templates/dashboard/orders-widget.php:43
-#: templates/orders/listing.php:132
+#: templates/orders/listing.php:142
msgid "Processing"
msgstr ""
-#: includes/Admin/Settings.php:380
-#: includes/Order/functions.php:436
+#: includes/Admin/Settings.php:402
+#: includes/Order/functions.php:440
msgid "On-hold"
msgstr ""
-#: includes/Admin/Settings.php:389
+#: includes/Admin/Settings.php:411
msgid "Site Settings"
msgstr ""
-#: includes/Admin/Settings.php:390
+#: includes/Admin/Settings.php:412
msgid "Configure your site settings and control access to your site."
msgstr ""
-#: includes/Admin/Settings.php:394
+#: includes/Admin/Settings.php:416
msgid "Admin Area Access"
msgstr ""
-#: includes/Admin/Settings.php:395
+#: includes/Admin/Settings.php:417
msgid "Prevent vendors from accessing the wp-admin dashboard area. If HPOS feature is enabled, admin access will be blocked regardless of this setting."
msgstr ""
-#: includes/Admin/Settings.php:401
+#: includes/Admin/Settings.php:423
#: templates/admin-setup-wizard/step-store.php:7
msgid "Vendor Store URL"
msgstr ""
#. translators: %s: store url
-#: includes/Admin/Settings.php:403
+#: includes/Admin/Settings.php:425
msgid "Define the vendor store URL (%s[this-text] /[vendor-name])"
msgstr ""
-#: includes/Admin/Settings.php:409
+#: includes/Admin/Settings.php:431
msgid "Vendor Setup Wizard Logo"
msgstr ""
-#: includes/Admin/Settings.php:411
+#: includes/Admin/Settings.php:433
msgid "Recommended logo size ( 270px X 90px ). If no logo is uploaded, site title is shown by default."
msgstr ""
-#: includes/Admin/Settings.php:415
+#: includes/Admin/Settings.php:437
msgid "Vendor Setup Wizard Message"
msgstr ""
-#: includes/Admin/Settings.php:417
+#: includes/Admin/Settings.php:439
msgid "Thank you for choosing The Marketplace to power your online store! This quick setup wizard will help you configure the basic settings. Itâs completely optional and shouldnât take longer than two minutes. "
msgstr ""
-#: includes/Admin/Settings.php:421
+#: includes/Admin/Settings.php:443
msgid "Disable Welcome Wizard"
msgstr ""
-#: includes/Admin/Settings.php:422
+#: includes/Admin/Settings.php:444
msgid "Disable welcome wizard for newly registered vendors"
msgstr ""
-#: includes/Admin/Settings.php:425
+#: includes/Admin/Settings.php:447
msgid "If checked, vendors will not be prompted through a guided setup process but redirected straight to the vendor dashboard."
msgstr ""
-#: includes/Admin/Settings.php:435
+#: includes/Admin/Settings.php:457
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:31
msgid "Vendor Store Settings"
msgstr ""
-#: includes/Admin/Settings.php:436
+#: includes/Admin/Settings.php:458
msgid "Configure your vendor store settings and setup your store policy for vendor."
msgstr ""
-#: includes/Admin/Settings.php:441
+#: includes/Admin/Settings.php:463
msgid "Store Terms and Conditions"
msgstr ""
-#: includes/Admin/Settings.php:442
+#: includes/Admin/Settings.php:464
msgid "Enable terms and conditions for vendor stores"
msgstr ""
-#: includes/Admin/Settings.php:448
+#: includes/Admin/Settings.php:470
msgid "Store Products Per Page"
msgstr ""
-#: includes/Admin/Settings.php:449
+#: includes/Admin/Settings.php:471
msgid "Set how many products to display per page on the vendor store page."
msgstr ""
-#: includes/Admin/Settings.php:455
+#: includes/Admin/Settings.php:477
msgid "Enable Address Fields"
msgstr ""
-#: includes/Admin/Settings.php:456
+#: includes/Admin/Settings.php:478
msgid "Add Address Fields on the Vendor Registration form"
msgstr ""
-#: includes/Admin/Settings.php:468
+#: includes/Admin/Settings.php:490
msgid "Product Page Settings"
msgstr ""
-#: includes/Admin/Settings.php:469
+#: includes/Admin/Settings.php:491
msgid "Configure single product page for vendors."
msgstr ""
-#: includes/Admin/Settings.php:474
+#: includes/Admin/Settings.php:496
msgid "Enable More Products Tab"
msgstr ""
-#: includes/Admin/Settings.php:475
+#: includes/Admin/Settings.php:497
msgid "Enable \"More Products\" tab on the single product page."
msgstr ""
-#: includes/Admin/Settings.php:486
+#: includes/Admin/Settings.php:508
+#: includes/Admin/SetupWizard.php:200
+#: includes/functions.php:994
+#: includes/Order/Admin/Hooks.php:95
#: includes/ReverseWithdrawal/Helper.php:65
+#: templates/orders/commission-meta-box-html.php:66
+#: templates/products/dokan-products-edit-bulk-commission.php:17
msgid "Commission"
msgstr ""
-#: includes/Admin/Settings.php:488
+#: includes/Admin/Settings.php:510
msgid "Define commission types, admin commissions, shipping and tax recipients, and more."
msgstr ""
-#: includes/Admin/Settings.php:492
+#: includes/Admin/Settings.php:514
msgid "Commission Type "
msgstr ""
-#: includes/Admin/Settings.php:493
+#: includes/Admin/Settings.php:515
msgid "Select a commission type for vendor"
msgstr ""
-#: includes/Admin/Settings.php:497
+#: includes/Admin/Settings.php:519
msgid "Select a commission type"
msgstr ""
-#: includes/Admin/Settings.php:501
-#: templates/admin-setup-wizard/step-selling.php:31
+#: includes/Admin/Settings.php:523
+#: includes/Admin/Settings.php:563
+#: includes/Product/Hooks.php:484
#: assets/js/vue-admin.js:2
-#: assets/js/vue-bootstrap.js:2
msgid "Admin Commission"
msgstr ""
-#: includes/Admin/Settings.php:502
-msgid "Amount you get from each sale"
+#: includes/Admin/Settings.php:528
+msgid "Percent Fee"
msgstr ""
-#: includes/Admin/Settings.php:509
-#: templates/admin-setup-wizard/step-store.php:14
-msgid "Shipping Fee Recipient"
+#: includes/Admin/Settings.php:531
+msgid "Amount you will get from sales in percentage (10%)"
msgstr ""
-#: includes/Admin/Settings.php:510
+#: includes/Admin/Settings.php:538
+msgid "Fixed Fee"
+msgstr ""
+
+#: includes/Admin/Settings.php:541
+msgid "Amount you will get from sales in flat rate(+5)"
+msgstr ""
+
+#: includes/Admin/Settings.php:550
+msgid "Amount you will get from sales in both percentage and fixed fee"
+msgstr ""
+
+#: includes/Admin/Settings.php:564
+msgid "Amount you will get from each sale"
+msgstr ""
+
+#: includes/Admin/Settings.php:579
+msgid "Fee Recipients"
+msgstr ""
+
+#: includes/Admin/Settings.php:581
+msgid "Define the fees that admin or vendor will recive"
+msgstr ""
+
+#: includes/Admin/Settings.php:586
+msgid "Shipping Fee"
+msgstr ""
+
+#: includes/Admin/Settings.php:587
msgid "Who will be receiving the shipping fees? Note that, tax fees for corresponding shipping method will not be included with shipping fees."
msgstr ""
-#: includes/Admin/Settings.php:514
-#: includes/Admin/Settings.php:525
-#: includes/Admin/Settings.php:536
-#: includes/Admin/SetupWizard.php:367
+#: includes/Admin/Settings.php:591
+#: includes/Admin/Settings.php:602
+#: includes/Admin/Settings.php:613
+#: includes/Admin/SetupWizard.php:408
msgid "Admin"
msgstr ""
-#: includes/Admin/Settings.php:520
-#: templates/admin-setup-wizard/step-store.php:27
-msgid "Product Tax Fee Recipient"
+#: includes/Admin/Settings.php:597
+msgid "Product Tax Fee"
msgstr ""
-#: includes/Admin/Settings.php:521
+#: includes/Admin/Settings.php:598
msgid "Who will be receiving the tax fees for products? Note that, shipping tax fees will not be included with product tax."
msgstr ""
-#: includes/Admin/Settings.php:531
-#: templates/admin-setup-wizard/step-store.php:41
-msgid "Shipping Tax Fee Recipient"
+#: includes/Admin/Settings.php:608
+msgid "Shipping Tax Fee"
msgstr ""
-#: includes/Admin/Settings.php:532
+#: includes/Admin/Settings.php:609
msgid "Who will be receiving the tax fees for shipping?"
msgstr ""
-#: includes/Admin/Settings.php:547
+#: includes/Admin/Settings.php:624
#: assets/js/vue-admin.js:2
msgid "Vendor Capabilities"
msgstr ""
-#: includes/Admin/Settings.php:549
+#: includes/Admin/Settings.php:626
msgid "Configure your multivendor site settings and vendor selling capabilities."
msgstr ""
-#: includes/Admin/Settings.php:554
+#: includes/Admin/Settings.php:631
#: assets/js/vue-admin.js:2
#: assets/js/vue-bootstrap.js:2
msgid "Enable Selling"
msgstr ""
-#: includes/Admin/Settings.php:555
+#: includes/Admin/Settings.php:632
msgid "Immediately enable selling for newly registered vendors"
msgstr ""
-#: includes/Admin/Settings.php:558
+#: includes/Admin/Settings.php:635
msgid "If checked, vendors will have permission to sell immediately after registration. If unchecked, newly registered vendors cannot add products until selling capability is activated manually from admin dashboard."
msgstr ""
-#: includes/Admin/Settings.php:562
+#: includes/Admin/Settings.php:639
msgid "One Page Product Creation"
msgstr ""
-#: includes/Admin/Settings.php:563
+#: includes/Admin/Settings.php:640
msgid "Add new product in single page view"
msgstr ""
-#: includes/Admin/Settings.php:566
+#: includes/Admin/Settings.php:643
msgid "If disabled, instead of a single add product page it will open a pop up window or vendor will redirect to product page when adding new product."
msgstr ""
-#: includes/Admin/Settings.php:570
+#: includes/Admin/Settings.php:647
msgid "Disable Product Popup"
msgstr ""
-#: includes/Admin/Settings.php:571
+#: includes/Admin/Settings.php:648
msgid "Disable add new product in popup view"
msgstr ""
-#: includes/Admin/Settings.php:577
+#: includes/Admin/Settings.php:654
msgid "If disabled, instead of a pop up window vendor will redirect to product page when adding new product."
msgstr ""
-#: includes/Admin/Settings.php:581
-#: templates/admin-setup-wizard/step-selling.php:39
+#: includes/Admin/Settings.php:658
+#: templates/admin-setup-wizard/step-selling.php:18
#: assets/js/vue-admin.js:2
msgid "Order Status Change"
msgstr ""
-#: includes/Admin/Settings.php:582
+#: includes/Admin/Settings.php:659
msgid "Allow vendor to update order status"
msgstr ""
-#: includes/Admin/Settings.php:585
+#: includes/Admin/Settings.php:662
msgid "Checking this will enable sellers to change the order status. If unchecked, only admin can change the order status."
msgstr ""
-#: includes/Admin/Settings.php:589
+#: includes/Admin/Settings.php:666
msgid "Select any category"
msgstr ""
-#: includes/Admin/Settings.php:590
+#: includes/Admin/Settings.php:667
msgid "Allow vendors to select any category while creating/editing products."
msgstr ""
-#: includes/Admin/Settings.php:613
-#: includes/Admin/SetupWizard.php:500
+#: includes/Admin/Settings.php:691
+#: includes/Admin/SetupWizard.php:597
msgid "Withdraw Methods"
msgstr ""
-#: includes/Admin/Settings.php:614
+#: includes/Admin/Settings.php:692
msgid "Select suitable withdraw methods for vendors"
msgstr ""
-#: includes/Admin/Settings.php:618
+#: includes/Admin/Settings.php:696
msgid "Check to add available payment methods for vendors to withdraw money."
msgstr ""
-#: includes/Admin/Settings.php:622
+#: includes/Admin/Settings.php:700
msgid "Withdraw Charges"
msgstr ""
-#: includes/Admin/Settings.php:623
+#: includes/Admin/Settings.php:701
msgid "Select suitable withdraw charges for vendors"
msgstr ""
-#: includes/Admin/Settings.php:641
-#: includes/Admin/SetupWizard.php:543
+#: includes/Admin/Settings.php:719
+#: includes/Admin/SetupWizard.php:640
msgid "Minimum Withdraw Limit"
msgstr ""
-#: includes/Admin/Settings.php:642
+#: includes/Admin/Settings.php:720
msgid "Minimum balance required to make a withdraw request. Leave blank to set no minimum limits."
msgstr ""
-#: includes/Admin/Settings.php:651
-#: includes/Admin/SetupWizard.php:550
+#: includes/Admin/Settings.php:729
+#: includes/Admin/SetupWizard.php:647
msgid "Order Status for Withdraw"
msgstr ""
-#: includes/Admin/Settings.php:652
-#: includes/Admin/SetupWizard.php:569
+#: includes/Admin/Settings.php:730
+#: includes/Admin/SetupWizard.php:666
msgid "Order status for which vendor can make a withdraw request."
msgstr ""
-#: includes/Admin/Settings.php:658
+#: includes/Admin/Settings.php:736
msgid "Select the order status that will allow vendors to make withdraw request. We prefer you select \"completed\", \"processing\"."
msgstr ""
-#: includes/Admin/Settings.php:662
+#: includes/Admin/Settings.php:740
msgid "Exclude COD Payments"
msgstr ""
-#: includes/Admin/Settings.php:663
+#: includes/Admin/Settings.php:741
msgid "If an order is paid with Cash on Delivery (COD), then exclude that payment from vendor balance."
msgstr ""
-#: includes/Admin/Settings.php:672
+#: includes/Admin/Settings.php:750
msgid "Select a page to show vendor dashboard"
msgstr ""
-#: includes/Admin/Settings.php:675
-#: includes/Admin/Settings.php:682
-#: includes/Admin/Settings.php:690
-#: includes/Admin/Settings.php:700
-#: includes/Admin/Settings.php:862
+#: includes/Admin/Settings.php:753
+#: includes/Admin/Settings.php:760
+#: includes/Admin/Settings.php:768
+#: includes/Admin/Settings.php:778
+#: includes/Admin/Settings.php:940
msgid "Select page"
msgstr ""
-#: includes/Admin/Settings.php:679
-#: includes/Install/Installer.php:246
+#: includes/Admin/Settings.php:757
+#: includes/Install/Installer.php:245
#: templates/global/header-menu.php:52
msgid "My Orders"
msgstr ""
-#: includes/Admin/Settings.php:680
+#: includes/Admin/Settings.php:758
msgid "Select a page to show my orders"
msgstr ""
-#: includes/Admin/Settings.php:687
+#: includes/Admin/Settings.php:765
msgid "Store Listing"
msgstr ""
-#: includes/Admin/Settings.php:688
+#: includes/Admin/Settings.php:766
msgid "Select a page to show all stores"
msgstr ""
-#: includes/Admin/Settings.php:696
+#: includes/Admin/Settings.php:774
msgid "Select where you want to add Dokan pages."
msgstr ""
-#: includes/Admin/Settings.php:697
+#: includes/Admin/Settings.php:775
msgid "Terms and Conditions Page"
msgstr ""
-#: includes/Admin/Settings.php:699
+#: includes/Admin/Settings.php:777
msgid "Select a page to display the Terms and Conditions of your store for Vendors."
msgstr ""
-#: includes/Admin/Settings.php:707
+#: includes/Admin/Settings.php:785
msgid "Store Appearance"
msgstr ""
-#: includes/Admin/Settings.php:708
+#: includes/Admin/Settings.php:786
msgid "Configure your site appearances."
msgstr ""
-#: includes/Admin/Settings.php:712
+#: includes/Admin/Settings.php:790
msgid "Show map on Store Page"
msgstr ""
-#: includes/Admin/Settings.php:713
+#: includes/Admin/Settings.php:791
msgid "Enable map of the store location in the store sidebar"
msgstr ""
-#: includes/Admin/Settings.php:719
+#: includes/Admin/Settings.php:797
#: templates/admin-setup-wizard/step-store.php:55
msgid "Map API Source"
msgstr ""
-#: includes/Admin/Settings.php:720
+#: includes/Admin/Settings.php:798
msgid "Which map API source you want to use in your site?"
msgstr ""
-#: includes/Admin/Settings.php:725
-#: includes/Admin/SetupWizard.php:381
+#: includes/Admin/Settings.php:803
+#: includes/Admin/SetupWizard.php:422
#: assets/js/vue-admin.js:2
msgid "Google Maps"
msgstr ""
-#: includes/Admin/Settings.php:726
-#: includes/Admin/SetupWizard.php:382
+#: includes/Admin/Settings.php:804
+#: includes/Admin/SetupWizard.php:423
msgid "Mapbox"
msgstr ""
-#: includes/Admin/Settings.php:731
+#: includes/Admin/Settings.php:809
#: templates/admin-setup-wizard/step-store.php:68
msgid "Google Map API Key"
msgstr ""
-#: includes/Admin/Settings.php:732
+#: includes/Admin/Settings.php:810
msgid "API Key is needed to display map on store page"
msgstr ""
-#: includes/Admin/Settings.php:735
+#: includes/Admin/Settings.php:813
msgid "Insert Google API Key (with hyperlink) to display store map."
msgstr ""
-#: includes/Admin/Settings.php:744
+#: includes/Admin/Settings.php:822
#: templates/admin-setup-wizard/step-store.php:84
msgid "Mapbox Access Token"
msgstr ""
-#: includes/Admin/Settings.php:745
+#: includes/Admin/Settings.php:823
msgid "Access Token is needed to display map on store page"
msgstr ""
-#: includes/Admin/Settings.php:748
+#: includes/Admin/Settings.php:826
msgid "Insert Mapbox Access Token (with hyperlink) to display store map."
msgstr ""
#. translators: 1) Opening anchor tag, 2) Closing anchor tag, 3) Opening anchor tag, 4) Closing anchor tag
-#: includes/Admin/Settings.php:760
+#: includes/Admin/Settings.php:838
msgid "%1$sreCAPTCHA%2$s credentials required to enable invisible captcha for contact forms. %3$sGet Help%4$s"
msgstr ""
-#: includes/Admin/Settings.php:766
+#: includes/Admin/Settings.php:844
msgid "Google reCAPTCHA Validation"
msgstr ""
-#: includes/Admin/Settings.php:768
+#: includes/Admin/Settings.php:846
msgid "You can successfully connect to your Google reCaptcha account from here."
msgstr ""
-#: includes/Admin/Settings.php:776
+#: includes/Admin/Settings.php:854
msgid "Site Key"
msgstr ""
-#: includes/Admin/Settings.php:777
+#: includes/Admin/Settings.php:855
msgid "Insert Google reCAPTCHA v3 site key."
msgstr ""
-#: includes/Admin/Settings.php:783
+#: includes/Admin/Settings.php:861
msgid "Secret Key"
msgstr ""
-#: includes/Admin/Settings.php:785
+#: includes/Admin/Settings.php:863
msgid "Insert Google reCAPTCHA v3 secret key."
msgstr ""
-#: includes/Admin/Settings.php:793
+#: includes/Admin/Settings.php:871
msgid "Show Contact Form on Store Page"
msgstr ""
-#: includes/Admin/Settings.php:794
+#: includes/Admin/Settings.php:872
msgid "Display a vendor contact form in the store sidebar"
msgstr ""
-#: includes/Admin/Settings.php:801
+#: includes/Admin/Settings.php:879
msgid "Select a store header for your store."
msgstr ""
-#: includes/Admin/Settings.php:802
+#: includes/Admin/Settings.php:880
msgid "Store Header Template"
msgstr ""
-#: includes/Admin/Settings.php:813
+#: includes/Admin/Settings.php:891
msgid "Store Opening Closing Time Widget"
msgstr ""
-#: includes/Admin/Settings.php:814
+#: includes/Admin/Settings.php:892
msgid "Enable store opening & closing time widget in the store sidebar"
msgstr ""
-#: includes/Admin/Settings.php:820
+#: includes/Admin/Settings.php:898
msgid "Enable Store Sidebar From Theme"
msgstr ""
-#: includes/Admin/Settings.php:821
+#: includes/Admin/Settings.php:899
msgid "Enable showing store sidebar from your theme."
msgstr ""
-#: includes/Admin/Settings.php:827
+#: includes/Admin/Settings.php:905
msgid "Hide Vendor Info"
msgstr ""
-#: includes/Admin/Settings.php:828
+#: includes/Admin/Settings.php:906
msgid "Hide vendor contact info from single store page."
msgstr ""
-#: includes/Admin/Settings.php:836
+#: includes/Admin/Settings.php:914
msgid "Email Address"
msgstr ""
-#: includes/Admin/Settings.php:837
-#: includes/Admin/UserProfile.php:211
-#: templates/account/update-customer-to-vendor.php:45
-#: templates/account/vendor-registration.php:36
-#: templates/global/seller-registration-form.php:51
+#: includes/Admin/Settings.php:915
+#: includes/Admin/UserProfile.php:208
+#: templates/account/update-customer-to-vendor.php:48
+#: templates/account/vendor-registration.php:45
+#: templates/global/seller-registration-form.php:54
#: assets/js/vue-admin.js:2
#: assets/js/vue-bootstrap.js:2
msgid "Phone Number"
msgstr ""
-#: includes/Admin/Settings.php:838
+#: includes/Admin/Settings.php:916
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:249
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:250
msgid "Store Address"
msgstr ""
-#: includes/Admin/Settings.php:843
+#: includes/Admin/Settings.php:921
msgid "Disable Dokan FontAwesome"
msgstr ""
-#: includes/Admin/Settings.php:844
+#: includes/Admin/Settings.php:922
msgid "If disabled then dokan fontawesome library won't be loaded in frontend"
msgstr ""
-#: includes/Admin/Settings.php:852
+#: includes/Admin/Settings.php:930
msgid "Enable Privacy Policy"
msgstr ""
-#: includes/Admin/Settings.php:854
+#: includes/Admin/Settings.php:932
msgid "Enable privacy policy for vendor store contact form"
msgstr ""
-#: includes/Admin/Settings.php:859
+#: includes/Admin/Settings.php:937
msgid "Privacy Page"
msgstr ""
-#: includes/Admin/Settings.php:861
+#: includes/Admin/Settings.php:939
msgid "Select a page to show your privacy policy"
msgstr ""
-#: includes/Admin/Settings.php:869
-#: includes/functions.php:3351
+#: includes/Admin/Settings.php:947
+#: includes/functions.php:3231
msgid "Your personal data will be used to support your experience throughout this website, to manage access to your account, and for other purposes described in our [dokan_privacy_policy]"
msgstr ""
-#: includes/Admin/Settings.php:870
+#: includes/Admin/Settings.php:948
msgid "Customize the Privacy Policy text that will be displayed on your store."
msgstr ""
-#: includes/Admin/Settings.php:942
+#: includes/Admin/Settings.php:1020
msgid "Both section and field params are required."
msgstr ""
-#: includes/Admin/Settings.php:951
+#: includes/Admin/Settings.php:1029
msgid "No filter found to refresh the setting options"
msgstr ""
-#: includes/Admin/Settings.php:983
+#: includes/Admin/Settings.php:1061
msgid "Minimum Withdraw Limit can't be negative value."
msgstr ""
-#: includes/Admin/Settings.php:994
+#: includes/Admin/Settings.php:1072
#: includes/ReverseWithdrawal/Admin/Settings.php:223
msgid "Validation error"
msgstr ""
-#: includes/Admin/Settings.php:1012
+#: includes/Admin/Settings.php:1090
msgid "Data Clear"
msgstr ""
-#: includes/Admin/Settings.php:1013
+#: includes/Admin/Settings.php:1091
msgid "Delete all data and tables related to Dokan and Dokan Pro plugin while deleting the Dokan plugin."
msgstr ""
-#: includes/Admin/Settings.php:1016
+#: includes/Admin/Settings.php:1094
msgid "Check this to remove Dokan related data and table from the database upon deleting the plugin. When you delete the Dokan lite version, it will also delete all the data related to Dokan Pro as well. This won't happen when the plugins are deactivated.."
msgstr ""
-#: includes/Admin/SetupWizard.php:76
+#: includes/Admin/SetupWizard.php:78
msgctxt "enhanced select"
msgid "No matches found"
msgstr ""
-#: includes/Admin/SetupWizard.php:77
+#: includes/Admin/SetupWizard.php:79
msgctxt "enhanced select"
msgid "Loading failed"
msgstr ""
-#: includes/Admin/SetupWizard.php:78
+#: includes/Admin/SetupWizard.php:80
msgctxt "enhanced select"
msgid "Please enter 1 or more characters"
msgstr ""
-#: includes/Admin/SetupWizard.php:79
+#: includes/Admin/SetupWizard.php:81
msgctxt "enhanced select"
msgid "Please enter %qty% or more characters"
msgstr ""
-#: includes/Admin/SetupWizard.php:80
+#: includes/Admin/SetupWizard.php:82
msgctxt "enhanced select"
msgid "Please delete 1 character"
msgstr ""
-#: includes/Admin/SetupWizard.php:81
+#: includes/Admin/SetupWizard.php:83
msgctxt "enhanced select"
msgid "Please delete %qty% characters"
msgstr ""
-#: includes/Admin/SetupWizard.php:82
+#: includes/Admin/SetupWizard.php:84
msgctxt "enhanced select"
msgid "You can only select 1 item"
msgstr ""
-#: includes/Admin/SetupWizard.php:83
+#: includes/Admin/SetupWizard.php:85
msgctxt "enhanced select"
msgid "You can only select %qty% items"
msgstr ""
-#: includes/Admin/SetupWizard.php:84
+#: includes/Admin/SetupWizard.php:86
msgctxt "enhanced select"
msgid "Loading more results…"
msgstr ""
-#: includes/Admin/SetupWizard.php:85
+#: includes/Admin/SetupWizard.php:87
msgctxt "enhanced select"
msgid "Searching…"
msgstr ""
-#: includes/Admin/SetupWizard.php:150
+#: includes/Admin/SetupWizard.php:186
#: includes/Vendor/SetupWizard.php:78
msgid "Introduction"
msgstr ""
-#: includes/Admin/SetupWizard.php:154
+#: includes/Admin/SetupWizard.php:190
#: includes/functions-dashboard-navigation.php:67
#: includes/Vendor/SetupWizard.php:83
#: assets/js/vue-admin.js:2
msgid "Store"
msgstr ""
-#: includes/Admin/SetupWizard.php:159
-#: includes/Admin/UserProfile.php:301
+#: includes/Admin/SetupWizard.php:195
+#: includes/Admin/UserProfile.php:298
msgid "Selling"
msgstr ""
-#: includes/Admin/SetupWizard.php:169
+#: includes/Admin/SetupWizard.php:210
msgid "Recommended"
msgstr ""
-#: includes/Admin/SetupWizard.php:174
+#: includes/Admin/SetupWizard.php:215
#: includes/Vendor/SetupWizard.php:93
msgid "Ready!"
msgstr ""
-#: includes/Admin/SetupWizard.php:271
+#: includes/Admin/SetupWizard.php:312
msgid "Dokan › Setup Wizard"
msgstr ""
-#: includes/Admin/SetupWizard.php:291
+#: includes/Admin/SetupWizard.php:332
#: includes/Admin/SetupWizardNoWC.php:95
msgid "Return to the WordPress Dashboard"
msgstr ""
-#: includes/Admin/SetupWizard.php:340
+#: includes/Admin/SetupWizard.php:381
#: templates/admin-setup-wizard/step-no-wc-introduction.php:2
msgid "Welcome to the world of Dokan!"
msgstr ""
-#: includes/Admin/SetupWizard.php:341
+#: includes/Admin/SetupWizard.php:382
msgid "Thank you for choosing Dokan to power your online marketplace! This quick setup wizard will help you configure the basic settings. Itâs completely optional and shouldnât take longer than three minutes. "
msgstr ""
-#: includes/Admin/SetupWizard.php:342
+#: includes/Admin/SetupWizard.php:383
msgid "No time right now? If you donât want to go through the wizard, you can skip and return to the WordPress dashboard. Come back anytime if you change your mind!"
msgstr ""
-#: includes/Admin/SetupWizard.php:344
+#: includes/Admin/SetupWizard.php:385
#: includes/Vendor/SetupWizard.php:191
#: templates/admin-setup-wizard/step-no-wc-introduction.php:74
msgid "Let's Go!"
msgstr ""
-#: includes/Admin/SetupWizard.php:345
+#: includes/Admin/SetupWizard.php:386
#: includes/Vendor/SetupWizard.php:192
msgid "Not right now"
msgstr ""
-#: includes/Admin/SetupWizard.php:496
+#: includes/Admin/SetupWizard.php:593
msgid "Withdraw Setup"
msgstr ""
#. translators: %s: withdraw method name
-#: includes/Admin/SetupWizard.php:518
+#: includes/Admin/SetupWizard.php:615
msgid "Enable %s for your vendor as a withdraw method"
msgstr ""
-#: includes/Admin/SetupWizard.php:546
+#: includes/Admin/SetupWizard.php:643
msgid "Minimum balance required to make a withdraw request ( Leave it blank to set no limits )"
msgstr ""
-#: includes/Admin/SetupWizard.php:574
-#: includes/Admin/SetupWizard.php:657
+#: includes/Admin/SetupWizard.php:671
+#: includes/Admin/SetupWizard.php:754
#: includes/Admin/SetupWizardWCAdmin.php:232
#: includes/Vendor/SetupWizard.php:368
#: includes/Vendor/SetupWizard.php:575
-#: templates/admin-setup-wizard/step-selling.php:53
+#: templates/admin-setup-wizard/step-commission.php:12
+#: templates/admin-setup-wizard/step-selling.php:32
#: templates/admin-setup-wizard/step-store.php:153
msgid "Continue"
msgstr ""
-#: includes/Admin/SetupWizard.php:575
+#: includes/Admin/SetupWizard.php:672
#: includes/Vendor/SetupWizard.php:370
#: includes/Vendor/SetupWizard.php:577
-#: templates/admin-setup-wizard/step-selling.php:54
+#: templates/admin-setup-wizard/step-commission.php:13
+#: templates/admin-setup-wizard/step-selling.php:33
#: templates/admin-setup-wizard/step-store.php:154
msgid "Skip this step"
msgstr ""
-#: includes/Admin/SetupWizard.php:591
+#: includes/Admin/SetupWizard.php:688
msgid "Recommended for All Dokan Marketplaces"
msgstr ""
-#: includes/Admin/SetupWizard.php:593
+#: includes/Admin/SetupWizard.php:690
msgid "Enhance your store with these recommended features."
msgstr ""
-#: includes/Admin/SetupWizard.php:603
-#: includes/Admin/SetupWizard.php:609
-#: includes/Admin/SetupWizard.php:682
+#: includes/Admin/SetupWizard.php:700
+#: includes/Admin/SetupWizard.php:706
+#: includes/Admin/SetupWizard.php:779
msgid "WooCommerce Conversion Tracking"
msgstr ""
-#: includes/Admin/SetupWizard.php:604
+#: includes/Admin/SetupWizard.php:701
msgid "Track conversions on your WooCommerce store like a pro!"
msgstr ""
-#: includes/Admin/SetupWizard.php:606
+#: includes/Admin/SetupWizard.php:703
msgid "WooCommerce Conversion Tracking logo"
msgstr ""
-#: includes/Admin/SetupWizard.php:621
-#: includes/Admin/SetupWizard.php:627
-#: includes/Admin/SetupWizard.php:693
+#: includes/Admin/SetupWizard.php:718
+#: includes/Admin/SetupWizard.php:724
+#: includes/Admin/SetupWizard.php:790
msgid "weMail"
msgstr ""
-#: includes/Admin/SetupWizard.php:622
+#: includes/Admin/SetupWizard.php:719
msgid "Simplified Email Marketing Solution for WordPress!"
msgstr ""
-#: includes/Admin/SetupWizard.php:624
+#: includes/Admin/SetupWizard.php:721
msgid "weMail logo"
msgstr ""
-#: includes/Admin/SetupWizard.php:639
-#: includes/Admin/SetupWizard.php:645
-#: includes/Admin/SetupWizard.php:704
+#: includes/Admin/SetupWizard.php:736
+#: includes/Admin/SetupWizard.php:742
+#: includes/Admin/SetupWizard.php:801
msgid "Texty"
msgstr ""
-#: includes/Admin/SetupWizard.php:640
+#: includes/Admin/SetupWizard.php:737
msgid "SMS Notification for WordPress, WooCommerce, Dokan and more"
msgstr ""
-#: includes/Admin/SetupWizard.php:642
+#: includes/Admin/SetupWizard.php:739
msgid "Texty logo"
msgstr ""
-#: includes/Admin/SetupWizard.php:761
+#: includes/Admin/SetupWizard.php:864
msgid "Your Marketplace is Ready!"
msgstr ""
-#: includes/Admin/SetupWizard.php:766
+#: includes/Admin/SetupWizard.php:869
msgid "Visit Dokan Dashboard"
msgstr ""
-#: includes/Admin/SetupWizard.php:767
+#: includes/Admin/SetupWizard.php:870
msgid "More Settings"
msgstr ""
-#: includes/Admin/SetupWizard.php:893
+#: includes/Admin/SetupWizard.php:996
msgid "The following plugins will be installed and activated for you:"
msgstr ""
@@ -1402,20 +1452,20 @@ msgstr ""
#: includes/Admin/UserProfile.php:38
#: includes/Ajax.php:142
-#: includes/Assets.php:587
+#: includes/Assets.php:604
#: assets/js/vue-admin.js:2
#: assets/js/vue-bootstrap.js:2
msgid "Available"
msgstr ""
#: includes/Admin/UserProfile.php:39
-#: includes/Assets.php:588
+#: includes/Assets.php:605
#: assets/js/vue-admin.js:2
#: assets/js/vue-bootstrap.js:2
msgid "Not Available"
msgstr ""
-#: includes/Admin/UserProfile.php:87
+#: includes/Admin/UserProfile.php:84
#: includes/Privacy.php:226
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:218
#: includes/Vendor/SetupWizard.php:294
@@ -1425,98 +1475,98 @@ msgstr ""
msgid "Country"
msgstr ""
-#: includes/Admin/UserProfile.php:91
+#: includes/Admin/UserProfile.php:88
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:222
msgid "Select a country…"
msgstr ""
-#: includes/Admin/UserProfile.php:94
+#: includes/Admin/UserProfile.php:91
msgid "State/County"
msgstr ""
-#: includes/Admin/UserProfile.php:95
+#: includes/Admin/UserProfile.php:92
msgid "State/County or state code"
msgstr ""
-#: includes/Admin/UserProfile.php:100
+#: includes/Admin/UserProfile.php:97
msgid "Dokan Options"
msgstr ""
-#: includes/Admin/UserProfile.php:105
+#: includes/Admin/UserProfile.php:102
msgid "Banner"
msgstr ""
-#: includes/Admin/UserProfile.php:117
+#: includes/Admin/UserProfile.php:114
#: templates/settings/store-form.php:72
msgid "Upload banner"
msgstr ""
#. translators: %1$s: banner width, %2$s: banner height in integers
#. translators: 1) store banner width 2) store banner height
-#: includes/Admin/UserProfile.php:122
+#: includes/Admin/UserProfile.php:119
#: templates/settings/store-form.php:86
msgid "Upload a banner for your store. Banner size is (%1$sx%2$s) pixels."
msgstr ""
-#: includes/Admin/UserProfile.php:134
+#: includes/Admin/UserProfile.php:131
#: includes/REST/ReverseWithdrawalController.php:679
msgid "Store name"
msgstr ""
-#: includes/Admin/UserProfile.php:141
+#: includes/Admin/UserProfile.php:138
#: assets/js/vue-admin.js:2
#: assets/js/vue-bootstrap.js:2
msgid "Store URL"
msgstr ""
-#: includes/Admin/UserProfile.php:149
+#: includes/Admin/UserProfile.php:146
#: includes/Privacy.php:222
msgid "Address 1"
msgstr ""
-#: includes/Admin/UserProfile.php:156
+#: includes/Admin/UserProfile.php:153
#: includes/Privacy.php:223
msgid "Address 2"
msgstr ""
-#: includes/Admin/UserProfile.php:163
+#: includes/Admin/UserProfile.php:160
msgid "Town/City"
msgstr ""
-#: includes/Admin/UserProfile.php:170
+#: includes/Admin/UserProfile.php:167
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:210
msgid "Zip Code"
msgstr ""
-#: includes/Admin/UserProfile.php:236
+#: includes/Admin/UserProfile.php:233
msgid "Payment Options : "
msgstr ""
-#: includes/Admin/UserProfile.php:241
+#: includes/Admin/UserProfile.php:238
msgid "Paypal Email "
msgstr ""
-#: includes/Admin/UserProfile.php:249
+#: includes/Admin/UserProfile.php:246
msgid "Skrill Email "
msgstr ""
-#: includes/Admin/UserProfile.php:258
+#: includes/Admin/UserProfile.php:255
msgid "Bank name "
msgstr ""
-#: includes/Admin/UserProfile.php:264
+#: includes/Admin/UserProfile.php:261
msgid "Account Name "
msgstr ""
-#: includes/Admin/UserProfile.php:270
+#: includes/Admin/UserProfile.php:267
msgid "Account Number "
msgstr ""
-#: includes/Admin/UserProfile.php:276
+#: includes/Admin/UserProfile.php:273
msgid "Bank Address "
msgstr ""
-#: includes/Admin/UserProfile.php:282
+#: includes/Admin/UserProfile.php:279
#: includes/Privacy.php:278
#: includes/Vendor/SettingsApi/Settings/Pages/Payments/Gateways/Bank.php:83
#: includes/Withdraw/functions.php:297
@@ -1526,59 +1576,43 @@ msgstr ""
msgid "Routing Number"
msgstr ""
-#: includes/Admin/UserProfile.php:288
+#: includes/Admin/UserProfile.php:285
msgid "Bank IBAN "
msgstr ""
-#: includes/Admin/UserProfile.php:294
+#: includes/Admin/UserProfile.php:291
msgid "Bank Swift "
msgstr ""
-#: includes/Admin/UserProfile.php:306
+#: includes/Admin/UserProfile.php:303
msgid "Enable Adding Products"
msgstr ""
-#: includes/Admin/UserProfile.php:309
+#: includes/Admin/UserProfile.php:306
msgid "Enable or disable product adding capability"
msgstr ""
-#: includes/Admin/UserProfile.php:314
+#: includes/Admin/UserProfile.php:311
msgid "Publishing"
msgstr ""
-#: includes/Admin/UserProfile.php:319
+#: includes/Admin/UserProfile.php:316
msgid "Publish product directly"
msgstr ""
-#: includes/Admin/UserProfile.php:322
+#: includes/Admin/UserProfile.php:319
msgid "Bypass pending, publish products directly"
msgstr ""
-#: includes/Admin/UserProfile.php:327
-msgid "Admin Commission Type "
-msgstr ""
-
-#: includes/Admin/UserProfile.php:334
-msgid "Set the commmission type admin gets from this seller"
-msgstr ""
-
-#: includes/Admin/UserProfile.php:338
-msgid "Admin Commission "
-msgstr ""
-
-#: includes/Admin/UserProfile.php:342
-msgid "It will override the default commission admin gets from each sales"
-msgstr ""
-
-#: includes/Admin/UserProfile.php:347
+#: includes/Admin/UserProfile.php:324
msgid "Featured vendor"
msgstr ""
-#: includes/Admin/UserProfile.php:352
+#: includes/Admin/UserProfile.php:329
msgid "Mark as featured vendor"
msgstr ""
-#: includes/Admin/UserProfile.php:355
+#: includes/Admin/UserProfile.php:332
msgid "This vendor will be marked as a featured vendor."
msgstr ""
@@ -1603,8 +1637,9 @@ msgstr ""
#: includes/Product/functions.php:215
#: templates/my-orders.php:27
#: templates/orders/listing.php:33
-#: templates/orders/listing.php:83
-#: templates/products/products-listing-row.php:67
+#: templates/orders/listing.php:93
+#: templates/orders/sub-order-related-order-meta-box-html.php:39
+#: templates/products/products-listing-row.php:140
#: templates/products/products-listing.php:121
#: templates/sub-orders.php:47
#: templates/withdraw/pending-request-listing-dashboard.php:25
@@ -1627,9 +1662,10 @@ msgstr ""
#: includes/Admin/WithdrawLogExporter.php:116
#: templates/my-orders.php:26
#: templates/orders/listing.php:35
-#: templates/orders/listing.php:93
-#: templates/products/products-listing-row.php:125
-#: templates/products/products-listing.php:130
+#: templates/orders/listing.php:103
+#: templates/orders/sub-order-related-order-meta-box-html.php:38
+#: templates/products/products-listing-row.php:290
+#: templates/products/products-listing.php:131
#: templates/reverse-withdrawal/transaction-listing.php:19
#: templates/sub-orders.php:46
#: templates/withdraw/approved-request-listing.php:20
@@ -1713,8 +1749,8 @@ msgid "Note"
msgstr ""
#: includes/Ajax.php:71
-#: includes/Ajax.php:982
-#: includes/Ajax.php:1010
+#: includes/Ajax.php:983
+#: includes/Ajax.php:1011
#: includes/Dashboard/Templates/Withdraw.php:121
#: includes/Withdraw/Hooks.php:147
#: includes/Withdraw/Hooks.php:222
@@ -1777,7 +1813,7 @@ msgid "reCAPTCHA verification failed!"
msgstr ""
#: includes/Ajax.php:359
-#: includes/REST/StoreController.php:831
+#: includes/REST/StoreController.php:838
msgid "Email sent successfully!"
msgstr ""
@@ -1805,7 +1841,7 @@ msgid "Delete"
msgstr ""
#: includes/Ajax.php:529
-#: includes/Product/Hooks.php:53
+#: includes/Product/Hooks.php:59
msgid "Error: Nonce verification failed"
msgstr ""
@@ -1813,121 +1849,122 @@ msgstr ""
msgid "Image could not be processed. Please go back and try again."
msgstr ""
-#: includes/Ajax.php:902
+#: includes/Ajax.php:903
msgid "Please Login to Continue"
msgstr ""
-#: includes/Ajax.php:924
+#: includes/Ajax.php:925
msgid "Invalid username or password."
msgstr ""
-#: includes/Ajax.php:935
+#: includes/Ajax.php:936
msgid "Wrong username or password."
msgstr ""
-#: includes/Ajax.php:964
+#: includes/Ajax.php:965
msgid "User logged in successfully."
msgstr ""
-#: includes/Ajax.php:986
+#: includes/Ajax.php:987
msgid "id param is required"
msgstr ""
-#: includes/Assets.php:148
+#: includes/Assets.php:151
msgid "Could not find any vendor."
msgstr ""
-#: includes/Assets.php:149
+#: includes/Assets.php:152
msgid "Searching vendors"
msgstr ""
-#: includes/Assets.php:150
+#: includes/Assets.php:153
msgid "Search vendors"
msgstr ""
-#: includes/Assets.php:151
+#: includes/Assets.php:154
msgid "Are you sure ?"
msgstr ""
-#: includes/Assets.php:590
+#: includes/Assets.php:607
#: includes/Product/functions.php:504
#: templates/products/products-listing.php:109
+#: assets/js/dokan-admin-notice.js:2
#: assets/js/dokan-promo-notice.js:2
#: assets/js/vue-admin.js:2
#: assets/js/vue-bootstrap.js:2
msgid "Are you sure?"
msgstr ""
-#: includes/Assets.php:591
+#: includes/Assets.php:608
msgid "Something went wrong. Please try again."
msgstr ""
-#: includes/Assets.php:605
+#: includes/Assets.php:622
msgid "Are you sure you want to revoke access to this download?"
msgstr ""
-#: includes/Assets.php:606
+#: includes/Assets.php:623
msgid "Could not grant access - the user may already have permission for this file or billing email is not set. Ensure the billing email is set, and the order has been saved."
msgstr ""
-#: includes/Assets.php:732
+#: includes/Assets.php:753
msgctxt "time constant"
msgid "am"
msgstr ""
-#: includes/Assets.php:733
+#: includes/Assets.php:754
msgctxt "time constant"
msgid "pm"
msgstr ""
-#: includes/Assets.php:734
+#: includes/Assets.php:755
msgctxt "time constant"
msgid "AM"
msgstr ""
-#: includes/Assets.php:735
+#: includes/Assets.php:756
msgctxt "time constant"
msgid "PM"
msgstr ""
-#: includes/Assets.php:736
+#: includes/Assets.php:757
msgctxt "time constant"
msgid "hr"
msgstr ""
-#: includes/Assets.php:737
+#: includes/Assets.php:758
msgctxt "time constant"
msgid "hrs"
msgstr ""
-#: includes/Assets.php:738
+#: includes/Assets.php:759
msgctxt "time constant"
msgid "mins"
msgstr ""
-#: includes/Assets.php:741
-#: templates/products/edit-product-single.php:306
+#: includes/Assets.php:762
+#: templates/products/edit-product-single.php:368
#: templates/products/new-product.php:252
-#: templates/products/tmpl-add-product-popup.php:88
+#: templates/products/tmpl-add-product-popup.php:87
msgid "To"
msgstr ""
-#: includes/Assets.php:743
-#: templates/products/edit-product-single.php:299
+#: includes/Assets.php:764
+#: templates/products/edit-product-single.php:361
#: templates/products/new-product.php:245
-#: templates/products/tmpl-add-product-popup.php:81
+#: templates/products/tmpl-add-product-popup.php:80
msgid "From"
msgstr ""
-#: includes/Assets.php:744
+#: includes/Assets.php:765
msgid " - "
msgstr ""
-#: includes/Assets.php:745
+#: includes/Assets.php:766
msgid "W"
msgstr ""
-#: includes/Assets.php:746
+#: includes/Assets.php:767
#: templates/orders/listing.php:20
#: templates/products/products-listing.php:108
#: templates/store-lists-filter.php:84
@@ -1935,100 +1972,100 @@ msgstr ""
msgid "Apply"
msgstr ""
-#: includes/Assets.php:747
+#: includes/Assets.php:768
#: assets/js/vue-admin.js:2
msgid "Clear"
msgstr ""
-#: includes/Assets.php:748
+#: includes/Assets.php:769
#: includes/Withdraw/Hooks.php:68
msgid "Custom"
msgstr ""
-#: includes/Assets.php:750
+#: includes/Assets.php:771
msgid "Su"
msgstr ""
-#: includes/Assets.php:751
+#: includes/Assets.php:772
msgid "Mo"
msgstr ""
-#: includes/Assets.php:752
+#: includes/Assets.php:773
msgid "Tu"
msgstr ""
-#: includes/Assets.php:753
+#: includes/Assets.php:774
msgid "We"
msgstr ""
-#: includes/Assets.php:754
+#: includes/Assets.php:775
msgid "Th"
msgstr ""
-#: includes/Assets.php:755
+#: includes/Assets.php:776
msgid "Fr"
msgstr ""
-#: includes/Assets.php:756
+#: includes/Assets.php:777
msgid "Sa"
msgstr ""
-#: includes/Assets.php:759
+#: includes/Assets.php:780
msgid "January"
msgstr ""
-#: includes/Assets.php:760
+#: includes/Assets.php:781
msgid "February"
msgstr ""
-#: includes/Assets.php:761
+#: includes/Assets.php:782
msgid "March"
msgstr ""
-#: includes/Assets.php:762
+#: includes/Assets.php:783
msgid "April"
msgstr ""
-#: includes/Assets.php:763
+#: includes/Assets.php:784
msgid "May"
msgstr ""
-#: includes/Assets.php:764
+#: includes/Assets.php:785
msgid "June"
msgstr ""
-#: includes/Assets.php:765
+#: includes/Assets.php:786
msgid "July"
msgstr ""
-#: includes/Assets.php:766
+#: includes/Assets.php:787
msgid "August"
msgstr ""
-#: includes/Assets.php:767
+#: includes/Assets.php:788
msgid "September"
msgstr ""
-#: includes/Assets.php:768
+#: includes/Assets.php:789
msgid "October"
msgstr ""
-#: includes/Assets.php:769
+#: includes/Assets.php:790
msgid "November"
msgstr ""
-#: includes/Assets.php:770
+#: includes/Assets.php:791
msgid "December"
msgstr ""
-#: includes/Assets.php:774
-#: includes/Assets.php:1046
+#: includes/Assets.php:795
+#: includes/Assets.php:1067
#: includes/Product/functions.php:310
#: templates/my-orders.php:95
#: templates/orders/details.php:196
-#: templates/products/edit-product-single.php:270
+#: templates/products/edit-product-single.php:332
#: templates/products/new-product.php:232
-#: templates/products/tmpl-add-product-popup.php:68
+#: templates/products/tmpl-add-product-popup.php:67
#: templates/settings/bank-payment-method-settings.php:203
#: templates/store-lists-filter.php:83
#: templates/withdraw/pending-request-listing-dashboard.php:24
@@ -2036,25 +2073,26 @@ msgstr ""
#: templates/withdraw/pending-request-listing.php:19
#: templates/withdraw/pending-request-listing.php:39
#: templates/withdraw/pending-request-listing.php:63
+#: assets/js/dokan-admin-notice.js:2
#: assets/js/dokan-promo-notice.js:2
#: assets/js/vue-admin.js:2
#: assets/js/vue-bootstrap.js:2
msgid "Cancel"
msgstr ""
-#: includes/Assets.php:775
+#: includes/Assets.php:796
#: includes/Product/functions.php:321
#: templates/orders/details.php:347
#: templates/settings/store-form.php:38
msgid "Close"
msgstr ""
-#: includes/Assets.php:776
-#: includes/Assets.php:1045
+#: includes/Assets.php:797
+#: includes/Assets.php:1066
msgid "OK"
msgstr ""
-#: includes/Assets.php:777
+#: includes/Assets.php:798
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:283
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:430
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:446
@@ -2064,312 +2102,312 @@ msgstr ""
msgid "No"
msgstr ""
-#: includes/Assets.php:778
+#: includes/Assets.php:799
msgid "Close this dialog"
msgstr ""
-#: includes/Assets.php:793
+#: includes/Assets.php:814
msgid "This field is required"
msgstr ""
-#: includes/Assets.php:794
+#: includes/Assets.php:815
msgid "Please fix this field."
msgstr ""
-#: includes/Assets.php:795
+#: includes/Assets.php:816
msgid "Please enter a valid email address."
msgstr ""
-#: includes/Assets.php:796
+#: includes/Assets.php:817
msgid "Please enter a valid URL."
msgstr ""
-#: includes/Assets.php:797
+#: includes/Assets.php:818
msgid "Please enter a valid date."
msgstr ""
-#: includes/Assets.php:798
+#: includes/Assets.php:819
msgid "Please enter a valid date (ISO)."
msgstr ""
-#: includes/Assets.php:799
+#: includes/Assets.php:820
msgid "Please enter a valid number."
msgstr ""
-#: includes/Assets.php:800
+#: includes/Assets.php:821
msgid "Please enter only digits."
msgstr ""
-#: includes/Assets.php:801
+#: includes/Assets.php:822
msgid "Please enter a valid credit card number."
msgstr ""
-#: includes/Assets.php:802
+#: includes/Assets.php:823
msgid "Please enter the same value again."
msgstr ""
-#: includes/Assets.php:803
+#: includes/Assets.php:824
msgid "Please enter no more than {0} characters."
msgstr ""
-#: includes/Assets.php:804
+#: includes/Assets.php:825
msgid "Please enter at least {0} characters."
msgstr ""
-#: includes/Assets.php:805
+#: includes/Assets.php:826
msgid "Please enter a value between {0} and {1} characters long."
msgstr ""
-#: includes/Assets.php:806
+#: includes/Assets.php:827
msgid "Please enter a value between {0} and {1}."
msgstr ""
-#: includes/Assets.php:807
+#: includes/Assets.php:828
msgid "Please enter a value less than or equal to {0}."
msgstr ""
-#: includes/Assets.php:808
+#: includes/Assets.php:829
msgid "Please enter a value greater than or equal to {0}."
msgstr ""
-#: includes/Assets.php:970
+#: includes/Assets.php:991
msgid "Upload featured image"
msgstr ""
-#: includes/Assets.php:971
+#: includes/Assets.php:992
msgid "Choose a file"
msgstr ""
-#: includes/Assets.php:972
+#: includes/Assets.php:993
msgid "Add Images to Product Gallery"
msgstr ""
-#: includes/Assets.php:973
+#: includes/Assets.php:994
msgid "Set featured image"
msgstr ""
-#: includes/Assets.php:974
+#: includes/Assets.php:995
#: includes/woo-views/html-product-download.php:8
msgid "Insert file URL"
msgstr ""
-#: includes/Assets.php:975
+#: includes/Assets.php:996
msgid "Add to gallery"
msgstr ""
-#: includes/Assets.php:976
+#: includes/Assets.php:997
msgid "Sorry, this attribute option already exists, Try a different one."
msgstr ""
-#: includes/Assets.php:977
+#: includes/Assets.php:998
msgid "Warning! This product will not have any variations if this option is not checked."
msgstr ""
-#: includes/Assets.php:978
+#: includes/Assets.php:999
msgid "Enter a name for the new attribute term:"
msgstr ""
-#: includes/Assets.php:979
+#: includes/Assets.php:1000
msgid "Remove this attribute?"
msgstr ""
#. translators: %d: max linked variation.
-#: includes/Assets.php:988
+#: includes/Assets.php:1009
msgid "Are you sure you want to link all variations? This will create a new variation for each and every possible combination of variation attributes (max %d per run)."
msgstr ""
-#: includes/Assets.php:989
+#: includes/Assets.php:1010
msgid "Enter a value"
msgstr ""
-#: includes/Assets.php:990
+#: includes/Assets.php:1011
msgid "Variation menu order (determines position in the list of variations)"
msgstr ""
-#: includes/Assets.php:991
+#: includes/Assets.php:1012
msgid "Enter a value (fixed or %)"
msgstr ""
-#: includes/Assets.php:992
+#: includes/Assets.php:1013
msgid "Are you sure you want to delete all variations? This cannot be undone."
msgstr ""
-#: includes/Assets.php:993
+#: includes/Assets.php:1014
msgid "Last warning, are you sure?"
msgstr ""
-#: includes/Assets.php:994
+#: includes/Assets.php:1015
msgid "Choose an image"
msgstr ""
-#: includes/Assets.php:995
+#: includes/Assets.php:1016
msgid "Set variation image"
msgstr ""
-#: includes/Assets.php:996
+#: includes/Assets.php:1017
msgid "variation added"
msgstr ""
-#: includes/Assets.php:997
+#: includes/Assets.php:1018
msgid "variations added"
msgstr ""
-#: includes/Assets.php:998
+#: includes/Assets.php:1019
msgid "No variations added"
msgstr ""
-#: includes/Assets.php:999
+#: includes/Assets.php:1020
msgid "Are you sure you want to remove this variation?"
msgstr ""
-#: includes/Assets.php:1000
+#: includes/Assets.php:1021
msgid "Sale start date (YYYY-MM-DD format or leave blank)"
msgstr ""
-#: includes/Assets.php:1001
+#: includes/Assets.php:1022
msgid "Sale end date (YYYY-MM-DD format or leave blank)"
msgstr ""
-#: includes/Assets.php:1002
+#: includes/Assets.php:1023
msgid "Save changes before changing page?"
msgstr ""
-#: includes/Assets.php:1003
+#: includes/Assets.php:1024
msgid "%qty% variation"
msgstr ""
-#: includes/Assets.php:1004
+#: includes/Assets.php:1025
msgid "%qty% variations"
msgstr ""
-#: includes/Assets.php:1005
+#: includes/Assets.php:1026
msgid "No Result Found"
msgstr ""
-#: includes/Assets.php:1006
+#: includes/Assets.php:1027
msgid "Please insert value less than the regular price!"
msgstr ""
#. translators: %s: decimal
-#: includes/Assets.php:1008
-#: includes/Assets.php:1188
+#: includes/Assets.php:1029
+#: includes/Assets.php:1209
msgid "Please enter with one decimal point (%s) without thousand separators."
msgstr ""
#. translators: %s: price decimal separator
-#: includes/Assets.php:1010
-#: includes/Assets.php:1190
+#: includes/Assets.php:1031
+#: includes/Assets.php:1211
msgid "Please enter with one monetary decimal point (%s) without thousand separators and currency symbols."
msgstr ""
-#: includes/Assets.php:1011
-#: includes/Assets.php:1191
+#: includes/Assets.php:1032
+#: includes/Assets.php:1212
msgid "Please enter in country code with two capital letters."
msgstr ""
-#: includes/Assets.php:1012
-#: includes/Assets.php:1192
+#: includes/Assets.php:1033
+#: includes/Assets.php:1213
msgid "Please enter in a value less than the regular price."
msgstr ""
-#: includes/Assets.php:1013
-#: includes/Assets.php:1193
+#: includes/Assets.php:1034
+#: includes/Assets.php:1214
msgid "This product has produced sales and may be linked to existing orders. Are you sure you want to delete it?"
msgstr ""
-#: includes/Assets.php:1014
-#: includes/Assets.php:1194
+#: includes/Assets.php:1035
+#: includes/Assets.php:1215
msgid "This action cannot be reversed. Are you sure you wish to erase personal data from the selected orders?"
msgstr ""
-#: includes/Assets.php:1024
+#: includes/Assets.php:1045
msgid "Select and Crop"
msgstr ""
-#: includes/Assets.php:1025
+#: includes/Assets.php:1046
msgid "Choose Image"
msgstr ""
-#: includes/Assets.php:1026
+#: includes/Assets.php:1047
msgid "Product title is required"
msgstr ""
-#: includes/Assets.php:1027
+#: includes/Assets.php:1048
msgid "Product category is required"
msgstr ""
-#: includes/Assets.php:1028
+#: includes/Assets.php:1049
msgid "Product created successfully"
msgstr ""
-#: includes/Assets.php:1032
+#: includes/Assets.php:1053
msgid "One result is available, press enter to select it."
msgstr ""
-#: includes/Assets.php:1033
+#: includes/Assets.php:1054
msgid "%qty% results are available, use up and down arrow keys to navigate."
msgstr ""
-#: includes/Assets.php:1034
+#: includes/Assets.php:1055
msgid "No matches found"
msgstr ""
-#: includes/Assets.php:1035
+#: includes/Assets.php:1056
msgid "Loading failed"
msgstr ""
-#: includes/Assets.php:1036
+#: includes/Assets.php:1057
msgid "Please enter 1 or more characters"
msgstr ""
-#: includes/Assets.php:1037
+#: includes/Assets.php:1058
msgid "Please enter %qty% or more characters"
msgstr ""
-#: includes/Assets.php:1038
+#: includes/Assets.php:1059
msgid "Please delete 1 character"
msgstr ""
-#: includes/Assets.php:1039
+#: includes/Assets.php:1060
msgid "Please delete %qty% characters"
msgstr ""
-#: includes/Assets.php:1040
+#: includes/Assets.php:1061
msgid "You can only select 1 item"
msgstr ""
-#: includes/Assets.php:1041
+#: includes/Assets.php:1062
msgid "You can only select %qty% items"
msgstr ""
-#: includes/Assets.php:1042
+#: includes/Assets.php:1063
msgid "Loading more results…"
msgstr ""
-#: includes/Assets.php:1043
+#: includes/Assets.php:1064
msgid "Searching…"
msgstr ""
-#: includes/Assets.php:1044
+#: includes/Assets.php:1065
msgid "Calculating"
msgstr ""
-#: includes/Assets.php:1047
+#: includes/Assets.php:1068
msgid "Attribute Name"
msgstr ""
-#: includes/Assets.php:1049
+#: includes/Assets.php:1070
msgid "Are you sure? You have uploaded banner but didn't click the Update Settings button!"
msgstr ""
-#: includes/Assets.php:1050
+#: includes/Assets.php:1071
#: templates/settings/header.php:20
#: templates/settings/payment-manage.php:48
#: templates/settings/store-form.php:270
msgid "Update Settings"
msgstr ""
-#: includes/Assets.php:1052
+#: includes/Assets.php:1073
msgid "Please enter 3 or more characters"
msgstr ""
@@ -2392,7 +2430,7 @@ msgid "Out of Stock"
msgstr ""
#: includes/Blocks/ProductBlock.php:34
-#: templates/products/inventory.php:67
+#: templates/products/inventory.php:69
msgid "Do not allow"
msgstr ""
@@ -2401,21 +2439,21 @@ msgid "Allow, but notify customer"
msgstr ""
#: includes/Blocks/ProductBlock.php:36
-#: templates/products/inventory.php:69
+#: templates/products/inventory.php:71
msgid "Allow"
msgstr ""
#: includes/Blocks/ProductBlock.php:40
-#: templates/products/edit-product-single.php:329
+#: templates/products/edit-product-single.php:384
#: templates/products/new-product.php:271
-#: templates/products/tmpl-add-product-popup.php:19
+#: templates/products/tmpl-add-product-popup.php:18
msgid "Select tags/Add tags"
msgstr ""
#: includes/Blocks/ProductBlock.php:40
-#: templates/products/edit-product-single.php:329
+#: templates/products/edit-product-single.php:384
#: templates/products/new-product.php:271
-#: templates/products/tmpl-add-product-popup.php:19
+#: templates/products/tmpl-add-product-popup.php:18
msgid "Select product tags"
msgstr ""
@@ -2470,27 +2508,35 @@ msgid "Check to remove Add to Cart option from your products."
msgstr ""
#: includes/CatalogMode/Dashboard/Settings.php:79
-#: templates/products/catalog-mode-content.php:45
-msgid "Check to hide product price from your products."
-msgstr ""
-
-#. translators: %s: Geteway fee
-#: includes/Commission.php:116
-msgid "Payment gateway processing fee %s"
+#: templates/products/catalog-mode-content.php:45
+msgid "Check to hide product price from your products."
msgstr ""
-#: includes/Commission.php:238
+#: includes/Commission.php:174
#: includes/REST/ProductBlockController.php:69
msgid "Product not found"
msgstr ""
-#: includes/Commission.php:268
+#: includes/Commission.php:211
msgid "Order not found"
msgstr ""
-#: includes/Commission.php:771
-#: includes/Commission.php:803
-msgid "Please provide a valid order object."
+#: includes/Commission.php:539
+msgid "Combine"
+msgstr ""
+
+#: includes/Commission.php:540
+#: assets/js/dokan-setup-wizard-commission.js:1
+#: assets/js/vue-admin.js:2
+#: assets/js/vue-bootstrap.js:2
+msgid "Percentage"
+msgstr ""
+
+#: includes/Commission.php:541
+#: assets/js/dokan-setup-wizard-commission.js:1
+#: assets/js/vue-admin.js:2
+#: assets/js/vue-bootstrap.js:2
+msgid "Flat"
msgstr ""
#. translators: 1) page number
@@ -2584,7 +2630,7 @@ msgid "Show store opening/closing Time"
msgstr ""
#: includes/Customizer.php:392
-#: includes/Install/Installer.php:240
+#: includes/Install/Installer.php:239
msgid "Store List"
msgstr ""
@@ -2603,14 +2649,14 @@ msgid "Pending"
msgstr ""
#: includes/Dashboard/Templates/Dashboard.php:119
-#: includes/Order/functions.php:451
+#: includes/Order/functions.php:455
#: templates/dashboard/orders-widget.php:48
#: assets/js/vue-admin.js:2
msgid "Cancelled"
msgstr ""
#: includes/Dashboard/Templates/Dashboard.php:124
-#: includes/Order/functions.php:446
+#: includes/Order/functions.php:450
#: templates/dashboard/orders-widget.php:53
msgid "Refunded"
msgstr ""
@@ -3282,13 +3328,23 @@ msgstr ""
msgid "Withdrawal request for {amount} is cancelled"
msgstr ""
+#. translators: %s: Geteway fee
+#: includes/Fees.php:112
+msgid "Payment gateway processing fee %s"
+msgstr ""
+
+#: includes/Fees.php:168
+#: includes/Fees.php:201
+msgid "Please provide a valid order object."
+msgstr ""
+
#: includes/Frontend/MyAccount/BecomeAVendor.php:82
-#: includes/Frontend/MyAccount/BecomeAVendor.php:162
+#: includes/Frontend/MyAccount/BecomeAVendor.php:166
msgid "You need to login before applying for vendor."
msgstr ""
#: includes/Frontend/MyAccount/BecomeAVendor.php:88
-#: includes/Frontend/MyAccount/BecomeAVendor.php:164
+#: includes/Frontend/MyAccount/BecomeAVendor.php:168
msgid "You are already a vendor."
msgstr ""
@@ -3304,12 +3360,12 @@ msgstr ""
msgid "Enter your phone number."
msgstr ""
-#: includes/Frontend/MyAccount/BecomeAVendor.php:166
+#: includes/Frontend/MyAccount/BecomeAVendor.php:170
msgid "You are an administrator. Please use dokan admin settings to enable your selling capabilities."
msgstr ""
#: includes/functions-dashboard-navigation.php:37
-#: includes/functions.php:1294
+#: includes/functions.php:1199
#: templates/dashboard/products-widget.php:22
#: assets/js/vue-admin.js:2
msgid "Products"
@@ -3327,18 +3383,18 @@ msgstr ""
msgid "No Title"
msgstr ""
-#: includes/functions-dashboard-navigation.php:291
+#: includes/functions-dashboard-navigation.php:292
#: templates/settings/header.php:14
#: templates/store-lists-loop.php:105
msgid "Visit Store"
msgstr ""
-#: includes/functions-dashboard-navigation.php:292
+#: includes/functions-dashboard-navigation.php:293
#: templates/global/header-menu.php:54
msgid "Edit Account"
msgstr ""
-#: includes/functions-dashboard-navigation.php:293
+#: includes/functions-dashboard-navigation.php:294
msgid "Log out"
msgstr ""
@@ -3360,540 +3416,551 @@ msgstr ""
msgid "No store found with given store id"
msgstr ""
-#: includes/functions.php:774
+#: includes/functions.php:682
msgid "Online"
msgstr ""
-#: includes/functions.php:775
-#: includes/Order/functions.php:460
+#: includes/functions.php:683
+#: includes/Order/functions.php:464
msgid "Draft"
msgstr ""
-#: includes/functions.php:776
+#: includes/functions.php:684
#: templates/dashboard/products-widget.php:47
#: templates/withdraw/pending-request-listing-dashboard.php:52
#: templates/withdraw/pending-request-listing.php:45
msgid "Pending Review"
msgstr ""
-#: includes/functions.php:777
-#: templates/products/products-listing-row.php:166
+#: includes/functions.php:685
+#: templates/products/products-listing-row.php:329
msgid "Scheduled"
msgstr ""
-#: includes/functions.php:846
+#: includes/functions.php:754
msgid "Simple Product"
msgstr ""
-#: includes/functions.php:847
+#: includes/functions.php:755
#: assets/js/vue-admin.js:2
msgid "Variable Product"
msgstr ""
-#: includes/functions.php:848
+#: includes/functions.php:756
msgid "Grouped Product"
msgstr ""
-#: includes/functions.php:849
+#: includes/functions.php:757
msgid "External/Affiliate Product"
msgstr ""
-#: includes/functions.php:1086
+#: includes/functions.php:995
msgid "Author"
msgstr ""
-#: includes/functions.php:1298
+#: includes/functions.php:1203
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:518
#: templates/settings/store-form.php:195
msgid "Terms and Conditions"
msgstr ""
#. translators: 1) bank account name
-#: includes/functions.php:1338
+#: includes/functions.php:1243
#: assets/js/vue-admin.js:2
msgid "Account Name: %s"
msgstr ""
#. translators: 1) bank account number
-#: includes/functions.php:1343
+#: includes/functions.php:1248
#: assets/js/vue-admin.js:2
msgid "Account Number: %s"
msgstr ""
#. translators: 1) bank name
-#: includes/functions.php:1348
+#: includes/functions.php:1253
#: assets/js/vue-admin.js:2
msgid "Bank Name: %s"
msgstr ""
#. translators: 1) bank address
-#: includes/functions.php:1353
+#: includes/functions.php:1258
msgid "Address: %s"
msgstr ""
#. translators: 1) bank routing number
-#: includes/functions.php:1358
+#: includes/functions.php:1263
#: assets/js/vue-admin.js:2
msgid "Routing Number: %s"
msgstr ""
#. translators: 1) bank iban
-#: includes/functions.php:1363
+#: includes/functions.php:1268
#: assets/js/vue-admin.js:2
msgid "IBAN: %s"
msgstr ""
#. translators: 1) bank swift
-#: includes/functions.php:1368
+#: includes/functions.php:1273
msgid "SWIFT: %s"
msgstr ""
-#: includes/functions.php:1723
+#: includes/functions.php:1628
msgid "Date is not valid"
msgstr ""
-#: includes/functions.php:2089
+#: includes/functions.php:1994
msgid "- Select a location -"
msgstr ""
-#: includes/functions.php:2093
-#: includes/functions.php:2117
+#: includes/functions.php:1998
+#: includes/functions.php:2022
msgid "Everywhere Else"
msgstr ""
-#: includes/functions.php:2113
+#: includes/functions.php:2018
msgid "- Select a State -"
msgstr ""
-#: includes/functions.php:2136
+#: includes/functions.php:2041
msgid "Ready to ship in..."
msgstr ""
-#: includes/functions.php:2137
+#: includes/functions.php:2042
msgid "1 business day"
msgstr ""
-#: includes/functions.php:2138
+#: includes/functions.php:2043
msgid "1-2 business days"
msgstr ""
-#: includes/functions.php:2139
+#: includes/functions.php:2044
msgid "1-3 business days"
msgstr ""
-#: includes/functions.php:2140
+#: includes/functions.php:2045
msgid "3-5 business days"
msgstr ""
-#: includes/functions.php:2141
+#: includes/functions.php:2046
msgid "1-2 weeks"
msgstr ""
-#: includes/functions.php:2142
+#: includes/functions.php:2047
msgid "2-3 weeks"
msgstr ""
-#: includes/functions.php:2143
+#: includes/functions.php:2048
msgid "3-4 weeks"
msgstr ""
-#: includes/functions.php:2144
+#: includes/functions.php:2049
msgid "4-6 weeks"
msgstr ""
-#: includes/functions.php:2145
+#: includes/functions.php:2050
msgid "6-8 weeks"
msgstr ""
-#: includes/functions.php:2245
+#: includes/functions.php:2150
msgid "All dates"
msgstr ""
#. translators: 1: month name, 2: 4-digit year
-#: includes/functions.php:2260
-#: includes/REST/ProductControllerV2.php:198
+#: includes/functions.php:2165
+#: includes/REST/ProductControllerV2.php:200
msgid "%1$s %2$d"
msgstr ""
-#: includes/functions.php:2275
-#: includes/REST/ProductControllerV2.php:236
-#: templates/products/edit-product-single.php:225
-#: templates/products/products-listing-row.php:112
-#: templates/products/products-listing.php:138
+#: includes/functions.php:2180
+#: includes/REST/ProductControllerV2.php:238
+#: templates/products/edit-product-single.php:257
+#: templates/products/products-listing-row.php:247
+#: templates/products/products-listing.php:139
msgid "Simple"
msgstr ""
-#: includes/functions.php:2357
+#: includes/functions.php:2263
#: includes/Privacy.php:201
#: assets/js/vue-bootstrap.js:2
msgid "Facebook"
msgstr ""
-#: includes/functions.php:2361
+#: includes/functions.php:2267
#: includes/Privacy.php:202
#: assets/js/vue-bootstrap.js:2
msgid "Twitter"
msgstr ""
-#: includes/functions.php:2365
+#: includes/functions.php:2271
#: includes/Privacy.php:203
#: assets/js/vue-bootstrap.js:2
msgid "Pinterest"
msgstr ""
-#: includes/functions.php:2369
+#: includes/functions.php:2275
msgid "LinkedIn"
msgstr ""
-#: includes/functions.php:2373
+#: includes/functions.php:2279
#: includes/Privacy.php:205
#: assets/js/vue-bootstrap.js:2
msgid "Youtube"
msgstr ""
-#: includes/functions.php:2377
+#: includes/functions.php:2283
#: includes/Privacy.php:206
#: assets/js/vue-bootstrap.js:2
msgid "Instagram"
msgstr ""
-#: includes/functions.php:2381
+#: includes/functions.php:2287
#: includes/Privacy.php:207
#: assets/js/vue-bootstrap.js:2
msgid "Flickr"
msgstr ""
-#: includes/functions.php:2385
+#: includes/functions.php:2291
msgid "Threads"
msgstr ""
-#: includes/functions.php:2651
+#: includes/functions.php:2557
msgid "Dokan Store Sidebar"
msgstr ""
-#: includes/functions.php:2808
+#: includes/functions.php:2686
msgid "View sales overview"
msgstr ""
-#: includes/functions.php:2809
+#: includes/functions.php:2687
msgid "View sales report chart"
msgstr ""
-#: includes/functions.php:2810
+#: includes/functions.php:2688
msgid "View announcement"
msgstr ""
-#: includes/functions.php:2811
+#: includes/functions.php:2689
msgid "View order report"
msgstr ""
-#: includes/functions.php:2812
+#: includes/functions.php:2690
msgid "View review report"
msgstr ""
-#: includes/functions.php:2813
+#: includes/functions.php:2691
msgid "View product status report"
msgstr ""
-#: includes/functions.php:2816
+#: includes/functions.php:2694
msgid "View overview report"
msgstr ""
-#: includes/functions.php:2817
+#: includes/functions.php:2695
msgid "View daily sales report"
msgstr ""
-#: includes/functions.php:2818
+#: includes/functions.php:2696
msgid "View top selling report"
msgstr ""
-#: includes/functions.php:2819
+#: includes/functions.php:2697
msgid "View top earning report"
msgstr ""
-#: includes/functions.php:2820
+#: includes/functions.php:2698
msgid "View statement report"
msgstr ""
-#: includes/functions.php:2823
+#: includes/functions.php:2701
msgid "View order"
msgstr ""
-#: includes/functions.php:2824
+#: includes/functions.php:2702
msgid "Manage order"
msgstr ""
-#: includes/functions.php:2825
+#: includes/functions.php:2703
msgid "Manage order note"
msgstr ""
-#: includes/functions.php:2826
+#: includes/functions.php:2704
msgid "Manage refund"
msgstr ""
-#: includes/functions.php:2827
+#: includes/functions.php:2705
msgid "Export order"
msgstr ""
-#: includes/functions.php:2830
+#: includes/functions.php:2708
msgid "Add coupon"
msgstr ""
-#: includes/functions.php:2831
+#: includes/functions.php:2709
msgid "Edit coupon"
msgstr ""
-#: includes/functions.php:2832
+#: includes/functions.php:2710
msgid "Delete coupon"
msgstr ""
-#: includes/functions.php:2835
+#: includes/functions.php:2713
msgid "View reviews"
msgstr ""
-#: includes/functions.php:2836
+#: includes/functions.php:2714
#: assets/js/vue-admin.js:2
msgid "Manage reviews"
msgstr ""
-#: includes/functions.php:2840
+#: includes/functions.php:2718
msgid "Manage withdraw"
msgstr ""
-#: includes/functions.php:2843
+#: includes/functions.php:2721
msgid "Add product"
msgstr ""
-#: includes/functions.php:2844
+#: includes/functions.php:2722
msgid "Edit product"
msgstr ""
-#: includes/functions.php:2845
+#: includes/functions.php:2723
msgid "Delete product"
msgstr ""
-#: includes/functions.php:2846
+#: includes/functions.php:2724
msgid "View product"
msgstr ""
-#: includes/functions.php:2847
+#: includes/functions.php:2725
msgid "Duplicate product"
msgstr ""
-#: includes/functions.php:2848
+#: includes/functions.php:2726
msgid "Import product"
msgstr ""
-#: includes/functions.php:2849
+#: includes/functions.php:2727
msgid "Export product"
msgstr ""
-#: includes/functions.php:2852
+#: includes/functions.php:2730
msgid "View overview menu"
msgstr ""
-#: includes/functions.php:2853
+#: includes/functions.php:2731
msgid "View product menu"
msgstr ""
-#: includes/functions.php:2854
+#: includes/functions.php:2732
msgid "View order menu"
msgstr ""
-#: includes/functions.php:2855
+#: includes/functions.php:2733
msgid "View coupon menu"
msgstr ""
-#: includes/functions.php:2856
+#: includes/functions.php:2734
msgid "View report menu"
msgstr ""
-#: includes/functions.php:2857
+#: includes/functions.php:2735
msgid "View review menu"
msgstr ""
-#: includes/functions.php:2858
+#: includes/functions.php:2736
msgid "View withdraw menu"
msgstr ""
-#: includes/functions.php:2859
+#: includes/functions.php:2737
msgid "View store settings menu"
msgstr ""
-#: includes/functions.php:2860
+#: includes/functions.php:2738
msgid "View payment settings menu"
msgstr ""
-#: includes/functions.php:2861
+#: includes/functions.php:2739
msgid "View shipping settings menu"
msgstr ""
-#: includes/functions.php:2862
+#: includes/functions.php:2740
msgid "View social settings menu"
msgstr ""
-#: includes/functions.php:2863
+#: includes/functions.php:2741
msgid "View seo settings menu"
msgstr ""
-#: includes/functions.php:2882
+#: includes/functions.php:2760
#: assets/js/vue-admin.js:2
msgid "Overview"
msgstr ""
-#: includes/functions.php:2883
+#: includes/functions.php:2761
msgid "Report"
msgstr ""
-#: includes/functions.php:2884
+#: includes/functions.php:2762
#: templates/dashboard/big-counter-widget.php:29
#: templates/my-orders.php:25
#: templates/orders/details.php:19
#: templates/orders/listing.php:30
#: templates/orders/listing.php:57
+#: templates/orders/sub-order-related-order-meta-box-html.php:37
#: templates/sub-orders.php:45
#: assets/js/vue-admin.js:2
msgid "Order"
msgstr ""
-#: includes/functions.php:2885
+#: includes/functions.php:2763
msgid "Coupon"
msgstr ""
-#: includes/functions.php:2886
+#: includes/functions.php:2764
msgid "Review"
msgstr ""
-#: includes/functions.php:2888
+#: includes/functions.php:2766
#: templates/emails/vendor-completed-order.php:54
#: templates/emails/vendor-new-order.php:53
#: assets/js/vue-admin.js:2
msgid "Product"
msgstr ""
-#: includes/functions.php:2889
+#: includes/functions.php:2767
msgid "Menu"
msgstr ""
-#: includes/functions.php:3018
+#: includes/functions.php:2896
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:350
msgid "Sunday"
msgstr ""
-#: includes/functions.php:3019
+#: includes/functions.php:2897
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:302
msgid "Monday"
msgstr ""
-#: includes/functions.php:3020
+#: includes/functions.php:2898
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:310
msgid "Tuesday"
msgstr ""
-#: includes/functions.php:3021
+#: includes/functions.php:2899
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:318
msgid "Wednesday"
msgstr ""
-#: includes/functions.php:3022
+#: includes/functions.php:2900
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:326
msgid "Thursday"
msgstr ""
-#: includes/functions.php:3023
+#: includes/functions.php:2901
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:334
msgid "Friday"
msgstr ""
-#: includes/functions.php:3024
+#: includes/functions.php:2902
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:342
msgid "Saturday"
msgstr ""
-#: includes/functions.php:3029
+#: includes/functions.php:2907
msgid "Sun"
msgstr ""
-#: includes/functions.php:3030
+#: includes/functions.php:2908
msgid "Mon"
msgstr ""
-#: includes/functions.php:3031
+#: includes/functions.php:2909
msgid "Tue"
msgstr ""
-#: includes/functions.php:3032
+#: includes/functions.php:2910
msgid "Wed"
msgstr ""
-#: includes/functions.php:3033
+#: includes/functions.php:2911
msgid "Thu"
msgstr ""
-#: includes/functions.php:3034
+#: includes/functions.php:2912
msgid "Fri"
msgstr ""
-#: includes/functions.php:3035
+#: includes/functions.php:2913
msgid "Sat"
msgstr ""
-#: includes/functions.php:3329
+#: includes/functions.php:3209
msgid "privacy policy"
msgstr ""
-#: includes/functions.php:3376
-#: assets/js/vue-admin.js:2
-#: assets/js/vue-bootstrap.js:2
-msgid "Flat"
+#: includes/functions.php:3256
+#: templates/products/dokan-products-edit-bulk-commission.php:28
+msgid "Fixed"
msgstr ""
-#: includes/functions.php:3377
-#: assets/js/vue-admin.js:2
-#: assets/js/vue-bootstrap.js:2
-msgid "Percentage"
+#: includes/functions.php:3257
+msgid "Category Based"
msgstr ""
#. translators: 1) plugin slug
-#: includes/functions.php:3551
+#: includes/functions.php:3431
msgid "Unable to fetch plugin information from wordpress.org for %s."
msgstr ""
#. translators: 1) plugin slug
-#: includes/functions.php:3564
+#: includes/functions.php:3444
msgid "Unable to install %s from wordpress.org"
msgstr ""
-#: includes/Order/Admin/Hooks.php:93
+#: includes/Order/Admin/Hooks.php:97
#: assets/js/vue-admin.js:2
msgid "Actions"
msgstr ""
-#: includes/Order/Admin/Hooks.php:94
+#: includes/Order/Admin/Hooks.php:98
msgid "Sub Order"
msgstr ""
-#: includes/Order/Admin/Hooks.php:133
+#: includes/Order/Admin/Hooks.php:137
msgid " Sub Order of"
msgstr ""
-#: includes/Order/Admin/Hooks.php:141
+#: includes/Order/Admin/Hooks.php:145
msgid "Show Sub-Orders"
msgstr ""
-#: includes/Order/Admin/Hooks.php:141
+#: includes/Order/Admin/Hooks.php:145
msgid "Hide Sub-Orders"
msgstr ""
-#: includes/Order/Admin/Hooks.php:154
+#: includes/Order/Admin/Hooks.php:158
+#: templates/orders/sub-order-related-order-meta-box-html.php:96
#: assets/js/vue-admin.js:2
msgid "(no name)"
msgstr ""
-#: includes/Order/Admin/Hooks.php:513
+#: includes/Order/Admin/Hooks.php:532
msgid "Toggle Sub-orders"
msgstr ""
+#: includes/Order/Admin/Hooks.php:558
+msgid "Commissions"
+msgstr ""
+
+#: includes/Order/Admin/Hooks.php:568
+msgid "Sub orders"
+msgstr ""
+
+#: includes/Order/Admin/Hooks.php:568
+msgid "Related orders"
+msgstr ""
+
#: includes/Order/EmailHooks.php:145
msgid "Your {site_title} order receipt from {order_date}"
msgstr ""
@@ -3902,168 +3969,168 @@ msgstr ""
msgid "Your {site_title} order from {order_date} is complete"
msgstr ""
-#: includes/Order/functions.php:431
+#: includes/Order/functions.php:435
msgid "Pending Payment"
msgstr ""
-#: includes/Order/functions.php:456
+#: includes/Order/functions.php:460
msgid "Failed"
msgstr ""
-#: includes/Order/functions.php:642
+#: includes/Order/functions.php:647
msgid "Order No"
msgstr ""
-#: includes/Order/functions.php:643
+#: includes/Order/functions.php:648
#: templates/orders/details.php:19
msgid "Order Items"
msgstr ""
-#: includes/Order/functions.php:644
+#: includes/Order/functions.php:649
msgid "Shipping method"
msgstr ""
-#: includes/Order/functions.php:645
+#: includes/Order/functions.php:650
msgid "Shipping Cost"
msgstr ""
-#: includes/Order/functions.php:646
+#: includes/Order/functions.php:651
msgid "Payment method"
msgstr ""
-#: includes/Order/functions.php:647
+#: includes/Order/functions.php:652
#: templates/orders/listing.php:31
#: templates/orders/listing.php:77
msgid "Order Total"
msgstr ""
-#: includes/Order/functions.php:648
+#: includes/Order/functions.php:653
msgid "Earnings"
msgstr ""
-#: includes/Order/functions.php:649
+#: includes/Order/functions.php:654
#: includes/REST/OrderController.php:107
msgid "Order Status"
msgstr ""
-#: includes/Order/functions.php:650
+#: includes/Order/functions.php:655
msgid "Order Date"
msgstr ""
-#: includes/Order/functions.php:651
+#: includes/Order/functions.php:656
msgid "Billing Company"
msgstr ""
-#: includes/Order/functions.php:652
+#: includes/Order/functions.php:657
msgid "Billing First Name"
msgstr ""
-#: includes/Order/functions.php:653
+#: includes/Order/functions.php:658
msgid "Billing Last Name"
msgstr ""
-#: includes/Order/functions.php:654
+#: includes/Order/functions.php:659
msgid "Billing Full Name"
msgstr ""
-#: includes/Order/functions.php:655
+#: includes/Order/functions.php:660
msgid "Billing Email"
msgstr ""
-#: includes/Order/functions.php:656
+#: includes/Order/functions.php:661
msgid "Billing Phone"
msgstr ""
-#: includes/Order/functions.php:657
+#: includes/Order/functions.php:662
msgid "Billing Address 1"
msgstr ""
-#: includes/Order/functions.php:658
+#: includes/Order/functions.php:663
msgid "Billing Address 2"
msgstr ""
-#: includes/Order/functions.php:659
+#: includes/Order/functions.php:664
msgid "Billing City"
msgstr ""
-#: includes/Order/functions.php:660
+#: includes/Order/functions.php:665
msgid "Billing State"
msgstr ""
-#: includes/Order/functions.php:661
+#: includes/Order/functions.php:666
msgid "Billing Postcode"
msgstr ""
-#: includes/Order/functions.php:662
+#: includes/Order/functions.php:667
msgid "Billing Country"
msgstr ""
-#: includes/Order/functions.php:663
+#: includes/Order/functions.php:668
msgid "Shipping Company"
msgstr ""
-#: includes/Order/functions.php:664
+#: includes/Order/functions.php:669
msgid "Shipping First Name"
msgstr ""
-#: includes/Order/functions.php:665
+#: includes/Order/functions.php:670
msgid "Shipping Last Name"
msgstr ""
-#: includes/Order/functions.php:666
+#: includes/Order/functions.php:671
msgid "Shipping Full Name"
msgstr ""
-#: includes/Order/functions.php:667
+#: includes/Order/functions.php:672
msgid "Shipping Address 1"
msgstr ""
-#: includes/Order/functions.php:668
+#: includes/Order/functions.php:673
msgid "Shipping Address 2"
msgstr ""
-#: includes/Order/functions.php:669
+#: includes/Order/functions.php:674
msgid "Shipping City"
msgstr ""
-#: includes/Order/functions.php:670
+#: includes/Order/functions.php:675
msgid "Shipping State"
msgstr ""
-#: includes/Order/functions.php:671
+#: includes/Order/functions.php:676
msgid "Shipping Postcode"
msgstr ""
-#: includes/Order/functions.php:672
+#: includes/Order/functions.php:677
msgid "Shipping Country"
msgstr ""
-#: includes/Order/functions.php:673
+#: includes/Order/functions.php:678
msgid "Customer IP"
msgstr ""
-#: includes/Order/functions.php:674
+#: includes/Order/functions.php:679
msgid "Customer Note"
msgstr ""
-#: includes/Order/Hooks.php:272
+#: includes/Order/Hooks.php:368
msgid "Marked as completed because it contains digital products only."
msgstr ""
-#: includes/Order/Hooks.php:286
+#: includes/Order/Hooks.php:382
msgid "Mark parent order completed when all child orders are completed."
msgstr ""
-#: includes/Order/Hooks.php:341
+#: includes/Order/Hooks.php:443
msgid "This coupon is invalid for multiple vendors."
msgstr ""
-#: includes/Order/Hooks.php:355
+#: includes/Order/Hooks.php:457
msgid "A coupon must be restricted with a vendor product."
msgstr ""
#. translators: %s item name.
-#: includes/Order/Hooks.php:401
+#: includes/Order/Hooks.php:503
msgid "Unable to restore stock for item %s."
msgstr ""
@@ -4393,7 +4460,7 @@ msgid "Toggle "Manage stock""
msgstr ""
#: includes/Product/functions.php:231
-#: templates/products/products-listing-row.php:82
+#: templates/products/products-listing-row.php:189
#: templates/products/products-listing.php:126
msgid "Stock"
msgstr ""
@@ -4491,13 +4558,13 @@ msgid "Catalog"
msgstr ""
#: includes/Product/functions.php:363
-#: includes/Product/Hooks.php:190
+#: includes/Product/Hooks.php:196
#: templates/products/listing-filter.php:85
msgid "Search"
msgstr ""
#: includes/Product/functions.php:364
-#: templates/products/edit-product-single.php:163
+#: templates/products/edit-product-single.php:184
msgid "Hidden"
msgstr ""
@@ -4508,7 +4575,7 @@ msgstr ""
#: includes/Product/functions.php:510
#: templates/my-orders.php:101
-#: templates/orders/listing.php:150
+#: templates/orders/listing.php:160
#: templates/sub-orders.php:99
msgid "View"
msgstr ""
@@ -4541,27 +4608,34 @@ msgstr ""
msgid "Relevance"
msgstr ""
-#: includes/Product/Hooks.php:60
+#: includes/Product/Hooks.php:66
msgid "Products not found with this search"
msgstr ""
-#: includes/Product/Hooks.php:149
+#: includes/Product/Hooks.php:155
+#: templates/orders/commission-meta-box-html.php:111
msgid "SKU:"
msgstr ""
-#: includes/Product/Hooks.php:186
+#: includes/Product/Hooks.php:192
msgid "Enter product name"
msgstr ""
-#: includes/Product/Hooks.php:194
+#: includes/Product/Hooks.php:200
msgid "Shop order"
msgstr ""
-#: includes/Product/Hooks.php:410
+#: includes/Product/Hooks.php:418
msgid "As this is your own product, the \"Add to Cart\" button has been removed. Please visit as a guest to view it."
msgstr ""
-#: includes/Product/Manager.php:472
+#: includes/Product/Hooks.php:488
+#: includes/Product/Hooks.php:489
+#: assets/js/vue-admin.js:2
+msgid "When the value is 0, no commissions will be deducted from this vendor."
+msgstr ""
+
+#: includes/Product/Manager.php:474
msgid "No product ID found for updating"
msgstr ""
@@ -4573,11 +4647,11 @@ msgstr ""
msgid "Show vendor information on single product page"
msgstr ""
-#: includes/ProductCategory/Helper.php:244
+#: includes/ProductCategory/Helper.php:248
msgid "Select a category"
msgstr ""
-#: includes/ProductCategory/Helper.php:245
+#: includes/ProductCategory/Helper.php:249
msgid "This category has already been selected"
msgstr ""
@@ -4627,35 +4701,35 @@ msgstr ""
msgid "top rated products"
msgstr ""
-#: includes/Registration.php:47
+#: includes/Registration.php:41
msgid "Nonce verification failed"
msgstr ""
-#: includes/Registration.php:55
+#: includes/Registration.php:48
msgid "Cheating, eh?"
msgstr ""
-#: includes/Registration.php:62
+#: includes/Registration.php:55
msgid "Please enter your first name."
msgstr ""
-#: includes/Registration.php:63
+#: includes/Registration.php:56
msgid "Please enter your last name."
msgstr ""
-#: includes/Registration.php:64
+#: includes/Registration.php:57
msgid "Please enter your phone number."
msgstr ""
-#: includes/Registration.php:65
+#: includes/Registration.php:58
msgid "Please provide a shop name."
msgstr ""
-#: includes/Registration.php:66
+#: includes/Registration.php:59
msgid "Please provide a unique shop URL."
msgstr ""
-#: includes/Registration.php:80
+#: includes/Registration.php:73
msgid "Shop URL is not available"
msgstr ""
@@ -4691,482 +4765,515 @@ msgstr ""
msgid "Untitled"
msgstr ""
+#: includes/REST/AdminMiscController.php:48
+msgid "Dokan setting section"
+msgstr ""
+
+#: includes/REST/AdminMiscController.php:54
+msgid "Dokan setting section key"
+msgstr ""
+
+#: includes/REST/AdminNoticeController.php:42
+msgid "Choose notice scope: \"local\" displays only on Dokan pages, \"global\" displays across the entire site."
+msgstr ""
+
#: includes/REST/AdminReportController.php:145
#: templates/dashboard/orders-widget.php:28
#: templates/dashboard/products-widget.php:32
#: templates/my-orders.php:28
#: templates/orders/order-fee-html.php:24
+#: templates/orders/sub-order-related-order-meta-box-html.php:40
#: templates/sub-orders.php:51
msgid "Total"
msgstr ""
+#: includes/REST/CommissionControllerV1.php:42
+msgid "Products price"
+msgstr ""
+
+#: includes/REST/CommissionControllerV1.php:49
+msgid "The amount on that the commission will be calculated."
+msgstr ""
+
+#: includes/REST/CommissionControllerV1.php:56
+msgid "Vendor id"
+msgstr ""
+
+#: includes/REST/CommissionControllerV1.php:63
+msgid "Category ids"
+msgstr ""
+
+#: includes/REST/CommissionControllerV1.php:74
+msgid "In which context the commission will be calculated"
+msgstr ""
+
#: includes/REST/DummyDataController.php:171
msgid "Vendors products data."
msgstr ""
#: includes/REST/DummyDataController.php:179
#: includes/REST/OrderController.php:918
-#: includes/REST/ProductController.php:1704
+#: includes/REST/ProductController.php:1705
msgid "Unique identifier for the resource."
msgstr ""
#: includes/REST/DummyDataController.php:185
#: includes/REST/OrderController.php:1274
-#: includes/REST/ProductController.php:1710
+#: includes/REST/ProductController.php:1711
msgid "Product name."
msgstr ""
#: includes/REST/DummyDataController.php:191
-#: includes/REST/ProductController.php:1715
+#: includes/REST/ProductController.php:1716
msgid "Product slug."
msgstr ""
#: includes/REST/DummyDataController.php:197
-#: includes/REST/ProductController.php:1720
+#: includes/REST/ProductController.php:1721
msgid "Product URL."
msgstr ""
#: includes/REST/DummyDataController.php:205
-#: includes/REST/ProductController.php:1727
+#: includes/REST/ProductController.php:1728
msgid "The date the product was created, in the site's timezone."
msgstr ""
#: includes/REST/DummyDataController.php:212
-#: includes/REST/ProductController.php:1733
+#: includes/REST/ProductController.php:1734
msgid "The date the product was created, as GMT."
msgstr ""
#: includes/REST/DummyDataController.php:219
-#: includes/REST/ProductController.php:1739
+#: includes/REST/ProductController.php:1740
msgid "The date the product was last modified, in the site's timezone."
msgstr ""
#: includes/REST/DummyDataController.php:226
-#: includes/REST/ProductController.php:1745
+#: includes/REST/ProductController.php:1746
msgid "The date the product was last modified, as GMT."
msgstr ""
#: includes/REST/DummyDataController.php:233
-#: includes/REST/ProductController.php:1751
+#: includes/REST/ProductController.php:1752
msgid "Product type."
msgstr ""
#: includes/REST/DummyDataController.php:242
-#: includes/REST/ProductController.php:1758
+#: includes/REST/ProductController.php:1759
msgid "Product status (post status)."
msgstr ""
#: includes/REST/DummyDataController.php:251
-#: includes/REST/ProductController.php:1765
+#: includes/REST/ProductController.php:1766
msgid "Featured product."
msgstr ""
#: includes/REST/DummyDataController.php:257
-#: includes/REST/ProductController.php:1771
+#: includes/REST/ProductController.php:1772
msgid "Catalog visibility."
msgstr ""
#: includes/REST/DummyDataController.php:265
-#: includes/REST/ProductController.php:1778
+#: includes/REST/ProductController.php:1779
msgid "Product description."
msgstr ""
#: includes/REST/DummyDataController.php:271
-#: includes/REST/ProductController.php:1783
+#: includes/REST/ProductController.php:1784
msgid "Product short description."
msgstr ""
#: includes/REST/DummyDataController.php:277
-#: includes/REST/ProductController.php:1788
+#: includes/REST/ProductController.php:1789
msgid "Unique identifier."
msgstr ""
#: includes/REST/DummyDataController.php:283
-#: includes/REST/ProductController.php:1793
+#: includes/REST/ProductController.php:1794
msgid "Current product price."
msgstr ""
#: includes/REST/DummyDataController.php:289
-#: includes/REST/ProductController.php:1799
+#: includes/REST/ProductController.php:1800
msgid "Product regular price."
msgstr ""
#: includes/REST/DummyDataController.php:295
-#: includes/REST/ProductController.php:1804
+#: includes/REST/ProductController.php:1805
msgid "Product sale price."
msgstr ""
#: includes/REST/DummyDataController.php:302
-#: includes/REST/ProductController.php:1809
+#: includes/REST/ProductController.php:1810
msgid "Start date of sale price, in the site's timezone."
msgstr ""
#: includes/REST/DummyDataController.php:308
-#: includes/REST/ProductController.php:1814
+#: includes/REST/ProductController.php:1815
msgid "Start date of sale price, as GMT."
msgstr ""
#: includes/REST/DummyDataController.php:314
-#: includes/REST/ProductController.php:1819
+#: includes/REST/ProductController.php:1820
msgid "End date of sale price, in the site's timezone."
msgstr ""
#: includes/REST/DummyDataController.php:320
-#: includes/REST/ProductController.php:1824
+#: includes/REST/ProductController.php:1825
msgid "End date of sale price, as GMT."
msgstr ""
#: includes/REST/DummyDataController.php:326
-#: includes/REST/ProductController.php:1835
+#: includes/REST/ProductController.php:1836
msgid "Shows if the product is on sale."
msgstr ""
#: includes/REST/DummyDataController.php:332
-#: includes/REST/ProductController.php:1841
+#: includes/REST/ProductController.php:1842
msgid "Shows if the product can be bought."
msgstr ""
#: includes/REST/DummyDataController.php:338
-#: includes/REST/ProductController.php:1847
+#: includes/REST/ProductController.php:1848
msgid "Amount of sales."
msgstr ""
#: includes/REST/DummyDataController.php:345
-#: includes/REST/ProductController.php:1853
+#: includes/REST/ProductController.php:1854
msgid "If the product is virtual."
msgstr ""
#: includes/REST/DummyDataController.php:352
-#: includes/REST/ProductController.php:1859
+#: includes/REST/ProductController.php:1860
msgid "If the product is downloadable."
msgstr ""
#: includes/REST/DummyDataController.php:359
-#: includes/REST/ProductController.php:1865
+#: includes/REST/ProductController.php:1866
msgid "List of downloadable files."
msgstr ""
#: includes/REST/DummyDataController.php:366
-#: includes/REST/ProductController.php:1872
+#: includes/REST/ProductController.php:1873
msgid "File MD5 hash."
msgstr ""
#: includes/REST/DummyDataController.php:373
-#: includes/REST/ProductController.php:1878
+#: includes/REST/ProductController.php:1879
msgid "File name."
msgstr ""
#: includes/REST/DummyDataController.php:379
-#: includes/REST/ProductController.php:1883
+#: includes/REST/ProductController.php:1884
msgid "File URL."
msgstr ""
#: includes/REST/DummyDataController.php:388
-#: includes/REST/ProductController.php:1891
+#: includes/REST/ProductController.php:1892
msgid "Number of times downloadable files can be downloaded after purchase."
msgstr ""
#: includes/REST/DummyDataController.php:395
-#: includes/REST/ProductController.php:1897
+#: includes/REST/ProductController.php:1898
msgid "Number of days until access to downloadable files expires."
msgstr ""
#: includes/REST/DummyDataController.php:402
-#: includes/REST/ProductController.php:1903
+#: includes/REST/ProductController.php:1904
msgid "Product external URL. Only for external products."
msgstr ""
#: includes/REST/DummyDataController.php:409
-#: includes/REST/ProductController.php:1909
+#: includes/REST/ProductController.php:1910
msgid "Product external button text. Only for external products."
msgstr ""
#: includes/REST/DummyDataController.php:415
-#: includes/REST/ProductController.php:1914
+#: includes/REST/ProductController.php:1915
msgid "Tax status."
msgstr ""
#: includes/REST/DummyDataController.php:423
-#: includes/REST/ProductController.php:1921
+#: includes/REST/ProductController.php:1922
msgid "Tax class."
msgstr ""
#: includes/REST/DummyDataController.php:429
-#: includes/REST/ProductController.php:1926
+#: includes/REST/ProductController.php:1927
msgid "Stock management at product level."
msgstr ""
#: includes/REST/DummyDataController.php:435
-#: includes/REST/ProductController.php:1932
+#: includes/REST/ProductController.php:1933
msgid "Stock quantity."
msgstr ""
#: includes/REST/DummyDataController.php:442
-#: includes/REST/ProductController.php:1937
+#: includes/REST/ProductController.php:1938
msgid "Controls whether or not the product is listed as \"in stock\" or \"out of stock\" on the frontend."
msgstr ""
#: includes/REST/DummyDataController.php:448
-#: includes/REST/ProductController.php:1943
+#: includes/REST/ProductController.php:1944
msgid "If managing stock, this controls if backorders are allowed."
msgstr ""
#: includes/REST/DummyDataController.php:455
-#: includes/REST/ProductController.php:1950
+#: includes/REST/ProductController.php:1951
msgid "Shows if backorders are allowed."
msgstr ""
#: includes/REST/DummyDataController.php:461
-#: includes/REST/ProductController.php:1956
+#: includes/REST/ProductController.php:1957
msgid "Shows if the product is on backordered."
msgstr ""
#: includes/REST/DummyDataController.php:467
-#: includes/REST/ProductController.php:1962
+#: includes/REST/ProductController.php:1963
msgid "Allow one item to be bought in a single order."
msgstr ""
#. translators: %s: weight unit
#: includes/REST/DummyDataController.php:475
-#: includes/REST/ProductController.php:1969
+#: includes/REST/ProductController.php:1970
msgid "Product weight (%s)."
msgstr ""
#: includes/REST/DummyDataController.php:481
-#: includes/REST/ProductController.php:1974
+#: includes/REST/ProductController.php:1975
msgid "Product dimensions."
msgstr ""
#. translators: %s: dimension unit
#: includes/REST/DummyDataController.php:487
-#: includes/REST/ProductController.php:1980
+#: includes/REST/ProductController.php:1981
msgid "Product length (%s)."
msgstr ""
#. translators: %s: dimension unit
#: includes/REST/DummyDataController.php:494
-#: includes/REST/ProductController.php:1986
+#: includes/REST/ProductController.php:1987
msgid "Product width (%s)."
msgstr ""
#. translators: %s: dimension unit
#: includes/REST/DummyDataController.php:501
-#: includes/REST/ProductController.php:1992
+#: includes/REST/ProductController.php:1993
msgid "Product height (%s)."
msgstr ""
#: includes/REST/DummyDataController.php:509
-#: includes/REST/ProductController.php:1999
+#: includes/REST/ProductController.php:2000
msgid "Shows if the product need to be shipped."
msgstr ""
#: includes/REST/DummyDataController.php:515
-#: includes/REST/ProductController.php:2005
+#: includes/REST/ProductController.php:2006
msgid "Shows whether or not the product shipping is taxable."
msgstr ""
#: includes/REST/DummyDataController.php:521
-#: includes/REST/ProductController.php:2011
+#: includes/REST/ProductController.php:2012
msgid "Shipping class slug."
msgstr ""
#: includes/REST/DummyDataController.php:527
-#: includes/REST/ProductController.php:2016
+#: includes/REST/ProductController.php:2017
msgid "Shipping class ID."
msgstr ""
#: includes/REST/DummyDataController.php:534
-#: includes/REST/ProductController.php:2022
+#: includes/REST/ProductController.php:2023
msgid "Allow reviews."
msgstr ""
#: includes/REST/DummyDataController.php:540
-#: includes/REST/ProductController.php:2028
+#: includes/REST/ProductController.php:2029
msgid "Reviews average rating."
msgstr ""
#: includes/REST/DummyDataController.php:547
-#: includes/REST/ProductController.php:2034
+#: includes/REST/ProductController.php:2035
msgid "Amount of reviews that the product have."
msgstr ""
#: includes/REST/DummyDataController.php:554
-#: includes/REST/ProductController.php:2040
+#: includes/REST/ProductController.php:2041
msgid "List of related products IDs."
msgstr ""
#: includes/REST/DummyDataController.php:563
-#: includes/REST/ProductController.php:2049
+#: includes/REST/ProductController.php:2050
msgid "List of up-sell products IDs."
msgstr ""
#: includes/REST/DummyDataController.php:571
-#: includes/REST/ProductController.php:2057
+#: includes/REST/ProductController.php:2058
msgid "List of cross-sell products IDs."
msgstr ""
#: includes/REST/DummyDataController.php:579
-#: includes/REST/ProductController.php:2065
+#: includes/REST/ProductController.php:2066
msgid "Product parent ID."
msgstr ""
#: includes/REST/DummyDataController.php:586
-#: includes/REST/ProductController.php:2070
+#: includes/REST/ProductController.php:2071
msgid "Optional note to send the customer after purchase."
msgstr ""
#: includes/REST/DummyDataController.php:592
-#: includes/REST/ProductController.php:2075
+#: includes/REST/ProductController.php:2076
msgid "List of categories."
msgstr ""
#: includes/REST/DummyDataController.php:599
-#: includes/REST/ProductController.php:2082
+#: includes/REST/ProductController.php:2083
msgid "Category ID."
msgstr ""
#: includes/REST/DummyDataController.php:605
-#: includes/REST/ProductController.php:2087
+#: includes/REST/ProductController.php:2088
msgid "Category name."
msgstr ""
#: includes/REST/DummyDataController.php:612
-#: includes/REST/ProductController.php:2093
+#: includes/REST/ProductController.php:2094
msgid "Category slug."
msgstr ""
#: includes/REST/DummyDataController.php:622
-#: includes/REST/ProductController.php:2102
+#: includes/REST/ProductController.php:2103
msgid "List of tags."
msgstr ""
#: includes/REST/DummyDataController.php:629
-#: includes/REST/ProductController.php:2109
+#: includes/REST/ProductController.php:2110
msgid "Tag ID."
msgstr ""
#: includes/REST/DummyDataController.php:635
-#: includes/REST/ProductController.php:2114
+#: includes/REST/ProductController.php:2115
msgid "Tag name."
msgstr ""
#: includes/REST/DummyDataController.php:642
-#: includes/REST/ProductController.php:2120
+#: includes/REST/ProductController.php:2121
msgid "Tag slug."
msgstr ""
#: includes/REST/DummyDataController.php:652
-#: includes/REST/ProductController.php:2129
+#: includes/REST/ProductController.php:2130
msgid "List of images."
msgstr ""
#: includes/REST/DummyDataController.php:659
-#: includes/REST/ProductController.php:2136
+#: includes/REST/ProductController.php:2137
msgid "Image ID."
msgstr ""
#: includes/REST/DummyDataController.php:665
-#: includes/REST/ProductController.php:2141
+#: includes/REST/ProductController.php:2142
msgid "The date the image was created, in the site's timezone."
msgstr ""
#: includes/REST/DummyDataController.php:673
-#: includes/REST/ProductController.php:2147
+#: includes/REST/ProductController.php:2148
msgid "The date the image was created, as GMT."
msgstr ""
#: includes/REST/DummyDataController.php:681
-#: includes/REST/ProductController.php:2153
+#: includes/REST/ProductController.php:2154
msgid "The date the image was last modified, in the site's timezone."
msgstr ""
#: includes/REST/DummyDataController.php:689
-#: includes/REST/ProductController.php:2159
+#: includes/REST/ProductController.php:2160
msgid "The date the image was last modified, as GMT."
msgstr ""
#: includes/REST/DummyDataController.php:697
-#: includes/REST/ProductController.php:2165
+#: includes/REST/ProductController.php:2166
msgid "Image URL."
msgstr ""
#: includes/REST/DummyDataController.php:704
-#: includes/REST/ProductController.php:2171
+#: includes/REST/ProductController.php:2172
msgid "Image name."
msgstr ""
#: includes/REST/DummyDataController.php:710
-#: includes/REST/ProductController.php:2176
+#: includes/REST/ProductController.php:2177
msgid "Image alternative text."
msgstr ""
#: includes/REST/DummyDataController.php:716
-#: includes/REST/ProductController.php:2181
+#: includes/REST/ProductController.php:2182
msgid "Image position. 0 means that the image is featured."
msgstr ""
#: includes/REST/DummyDataController.php:726
-#: includes/REST/ProductController.php:2189
+#: includes/REST/ProductController.php:2190
msgid "List of attributes."
msgstr ""
#: includes/REST/DummyDataController.php:733
#: includes/REST/DummyDataController.php:783
-#: includes/REST/ProductController.php:2196
-#: includes/REST/ProductController.php:2241
+#: includes/REST/ProductController.php:2197
+#: includes/REST/ProductController.php:2242
msgid "Attribute ID."
msgstr ""
#: includes/REST/DummyDataController.php:739
#: includes/REST/DummyDataController.php:789
#: includes/REST/ProductAttributeController.php:181
-#: includes/REST/ProductController.php:2201
-#: includes/REST/ProductController.php:2246
+#: includes/REST/ProductController.php:2202
+#: includes/REST/ProductController.php:2247
msgid "Attribute name."
msgstr ""
#: includes/REST/DummyDataController.php:745
-#: includes/REST/ProductController.php:2206
+#: includes/REST/ProductController.php:2207
msgid "Attribute position."
msgstr ""
#: includes/REST/DummyDataController.php:752
-#: includes/REST/ProductController.php:2211
+#: includes/REST/ProductController.php:2212
msgid "Define if the attribute is visible on the \"Additional information\" tab in the product's page."
msgstr ""
#: includes/REST/DummyDataController.php:758
-#: includes/REST/ProductController.php:2217
+#: includes/REST/ProductController.php:2218
msgid "Define if the attribute can be used as variation."
msgstr ""
#: includes/REST/DummyDataController.php:764
-#: includes/REST/ProductController.php:2223
+#: includes/REST/ProductController.php:2224
msgid "List of available term names of the attribute."
msgstr ""
#: includes/REST/DummyDataController.php:776
-#: includes/REST/ProductController.php:2234
+#: includes/REST/ProductController.php:2235
msgid "Defaults variation attributes."
msgstr ""
#: includes/REST/DummyDataController.php:795
-#: includes/REST/ProductController.php:2251
+#: includes/REST/ProductController.php:2252
msgid "Selected attribute term name."
msgstr ""
#: includes/REST/DummyDataController.php:804
-#: includes/REST/ProductController.php:2259
+#: includes/REST/ProductController.php:2260
msgid "List of variations IDs."
msgstr ""
#: includes/REST/DummyDataController.php:814
-#: includes/REST/ProductController.php:2268
+#: includes/REST/ProductController.php:2269
msgid "List of grouped products ID."
msgstr ""
#: includes/REST/DummyDataController.php:823
-#: includes/REST/ProductController.php:2276
+#: includes/REST/ProductController.php:2277
msgid "Menu order, used to custom sort products."
msgstr ""
@@ -5177,7 +5284,7 @@ msgstr ""
#: includes/REST/OrderController.php:1524
#: includes/REST/OrderController.php:1622
#: includes/REST/OrderController.php:1680
-#: includes/REST/ProductController.php:2281
+#: includes/REST/ProductController.php:2282
msgid "Meta data."
msgstr ""
@@ -5188,7 +5295,7 @@ msgstr ""
#: includes/REST/OrderController.php:1531
#: includes/REST/OrderController.php:1629
#: includes/REST/OrderController.php:1687
-#: includes/REST/ProductController.php:2288
+#: includes/REST/ProductController.php:2289
msgid "Meta ID."
msgstr ""
@@ -5199,7 +5306,7 @@ msgstr ""
#: includes/REST/OrderController.php:1537
#: includes/REST/OrderController.php:1635
#: includes/REST/OrderController.php:1693
-#: includes/REST/ProductController.php:2294
+#: includes/REST/ProductController.php:2295
msgid "Meta key."
msgstr ""
@@ -5210,7 +5317,7 @@ msgstr ""
#: includes/REST/OrderController.php:1542
#: includes/REST/OrderController.php:1640
#: includes/REST/OrderController.php:1698
-#: includes/REST/ProductController.php:2299
+#: includes/REST/ProductController.php:2300
msgid "Meta value."
msgstr ""
@@ -5902,55 +6009,55 @@ msgid "Placeholder"
msgstr ""
#. translators: %s: attachment id
-#: includes/REST/ProductController.php:1519
+#: includes/REST/ProductController.php:1520
msgid "#%s is an invalid image ID."
msgstr ""
-#: includes/REST/ProductController.php:1829
+#: includes/REST/ProductController.php:1830
msgid "Price formatted in HTML."
msgstr ""
-#: includes/REST/ProductControllerV2.php:124
+#: includes/REST/ProductControllerV2.php:126
msgid "Products author id"
msgstr ""
-#: includes/REST/ProductControllerV2.php:132
+#: includes/REST/ProductControllerV2.php:134
msgid "Product status publish, pending, draft etc."
msgstr ""
-#: includes/REST/ProductControllerV2.php:140
+#: includes/REST/ProductControllerV2.php:142
msgid "Products publish month"
msgstr ""
-#: includes/REST/ProductControllerV2.php:148
+#: includes/REST/ProductControllerV2.php:150
msgid "Products category."
msgstr ""
-#: includes/REST/ProductControllerV2.php:156
+#: includes/REST/ProductControllerV2.php:158
msgid "Products type simple, variable, grouped product etc."
msgstr ""
-#: includes/REST/ProductControllerV2.php:164
+#: includes/REST/ProductControllerV2.php:166
msgid "Products stock status in stock or out of stock."
msgstr ""
-#: includes/REST/ProductControllerV2.php:172
+#: includes/REST/ProductControllerV2.php:174
msgid "Best selling, featured products etc."
msgstr ""
-#: includes/REST/ProductControllerV2.php:302
+#: includes/REST/ProductControllerV2.php:304
msgid "All product created months."
msgstr ""
-#: includes/REST/ProductControllerV2.php:309
+#: includes/REST/ProductControllerV2.php:311
msgid "Product publish year."
msgstr ""
-#: includes/REST/ProductControllerV2.php:313
+#: includes/REST/ProductControllerV2.php:315
msgid "Product publish month."
msgstr ""
-#: includes/REST/ProductControllerV2.php:317
+#: includes/REST/ProductControllerV2.php:319
msgid "Product publish month and year full title."
msgstr ""
@@ -6129,7 +6236,7 @@ msgid "Invalid user ID for reassignment."
msgstr ""
#: includes/REST/StoreController.php:538
-#: includes/REST/StoreController.php:934
+#: includes/REST/StoreController.php:941
msgid "No store found"
msgstr ""
@@ -6138,36 +6245,36 @@ msgstr ""
msgid "No reviews found"
msgstr ""
-#: includes/REST/StoreController.php:760
+#: includes/REST/StoreController.php:767
msgid "This email address is not valid"
msgstr ""
-#: includes/REST/StoreController.php:803
+#: includes/REST/StoreController.php:810
msgid "No vendor is found to be send an email."
msgstr ""
-#: includes/REST/StoreController.php:850
+#: includes/REST/StoreController.php:857
msgid "Status parameter must be active or inactive"
msgstr ""
-#: includes/REST/StoreController.php:856
+#: includes/REST/StoreController.php:863
msgid "No vendor found for updating status"
msgstr ""
-#: includes/REST/StoreController.php:884
+#: includes/REST/StoreController.php:891
msgid "No items found for bulk updating"
msgstr ""
-#: includes/REST/StoreController.php:953
+#: includes/REST/StoreController.php:975
msgid "Status of the store"
msgstr ""
-#: includes/REST/StoreController.php:960
+#: includes/REST/StoreController.php:982
msgid "Store List Order By"
msgstr ""
-#: includes/REST/StoreController.php:966
-#: includes/REST/StoreController.php:972
+#: includes/REST/StoreController.php:988
+#: includes/REST/StoreController.php:994
msgid "Store List Order"
msgstr ""
@@ -6703,7 +6810,7 @@ msgstr ""
#: includes/template-tags.php:582
#: includes/Widgets/StoreContactForm.php:40
-#: includes/Widgets/StoreContactForm.php:118
+#: includes/Widgets/StoreContactForm.php:117
msgid "Contact Vendor"
msgstr ""
@@ -6722,35 +6829,35 @@ msgid "Dokan Data Update Required"
msgstr ""
#: includes/Upgrade/AdminNotice.php:40
-msgid "We need to update your install to the latest version"
+msgid "Updating your Dokan data is required to continue functional operations. Kindly backup your database before running upgrade for safety."
msgstr ""
-#: includes/Upgrade/AdminNotice.php:45
+#: includes/Upgrade/AdminNotice.php:46
#: templates/orders/details.php:194
msgid "Update"
msgstr ""
-#: includes/Upgrade/AdminNotice.php:46
+#: includes/Upgrade/AdminNotice.php:47
msgid "Updating..."
msgstr ""
-#: includes/Upgrade/AdminNotice.php:47
+#: includes/Upgrade/AdminNotice.php:48
msgid "Updated"
msgstr ""
-#: includes/Upgrade/AdminNotice.php:49
+#: includes/Upgrade/AdminNotice.php:50
msgid "It is strongly recommended that you backup your database before proceeding. Are you sure you wish to run the updater now?"
msgstr ""
-#: includes/Upgrade/AdminNotice.php:73
+#: includes/Upgrade/AdminNotice.php:74
msgid "You are not authorize to perform this operation."
msgstr ""
-#: includes/Upgrade/AdminNotice.php:77
+#: includes/Upgrade/AdminNotice.php:78
msgid "There is an upgrading process going on."
msgstr ""
-#: includes/Upgrade/AdminNotice.php:81
+#: includes/Upgrade/AdminNotice.php:82
msgid "Update is not required."
msgstr ""
@@ -7128,14 +7235,14 @@ msgstr ""
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:535
#: templates/admin-setup-wizard/step-selling.php:9
-#: templates/admin-setup-wizard/step-selling.php:43
+#: templates/admin-setup-wizard/step-selling.php:22
#: templates/admin-setup-wizard/step-store.php:105
msgid "On"
msgstr ""
#: includes/Vendor/SettingsApi/Settings/Pages/Store.php:536
#: templates/admin-setup-wizard/step-selling.php:10
-#: templates/admin-setup-wizard/step-selling.php:44
+#: templates/admin-setup-wizard/step-selling.php:23
#: templates/admin-setup-wizard/step-store.php:106
msgid "Off"
msgstr ""
@@ -7259,140 +7366,141 @@ msgstr ""
msgid "Switched back to %1$s (%2$s)."
msgstr ""
-#: includes/Vendor/Vendor.php:925
+#: includes/Vendor/Vendor.php:916
msgid "No ratings found yet!"
msgstr ""
-#: includes/Vendor/Vendor.php:927
+#: includes/Vendor/Vendor.php:918
msgid "%s rating from %d review"
msgid_plural "%s rating from %d reviews"
msgstr[0] ""
msgstr[1] ""
-#: includes/Vendor/Vendor.php:928
+#: includes/Vendor/Vendor.php:919
msgid "Rated %s out of %d"
msgstr ""
-#: includes/Vendor/Vendor.php:1039
+#: includes/Vendor/Vendor.php:1019
#: templates/settings/store-form.php:252
msgid "Store is open"
msgstr ""
-#: includes/Vendor/Vendor.php:1053
+#: includes/Vendor/Vendor.php:1033
#: templates/settings/store-form.php:260
msgid "Store is closed"
msgstr ""
-#: includes/wc-functions.php:401
+#: includes/wc-functions.php:402
msgid "Product SKU must be unique"
msgstr ""
-#: includes/wc-functions.php:820
-#: templates/account/update-customer-to-vendor.php:23
-#: templates/account/vendor-registration.php:9
-#: templates/global/seller-registration-form.php:13
+#: includes/wc-functions.php:825
+#: templates/account/update-customer-to-vendor.php:26
+#: templates/account/vendor-registration.php:18
+#: templates/global/seller-registration-form.php:16
#: assets/js/vue-admin.js:2
#: assets/js/vue-bootstrap.js:2
msgid "First Name"
msgstr ""
-#: includes/wc-functions.php:821
-#: templates/account/update-customer-to-vendor.php:27
-#: templates/account/vendor-registration.php:14
-#: templates/global/seller-registration-form.php:18
+#: includes/wc-functions.php:826
+#: templates/account/update-customer-to-vendor.php:30
+#: templates/account/vendor-registration.php:23
+#: templates/global/seller-registration-form.php:21
#: assets/js/vue-admin.js:2
#: assets/js/vue-bootstrap.js:2
msgid "Last Name"
msgstr ""
-#: includes/wc-functions.php:822
-#: templates/account/vendor-registration.php:27
+#: includes/wc-functions.php:827
+#: templates/account/vendor-registration.php:36
#: templates/dashboard/edit-account.php:65
msgid "Email address"
msgstr ""
-#: includes/wc-functions.php:828
+#: includes/wc-functions.php:833
msgid "is a required field."
msgstr ""
-#: includes/wc-functions.php:834
+#: includes/wc-functions.php:839
msgid "Please provide a valid email address."
msgstr ""
-#: includes/wc-functions.php:836
+#: includes/wc-functions.php:841
msgid "This email address is already registered."
msgstr ""
-#: includes/wc-functions.php:842
+#: includes/wc-functions.php:847
msgid "Your current password is incorrect."
msgstr ""
-#: includes/wc-functions.php:847
+#: includes/wc-functions.php:852
msgid "Please fill out all password fields."
msgstr ""
-#: includes/wc-functions.php:850
+#: includes/wc-functions.php:855
msgid "Please enter your current password."
msgstr ""
-#: includes/wc-functions.php:853
+#: includes/wc-functions.php:858
msgid "Please re-enter your password."
msgstr ""
-#: includes/wc-functions.php:856
+#: includes/wc-functions.php:861
msgid "New passwords do not match."
msgstr ""
-#: includes/wc-functions.php:876
+#: includes/wc-functions.php:881
msgid "Account details changed successfully."
msgstr ""
-#: includes/wc-functions.php:922
+#: includes/wc-functions.php:927
msgid "More Products"
msgstr ""
-#: includes/wc-functions.php:975
+#: includes/wc-functions.php:980
msgid "No product has been found!"
msgstr ""
-#: includes/wc-functions.php:1048
+#: includes/wc-functions.php:1053
msgid "Reviews cannot be posted for products that you own."
msgstr ""
#: includes/wc-template.php:171
+#: templates/products/dokan-products-edit-bulk-commission.php:20
msgid "â No change â"
msgstr ""
-#: includes/wc-template.php:280
+#: includes/wc-template.php:298
msgid "Go to Vendor Dashboard"
msgstr ""
-#: includes/Widgets/BestSellingProducts.php:65
+#: includes/Widgets/BestSellingProducts.php:66
msgid "Best Selling Product"
msgstr ""
-#: includes/Widgets/BestSellingProducts.php:72
-#: includes/Widgets/FilterByAttributes.php:109
-#: includes/Widgets/ProductCategoryMenu.php:95
+#: includes/Widgets/BestSellingProducts.php:73
+#: includes/Widgets/FilterByAttributes.php:110
+#: includes/Widgets/ProductCategoryMenu.php:96
#: includes/Widgets/StoreCategoryMenu.php:88
-#: includes/Widgets/StoreContactForm.php:125
+#: includes/Widgets/StoreContactForm.php:124
#: includes/Widgets/StoreLocation.php:108
#: includes/Widgets/StoreOpenClose.php:117
-#: includes/Widgets/TopratedProducts.php:74
+#: includes/Widgets/TopratedProducts.php:75
msgid "Title:"
msgstr ""
-#: includes/Widgets/BestSellingProducts.php:76
-#: includes/Widgets/TopratedProducts.php:78
+#: includes/Widgets/BestSellingProducts.php:77
+#: includes/Widgets/TopratedProducts.php:79
msgid "No of Product:"
msgstr ""
-#: includes/Widgets/BestSellingProducts.php:81
-#: includes/Widgets/TopratedProducts.php:83
+#: includes/Widgets/BestSellingProducts.php:82
+#: includes/Widgets/TopratedProducts.php:84
msgid "Show Product Rating"
msgstr ""
-#: includes/Widgets/BestSellingProducts.php:85
+#: includes/Widgets/BestSellingProducts.php:86
msgid "Hide Out of Stock"
msgstr ""
@@ -7404,23 +7512,23 @@ msgstr ""
msgid "A Widget for displaying products by attribute for dokan"
msgstr ""
-#: includes/Widgets/FilterByAttributes.php:84
+#: includes/Widgets/FilterByAttributes.php:85
msgid "Filter by"
msgstr ""
-#: includes/Widgets/FilterByAttributes.php:102
+#: includes/Widgets/FilterByAttributes.php:103
msgid "AND"
msgstr ""
-#: includes/Widgets/FilterByAttributes.php:103
+#: includes/Widgets/FilterByAttributes.php:104
msgid "OR"
msgstr ""
-#: includes/Widgets/FilterByAttributes.php:113
+#: includes/Widgets/FilterByAttributes.php:114
msgid "Attribute"
msgstr ""
-#: includes/Widgets/FilterByAttributes.php:121
+#: includes/Widgets/FilterByAttributes.php:122
msgid "Query Type"
msgstr ""
@@ -7428,7 +7536,7 @@ msgstr ""
msgid "Dokan product category menu"
msgstr ""
-#: includes/Widgets/ProductCategoryMenu.php:88
+#: includes/Widgets/ProductCategoryMenu.php:89
msgid "Product Category"
msgstr ""
@@ -7472,7 +7580,7 @@ msgstr ""
msgid "A Widget for displaying To rated products for dokan"
msgstr ""
-#: includes/Widgets/TopratedProducts.php:67
+#: includes/Widgets/TopratedProducts.php:68
msgid "Top Rated Product"
msgstr ""
@@ -7673,13 +7781,9 @@ msgstr ""
msgid "Choose file"
msgstr ""
-#: lib/class.category-walker.php:13
-msgid "Use `WeDevs\\Dokan\\Walkers\\CategoryDropdownSingle` instead."
-msgstr ""
-
#: templates/account/become-a-vendor-section.php:16
#: templates/account/become-a-vendor-section.php:20
-#: templates/account/update-customer-to-vendor.php:75
+#: templates/account/update-customer-to-vendor.php:78
msgid "Become a Vendor"
msgstr ""
@@ -7687,96 +7791,96 @@ msgstr ""
msgid "Vendors can sell products and manage a store with a vendor dashboard."
msgstr ""
-#: templates/account/update-customer-to-vendor.php:18
+#: templates/account/update-customer-to-vendor.php:21
msgid "Update account to Vendor"
msgstr ""
-#: templates/account/update-customer-to-vendor.php:33
-#: templates/account/vendor-registration.php:52
-#: templates/global/seller-registration-form.php:24
+#: templates/account/update-customer-to-vendor.php:36
+#: templates/account/vendor-registration.php:61
+#: templates/global/seller-registration-form.php:27
msgid "Shop Name"
msgstr ""
-#: templates/account/update-customer-to-vendor.php:38
-#: templates/account/vendor-registration.php:57
-#: templates/global/seller-registration-form.php:29
+#: templates/account/update-customer-to-vendor.php:41
+#: templates/account/vendor-registration.php:66
+#: templates/global/seller-registration-form.php:32
msgid "Shop URL"
msgstr ""
-#: templates/account/update-customer-to-vendor.php:64
+#: templates/account/update-customer-to-vendor.php:67
msgid "Terms & Conditions"
msgstr ""
#. translators: 1. Terms and conditions of agreement link.
-#: templates/account/update-customer-to-vendor.php:66
+#: templates/account/update-customer-to-vendor.php:69
msgid "I have read and agree to the %1$s."
msgstr ""
-#: templates/account/vendor-registration.php:21
+#: templates/account/vendor-registration.php:30
#: templates/login-form/login-form.php:4
#: assets/js/vue-admin.js:2
#: assets/js/vue-bootstrap.js:2
msgid "Username"
msgstr ""
-#: templates/account/vendor-registration.php:31
+#: templates/account/vendor-registration.php:40
msgid "A link to set a new password will be sent to your email address."
msgstr ""
-#: templates/account/vendor-registration.php:43
+#: templates/account/vendor-registration.php:52
#: templates/login-form/login-form.php:9
#: assets/js/vue-admin.js:2
#: assets/js/vue-bootstrap.js:2
msgid "Password"
msgstr ""
-#: templates/account/vendor-registration.php:49
+#: templates/account/vendor-registration.php:58
msgid "Anti-spam"
msgstr ""
#. translators: %1$s: opening anchor tag with link, %2$s: an ampersand %3$s: closing anchor tag
-#: templates/account/vendor-registration.php:92
-#: templates/global/seller-registration-form.php:67
+#: templates/account/vendor-registration.php:101
+#: templates/global/seller-registration-form.php:70
msgid "I have read and agree to the %1$sTerms %2$s Conditions%3$s."
msgstr ""
-#: templates/account/vendor-registration.php:107
+#: templates/account/vendor-registration.php:116
msgid "Register"
msgstr ""
-#: templates/admin-header.php:19
+#: templates/admin-header.php:74
msgid "Get Help"
msgstr ""
-#: templates/admin-header.php:34
+#: templates/admin-header.php:89
msgid "Whatâs New"
msgstr ""
-#: templates/admin-header.php:47
+#: templates/admin-header.php:102
msgid "Get Support"
msgstr ""
-#: templates/admin-header.php:55
+#: templates/admin-header.php:110
msgid "Community"
msgstr ""
-#: templates/admin-header.php:72
+#: templates/admin-header.php:127
msgid "FAQ"
msgstr ""
-#: templates/admin-header.php:80
+#: templates/admin-header.php:135
msgid "Basic & Fundamental"
msgstr ""
-#: templates/admin-header.php:89
+#: templates/admin-header.php:144
msgid "Request a Feature"
msgstr ""
-#: templates/admin-header.php:97
+#: templates/admin-header.php:152
msgid "Run Setup Wizard"
msgstr ""
-#: templates/admin-header.php:105
+#: templates/admin-header.php:160
#: assets/js/vue-admin.js:2
msgid "Import dummy data"
msgstr ""
@@ -7795,6 +7899,10 @@ msgstr ""
msgid "%1$sDokan is inactive.%2$s The %3$sWooCommerce plugin%4$s must be active for Dokan to work. Please %5$s activate WooCommerce »%6$s"
msgstr ""
+#: templates/admin-setup-wizard/step-commission.php:7
+msgid "Commission Setup"
+msgstr ""
+
#. translators: %1$s: line break and opening strong tag, %2$s: closing strong tag
#: templates/admin-setup-wizard/step-no-wc-introduction.php:8
msgid "Thanks for choosing Dokan to power your online marketplace! This quick setup wizard will help you configure the basic settings. %1$sThis setup wizard is completely optional and shouldn't take longer than three minutes.%2$s"
@@ -7826,19 +7934,7 @@ msgstr ""
msgid "Make selling status enable for new registred vendor"
msgstr ""
-#: templates/admin-setup-wizard/step-selling.php:18
-msgid "Commission Type"
-msgstr ""
-
-#: templates/admin-setup-wizard/step-selling.php:27
-msgid "Set your commission type"
-msgstr ""
-
-#: templates/admin-setup-wizard/step-selling.php:35
-msgid "How much amount (%) you will get from each order"
-msgstr ""
-
-#: templates/admin-setup-wizard/step-selling.php:47
+#: templates/admin-setup-wizard/step-selling.php:26
msgid "Vendor can change order status"
msgstr ""
@@ -7897,14 +7993,26 @@ msgstr ""
msgid "Define vendor store URL"
msgstr ""
+#: templates/admin-setup-wizard/step-store.php:14
+msgid "Shipping Fee Recipient"
+msgstr ""
+
#: templates/admin-setup-wizard/step-store.php:23
msgid "Shipping fees will go to"
msgstr ""
+#: templates/admin-setup-wizard/step-store.php:27
+msgid "Product Tax Fee Recipient"
+msgstr ""
+
#: templates/admin-setup-wizard/step-store.php:36
msgid "Product Tax fees will go to"
msgstr ""
+#: templates/admin-setup-wizard/step-store.php:41
+msgid "Shipping Tax Fee Recipient"
+msgstr ""
+
#: templates/admin-setup-wizard/step-store.php:51
msgid "Shipping Tax fees will go to"
msgstr ""
@@ -7944,6 +8052,8 @@ msgstr ""
#: templates/dashboard/big-counter-widget.php:21
#: templates/orders/listing.php:32
#: templates/orders/listing.php:80
+#: templates/products/products-listing-row.php:225
+#: templates/products/products-listing.php:128
msgid "Earning"
msgstr ""
@@ -8168,6 +8278,7 @@ msgstr ""
msgid "Your product %s"
msgstr ""
+#. translators: 1) product title
#: templates/emails/plain/product-published.php:25
msgid "has been approved by one of our admin, congrats!"
msgstr ""
@@ -8209,7 +8320,7 @@ msgstr ""
#: templates/emails/plain/reverse-withdrawal-invoice.php:43
#: templates/emails/reverse-withdrawal-invoice.php:73
-#: templates/reverse-withdrawal/reverse-balance.php:40
+#: templates/reverse-withdrawal/reverse-balance.php:45
msgid "Pay Now"
msgstr ""
@@ -8402,11 +8513,11 @@ msgstr ""
#: templates/emails/vendor-completed-order.php:56
#: templates/emails/vendor-new-order.php:55
-#: templates/products/edit-product-single.php:249
+#: templates/products/edit-product-single.php:290
#: templates/products/new-product.php:221
-#: templates/products/products-listing-row.php:91
+#: templates/products/products-listing-row.php:207
#: templates/products/products-listing.php:127
-#: templates/products/tmpl-add-product-popup.php:57
+#: templates/products/tmpl-add-product-popup.php:56
msgid "Price"
msgstr ""
@@ -8495,16 +8606,16 @@ msgstr ""
msgid "Address:"
msgstr ""
-#: templates/global/seller-registration-form.php:87
+#: templates/global/seller-registration-form.php:90
msgid "I am a customer"
msgstr ""
-#: templates/global/seller-registration-form.php:92
+#: templates/global/seller-registration-form.php:95
msgid "I am a vendor"
msgstr ""
#: templates/global/seller-warning.php:11
-#: templates/products/edit-product-single.php:174
+#: templates/products/edit-product-single.php:206
#: templates/products/new-product.php:119
msgid "Error!"
msgstr ""
@@ -8569,6 +8680,54 @@ msgstr ""
msgid "No orders found!"
msgstr ""
+#: templates/orders/commission-meta-box-html.php:63
+#: templates/products/products-listing-row.php:235
+#: templates/products/products-listing.php:129
+msgid "Type"
+msgstr ""
+
+#: templates/orders/commission-meta-box-html.php:64
+msgid "Rate"
+msgstr ""
+
+#: templates/orders/commission-meta-box-html.php:65
+#: templates/orders/details.php:33
+msgid "Qty"
+msgstr ""
+
+#: templates/orders/commission-meta-box-html.php:120
+msgid "Variation ID:"
+msgstr ""
+
+#. translators: %s: variation id
+#: templates/orders/commission-meta-box-html.php:126
+msgid "%s (No longer exists)"
+msgstr ""
+
+#: templates/orders/commission-meta-box-html.php:208
+msgid "Net total:"
+msgstr ""
+
+#: templates/orders/commission-meta-box-html.php:222
+msgid "Vendor earning:"
+msgstr ""
+
+#: templates/orders/commission-meta-box-html.php:237
+msgid "Shipping Fee:"
+msgstr ""
+
+#: templates/orders/commission-meta-box-html.php:269
+msgid "Product Tax Fee:"
+msgstr ""
+
+#: templates/orders/commission-meta-box-html.php:301
+msgid "Shipping Tax Fee:"
+msgstr ""
+
+#: templates/orders/commission-meta-box-html.php:340
+msgid "Total commission:"
+msgstr ""
+
#: templates/orders/date-export.php:16
msgid "Filter by registered customer"
msgstr ""
@@ -8618,10 +8777,6 @@ msgstr ""
msgid "Item"
msgstr ""
-#: templates/orders/details.php:33
-msgid "Qty"
-msgstr ""
-
#: templates/orders/details.php:35
msgid "Totals"
msgstr ""
@@ -8745,7 +8900,7 @@ msgid "Select bulk action"
msgstr ""
#: templates/orders/listing.php:34
-#: templates/orders/listing.php:86
+#: templates/orders/listing.php:96
msgid "Customer"
msgstr ""
@@ -8755,7 +8910,7 @@ msgid "Shipment"
msgstr ""
#: templates/orders/listing.php:41
-#: templates/orders/listing.php:122
+#: templates/orders/listing.php:132
#: templates/products/downloadable.php:40
msgid "Action"
msgstr ""
@@ -8766,34 +8921,34 @@ msgstr ""
msgid "Order %s"
msgstr ""
-#: templates/orders/listing.php:89
+#: templates/orders/listing.php:99
msgid "Guest"
msgstr ""
-#: templates/orders/listing.php:96
-#: templates/orders/listing.php:97
-#: templates/products/products-listing-row.php:131
-#: templates/products/products-listing-row.php:132
+#: templates/orders/listing.php:106
+#: templates/orders/listing.php:107
+#: templates/products/products-listing-row.php:294
+#: templates/products/products-listing-row.php:295
msgid "Unpublished"
msgstr ""
#. translators: 1) human-readable date
#. translators: %s: time difference
-#: templates/orders/listing.php:105
-#: templates/products/products-listing-row.php:153
+#: templates/orders/listing.php:115
+#: templates/products/products-listing-row.php:316
msgid "%s ago"
msgstr ""
-#: templates/orders/listing.php:116
+#: templates/orders/listing.php:126
#: templates/sub-orders.php:79
msgid "Shipping Status"
msgstr ""
-#: templates/orders/listing.php:141
+#: templates/orders/listing.php:151
msgid "Complete"
msgstr ""
-#: templates/orders/listing.php:193
+#: templates/orders/listing.php:203
msgid "No orders found"
msgstr ""
@@ -8830,7 +8985,7 @@ msgstr ""
msgid "Access Expires"
msgstr ""
-#: templates/orders/order-download-permission-html.php:68
+#: templates/orders/order-download-permission-html.php:72
#: templates/products/downloadable.php:64
msgid "Never"
msgstr ""
@@ -8855,6 +9010,10 @@ msgstr ""
msgid "← Orders"
msgstr ""
+#: templates/orders/sub-order-related-order-meta-box-html.php:68
+msgid "(Parent order)"
+msgstr ""
+
#: templates/products/add-new-product-modal.php:2
#: templates/products/edit-product-single.php:147
#: templates/products/new-product.php:107
@@ -8870,15 +9029,18 @@ msgid "Enable/Disable Catalog Mode for this product"
msgstr ""
#: templates/products/dokan-category-header-ui.php:23
+#: assets/js/dokan-setup-wizard-commission.js:1
+#: assets/js/vue-admin.js:2
+#: assets/js/vue-bootstrap.js:2
msgid "Category"
msgstr ""
-#: templates/products/dokan-category-header-ui.php:30
+#: templates/products/dokan-category-header-ui.php:31
#: templates/products/listing-filter.php:32
msgid "- Select a category -"
msgstr ""
-#: templates/products/dokan-category-header-ui.php:50
+#: templates/products/dokan-category-header-ui.php:52
msgid "+ Add new category"
msgstr ""
@@ -8894,20 +9056,24 @@ msgstr ""
msgid "Search category"
msgstr ""
-#: templates/products/dokan-category-ui.php:43
+#: templates/products/dokan-category-ui.php:48
msgid "Selected: "
msgstr ""
-#: templates/products/dokan-category-ui.php:45
+#: templates/products/dokan-category-ui.php:50
msgid "No category"
msgstr ""
-#: templates/products/dokan-category-ui.php:49
+#: templates/products/dokan-category-ui.php:54
msgid "Done"
msgstr ""
+#: templates/products/dokan-products-edit-bulk-commission.php:21
+msgid "Change to:"
+msgstr ""
+
#: templates/products/download-virtual.php:4
-#: templates/products/products-listing-row.php:110
+#: templates/products/products-listing-row.php:245
msgid "Downloadable"
msgstr ""
@@ -8916,7 +9082,7 @@ msgid "Downloadable products give access to a file upon purchase."
msgstr ""
#: templates/products/download-virtual.php:9
-#: templates/products/products-listing-row.php:108
+#: templates/products/products-listing-row.php:243
msgid "Virtual"
msgstr ""
@@ -8937,7 +9103,7 @@ msgid "Add File"
msgstr ""
#: templates/products/downloadable.php:38
-#: templates/products/products-listing-row.php:52
+#: templates/products/products-listing-row.php:100
#: templates/products/products-listing.php:120
msgid "Name"
msgstr ""
@@ -8974,109 +9140,113 @@ msgstr ""
msgid "Edit Product"
msgstr ""
-#: templates/products/edit-product-single.php:158
+#: templates/products/edit-product-single.php:179
msgid "View Product"
msgstr ""
-#: templates/products/edit-product-single.php:182
+#: templates/products/edit-product-single.php:214
#: templates/products/new-product.php:127
#: assets/js/vue-admin.js:2
msgid "Success!"
msgstr ""
-#: templates/products/edit-product-single.php:182
+#: templates/products/edit-product-single.php:214
msgid "The product has been saved successfully."
msgstr ""
-#: templates/products/edit-product-single.php:185
+#: templates/products/edit-product-single.php:217
msgid "View Product →"
msgstr ""
-#: templates/products/edit-product-single.php:204
+#: templates/products/edit-product-single.php:236
msgid "Title"
msgstr ""
-#: templates/products/edit-product-single.php:210
+#: templates/products/edit-product-single.php:242
#: templates/products/new-product.php:215
-#: templates/products/tmpl-add-product-popup.php:51
+#: templates/products/tmpl-add-product-popup.php:50
msgid "Product name.."
msgstr ""
-#: templates/products/edit-product-single.php:216
+#: templates/products/edit-product-single.php:248
msgid "Please enter product title!"
msgstr ""
-#: templates/products/edit-product-single.php:232
+#: templates/products/edit-product-single.php:264
msgid "Product Type"
msgstr ""
-#: templates/products/edit-product-single.php:232
+#: templates/products/edit-product-single.php:264
msgid "Choose Variable if your product has multiple attributes - like sizes, colors, quality etc"
msgstr ""
-#: templates/products/edit-product-single.php:258
-#: templates/products/edit-product-single.php:281
+#: templates/products/edit-product-single.php:295
+msgid " You Earn : "
+msgstr ""
+
+#: templates/products/edit-product-single.php:320
+#: templates/products/edit-product-single.php:343
msgid "0.00"
msgstr ""
-#: templates/products/edit-product-single.php:268
+#: templates/products/edit-product-single.php:330
#: templates/products/new-product.php:230
-#: templates/products/tmpl-add-product-popup.php:66
+#: templates/products/tmpl-add-product-popup.php:65
msgid "Discounted Price"
msgstr ""
-#: templates/products/edit-product-single.php:269
+#: templates/products/edit-product-single.php:331
#: templates/products/new-product.php:231
-#: templates/products/tmpl-add-product-popup.php:67
+#: templates/products/tmpl-add-product-popup.php:66
msgid "Schedule"
msgstr ""
-#: templates/products/edit-product-single.php:292
+#: templates/products/edit-product-single.php:354
msgid "Product price can't be less than the vendor fee!"
msgstr ""
-#: templates/products/edit-product-single.php:300
-#: templates/products/edit-product-single.php:307
+#: templates/products/edit-product-single.php:362
+#: templates/products/edit-product-single.php:369
#: templates/products/new-product.php:246
#: templates/products/new-product.php:253
-#: templates/products/tmpl-add-product-popup.php:82
-#: templates/products/tmpl-add-product-popup.php:89
+#: templates/products/tmpl-add-product-popup.php:81
+#: templates/products/tmpl-add-product-popup.php:88
msgid "YYYY-MM-DD"
msgstr ""
-#: templates/products/edit-product-single.php:325
+#: templates/products/edit-product-single.php:380
#: templates/products/new-product.php:270
-#: templates/products/tmpl-add-product-popup.php:105
+#: templates/products/tmpl-add-product-popup.php:104
msgid "Tags"
msgstr ""
-#: templates/products/edit-product-single.php:366
-#: templates/products/tmpl-add-product-popup.php:25
+#: templates/products/edit-product-single.php:421
+#: templates/products/tmpl-add-product-popup.php:24
msgid "Upload a product cover image"
msgstr ""
-#: templates/products/edit-product-single.php:406
+#: templates/products/edit-product-single.php:461
#: templates/products/new-product.php:195
msgid "Delete image"
msgstr ""
-#: templates/products/edit-product-single.php:412
+#: templates/products/edit-product-single.php:467
#: templates/products/new-product.php:202
-#: templates/products/tmpl-add-product-popup.php:39
+#: templates/products/tmpl-add-product-popup.php:38
msgid "Add gallery image"
msgstr ""
-#: templates/products/edit-product-single.php:428
+#: templates/products/edit-product-single.php:483
msgid "Short Description"
msgstr ""
-#: templates/products/edit-product-single.php:448
+#: templates/products/edit-product-single.php:503
#: templates/products/new-product.php:286
msgid "Description"
msgstr ""
-#: templates/products/edit-product-single.php:480
-#: templates/products/edit-product-single.php:481
+#: templates/products/edit-product-single.php:535
+#: templates/products/edit-product-single.php:536
msgid "Save Product"
msgstr ""
@@ -9085,7 +9255,7 @@ msgid "Manage inventory for this product."
msgstr ""
#: templates/products/inventory.php:14
-#: templates/products/products-listing-row.php:73
+#: templates/products/products-listing-row.php:171
#: templates/products/products-listing.php:125
msgid "SKU"
msgstr ""
@@ -9111,23 +9281,23 @@ msgid "Stock quantity"
msgstr ""
#: templates/products/inventory.php:48
-#: templates/products/inventory.php:54
+#: templates/products/inventory.php:56
msgid "1"
msgstr ""
-#: templates/products/inventory.php:53
+#: templates/products/inventory.php:55
msgid "Low stock threshold"
msgstr ""
-#: templates/products/inventory.php:59
+#: templates/products/inventory.php:61
msgid "Allow Backorders"
msgstr ""
-#: templates/products/inventory.php:68
+#: templates/products/inventory.php:70
msgid "Allow but notify customer"
msgstr ""
-#: templates/products/inventory.php:83
+#: templates/products/inventory.php:85
msgid "Allow only one quantity of this product to be bought in a single order"
msgstr ""
@@ -9205,91 +9375,86 @@ msgstr ""
msgid "Enable product reviews"
msgstr ""
-#: templates/products/products-listing-row.php:45
+#: templates/products/products-listing-row.php:83
#: templates/products/products-listing.php:119
msgid "Image"
msgstr ""
-#: templates/products/products-listing-row.php:100
-#: templates/products/products-listing.php:128
-msgid "Type"
-msgstr ""
-
-#: templates/products/products-listing-row.php:103
+#: templates/products/products-listing-row.php:238
msgid "Grouped"
msgstr ""
-#: templates/products/products-listing-row.php:105
+#: templates/products/products-listing-row.php:240
msgid "External/Affiliate"
msgstr ""
-#: templates/products/products-listing-row.php:115
+#: templates/products/products-listing-row.php:250
msgid "Variable"
msgstr ""
-#: templates/products/products-listing-row.php:122
-#: templates/products/products-listing.php:129
+#: templates/products/products-listing-row.php:276
+#: templates/products/products-listing.php:130
msgid "Views"
msgstr ""
-#: templates/products/products-listing-row.php:161
+#: templates/products/products-listing-row.php:324
msgid "Published"
msgstr ""
-#: templates/products/products-listing-row.php:164
+#: templates/products/products-listing-row.php:327
msgid "Missed schedule"
msgstr ""
-#: templates/products/products-listing-row.php:169
+#: templates/products/products-listing-row.php:332
msgid "Last Modified"
msgstr ""
#: templates/products/products-listing.php:71
-#: templates/products/products-listing.php:283
+#: templates/products/products-listing.php:284
msgid "Add new product"
msgstr ""
-#: templates/products/products-listing.php:228
+#: templates/products/products-listing.php:229
msgid "No product found"
msgstr ""
-#: templates/products/products-listing.php:254
+#: templates/products/products-listing.php:255
msgid "« Previous"
msgstr ""
-#: templates/products/products-listing.php:255
+#: templates/products/products-listing.php:256
msgid "Next »"
msgstr ""
-#: templates/products/products-listing.php:271
+#: templates/products/products-listing.php:272
msgid "No Products Found!"
msgstr ""
-#: templates/products/products-listing.php:276
+#: templates/products/products-listing.php:277
msgid "Ready to start selling something awesome?"
msgstr ""
-#: templates/products/tmpl-add-product-popup.php:112
+#: templates/products/tmpl-add-product-popup.php:111
msgid "Enter some short description about this product..."
msgstr ""
-#: templates/products/tmpl-add-product-popup.php:120
+#: templates/products/tmpl-add-product-popup.php:119
msgid "Create product"
msgstr ""
-#: templates/products/tmpl-add-product-popup.php:130
+#: templates/products/tmpl-add-product-popup.php:129
msgid "Create & add new"
msgstr ""
-#: templates/reverse-withdrawal/reverse-balance.php:16
+#: templates/reverse-withdrawal/reverse-balance.php:18
msgid "Reverse Pay Balance: "
msgstr ""
-#: templates/reverse-withdrawal/reverse-balance.php:27
+#: templates/reverse-withdrawal/reverse-balance.php:30
msgid "Threshold: "
msgstr ""
-#: templates/reverse-withdrawal/reverse-balance.php:31
+#: templates/reverse-withdrawal/reverse-balance.php:36
msgid "Payable Amount: "
msgstr ""
@@ -9390,7 +9555,7 @@ msgid "Back"
msgstr ""
#: templates/settings/payment.php:16
-#: templates/withdraw/withdraw-dashboard.php:89
+#: templates/withdraw/withdraw-dashboard.php:91
msgid "Payment Methods"
msgstr ""
@@ -9399,19 +9564,19 @@ msgid "Add Payment Method"
msgstr ""
#. translators: %s: payment method title
-#: templates/settings/payment.php:32
+#: templates/settings/payment.php:33
msgid "Direct to %s"
msgstr ""
-#: templates/settings/payment.php:42
+#: templates/settings/payment.php:45
msgid "There is no payment method to add."
msgstr ""
-#: templates/settings/payment.php:71
+#: templates/settings/payment.php:74
msgid "Manage"
msgstr ""
-#: templates/settings/payment.php:80
+#: templates/settings/payment.php:83
msgid "There is no payment method to show."
msgstr ""
@@ -9635,7 +9800,7 @@ msgid "Cancelled Requests"
msgstr ""
#: templates/withdraw/status-listing.php:40
-#: templates/withdraw/withdraw-dashboard.php:48
+#: templates/withdraw/withdraw-dashboard.php:50
msgid "Request Withdraw"
msgstr ""
@@ -9656,41 +9821,60 @@ msgid "Withdraw Threshold:"
msgstr ""
#. translators: 1) withdraw threshold days
-#: templates/withdraw/withdraw-dashboard.php:36
+#: templates/withdraw/withdraw-dashboard.php:37
msgid "%s day"
msgid_plural "%s days"
msgstr[0] ""
msgstr[1] ""
-#: templates/withdraw/withdraw-dashboard.php:62
+#: templates/withdraw/withdraw-dashboard.php:64
msgid "Payment Details"
msgstr ""
-#: templates/withdraw/withdraw-dashboard.php:67
+#: templates/withdraw/withdraw-dashboard.php:69
msgid "Last Payment"
msgstr ""
-#: templates/withdraw/withdraw-dashboard.php:75
+#: templates/withdraw/withdraw-dashboard.php:77
msgid "View Payments"
msgstr ""
-#: templates/withdraw/withdraw-dashboard.php:106
+#: templates/withdraw/withdraw-dashboard.php:108
msgid "Default"
msgstr ""
-#: templates/withdraw/withdraw-dashboard.php:108
+#: templates/withdraw/withdraw-dashboard.php:110
msgid "Make Default"
msgstr ""
-#: templates/withdraw/withdraw-dashboard.php:110
+#: templates/withdraw/withdraw-dashboard.php:112
msgid "Setup"
msgstr ""
+#: assets/js/dokan-admin-notice.js:2
#: assets/js/dokan-promo-notice.js:2
#: assets/js/vue-bootstrap.js:2
msgid "Loading..."
msgstr ""
+#: assets/js/dokan-setup-wizard-commission.js:1
+#: assets/js/vue-admin.js:2
+#: assets/js/vue-bootstrap.js:2
+msgid "All Categories"
+msgstr ""
+
+#: assets/js/dokan-setup-wizard-commission.js:1
+#: assets/js/vue-admin.js:2
+#: assets/js/vue-bootstrap.js:2
+msgid "%"
+msgstr ""
+
+#: assets/js/dokan-setup-wizard-commission.js:1
+#: assets/js/vue-admin.js:2
+#: assets/js/vue-bootstrap.js:2
+msgid "+"
+msgstr ""
+
#: assets/js/vue-admin.js:2
msgid "Dokan Premium"
msgstr ""
@@ -9968,11 +10152,7 @@ msgid "Seems To Be Convinced, You Need More Out Of Your Marketplace"
msgstr ""
#: assets/js/vue-admin.js:2
-msgid "Dokan Vendor Capabilities Banner"
-msgstr ""
-
-#: assets/js/vue-admin.js:2
-msgid "One of the finest attractions of Dokan PRO is the vast array of powerful vendor controls & functions it provides so sellers can enjoy ownership, automation & freedom to run their stores. To use these awesome vendor features listed below, consider Upgrading to PRO."
+msgid "Dokan PRO offers powerful vendor controls and features, giving sellers full ownership, automation, and freedom to run their stores. Upgrade to PRO to unlock these great features!."
msgstr ""
#: assets/js/vue-admin.js:2
@@ -10280,11 +10460,6 @@ msgstr ""
msgid "Select State"
msgstr ""
-#: assets/js/vue-admin.js:2
-#: assets/js/vue-bootstrap.js:2
-msgid "Combine"
-msgstr ""
-
#: assets/js/vue-admin.js:2
#: assets/js/vue-bootstrap.js:2
msgid "Payment Options"
@@ -10305,11 +10480,6 @@ msgstr ""
msgid "Swift"
msgstr ""
-#: assets/js/vue-admin.js:2
-#: assets/js/vue-bootstrap.js:2
-msgid "Admin Commission Type"
-msgstr ""
-
#: assets/js/vue-admin.js:2
#: assets/js/vue-bootstrap.js:2
msgid "Publish Product Directly"
@@ -10376,6 +10546,18 @@ msgstr ""
msgid "All"
msgstr ""
+#: assets/js/vue-admin.js:2
+msgid "Commission Options"
+msgstr ""
+
+#: assets/js/vue-admin.js:2
+msgid "Admin Commission type"
+msgstr ""
+
+#: assets/js/vue-admin.js:2
+msgid "Set the commission type that admin will get"
+msgstr ""
+
#: assets/js/vue-admin.js:2
msgid "Import"
msgstr ""
@@ -10528,6 +10710,10 @@ msgstr ""
msgid "The Yoast SEO integration lets vendors define Store Title, Description, Slug and Keyword to appear in search engine results."
msgstr ""
+#: assets/js/vue-admin.js:2
+msgid "One of the finest attractions of Dokan PRO is the vast array of powerful vendor controls & functions it provides so sellers can enjoy ownership, automation & freedom to run their stores. To use these awesome vendor features listed below, consider Upgrading to PRO."
+msgstr ""
+
#: assets/js/vue-admin.js:2
msgid "Dokan Capability"
msgstr ""
diff --git a/lib/class.category-walker.php b/lib/class.category-walker.php
deleted file mode 100644
index 93d54da01c..0000000000
--- a/lib/class.category-walker.php
+++ /dev/null
@@ -1,16 +0,0 @@
-getContainer();
+ } catch (ContainerException $e) {
+ $container = ($this instanceof ReflectionContainer) ? $this : null;
+ }
+
+ foreach ($arguments as &$arg) {
+ // if we have a literal, we don't want to do anything more with it
+ if ($arg instanceof LiteralArgumentInterface) {
+ $arg = $arg->getValue();
+ continue;
+ }
+
+ if ($arg instanceof ArgumentInterface) {
+ $argValue = $arg->getValue();
+ } else {
+ $argValue = $arg;
+ }
+
+ if (!is_string($argValue)) {
+ continue;
+ }
+
+ // resolve the argument from the container, if it happens to be another
+ // argument wrapper, use that value
+ if ($container instanceof ContainerInterface && $container->has($argValue)) {
+ try {
+ $arg = $container->get($argValue);
+
+ if ($arg instanceof ArgumentInterface) {
+ $arg = $arg->getValue();
+ }
+
+ continue;
+ } catch (NotFoundException $e) {
+ }
+ }
+
+ // if we have a default value, we use that, no more resolution as
+ // we expect a default/optional argument value to be literal
+ if ($arg instanceof DefaultValueInterface) {
+ $arg = $arg->getDefaultValue();
+ }
+ }
+
+ return $arguments;
+ }
+
+ public function reflectArguments(ReflectionFunctionAbstract $method, array $args = []): array
+ {
+ $params = $method->getParameters();
+ $arguments = [];
+
+ foreach ($params as $param) {
+ $name = $param->getName();
+
+ // if we've been given a value for the argument, treat as literal
+ if (array_key_exists($name, $args)) {
+ $arguments[] = new LiteralArgument($args[$name]);
+ continue;
+ }
+
+ $type = $param->getType();
+
+ if ($type instanceof ReflectionNamedType) {
+ // in PHP 8, nullable arguments have "?" prefix
+ $typeHint = ltrim($type->getName(), '?');
+
+ if ($param->isDefaultValueAvailable()) {
+ $arguments[] = new DefaultValueArgument($typeHint, $param->getDefaultValue());
+ continue;
+ }
+
+ $arguments[] = new ResolvableArgument($typeHint);
+ continue;
+ }
+
+ if ($param->isDefaultValueAvailable()) {
+ $arguments[] = new LiteralArgument($param->getDefaultValue());
+ continue;
+ }
+
+ throw new NotFoundException(sprintf(
+ 'Unable to resolve a value for parameter (%s) in the function/method (%s)',
+ $name,
+ $method->getName()
+ ));
+ }
+
+ return $this->resolveArguments($arguments);
+ }
+
+ abstract public function getContainer(): DefinitionContainerInterface;
+}
diff --git a/lib/packages/League/Container/Argument/DefaultValueArgument.php b/lib/packages/League/Container/Argument/DefaultValueArgument.php
new file mode 100644
index 0000000000..cf3c436e43
--- /dev/null
+++ b/lib/packages/League/Container/Argument/DefaultValueArgument.php
@@ -0,0 +1,24 @@
+defaultValue = $defaultValue;
+ parent::__construct($value);
+ }
+
+ /**
+ * @return mixed|null
+ */
+ public function getDefaultValue()
+ {
+ return $this->defaultValue;
+ }
+}
diff --git a/lib/packages/League/Container/Argument/DefaultValueInterface.php b/lib/packages/League/Container/Argument/DefaultValueInterface.php
new file mode 100644
index 0000000000..879fe903a4
--- /dev/null
+++ b/lib/packages/League/Container/Argument/DefaultValueInterface.php
@@ -0,0 +1,13 @@
+value = $value;
+ } else {
+ throw new InvalidArgumentException('Incorrect type for value.');
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+}
diff --git a/lib/packages/League/Container/Argument/LiteralArgumentInterface.php b/lib/packages/League/Container/Argument/LiteralArgumentInterface.php
new file mode 100644
index 0000000000..4cb06ff980
--- /dev/null
+++ b/lib/packages/League/Container/Argument/LiteralArgumentInterface.php
@@ -0,0 +1,9 @@
+value = $value;
+ }
+
+ public function getValue(): string
+ {
+ return $this->value;
+ }
+}
diff --git a/lib/packages/League/Container/Argument/ResolvableArgumentInterface.php b/lib/packages/League/Container/Argument/ResolvableArgumentInterface.php
new file mode 100644
index 0000000000..e7136e6c4b
--- /dev/null
+++ b/lib/packages/League/Container/Argument/ResolvableArgumentInterface.php
@@ -0,0 +1,10 @@
+definitions = $definitions ?? new DefinitionAggregate();
+ $this->providers = $providers ?? new ServiceProviderAggregate();
+ $this->inflectors = $inflectors ?? new InflectorAggregate();
+
+ if ($this->definitions instanceof ContainerAwareInterface) {
+ $this->definitions->setContainer($this);
+ }
+
+ if ($this->providers instanceof ContainerAwareInterface) {
+ $this->providers->setContainer($this);
+ }
+
+ if ($this->inflectors instanceof ContainerAwareInterface) {
+ $this->inflectors->setContainer($this);
+ }
+ }
+
+ public function add(string $id, $concrete = null): DefinitionInterface
+ {
+ $concrete = $concrete ?? $id;
+
+ if (true === $this->defaultToShared) {
+ return $this->addShared($id, $concrete);
+ }
+
+ return $this->definitions->add($id, $concrete);
+ }
+
+ public function addShared(string $id, $concrete = null): DefinitionInterface
+ {
+ $concrete = $concrete ?? $id;
+ return $this->definitions->addShared($id, $concrete);
+ }
+
+ public function defaultToShared(bool $shared = true): ContainerInterface
+ {
+ $this->defaultToShared = $shared;
+ return $this;
+ }
+
+ public function extend(string $id): DefinitionInterface
+ {
+ if ($this->providers->provides($id)) {
+ $this->providers->register($id);
+ }
+
+ if ($this->definitions->has($id)) {
+ return $this->definitions->getDefinition($id);
+ }
+
+ throw new NotFoundException(sprintf(
+ 'Unable to extend alias (%s) as it is not being managed as a definition',
+ $id
+ ));
+ }
+
+ public function addServiceProvider(ServiceProviderInterface $provider): DefinitionContainerInterface
+ {
+ $this->providers->add($provider);
+ return $this;
+ }
+
+ /**
+ * @template RequestedType
+ *
+ * @param class-string|string $id
+ *
+ * @return RequestedType|mixed
+ */
+ public function get($id)
+ {
+ return $this->resolve($id);
+ }
+
+ /**
+ * @template RequestedType
+ *
+ * @param class-string|string $id
+ *
+ * @return RequestedType|mixed
+ */
+ public function getNew($id)
+ {
+ return $this->resolve($id, true);
+ }
+
+ public function has($id): bool
+ {
+ if ($this->definitions->has($id)) {
+ return true;
+ }
+
+ if ($this->definitions->hasTag($id)) {
+ return true;
+ }
+
+ if ($this->providers->provides($id)) {
+ return true;
+ }
+
+ foreach ($this->delegates as $delegate) {
+ if ($delegate->has($id)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public function inflector(string $type, callable $callback = null): InflectorInterface
+ {
+ return $this->inflectors->add($type, $callback);
+ }
+
+ public function delegate(ContainerInterface $container): self
+ {
+ $this->delegates[] = $container;
+
+ if ($container instanceof ContainerAwareInterface) {
+ $container->setContainer($this);
+ }
+
+ return $this;
+ }
+
+ protected function resolve($id, bool $new = false)
+ {
+ if ($this->definitions->has($id)) {
+ $resolved = (true === $new) ? $this->definitions->resolveNew($id) : $this->definitions->resolve($id);
+ return $this->inflectors->inflect($resolved);
+ }
+
+ if ($this->definitions->hasTag($id)) {
+ $arrayOf = (true === $new)
+ ? $this->definitions->resolveTaggedNew($id)
+ : $this->definitions->resolveTagged($id);
+
+ array_walk($arrayOf, function (&$resolved) {
+ $resolved = $this->inflectors->inflect($resolved);
+ });
+
+ return $arrayOf;
+ }
+
+ if ($this->providers->provides($id)) {
+ $this->providers->register($id);
+
+ if (!$this->definitions->has($id) && !$this->definitions->hasTag($id)) {
+ throw new ContainerException(sprintf('Service provider lied about providing (%s) service', $id));
+ }
+
+ return $this->resolve($id, $new);
+ }
+
+ foreach ($this->delegates as $delegate) {
+ if ($delegate->has($id)) {
+ $resolved = $delegate->get($id);
+ return $this->inflectors->inflect($resolved);
+ }
+ }
+
+ throw new NotFoundException(sprintf('Alias (%s) is not being managed by the container or delegates', $id));
+ }
+}
diff --git a/lib/packages/League/Container/ContainerAwareInterface.php b/lib/packages/League/Container/ContainerAwareInterface.php
new file mode 100644
index 0000000000..494ff2b244
--- /dev/null
+++ b/lib/packages/League/Container/ContainerAwareInterface.php
@@ -0,0 +1,11 @@
+container = $container;
+
+ if ($this instanceof ContainerAwareInterface) {
+ return $this;
+ }
+
+ throw new BadMethodCallException(sprintf(
+ 'Attempt to use (%s) while not implementing (%s)',
+ ContainerAwareTrait::class,
+ ContainerAwareInterface::class
+ ));
+ }
+
+ public function getContainer(): DefinitionContainerInterface
+ {
+ if ($this->container instanceof DefinitionContainerInterface) {
+ return $this->container;
+ }
+
+ throw new ContainerException('No container implementation has been set.');
+ }
+}
diff --git a/lib/packages/League/Container/Definition/Definition.php b/lib/packages/League/Container/Definition/Definition.php
new file mode 100644
index 0000000000..df0fb488e6
--- /dev/null
+++ b/lib/packages/League/Container/Definition/Definition.php
@@ -0,0 +1,238 @@
+alias = $id;
+ $this->concrete = $concrete;
+ }
+
+ public function addTag(string $tag): DefinitionInterface
+ {
+ $this->tags[$tag] = true;
+ return $this;
+ }
+
+ public function hasTag(string $tag): bool
+ {
+ return isset($this->tags[$tag]);
+ }
+
+ public function setAlias(string $id): DefinitionInterface
+ {
+ $this->alias = $id;
+ return $this;
+ }
+
+ public function getAlias(): string
+ {
+ return $this->alias;
+ }
+
+ public function setShared(bool $shared = true): DefinitionInterface
+ {
+ $this->shared = $shared;
+ return $this;
+ }
+
+ public function isShared(): bool
+ {
+ return $this->shared;
+ }
+
+ public function getConcrete()
+ {
+ return $this->concrete;
+ }
+
+ public function setConcrete($concrete): DefinitionInterface
+ {
+ $this->concrete = $concrete;
+ $this->resolved = null;
+ return $this;
+ }
+
+ public function addArgument($arg): DefinitionInterface
+ {
+ $this->arguments[] = $arg;
+ return $this;
+ }
+
+ public function addArguments(array $args): DefinitionInterface
+ {
+ foreach ($args as $arg) {
+ $this->addArgument($arg);
+ }
+
+ return $this;
+ }
+
+ public function addMethodCall(string $method, array $args = []): DefinitionInterface
+ {
+ $this->methods[] = [
+ 'method' => $method,
+ 'arguments' => $args
+ ];
+
+ return $this;
+ }
+
+ public function addMethodCalls(array $methods = []): DefinitionInterface
+ {
+ foreach ($methods as $method => $args) {
+ $this->addMethodCall($method, $args);
+ }
+
+ return $this;
+ }
+
+ public function resolve()
+ {
+ if (null !== $this->resolved && $this->isShared()) {
+ return $this->resolved;
+ }
+
+ return $this->resolveNew();
+ }
+
+ public function resolveNew()
+ {
+ $concrete = $this->concrete;
+
+ if (is_callable($concrete)) {
+ $concrete = $this->resolveCallable($concrete);
+ }
+
+ if ($concrete instanceof LiteralArgumentInterface) {
+ $this->resolved = $concrete->getValue();
+ return $concrete->getValue();
+ }
+
+ if ($concrete instanceof ArgumentInterface) {
+ $concrete = $concrete->getValue();
+ }
+
+ if (is_string($concrete) && class_exists($concrete)) {
+ $concrete = $this->resolveClass($concrete);
+ }
+
+ if (is_object($concrete)) {
+ $concrete = $this->invokeMethods($concrete);
+ }
+
+ try {
+ $container = $this->getContainer();
+ } catch (ContainerException $e) {
+ $container = null;
+ }
+
+ // stop recursive resolving
+ if (is_string($concrete) && in_array($concrete, $this->recursiveCheck)) {
+ $this->resolved = $concrete;
+ return $concrete;
+ }
+
+ // if we still have a string, try to pull it from the container
+ // this allows for `alias -> alias -> ... -> concrete
+ if (is_string($concrete) && $container instanceof ContainerInterface && $container->has($concrete)) {
+ $this->recursiveCheck[] = $concrete;
+ $concrete = $container->get($concrete);
+ }
+
+ $this->resolved = $concrete;
+ return $concrete;
+ }
+
+ /**
+ * @param callable $concrete
+ * @return mixed
+ */
+ protected function resolveCallable(callable $concrete)
+ {
+ $resolved = $this->resolveArguments($this->arguments);
+ return call_user_func_array($concrete, $resolved);
+ }
+
+ protected function resolveClass(string $concrete): object
+ {
+ $resolved = $this->resolveArguments($this->arguments);
+ $reflection = new ReflectionClass($concrete);
+ return $reflection->newInstanceArgs($resolved);
+ }
+
+ protected function invokeMethods(object $instance): object
+ {
+ foreach ($this->methods as $method) {
+ $args = $this->resolveArguments($method['arguments']);
+ $callable = [$instance, $method['method']];
+ call_user_func_array($callable, $args);
+ }
+
+ return $instance;
+ }
+}
diff --git a/lib/packages/League/Container/Definition/DefinitionAggregate.php b/lib/packages/League/Container/Definition/DefinitionAggregate.php
new file mode 100644
index 0000000000..96976f6990
--- /dev/null
+++ b/lib/packages/League/Container/Definition/DefinitionAggregate.php
@@ -0,0 +1,117 @@
+definitions = array_filter($definitions, static function ($definition) {
+ return ($definition instanceof DefinitionInterface);
+ });
+ }
+
+ public function add(string $id, $definition): DefinitionInterface
+ {
+ if (false === ($definition instanceof DefinitionInterface)) {
+ $definition = new Definition($id, $definition);
+ }
+
+ $this->definitions[] = $definition->setAlias($id);
+
+ return $definition;
+ }
+
+ public function addShared(string $id, $definition): DefinitionInterface
+ {
+ $definition = $this->add($id, $definition);
+ return $definition->setShared(true);
+ }
+
+ public function has(string $id): bool
+ {
+ foreach ($this->getIterator() as $definition) {
+ if ($id === $definition->getAlias()) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public function hasTag(string $tag): bool
+ {
+ foreach ($this->getIterator() as $definition) {
+ if ($definition->hasTag($tag)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public function getDefinition(string $id): DefinitionInterface
+ {
+ foreach ($this->getIterator() as $definition) {
+ if ($id === $definition->getAlias()) {
+ return $definition->setContainer($this->getContainer());
+ }
+ }
+
+ throw new NotFoundException(sprintf('Alias (%s) is not being handled as a definition.', $id));
+ }
+
+ public function resolve(string $id)
+ {
+ return $this->getDefinition($id)->resolve();
+ }
+
+ public function resolveNew(string $id)
+ {
+ return $this->getDefinition($id)->resolveNew();
+ }
+
+ public function resolveTagged(string $tag): array
+ {
+ $arrayOf = [];
+
+ foreach ($this->getIterator() as $definition) {
+ if ($definition->hasTag($tag)) {
+ $arrayOf[] = $definition->setContainer($this->getContainer())->resolve();
+ }
+ }
+
+ return $arrayOf;
+ }
+
+ public function resolveTaggedNew(string $tag): array
+ {
+ $arrayOf = [];
+
+ foreach ($this->getIterator() as $definition) {
+ if ($definition->hasTag($tag)) {
+ $arrayOf[] = $definition->setContainer($this->getContainer())->resolveNew();
+ }
+ }
+
+ return $arrayOf;
+ }
+
+ public function getIterator(): Generator
+ {
+ yield from $this->definitions;
+ }
+}
diff --git a/lib/packages/League/Container/Definition/DefinitionAggregateInterface.php b/lib/packages/League/Container/Definition/DefinitionAggregateInterface.php
new file mode 100644
index 0000000000..13eca48995
--- /dev/null
+++ b/lib/packages/League/Container/Definition/DefinitionAggregateInterface.php
@@ -0,0 +1,21 @@
+type = $type;
+ $this->callback = $callback;
+ }
+
+ public function getType(): string
+ {
+ return $this->type;
+ }
+
+ public function invokeMethod(string $name, array $args): InflectorInterface
+ {
+ $this->methods[$name] = $args;
+ return $this;
+ }
+
+ public function invokeMethods(array $methods): InflectorInterface
+ {
+ foreach ($methods as $name => $args) {
+ $this->invokeMethod($name, $args);
+ }
+
+ return $this;
+ }
+
+ public function setProperty(string $property, $value): InflectorInterface
+ {
+ $this->properties[$property] = $this->resolveArguments([$value])[0];
+ return $this;
+ }
+
+ public function setProperties(array $properties): InflectorInterface
+ {
+ foreach ($properties as $property => $value) {
+ $this->setProperty($property, $value);
+ }
+
+ return $this;
+ }
+
+ public function inflect(object $object): void
+ {
+ $properties = $this->resolveArguments(array_values($this->properties));
+ $properties = array_combine(array_keys($this->properties), $properties);
+
+ // array_combine() can technically return false
+ foreach ($properties ?: [] as $property => $value) {
+ $object->{$property} = $value;
+ }
+
+ foreach ($this->methods as $method => $args) {
+ $args = $this->resolveArguments($args);
+ $callable = [$object, $method];
+ call_user_func_array($callable, $args);
+ }
+
+ if ($this->callback !== null) {
+ call_user_func($this->callback, $object);
+ }
+ }
+}
diff --git a/lib/packages/League/Container/Inflector/InflectorAggregate.php b/lib/packages/League/Container/Inflector/InflectorAggregate.php
new file mode 100644
index 0000000000..2a20fe5707
--- /dev/null
+++ b/lib/packages/League/Container/Inflector/InflectorAggregate.php
@@ -0,0 +1,44 @@
+inflectors[] = $inflector;
+ return $inflector;
+ }
+
+ public function inflect($object)
+ {
+ foreach ($this->getIterator() as $inflector) {
+ $type = $inflector->getType();
+
+ if ($object instanceof $type) {
+ $inflector->setContainer($this->getContainer());
+ $inflector->inflect($object);
+ }
+ }
+
+ return $object;
+ }
+
+ public function getIterator(): Generator
+ {
+ yield from $this->inflectors;
+ }
+}
diff --git a/lib/packages/League/Container/Inflector/InflectorAggregateInterface.php b/lib/packages/League/Container/Inflector/InflectorAggregateInterface.php
new file mode 100644
index 0000000000..9395850bf0
--- /dev/null
+++ b/lib/packages/League/Container/Inflector/InflectorAggregateInterface.php
@@ -0,0 +1,14 @@
+cacheResolutions = $cacheResolutions;
+ }
+
+ public function get($id, array $args = [])
+ {
+ if ($this->cacheResolutions === true && array_key_exists($id, $this->cache)) {
+ return $this->cache[$id];
+ }
+
+ if (!$this->has($id)) {
+ throw new NotFoundException(
+ sprintf('Alias (%s) is not an existing class and therefore cannot be resolved', $id)
+ );
+ }
+
+ $reflector = new ReflectionClass($id);
+ $construct = $reflector->getConstructor();
+
+ if ($construct && !$construct->isPublic()) {
+ throw new NotFoundException(
+ sprintf('Alias (%s) has a non-public constructor and therefore cannot be instantiated', $id)
+ );
+ }
+
+ $resolution = $construct === null
+ ? new $id()
+ : $reflector->newInstanceArgs($this->reflectArguments($construct, $args))
+ ;
+
+ if ($this->cacheResolutions === true) {
+ $this->cache[$id] = $resolution;
+ }
+
+ return $resolution;
+ }
+
+ public function has($id): bool
+ {
+ return class_exists($id);
+ }
+
+ public function call(callable $callable, array $args = [])
+ {
+ if (is_string($callable) && strpos($callable, '::') !== false) {
+ $callable = explode('::', $callable);
+ }
+
+ if (is_array($callable)) {
+ if (is_string($callable[0])) {
+ // if we have a definition container, try that first, otherwise, reflect
+ try {
+ $callable[0] = $this->getContainer()->get($callable[0]);
+ } catch (ContainerException $e) {
+ $callable[0] = $this->get($callable[0]);
+ }
+ }
+
+ $reflection = new ReflectionMethod($callable[0], $callable[1]);
+
+ if ($reflection->isStatic()) {
+ $callable[0] = null;
+ }
+
+ return $reflection->invokeArgs($callable[0], $this->reflectArguments($reflection, $args));
+ }
+
+ if (is_object($callable)) {
+ $reflection = new ReflectionMethod($callable, '__invoke');
+ return $reflection->invokeArgs($callable, $this->reflectArguments($reflection, $args));
+ }
+
+ $reflection = new ReflectionFunction(\Closure::fromCallable($callable));
+
+ return $reflection->invokeArgs($this->reflectArguments($reflection, $args));
+ }
+}
diff --git a/lib/packages/League/Container/ServiceProvider/AbstractServiceProvider.php b/lib/packages/League/Container/ServiceProvider/AbstractServiceProvider.php
new file mode 100644
index 0000000000..6b69913147
--- /dev/null
+++ b/lib/packages/League/Container/ServiceProvider/AbstractServiceProvider.php
@@ -0,0 +1,28 @@
+identifier ?? get_class($this);
+ }
+
+ public function setIdentifier(string $id): ServiceProviderInterface
+ {
+ $this->identifier = $id;
+ return $this;
+ }
+}
diff --git a/lib/packages/League/Container/ServiceProvider/BootableServiceProviderInterface.php b/lib/packages/League/Container/ServiceProvider/BootableServiceProviderInterface.php
new file mode 100644
index 0000000000..986091e2c0
--- /dev/null
+++ b/lib/packages/League/Container/ServiceProvider/BootableServiceProviderInterface.php
@@ -0,0 +1,16 @@
+providers, true)) {
+ return $this;
+ }
+
+ $provider->setContainer($this->getContainer());
+
+ if ($provider instanceof BootableServiceProviderInterface) {
+ $provider->boot();
+ }
+
+ $this->providers[] = $provider;
+ return $this;
+ }
+
+ public function provides(string $service): bool
+ {
+ foreach ($this->getIterator() as $provider) {
+ if ($provider->provides($service)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public function getIterator(): Generator
+ {
+ yield from $this->providers;
+ }
+
+ public function register(string $service): void
+ {
+ if (false === $this->provides($service)) {
+ throw new ContainerException(
+ sprintf('(%s) is not provided by a service provider', $service)
+ );
+ }
+
+ foreach ($this->getIterator() as $provider) {
+ if (in_array($provider->getIdentifier(), $this->registered, true)) {
+ continue;
+ }
+
+ if ($provider->provides($service)) {
+ $provider->register();
+ $this->registered[] = $provider->getIdentifier();
+ }
+ }
+ }
+}
diff --git a/lib/packages/League/Container/ServiceProvider/ServiceProviderAggregateInterface.php b/lib/packages/League/Container/ServiceProvider/ServiceProviderAggregateInterface.php
new file mode 100644
index 0000000000..c66a3b8362
--- /dev/null
+++ b/lib/packages/League/Container/ServiceProvider/ServiceProviderAggregateInterface.php
@@ -0,0 +1,15 @@
+=0.10.0"
- }
- },
"node_modules/@alloc/quick-lru": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
@@ -59,127 +53,56 @@
}
},
"node_modules/@ampproject/remapping": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
- "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
"dev": true,
"dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+ "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
+ "@babel/highlight": "^7.24.7",
+ "picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/code-frame/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/code-frame/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@babel/code-frame/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/@babel/compat-data": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz",
- "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
+ "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz",
- "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
+ "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.3",
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helpers": "^7.23.2",
- "@babel/parser": "^7.23.3",
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.3",
- "@babel/types": "^7.23.3",
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.25.0",
+ "@babel/helper-compilation-targets": "^7.25.2",
+ "@babel/helper-module-transforms": "^7.25.2",
+ "@babel/helpers": "^7.25.0",
+ "@babel/parser": "^7.25.0",
+ "@babel/template": "^7.25.0",
+ "@babel/traverse": "^7.25.2",
+ "@babel/types": "^7.25.2",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -195,9 +118,9 @@
}
},
"node_modules/@babel/eslint-parser": {
- "version": "7.23.10",
- "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.10.tgz",
- "integrity": "sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw==",
+ "version": "7.25.1",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz",
+ "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==",
"dev": true,
"dependencies": {
"@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
@@ -209,18 +132,18 @@
},
"peerDependencies": {
"@babel/core": "^7.11.0",
- "eslint": "^7.5.0 || ^8.0.0"
+ "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0"
}
},
"node_modules/@babel/generator": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz",
- "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
+ "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.23.3",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
+ "@babel/types": "^7.25.0",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
},
"engines": {
@@ -228,38 +151,39 @@
}
},
"node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
- "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
+ "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz",
- "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
+ "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.15"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
- "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
+ "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.22.9",
- "@babel/helper-validator-option": "^7.22.15",
- "browserslist": "^4.21.9",
+ "@babel/compat-data": "^7.25.2",
+ "@babel/helper-validator-option": "^7.24.8",
+ "browserslist": "^4.23.1",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
@@ -268,19 +192,17 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz",
- "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.5",
- "@babel/helper-function-name": "^7.22.5",
- "@babel/helper-member-expression-to-functions": "^7.22.15",
- "@babel/helper-optimise-call-expression": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.9",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz",
+ "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-member-expression-to-functions": "^7.24.8",
+ "@babel/helper-optimise-call-expression": "^7.24.7",
+ "@babel/helper-replace-supers": "^7.25.0",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/traverse": "^7.25.0",
"semver": "^6.3.1"
},
"engines": {
@@ -291,12 +213,12 @@
}
},
"node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz",
- "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz",
+ "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-annotate-as-pure": "^7.24.7",
"regexpu-core": "^5.3.1",
"semver": "^6.3.1"
},
@@ -308,9 +230,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz",
- "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
+ "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
"dev": true,
"dependencies": {
"@babel/helper-compilation-targets": "^7.22.6",
@@ -323,75 +245,42 @@
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
- "node_modules/@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
- "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-function-name": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
- "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
- "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
- "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
+ "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.23.0"
+ "@babel/traverse": "^7.24.8",
+ "@babel/types": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
- "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
+ "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.15"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
- "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
+ "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
"dev": true,
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-simple-access": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.20"
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-simple-access": "^7.24.7",
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "@babel/traverse": "^7.25.2"
},
"engines": {
"node": ">=6.9.0"
@@ -401,35 +290,35 @@
}
},
"node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
- "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
+ "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
- "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
+ "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz",
- "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz",
+ "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-wrap-function": "^7.22.20"
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-wrap-function": "^7.25.0",
+ "@babel/traverse": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
@@ -439,14 +328,14 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz",
- "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
+ "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
"dev": true,
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-member-expression-to-functions": "^7.22.15",
- "@babel/helper-optimise-call-expression": "^7.22.5"
+ "@babel/helper-member-expression-to-functions": "^7.24.8",
+ "@babel/helper-optimise-call-expression": "^7.24.7",
+ "@babel/traverse": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
@@ -456,105 +345,95 @@
}
},
"node_modules/@babel/helper-simple-access": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
- "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
+ "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
- "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
+ "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+ "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+ "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
- "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
+ "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz",
- "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz",
+ "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==",
"dev": true,
"dependencies": {
- "@babel/helper-function-name": "^7.22.5",
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.22.19"
+ "@babel/template": "^7.25.0",
+ "@babel/traverse": "^7.25.0",
+ "@babel/types": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz",
- "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
+ "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.2",
- "@babel/types": "^7.23.0"
+ "@babel/template": "^7.25.0",
+ "@babel/types": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
- "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+ "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
"dev": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.22.20",
+ "@babel/helper-validator-identifier": "^7.24.7",
"chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
@@ -632,10 +511,13 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz",
- "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==",
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
+ "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
"dev": true,
+ "dependencies": {
+ "@babel/types": "^7.25.2"
+ },
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -643,13 +525,44 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz",
+ "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/traverse": "^7.25.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz",
+ "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.8"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
"node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz",
- "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz",
+ "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -659,14 +572,14 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz",
- "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
+ "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/plugin-transform-optional-chaining": "^7.23.3"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/plugin-transform-optional-chaining": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -676,13 +589,13 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz",
- "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz",
+ "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==",
"dev": true,
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/traverse": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
@@ -779,12 +692,12 @@
}
},
"node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz",
- "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz",
+ "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -794,12 +707,12 @@
}
},
"node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz",
- "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz",
+ "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -833,12 +746,12 @@
}
},
"node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
- "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
+ "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -950,12 +863,12 @@
}
},
"node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz",
- "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz",
+ "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -981,12 +894,12 @@
}
},
"node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz",
- "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
+ "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -996,15 +909,15 @@
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz",
- "integrity": "sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz",
+ "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==",
"dev": true,
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-remap-async-to-generator": "^7.22.20",
- "@babel/plugin-syntax-async-generators": "^7.8.4"
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-remap-async-to-generator": "^7.25.0",
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/traverse": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
@@ -1014,14 +927,14 @@
}
},
"node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz",
- "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz",
+ "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==",
"dev": true,
"dependencies": {
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-remap-async-to-generator": "^7.22.20"
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-remap-async-to-generator": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1031,12 +944,12 @@
}
},
"node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz",
- "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
+ "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1046,12 +959,12 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz",
- "integrity": "sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz",
+ "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -1061,13 +974,13 @@
}
},
"node_modules/@babel/plugin-transform-class-properties": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz",
- "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz",
+ "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==",
"dev": true,
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1077,13 +990,13 @@
}
},
"node_modules/@babel/plugin-transform-class-static-block": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz",
- "integrity": "sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
+ "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
"dev": true,
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-class-static-block": "^7.14.5"
},
"engines": {
@@ -1094,19 +1007,16 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz",
- "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz",
+ "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-optimise-call-expression": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.20",
- "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-compilation-targets": "^7.24.8",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-replace-supers": "^7.25.0",
+ "@babel/traverse": "^7.25.0",
"globals": "^11.1.0"
},
"engines": {
@@ -1117,13 +1027,13 @@
}
},
"node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz",
- "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
+ "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/template": "^7.22.15"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/template": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1133,12 +1043,12 @@
}
},
"node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz",
- "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz",
+ "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -1148,13 +1058,13 @@
}
},
"node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz",
- "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
+ "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1164,12 +1074,12 @@
}
},
"node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz",
- "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
+ "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1178,13 +1088,29 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz",
+ "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.0",
+ "@babel/helper-plugin-utils": "^7.24.8"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
"node_modules/@babel/plugin-transform-dynamic-import": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz",
- "integrity": "sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
+ "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-dynamic-import": "^7.8.3"
},
"engines": {
@@ -1195,13 +1121,13 @@
}
},
"node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz",
- "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
+ "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
"dev": true,
"dependencies": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1211,12 +1137,12 @@
}
},
"node_modules/@babel/plugin-transform-export-namespace-from": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz",
- "integrity": "sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
+ "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3"
},
"engines": {
@@ -1227,12 +1153,13 @@
}
},
"node_modules/@babel/plugin-transform-for-of": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz",
- "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
+ "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1242,14 +1169,14 @@
}
},
"node_modules/@babel/plugin-transform-function-name": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz",
- "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==",
+ "version": "7.25.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz",
+ "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==",
"dev": true,
"dependencies": {
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-compilation-targets": "^7.24.8",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/traverse": "^7.25.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1259,12 +1186,12 @@
}
},
"node_modules/@babel/plugin-transform-json-strings": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz",
- "integrity": "sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
+ "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-json-strings": "^7.8.3"
},
"engines": {
@@ -1275,12 +1202,12 @@
}
},
"node_modules/@babel/plugin-transform-literals": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz",
- "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz",
+ "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -1290,12 +1217,12 @@
}
},
"node_modules/@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz",
- "integrity": "sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
+ "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
},
"engines": {
@@ -1306,12 +1233,12 @@
}
},
"node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz",
- "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
+ "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1321,13 +1248,13 @@
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz",
- "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
+ "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1337,14 +1264,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz",
- "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz",
+ "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-simple-access": "^7.22.5"
+ "@babel/helper-module-transforms": "^7.24.8",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-simple-access": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1354,15 +1281,15 @@
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz",
- "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz",
+ "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==",
"dev": true,
"dependencies": {
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.20"
+ "@babel/helper-module-transforms": "^7.25.0",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "@babel/traverse": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
@@ -1372,13 +1299,13 @@
}
},
"node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz",
- "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
+ "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1388,13 +1315,13 @@
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
- "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
+ "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1404,12 +1331,12 @@
}
},
"node_modules/@babel/plugin-transform-new-target": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz",
- "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
+ "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1419,12 +1346,12 @@
}
},
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz",
- "integrity": "sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
+ "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
},
"engines": {
@@ -1435,12 +1362,12 @@
}
},
"node_modules/@babel/plugin-transform-numeric-separator": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz",
- "integrity": "sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
+ "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
},
"engines": {
@@ -1451,16 +1378,15 @@
}
},
"node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz",
- "integrity": "sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
+ "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.23.3",
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.23.3"
+ "@babel/plugin-transform-parameters": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1470,13 +1396,13 @@
}
},
"node_modules/@babel/plugin-transform-object-super": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz",
- "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
+ "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.20"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-replace-supers": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1486,12 +1412,12 @@
}
},
"node_modules/@babel/plugin-transform-optional-catch-binding": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz",
- "integrity": "sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
+ "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
},
"engines": {
@@ -1502,13 +1428,13 @@
}
},
"node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz",
- "integrity": "sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz",
+ "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
"@babel/plugin-syntax-optional-chaining": "^7.8.3"
},
"engines": {
@@ -1519,12 +1445,12 @@
}
},
"node_modules/@babel/plugin-transform-parameters": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz",
- "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
+ "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1534,13 +1460,13 @@
}
},
"node_modules/@babel/plugin-transform-private-methods": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz",
- "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz",
+ "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==",
"dev": true,
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1550,14 +1476,14 @@
}
},
"node_modules/@babel/plugin-transform-private-property-in-object": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz",
- "integrity": "sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
+ "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-create-class-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
},
"engines": {
@@ -1568,12 +1494,12 @@
}
},
"node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz",
- "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
+ "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1583,12 +1509,12 @@
}
},
"node_modules/@babel/plugin-transform-react-constant-elements": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz",
- "integrity": "sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==",
+ "version": "7.25.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.1.tgz",
+ "integrity": "sha512-SLV/giH/V4SmloZ6Dt40HjTGTAIkxn33TVIHxNGNvo8ezMhrxBkzisj4op1KZYPIOHFLqhv60OHvX+YRu4xbmQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -1598,12 +1524,12 @@
}
},
"node_modules/@babel/plugin-transform-react-display-name": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz",
- "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz",
+ "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1613,16 +1539,16 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz",
- "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz",
+ "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-jsx": "^7.22.5",
- "@babel/types": "^7.22.15"
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/plugin-syntax-jsx": "^7.24.7",
+ "@babel/types": "^7.25.2"
},
"engines": {
"node": ">=6.9.0"
@@ -1632,12 +1558,12 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx-development": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz",
- "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz",
+ "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==",
"dev": true,
"dependencies": {
- "@babel/plugin-transform-react-jsx": "^7.22.5"
+ "@babel/plugin-transform-react-jsx": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1647,13 +1573,13 @@
}
},
"node_modules/@babel/plugin-transform-react-pure-annotations": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz",
- "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz",
+ "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1663,12 +1589,12 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz",
- "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
+ "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.7",
"regenerator-transform": "^0.15.2"
},
"engines": {
@@ -1679,12 +1605,12 @@
}
},
"node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz",
- "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
+ "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1694,16 +1620,16 @@
}
},
"node_modules/@babel/plugin-transform-runtime": {
- "version": "7.23.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.9.tgz",
- "integrity": "sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz",
+ "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==",
"dev": true,
"dependencies": {
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
- "babel-plugin-polyfill-corejs2": "^0.4.8",
- "babel-plugin-polyfill-corejs3": "^0.9.0",
- "babel-plugin-polyfill-regenerator": "^0.5.5",
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "babel-plugin-polyfill-corejs2": "^0.4.10",
+ "babel-plugin-polyfill-corejs3": "^0.10.1",
+ "babel-plugin-polyfill-regenerator": "^0.6.1",
"semver": "^6.3.1"
},
"engines": {
@@ -1713,42 +1639,13 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz",
- "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==",
- "dev": true,
- "dependencies": {
- "@babel/helper-compilation-targets": "^7.22.6",
- "@babel/helper-plugin-utils": "^7.22.5",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/@babel/plugin-transform-runtime/node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz",
- "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.5.0",
- "core-js-compat": "^3.34.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
"node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz",
- "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
+ "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1758,13 +1655,13 @@
}
},
"node_modules/@babel/plugin-transform-spread": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz",
- "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
+ "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1774,12 +1671,12 @@
}
},
"node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz",
- "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
+ "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1789,12 +1686,12 @@
}
},
"node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz",
- "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
+ "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1804,12 +1701,12 @@
}
},
"node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz",
- "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz",
+ "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -1819,15 +1716,16 @@
}
},
"node_modules/@babel/plugin-transform-typescript": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.3.tgz",
- "integrity": "sha512-ogV0yWnq38CFwH20l2Afz0dfKuZBx9o/Y2Rmh5vuSS0YD1hswgEgTfyTzuSrT2q9btmHRSqYoSfwFUVaC1M1Jw==",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz",
+ "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-create-class-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-typescript": "^7.23.3"
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-create-class-features-plugin": "^7.25.0",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/plugin-syntax-typescript": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1837,12 +1735,12 @@
}
},
"node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz",
- "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
+ "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1852,13 +1750,13 @@
}
},
"node_modules/@babel/plugin-transform-unicode-property-regex": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz",
- "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
+ "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1868,13 +1766,13 @@
}
},
"node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz",
- "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
+ "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1884,13 +1782,13 @@
}
},
"node_modules/@babel/plugin-transform-unicode-sets-regex": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz",
- "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz",
+ "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1900,26 +1798,28 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.3.tgz",
- "integrity": "sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==",
- "dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.23.3",
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-option": "^7.22.15",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3",
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3",
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz",
+ "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.25.2",
+ "@babel/helper-compilation-targets": "^7.25.2",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-validator-option": "^7.24.8",
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3",
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
"@babel/plugin-syntax-class-static-block": "^7.14.5",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.23.3",
- "@babel/plugin-syntax-import-attributes": "^7.23.3",
+ "@babel/plugin-syntax-import-assertions": "^7.24.7",
+ "@babel/plugin-syntax-import-attributes": "^7.24.7",
"@babel/plugin-syntax-import-meta": "^7.10.4",
"@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
@@ -1931,59 +1831,60 @@
"@babel/plugin-syntax-private-property-in-object": "^7.14.5",
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.23.3",
- "@babel/plugin-transform-async-generator-functions": "^7.23.3",
- "@babel/plugin-transform-async-to-generator": "^7.23.3",
- "@babel/plugin-transform-block-scoped-functions": "^7.23.3",
- "@babel/plugin-transform-block-scoping": "^7.23.3",
- "@babel/plugin-transform-class-properties": "^7.23.3",
- "@babel/plugin-transform-class-static-block": "^7.23.3",
- "@babel/plugin-transform-classes": "^7.23.3",
- "@babel/plugin-transform-computed-properties": "^7.23.3",
- "@babel/plugin-transform-destructuring": "^7.23.3",
- "@babel/plugin-transform-dotall-regex": "^7.23.3",
- "@babel/plugin-transform-duplicate-keys": "^7.23.3",
- "@babel/plugin-transform-dynamic-import": "^7.23.3",
- "@babel/plugin-transform-exponentiation-operator": "^7.23.3",
- "@babel/plugin-transform-export-namespace-from": "^7.23.3",
- "@babel/plugin-transform-for-of": "^7.23.3",
- "@babel/plugin-transform-function-name": "^7.23.3",
- "@babel/plugin-transform-json-strings": "^7.23.3",
- "@babel/plugin-transform-literals": "^7.23.3",
- "@babel/plugin-transform-logical-assignment-operators": "^7.23.3",
- "@babel/plugin-transform-member-expression-literals": "^7.23.3",
- "@babel/plugin-transform-modules-amd": "^7.23.3",
- "@babel/plugin-transform-modules-commonjs": "^7.23.3",
- "@babel/plugin-transform-modules-systemjs": "^7.23.3",
- "@babel/plugin-transform-modules-umd": "^7.23.3",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
- "@babel/plugin-transform-new-target": "^7.23.3",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.3",
- "@babel/plugin-transform-numeric-separator": "^7.23.3",
- "@babel/plugin-transform-object-rest-spread": "^7.23.3",
- "@babel/plugin-transform-object-super": "^7.23.3",
- "@babel/plugin-transform-optional-catch-binding": "^7.23.3",
- "@babel/plugin-transform-optional-chaining": "^7.23.3",
- "@babel/plugin-transform-parameters": "^7.23.3",
- "@babel/plugin-transform-private-methods": "^7.23.3",
- "@babel/plugin-transform-private-property-in-object": "^7.23.3",
- "@babel/plugin-transform-property-literals": "^7.23.3",
- "@babel/plugin-transform-regenerator": "^7.23.3",
- "@babel/plugin-transform-reserved-words": "^7.23.3",
- "@babel/plugin-transform-shorthand-properties": "^7.23.3",
- "@babel/plugin-transform-spread": "^7.23.3",
- "@babel/plugin-transform-sticky-regex": "^7.23.3",
- "@babel/plugin-transform-template-literals": "^7.23.3",
- "@babel/plugin-transform-typeof-symbol": "^7.23.3",
- "@babel/plugin-transform-unicode-escapes": "^7.23.3",
- "@babel/plugin-transform-unicode-property-regex": "^7.23.3",
- "@babel/plugin-transform-unicode-regex": "^7.23.3",
- "@babel/plugin-transform-unicode-sets-regex": "^7.23.3",
+ "@babel/plugin-transform-arrow-functions": "^7.24.7",
+ "@babel/plugin-transform-async-generator-functions": "^7.25.0",
+ "@babel/plugin-transform-async-to-generator": "^7.24.7",
+ "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
+ "@babel/plugin-transform-block-scoping": "^7.25.0",
+ "@babel/plugin-transform-class-properties": "^7.24.7",
+ "@babel/plugin-transform-class-static-block": "^7.24.7",
+ "@babel/plugin-transform-classes": "^7.25.0",
+ "@babel/plugin-transform-computed-properties": "^7.24.7",
+ "@babel/plugin-transform-destructuring": "^7.24.8",
+ "@babel/plugin-transform-dotall-regex": "^7.24.7",
+ "@babel/plugin-transform-duplicate-keys": "^7.24.7",
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0",
+ "@babel/plugin-transform-dynamic-import": "^7.24.7",
+ "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
+ "@babel/plugin-transform-export-namespace-from": "^7.24.7",
+ "@babel/plugin-transform-for-of": "^7.24.7",
+ "@babel/plugin-transform-function-name": "^7.25.1",
+ "@babel/plugin-transform-json-strings": "^7.24.7",
+ "@babel/plugin-transform-literals": "^7.25.2",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
+ "@babel/plugin-transform-member-expression-literals": "^7.24.7",
+ "@babel/plugin-transform-modules-amd": "^7.24.7",
+ "@babel/plugin-transform-modules-commonjs": "^7.24.8",
+ "@babel/plugin-transform-modules-systemjs": "^7.25.0",
+ "@babel/plugin-transform-modules-umd": "^7.24.7",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
+ "@babel/plugin-transform-new-target": "^7.24.7",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
+ "@babel/plugin-transform-numeric-separator": "^7.24.7",
+ "@babel/plugin-transform-object-rest-spread": "^7.24.7",
+ "@babel/plugin-transform-object-super": "^7.24.7",
+ "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
+ "@babel/plugin-transform-optional-chaining": "^7.24.8",
+ "@babel/plugin-transform-parameters": "^7.24.7",
+ "@babel/plugin-transform-private-methods": "^7.24.7",
+ "@babel/plugin-transform-private-property-in-object": "^7.24.7",
+ "@babel/plugin-transform-property-literals": "^7.24.7",
+ "@babel/plugin-transform-regenerator": "^7.24.7",
+ "@babel/plugin-transform-reserved-words": "^7.24.7",
+ "@babel/plugin-transform-shorthand-properties": "^7.24.7",
+ "@babel/plugin-transform-spread": "^7.24.7",
+ "@babel/plugin-transform-sticky-regex": "^7.24.7",
+ "@babel/plugin-transform-template-literals": "^7.24.7",
+ "@babel/plugin-transform-typeof-symbol": "^7.24.8",
+ "@babel/plugin-transform-unicode-escapes": "^7.24.7",
+ "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
+ "@babel/plugin-transform-unicode-regex": "^7.24.7",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.24.7",
"@babel/preset-modules": "0.1.6-no-external-plugins",
- "babel-plugin-polyfill-corejs2": "^0.4.6",
- "babel-plugin-polyfill-corejs3": "^0.8.5",
- "babel-plugin-polyfill-regenerator": "^0.5.3",
- "core-js-compat": "^3.31.0",
+ "babel-plugin-polyfill-corejs2": "^0.4.10",
+ "babel-plugin-polyfill-corejs3": "^0.10.4",
+ "babel-plugin-polyfill-regenerator": "^0.6.1",
+ "core-js-compat": "^3.37.1",
"semver": "^6.3.1"
},
"engines": {
@@ -2008,17 +1909,17 @@
}
},
"node_modules/@babel/preset-react": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz",
- "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz",
+ "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-option": "^7.22.15",
- "@babel/plugin-transform-react-display-name": "^7.23.3",
- "@babel/plugin-transform-react-jsx": "^7.22.15",
- "@babel/plugin-transform-react-jsx-development": "^7.22.5",
- "@babel/plugin-transform-react-pure-annotations": "^7.23.3"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-validator-option": "^7.24.7",
+ "@babel/plugin-transform-react-display-name": "^7.24.7",
+ "@babel/plugin-transform-react-jsx": "^7.24.7",
+ "@babel/plugin-transform-react-jsx-development": "^7.24.7",
+ "@babel/plugin-transform-react-pure-annotations": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2028,16 +1929,16 @@
}
},
"node_modules/@babel/preset-typescript": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz",
- "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz",
+ "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-option": "^7.22.15",
- "@babel/plugin-syntax-jsx": "^7.23.3",
- "@babel/plugin-transform-modules-commonjs": "^7.23.3",
- "@babel/plugin-transform-typescript": "^7.23.3"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-validator-option": "^7.24.7",
+ "@babel/plugin-syntax-jsx": "^7.24.7",
+ "@babel/plugin-transform-modules-commonjs": "^7.24.7",
+ "@babel/plugin-transform-typescript": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2053,10 +1954,9 @@
"dev": true
},
"node_modules/@babel/runtime": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
- "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
- "dev": true,
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz",
+ "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -2065,34 +1965,31 @@
}
},
"node_modules/@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
+ "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
+ "@babel/code-frame": "^7.24.7",
+ "@babel/parser": "^7.25.0",
+ "@babel/types": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz",
- "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.3",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.3",
- "@babel/types": "^7.23.3",
- "debug": "^4.1.0",
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
+ "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.25.0",
+ "@babel/parser": "^7.25.3",
+ "@babel/template": "^7.25.0",
+ "@babel/types": "^7.25.2",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
@@ -2100,13 +1997,13 @@
}
},
"node_modules/@babel/types": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz",
- "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
+ "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
"dev": true,
"dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.20",
+ "@babel/helper-string-parser": "^7.24.8",
+ "@babel/helper-validator-identifier": "^7.24.7",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -2186,9 +2083,9 @@
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
- "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+ "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
"dev": true,
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -2223,6 +2120,16 @@
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
"node_modules/@eslint/eslintrc/node_modules/globals": {
"version": "13.24.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
@@ -2250,6 +2157,18 @@
"js-yaml": "bin/js-yaml.js"
}
},
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/@eslint/eslintrc/node_modules/type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
@@ -2263,9 +2182,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz",
- "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+ "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -2290,6 +2209,7 @@
"version": "0.11.14",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
"integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+ "deprecated": "Use @eslint/config-array instead",
"dev": true,
"dependencies": {
"@humanwhocodes/object-schema": "^2.0.2",
@@ -2300,6 +2220,28 @@
"node": ">=10.10.0"
}
},
+ "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
@@ -2314,9 +2256,10 @@
}
},
"node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
- "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
"dev": true
},
"node_modules/@isaacs/cliui": {
@@ -2434,71 +2377,19 @@
"node": ">=6"
}
},
- "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "node_modules/@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
"engines": {
"node": ">=8"
}
},
- "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/schema": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
- "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@jest/console": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
- "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
+ "node_modules/@jest/console": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
+ "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
"dev": true,
"dependencies": {
"@jest/types": "^29.6.3",
@@ -2675,14 +2566,14 @@
}
},
"node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz",
- "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
"dev": true,
"dependencies": {
- "@babel/core": "^7.12.3",
- "@babel/parser": "^7.14.7",
- "@istanbuljs/schema": "^0.1.2",
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
"istanbul-lib-coverage": "^3.2.0",
"semver": "^7.5.4"
},
@@ -2690,26 +2581,11 @@
"node": ">=10"
}
},
- "node_modules/@jest/reporters/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@jest/reporters/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -2717,12 +2593,6 @@
"node": ">=10"
}
},
- "node_modules/@jest/reporters/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/@jest/schemas": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
@@ -2823,57 +2693,57 @@
}
},
"node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"dev": true,
"dependencies": {
- "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
- "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+ "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
"dev": true,
"dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.20",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
- "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
@@ -2888,9 +2758,9 @@
"peer": true
},
"node_modules/@leichtgewicht/ip-codec": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz",
- "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
+ "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
"dev": true
},
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
@@ -2960,35 +2830,33 @@
}
},
"node_modules/@playwright/test": {
- "version": "1.41.2",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.2.tgz",
- "integrity": "sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg==",
+ "version": "1.45.3",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.3.tgz",
+ "integrity": "sha512-UKF4XsBfy+u3MFWEH44hva1Q8Da28G6RFtR2+5saw+jgAFQV5yYnB1fu68Mz7fO+5GJF3wgwAIs0UelU8TxFrA==",
"dev": true,
"peer": true,
"dependencies": {
- "playwright": "1.41.2"
+ "playwright": "1.45.3"
},
"bin": {
"playwright": "cli.js"
},
"engines": {
- "node": ">=16"
+ "node": ">=18"
}
},
"node_modules/@pmmmwh/react-refresh-webpack-plugin": {
- "version": "0.5.11",
- "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz",
- "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==",
+ "version": "0.5.15",
+ "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz",
+ "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==",
"dev": true,
"dependencies": {
- "ansi-html-community": "^0.0.8",
- "common-path-prefix": "^3.0.0",
+ "ansi-html": "^0.0.9",
"core-js-pure": "^3.23.3",
"error-stack-parser": "^2.0.6",
- "find-up": "^5.0.0",
"html-entities": "^2.1.0",
"loader-utils": "^2.0.4",
- "schema-utils": "^3.0.0",
+ "schema-utils": "^4.2.0",
"source-map": "^0.7.3"
},
"engines": {
@@ -3000,7 +2868,7 @@
"sockjs-client": "^1.4.0",
"type-fest": ">=0.17.0 <5.0.0",
"webpack": ">=4.43.0 <6.0.0",
- "webpack-dev-server": "3.x || 4.x",
+ "webpack-dev-server": "3.x || 4.x || 5.x",
"webpack-hot-middleware": "2.x",
"webpack-plugin-serve": "0.x || 1.x"
},
@@ -3026,9 +2894,9 @@
}
},
"node_modules/@polka/url": {
- "version": "1.0.0-next.23",
- "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz",
- "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==",
+ "version": "1.0.0-next.25",
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz",
+ "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==",
"dev": true
},
"node_modules/@puppeteer/browsers": {
@@ -3060,6 +2928,23 @@
}
}
},
+ "node_modules/@puppeteer/browsers/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@puppeteer/browsers/node_modules/tar-fs": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz",
@@ -3216,9 +3101,9 @@
"dev": true
},
"node_modules/@sideway/address": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz",
- "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
+ "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==",
"dev": true,
"dependencies": {
"@hapi/hoek": "^9.0.0"
@@ -3243,9 +3128,9 @@
"dev": true
},
"node_modules/@sinonjs/commons": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
- "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
"dependencies": {
"type-detect": "4.0.8"
@@ -3521,7 +3406,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@tannin/compile/-/compile-1.1.0.tgz",
"integrity": "sha512-n8m9eNDfoNZoxdvWiTfW/hSPhehzLJ3zW7f8E7oT6mCROoMNWCB4TYtv041+2FMAxweiE0j7i1jubQU4MEC/Gg==",
- "dev": true,
"dependencies": {
"@tannin/evaluate": "^1.2.0",
"@tannin/postfix": "^1.1.0"
@@ -3530,14 +3414,12 @@
"node_modules/@tannin/evaluate": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@tannin/evaluate/-/evaluate-1.2.0.tgz",
- "integrity": "sha512-3ioXvNowbO/wSrxsDG5DKIMxC81P0QrQTYai8zFNY+umuoHWRPbQ/TuuDEOju9E+jQDXmj6yI5GyejNuh8I+eg==",
- "dev": true
+ "integrity": "sha512-3ioXvNowbO/wSrxsDG5DKIMxC81P0QrQTYai8zFNY+umuoHWRPbQ/TuuDEOju9E+jQDXmj6yI5GyejNuh8I+eg=="
},
"node_modules/@tannin/plural-forms": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@tannin/plural-forms/-/plural-forms-1.1.0.tgz",
"integrity": "sha512-xl9R2mDZO/qiHam1AgMnAES6IKIg7OBhcXqy6eDsRCdXuxAFPcjrej9HMjyCLE0DJ/8cHf0i5OQTstuBRhpbHw==",
- "dev": true,
"dependencies": {
"@tannin/compile": "^1.1.0"
}
@@ -3545,8 +3427,7 @@
"node_modules/@tannin/postfix": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@tannin/postfix/-/postfix-1.1.0.tgz",
- "integrity": "sha512-oocsqY7g0cR+Gur5jRQLSrX2OtpMLMse1I10JQBm8CdGMrDkh1Mg2gjsiquMHRtBs4Qwu5wgEp5GgIYHk4SNPw==",
- "dev": true
+ "integrity": "sha512-oocsqY7g0cR+Gur5jRQLSrX2OtpMLMse1I10JQBm8CdGMrDkh1Mg2gjsiquMHRtBs4Qwu5wgEp5GgIYHk4SNPw=="
},
"node_modules/@tootallnate/once": {
"version": "2.0.0",
@@ -3605,9 +3486,9 @@
}
},
"node_modules/@types/babel__traverse": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz",
- "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==",
+ "version": "7.20.6",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
+ "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
"dev": true,
"dependencies": {
"@babel/types": "^7.20.7"
@@ -3633,9 +3514,9 @@
}
},
"node_modules/@types/chart.js": {
- "version": "2.9.40",
- "resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.40.tgz",
- "integrity": "sha512-ApIH2LIDXzKTNtG4oTMmn2CIII6lvRvxyKnmLb1zYFlwXtE4lTOb2ywgXQJYVuhgWpqaCSHSYOlzO+5gs6hL+A==",
+ "version": "2.9.41",
+ "resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.41.tgz",
+ "integrity": "sha512-3dvkDvueckY83UyUXtJMalYoH6faOLkWQoaTlJgB4Djde3oORmNP0Jw85HtzTuXyliUHcdp704s0mZFQKio/KQ==",
"dev": true,
"dependencies": {
"moment": "^2.10.2"
@@ -3651,9 +3532,9 @@
}
},
"node_modules/@types/connect-history-api-fallback": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.3.tgz",
- "integrity": "sha512-6mfQ6iNvhSKCZJoY6sIG3m0pKkdUcweVNOLuBBKvoWGzl2yRxOJcYOTRyLKt3nxXvBLJWa6QkW//tgbIwJehmA==",
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz",
+ "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==",
"dev": true,
"dependencies": {
"@types/express-serve-static-core": "*",
@@ -3661,25 +3542,17 @@
}
},
"node_modules/@types/eslint": {
- "version": "8.44.7",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.7.tgz",
- "integrity": "sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==",
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz",
+ "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==",
"dev": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
"@types/estree": "*",
"@types/json-schema": "*"
}
},
- "node_modules/@types/eslint-scope": {
- "version": "3.7.7",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
- "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
- "dev": true,
- "dependencies": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
@@ -3699,9 +3572,9 @@
}
},
"node_modules/@types/express-serve-static-core": {
- "version": "4.17.41",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz",
- "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==",
+ "version": "4.19.5",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
+ "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -3810,18 +3683,18 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "20.9.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz",
- "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==",
+ "version": "22.0.2",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.2.tgz",
+ "integrity": "sha512-yPL6DyFwY5PiMVEwymNeqUTKsDczQBJ/5T7W/46RwLU/VH+AA8aT5TZkvBviLKLbbm0hlfftEkGrNzfRk/fofQ==",
"dev": true,
"dependencies": {
- "undici-types": "~5.26.4"
+ "undici-types": "~6.11.1"
}
},
"node_modules/@types/node-forge": {
- "version": "1.3.9",
- "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.9.tgz",
- "integrity": "sha512-meK88cx/sTalPSLSoCzkiUB4VPIFHmxtXm5FaaqRDqBX2i/Sy8bJ4odsan0b20RBjPh06dAQ+OTTdnyQyhJZyQ==",
+ "version": "1.3.11",
+ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
+ "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
"dev": true,
"dependencies": {
"@types/node": "*"
@@ -3840,9 +3713,9 @@
"dev": true
},
"node_modules/@types/qs": {
- "version": "6.9.10",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz",
- "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==",
+ "version": "6.9.15",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz",
+ "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==",
"dev": true
},
"node_modules/@types/range-parser": {
@@ -3858,9 +3731,9 @@
"dev": true
},
"node_modules/@types/semver": {
- "version": "7.5.7",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz",
- "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==",
+ "version": "7.5.8",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
"dev": true
},
"node_modules/@types/send": {
@@ -3883,14 +3756,14 @@
}
},
"node_modules/@types/serve-static": {
- "version": "1.15.5",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz",
- "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==",
+ "version": "1.15.7",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
+ "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
"dev": true,
"dependencies": {
"@types/http-errors": "*",
- "@types/mime": "*",
- "@types/node": "*"
+ "@types/node": "*",
+ "@types/send": "*"
}
},
"node_modules/@types/sockjs": {
@@ -3903,9 +3776,9 @@
}
},
"node_modules/@types/source-list-map": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.5.tgz",
- "integrity": "sha512-cHBTLeIGIREJx839cDfMLKWao+FaJOlaPz4mnFHXUzShS8sXhzw6irhvIpYvp28TbTmTeAt3v+QgHMANsGbQtA==",
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz",
+ "integrity": "sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==",
"dev": true
},
"node_modules/@types/stack-utils": {
@@ -3915,9 +3788,9 @@
"dev": true
},
"node_modules/@types/tapable": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.11.tgz",
- "integrity": "sha512-R3ltemSqZ/TKOBeyy+GBfZCLX3AYpxqarIbUMNe7+lxdazJp4iWLFpmjgBeZoRiKrWNImer1oWOlG2sDR6vGaw==",
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.12.tgz",
+ "integrity": "sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==",
"dev": true
},
"node_modules/@types/tough-cookie": {
@@ -3927,9 +3800,9 @@
"dev": true
},
"node_modules/@types/uglify-js": {
- "version": "3.17.4",
- "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.4.tgz",
- "integrity": "sha512-Hm/T0kV3ywpJyMGNbsItdivRhYNCQQf1IIsYsXnoVPES4t+FMLyDe0/K+Ea7ahWtMtSNb22ZdY7MIyoD9rqARg==",
+ "version": "3.17.5",
+ "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.5.tgz",
+ "integrity": "sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==",
"dev": true,
"dependencies": {
"source-map": "^0.6.1"
@@ -3945,9 +3818,9 @@
}
},
"node_modules/@types/webpack": {
- "version": "4.41.36",
- "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.36.tgz",
- "integrity": "sha512-pF+DVW1pMLmgsPXqJr5QimdxIzOhe8oGKB98gdqAm0egKBy1lOLD5mRxbYboMQRkpYcG7BYcpqYblpKyvE7vhQ==",
+ "version": "4.41.38",
+ "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.38.tgz",
+ "integrity": "sha512-oOW7E931XJU1mVfCnxCVgv8GLFL768pDO5u2Gzk82i8yTIgX6i7cntyZOkZYb/JtYM8252SN9bQp9tgkVDSsRw==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -3979,18 +3852,18 @@
}
},
"node_modules/@types/ws": {
- "version": "8.5.9",
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz",
- "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==",
+ "version": "8.5.12",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz",
+ "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==",
"dev": true,
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/yargs": {
- "version": "17.0.31",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz",
- "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
@@ -4047,26 +3920,11 @@
}
}
},
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -4074,12 +3932,6 @@
"node": ">=10"
}
},
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/@typescript-eslint/parser": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz",
@@ -4193,50 +4045,11 @@
}
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -4244,12 +4057,6 @@
"node": ">=10"
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/@typescript-eslint/utils": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
@@ -4275,26 +4082,11 @@
"eslint": "^7.0.0 || ^8.0.0"
}
},
- "node_modules/@typescript-eslint/utils/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@typescript-eslint/utils/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -4302,12 +4094,6 @@
"node": ">=10"
}
},
- "node_modules/@typescript-eslint/utils/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/@typescript-eslint/visitor-keys": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz",
@@ -4344,14 +4130,33 @@
"dev": true
},
"node_modules/@vue/compiler-sfc": {
- "version": "2.7.15",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.15.tgz",
- "integrity": "sha512-FCvIEevPmgCgqFBH7wD+3B97y7u7oj/Wr69zADBf403Tui377bThTjBvekaZvlRr4IwUAu3M6hYZeULZFJbdYg==",
+ "version": "2.7.16",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
+ "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
"dev": true,
"dependencies": {
- "@babel/parser": "^7.18.4",
+ "@babel/parser": "^7.23.5",
"postcss": "^8.4.14",
"source-map": "^0.6.1"
+ },
+ "optionalDependencies": {
+ "prettier": "^1.18.2 || ^2.0.0"
+ }
+ },
+ "node_modules/@vue/compiler-sfc/node_modules/prettier": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/@vue/compiler-sfc/node_modules/source-map": {
@@ -4447,9 +4252,9 @@
"dev": true
},
"node_modules/@webassemblyjs/ast": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz",
- "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
+ "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
"dev": true,
"dependencies": {
"@webassemblyjs/helper-numbers": "1.11.6",
@@ -4469,9 +4274,9 @@
"dev": true
},
"node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz",
- "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
+ "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
"dev": true
},
"node_modules/@webassemblyjs/helper-numbers": {
@@ -4492,15 +4297,15 @@
"dev": true
},
"node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz",
- "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
+ "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.11.6"
+ "@webassemblyjs/wasm-gen": "1.12.1"
}
},
"node_modules/@webassemblyjs/ieee754": {
@@ -4528,28 +4333,28 @@
"dev": true
},
"node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz",
- "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
+ "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/helper-wasm-section": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.11.6",
- "@webassemblyjs/wasm-opt": "1.11.6",
- "@webassemblyjs/wasm-parser": "1.11.6",
- "@webassemblyjs/wast-printer": "1.11.6"
+ "@webassemblyjs/helper-wasm-section": "1.12.1",
+ "@webassemblyjs/wasm-gen": "1.12.1",
+ "@webassemblyjs/wasm-opt": "1.12.1",
+ "@webassemblyjs/wasm-parser": "1.12.1",
+ "@webassemblyjs/wast-printer": "1.12.1"
}
},
"node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz",
- "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
+ "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/ieee754": "1.11.6",
"@webassemblyjs/leb128": "1.11.6",
@@ -4557,24 +4362,24 @@
}
},
"node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz",
- "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
+ "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-buffer": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.11.6",
- "@webassemblyjs/wasm-parser": "1.11.6"
+ "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/helper-buffer": "1.12.1",
+ "@webassemblyjs/wasm-gen": "1.12.1",
+ "@webassemblyjs/wasm-parser": "1.12.1"
}
},
"node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz",
- "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
+ "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-api-error": "1.11.6",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/ieee754": "1.11.6",
@@ -4583,12 +4388,12 @@
}
},
"node_modules/@webassemblyjs/wast-printer": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz",
- "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
+ "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/ast": "1.12.1",
"@xtuc/long": "4.2.2"
}
},
@@ -4637,23 +4442,55 @@
}
},
"node_modules/@wordpress/api-fetch": {
- "version": "6.48.0",
- "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-6.48.0.tgz",
- "integrity": "sha512-Yo9kpwf07OXt/xV82EfYlnR4Dl6T/VnhKbo0wtmOO7fLxhfOrF0rFgJM4X78WEWBYcjnGwQD5c5ufad7X5XK1A==",
+ "version": "6.55.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-6.55.0.tgz",
+ "integrity": "sha512-1HrCUsJdeRY5Y0IjplotINwqMRO81e7O7VhBScuKk7iOuDm/E1ioKv2uLGnPNWziYu+Zf025byxOqVzXDyM2gw==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.16.0",
- "@wordpress/i18n": "^4.51.0",
- "@wordpress/url": "^3.52.0"
+ "@wordpress/i18n": "^4.58.0",
+ "@wordpress/url": "^3.59.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@wordpress/api-fetch/node_modules/@wordpress/hooks": {
+ "version": "3.58.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz",
+ "integrity": "sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.16.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@wordpress/api-fetch/node_modules/@wordpress/i18n": {
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.58.0.tgz",
+ "integrity": "sha512-VfvS3BWv/RDjRKD6PscIcvYfWKnGJcI/DEqyDgUMhxCM6NRwoL478CsUKTiGJIymeyRodNRfprdcF086DpGKYw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.16.0",
+ "@wordpress/hooks": "^3.58.0",
+ "gettext-parser": "^1.3.1",
+ "memize": "^2.1.0",
+ "sprintf-js": "^1.1.1",
+ "tannin": "^1.2.0"
+ },
+ "bin": {
+ "pot-to-php": "tools/pot-to-php.js"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@wordpress/babel-plugin-import-jsx-pragma": {
- "version": "4.34.0",
- "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-4.34.0.tgz",
- "integrity": "sha512-DOoUJKvfUc8rdiGqcZND5lauoY4B5+cCuuHLh9AztE1t2DlQJBy6DtP6t1bUZb7BYUWOoWgRflMLtOK3ZTf0cg==",
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-4.41.0.tgz",
+ "integrity": "sha512-hYxj2Uobxk86ctlfaJou9v13XqXZ30yx4ZwRNu5cH5/LWXe2MIXBTPv7dUk6wqN/qFOjsFvP9jCB0NsW6MnkrA==",
"dev": true,
"engines": {
"node": ">=14"
@@ -4663,9 +4500,9 @@
}
},
"node_modules/@wordpress/babel-preset-default": {
- "version": "7.35.0",
- "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-7.35.0.tgz",
- "integrity": "sha512-wgZOezNvzbrJTHn0Cyt8+Si7sb5aJJ+akHOrEgvUUv576LfgWUKHPRz8Ecu1fFlupEp35r1uoQ5J+UviLWrvEg==",
+ "version": "7.42.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-7.42.0.tgz",
+ "integrity": "sha512-AWSxWuEuzazt/nWomKiaVhYQeXuqxTniPCKhvks58wB3P4UXvSe3hRnO+nujz20IuxIk2xHT6x47HgpDZy30jw==",
"dev": true,
"dependencies": {
"@babel/core": "^7.16.0",
@@ -4674,57 +4511,56 @@
"@babel/preset-env": "^7.16.0",
"@babel/preset-typescript": "^7.16.0",
"@babel/runtime": "^7.16.0",
- "@wordpress/babel-plugin-import-jsx-pragma": "^4.34.0",
- "@wordpress/browserslist-config": "^5.34.0",
- "@wordpress/warning": "^2.51.0",
+ "@wordpress/babel-plugin-import-jsx-pragma": "^4.41.0",
+ "@wordpress/browserslist-config": "^5.41.0",
+ "@wordpress/warning": "^2.58.0",
"browserslist": "^4.21.10",
"core-js": "^3.31.0",
- "react": "^18.2.0"
+ "react": "^18.3.0"
},
"engines": {
"node": ">=14"
}
},
"node_modules/@wordpress/base-styles": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-4.42.0.tgz",
- "integrity": "sha512-CD8nFUg45v70BTsKuS9f/sJsdF8xOkJb2oXd0HikWtuJJ24YQB8bzkeIg+TvD5LnK4pwZeDskODo4QFBsoCwIw==",
+ "version": "4.49.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-4.49.0.tgz",
+ "integrity": "sha512-yFRYqNtd26ULZ0oAHhCu/IcaA0XHI3E7kRCKajZqUvyRQj7YprXnpD3o0/pnwvF6ZFTXzCX8pXHjUc2TIv97ig==",
"dev": true
},
"node_modules/@wordpress/browserslist-config": {
- "version": "5.34.0",
- "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.34.0.tgz",
- "integrity": "sha512-LafF3XoetOAN99bktOzc9hSOv7cPoQEe0/KPgiw24t77xvRqLuWww+zYbiHAHYSzdBGngrlNwRLgloSifnp+hg==",
+ "version": "5.41.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.41.0.tgz",
+ "integrity": "sha512-J7ejzzDpPZddVIiq2YiK8J/pNTJDy3X1s+5ZtwkwklCxBMZJurxf9pEhtbaf7us0Q6c1j8Ubv7Fpx3lqk2ypxA==",
"dev": true,
"engines": {
"node": ">=14"
}
},
"node_modules/@wordpress/dependency-extraction-webpack-plugin": {
- "version": "4.31.0",
- "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-4.31.0.tgz",
- "integrity": "sha512-Xpm8EEhi6e8GL1juYh/70AFbcE/ZVXJ3p47KMkkEsn5t+hG9QHjKe2lTj98v2r3rB+ampoK+whdV1w6gItXYpw==",
+ "version": "5.9.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-5.9.0.tgz",
+ "integrity": "sha512-hXbCkbG1XES47t7hFSETRrLfaRSPyQPlCnhlCx7FfhYFD0wh1jVArApXX5dD+A6wTrayXX/a16MpfaNqE662XA==",
"dev": true,
"dependencies": {
- "json2php": "^0.0.7",
- "webpack-sources": "^3.2.2"
+ "json2php": "^0.0.7"
},
"engines": {
- "node": ">=14"
+ "node": ">=18"
},
"peerDependencies": {
- "webpack": "^4.8.3 || ^5.0.0"
+ "webpack": "^5.0.0"
}
},
"node_modules/@wordpress/e2e-test-utils-playwright": {
- "version": "0.16.0",
- "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-0.16.0.tgz",
- "integrity": "sha512-CktRj5/Cc/pAvTHXIAPIMrmmnb0VjtXbTGSjYG6pW/JI2YAmpwY2yBA+DlHJjqOIpcjDDj+sSsJomRSxT2chwQ==",
+ "version": "0.26.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-0.26.0.tgz",
+ "integrity": "sha512-4KFyQ3IsYIJaIvOQ1qhAHhRISs9abNToF/bktfMNxQiEJsmbNn7lq/IbaY+shqwdBWVg8TQtLcL4MpSl0ISaxQ==",
"dev": true,
"dependencies": {
- "@wordpress/api-fetch": "^6.45.0",
- "@wordpress/keycodes": "^3.48.0",
- "@wordpress/url": "^3.49.0",
+ "@wordpress/api-fetch": "^6.55.0",
+ "@wordpress/keycodes": "^3.58.0",
+ "@wordpress/url": "^3.59.0",
"change-case": "^4.1.2",
"form-data": "^4.0.0",
"get-port": "^5.1.1",
@@ -4740,16 +4576,16 @@
}
},
"node_modules/@wordpress/eslint-plugin": {
- "version": "17.8.0",
- "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-17.8.0.tgz",
- "integrity": "sha512-Ob0WR21Y9AcX7AFKhj0RtJ1l5odp9+Uq0W5tOMVY0jZBAW0oVF6YeZMbc0zbynPss5PnWljtk0YX3CJCae2p3Q==",
+ "version": "18.1.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-18.1.0.tgz",
+ "integrity": "sha512-5eGpXEwaZsKbEh9040nVr4ggmrpPmltP+Ie4iGruWvCme6ZIFYw70CyWEV8S102IkqjH/BaH6d+CWg8tN7sc/g==",
"dev": true,
"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.35.0",
- "@wordpress/prettier-config": "^3.8.0",
+ "@wordpress/babel-preset-default": "^7.42.0",
+ "@wordpress/prettier-config": "^3.15.0",
"cosmiconfig": "^7.0.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.25.2",
@@ -4825,26 +4661,34 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@wordpress/hooks": {
- "version": "3.51.0",
- "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.51.0.tgz",
- "integrity": "sha512-u//qLJCfgmGBLEdAtZx5C1KzmhcCYDIk46feYGBR9DHB1/fqdvMpxc20un62i8QgYvJyF7GChmerkPbssa6a8w==",
- "dev": true,
- "dependencies": {
+ "node_modules/@wordpress/eslint-plugin/node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@wordpress/hooks": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.9.0.tgz",
+ "integrity": "sha512-nan2w5imPhTaJwWdKjm/0ZMDbWR3P6Vhl4OqnBZZcJqOyNSfwsnJ98I+BWjq0U6SmiCnZQERjN0SjVdmD1tCjw==",
+ "dependencies": {
"@babel/runtime": "^7.16.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=18.12.0",
+ "npm": ">=8.19.2"
}
},
"node_modules/@wordpress/i18n": {
- "version": "4.51.0",
- "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.51.0.tgz",
- "integrity": "sha512-JiMEstT98R1e4bgI8DA+XVCXUSis/6eZ7+RF5nHuDiseIyQ68B2D2FzYoEFaw/zaVebvtWA0lZ8HbHihgsSVPQ==",
- "dev": true,
+ "version": "5.9.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-5.9.0.tgz",
+ "integrity": "sha512-pKFV9S/l0TFlm0mlWLW51hAoRDNmZPGnfEpNXq43VKZkm1cco3Z1E54PHMGk8HdCECHqYNiJuQJOBOlqcYmnVQ==",
"dependencies": {
"@babel/runtime": "^7.16.0",
- "@wordpress/hooks": "^3.51.0",
+ "@wordpress/hooks": "^4.9.0",
"gettext-parser": "^1.3.1",
"memize": "^2.1.0",
"sprintf-js": "^1.1.1",
@@ -4854,13 +4698,14 @@
"pot-to-php": "tools/pot-to-php.js"
},
"engines": {
- "node": ">=12"
+ "node": ">=18.12.0",
+ "npm": ">=8.19.2"
}
},
"node_modules/@wordpress/jest-console": {
- "version": "7.22.0",
- "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-7.22.0.tgz",
- "integrity": "sha512-vuTq/VwmXXTDlZzHiFlYQDCAq8xTg/99pHBiKcJwKe13LZgxEwbUtjKp18JzbXb5qS9KPW/EynTiYxpTLn1o7w==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-7.29.0.tgz",
+ "integrity": "sha512-/9PZJhyszdRX4mka7t1WzoooM+Q/DwC4jkNVtJxqci5lbL3Lrhy1cCJGCgMr1n/9w+zs7eLmExFBvV4v44iyNw==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.16.0",
@@ -4874,12 +4719,12 @@
}
},
"node_modules/@wordpress/jest-preset-default": {
- "version": "11.22.0",
- "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-11.22.0.tgz",
- "integrity": "sha512-OSKGvYOQDWynaA78AUzwMpj8kkUrBSJF/Z8InH84RHV1w30DUMQ0b7pSJzOiPPo72uXDcTiit4hYHvSK20BqbA==",
+ "version": "11.29.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-11.29.0.tgz",
+ "integrity": "sha512-7LA0ZS5t0Thn7xrdwPL3hLgjB9LKloneGhMwnnDUTgJP330lyfdDfJ+O6Lnz3iL+bg68mkA3AzrT9Fs9f3WKww==",
"dev": true,
"dependencies": {
- "@wordpress/jest-console": "^7.22.0",
+ "@wordpress/jest-console": "^7.29.0",
"babel-jest": "^29.6.2"
},
"engines": {
@@ -4891,22 +4736,54 @@
}
},
"node_modules/@wordpress/keycodes": {
- "version": "3.51.0",
- "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-3.51.0.tgz",
- "integrity": "sha512-wudlftpjZ/2tZ2gKY7w2m7BG4LBhmEvDn2K48IbTcMtEyFJidIB0IFpT+skR1aFhIekGDZ7W8UXPQVbjwbWhwA==",
+ "version": "3.58.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-3.58.0.tgz",
+ "integrity": "sha512-Q/LRKpx8ndzuHlkxSQ2BD+NTYYKQPIneNNMng8hTAfyU7RFwXpqj06HpeOFGh4XIdPKCs/8hmucoLJRmmLmZJA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.16.0",
+ "@wordpress/i18n": "^4.58.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@wordpress/keycodes/node_modules/@wordpress/hooks": {
+ "version": "3.58.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz",
+ "integrity": "sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.16.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@wordpress/keycodes/node_modules/@wordpress/i18n": {
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.58.0.tgz",
+ "integrity": "sha512-VfvS3BWv/RDjRKD6PscIcvYfWKnGJcI/DEqyDgUMhxCM6NRwoL478CsUKTiGJIymeyRodNRfprdcF086DpGKYw==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.16.0",
- "@wordpress/i18n": "^4.51.0"
+ "@wordpress/hooks": "^3.58.0",
+ "gettext-parser": "^1.3.1",
+ "memize": "^2.1.0",
+ "sprintf-js": "^1.1.1",
+ "tannin": "^1.2.0"
+ },
+ "bin": {
+ "pot-to-php": "tools/pot-to-php.js"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@wordpress/npm-package-json-lint-config": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-4.36.0.tgz",
- "integrity": "sha512-//BDDFVMHxtXC3JC+76DR8ZbJPI3ltzJ3XLbcn8myG9rlQegbSSqmltVcYoR3CGKFI+IbxY1P8CuzJGRN5EIRA==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-4.43.0.tgz",
+ "integrity": "sha512-XSb7AdDC7yGTBVYeRM4oqmOygEB+/+tk7lobLIGDmlZJs+M3F/NUvQq0Vcas1pojq2fyPYTUwOlu81ga33fNwQ==",
"dev": true,
"engines": {
"node": ">=14"
@@ -4916,12 +4793,12 @@
}
},
"node_modules/@wordpress/postcss-plugins-preset": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-4.35.0.tgz",
- "integrity": "sha512-+DiPMZMZXN/U/7mCY/oYEnttjCx2A+m7WOk3hWZt4JP0zDud10iHGMt+VzYPcQBQqABhK9CfPFWhz0WXinJQCw==",
+ "version": "4.42.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-4.42.0.tgz",
+ "integrity": "sha512-5xmKF7IUsqS5JcmJlHKHq7RaR6ZpaLj3n9c+X0X0/Oo7ZCIGp6WeDQngx13sH4NJoKXrZ9g4n1rbzhEKeo/Wtg==",
"dev": true,
"dependencies": {
- "@wordpress/base-styles": "^4.42.0",
+ "@wordpress/base-styles": "^4.49.0",
"autoprefixer": "^10.2.5"
},
"engines": {
@@ -4932,9 +4809,9 @@
}
},
"node_modules/@wordpress/prettier-config": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-3.8.0.tgz",
- "integrity": "sha512-xKhhI73uTM3UeK7MYjCeyqGgyZvXic4t0rXKiERN6j4aBH7TdAflKli1zj9Xiy0AxFwLJcy0SZqxqLcw0JHSzA==",
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-3.15.0.tgz",
+ "integrity": "sha512-exC2rkEioTt//AnzPRyaaFv8FNYIvamPDytNol5bKQ6Qh65QSdZZE9V+GtRCrIPL7/Bq6xba03XuRVxl9TjtJg==",
"dev": true,
"engines": {
"node": ">=14"
@@ -4944,24 +4821,24 @@
}
},
"node_modules/@wordpress/scripts": {
- "version": "26.19.0",
- "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-26.19.0.tgz",
- "integrity": "sha512-m3QYlgpWRfIqCfU4jWKwGeA12Qkt6d9CMewEIxIBGVlEGd/sL5rU1fM7LKNBEbSPQpaOTWJApNGWPcW75Fwp+w==",
+ "version": "27.9.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-27.9.0.tgz",
+ "integrity": "sha512-ohiDHMnfTTBTi7qS7AVJZUi1dxwg0k3Aav1a8CzUoOE8YoT8tvMQ3W89H9XgqMgMTWUCdgTUBYLTJTivfVVbXQ==",
"dev": true,
"dependencies": {
"@babel/core": "^7.16.0",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
"@svgr/webpack": "^8.0.1",
- "@wordpress/babel-preset-default": "^7.32.0",
- "@wordpress/browserslist-config": "^5.31.0",
- "@wordpress/dependency-extraction-webpack-plugin": "^4.31.0",
- "@wordpress/e2e-test-utils-playwright": "^0.16.0",
- "@wordpress/eslint-plugin": "^17.5.0",
- "@wordpress/jest-preset-default": "^11.19.0",
- "@wordpress/npm-package-json-lint-config": "^4.33.0",
- "@wordpress/postcss-plugins-preset": "^4.32.0",
- "@wordpress/prettier-config": "^3.5.0",
- "@wordpress/stylelint-config": "^21.31.0",
+ "@wordpress/babel-preset-default": "^7.42.0",
+ "@wordpress/browserslist-config": "^5.41.0",
+ "@wordpress/dependency-extraction-webpack-plugin": "^5.9.0",
+ "@wordpress/e2e-test-utils-playwright": "^0.26.0",
+ "@wordpress/eslint-plugin": "^18.1.0",
+ "@wordpress/jest-preset-default": "^11.29.0",
+ "@wordpress/npm-package-json-lint-config": "^4.43.0",
+ "@wordpress/postcss-plugins-preset": "^4.42.0",
+ "@wordpress/prettier-config": "^3.15.0",
+ "@wordpress/stylelint-config": "^21.41.0",
"adm-zip": "^0.5.9",
"babel-jest": "^29.6.2",
"babel-loader": "^8.2.3",
@@ -4989,7 +4866,6 @@
"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",
@@ -4997,6 +4873,7 @@
"react-refresh": "^0.14.0",
"read-pkg-up": "^7.0.1",
"resolve-bin": "^0.4.0",
+ "rtlcss-webpack-plugin": "^4.0.7",
"sass": "^1.35.2",
"sass-loader": "^12.1.0",
"source-map-loader": "^3.0.0",
@@ -5012,19 +4889,66 @@
"wp-scripts": "bin/wp-scripts.js"
},
"engines": {
- "node": ">=14",
+ "node": ">=18",
"npm": ">=6.14.4"
},
"peerDependencies": {
- "@playwright/test": "^1.39.0",
+ "@playwright/test": "^1.43.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
}
},
+ "node_modules/@wordpress/scripts/node_modules/css-loader": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz",
+ "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==",
+ "dev": true,
+ "dependencies": {
+ "icss-utils": "^5.1.0",
+ "postcss": "^8.4.33",
+ "postcss-modules-extract-imports": "^3.1.0",
+ "postcss-modules-local-by-default": "^4.0.5",
+ "postcss-modules-scope": "^3.2.0",
+ "postcss-modules-values": "^4.0.0",
+ "postcss-value-parser": "^4.2.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">= 12.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "@rspack/core": "0.x || 1.x",
+ "webpack": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@rspack/core": {
+ "optional": true
+ },
+ "webpack": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@wordpress/scripts/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/@wordpress/stylelint-config": {
- "version": "21.34.0",
- "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-21.34.0.tgz",
- "integrity": "sha512-Zou/Y6vdMWnAMzcPNH4yZoKkd8h22DyYO4jyC58ChPEF3O7csvmjpbnDloAr5/MOgCz91hnSkZmiKG0zp8VE6w==",
+ "version": "21.41.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-21.41.0.tgz",
+ "integrity": "sha512-2wxFu8ICeRGF3Lxz7H7o2SU1u6pTI4mjuog39DgtCNb+v+f6yhgREDuNQEeti3Svb0rjj63AJ7r2CqLZk+EQIQ==",
"dev": true,
"dependencies": {
"stylelint-config-recommended": "^6.0.0",
@@ -5038,9 +4962,9 @@
}
},
"node_modules/@wordpress/url": {
- "version": "3.52.0",
- "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-3.52.0.tgz",
- "integrity": "sha512-LkKQT7Hv+7ekCQ8fjDg2CK2FUtQhnzI/1PSCcmuL9guxsrQBKoiQFoGvsTUfXC4TtlkyV/gI/iB0zfoyq5t1Gg==",
+ "version": "3.59.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-3.59.0.tgz",
+ "integrity": "sha512-GxvoMjYCav0w4CiX0i0h3qflrE/9rhLIZg5aPCQjbrBdwTxYR3Exfw0IJYcmVaTKXQOUU8fOxlDxULsbLmKe9w==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.16.0",
@@ -5051,9 +4975,9 @@
}
},
"node_modules/@wordpress/warning": {
- "version": "2.51.0",
- "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.51.0.tgz",
- "integrity": "sha512-e+YbsQY4o/nTY0gT5Rr5766wU2xzwL5m/8S1HET9wBaeCRoZR/0IKyTOvPfihW13uT6FayBne3rqwT/h6F8w6Q==",
+ "version": "2.58.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.58.0.tgz",
+ "integrity": "sha512-9bZlORhyMY2nbWozeyC5kqJsFzEPP4DCLhGmjtbv+YWGHttUrxUZEfrKdqO+rUODA8rP5zeIly1nCQOUnkw4Lg==",
"dev": true,
"engines": {
"node": ">=12"
@@ -5075,6 +4999,7 @@
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
"integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
+ "deprecated": "Use your platform's native atob() and btoa() methods instead",
"dev": true
},
"node_modules/accepts": {
@@ -5091,9 +5016,9 @@
}
},
"node_modules/acorn": {
- "version": "8.11.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
- "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+ "version": "8.12.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+ "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -5112,10 +5037,10 @@
"acorn-walk": "^8.0.2"
}
},
- "node_modules/acorn-import-assertions": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
- "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+ "node_modules/acorn-import-attributes": {
+ "version": "1.9.5",
+ "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
+ "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
"dev": true,
"peerDependencies": {
"acorn": "^8"
@@ -5131,21 +5056,24 @@
}
},
"node_modules/acorn-walk": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz",
- "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==",
+ "version": "8.3.3",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz",
+ "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==",
"dev": true,
+ "dependencies": {
+ "acorn": "^8.11.0"
+ },
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/adm-zip": {
- "version": "0.5.10",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz",
- "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==",
+ "version": "0.5.14",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.14.tgz",
+ "integrity": "sha512-DnyqqifT4Jrcvb8USYjp6FHtBpEIz1mnXu6pTRHZ0RL69LbQYiO+0lDFg5+OKA7U29oWSs3a/i8fhn8ZcceIWg==",
"dev": true,
"engines": {
- "node": ">=6.0"
+ "node": ">=12.0"
}
},
"node_modules/agent-base": {
@@ -5203,15 +5131,15 @@
}
},
"node_modules/ajv-formats/node_modules/ajv": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"dependencies": {
- "fast-deep-equal": "^3.1.1",
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
"json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
+ "require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
@@ -5257,6 +5185,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/ansi-html": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz",
+ "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==",
+ "dev": true,
+ "engines": [
+ "node >= 0.8.0"
+ ],
+ "bin": {
+ "ansi-html": "bin/ansi-html"
+ }
+ },
"node_modules/ansi-html-community": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
@@ -5343,12 +5283,12 @@
"dev": true
},
"node_modules/aria-query": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
- "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
+ "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
"dev": true,
"dependencies": {
- "dequal": "^2.0.3"
+ "deep-equal": "^2.0.5"
}
},
"node_modules/arr-union": {
@@ -5377,21 +5317,22 @@
}
},
"node_modules/array-flatten": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
- "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
"dev": true
},
"node_modules/array-includes": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
- "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
"is-string": "^1.0.7"
},
"engines": {
@@ -5419,17 +5360,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/array.prototype.filter": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz",
- "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==",
+ "node_modules/array.prototype.findlast": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-array-method-boxes-properly": "^1.0.0",
- "is-string": "^1.0.7"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -5439,15 +5381,16 @@
}
},
"node_modules/array.prototype.findlastindex": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz",
- "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+ "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.5",
+ "call-bind": "^1.0.7",
"define-properties": "^1.2.1",
- "es-abstract": "^1.22.3",
+ "es-abstract": "^1.23.2",
"es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
"es-shim-unscopables": "^1.0.2"
},
"engines": {
@@ -5494,16 +5437,19 @@
}
},
"node_modules/array.prototype.tosorted": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz",
- "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
+ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.5",
+ "call-bind": "^1.0.7",
"define-properties": "^1.2.1",
- "es-abstract": "^1.22.3",
- "es-errors": "^1.1.0",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
"es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/arraybuffer.prototype.slice": {
@@ -5564,15 +5510,6 @@
"node": ">=8"
}
},
- "node_modules/asynciterator.prototype": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz",
- "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==",
- "dev": true,
- "dependencies": {
- "has-symbols": "^1.0.3"
- }
- },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -5580,9 +5517,9 @@
"dev": true
},
"node_modules/autoprefixer": {
- "version": "10.4.17",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz",
- "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==",
+ "version": "10.4.19",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz",
+ "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
"dev": true,
"funding": [
{
@@ -5599,8 +5536,8 @@
}
],
"dependencies": {
- "browserslist": "^4.22.2",
- "caniuse-lite": "^1.0.30001578",
+ "browserslist": "^4.23.0",
+ "caniuse-lite": "^1.0.30001599",
"fraction.js": "^4.3.7",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.0",
@@ -5617,10 +5554,13 @@
}
},
"node_modules/available-typed-arrays": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz",
- "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
"dev": true,
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -5629,32 +5569,32 @@
}
},
"node_modules/axe-core": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz",
- "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==",
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz",
+ "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/axios": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
- "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
+ "version": "1.7.5",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz",
+ "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==",
"dev": true,
"dependencies": {
- "follow-redirects": "^1.15.0",
+ "follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
},
"node_modules/axobject-query": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
- "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz",
+ "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==",
"dev": true,
"dependencies": {
- "dequal": "^2.0.3"
+ "deep-equal": "^2.0.5"
}
},
"node_modules/b4a": {
@@ -5753,71 +5693,39 @@
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.8",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz",
- "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==",
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz",
+ "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==",
"dev": true,
"dependencies": {
"@babel/compat-data": "^7.22.6",
- "@babel/helper-define-polyfill-provider": "^0.5.0",
+ "@babel/helper-define-polyfill-provider": "^0.6.2",
"semver": "^6.3.1"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
- "node_modules/babel-plugin-polyfill-corejs2/node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz",
- "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==",
- "dev": true,
- "dependencies": {
- "@babel/helper-compilation-targets": "^7.22.6",
- "@babel/helper-plugin-utils": "^7.22.5",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
"node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.8.6",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz",
- "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==",
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz",
+ "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==",
"dev": true,
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.4.3",
- "core-js-compat": "^3.33.1"
+ "@babel/helper-define-polyfill-provider": "^0.6.1",
+ "core-js-compat": "^3.36.1"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz",
- "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.5.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz",
- "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz",
+ "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==",
"dev": true,
"dependencies": {
- "@babel/helper-compilation-targets": "^7.22.6",
- "@babel/helper-plugin-utils": "^7.22.5",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2"
+ "@babel/helper-define-polyfill-provider": "^0.6.2"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -5862,6 +5770,30 @@
"@babel/core": "^7.0.0"
}
},
+ "node_modules/babel-runtime": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz",
+ "integrity": "sha512-zeCYxDePWYAT/DfmQWIHsMSFW2vv45UIwIAMjGvQVsTd47RwsiRH0uK1yzyWZ7LDBKdhnGDPM6NYEO5CZyhPrg==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.10.0"
+ }
+ },
+ "node_modules/babel-runtime/node_modules/core-js": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+ "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
+ "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
+ "dev": true,
+ "hasInstallScript": true
+ },
+ "node_modules/babel-runtime/node_modules/regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==",
+ "dev": true
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -5869,9 +5801,9 @@
"dev": true
},
"node_modules/bare-events": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.0.tgz",
- "integrity": "sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz",
+ "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==",
"dev": true,
"optional": true
},
@@ -5896,9 +5828,9 @@
]
},
"node_modules/basic-ftp": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz",
- "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==",
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz",
+ "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==",
"dev": true,
"engines": {
"node": ">=10.0.0"
@@ -5920,12 +5852,15 @@
}
},
"node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"dev": true,
"engines": {
"node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/bl": {
@@ -5946,9 +5881,9 @@
"dev": true
},
"node_modules/body-parser": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
- "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
"dev": true,
"dependencies": {
"bytes": "3.1.2",
@@ -5959,7 +5894,7 @@
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
- "qs": "6.11.0",
+ "qs": "6.13.0",
"raw-body": "2.5.2",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
@@ -6006,13 +5941,11 @@
"dev": true
},
"node_modules/bonjour-service": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz",
- "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz",
+ "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==",
"dev": true,
"dependencies": {
- "array-flatten": "^2.1.2",
- "dns-equal": "^1.0.0",
"fast-deep-equal": "^3.1.3",
"multicast-dns": "^7.2.5"
}
@@ -6024,31 +5957,30 @@
"dev": true
},
"node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "balanced-match": "^1.0.0"
}
},
"node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/browserslist": {
- "version": "4.22.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz",
- "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==",
+ "version": "4.23.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
+ "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
"dev": true,
"funding": [
{
@@ -6065,10 +5997,10 @@
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001580",
- "electron-to-chromium": "^1.4.648",
+ "caniuse-lite": "^1.0.30001640",
+ "electron-to-chromium": "^1.4.820",
"node-releases": "^2.0.14",
- "update-browserslist-db": "^1.0.13"
+ "update-browserslist-db": "^1.1.0"
},
"bin": {
"browserslist": "cli.js"
@@ -6137,48 +6069,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/builtins": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
- "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
- "dev": true,
- "dependencies": {
- "semver": "^7.0.0"
- }
- },
- "node_modules/builtins/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/builtins/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/builtins/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
@@ -6189,15 +6079,16 @@
}
},
"node_modules/call-bind": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz",
- "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
"dev": true,
"dependencies": {
+ "es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.3",
- "set-function-length": "^1.2.0"
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
},
"engines": {
"node": ">= 0.4"
@@ -6285,9 +6176,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001585",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz",
- "integrity": "sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==",
+ "version": "1.0.30001646",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz",
+ "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==",
"dev": true,
"funding": [
{
@@ -6361,16 +6252,16 @@
}
},
"node_modules/chart.js": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.0.tgz",
- "integrity": "sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==",
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.3.tgz",
+ "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==",
"dev": true,
"peer": true,
"dependencies": {
"@kurkle/color": "^0.3.0"
},
"engines": {
- "pnpm": ">=7"
+ "pnpm": ">=8"
}
},
"node_modules/chartjs-adapter-moment": {
@@ -6417,16 +6308,10 @@
}
},
"node_modules/chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -6439,6 +6324,9 @@
"engines": {
"node": ">= 8.10.0"
},
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
"optionalDependencies": {
"fsevents": "~2.3.2"
}
@@ -6480,9 +6368,9 @@
}
},
"node_modules/chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
"dev": true,
"engines": {
"node": ">=6.0"
@@ -6504,9 +6392,9 @@
}
},
"node_modules/cjs-module-lexer": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
- "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz",
+ "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==",
"dev": true
},
"node_modules/clamp": {
@@ -6646,12 +6534,6 @@
"node": ">= 12.0.0"
}
},
- "node_modules/common-path-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
- "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
- "dev": true
- },
"node_modules/commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
@@ -6855,38 +6737,10 @@
"webpack": "^5.1.0"
}
},
- "node_modules/copy-webpack-plugin/node_modules/ajv": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3"
- },
- "peerDependencies": {
- "ajv": "^8.8.2"
- }
- },
- "node_modules/copy-webpack-plugin/node_modules/array-union": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
- "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
+ "node_modules/copy-webpack-plugin/node_modules/array-union": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
+ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
"dev": true,
"engines": {
"node": ">=12"
@@ -6915,31 +6769,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "node_modules/copy-webpack-plugin/node_modules/schema-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
- "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
- },
- "engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
"node_modules/copy-webpack-plugin/node_modules/slash": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
@@ -6953,9 +6782,9 @@
}
},
"node_modules/core-js": {
- "version": "3.35.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.1.tgz",
- "integrity": "sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==",
+ "version": "3.37.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz",
+ "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==",
"dev": true,
"hasInstallScript": true,
"funding": {
@@ -6964,12 +6793,12 @@
}
},
"node_modules/core-js-compat": {
- "version": "3.35.1",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz",
- "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==",
+ "version": "3.37.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
+ "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
"dev": true,
"dependencies": {
- "browserslist": "^4.22.2"
+ "browserslist": "^4.23.0"
},
"funding": {
"type": "opencollective",
@@ -6977,9 +6806,9 @@
}
},
"node_modules/core-js-pure": {
- "version": "3.33.2",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.33.2.tgz",
- "integrity": "sha512-a8zeCdyVk7uF2elKIGz67AjcXOxjRbwOLz8SbklEso1V+2DoW4OkAMZN9S9GBgvZIaqQi/OemFX4OiSoQEmg1Q==",
+ "version": "3.37.1",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz",
+ "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==",
"dev": true,
"hasInstallScript": true,
"funding": {
@@ -7110,72 +6939,68 @@
"dev": true
},
"node_modules/css-declaration-sorter": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
- "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz",
+ "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==",
"dev": true,
"engines": {
- "node": "^10 || ^12 || >=14"
+ "node": "^14 || ^16 || >=18"
},
"peerDependencies": {
"postcss": "^8.0.9"
}
},
"node_modules/css-functions-list": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz",
- "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz",
+ "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==",
"dev": true,
"engines": {
"node": ">=12 || >=16"
}
},
"node_modules/css-loader": {
- "version": "6.8.1",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz",
- "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz",
+ "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==",
"dev": true,
+ "peer": true,
"dependencies": {
"icss-utils": "^5.1.0",
- "postcss": "^8.4.21",
- "postcss-modules-extract-imports": "^3.0.0",
- "postcss-modules-local-by-default": "^4.0.3",
- "postcss-modules-scope": "^3.0.0",
+ "postcss": "^8.4.33",
+ "postcss-modules-extract-imports": "^3.1.0",
+ "postcss-modules-local-by-default": "^4.0.5",
+ "postcss-modules-scope": "^3.2.0",
"postcss-modules-values": "^4.0.0",
"postcss-value-parser": "^4.2.0",
- "semver": "^7.3.8"
+ "semver": "^7.5.4"
},
"engines": {
- "node": ">= 12.13.0"
+ "node": ">= 18.12.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
- "webpack": "^5.0.0"
- }
- },
- "node_modules/css-loader/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
+ "@rspack/core": "0.x || 1.x",
+ "webpack": "^5.27.0"
},
- "engines": {
- "node": ">=10"
+ "peerDependenciesMeta": {
+ "@rspack/core": {
+ "optional": true
+ },
+ "webpack": {
+ "optional": true
+ }
}
},
"node_modules/css-loader/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
+ "peer": true,
"bin": {
"semver": "bin/semver.js"
},
@@ -7183,12 +7008,6 @@
"node": ">=10"
}
},
- "node_modules/css-loader/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/css-select": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
@@ -7243,13 +7062,13 @@
}
},
"node_modules/cssnano": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz",
- "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz",
+ "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==",
"dev": true,
"dependencies": {
- "cssnano-preset-default": "^6.0.1",
- "lilconfig": "^2.1.0"
+ "cssnano-preset-default": "^6.1.2",
+ "lilconfig": "^3.1.1"
},
"engines": {
"node": "^14 || ^16 || >=18.0"
@@ -7259,62 +7078,63 @@
"url": "https://opencollective.com/cssnano"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/cssnano-preset-default": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz",
- "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==",
- "dev": true,
- "dependencies": {
- "css-declaration-sorter": "^6.3.1",
- "cssnano-utils": "^4.0.0",
- "postcss-calc": "^9.0.0",
- "postcss-colormin": "^6.0.0",
- "postcss-convert-values": "^6.0.0",
- "postcss-discard-comments": "^6.0.0",
- "postcss-discard-duplicates": "^6.0.0",
- "postcss-discard-empty": "^6.0.0",
- "postcss-discard-overridden": "^6.0.0",
- "postcss-merge-longhand": "^6.0.0",
- "postcss-merge-rules": "^6.0.1",
- "postcss-minify-font-values": "^6.0.0",
- "postcss-minify-gradients": "^6.0.0",
- "postcss-minify-params": "^6.0.0",
- "postcss-minify-selectors": "^6.0.0",
- "postcss-normalize-charset": "^6.0.0",
- "postcss-normalize-display-values": "^6.0.0",
- "postcss-normalize-positions": "^6.0.0",
- "postcss-normalize-repeat-style": "^6.0.0",
- "postcss-normalize-string": "^6.0.0",
- "postcss-normalize-timing-functions": "^6.0.0",
- "postcss-normalize-unicode": "^6.0.0",
- "postcss-normalize-url": "^6.0.0",
- "postcss-normalize-whitespace": "^6.0.0",
- "postcss-ordered-values": "^6.0.0",
- "postcss-reduce-initial": "^6.0.0",
- "postcss-reduce-transforms": "^6.0.0",
- "postcss-svgo": "^6.0.0",
- "postcss-unique-selectors": "^6.0.0"
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz",
+ "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.23.0",
+ "css-declaration-sorter": "^7.2.0",
+ "cssnano-utils": "^4.0.2",
+ "postcss-calc": "^9.0.1",
+ "postcss-colormin": "^6.1.0",
+ "postcss-convert-values": "^6.1.0",
+ "postcss-discard-comments": "^6.0.2",
+ "postcss-discard-duplicates": "^6.0.3",
+ "postcss-discard-empty": "^6.0.3",
+ "postcss-discard-overridden": "^6.0.2",
+ "postcss-merge-longhand": "^6.0.5",
+ "postcss-merge-rules": "^6.1.1",
+ "postcss-minify-font-values": "^6.1.0",
+ "postcss-minify-gradients": "^6.0.3",
+ "postcss-minify-params": "^6.1.0",
+ "postcss-minify-selectors": "^6.0.4",
+ "postcss-normalize-charset": "^6.0.2",
+ "postcss-normalize-display-values": "^6.0.2",
+ "postcss-normalize-positions": "^6.0.2",
+ "postcss-normalize-repeat-style": "^6.0.2",
+ "postcss-normalize-string": "^6.0.2",
+ "postcss-normalize-timing-functions": "^6.0.2",
+ "postcss-normalize-unicode": "^6.1.0",
+ "postcss-normalize-url": "^6.0.2",
+ "postcss-normalize-whitespace": "^6.0.2",
+ "postcss-ordered-values": "^6.0.2",
+ "postcss-reduce-initial": "^6.1.0",
+ "postcss-reduce-transforms": "^6.0.2",
+ "postcss-svgo": "^6.0.3",
+ "postcss-unique-selectors": "^6.0.4"
},
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/cssnano-utils": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
- "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz",
+ "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==",
"dev": true,
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/csso": {
@@ -7375,9 +7195,9 @@
"dev": true
},
"node_modules/csstype": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
- "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
"dev": true
},
"node_modules/cwd": {
@@ -7400,9 +7220,9 @@
"dev": true
},
"node_modules/data-uri-to-buffer": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz",
- "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
+ "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==",
"dev": true,
"engines": {
"node": ">= 14"
@@ -7422,6 +7242,57 @@
"node": ">=12"
}
},
+ "node_modules/data-view-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+ "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
@@ -7435,9 +7306,9 @@
"dev": true
},
"node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+ "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
"dev": true,
"dependencies": {
"ms": "2.1.2"
@@ -7492,9 +7363,9 @@
"dev": true
},
"node_modules/dedent": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
- "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz",
+ "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==",
"dev": true,
"peerDependencies": {
"babel-plugin-macros": "^3.1.0"
@@ -7505,6 +7376,38 @@
}
}
},
+ "node_modules/deep-equal": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz",
+ "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.0",
+ "call-bind": "^1.0.5",
+ "es-get-iterator": "^1.1.3",
+ "get-intrinsic": "^1.2.2",
+ "is-arguments": "^1.1.1",
+ "is-array-buffer": "^3.0.2",
+ "is-date-object": "^1.0.5",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "isarray": "^2.0.5",
+ "object-is": "^1.1.5",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.5.1",
+ "side-channel": "^1.0.4",
+ "which-boxed-primitive": "^1.0.2",
+ "which-collection": "^1.0.1",
+ "which-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
@@ -7542,18 +7445,20 @@
}
},
"node_modules/define-data-property": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz",
- "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dev": true,
"dependencies": {
+ "es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.2",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.1"
+ "gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/define-lazy-prop": {
@@ -7669,15 +7574,6 @@
"node": ">= 0.8"
}
},
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/destroy": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
@@ -7742,12 +7638,6 @@
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
"dev": true
},
- "node_modules/dns-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
- "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==",
- "dev": true
- },
"node_modules/dns-packet": {
"version": "5.6.1",
"resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
@@ -7802,6 +7692,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
"integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
+ "deprecated": "Use your platform's native DOMException instead",
"dev": true,
"dependencies": {
"webidl-conversions": "^7.0.0"
@@ -7880,9 +7771,9 @@
"dev": true
},
"node_modules/electron-to-chromium": {
- "version": "1.4.665",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz",
- "integrity": "sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw==",
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz",
+ "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==",
"dev": true
},
"node_modules/emittery": {
@@ -7913,9 +7804,9 @@
}
},
"node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
"dev": true,
"engines": {
"node": ">= 0.8"
@@ -7925,7 +7816,6 @@
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
- "dev": true,
"dependencies": {
"iconv-lite": "^0.6.2"
}
@@ -7940,9 +7830,9 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.15.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
- "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.4",
@@ -7978,9 +7868,9 @@
}
},
"node_modules/envinfo": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz",
- "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==",
+ "version": "7.13.0",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz",
+ "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==",
"dev": true,
"bin": {
"envinfo": "dist/cli.js"
@@ -8021,50 +7911,57 @@
}
},
"node_modules/es-abstract": {
- "version": "1.22.3",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
- "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
+ "version": "1.23.3",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+ "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
"dev": true,
"dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "arraybuffer.prototype.slice": "^1.0.2",
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.5",
- "es-set-tostringtag": "^2.0.1",
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "data-view-buffer": "^1.0.1",
+ "data-view-byte-length": "^1.0.1",
+ "data-view-byte-offset": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.0.3",
"es-to-primitive": "^1.2.1",
"function.prototype.name": "^1.1.6",
- "get-intrinsic": "^1.2.2",
- "get-symbol-description": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
"globalthis": "^1.0.3",
"gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
"has-symbols": "^1.0.3",
- "hasown": "^2.0.0",
- "internal-slot": "^1.0.5",
- "is-array-buffer": "^3.0.2",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
"is-callable": "^1.2.7",
- "is-negative-zero": "^2.0.2",
+ "is-data-view": "^1.0.1",
+ "is-negative-zero": "^2.0.3",
"is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.2",
+ "is-shared-array-buffer": "^1.0.3",
"is-string": "^1.0.7",
- "is-typed-array": "^1.1.12",
+ "is-typed-array": "^1.1.13",
"is-weakref": "^1.0.2",
"object-inspect": "^1.13.1",
"object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.1",
- "safe-array-concat": "^1.0.1",
- "safe-regex-test": "^1.0.0",
- "string.prototype.trim": "^1.2.8",
- "string.prototype.trimend": "^1.0.7",
- "string.prototype.trimstart": "^1.0.7",
- "typed-array-buffer": "^1.0.0",
- "typed-array-byte-length": "^1.0.0",
- "typed-array-byte-offset": "^1.0.0",
- "typed-array-length": "^1.0.4",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.2",
+ "safe-array-concat": "^1.1.2",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.trim": "^1.2.9",
+ "string.prototype.trimend": "^1.0.8",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-length": "^1.0.1",
+ "typed-array-byte-offset": "^1.0.2",
+ "typed-array-length": "^1.0.6",
"unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.13"
+ "which-typed-array": "^1.1.15"
},
"engines": {
"node": ">= 0.4"
@@ -8073,11 +7970,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/es-array-method-boxes-properly": {
+ "node_modules/es-define-property": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
- "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
- "dev": true
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
},
"node_modules/es-errors": {
"version": "1.3.0",
@@ -8088,47 +7991,78 @@
"node": ">= 0.4"
}
},
+ "node_modules/es-get-iterator": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
+ "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "has-symbols": "^1.0.3",
+ "is-arguments": "^1.1.1",
+ "is-map": "^2.0.2",
+ "is-set": "^2.0.2",
+ "is-string": "^1.0.7",
+ "isarray": "^2.0.5",
+ "stop-iteration-iterator": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/es-iterator-helpers": {
- "version": "1.0.16",
- "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.16.tgz",
- "integrity": "sha512-CREG2A9Vq7bpDRnldhFcMKuKArvkZtsH6Y0DHOHVg49qhf+LD8uEdUM3OkOAICv0EziGtDEnQtqY2/mfBILpFw==",
+ "version": "1.0.19",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz",
+ "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==",
"dev": true,
"dependencies": {
- "asynciterator.prototype": "^1.0.0",
- "call-bind": "^1.0.6",
+ "call-bind": "^1.0.7",
"define-properties": "^1.2.1",
- "es-abstract": "^1.22.3",
+ "es-abstract": "^1.23.3",
"es-errors": "^1.3.0",
- "es-set-tostringtag": "^2.0.2",
+ "es-set-tostringtag": "^2.0.3",
"function-bind": "^1.1.2",
"get-intrinsic": "^1.2.4",
"globalthis": "^1.0.3",
- "has-property-descriptors": "^1.0.1",
- "has-proto": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
"has-symbols": "^1.0.3",
"internal-slot": "^1.0.7",
"iterator.prototype": "^1.1.2",
- "safe-array-concat": "^1.1.0"
+ "safe-array-concat": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-module-lexer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.0.tgz",
- "integrity": "sha512-lcCr3v3OLezdfFyx9r5NRYHOUTQNnFEQ9E87Mx8Kc+iqyJNkO7MJoB4GQRTlIMw9kLLTwGw0OAkm4BQQud/d9g==",
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
"dev": true
},
+ "node_modules/es-object-atoms": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+ "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/es-set-tostringtag": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
- "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2",
- "has-tostringtag": "^1.0.0",
- "hasown": "^2.0.0"
+ "get-intrinsic": "^1.2.4",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -8161,9 +8095,9 @@
}
},
"node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
"dev": true,
"engines": {
"node": ">=6"
@@ -8219,16 +8153,16 @@
}
},
"node_modules/eslint": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz",
- "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+ "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
"@eslint/eslintrc": "^2.1.4",
- "@eslint/js": "8.56.0",
- "@humanwhocodes/config-array": "^0.11.13",
+ "@eslint/js": "8.57.0",
+ "@humanwhocodes/config-array": "^0.11.14",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
"@ungap/structured-clone": "^1.2.0",
@@ -8306,9 +8240,9 @@
}
},
"node_modules/eslint-module-utils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
- "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
+ "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
"dev": true,
"dependencies": {
"debug": "^3.2.7"
@@ -8362,6 +8296,16 @@
"eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
}
},
+ "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
"node_modules/eslint-plugin-import/node_modules/debug": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
@@ -8383,10 +8327,22 @@
"node": ">=0.10.0"
}
},
+ "node_modules/eslint-plugin-import/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/eslint-plugin-jest": {
- "version": "27.6.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.3.tgz",
- "integrity": "sha512-+YsJFVH6R+tOiO3gCJon5oqn4KWc+mDq2leudk8mrp8RFubLOo9CVyi3cib4L7XMpxExmkmBZQTPDYVBzgpgOA==",
+ "version": "27.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz",
+ "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==",
"dev": true,
"dependencies": {
"@typescript-eslint/utils": "^5.10.0"
@@ -8395,7 +8351,7 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
- "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0",
+ "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0",
"eslint": "^7.0.0 || ^8.0.0",
"jest": "*"
},
@@ -8520,26 +8476,11 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint-plugin-jest/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/eslint-plugin-jest/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -8547,12 +8488,6 @@
"node": ">=10"
}
},
- "node_modules/eslint-plugin-jest/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/eslint-plugin-jsdoc": {
"version": "46.10.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz",
@@ -8576,26 +8511,11 @@
"eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
}
},
- "node_modules/eslint-plugin-jsdoc/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/eslint-plugin-jsdoc/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -8603,34 +8523,28 @@
"node": ">=10"
}
},
- "node_modules/eslint-plugin-jsdoc/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/eslint-plugin-jsx-a11y": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz",
- "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==",
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz",
+ "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==",
"dev": true,
"dependencies": {
- "@babel/runtime": "^7.23.2",
- "aria-query": "^5.3.0",
- "array-includes": "^3.1.7",
+ "aria-query": "~5.1.3",
+ "array-includes": "^3.1.8",
"array.prototype.flatmap": "^1.3.2",
"ast-types-flow": "^0.0.8",
- "axe-core": "=4.7.0",
- "axobject-query": "^3.2.1",
+ "axe-core": "^4.9.1",
+ "axobject-query": "~3.1.1",
"damerau-levenshtein": "^1.0.8",
"emoji-regex": "^9.2.2",
- "es-iterator-helpers": "^1.0.15",
- "hasown": "^2.0.0",
+ "es-iterator-helpers": "^1.0.19",
+ "hasown": "^2.0.2",
"jsx-ast-utils": "^3.3.5",
"language-tags": "^1.0.9",
"minimatch": "^3.1.2",
- "object.entries": "^1.1.7",
- "object.fromentries": "^2.0.7"
+ "object.fromentries": "^2.0.8",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.includes": "^2.0.0"
},
"engines": {
"node": ">=4.0"
@@ -8639,6 +8553,28 @@
"eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
}
},
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/eslint-plugin-playwright": {
"version": "0.15.3",
"resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-0.15.3.tgz",
@@ -8655,13 +8591,13 @@
}
},
"node_modules/eslint-plugin-prettier": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz",
- "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz",
+ "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==",
"dev": true,
"dependencies": {
"prettier-linter-helpers": "^1.0.0",
- "synckit": "^0.8.6"
+ "synckit": "^0.9.1"
},
"engines": {
"node": "^14.18.0 || >=16.0.0"
@@ -8685,39 +8621,41 @@
}
},
"node_modules/eslint-plugin-react": {
- "version": "7.33.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz",
- "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==",
+ "version": "7.35.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz",
+ "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==",
"dev": true,
"dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flatmap": "^1.3.1",
- "array.prototype.tosorted": "^1.1.1",
+ "array-includes": "^3.1.8",
+ "array.prototype.findlast": "^1.2.5",
+ "array.prototype.flatmap": "^1.3.2",
+ "array.prototype.tosorted": "^1.1.4",
"doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.0.12",
+ "es-iterator-helpers": "^1.0.19",
"estraverse": "^5.3.0",
+ "hasown": "^2.0.2",
"jsx-ast-utils": "^2.4.1 || ^3.0.0",
"minimatch": "^3.1.2",
- "object.entries": "^1.1.6",
- "object.fromentries": "^2.0.6",
- "object.hasown": "^1.1.2",
- "object.values": "^1.1.6",
+ "object.entries": "^1.1.8",
+ "object.fromentries": "^2.0.8",
+ "object.values": "^1.2.0",
"prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.4",
+ "resolve": "^2.0.0-next.5",
"semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.8"
+ "string.prototype.matchall": "^4.0.11",
+ "string.prototype.repeat": "^1.0.0"
},
"engines": {
"node": ">=4"
},
"peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
}
},
"node_modules/eslint-plugin-react-hooks": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
- "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz",
+ "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==",
"dev": true,
"engines": {
"node": ">=10"
@@ -8726,6 +8664,16 @@
"eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
}
},
+ "node_modules/eslint-plugin-react/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
"node_modules/eslint-plugin-react/node_modules/doctrine": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
@@ -8738,6 +8686,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/eslint-plugin-react/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/eslint-plugin-react/node_modules/resolve": {
"version": "2.0.0-next.5",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
@@ -8792,10 +8752,20 @@
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
+ "node_modules/eslint/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
"node_modules/eslint/node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"dependencies": {
"path-key": "^3.1.0",
@@ -8834,6 +8804,22 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/eslint/node_modules/globals": {
"version": "13.24.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
@@ -8861,6 +8847,48 @@
"js-yaml": "bin/js-yaml.js"
}
},
+ "node_modules/eslint/node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/eslint/node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/eslint/node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -8952,9 +8980,9 @@
}
},
"node_modules/esquery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
"dev": true,
"dependencies": {
"estraverse": "^5.1.0"
@@ -9041,9 +9069,9 @@
}
},
"node_modules/execa/node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"dependencies": {
"path-key": "^3.1.0",
@@ -9134,37 +9162,37 @@
"dev": true
},
"node_modules/express": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
- "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
+ "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
"dev": true,
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.20.2",
+ "body-parser": "1.20.3",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.6.0",
+ "cookie": "0.7.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
- "finalhandler": "1.2.0",
+ "finalhandler": "1.3.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
+ "merge-descriptors": "1.0.3",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
+ "path-to-regexp": "0.1.12",
"proxy-addr": "~2.0.7",
- "qs": "6.11.0",
+ "qs": "6.13.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
- "send": "0.18.0",
- "serve-static": "1.15.0",
+ "send": "0.19.0",
+ "serve-static": "1.16.2",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
@@ -9173,18 +9201,16 @@
},
"engines": {
"node": ">= 0.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
- "node_modules/express/node_modules/array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
- "dev": true
- },
"node_modules/express/node_modules/cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
"dev": true,
"engines": {
"node": ">= 0.6"
@@ -9298,6 +9324,12 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
+ "node_modules/fast-uri": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
+ "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+ "dev": true
+ },
"node_modules/fastest-levenshtein": {
"version": "1.0.16",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
@@ -9308,9 +9340,9 @@
}
},
"node_modules/fastq": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
"dev": true,
"dependencies": {
"reusify": "^1.0.4"
@@ -9385,9 +9417,9 @@
}
},
"node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
@@ -9397,13 +9429,13 @@
}
},
"node_modules/finalhandler": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
- "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
"dev": true,
"dependencies": {
"debug": "2.6.9",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
@@ -9492,19 +9524,16 @@
}
},
"node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"dependencies": {
- "locate-path": "^6.0.0",
+ "locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=8"
}
},
"node_modules/flat": {
@@ -9534,6 +9563,7 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
@@ -9546,9 +9576,9 @@
}
},
"node_modules/flatted": {
- "version": "3.2.9",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
- "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
"dev": true
},
"node_modules/follow-redirects": {
@@ -9602,9 +9632,9 @@
}
},
"node_modules/foreground-child": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
+ "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
"dev": true,
"dependencies": {
"cross-spawn": "^7.0.0",
@@ -9618,9 +9648,9 @@
}
},
"node_modules/foreground-child/node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"dependencies": {
"path-key": "^3.1.0",
@@ -9754,9 +9784,9 @@
}
},
"node_modules/fs-monkey": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz",
- "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz",
+ "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==",
"dev": true
},
"node_modules/fs.realpath": {
@@ -9915,57 +9945,38 @@
}
},
"node_modules/get-uri": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz",
- "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz",
+ "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==",
"dev": true,
"dependencies": {
"basic-ftp": "^5.0.2",
- "data-uri-to-buffer": "^6.0.0",
+ "data-uri-to-buffer": "^6.0.2",
"debug": "^4.3.4",
- "fs-extra": "^8.1.0"
+ "fs-extra": "^11.2.0"
},
"engines": {
"node": ">= 14"
}
},
"node_modules/get-uri/node_modules/fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
},
"engines": {
- "node": ">=6 <7 || >=8"
- }
- },
- "node_modules/get-uri/node_modules/jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
- "dev": true,
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/get-uri/node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "dev": true,
- "engines": {
- "node": ">= 4.0.0"
+ "node": ">=14.14"
}
},
"node_modules/gettext-parser": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz",
"integrity": "sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==",
- "dev": true,
"dependencies": {
"encoding": "^0.1.12",
"safe-buffer": "^5.1.1"
@@ -9975,6 +9986,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -10009,6 +10021,28 @@
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
"dev": true
},
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/global-modules": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz",
@@ -10047,12 +10081,13 @@
}
},
"node_modules/globalthis": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
- "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
"dev": true,
"dependencies": {
- "define-properties": "^1.1.3"
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -10160,21 +10195,21 @@
}
},
"node_modules/has-property-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
- "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2"
+ "es-define-property": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
- "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -10217,9 +10252,9 @@
"dev": true
},
"node_modules/hasown": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
- "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.2"
@@ -10350,9 +10385,9 @@
}
},
"node_modules/html-entities": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz",
- "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==",
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
+ "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
"dev": true,
"funding": [
{
@@ -10406,9 +10441,9 @@
}
},
"node_modules/http-link-header": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.1.tgz",
- "integrity": "sha512-mW3N/rTYpCn99s1do0zx6nzFZSwLH9HGfUM4ZqLWJ16ylmYaC2v5eYGqrNTQlByx8AzUgGI+V/32gXPugs1+Sw==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz",
+ "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==",
"dev": true,
"engines": {
"node": ">=6.0.0"
@@ -10449,9 +10484,9 @@
}
},
"node_modules/http-proxy-middleware": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
- "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
+ "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
"dev": true,
"dependencies": {
"@types/http-proxy": "^1.17.8",
@@ -10498,7 +10533,6 @@
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
@@ -10539,9 +10573,9 @@
]
},
"node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+ "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
"dev": true,
"engines": {
"node": ">= 4"
@@ -10559,16 +10593,38 @@
"node": ">=10"
}
},
- "node_modules/image-size": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
- "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
+ "node_modules/ignore-walk/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
- "optional": true,
- "bin": {
- "image-size": "bin/image-size.js"
- },
- "engines": {
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/ignore-walk/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "image-size": "bin/image-size.js"
+ },
+ "engines": {
"node": ">=0.10.0"
}
},
@@ -10579,9 +10635,9 @@
"dev": true
},
"node_modules/immutable": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz",
- "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==",
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
+ "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
"dev": true
},
"node_modules/import-fresh": {
@@ -10619,9 +10675,9 @@
}
},
"node_modules/import-local": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
- "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
"dev": true,
"dependencies": {
"pkg-dir": "^4.2.0",
@@ -10659,6 +10715,7 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
"dev": true,
"dependencies": {
"once": "^1.3.0",
@@ -10730,9 +10787,9 @@
}
},
"node_modules/ipaddr.js": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz",
- "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
+ "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
"dev": true,
"engines": {
"node": ">= 10"
@@ -10747,6 +10804,22 @@
"node": ">=8"
}
},
+ "node_modules/is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-array-buffer": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
@@ -10858,12 +10931,30 @@
}
},
"node_modules/is-core-module": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
- "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
+ "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
"dev": true,
"dependencies": {
- "hasown": "^2.0.0"
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-view": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+ "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+ "dev": true,
+ "dependencies": {
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -10975,18 +11066,21 @@
}
},
"node_modules/is-map": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
- "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
"dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-negative-zero": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
- "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -11117,21 +11211,27 @@
}
},
"node_modules/is-set": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
- "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
"dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-shared-array-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
- "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2"
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -11213,10 +11313,13 @@
}
},
"node_modules/is-weakmap": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
- "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
"dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -11234,13 +11337,16 @@
}
},
"node_modules/is-weakset": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
- "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
+ "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -11333,18 +11439,6 @@
"node": ">=10"
}
},
- "node_modules/istanbul-lib-report/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/istanbul-lib-report/node_modules/make-dir": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
@@ -11361,13 +11455,10 @@
}
},
"node_modules/istanbul-lib-report/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -11375,12 +11466,6 @@
"node": ">=10"
}
},
- "node_modules/istanbul-lib-report/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/istanbul-lib-source-maps": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
@@ -11405,9 +11490,9 @@
}
},
"node_modules/istanbul-reports": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
- "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
+ "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
"dev": true,
"dependencies": {
"html-escaper": "^2.0.0",
@@ -11431,16 +11516,13 @@
}
},
"node_modules/jackspeak": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
- "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
- "engines": {
- "node": ">=14"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
@@ -11604,18 +11686,18 @@
}
},
"node_modules/jest-dev-server": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-9.0.1.tgz",
- "integrity": "sha512-eqpJKSvVl4M0ojHZUPNbka8yEzLNbIMiINXDsuMF3lYfIdRO2iPqy+ASR4wBQ6nUyR3OT24oKPWhpsfLhgAVyg==",
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-9.0.2.tgz",
+ "integrity": "sha512-Zc/JB0IlNNrpXkhBw+h86cGrde/Mey52KvF+FER2eyrtYJTHObOwW7Iarxm3rPyTKby5+3Y2QZtl8pRz/5GCxg==",
"dev": true,
"dependencies": {
"chalk": "^4.1.2",
"cwd": "^0.10.0",
"find-process": "^1.4.7",
"prompts": "^2.4.2",
- "spawnd": "^9.0.1",
+ "spawnd": "^9.0.2",
"tree-kill": "^1.2.2",
- "wait-on": "^7.0.1"
+ "wait-on": "^7.2.0"
},
"engines": {
"node": ">=16"
@@ -11959,26 +12041,11 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-snapshot/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/jest-snapshot/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -11986,12 +12053,6 @@
"node": ">=10"
}
},
- "node_modules/jest-snapshot/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/jest-util": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
@@ -12076,23 +12137,23 @@
}
},
"node_modules/jiti": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
- "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
+ "version": "1.21.6",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
+ "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
"dev": true,
"bin": {
"jiti": "bin/jiti.js"
}
},
"node_modules/joi": {
- "version": "17.11.0",
- "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz",
- "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==",
+ "version": "17.13.3",
+ "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz",
+ "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==",
"dev": true,
"dependencies": {
- "@hapi/hoek": "^9.0.0",
- "@hapi/topo": "^5.0.0",
- "@sideway/address": "^4.1.3",
+ "@hapi/hoek": "^9.3.0",
+ "@hapi/topo": "^5.1.0",
+ "@sideway/address": "^4.1.5",
"@sideway/formula": "^3.0.1",
"@sideway/pinpoint": "^2.0.0"
}
@@ -12331,9 +12392,9 @@
"dev": true
},
"node_modules/language-subtag-registry": {
- "version": "0.3.22",
- "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
- "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
+ "version": "0.3.23",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
+ "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
"dev": true
},
"node_modules/language-tags": {
@@ -12349,9 +12410,9 @@
}
},
"node_modules/launch-editor": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz",
- "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==",
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz",
+ "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==",
"dev": true,
"dependencies": {
"picocolors": "^1.0.0",
@@ -12672,6 +12733,23 @@
"node-fetch": "^2.6.12"
}
},
+ "node_modules/lighthouse/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
"node_modules/lighthouse/node_modules/node-fetch": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
@@ -12788,9 +12866,9 @@
}
},
"node_modules/lighthouse/node_modules/ws": {
- "version": "7.5.9",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
- "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+ "version": "7.5.10",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
+ "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
"dev": true,
"engines": {
"node": ">=8.3.0"
@@ -12809,12 +12887,15 @@
}
},
"node_modules/lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
+ "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
}
},
"node_modules/lines-and-columns": {
@@ -12856,18 +12937,15 @@
}
},
"node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"dependencies": {
- "p-locate": "^5.0.0"
+ "p-locate": "^4.1.0"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=8"
}
},
"node_modules/lodash": {
@@ -12882,24 +12960,6 @@
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"dev": true
},
- "node_modules/lodash.escape": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz",
- "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==",
- "dev": true
- },
- "node_modules/lodash.flatten": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
- "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==",
- "dev": true
- },
- "node_modules/lodash.invokemap": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz",
- "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==",
- "dev": true
- },
"node_modules/lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -12912,12 +12972,6 @@
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
- "node_modules/lodash.pullall": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz",
- "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==",
- "dev": true
- },
"node_modules/lodash.throttle": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
@@ -12936,12 +12990,6 @@
"integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
"dev": true
},
- "node_modules/lodash.uniqby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz",
- "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==",
- "dev": true
- },
"node_modules/log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -13115,6 +13163,16 @@
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
+ "node_modules/markdownlint-cli/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
"node_modules/markdownlint-cli/node_modules/commander": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz",
@@ -13124,6 +13182,15 @@
"node": "^12.20.0 || >=14"
}
},
+ "node_modules/markdownlint-cli/node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
"node_modules/markdownlint-cli/node_modules/js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -13212,8 +13279,7 @@
"node_modules/memize": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/memize/-/memize-2.1.0.tgz",
- "integrity": "sha512-yywVJy8ctVlN5lNPxsep5urnZ6TTclwPEyigM9M3Bi8vseJBOfqNrGWN/r8NzuIt3PovM323W04blJfGQfQSVg==",
- "dev": true
+ "integrity": "sha512-yywVJy8ctVlN5lNPxsep5urnZ6TTclwPEyigM9M3Bi8vseJBOfqNrGWN/r8NzuIt3PovM323W04blJfGQfQSVg=="
},
"node_modules/meow": {
"version": "9.0.0",
@@ -13277,10 +13343,13 @@
}
},
"node_modules/merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
- "dev": true
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/merge-source-map": {
"version": "1.1.0",
@@ -13331,12 +13400,12 @@
}
},
"node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"dev": true,
"dependencies": {
- "braces": "^3.0.2",
+ "braces": "^3.0.3",
"picomatch": "^2.3.1"
},
"engines": {
@@ -13395,12 +13464,13 @@
}
},
"node_modules/mini-css-extract-plugin": {
- "version": "2.7.6",
- "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz",
- "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==",
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz",
+ "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==",
"dev": true,
"dependencies": {
- "schema-utils": "^4.0.0"
+ "schema-utils": "^4.0.0",
+ "tapable": "^2.2.1"
},
"engines": {
"node": ">= 12.13.0"
@@ -13413,84 +13483,34 @@
"webpack": "^5.0.0"
}
},
- "node_modules/mini-css-extract-plugin/node_modules/ajv": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "node_modules/minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
"dev": true,
"dependencies": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
},
"funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3"
- },
- "peerDependencies": {
- "ajv": "^8.8.2"
- }
- },
- "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "node_modules/mini-css-extract-plugin/node_modules/schema-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
- "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
- },
- "engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/minimist-options": {
@@ -13526,9 +13546,9 @@
}
},
"node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"dev": true,
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -13569,18 +13589,18 @@
"dev": true
},
"node_modules/moment": {
- "version": "2.29.4",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
- "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
+ "version": "2.30.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
+ "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/mrmime": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz",
- "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz",
+ "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==",
"dev": true,
"engines": {
"node": ">=10"
@@ -13648,13 +13668,12 @@
"dev": true
},
"node_modules/needle": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz",
- "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz",
+ "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==",
"dev": true,
"optional": true,
"dependencies": {
- "debug": "^3.2.6",
"iconv-lite": "^0.6.3",
"sax": "^1.2.4"
},
@@ -13665,16 +13684,6 @@
"node": ">= 4.4.x"
}
},
- "node_modules/needle/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
"node_modules/negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -13767,9 +13776,9 @@
"dev": true
},
"node_modules/node-releases": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
- "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
+ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
"dev": true
},
"node_modules/normalize-package-data": {
@@ -13787,26 +13796,11 @@
"node": ">=10"
}
},
- "node_modules/normalize-package-data/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/normalize-package-data/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -13814,12 +13808,6 @@
"node": ">=10"
}
},
- "node_modules/normalize-package-data/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -13886,31 +13874,16 @@
}
},
"node_modules/npm-package-json-lint/node_modules/jsonc-parser": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz",
- "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
"dev": true
},
- "node_modules/npm-package-json-lint/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/npm-package-json-lint/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -13930,12 +13903,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/npm-package-json-lint/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/npm-packlist": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz",
@@ -13979,9 +13946,9 @@
}
},
"node_modules/nwsapi": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz",
- "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==",
+ "version": "2.2.12",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz",
+ "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==",
"dev": true
},
"node_modules/object-assign": {
@@ -14009,10 +13976,29 @@
}
},
"node_modules/object-inspect": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
- "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-is": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
+ "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
"dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -14045,28 +14031,29 @@
}
},
"node_modules/object.entries": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz",
- "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==",
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
+ "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/object.fromentries": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
- "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -14076,40 +14063,28 @@
}
},
"node_modules/object.groupby": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz",
- "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
"dev": true,
"dependencies": {
- "array.prototype.filter": "^1.0.3",
- "call-bind": "^1.0.5",
+ "call-bind": "^1.0.7",
"define-properties": "^1.2.1",
- "es-abstract": "^1.22.3",
- "es-errors": "^1.0.0"
- }
- },
- "node_modules/object.hasown": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz",
- "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==",
- "dev": true,
- "dependencies": {
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "es-abstract": "^1.23.2"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/object.values": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
- "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+ "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -14196,17 +14171,17 @@
}
},
"node_modules/optionator": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
- "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
"dev": true,
"dependencies": {
- "@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
- "type-check": "^0.4.0"
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
},
"engines": {
"node": ">= 0.8.0"
@@ -14237,15 +14212,27 @@
}
},
"node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"dependencies": {
- "p-limit": "^3.0.2"
+ "p-limit": "^2.2.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=8"
+ }
+ },
+ "node_modules/p-locate/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -14283,9 +14270,9 @@
}
},
"node_modules/pac-proxy-agent": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz",
- "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==",
"dev": true,
"dependencies": {
"@tootallnate/quickjs-emscripten": "^0.23.0",
@@ -14293,18 +14280,18 @@
"debug": "^4.3.4",
"get-uri": "^6.0.1",
"http-proxy-agent": "^7.0.0",
- "https-proxy-agent": "^7.0.2",
- "pac-resolver": "^7.0.0",
- "socks-proxy-agent": "^8.0.2"
+ "https-proxy-agent": "^7.0.5",
+ "pac-resolver": "^7.0.1",
+ "socks-proxy-agent": "^8.0.4"
},
"engines": {
"node": ">= 14"
}
},
"node_modules/pac-proxy-agent/node_modules/agent-base": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
- "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+ "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
"dev": true,
"dependencies": {
"debug": "^4.3.4"
@@ -14314,9 +14301,9 @@
}
},
"node_modules/pac-proxy-agent/node_modules/http-proxy-agent": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz",
- "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"dev": true,
"dependencies": {
"agent-base": "^7.1.0",
@@ -14327,9 +14314,9 @@
}
},
"node_modules/pac-proxy-agent/node_modules/https-proxy-agent": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz",
- "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
"dev": true,
"dependencies": {
"agent-base": "^7.0.2",
@@ -14352,6 +14339,12 @@
"node": ">= 14"
}
},
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+ "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+ "dev": true
+ },
"node_modules/papaparse": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz",
@@ -14503,34 +14496,31 @@
"dev": true
},
"node_modules/path-scurry": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
- "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dev": true,
"dependencies": {
- "lru-cache": "^9.1.1 || ^10.0.0",
+ "lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
- "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
- "dev": true,
- "engines": {
- "node": "14 || >=16.14"
- }
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
},
"node_modules/path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
+ "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
"dev": true
},
"node_modules/path-type": {
@@ -14549,9 +14539,9 @@
"dev": true
},
"node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
"dev": true
},
"node_modules/picomatch": {
@@ -14617,87 +14607,36 @@
"node": ">=8"
}
},
- "node_modules/pkg-dir/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/playwright": {
- "version": "1.41.2",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.2.tgz",
- "integrity": "sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==",
+ "version": "1.45.3",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.3.tgz",
+ "integrity": "sha512-QhVaS+lpluxCaioejDZ95l4Y4jSFCsBvl2UZkpeXlzxmqS+aABr5c82YmfMHrL6x27nvrvykJAFpkzT2eWdJww==",
"dev": true,
"peer": true,
"dependencies": {
- "playwright-core": "1.41.2"
+ "playwright-core": "1.45.3"
},
"bin": {
"playwright": "cli.js"
},
"engines": {
- "node": ">=16"
+ "node": ">=18"
},
"optionalDependencies": {
"fsevents": "2.3.2"
}
},
"node_modules/playwright-core": {
- "version": "1.39.0",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz",
- "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==",
+ "version": "1.45.3",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.3.tgz",
+ "integrity": "sha512-+ym0jNbcjikaOwwSZycFbwkWgfruWvYlJfThKYAlImbxUgdWFO2oW70ojPm4OpE4t6TAo2FY/smM+hpVTtkhDA==",
"dev": true,
+ "peer": true,
"bin": {
"playwright-core": "cli.js"
},
"engines": {
- "node": ">=16"
+ "node": ">=18"
}
},
"node_modules/playwright/node_modules/fsevents": {
@@ -14715,19 +14654,6 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/playwright/node_modules/playwright-core": {
- "version": "1.41.2",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.2.tgz",
- "integrity": "sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==",
- "dev": true,
- "peer": true,
- "bin": {
- "playwright-core": "cli.js"
- },
- "engines": {
- "node": ">=16"
- }
- },
"node_modules/plur": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz",
@@ -14743,10 +14669,19 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "version": "8.4.40",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz",
+ "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==",
"dev": true,
"funding": [
{
@@ -14763,9 +14698,9 @@
}
],
"dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.1",
+ "source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -14788,85 +14723,85 @@
}
},
"node_modules/postcss-colormin": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz",
- "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz",
+ "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4",
+ "browserslist": "^4.23.0",
"caniuse-api": "^3.0.0",
- "colord": "^2.9.1",
+ "colord": "^2.9.3",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-convert-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz",
- "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz",
+ "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4",
+ "browserslist": "^4.23.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-discard-comments": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz",
- "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz",
+ "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==",
"dev": true,
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-discard-duplicates": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz",
- "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz",
+ "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==",
"dev": true,
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-discard-empty": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz",
- "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz",
+ "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==",
"dev": true,
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-discard-overridden": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz",
- "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz",
+ "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==",
"dev": true,
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-import": {
@@ -14940,30 +14875,6 @@
}
}
},
- "node_modules/postcss-load-config/node_modules/lilconfig": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz",
- "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==",
- "dev": true,
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/antonk52"
- }
- },
- "node_modules/postcss-load-config/node_modules/yaml": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
- "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==",
- "dev": true,
- "bin": {
- "yaml": "bin.mjs"
- },
- "engines": {
- "node": ">= 14"
- }
- },
"node_modules/postcss-loader": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz",
@@ -15002,26 +14913,11 @@
"node": ">=10"
}
},
- "node_modules/postcss-loader/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/postcss-loader/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -15029,11 +14925,14 @@
"node": ">=10"
}
},
- "node_modules/postcss-loader/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "node_modules/postcss-loader/node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
},
"node_modules/postcss-media-query-parser": {
"version": "0.2.3",
@@ -15042,43 +14941,43 @@
"dev": true
},
"node_modules/postcss-merge-longhand": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz",
- "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==",
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz",
+ "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0",
- "stylehacks": "^6.0.0"
+ "stylehacks": "^6.1.1"
},
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-merge-rules": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz",
- "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==",
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz",
+ "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4",
+ "browserslist": "^4.23.0",
"caniuse-api": "^3.0.0",
- "cssnano-utils": "^4.0.0",
- "postcss-selector-parser": "^6.0.5"
+ "cssnano-utils": "^4.0.2",
+ "postcss-selector-parser": "^6.0.16"
},
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-minify-font-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz",
- "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz",
+ "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -15087,62 +14986,62 @@
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-minify-gradients": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz",
- "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz",
+ "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==",
"dev": true,
"dependencies": {
- "colord": "^2.9.1",
- "cssnano-utils": "^4.0.0",
+ "colord": "^2.9.3",
+ "cssnano-utils": "^4.0.2",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-minify-params": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz",
- "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz",
+ "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4",
- "cssnano-utils": "^4.0.0",
+ "browserslist": "^4.23.0",
+ "cssnano-utils": "^4.0.2",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-minify-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz",
- "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==",
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz",
+ "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==",
"dev": true,
"dependencies": {
- "postcss-selector-parser": "^6.0.5"
+ "postcss-selector-parser": "^6.0.16"
},
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-modules-extract-imports": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
- "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
+ "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
"dev": true,
"engines": {
"node": "^10 || ^12 || >= 14"
@@ -15152,9 +15051,9 @@
}
},
"node_modules/postcss-modules-local-by-default": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz",
- "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz",
+ "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==",
"dev": true,
"dependencies": {
"icss-utils": "^5.0.0",
@@ -15169,9 +15068,9 @@
}
},
"node_modules/postcss-modules-scope": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz",
- "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz",
+ "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==",
"dev": true,
"dependencies": {
"postcss-selector-parser": "^6.0.4"
@@ -15199,40 +15098,46 @@
}
},
"node_modules/postcss-nested": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
- "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
"dependencies": {
- "postcss-selector-parser": "^6.0.11"
+ "postcss-selector-parser": "^6.1.1"
},
"engines": {
"node": ">=12.0"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
"peerDependencies": {
"postcss": "^8.2.14"
}
},
"node_modules/postcss-normalize-charset": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz",
- "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz",
+ "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==",
"dev": true,
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-display-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz",
- "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz",
+ "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -15241,13 +15146,13 @@
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-positions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz",
- "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz",
+ "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -15256,13 +15161,13 @@
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-repeat-style": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz",
- "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz",
+ "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -15271,13 +15176,13 @@
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-string": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz",
- "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz",
+ "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -15286,13 +15191,13 @@
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-timing-functions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz",
- "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz",
+ "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -15301,29 +15206,29 @@
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-unicode": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz",
- "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz",
+ "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4",
+ "browserslist": "^4.23.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-url": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz",
- "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz",
+ "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -15332,13 +15237,13 @@
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-normalize-whitespace": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz",
- "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz",
+ "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -15347,45 +15252,45 @@
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-ordered-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz",
- "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz",
+ "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==",
"dev": true,
"dependencies": {
- "cssnano-utils": "^4.0.0",
+ "cssnano-utils": "^4.0.2",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-reduce-initial": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz",
- "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz",
+ "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4",
+ "browserslist": "^4.23.0",
"caniuse-api": "^3.0.0"
},
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-reduce-transforms": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz",
- "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz",
+ "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -15394,13 +15299,13 @@
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-resolve-nested-selector": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
- "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==",
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.4.tgz",
+ "integrity": "sha512-R6vHqZWgVnTAPq0C+xjyHfEZqfIYboCBVSy24MjxEDm+tIh1BU4O6o7DP7AA7kHzf136d+Qc5duI4tlpHjixDw==",
"dev": true
},
"node_modules/postcss-safe-parser": {
@@ -15446,9 +15351,9 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.13",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
- "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
+ "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
"dev": true,
"dependencies": {
"cssesc": "^3.0.0",
@@ -15459,34 +15364,34 @@
}
},
"node_modules/postcss-svgo": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz",
- "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz",
+ "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0",
- "svgo": "^3.0.2"
+ "svgo": "^3.2.0"
},
"engines": {
"node": "^14 || ^16 || >= 18"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-unique-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz",
- "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==",
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz",
+ "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==",
"dev": true,
"dependencies": {
- "postcss-selector-parser": "^6.0.5"
+ "postcss-selector-parser": "^6.0.16"
},
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-value-parser": {
@@ -15645,9 +15550,9 @@
}
},
"node_modules/proxy-agent/node_modules/agent-base": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
- "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+ "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
"dev": true,
"dependencies": {
"debug": "^4.3.4"
@@ -15657,9 +15562,9 @@
}
},
"node_modules/proxy-agent/node_modules/http-proxy-agent": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz",
- "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"dev": true,
"dependencies": {
"agent-base": "^7.1.0",
@@ -15670,9 +15575,9 @@
}
},
"node_modules/proxy-agent/node_modules/https-proxy-agent": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz",
- "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
"dev": true,
"dependencies": {
"agent-base": "^7.0.2",
@@ -15770,6 +15675,23 @@
"node": ">=10.18.1"
}
},
+ "node_modules/puppeteer-core/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
"node_modules/puppeteer-core/node_modules/devtools-protocol": {
"version": "0.0.981744",
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz",
@@ -15780,6 +15702,7 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
@@ -15813,9 +15736,9 @@
}
},
"node_modules/pure-rand": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz",
- "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
+ "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
"dev": true,
"funding": [
{
@@ -15829,12 +15752,12 @@
]
},
"node_modules/qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
"dev": true,
"dependencies": {
- "side-channel": "^1.0.4"
+ "side-channel": "^1.0.6"
},
"engines": {
"node": ">=0.6"
@@ -15939,9 +15862,9 @@
}
},
"node_modules/react": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
- "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"dev": true,
"dependencies": {
"loose-envify": "^1.1.0"
@@ -15951,29 +15874,29 @@
}
},
"node_modules/react-dom": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
- "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"dev": true,
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
- "scheduler": "^0.23.0"
+ "scheduler": "^0.23.2"
},
"peerDependencies": {
- "react": "^18.2.0"
+ "react": "^18.3.1"
}
},
"node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/react-refresh": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
- "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
+ "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -16003,84 +15926,32 @@
"integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
"dev": true,
"dependencies": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
- "dev": true,
- "dependencies": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/read-pkg-up/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/read-pkg-up/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/read-pkg-up/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "node_modules/read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
"dev": true,
"dependencies": {
- "p-try": "^2.0.0"
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
},
"engines": {
- "node": ">=6"
+ "node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/read-pkg-up/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/read-pkg-up/node_modules/type-fest": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
@@ -16178,16 +16049,16 @@
}
},
"node_modules/reflect.getprototypeof": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz",
- "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
+ "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.5",
+ "call-bind": "^1.0.7",
"define-properties": "^1.2.1",
- "es-abstract": "^1.22.3",
- "es-errors": "^1.0.0",
- "get-intrinsic": "^1.2.3",
+ "es-abstract": "^1.23.1",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
"globalthis": "^1.0.3",
"which-builtin-type": "^1.1.3"
},
@@ -16217,10 +16088,9 @@
}
},
"node_modules/regenerator-runtime": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
- "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==",
- "dev": true
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
},
"node_modules/regenerator-transform": {
"version": "0.15.2",
@@ -16435,6 +16305,7 @@
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
@@ -16452,6 +16323,77 @@
"node": ">=10.0.0"
}
},
+ "node_modules/rtlcss": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz",
+ "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^5.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.3.11",
+ "strip-json-comments": "^3.1.1"
+ },
+ "bin": {
+ "rtlcss": "bin/rtlcss.js"
+ }
+ },
+ "node_modules/rtlcss-webpack-plugin": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/rtlcss-webpack-plugin/-/rtlcss-webpack-plugin-4.0.7.tgz",
+ "integrity": "sha512-ouSbJtgcLBBQIsMgarxsDnfgRqm/AS4BKls/mz/Xb6HSl+PdEzefTR+Wz5uWQx4odoX0g261Z7yb3QBz0MTm0g==",
+ "dev": true,
+ "dependencies": {
+ "babel-runtime": "~6.25.0",
+ "rtlcss": "^3.5.0"
+ }
+ },
+ "node_modules/rtlcss/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/rtlcss/node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/rtlcss/node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/run-con": {
"version": "1.2.12",
"resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.12.tgz",
@@ -16509,13 +16451,13 @@
}
},
"node_modules/safe-array-concat": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz",
- "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+ "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.5",
- "get-intrinsic": "^1.2.2",
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4",
"has-symbols": "^1.0.3",
"isarray": "^2.0.5"
},
@@ -16530,7 +16472,6 @@
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -16566,13 +16507,12 @@
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/sass": {
- "version": "1.69.5",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz",
- "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==",
+ "version": "1.77.8",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz",
+ "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==",
"dev": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
@@ -16625,9 +16565,9 @@
}
},
"node_modules/sax": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz",
- "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
+ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
"dev": true,
"optional": true
},
@@ -16644,9 +16584,9 @@
}
},
"node_modules/scheduler": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
- "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
"dev": true,
"peer": true,
"dependencies": {
@@ -16654,23 +16594,58 @@
}
},
"node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
+ "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
"dev": true,
"dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
},
"engines": {
- "node": ">= 10.13.0"
+ "node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
}
},
+ "node_modules/schema-utils/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/schema-utils/node_modules/ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ },
+ "peerDependencies": {
+ "ajv": "^8.8.2"
+ }
+ },
+ "node_modules/schema-utils/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
"node_modules/select-hose": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
@@ -16700,9 +16675,9 @@
}
},
"node_modules/send": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
- "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
"dev": true,
"dependencies": {
"debug": "2.6.9",
@@ -16738,6 +16713,15 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
+ "node_modules/send/node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/send/node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
@@ -16768,9 +16752,9 @@
}
},
"node_modules/serialize-javascript": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
- "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
"dependencies": {
"randombytes": "^2.1.0"
@@ -16855,46 +16839,47 @@
}
},
"node_modules/serve-static": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
- "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
"dev": true,
"dependencies": {
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
- "send": "0.18.0"
+ "send": "0.19.0"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/set-function-length": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz",
- "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
"dev": true,
"dependencies": {
- "define-data-property": "^1.1.2",
+ "define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.3",
+ "get-intrinsic": "^1.2.4",
"gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.1"
+ "has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/set-function-name": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
- "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
"dev": true,
"dependencies": {
- "define-data-property": "^1.0.1",
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
"functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.0"
+ "has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -16973,14 +16958,18 @@
}
},
"node_modules/side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -16993,13 +16982,13 @@
"dev": true
},
"node_modules/sirv": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz",
- "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz",
+ "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==",
"dev": true,
"dependencies": {
- "@polka/url": "^1.0.0-next.20",
- "mrmime": "^1.0.0",
+ "@polka/url": "^1.0.0-next.24",
+ "mrmime": "^2.0.0",
"totalist": "^3.0.0"
},
"engines": {
@@ -17079,9 +17068,9 @@
}
},
"node_modules/socks": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.3.tgz",
- "integrity": "sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==",
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
+ "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
"dev": true,
"dependencies": {
"ip-address": "^9.0.5",
@@ -17093,23 +17082,23 @@
}
},
"node_modules/socks-proxy-agent": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz",
- "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==",
+ "version": "8.0.4",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz",
+ "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==",
"dev": true,
"dependencies": {
- "agent-base": "^7.0.2",
+ "agent-base": "^7.1.1",
"debug": "^4.3.4",
- "socks": "^2.7.1"
+ "socks": "^2.8.3"
},
"engines": {
"node": ">= 14"
}
},
"node_modules/socks-proxy-agent/node_modules/agent-base": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
- "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+ "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
"dev": true,
"dependencies": {
"debug": "^4.3.4"
@@ -17134,9 +17123,9 @@
}
},
"node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -17183,9 +17172,9 @@
}
},
"node_modules/spawnd": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-9.0.1.tgz",
- "integrity": "sha512-vaMk8E9CpbjTYToBxLXowDeArGf1+yI7A6PU6Nr57b2g8BVY8nRi5vTBj3bMF8UkCrMdTMyf/Lh+lrcrW2z7pw==",
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-9.0.2.tgz",
+ "integrity": "sha512-nl8DVHEDQ57IcKakzpjanspVChkMpGLuVwMR/eOn9cXE55Qr6luD2Kn06sA0ootRMdgrU4tInN6lA6ohTNvysw==",
"dev": true,
"dependencies": {
"signal-exit": "^4.1.0",
@@ -17228,9 +17217,9 @@
}
},
"node_modules/spdx-exceptions": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz",
- "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
"dev": true
},
"node_modules/spdx-expression-parse": {
@@ -17244,9 +17233,9 @@
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.17",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz",
- "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==",
+ "version": "3.0.18",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
+ "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
"dev": true
},
"node_modules/spdy": {
@@ -17296,8 +17285,7 @@
"node_modules/sprintf-js": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
- "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
- "dev": true
+ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="
},
"node_modules/stack-utils": {
"version": "2.0.6",
@@ -17335,14 +17323,27 @@
"node": ">= 0.8"
}
},
+ "node_modules/stop-iteration-iterator": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
+ "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==",
+ "dev": true,
+ "dependencies": {
+ "internal-slot": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/streamx": {
- "version": "2.15.8",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.8.tgz",
- "integrity": "sha512-6pwMeMY/SuISiRsuS8TeIrAzyFbG5gGPHFQsYjUr/pbBadaL1PCWmzKw+CHZSwainfvcF6Si6cVLq4XTEwswFQ==",
+ "version": "2.18.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz",
+ "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==",
"dev": true,
"dependencies": {
- "fast-fifo": "^1.1.0",
- "queue-tick": "^1.0.1"
+ "fast-fifo": "^1.3.2",
+ "queue-tick": "^1.0.1",
+ "text-decoder": "^1.1.0"
},
"optionalDependencies": {
"bare-events": "^2.2.0"
@@ -17411,35 +17412,62 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
+ "node_modules/string.prototype.includes": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz",
+ "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
"node_modules/string.prototype.matchall": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz",
- "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==",
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz",
+ "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
"has-symbols": "^1.0.3",
- "internal-slot": "^1.0.5",
- "regexp.prototype.flags": "^1.5.0",
- "set-function-name": "^2.0.0",
- "side-channel": "^1.0.4"
+ "internal-slot": "^1.0.7",
+ "regexp.prototype.flags": "^1.5.2",
+ "set-function-name": "^2.0.2",
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/string.prototype.repeat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
+ "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
"node_modules/string.prototype.trim": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
- "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+ "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -17449,28 +17477,31 @@
}
},
"node_modules/string.prototype.trimend": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
- "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+ "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trimstart": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
- "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -17571,19 +17602,19 @@
"dev": true
},
"node_modules/stylehacks": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz",
- "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==",
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz",
+ "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4",
- "postcss-selector-parser": "^6.0.4"
+ "browserslist": "^4.23.0",
+ "postcss-selector-parser": "^6.0.16"
},
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": {
- "postcss": "^8.2.15"
+ "postcss": "^8.4.31"
}
},
"node_modules/stylelint": {
@@ -17746,6 +17777,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/stylelint/node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/sucrase": {
"version": "3.35.0",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
@@ -17768,15 +17808,6 @@
"node": ">=16 || 14 >=14.17"
}
},
- "node_modules/sucrase/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
"node_modules/sucrase/node_modules/commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
@@ -17787,31 +17818,29 @@
}
},
"node_modules/sucrase/node_modules/glob": {
- "version": "10.3.10",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
- "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
- "jackspeak": "^2.3.5",
- "minimatch": "^9.0.1",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
- "path-scurry": "^1.10.1"
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/sucrase/node_modules/minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
@@ -17873,16 +17902,17 @@
"dev": true
},
"node_modules/svgo": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.3.tgz",
- "integrity": "sha512-X4UZvLhOglD5Xrp834HzGHf8RKUW0Ahigg/08yRO1no9t2NxffOkMiQ0WmaMIbaGlVTlSst2zWANsdhz5ybXgA==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
+ "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
"dev": true,
"dependencies": {
"@trysound/sax": "0.2.0",
"commander": "^7.2.0",
"css-select": "^5.1.0",
- "css-tree": "^2.2.1",
- "csso": "5.0.5",
+ "css-tree": "^2.3.1",
+ "css-what": "^6.1.0",
+ "csso": "^5.0.5",
"picocolors": "^1.0.0"
},
"bin": {
@@ -17912,9 +17942,9 @@
"dev": true
},
"node_modules/synckit": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz",
- "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==",
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz",
+ "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==",
"dev": true,
"dependencies": {
"@pkgr/core": "^0.1.0",
@@ -17928,9 +17958,9 @@
}
},
"node_modules/table": {
- "version": "6.8.1",
- "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
- "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==",
+ "version": "6.8.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
+ "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
"dev": true,
"dependencies": {
"ajv": "^8.0.1",
@@ -17944,15 +17974,15 @@
}
},
"node_modules/table/node_modules/ajv": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"dependencies": {
- "fast-deep-equal": "^3.1.1",
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
"json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
+ "require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
@@ -17966,9 +17996,9 @@
"dev": true
},
"node_modules/tailwindcss": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz",
- "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==",
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.7.tgz",
+ "integrity": "sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==",
"dev": true,
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
@@ -17979,7 +18009,7 @@
"fast-glob": "^3.3.0",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
- "jiti": "^1.19.1",
+ "jiti": "^1.21.0",
"lilconfig": "^2.1.0",
"micromatch": "^4.0.5",
"normalize-path": "^3.0.0",
@@ -18002,11 +18032,19 @@
"node": ">=14.0.0"
}
},
+ "node_modules/tailwindcss/node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/tannin": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/tannin/-/tannin-1.2.0.tgz",
"integrity": "sha512-U7GgX/RcSeUETbV7gYgoz8PD7Ni4y95pgIP/Z6ayI3CfhSujwKEBlGFTCRN+Aqnuyf4AN2yHL+L8x+TCGjb9uA==",
- "dev": true,
"dependencies": {
"@tannin/plural-forms": "^1.1.0"
}
@@ -18049,9 +18087,9 @@
}
},
"node_modules/terser": {
- "version": "5.24.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz",
- "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==",
+ "version": "5.31.3",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz",
+ "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
@@ -18067,16 +18105,16 @@
}
},
"node_modules/terser-webpack-plugin": {
- "version": "5.3.9",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz",
- "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==",
+ "version": "5.3.10",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
+ "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
"dev": true,
"dependencies": {
- "@jridgewell/trace-mapping": "^0.3.17",
+ "@jridgewell/trace-mapping": "^0.3.20",
"jest-worker": "^27.4.5",
"schema-utils": "^3.1.1",
"serialize-javascript": "^6.0.1",
- "terser": "^5.16.8"
+ "terser": "^5.26.0"
},
"engines": {
"node": ">= 10.13.0"
@@ -18114,6 +18152,24 @@
"node": ">= 10.13.0"
}
},
+ "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
"node_modules/terser-webpack-plugin/node_modules/supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
@@ -18168,6 +18224,37 @@
"node": ">=8"
}
},
+ "node_modules/test-exclude/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/test-exclude/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/text-decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz",
+ "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==",
+ "dev": true,
+ "dependencies": {
+ "b4a": "^1.6.4"
+ }
+ },
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -18265,9 +18352,9 @@
}
},
"node_modules/tough-cookie": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
- "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
+ "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
"dev": true,
"dependencies": {
"psl": "^1.1.33",
@@ -18391,9 +18478,9 @@
}
},
"node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
"dev": true
},
"node_modules/tsutils": {
@@ -18464,12 +18551,12 @@
}
},
"node_modules/typed-array-buffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz",
- "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.6",
+ "call-bind": "^1.0.7",
"es-errors": "^1.3.0",
"is-typed-array": "^1.1.13"
},
@@ -18478,15 +18565,16 @@
}
},
"node_modules/typed-array-byte-length": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
- "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -18496,16 +18584,17 @@
}
},
"node_modules/typed-array-byte-offset": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
- "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
"dev": true,
"dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -18515,14 +18604,20 @@
}
},
"node_modules/typed-array-length": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
- "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+ "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "is-typed-array": "^1.1.9"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -18538,9 +18633,9 @@
}
},
"node_modules/typescript": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
- "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "version": "5.5.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
+ "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
"dev": true,
"peer": true,
"bin": {
@@ -18583,9 +18678,9 @@
}
},
"node_modules/undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "version": "6.11.1",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz",
+ "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==",
"dev": true
},
"node_modules/unicode-canonical-property-names-ecmascript": {
@@ -18659,9 +18754,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.0.13",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
- "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
+ "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
"dev": true,
"funding": [
{
@@ -18678,8 +18773,8 @@
}
],
"dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
+ "escalade": "^3.1.2",
+ "picocolors": "^1.0.1"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -18742,6 +18837,24 @@
}
}
},
+ "node_modules/url-loader/node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
"node_modules/url-parse": {
"version": "1.5.10",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
@@ -18783,9 +18896,9 @@
"dev": true
},
"node_modules/v8-to-istanbul": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz",
- "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
"dev": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.12",
@@ -18817,13 +18930,10 @@
}
},
"node_modules/validate-npm-package-name": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz",
- "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz",
+ "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==",
"dev": true,
- "dependencies": {
- "builtins": "^5.0.0"
- },
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
@@ -18838,12 +18948,13 @@
}
},
"node_modules/vue": {
- "version": "2.7.15",
- "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.15.tgz",
- "integrity": "sha512-a29fsXd2G0KMRqIFTpRgpSbWaNBK3lpCTOLuGLEDnlHWdjB8fwl6zyYZ8xCrqkJdatwZb4mGHiEfJjnw0Q6AwQ==",
+ "version": "2.7.16",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz",
+ "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
+ "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.",
"dev": true,
"dependencies": {
- "@vue/compiler-sfc": "2.7.15",
+ "@vue/compiler-sfc": "2.7.16",
"csstype": "^3.1.0"
}
},
@@ -18945,9 +19056,9 @@
}
},
"node_modules/vue-multiselect": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/vue-multiselect/-/vue-multiselect-2.1.8.tgz",
- "integrity": "sha512-bgpvWZlT4EiUUCcwLAR655LdiifeqF62BDL2TLVddKfS/NcdIYVlvOr456N7GQIlBFNbb7vHfq+qOl8mpGAOJw==",
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/vue-multiselect/-/vue-multiselect-2.1.9.tgz",
+ "integrity": "sha512-nGEppmzhQQT2iDz4cl+ZCX3BpeNhygK50zWFTIRS+r7K7i61uWXJWSioMuf+V/161EPQjexI8NaEBdUlF3dp+g==",
"dev": true,
"engines": {
"node": ">= 4.0.0",
@@ -19018,9 +19129,9 @@
}
},
"node_modules/vue-template-compiler": {
- "version": "2.7.15",
- "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.15.tgz",
- "integrity": "sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og==",
+ "version": "2.7.16",
+ "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
+ "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==",
"dev": true,
"dependencies": {
"de-indent": "^1.0.2",
@@ -19098,9 +19209,9 @@
}
},
"node_modules/watchpack": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
- "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
+ "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
"dev": true,
"dependencies": {
"glob-to-regexp": "^0.4.1",
@@ -19135,34 +19246,33 @@
}
},
"node_modules/webpack": {
- "version": "5.89.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz",
- "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==",
+ "version": "5.94.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
+ "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
"dev": true,
"dependencies": {
- "@types/eslint-scope": "^3.7.3",
- "@types/estree": "^1.0.0",
- "@webassemblyjs/ast": "^1.11.5",
- "@webassemblyjs/wasm-edit": "^1.11.5",
- "@webassemblyjs/wasm-parser": "^1.11.5",
+ "@types/estree": "^1.0.5",
+ "@webassemblyjs/ast": "^1.12.1",
+ "@webassemblyjs/wasm-edit": "^1.12.1",
+ "@webassemblyjs/wasm-parser": "^1.12.1",
"acorn": "^8.7.1",
- "acorn-import-assertions": "^1.9.0",
- "browserslist": "^4.14.5",
+ "acorn-import-attributes": "^1.9.5",
+ "browserslist": "^4.21.10",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.15.0",
+ "enhanced-resolve": "^5.17.1",
"es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.9",
+ "graceful-fs": "^4.2.11",
"json-parse-even-better-errors": "^2.3.1",
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
"neo-async": "^2.6.2",
"schema-utils": "^3.2.0",
"tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.7",
- "watchpack": "^2.4.0",
+ "terser-webpack-plugin": "^5.3.10",
+ "watchpack": "^2.4.1",
"webpack-sources": "^3.2.3"
},
"bin": {
@@ -19182,24 +19292,19 @@
}
},
"node_modules/webpack-bundle-analyzer": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz",
- "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==",
+ "version": "4.10.2",
+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz",
+ "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==",
"dev": true,
"dependencies": {
"@discoveryjs/json-ext": "0.5.7",
"acorn": "^8.0.4",
"acorn-walk": "^8.0.0",
"commander": "^7.2.0",
+ "debounce": "^1.2.1",
"escape-string-regexp": "^4.0.0",
"gzip-size": "^6.0.0",
- "is-plain-object": "^5.0.0",
- "lodash.debounce": "^4.0.8",
- "lodash.escape": "^4.0.1",
- "lodash.flatten": "^4.4.0",
- "lodash.invokemap": "^4.6.0",
- "lodash.pullall": "^4.2.0",
- "lodash.uniqby": "^4.7.0",
+ "html-escaper": "^2.0.2",
"opener": "^1.5.2",
"picocolors": "^1.0.0",
"sirv": "^2.0.3",
@@ -19221,19 +19326,10 @@
"node": ">= 10"
}
},
- "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/webpack-bundle-analyzer/node_modules/ws": {
- "version": "7.5.9",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
- "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+ "version": "7.5.10",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
+ "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
"dev": true,
"engines": {
"node": ">=8.3.0"
@@ -19306,9 +19402,9 @@
}
},
"node_modules/webpack-cli/node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"dependencies": {
"path-key": "^3.1.0",
@@ -19378,63 +19474,10 @@
"webpack": "^4.0.0 || ^5.0.0"
}
},
- "node_modules/webpack-dev-middleware/node_modules/ajv": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3"
- },
- "peerDependencies": {
- "ajv": "^8.8.2"
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "node_modules/webpack-dev-middleware/node_modules/schema-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
- "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
- },
- "engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
"node_modules/webpack-dev-server": {
- "version": "4.15.1",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz",
- "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==",
+ "version": "4.15.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz",
+ "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",
"dev": true,
"dependencies": {
"@types/bonjour": "^3.5.9",
@@ -19465,7 +19508,7 @@
"serve-index": "^1.9.1",
"sockjs": "^0.3.24",
"spdy": "^4.0.2",
- "webpack-dev-middleware": "^5.3.1",
+ "webpack-dev-middleware": "^5.3.4",
"ws": "^8.13.0"
},
"bin": {
@@ -19490,44 +19533,11 @@
}
}
},
- "node_modules/webpack-dev-server/node_modules/ajv": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/webpack-dev-server/node_modules/ajv-keywords": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3"
- },
- "peerDependencies": {
- "ajv": "^8.8.2"
- }
- },
- "node_modules/webpack-dev-server/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
"node_modules/webpack-dev-server/node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
@@ -19539,25 +19549,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/webpack-dev-server/node_modules/schema-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
- "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
- },
- "engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
"node_modules/webpack-merge": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
@@ -19616,6 +19607,24 @@
"node": ">=10.13.0"
}
},
+ "node_modules/webpack/node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
"node_modules/websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
@@ -19702,13 +19711,13 @@
}
},
"node_modules/which-builtin-type": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz",
- "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz",
+ "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==",
"dev": true,
"dependencies": {
- "function.prototype.name": "^1.1.5",
- "has-tostringtag": "^1.0.0",
+ "function.prototype.name": "^1.1.6",
+ "has-tostringtag": "^1.0.2",
"is-async-function": "^2.0.0",
"is-date-object": "^1.0.5",
"is-finalizationregistry": "^1.0.2",
@@ -19717,8 +19726,8 @@
"is-weakref": "^1.0.2",
"isarray": "^2.0.5",
"which-boxed-primitive": "^1.0.2",
- "which-collection": "^1.0.1",
- "which-typed-array": "^1.1.9"
+ "which-collection": "^1.0.2",
+ "which-typed-array": "^1.1.15"
},
"engines": {
"node": ">= 0.4"
@@ -19728,31 +19737,34 @@
}
},
"node_modules/which-collection": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
- "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
"dev": true,
"dependencies": {
- "is-map": "^2.0.1",
- "is-set": "^2.0.1",
- "is-weakmap": "^2.0.1",
- "is-weakset": "^2.0.1"
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/which-typed-array": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz",
- "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==",
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
"dev": true,
"dependencies": {
- "available-typed-arrays": "^1.0.6",
- "call-bind": "^1.0.5",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
"gopd": "^1.0.1",
- "has-tostringtag": "^1.0.1"
+ "has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -19767,6 +19779,15 @@
"integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
"dev": true
},
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/wp-readme-to-markdown": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wp-readme-to-markdown/-/wp-readme-to-markdown-1.0.1.tgz",
@@ -19837,9 +19858,9 @@
}
},
"node_modules/ws": {
- "version": "8.14.2",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz",
- "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
"dev": true,
"engines": {
"node": ">=10.0.0"
@@ -19897,12 +19918,15 @@
"dev": true
},
"node_modules/yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz",
+ "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==",
"dev": true,
+ "bin": {
+ "yaml": "bin.mjs"
+ },
"engines": {
- "node": ">= 6"
+ "node": ">= 14"
}
},
"node_modules/yargs": {
diff --git a/package.json b/package.json
index a9481137ca..064c01c7e6 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "dokan",
- "version": "3.11.3",
+ "version": "3.14.4",
"description": "A WordPress marketplace plugin",
"author": "weDevs",
"license": "GPL",
@@ -11,7 +11,7 @@
"build": "wp-scripts build --progress",
"packages-update": "wp-scripts packages-update",
"version": "node bin/version-replace",
- "makepot": "wp i18n make-pot --domain='dokan-lite' --include='assets/js,deprecated,includes,lib,templates,dokan.php' . --headers='{\"Report-Msgid-Bugs-To\":\"https://dokan.co/contact/\"}' --file-comment=\"Copyright (c) $(date +'%Y') weDevs Pte. Ltd. All Rights Reserved.\" languages/dokan-lite.pot",
+ "makepot": "wp i18n make-pot --domain='dokan-lite' --include='assets/js,deprecated,includes,lib,templates,dokan.php,dokan-class.php' . --headers='{\"Report-Msgid-Bugs-To\":\"https://dokan.co/contact/\"}' --file-comment=\"Copyright (c) $(date +'%Y') weDevs Pte. Ltd. All Rights Reserved.\" languages/dokan-lite.pot",
"readme": "wp-readme-to-md",
"clean-files": "node bin/clean-useless-files",
"zip": "node bin/zip",
@@ -22,7 +22,7 @@
"release:dev": "npm install && npm run build && npm run clean-files && npm run makepot && npm run zip"
},
"devDependencies": {
- "@wordpress/scripts": "^26.18.0",
+ "@wordpress/scripts": "^27.9.0",
"chartjs-adapter-moment": "^1.0.1",
"debounce": "^1.2.1",
"fs-extra": "^10.1.0",
@@ -46,7 +46,10 @@
"vue-template-compiler": "^2.7.14",
"vue-wp-list-table": "^1.3.0",
"vue2-daterange-picker": "^0.6.8",
- "wp-readme-to-markdown": "^1.0.1",
- "vuedraggable": "^2.24.3"
+ "vuedraggable": "^2.24.3",
+ "wp-readme-to-markdown": "^1.0.1"
+ },
+ "dependencies": {
+ "@wordpress/i18n": "^5.8.0"
}
}
diff --git a/phpcs.xml.dist b/phpcs.xml.dist
index 8f77234387..037e737eff 100755
--- a/phpcs.xml.dist
+++ b/phpcs.xml.dist
@@ -129,6 +129,7 @@
+
@@ -202,6 +203,7 @@
+
diff --git a/phpunit.xml b/phpunit.xml
index 127a798d76..a8e7f27605 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -1,5 +1,5 @@
-
+
- ./tests/
- ./tests/phpunit-wp-config.php
+ ./tests/php
+ ./tests/php/phpunit-wp-config.php
diff --git a/readme.txt b/readme.txt
index 2f4e0400ba..2879c39e87 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,13 +1,13 @@
=== Dokan - Powerful WooCommerce Multivendor Marketplace Solution - Build Your Own Amazon, eBay, Etsy ===
Contributors: tareq1988, wedevs, nizamuddinbabu
Donate Link: http://tareq.co/donate/
-Tags: WooCommerce multivendor marketplace, multivendor marketplace, multivendor, multi seller, multi vendor, WooCommerce marketplace, WooCommerce product vendors
-Requires at least: 6.4
-Tested up to: 6.5.4
+Tags: WooCommerce multivendor marketplace, multi seller, multi vendor, multivendor, multivendor marketplace
+Requires at least: 6.5
+Tested up to: 6.7.1
WC requires at least: 8.0.0
-WC tested up to: 8.9.2
+WC tested up to: 9.5.1
Requires PHP: 7.4
-Stable tag: 3.11.3
+Stable tag: 3.14.4
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -15,10 +15,10 @@ Transform your WooCommerce site into a multivendor marketplace with Dokan - a po
== Description ==
-= THE BEST MULTIVENDOR MARKETPLACE PLUGIN FOR WORDPRESS â POWERED BY WOOCOMMERCE =
+= POWERFUL MULTIVENDOR MARKETPLACE PLUGIN FOR WORDPRESS â POWERED BY WOOCOMMERCE =
-[Dokan](https://dokan.co/wordpress/?utm_campaign=dokan-wordpress-org-visitor&utm_medium=learn_more_about_dokan&utm_source=WordPress.org) is the best frontend multivendor marketplace plugin for WordPress, powered by WooCommerce. It helps you build your own multivendor marketplace similar to Amazon, Shopify, eBay, and Magento in under 30 minutes.
+[Dokan](https://dokan.co/wordpress/?utm_campaign=dokan-wordpress-org-visitor&utm_medium=learn_more_about_dokan&utm_source=WordPress.org) is the ultimate frontend multivendor marketplace plugin for WordPress, powered by WooCommerce. It helps you build your own multivendor marketplace similar to Amazon, Shopify, eBay, and Magento in under 30 minutes.
Moreover, Plus, with Dokan, you don't need any coding skills to create a thriving WooCommerce multivendor marketplace. Trusted by over 60,000 entrepreneurs globally for more than a decade, Dokan makes multivendor marketplace setup effortless and accessible to all.
Dokan is the fastest way to launch an eCommerce business and earn through commissions for products ranging from digital and physical to variable products.
@@ -81,7 +81,7 @@ Here is how you can build your multivendor marketplace with Dokan.
[youtube https://www.youtube.com/watch?v=4id-EwbfUko]
-= THE BEST FRONTEND USER INTERFACE =
+= HIGHLY USER-FRIENDLY FRONTEND INTERFACE =
To provide a comprehensive frontend experience, every vendor has a [personalized customizable dashboard](https://dokan.co/wordpress/features/?utm_campaign=dokan-wordpress-org-visitor&utm_medium=learn_more_about_dokan&utm_source=WordPress.org) on the store frontend. They can easily navigate and control every aspect of their marketplace from there. Backend access is restricted to only the admin, which sets Dokan apart from other marketplace plugins. However, all Dokan [modules](https://dokan.co/wordpress/modules/) are frontend compatible so that both the admin and vendors can enjoy the benefits and advanced features of Dokan.
@@ -346,1168 +346,21 @@ A. Just install and activate the PRO version without deleting the free plugin. A
== Changelog ==
+= v3.14.4 ( Dec 27, 2024 ) =
+- **fix:** Added tweaks to improve system stability and smoothness.
-= v3.11.3 ( Jun 10, 2024 ) =
+= v3.14.3 ( Dec 11, 2024 ) =
+- **update:** Updated Dokan admin header to display current pro plan and version with upgrading option.
-- **fix:** Responsive issue on vendor dashboard tabs preview.
+= v3.14.2 ( Dec 06, 2024 ) =
-= v3.11.2 ( May 27, 2024 ) =
+- **update:** Added commission setting option in product bulk edit for Admin.
-- **update:** WooCommerce 8.9.1 Compatibility added.
+= v3.14.1 ( Dec 04, 2024 ) =
-= v3.11.1 ( May 16, 2024 ) =
+- **fix:** Fixed a issue in the commission upgrader to deal with empty values for product and vendor.
-- **new:** Action hook `dokan_dashboard_sidebar_start` added.
-- **new:** Action hook `dokan_dashboard_sidebar_end` added.
-
-= v3.11.0 ( May 10, 2024 ) =
-
-- **fix:** The status of sub-orders does not update to completed if it contains only virtual products.
-
-= v3.10.4 ( Apr 25, 2024 ) =
-
-- **fix:** Vendor dashboard Order status filter menu displayed a duplicate border.
-- **fix:** Vendor dashboard withdraw page display get hidden.
-
-= v3.10.3 ( Apr 17, 2024 ) =
-
-- **update:** Notification count support added for vendor dashboard
-- **update:** added a new filter to set a default value for I am a customer / I am a vendor radio button
-- **update:** Processing Order count added for vendor dashboard orders menu
-- **update:** Performance improvements for vendor dashboard -> order details page -> downloadable product permission section
-- **update:** Admin can change product author from REST API
- Previously, product_author was read-only property, now admin can change product_author for an existing product or create a new product for another author.
-- **update:** Warning message styling for selecting fixed cart discount on admin coupon add edit page
-- **fix:** Advertisement product not purchasable for own product purchasing restriction
-- **fix:** Header Template number one breaks without background image
-- **fix:** html entity showing in product tag selection in vendor dashboard.
-- **fix:** Vendor add notification switch in admin dashboard
-- **fix:** Under wooCommerce my-account registration section, `I am a customer` was forced to be set as the default value. With this PR this problem has been fixed.
-
-= v3.10.2 ( Apr 01, 2024 ) =
-
-- **update:** Email placeholder, additional content support and formatting added
-- **update:** Add requires plugin header for dokan so that required plugin check can be initiated.
-- **fix:** Vendor profile progress bar doesn't update if the address is filled from the vendor registration form
-- **fix:** Color synchronization issue in vendor dashboard order notes
-- **fix:** product review email cannot be disabled without also disabling Contact Vendor email
-- **fix:** Order Export to CSV on the filtered list not working
-
-= v3.10.1 ( Mar 18, 2024 ) =
-
-- **update:** Update Categories Easily from Vendor Edit Page
- In earlier versions of the Dokan plugin for WordPress and WooCommerce, editing store categories was limited to the vendor details view page. This approach created confusion and made it difficult for users to manage their store categories effectively. However, with the latest update, a significant improvement has been introduced.
- Now, you can conveniently edit and update your store categories directly from the vendor edit page in the admin dashboard. This enhancement provides a more intuitive and user-friendly experience, allowing you to efficiently manage and organize your store categories in one central location.
-- **update:** Threads social media platform added as a Store Socials Option. Thanks `@fisher2470`
-- **update:** Vendor Dashboard settings submenu translation support added
-
-= v3.10.0 ( Mar 04, 2024 ) =
-
-- **new:** Added a new filter hook named `dokan_product_cache_delete_all_data`, by using this one can prevent deleting product cache if necessary.
-- **update:** Updated FontAwesome library to version 6.5.1
-- **fix:** Fixed Elementor mega menu z-index conflict and removed line break from address fields
-
-= v3.9.9 ( Feb 12, 2024 ) =
-
-- **new:** Added PHP 8.2 support
-- **fix:** Fixed an issue where the Dokan seller setup wizard does not display a warning message when a seller fails to provide the state for a country that has a state.
-- **fix:** Vendor setup wizard issue [#1976] - Properly closed the style tag in the Store Setup step to avoid conflicts with customizations.
-- **fix:** Fixed a bug in the store-lists-filter.php template that used the wrong escaping function for the placeholder attribute. [#1984]
-- **fix:** Withdrawal class check-in Templates/Withdraw.php.
- This fixes a fatal error that could occur when creating a withdrawal request with cache-enabled sites.
-- **fix:** The `Share Essentials` fieldâs description was missing from the Dokan admin setup wizard. This pull request fixes an issue where the description field was not showing up in the Dokan admin setup wizard. It also adds a new hook and admin options to store the `Share Essentials` settings.
-- **fix:** Fixed an issue where the sub-orders disappear from the WooCommerce order lists page when orders are filtered by a specific vendor or by sub-order ID when the HPOS feature is enabled.
-- **update:** Added validation for bank payments and address data in Dokan Seller Setup Wizard.
-
-= v3.9.8 ( Jan 30, 2024 ) =
-
-- **fix:** Updated Appsero Client SDK library to version 2.0.2 which will fix a security issue with the previous version of the library and a fatal error caused by the library.
-
-= v3.9.7 ( Jan 29, 2024 ) =
-
-- **update:** Added WooCommerce Cart and Checkout Block supports for Dokan Lite
-- **fix:** Fixed an issue where the vendorâs store map address was not saved during vendor setup wizard configuration
-- **fix:** Some links under the vendor dashboard weren't working properly due to a nonce mismatch. With this release, those issues have been fixed.
-- **fix:** Fixed an issue where the valid store name required check was missing from the customer-to-vendor migration form.
-- **fix:** Fixed an issue where the customer buys digital and physical products from different vendors, shipping charges are applied separately to each vendor.
-- **fix:** Fixed some translation-related issues with the date range picker
-- **fix:** Fixed some translation-related issues with Dokan Sweetalert
-
-
-= v3.9.6 ( Jan 11, 2024 ) =
-
-- **new** Features: Withdraw Charge
-Dokan has introduced a new feature that allows the admin to set a withdrawal charge for vendors. This charge can be either a flat rate or a percentage of the withdrawal amount based on the payment gateway used. The charge will be reflected in the details report, and vendors can see how many charges will apply when they request a withdrawal. The vendor dashboard list will also show the charge and receivable amount. This feature provides greater flexibility and transparency in managing vendor withdrawals.
-
-= v3.9.5 ( Dec 28, 2023 ) =
-
-- **fix:** API request on get all orders returns empty results for the endpoint http://dev.test/wp-json/dokan/v1/orders due to default customer id was set to 0.
-
-= v3.9.4 ( Dec 12, 2023 ) =
-
-- **fix:** Fixed an issue where the Vendor class shop_data persistence is broken on save()
-- **fix:** Fixed a fatal error while trying to edit a subscription under WordPress Admin Panel â WooCommerce â Subscription menu of the WooCommerce Subscription Plugin.
-- **fix:** Toggle Sub-Orders and Show Sub-Orders buttons are not working if HPOS feature is disabled.
-
-= v3.9.3 ( Nov 30, 2023 ) =
-
-- **fix:** Fixed an issue where the Tab fields under the product Add/Edit page donât display predefined tags until users start typing to select tags.
-
-= v3.9.2 ( Nov 13, 2023 ) =
-
-- **new:** A new email template has been introduced named Dokan Vendor Product Review. After a product has been reviewed, an email containing information about the review is sent to the vendor. The email includes details such as the reviewerâs name, product name, review rating, and text. The email also contains a link to the review page where the vendor can view the review and respond if necessary.
-- **update:** Display a non-purchasable notice for the vendorâs own products.
-- **fix:** [RestAPI] Fixed an issue where getting a single order via API gives an 'invalid ID' error If the compatibility mode isn't enabled for the HPOS feature on WooCOmmerce Order data storage settings
-- **fix:** [ProductReview] Previously the email notification sent by WordPress when a review was added to a product, was sent to the product owner. This was wrong in the context of a marketplace. Because the email sent by WordPress includes some sensitive information, like the admin dashboard URL, customer email address, etc. With these changes, we are making sure that only the marketplace admin gets the new review emails sent by WordPress.
-- **fix:** Previously, there was an issue where selecting âAll,â then âNone,â and subsequently âAllâ again didnât function as expected. This occurred on the vendor product edit page for simple products, specifically within the Attributes section. However, following this update, all special cases of the âSelect Allâ feature now work flawlessly.
-
-= v3.9.1 ( Oct 17, 2023 ) =
-
-- **update:** Removed flaticon packages and replace used icons with fontAwesome icons. This will reduce the plugin zip size.
-- **update:** Added a new settings to disable fontAwesome library
-- **update:** Changed all the single date picker fields with daterange picker. This updates will keep the design consistent throughout the plugin.
-- **fix:** [StoreOpenCloseTime] An issue where invalid store opening or closing times generate warning and fatal error on single store page.
-- **fix:** [Email] Fixed an issue where the product edit link on email template redirects to the products listing instead of single product edit page
-- **fix:** Fixed some responsive issue under vendor dashboard product edit page.
-- **fix:** Fixed some responsive issue under vendor dashboard withdraw page.
-
-= v3.9.0 ( Oct 06, 2023 ) =
-
-- **new:** Added two new hooks named `dokan_get_admin_report_data` and `dokan_get_overview_data` to extend Dokan reports functionality.
-- **fix:** Resolved an issue where the `Tracking Number` button was still visible under the `Vendor Dashboard â Order Details â Order Note section` even after the `Shipment Tracking` feature was enabled by the admin.
-- **fix:** [WidgetProductAttribute] Fixed an issue where the `Filter Products by Attribute` widget was not working for Multi-Word Attributes.
-- **update:** Added a new filter named `dokan_get_store_url` to filter store URLs for a single store.
-- **update:** Removed some redundant or not required settings from vendor store settings page, also rearranged some admin settings and added some settings under Admin dashboard.
-Details:
-1. Removed `Show Vendor Info` settings under the `WordPress Admin Dashboard â Dokan â Settings â Appearance` and added it back under the `WordPress Admin Dashboard â Dokan â Settings â General â Product Page Settings` section.
-2. Removed the `More Products` setting under `Vendor Dashboard â Settings â Store Settings` and added it back as a new Admin setting under `WordPress Admin Dashboard â Dokan â Settings â General â Product Page Settings` section. Now, only the admin can control this setting.
-3. Removed redundant `Store Products Per Page` setting under `Vendor Dashboard â Settings â Store Settings`. Since the admin already has this setting under `WordPress Admin Dashboard â Dokan â Settings â General`, this setting will be used from now on and only the admin can control this setting.
-4. Removed redundant `Store Page Product Section` settings under `Vendor Dashboard â Settings â Store Page Product Section`. Now, only the admin can control these settings under Theme Customizer settings.
-
-= v3.8.3 ( Sep 26, 2023 ) =
-
-- **update:** Added advanced filtering and CSV export feature for vendor withdraws under Admin Dashboard â Dokan â Withdraw menu.
-The âWithdrawâ page on the admin dashboard has been updated with advanced filtering and log exporting features. This allows admins to filter transactions based on payment method and date range, which enhances their ability to analyze and manage withdrawals. The feature to export CSV logs is also included, which makes tracking and record-keeping easier. These integrations aim to empower marketplace owners with comprehensive tools for efficient withdrawal management within the dashboard.
-- **update:** [Dokan Invoice] Added PDF invoice links on Sub Order section
-Previously PDF invoice links was not visible on Sub Order section under customer order view. After this update customer will be able to view invoice link on sub order section.
-- **update:** Added backend validation of phone number used on entire Dokan plugin.
-- **update:** Store category widget list default state set to collapse.
-Previously, if a store has a product count over 100 or more and the store has many product categories, the store category widget would display those categories and subcategories in an open state rather than collapsed state that the sidebar style gets broken. Now the list has a max height of 500px, which will be visible, and other elements will be visible by scrolling and the parent category that has a submenu will be in collapse mode.
-- **update:** Various style improvements of Dokan frontend including Vendor Dashboard, Single Store Page, Single Product Page etc.
-- **fix:** [Refund] Earlier, when refunding an order under the vendor dashboard, the tax amount decimal point rounding precision was inconsistent with WooCommerce. However, it has now been updated to be consistent with WooCommerce.
-- **fix** Fixed an issue where the order status label was missing on vendor dashboard for draft orders.
-
-= v3.8.2 ( Sep 13, 2023 ) =
-
-- **new:** Feature: Single-page product creation form.
-Before this release, vendors had to go through a two-step process to create a product. However, with this release, a single-page product creation form has been introduced. To enable this feature, you need to navigate to the WordPress admin panel â Dokan â Settings â Selling Options â One Page Product Creation.
-Itâs important to note that in the next version of Dokan, the Add New Product popup and the Add New Product form will be removed. After that, the Single-Page product form will be the default system for creating a product from the vendor dashboard.
-- **new:** Feature: Ask for product review
-The Ask for Product Review feature in Dokan allows vendors to set the product status to draft while creating a product using the single-page product creation form. After the vendor is satisfied with the edit, they can either ask for a review or publish the product directly based on the admin settings and vendor capability.
-- **fix:** Fixed an issue where orders canât be filtered by vendor under Admin Dashboard â WooCommerce â Order lists page if HPOS feature is enabled
-- **fix:** Fixed an issue where multiple sub-orders has been created for a single parent order.
-- **fix:** Fixed and issue while trying to delete all demo products also deleting non-dummy products while calling the API endpoints multiple times
-- **fix:** Fixed an issue where Dokan Proâs Product Status setting were used even though Dokan Pro plugin is deactivated.
-- **fix:** Fixed an issue where products were visible beyond Simple Products in the product list page under the vendor dashboard when Dokan Pro was deactivated or not installed.
-- **update:** Removed unnecessary product type filter from Vendor Dashboard product list page since there is only one product type available in Dokan Lite
-- **update:** [VendorRegistration] Improved Compatibility with WooCommerce Password Settings
-In the past, when vendors registered using the [dokan-vendor-registration] shortcode, the process did not align with WooCommerce's automatic password generation settings. However, in the latest update, we've enhanced this process. The vendor registration form presented through the [dokan-vendor-registration] shortcode now seamlessly adheres to WooCommerce's automatic password generation settings. This enhancement ensures a more unified and user-friendly registration experience for vendors, in line with WooCommerce's standard practices.
-- **update:** Added shipping tax fee recipient field setting under admin setup wizard.
-
-= v3.8.1 ( Aug 25, 2023 ) =
-
-- **fix:** Fixed a console warning under Dokan admin settings for Google Map integration
-- **fix:** [ReverseWithdrawal] Fixed an issue where Vendor/Admin cannot pay for reverse withdrawal balance due to a rule that vendorâs canât purchase their own products.
-
-= v3.8.0 ( Aug 18, 2023 ) =
-
-- **update:** Added HPOS (High-Performance Order Storage) support for Dokan Lite.
-- **fix:** Resolved an issue where traces of order data were left on the Dokan end even after the order had been deleted from the WordPress admin panel.
-Previously, deleted orders were still visible under the Dashboard Overview menu, Reports menu, and under Withdraw menu. This issue has been fixed in the current release.
-- **fix:** Multiple issues have been fixed after a product of an order has been deleted.
-
-= v3.7.24 ( Jul 25, 2023 ) =
-
-- **update:** Restrictions added for vendors to review and purchase their own products.
-Previously, vendors could purchase and post reviews for their own product. Which is not logical and could manipulate the search results of a product in a marketplace. With this update, vendors will not be able to purchase or post reviews for their own product.
-- **update:** [ReverseWithdrawal] Now Admin can request payment from vendors using the Reverse Withdrawal feature.
-Currently, there is no way for Site admins to request payments from vendors. For some use cases, it is essential for admins to request money from vendors. For example: In Stripe 3DS mode, if customers ask for a refund, refund will be given from the admin Stripe account, after that vendor transfer will be reversed. But if the vendor doesn't have enough money in their stripe account transfer reversal will fail, in that case, vendor balance will be negative. Another case would be for non-connected vendors, in that case, admin will be responsible for refund and admin needs to request money from vendors.
-- **update:** [AdminSettings] Added a toggle switch for Google ReCaptcha in the appearance settings for better control.
-- **update:** [AdminSettings] Sensitive information like API keys, client secrets, etc., are now displayed as password fields with an unhide button to improve security.
-- **update:** [AdminCommission] Now, "percentage" is selected by default if the admin setup wizard is skipped in the commission setting.
-- **fix:** Added some missing translations.
-Previously, the template folder at dokan-lite was missing when the .pot file was generated. With this fix template folder will be respected while generating the pot file.
-
-
-= v3.7.23 ( Jul 14, 2023 ) =
-
-- **fix:** Fixed an issue where the withdraw request could not be approved from the Admin Dashboard via REST API.
-
-= v3.7.22 ( Jul 12, 2023 ) =
-
-- **fix:** Fixed an issue where multiple withdrawal requests can be placed via API.
-If a withdrawal request was placed by a vendor until that request was approved or rejected by Admin, making another withdrawal request wasnât possible via frontend. However, the admin was able to make a withdrawal request via REST API. With this fix, this problem now has been resolved.
-- **fix:** Fixed a PHP notice for importing dummy data without providing any data via REST API
-endpoint: {{SERVER_URL}}/wp-json/dokan/v1/dummy-data/import
-- **fix:** While updating the withdrawal request via REST API, the minimum withdrawal amount limit wasnât considered. For example, if the minimum withdrawal limit was set to 50, for an existing withdrawal request, the admin can set the withdrawal value to less than 50. This issue has been fixed now.
-endpoint: {{SERVER_URL}}/wp-json/dokan/v1/withdraw/{withdraw_id}
-- **fix:** Fixed an issue where store products API was returning all products instead of published products.
-endpoint: {{SERVER_URL}}/wp-json/dokan/v1/stores/{store_id}/products
-- **fix:** Fixed some CSS issues on the vendor store settings page for the store banner image.
-- **fix:** [Withdraw] Fixed an issue where PayPal withdraw method status was displaying default but the corresponding vendor didnât set up the payment method yet. With this fix, we marked the payment method as needing setup instead of the default payment method.
-- **fix:** [Withdraw] After connecting to a payment method, the button text changes from `Setup` to `Make default` or `default` if selected. But after disconnecting that method button text doesn't change back to `Setup`. Now this issue has been fixed.
-- **update:** Updated vendor store API to support profile picture and banner delete feature. To delete one of these fields, one needs to set a 0 (zero) value while making the API request.
-endpoint: {{SERVER_URL}}/wp-json/dokan/{{version}}/stores/{store_Id}
-- **update:** Added various html tag support for rich text editors on various places of vendor dashboard.
-Previously, the product editor on the vendor's side was a lot more limited than the one available on the admin side. With this update, weâve included various tags, like heading elements, paragraphs, etc support for rich text editors.
-- **update:** Added random ordering for store REST API endpoint,
-Previously, random ordering for stores wasnât available for store API. With this update, weâve added this feature.
-endpoint: {{SERVER_URL}}/wp-json/dokan/v1/stores/
-- **update:** Added phone number validation for vendor dashboard store settings page and vendor registration form.
-Previously, for phone numbers only numeric values were accepted, now a valid phone number including spaces, -, _, (, ), etc also supports phone number fields.
-- **update:** [Withdraw] Fixed an issue where withdraw payment method wasn't enabled but can be used for both manual withdrawal and auto withdraw disbursement schedules from the vendor dashboard payment settings page.
-
-= v3.7.21 ( Jun 23, 2023 ) =
-
-- **fix:** Fixed an issue where gateway fees from WooCommerce PayPal Payments were not being deducted from vendorsâ earnings.
-Previously, Dokan deducted PayPal Checkout fees from vendorsâ earnings but did not deduct PayPal Payments fees. This was due to the fact that PayPal Payments did not set transaction fee metadata at the time. With this fix, Dokan now correctly deducts PayPal Payments fees from vendorsâ earnings.
-- **fix:** [VendorDashboard] Fixed some CSS issues under the vendor dashboard.
-Previously, the positioning of the mobile navigation icon on the vendor dashboard was problematic on mobile screens. Additionally, there were inconsistencies in some table columns, including the order ID column, causing visual issues. These issues have now been fixed.
-- **fix:** [DokanVendorRegistration] Registration page's user selection modal is not working properly when any theme tries to use the modal for the vendor registration form.
-In earlier versions, there was a lack of synchronization between the user registration form on the "My Account" page and the user registration forms inside the modal implemented within the theme. This inconsistency created confusion and hindered the seamless registration process. However, with the latest update, significant improvements have been made to address this issue.
-- **update:** Added `Become A Vendor` feature to Dokan Lite.
-Previously, this option was only available in Dokan Pro. This enhancement ensures that even customers of the Lite version can easily become vendors and start selling their products through the platform.
-- **update:** [SellerSetupWizard] Added store location map on the seller setup wizard
-Introducing a new enhancement in the seller setup wizard: seamless integration of a store location map. This enhancement allows sellers to effortlessly navigate and locate their store's position within the wizard interface.
-
-= v3.7.20 ( Jun 8, 2023 ) =
-
-- **new:** Added two new filter hooks named `dokan_get_vendor_orders_args` and `dokan_get_vendor_orders` to filter vendorâs order data.
-You can now filter orders returned by the `dokan()->order->all()` method using the dokan_get_vendor_orders hook.
-- **new:** Added a new filter named `dokan_get_new_post_status` for the function dokan_get_new_post_status()
-Now youâll be able to use your desired status for new products created by vendors using this filter.
-- **fix:** Fixed a security issue related to insecure deserialization in the Dummy Data importer API endpoint.
-- **fix:** Resolved an issue where the dokan_is_seller_dashboard() method was returning false when called from a WP Post Query Loop.
-- **fix:** Ensured that the correct order status is displayed for vendors after updating an order.
-Previously, in some cases, plugin or theme authors would hook into actions like woocommerce_order_status_changed and change the order status after it had been updated by the vendor. This update ensures that the correct order status is displayed to vendors after they update an order. Thanks to https://github.com/rmilesson for your contribution to fixing this issue.
-- **fix:** Resolved an issue where store categories filtering was not showing proper results due to nonce validation fails.
-Previously, when using store categories as a direct link to filter vendors with no valid nonce key attached to it, the filtering was not working correctly and vendors were not being displayed under their assigned store category. This issue has been addressed and store categories filtering now shows the correct results.
-- **fix:** Resolved inconsistent behavior of pagination on the Single Store Page.
-Previously, there were several issues with the pagination on the Single Store Page, including the âPreviousâ text displaying like the âNextâ icon, the Last Page Menu icon not showing when all menus were visible, and the Active Page Menu background color not changing from the 4th page. These issues have been addressed and the pagination behavior is now consistent.
-- **fix:** Resolved an issue where the discounted price field was not displayed correctly according to the theme used.
-Previously, when viewing the âAdd/Edit a productâ page on the Vendor Dashboard, the discounted price field was not displayed in the same way as the price field box when using certain themes. This issue has been addressed and the discounted price field now displays correctly according to the theme used.
-- **fix:** [AdminSetupWizard] The custom withdrawal method is now conditionally displayed in the admin setup wizard.
-Previously, the custom withdrawal method could not be enabled in the wizard because it required the method name and type to be populated. Now, if the admin has previously saved these values, the custom withdrawal method will be displayed and can be activated in the wizard.
-
-= v3.7.19 ( May 24, 2023 ) =
-
-- **update:** Separated shipping tax fee recipient from the product tax fee recipient
-- **update:** Added support for multiple shipping line items for suborders
-- **update:** Moved shipping splitting functionality to Dokan Lite from Dokan Pro.Previously, this feature was only available on Dokan Pro.
-- **update:** Improved the responsiveness of tables on the Vendor Dashboard by making them horizontally scrollable on smaller-sized screens.
-- **fix:** Disabling product review from WooCommerce settings doesnât remove the review section from the vendor profile.
-- **fix:** Broken layout of Discounted Price section in Vendor Dashboard product edit page on full-width page layout themes.
-- **fix:** Fixed some warnings and fatal errors for PHP versions 8.1 and 8.2.
-- **fix:** Fixed incorrectly closed product category menu after_widget args
-- **fix:** [VendorSetupWizard] Fixed an issue where the âHide Email Addressâ option was still displayed on the Vendor Setup wizard page even when it was enabled from Dokan Admin Settings.
-- **fix:** Email notification for withdrawal approval no longer shows HTML code in its header.
-
-
-= v3.7.18 ( May 10, 2023 ) =
-
-- **fix:** Fixed product getting published after enabling vendor selling status from admin dashboard
-- **update:** [ReverseWithdrawal] Added sold individually param to true for reverse withdrawal base product when creating it, so that quantity can't be changed
-- **update:** [ColorSchemeCustomizer] Used color set by Color Scheme Customizer Module instead of hardcoded value for login form popup and withdraw schedule popup header color
-- **update:** Remove expected earning calculation from product listing and editing pages
-- **update:** Added a notice before deleting products via bulk action under Vendor Dashboard â Product listing page
-- **update:** Added dokan_store_name meta-key for all users with administrator and shop_manager roles during plugin activation
-
-= v3.7.17 ( Apr 17, 2023 ) =
-
-- **fix:** JS console error while uploading non-image files to product gallery under vendor dashboard product add/edit page
-- **fix:** Fixed order invoice and packaging slip broken CSS under vendor dashboard order list page
-- **fix:** Fixed users are unable to register as customers on some themes, also fixed a JS console error on the My Account page
-- **fix:** Fixed TinyMCE editor and search box overlap under Dokan Admin Settings page.
-- **update:** Allow whitelisted countries in location selectors based on admin-allowed countries under WooCommerce settings.
-
-= v3.7.16 ( Apr 10, 2023 ) =
-
-- **fix:** [VendorDashboardAPI] Fixed an issue where the seller lifetime sales report wasnât possible to retrieve via API.
-- **fix:** [VendorDashboard]: Fixed wrong product count showing under vendor dashboard product listing page.
-- **update:** [ReverseWithdrawalAPI] Added a new API Endpoint `dokan/v1/reverse-withdrawal/vendor-due-status` to get reverse balance due status for a vendor
-- **update:** [ReverseWithdrawalAPI] Added a new API Endpoint `dokan/v1/reverse-withdrawal/add-to-cart` to add reverse balance to the cart.
-- **update:** Allow only image format files as product featured and gallery images on vendor dashboard
-- **update:** Added multistep category support in product API
-
-= v3.7.15 ( Mar 23, 2023 ) =
-
-- **new:** [CategoryPopup] Added a new settings to select any category from frontend
-- **fix:** [VendorSignup] Fixed vendor can sign up even though store URL is not available
-- **fix:** [ProductsRestAPI] Fixed in_stock, featured, on_sale filter for products rest API wasn't working
-
-= v3.7.14 ( Mar 09, 2023 ) =
-
-- **fix:** [RestAPI] Fatal error while activating Dokan Lite via wp-cli
-- **fix:** [VendorStoreSettings] State option appear while choosing the country with no state
-
-= v3.7.13 ( Mar 01, 2023 ) =
-
-- **fix:** fixed a SQL injection issue
-
-= v3.7.12 ( Feb 23, 2023 ) =
-
-- **new:** Added a new js hook `dokan_middle_category_selection` by using this hook if anyone passes true in this hook user will be able to select any category in Dokan multi-step category and a new WordPress hook `dokan_middle_category_selection` where you also have to pass true select middle category.
-- **update:** [LoginRedirection] Keep the sellers on the checkout page if they login from the checkout page.
-- **update:** Added sub-description to the `hide vendor info` section under Dokan admin appearance settings
-- **fix:** [AddNewProductPopup] Create & Add a new product button does not allow adding a product image during the time of adding more than one product has been fixed
-- **fix:** Fixed a fatal error if the order is created from WooCommerce admin dashboard without adding any line items.
-- **fix:** Fixed admin user permission/capability issue after permanently deleting the Dokan plugin.
-- **fix:** [ReverseWithdrawal] Refund amount wasnât subtracted from `Total Collected Values` for reverse withdrawal under the Admin Reverse Withdrawal menu.
-- **fix:** [ReverseWithdrawal] The decimal value is not included under the `Total Collected` section of the admin dashboard Reverse Withdrawal menu.
-- **fix:** Dokan Dashboard menu wasnât loading if the permalink doesnât include / at the end of the URL
-- **fix:** Fixed product image thumbnail gets image height squeezed on add new product popup under vendor dashboard
-
-= v3.7.11 ( Feb 13, 2023 ) =
-
-- **fix:** Vendor search doesn't work correctly while admin assigns a vendor to a product from WooCommerce â Products â Add New page
-- **fix:** The number of orders on the backend is not appearing depending on the vendor's own order count.
-- **fix:** Fixed a fatal error while creating an order from the admin dashboard with no data
-
-- **update:** Added vendor address-related fields under vendor registration form
-- **update:** Changed text `New Vendor Product Upload` to `Enable Selling`. Also changed field description from `Allow newly registered vendors to add products` to `Immediately enable selling for newly registered vendors`
-
-= v3.7.10 ( Jan 26, 2023 ) =
-
-- **new:** Extended REST API support for Dokan
--- https://example.com/wp-json/dokan/v1/orders?after=2022-10-01&before=2022-10-30
--- https://example.com/wp-json/dokan/v1/vendor-dashboard/
--- https://example.com/wp-json/dokan/v1/vendor-dashboard/sales?from=2021-08-02T04:13:05Z&to=2021-12-02T04:13:05Z
--- https://example.com/wp-json/dokan/v1/vendor-dashboard/orders
--- https://example.com/wp-json/dokan/v1/vendor-dashboard/products
--- https://example.com/wp-json/dokan/v1/vendor-dashboard/profile
--- https://example.com/wp-json/dokan/v1/vendor-dashboard/preferences
--- https://example.com/wp-json/dokan/v2/orders/{order_id}/downloads
--- https://example.com/wp-json/dokan/v2/orders/
--- https://example.com/wp-json/dokan//v2/orders/bulk-actions
--- https://example.com/wp-json/dokan/v1/products/attributes/edit-product/{id}
--- https://example.com/wp-json/dokan/v1/products/attributes/set-default/{id}
--- https://example.com/wp-json/dokan/v1/blocks/products/{id}
--- https://example.com/wp-json/dokan/v2/settings
--- https://example.com/wp-json/dokan/v2/settings/{group_id}/{id}
--- https://example.com/wp-json/dokan/v2/settings/{group_id}/{parent_id}/{id}
--- https://example.com/wp-json/dokan/v2/withdraw/settings
--- https://example.com/wp-json/dokan/v2/withdraw/summary
--- https://example.com/wp-json/dokan/v2/products (new param added: author, post_status, date, product_cat, product_type, stock_status, filter_by_other)
--- https://example.com/wp-json/dokan/v2/products/filter-by-data
-
-- **fix:** Multiple store category modal wasnât working for some theme
-- **fix:** Recreate reverse withdrawal payment product if no product found with stored product id
-
-= v3.7.9 ( Jan 10, 2023 ) =
-
-- **update:** Last-page and first-page pagination icon inconsistency under single store page product listing
-- **update:** Adjusted store banner image stretching issue under store list page
-- **fix:** Vendor email address is not showing up on the store header.
-
-= v3.7.8 ( Dec 27, 2022 ) =
-
-- **fix:** Single Store Page store header menu and search fields style break on mobile devices
-- **fix:** Vendor dashboard total sales wasnât displaying decimal values
-- **fix:** Set user role as seller while creating vendor from api call
-- **fix:** order note date issue under vendor dashboard order details page
-
-
-= v3.7.7 ( Nov 30, 2022 ) =
-
-- **update:** Added date filter - `after/before` for Order REST API
-- **update:** Added `dokan_bank_payment_fields_placeholders` Filter to change the label and placeholder of bank payment fields
-- **update:** Updated UI/UX of vendor dashboard submenu
-- **update:** Added section, sub-section label, description search under Dokan admin settings
-
-= v3.7.6 ( Nov 14, 2022 ) =
-
-- **fix:** Fixed a sql security issue while searching for products via ajax from vendor dashboard
-
-= v3.7.5 ( Nov 03, 2022 ) =
-
-- **new:** Added a new hook named dokan_store_product_search_results to filter out store product search results closes
-- **update:** Sort product categories under the vendor dashboard alphabetically
-- **fix:** SweetAlert library is conflicting with the WooCommerce Conversion Tracking plugin
-- **fix:** [BestSellingProductWidget] Products are being shown on the widget even when the catalog visibility is set to hidden.
-- **fix:** [VendorDashboardProducts] Products of different statuses are not displayed in the appropriate tab from the vendor dashboard.
-- **fix:** [ProductCategoryWidget] Sub Category dropdown on the Dokan Product Category widget doesn't work
-- **fix:** [AdminProduct] When editing a product in the WordPress backend, the vendor select dropdown doesn't contain any data.
-- **fix:** Fixed a fatal error on the report page if the same day is selected for both the start and end date to generate reports
-- **fix:** [VendorSoreSettings] Store settings update button wasn't working if the Dokan Pro plugin isn't activated.
-- **fix:** Store filtering using category was not working
-
-= v3.7.4 ( Oct 27, 2022 ) =
-
-- **fix:** Fixed a fatal error update updating to Dokan if Dokan Pro version is outdated
-
-= v3.7.3 ( Oct 27, 2022 ) =
-
-- **fix:** Fixed a fatal error due to a function moved from dokan pro
-
-= v3.7.2 ( Oct 27, 2022 ) =
-
-- **new:** Added a new filter hooked named `dokan_rest_api_store_collection_params` for StoreController request parameters
-- **new:** Introduced `dokanVendorFilterSectionStart` and `DokanGetVendorArgs` js filter hooks
-- **fix:** [AdminCommission] - Percentage Commission does not support "comma" as decimal separator under Dokan admin settings `Selling Options` page
-- **fix:** [Products] Product author is assigned to the shop manager when the shop manager publishes a product drafted by the admin.
-- **fix:** Spaces between paragraphs are too large under the store terms and condition page.
-
-= v3.7.1 ( Oct 11, 2022 ) =
-
-- **fix:** [VariableProduct] Fixed variable product's variation image uploading height size overlapping on price field.
-- **fix:** [ProductSearch] Fixed product search of the product listing page of the vendor dashboard is not working.
-- **fix:** [OrderEmail] Fixed multiple emails are sent to the customer when a parent order's status is changed to processing from failed payment.
-- **fix:** Removed unwanted popup code from the SweetAlert library
-- **fix:** Fixed the vendor dashboard adds new products' discount prices set to 0 by default.
-- **fix:** Fixed vendor order page not showing line item qty and totals
-
-= v3.7.0 ( Sep 27, 2022 ) =
-
-- **new:** Added `dokan_selected_multistep_category` js hook after a category has been selected
-- **update:** Fixed some security issues
-- **update:** Performance enhancement for dokan
-- **update:** Updated some JS libraries
-- **update:** Vendor dashboard `add-product-single.php` file is renamed to `edit-product-single.php`
-- **fix:** Select2 spacing issue CSS fix
-- **fix:** Fixed vendor single store page profile picture CSS issue
-- **fix:** Fixed vendor product page extra table field issue
-- **fix:** Fixed admin dashboard vendor details page: social profile Twitter icon is not showing issue
-- **fix:** Fixed multiple sub-categories of the same parent category is assigned to a product, they are not saved issue
-- **fix:** [Store settings]: Not being able to add "+" or "-" sign to the phone number filed of the store on Firefox web browser.
-- **fix:** Bank withdrawal method required field updated, Added a new filter hook `dokan_bank_payment_required_fields` so that site owner can manage required fields as they pleased
-- **fix:** Category-based commission is not working when a category has child categories.
-
-= v3.6.5 ( Aug 25, 2022 ) =
-
-- **fix:** [WPML] Added WPML support for the multistep product category.
-- **fix:** Order REST API endpoint displays other vendors orders.
-
-= v3.6.4 ( Aug 10, 2022 ) =
-
-- **new:** Added Catalog Mode Feature to Dokan Doc Link:
-- **update:** Load asset (CSS/JS) files only on required pages
-- **update:** Added $user_id as parameter for filter hook `dokan_is_store_open`
-- **fix:** [security] Removed unfiltered_html capabilities from vendor user role
-- **fix:** Fixed responsive issue of multistep product category UI.
-- **fix:** [WPML] Vendor Dashboard Submenu not loading if translated to another language
-- **fix:** Account Type for bank payment method is missing when admin is creating/editing a vendor
-- **fix:** Paypal shows as connected for new vendors even though it is not connected
-- **fix:** Can't skip seller setup wizard's Payment step by keeping some fields empty
-- **fix:** Fixed Order By sorting parameters for Orders
-- **fix:** Vendor Dashboard Add New Product URL changed to the product list page
-- **fix:** Single store page default order by filtering wasn't working
-- **fix:** Fixed third store header styling issue
-- **fix:** When the admin updates or saves a product from the admin panel multistep product category feature wasn't working
-
-= v3.6.3 ( Jul 26, 2022 ) =
-
-- **update:** Added DateRange filter for vendor dashboard Orders page
-- **new:** Added search by order id filter for vendor dashboard Orders page
-
-= v3.6.2 ( Jul 15, 2022 ) =
-
-- **new:** Added dummy data import feature for Dokan
-- **update:** Multistep category modal for product add and edit page under vendor dashboard
-- **update:** Added 'Back To Top' button & fix some design broken issue under Dokan admin settings page.
-
-= v3.6.1 ( Jun 30, 2022 ) =
-
-- **fix:** Fixed some empty method names in Payment Methods section of Vendor Dashboard > Withdraw
-- **fix:** Fixed incorrect alignment of withdraw method title in Dokan setup wizard
-- **fix:** Vendor Store breadcrumb URL redirecting to 404 page
-- **update:** Added disconnect button to payment methods
-- **update:** Removed 'Dokan' Prefix from the payment method name under vendor dashboard payment settings page.
-- **update:** Added a new setting to change Vendor Setup Wizard welcome message under Dokan General Settings page.
-
-= v3.6.0 ( Jun 14, 2022 ) =
-
-**new:** Added a new filter named âdokan_bank_payment_validation_errorâ so that payment validation errors can be filtered.
-**update:** Entirely redesigned Dokan Admin Settings page
-**fix:** WPML translated endpoints not working in payment settings page
-
-= v3.5.1 ( May 31, 2022 ) =
-
-**new:** Added Reverse Withdrawal feature
-**update:** Determine if a seller is connected to a payment method
-**update:** improved UI of Payment settings page
-**update:** Correctly determine the vendor a product belongs to, so the "dokan_get_vendor_by_product" filter hook is called.
-**fix:** Simple > Variable > External/Affiliate > Group Product > Fatal error.
-**fix:** changing dokan vendor dashboard page slug gives 404 error
-
-= v3.5.0 ( May 18, 2022 ) =
-
-- **chore:** Minimum php version is set to 7.0
-- **chore:** Minimum WooCommerce version is set to 5.0
-- **chore:** Minimum WordPress version is set to 5.4
-- **new:** Added a new product attributes widget, by which users/customers will be able to search products by vendors used attributes.
-- **fix:** Fixed vendor store settings page phone number validation js console error
-- **fix:** payment settings page 404 if dashboard url slug is changed
-
-= v3.4.3 ( Apr 26, 2022 ) =
-
-- **fix:** Store Contact Form widget submits the contact form directly instead of ajax submission
-- **fix:** Stop sending new order emails to selected recipients (including admin) when the New Order email is disabled in WooCommerce Settings
-- **update:** Updated design for the payment settings page of vendor dashboard to separate the management of different payment methods
-- **new:** Added option to select a default payment method
-- **fix:** Fixed some validation logic under vendor dashboard payment settings page
-
-= v3.4.2 ( Apr 13, 2022 ) =
-
-- **fix:** Fixed switching product type from variable to external doesn't remove product stock management options
-- **fix:** Fixed store order by latest inconsistency
-
-= v3.4.1 ( Mar 18, 2022 ) =
-
-- **new:** Introduced two new filter hooks dokan_shipping_fee_recipient and dokan_tax_fee_recipient
-- **fix:** Remove unnecessary error_log codes #1570
-- **fix:** Promotional notice cache expiration date is set to one day
-- **fix:** Fatal error on store closet time widget if store open/close time wasnât set
-- **fix:** Updated jQuery form validate library from v1.11.0 to v1.19.3
-- **fix:** Fixed popup not appearing after clicking withdraw button under vendor dashboard
-- **fix:** Product table css fix for error class
-
-= v3.4.0 ( Mar 08, 2022 ) =
-
-- **update:** Stop loading unnecessary style and script files on every page #1450
-- **update:** Added random as store list orderby parameter
-- **update:** Dokan store shortcode orderby parameter now reflect store filter.
-- **fix:** Store open/close time hover feature wasnât working for specific single store page templates #1549
-- **fix:** Variable products stock status wasnât updating by quick edit from vendor dashboard, now has been fixed #1553
-- **fix:** Fixed Dokan conflict with WP Project Manager #1546
-- **fix:** Store product per page value wasnât saving, now has been fixed #1548
-- **fix:** Fixed fatal error while getting store open close time under single store page
-- **fix:** Remove background process files from database if file doesnât exists on server due to server migration
-
-= v3.3.9 ( Feb 28, 2022 ) =
-
-- **update:** Added theme customizer settings to set default order by filter for store listing page #1505
-- **update:** Added seller information under single product page, also added an admin setting entry to enable/disable this feature #1506
-- **update:** Display store open/close time list on hover under single store page. #1517
-- **fix:** Added post_date_gmt and post_modified_gmt fields data when creating a product from frontend dashboard #1514
-- **fix:** Create order API with coupon lines data giving fatal error, thanks to James Bechet for this fix #1441
-
-= v3.3.8 ( Feb 17, 2022 ) =
-
-- **fix:** Store open close time widget wasn't working
-
-= v3.3.7 ( Feb 03, 2022 ) =
-
-- **feat:** Added Featured, Latest, Best Selling, Top Rated Product sections under single store page
-- **update:** Updated UI for Withdraw menu
-- **update:** Updated design for Upgrade to PRO popup
-- **update:** Added Dokan upgrader to change dokan_withdraw table details column null
-- **update:** Added per_page and page param support on store products rest api
-- **update:** Updated FontAwesome library from V4.7 to V5.15
-- **update:** Updated chartjs library, this was causing conflict issue with various js files
-- **fix:** Fixed a css issue under Select2 library
-- **fix:** Make Hello text translatable under product published email template
-- **fix:** Fixed a warning under single store page if store slug was invalid
-- **fix:** prevent recursion while loading template if $name param is not empty
-- **fix:** When setting bulk regular prices from the vendor dashboard in a variable product the product stock status becomes out of stock. This issue has been fixed now.
-
-= v3.3.6 ( Jan 10, 2022 ) =
-
-- **fix:** css class added for styling order details page #1468
-- **fix:** Item meta is not being deleted from the order details page of the WordPress dashboard #1458
-- **fix:** Showing Vendor or Store Name on the order details page of WooCommerce #1456
-- **fix:** Conflict with Siteground optimizer plugin #1474
-
-= v3.3.5 ( Dec 23, 2021 ) =
-
-- **fix:** Fatal error while creating new vendor.
-- **fix:** Conflict Dokan admin notices scripts with customizer page and WPML string translation page.
-
-= v3.3.4 ( Dec 15, 2021 ) =
-
-- **fix:** Asset loading issue for admin notice
-
-= v3.3.3 ( Dec 15, 2021 ) =
-
-- **new:** Added whatâs New page for Dokan Lite #1427
-- **new:** Grouped all Dokan admin notices into a single notice with slider #1427
-- **update:** reCaptcha integration added to store contact form #1422
-- **update:** Redesigned Dokan admin header section. Also added some useful links under admin bar. #1427
-- **fix:** select2 dropdown margin issue fixed #1446
-- **fix:** Fix loading issue while loading Dokan pages when permalink sets to plain text, Also added a notice to instruct users to change permalink setting. #1444
-
-= v3.3.2 ( Nov 30, 2021 ) =
-
-- **update:** Caching Enhancement and Fixes
-- **update:** Added tooltips for setting options
-- **update:** Google Map and Mapbox setting fields will be always visible
-- **fix:** Product was creating via API even selling option was disabled for a vendor
-- **fix:** Withdraw details field value conflict with old withdraw data
-
-= v3.3.1 ( Nov 12, 2021 ) =
-
-- **new:** Added Vue DateRangePicker library #1409
-- **update:** updated vendor store per page placeholder text #1396
-- **update:** Removed user switch setting from Dokan selling setting, now user switching will work if plugin exists #1394
-- **fix:** Added missing param on woocommerce_admin_order_item_headers #1414
-- **fix:** Fixed WC mail template overwrite wasnât working #1403
-- **fix:** add call to filter dokan_product_cat_dropdown_args to listing-filter.php #1408 (thanks to David MarĂn )
-- **fix:** updated dokan_product_seller_info() function to not to add vendor data if vendor id doesnât exists #1401 (thanks to David MarĂn )
-- **fix:** Hide `Show email address in store` settings from store settings page if admin disable this settings from customiser. #1393
-- **fix:** added upgrader to change refund and withdraw database table column #1391
-- **add:** Black Friday promotion 2021 #1411
-
-= v3.3.0 ( Oct 31, 2021 ) =
-
-- **update:** Added integration of sweetalert2 for alert, prompt, confirm, toast notification
-- **fix:** Fixed typo in vendor earning tooltip.
-- **fix** Vendor wasn't getting a notification when order status change from cancelled to processing, on-hold, or completed. This has been fixed now
-
-= v3.2.15 ( Oct 13, 2021 ) =
-
-- **feat:** Permanently delete Dokan related data (custom tables, options, pages, user roles and capabilities etc) after plugin delete based on admin Setting
-- **new:** added filter hook dokan_store_banner_default_width and dokan_store_banner_default_height so that theme/plugin author can change store banner with and height based on their needs
-- **new:** Added Dokan stores page link under Admin bar menu, from now on âVisit Storeâ redirects to Dokan store list page and âVisit Shopâ directs to WooCommerce Product list page.
-- **new:** Added integration of sweetalert2 to replace default javascript alert, prompt, confirm, and toast notifications
-- **update:** Added a new tooltip in vendor dashboard product listing page after earning column to clarify vendors about possible earning from their products
-- **update:** Added localization support for text "Calculating"
-- **update:** Now Dokan page view count will be stored in the browserâs Local Storage instead of browser Cookies. Some caching plugins weren't able to cache single product pages due to this. This fix will let caching plugins to cache single product pages from now on
-- **fix:** Single product page used to display the seller's real name instead of store name on the vendor info tab. Issue has been resolved now.
-- **fix:** When a vendor adds a new product If the form has any validation error then old selected tags went missing. This issue has been resolved now.
-- **fix:** Store Address input fields were missing in vendor dashboardâs store setting form when the Dokan Pro plugin was not installed. Now this issue has been fixed.
-- **fix:** Removed vendor verification verified status check from vendor dashboardâs store settings page if dokan pro is not installed or vendor verification module is not active
-- **fix:** Single Store product category wasnât working if WPML plugin was installed. Now this issue has been fixed.,
-- **fix:** Added validation for withdraw limit
-- **fix:** Corrected spelling to 'picture' from 'picutre'
-- **fix:** In the latest version of Divi, theme assets werenât loading if a single store page doesnât contain any product. This issue has been fixed now.
-- **fix:** Vendor Contact form didn't contain âReply Toâ email address when a customer would contact a vendor via the vendor contact form widget. Issue has been resolved now.
-
-= v3.2.14 ( Oct 04, 2021 ) =
-
-- **fix:** multiple issue fixed in WPML integration with Dokan
-
-
-= v3.2.13 ( Sep 30, 2021 ) =
-
-- **fix:** fixed warning on product listing page due to filter data type mismatch
-- **update:** added dynamic filter named: dokan_manage_shop_order_custom_columns_%s hook under shop_order_custom_columns method
-- **feat:** Set limitation for how many product tags that vendor can input, admin can set tag limit via filter hook: dokan_product_tags_select_max_length
-- **fix:** fixed localization issue on attribute label
-- **fix:** fixed Single store product search not working for logged out users
-
-= v3.2.12 ( Sep 13, 2021 ) =
-
-- ***new*** Withdraw details keep save as log
-- ***new*** Vendor settings update REST api support
-- ***new*** New Filter hook added for Order status list allowed for withdrawal 'dokan_settings_withdraw_order_status_options'
-- ***fix*** Check if pagination_base post is empty
-- ***fix*** Single store page map hide based on setting
-- ***fix*** added upgrader to reassign dokan_store_name meta because it was missing for some vendor
-- ***fix*** JS deprecated warnings fixed
-
-= v3.2.11 ( Aug 31, 2021 ) =
-
-- **new:** Added new shortcode attribute named random to display store list randomly [dokan-stores orderby="random"]
-- **fix:** Fixed fatal error when vendor registration shortcode used from API
-- **fix:** Added Map API selection section on Dokan admin setup wizard page
-- **new:** Added **'Texty â SMS Notification for WordPress, WooCommerce, Dokan and more'** plugin as recommended plugins under Dokan admin setup wizard page
-- **new:** Added vendor filter on admin Withdraw page
-- **new:** Added a new REST route to get corresponding vendor's product categories under StoreController API (GET: wp-json/dokan/v1/stores/3/categories)
-- **new:** Added a new REST route to get corresponding vendor's popular product categories under StoreController API (GET: wp-json/dokan/v1/stores/3/categories?best_selling=1)
-- **new:** Added REST API route to create withdrawal request (POST: /wp-json/dokan/v1/withdraw/ )
-- **Fix:** fixed unable to remove downloadable file when there is only one file exists
-- **fix:** fixed fatal error with deleted product of an order
-- **new:** What's new button added under dokan admin page top bar section
-
-= v3.2.10 ( Aug 10, 2021 ) =
-
-- **update:** Hide customer billing email and ip address from vendor order export data based on admin setting
-- **update:** Default Category order by set to name and order by as ascending
-- **fix:** After submitting the Create Product from the selected category is not selected
-
-= v3.2.9 ( Aug 2, 2021 ) =
-
-- **New:** Added customize settings for store product filter option to show/hide
-- **Fix:** Product tag search not working in variable product after adding new attribute
-- **New:** added a new hook dokan_earning_by_order_item_price
-- **Fix:** display shipping widget though virtual checkbox selected
-- **Fix:** Children IDs not showing on REST API
-- **Fix:** fixed a js error while refunding from vendor dashboard: size() is not a function
-
-= v3.2.8 ( Jul 12, 2021 ) =
-
-- **update:** Added Composer 2 support
-- **fix:** Fixed rewrite rules issues after Dokan plugin is installed and after change store slug
-- **new:** Added dokan summer sale promotion
-- **new:** Added a new action hook named dokan_store_customizer_after_vendor_info under Dokan Store Customizer
-- **update:** added $data parameter to existing dokan_vendor_create_data action hook
-- **new:** added a new action hook named dokan_before_create_vendor
-- **new:** added a new action hook named dokan_seller_registration_after_shopurl_field
-- **new:** added a new action hook named dokan_settings_after_store_phone
-- **new:** added a new action hook dokan_settings_before_store_email
-- **new:** added a new action hook dokan_product_gallery_image_count
-
-= v3.2.7 ( Jul 01, 2021 ) =
-
-- **new:** Added Orderby filtering for single store product listing page
-- **new:** Added custom ip address lookup link
-- **new:** Added a success message after creating a product from add new product modal window
-- **new:** Added - - for category listing in add new product page and add new product modal window
-- **new:** Added a new shortcode attribute named with_products_only in [dokan-stores] shortcode so that vendor without product can be filtered out from store listing page
-- **new(api):** Add support to send objects to trash, thanks to @MĂĄrio Valney
-- **fix:** Fixed duplicate tag create issue, if new tag is searched with mixed character case
-- **fix:** Wrong hooks used on Elementor widgets
-- **fix:** Typo in Staff - Manage Menu Permissions fixed
-- **fix:** Fixed an error in Dokan setting for new installation of Dokan Lite
-- **fix:** Fixed vendor order page pagination issue for date and customer filter
-- **fix:** Fixed âIn stock" and "Out of stock" translation issue
-- **fix:** Email template override directory location correction for dokan vendor completed order
-- **fix:** delete cache data after updating dokan vendor balance table
-- **fix:** Fixed a bug that would allow vendors to change order status even if they don't have permission to do so, thanks to @CODLOP
-
-= v3.2.6 ( May 8, 2021 ) =
-
-- **new:** Added new action hooks on order details sidebar
-- **new:** Dokan admin setting warning type field added on Dokan admin setting
-- **new:** Dokan admin setting repeatable field added 2 new options must-use and desc
-- **new:** Introduce the filter hook dokan_dashboard_nav_settings_key for store settings slug
-- **new:** Eid 2021 promotion added
-- **new:** New hook: Vendor dashboard custom CSV orders export
-- **new:** Vendor Order export CSV file earnings column added
-- **fix:** Decimal as comma separated sale price does not save
-- **fix:** Product variation pagination for post type pending
-- **fix:** product published date displaying current date in local language
-
-= v3.2.5 ( April 30, 2021 ) =
-
-- **fix:** Fix single store page template layout
-- **fix:** [wpml] Fix malformed dashboard subpage URL when page_link is filtered to add a query parameter
-- **fix:** product count exclude booking product
-- **fix:** order export not filtered customer filtered data
-- **fix:** [wpml] Fix malformed store URL when the home URL contains a query parameter
-- **fix:** capitalise vendor url in add new vendor
-- **new:** Sub orders set dynamic post status on WooCommerce my account order details page
-- **new:** Store listing shortcode enhancements, Store Category wise: [dokan-stores category="clothing"] Order wise: [dokan-stores order="ASC"] Orderby wise: [dokan-stores orderby="registered"] Store_id wise: [dokan-stores store_id="1, 2, 3"
-- **new:** Vendor product listing page added 2 new filters options stock wise and product type wise
-- **new:** Order status for withdraw option added on dokan admin setting page
-- **new:** Store open close option disabled by default when a vendor register
-- **fix:** Vendor setup wizard page broken issue fixed
-- **fix:** Inconsistency template CSS class dokan-w3 issue fixed on vendor setting page
-- **fix:** Unable to add multiple lines to the short Description field issue fixed
-- **fix:** AZERTY keyboard restrict registration issue fixed for vendor register form
-
-= v3.2.4 ( April 01, 2021 ) =
-
-- **new:** Enter key allow for vendor search on store listing page
-- **feat:** Vendors able to edit product slug from their product edit page
-- **update:** Set default values withdraw methods, limit, order status, commissions on the setup wizard
-- **refactor:** product create update redundant check
-- **fix:** time format with a forward slash (\) wasn't parsing correctly on store open/close time dropdown
-- **fix:** Products: Preview of text is not appearing instantly while adding Product Tags
-- **fix:** Withdraw: IBAN number is not showing on the Dokan Admin
-- **fix:** Warning showing on all widget when use on Elementor
-- **fix:** Divi theme store single page showing warning issue fixed
-- **fix:** Store listing filter most recent is not working issue fixed
-
-= v3.2.3 ( March 13, 2021 ) =
-
-- **notice:** limited time promotion for weDevs birthday
-- **update:** WordPress 5.7 and WooCommerce 5.1 compatibility
-
-= v3.2.2 ( March 5, 2021 ) =
-
-- **new:** Added order completed email notification for vendors
-- **new:** Added Vendor individual withdraw threshold option
-- **new:** Added a new hook (dokan_admin_setup_wizard_save_step_setup_selling) after admin setup wizard save setup selling step
-- **new:** Added a new action hook (dokan_create_sub_order_before_calculate_totals) when creating a suborder
-- **update:** Added sales price validation check for subscription product
-- **update:** Added a new filter hook (dokan_order_status_count) in order status to support custom order status
-- **update:** WP kses added new allowed arguments for image tag
-- **fix:** Product update and delete permission error via REST API
-- **fix:** Fixed some PHP 8 warnings
-- **fix:** Store settings error on save in vendor dashboard area
-- **fix:** Order delivery tracking number wasn't saving as order notes
-- **fix:** Export order by status on vendor dashboard issue fixed
-- **fix:** Product discount price is set empty if regular price is lower than discount price
-- **fix:** Fatal error on product tab's post per page in more products section
-- **fix:** Store/products orderby query parameter
-- **fix:** Dokan store open time timezone mismatch
-- **fix:** Prices fields showing for external product
-- **fix:** Unable to save stock value for variation product
-- **fix:** Deprecated Gplus cleanup
-- **fix:** Unable to save stock value for variation product
-- **fix:** Different edit url for publish products in vendor dashbboard
-- **fix:** SKU wasn't saving from vendor dashboard
-
-= v3.2.1 ( February 12, 2021 ) =
-
-- **fix:** Optimized code for better security
-- **update:** performance improvements on vendor dashboard end
-- **fix:** fixed conflict with user frontend menu position with Dokan
-
-= v3.2.0 ( January 29, 2021 ) =
-
-- **new:** Added blank product page new UI on vendor dashboard
-- **new:** Added Store open and closed status on dokan store listing page
-- **new:** Added a setting where admin can set how many products to display on vendor single store page
-- **new:** Added a new validation message after upload a banner/profile picture, show a browser alert if user tries to leave the current page without saving the changes.
-- **new:** Added a new update setting button on top of the vendor setting form
-- **new:** Added downloadable and virtual product type support for subscription products
-- **update:** Dokan withdrawal request promotion
-- **fix:** While registering as a vendor, radio button should work only when user click mouse cursor on the top of the radio button.
-- **fix:** Product add pop-up validation error message style
-- **fix:** Vendor pending tab keeps loading issue fixed
-- **fix:** Improved the mapbox address search input field and make it same as google map search box
-- **fix:** Keep old vendor as product author while duplicating product from the admin area
-- **fix:** Fixed rounded vendor balance can not be withdrawn
-- **fix:** Fixed resetting geolocation address is not selecting default location address
-- **fix:** Fixed featured attribute of the store list shortcode doesn't work
-- **fix:** Fixed vendors count not working on autoload in admin vendor listing page
-- **fix:** Fixed downloadable product "Grant Access" JS error
-- **fix:** Added filter for $allowed_roles in vendor registration which was missing
-- **fix:** If the vendor has a rounded value in their balance then vendors are unable to request a withdrawal of the full amount
-- **fix:** When order data is retrieved via API, the "total" order value is gets rounded
-- **fix:** Elementor conflict with Dokan best and top selling product shortcodes issue fixed
-- **fix:** More product tab showing other vendors product issue fixed
-
-= v3.1.2 ( January 12, 2021 ) =
-
-- **fix:** Store listing page displaying disabled vendors
-- **notice:** Added Paypal adaptive modules removal notice
-
-= v3.1.1 ( January 11, 2021 ) =
-
-- **feat:** Added searching feature for Dokan admin settings
-- **new:** Added "Visit Vendor Dashboard" link to admin bar
-- **new:** Added current_datetime() compatible dokan functions for WordPress version < 5.3
-- **update:** Updated refund table item_totals and item_tax_totals fields via Dokan upgrader
-- **perf:** Optimized Dokan admin settings page to load setting page faster
-- **fix:** Added vendor search feature for disabled vendors
-- **fix:** Product discount showing wrong when a product that has a limited time discount and sets a schedule on the calendar on the frontend dashboard
-- **fix:** Fixed creating addon by vendor staff was not working for product
-- **fix:** Fixed coupons created by the vendor can not be modified
-- **fix:** Fixed admin dashboard wasn't loading due to use of sprintf for some translatable strings
-- **fix:** Fixed display issue for State and Country multi-select of Dokan vendor create modal
-- **fix:** Translation issue fixed on store listing page
-- **fix:** Store product category not showing properly
-- **fix:** Fixed missing text-domain on product listing delete confirmation alert
-- **fix:** Responsive dashboard product and order table
-
-= v3.1.0 ( December 20, 2020 ) =
-
-- [new] Store page customizer and better theme support
-- [fix] Stock level wrong calculation in order notes
-- [fix] Improve search with store name in Dokan admin vendor listing and store listing page
-- [fix] Store listing page avatar image not showing properly on store listing page
-- [fix] Store and store term and conditions template make high priority
-- [fix] Store settings page url issue when vendor dashboard use as child page
-- [fix] Vendor dashboard menu not selected when vendor dashboard use as a child page
-- [fix] Ordering issue on category dropdown on product listing filter area
-- [fix] Vue wp list table package updated, translation support for list tables
-- [fix] Dokan vendor dashboard big counter warning issue fixed
-- [fix] Vendor dashboard product table column issue fixed
-- [fix] Update custom deactivation reason placeholder text
-- [fix] Vendor biography formatting issue when update any vendor from Dokan admin area
-- [fix] Added attribute slug with product REST API
-- [fix] Vendor listing and withdraw page not loading correctly in admin area when use others languages
-- [fix] Upgrade to pro module page overlapping issue with admin notice, css & changed svg
-- [fix] Withdraw methods toggle options not working on Dokan setup wizard
-- [fix] Withdraw methods are not saving for some users, fixed via Dokan upgrader
-
-= v3.0.16 ( December 01, 2020 ) =
-
-- **fix:** Search by store name not working on store listing page when store created from admin area
-- **fix:** Store reviews REST API issue fix and improve
-- **fix:** Order fetching REST API issue fix and improve
-- **new:** Dokan upgrade to pro modules page added
-- **update:** weMail plugin added on recommended plugins list when run Dokan setup wizard
-- **fix:** Deactivation reasons icons and placeholder updated
-
-= v3.0.15 (November 21, 2020) =
-
-- **fix** updated codebase to fix timezone mismatch
-
-= v3.0.14 (November 20, 2020) =
-
-- **fix** Vendor edit admin commission on decimal separator as comma
-- **update** Limited time promotion admin notice
-
-= v3.0.13 (November 12, 2020) =
-
-- **New:** Added new filter `dokan_is_product_author`
-- **New:** Apply new filter `dokan_product_listing_post_statuses` on product listing status
-- **Fix:** Store name search was not working when the vendor account was created by admin
-- **Fix:** Vendor was not changing when trying to change on product quick edit section from admin area
-- **Fix:** Some translation issue fixed on admin setting page
-
-= v3.0.12 (November 5, 2020) =
-
-- **Fix:** Refactor upgrade to pro banner.
-- **Fix:** Temporary disable WooCommerce payment and shipping setup step from vendor setup wizard section. It was throwing a lot of deprecated warnings, we will fix it in the next version.
-
-= v3.0.11 (October 22, 2020) =
-
- * **Fix:** Fixes a JS loading issue when `SCRIPT_DEBUG` is enabled
-
-= v3.0.10 (October 20, 2020) =
-
-- **Fix:** Vendor balance remains same after refund
-- **Fix:** Vendor name is not showing correctly on WooCommerce product list quick edit
-- **Fix:** CSS conflicting with the YITH Badge Management Plugin
-- **Fix:** Added postbox header div in postbox component
-- **Fix:** Guest checkout name in vendor order details
-- **Fix:** Phone field pasting option enabled settings page
-- **Fix:** Admin dashboard feed REST Request error
-- **Fix:** Prevent admin email for sub-order
-- **Fix:** Multiple category commission issue fallback to vendor commission
-- **Fix:** Admin vendor total count
-- **Fix:** Default order sorting issue
-- **Fix:** WC deprecate notice for using order parent_id directly
-- **Fix:** Label changed for external product type
-- **Fix:** Product tag add if do not exist
-- **Fix:** Store category widget not translate problem with WPML
-- **Fix:** On RESTful order creation, only single store is added into the response even if there are multiple stores
-- **Fix:** Product variation author id update for product quick save
-- **Fix:** Translation issue on Select2
-- **Fix:** Price schedule selection date added
-- **Fix:** Remove duplicate capabilities form seller role
-- **Fix:** Dashboard header add new button not showing with theme conflict
-- **Fix:** Order details page showing warning issue
-- **Fix:** After withdraw approval, sometimes it's not inserting in balance table
-- **Fix:** Redirect to 404 if vendor do not exist for TOC template
-- **Fix:** Withdrawal current balance is incorrect cause of cache issue
-
-= v3.0.9 (August 25, 2020) =
-
-- **Fix:** Some security issues fixed
-- **Fix:** Loading issue when long tags list on add/edit product page (Vendor Dashboard)
-- **Fix:** Add missing permission callback in REST routes to make WordPress 5.5 compatible
-- **Fix:** Vendor can send multiple withdraw request from vendor dashboard
-- **Fix:** API endpoint added
-
-= v3.0.8 (August 12, 2020) =
-
-- **Fix:** WordPress v5.5 compatibility issue fixed
-- **Fix:** Namespacing issues on class declaration
-
-= v3.0.7 (July 23, 2020) =
-
-- **Fix:** Showing fatal error for user switching
-
-= v3.0.6 (July 23, 2020) =
-
-- **Feat:** Vendor user switching (User Switching plugin support)
-- **Feat:** Decimal and Thousand Separator with Comma
-- **Fix:** Add system to refresh options for select fields in admin settings
-- **Fix:** Admin settings input field type for common types of fields
-- **Fix:** Shop name not showing on product listing quick edit section
-- **Fix:** Order notes in vendor dashboard insert wrong author data
-
- = v3.0.5 (June 11, 2020) =
-
-- **New:** Exclude cash on delivery payments from vendor withdrawal balance (COD)
-- **Fix:** Remove vendor folder from the excluded list
-- **Fix:** Earning column missing on vendor dashboard order list
-- **Fix:** Default location not working in vendor dashboard
-- **Fix:** Remove link from customer name in vendor order details
-- **Fix:** Custom header, footer template does not work in Dokan store page (Divi Theme)
-
- = v3.0.4 (May 15, 2020) =
-
- - **Fix:** Rename google plus to google as google plus is deprecated #807
- - **Fix:** Unable to set store trams and condition settings through REST API #808
- - **Fix:** Vendor order email does not have the TAX details #809
- - **Fix:** Withdraw request email is not send to admin #810
- - **Fix:** Typo in backend add and edit vendor page #811
- - **Fix:** On updating commission type in backend vendor dashboard, translated commission type is getting saved into database #814
- - **Fix:** Store listing filter does not work when its saved as frontpage #815
- - **Fix:** When a product is purchased with a price of more than 8 digit the calculation is wrong #819
- - **Fix:** Caching issue on vendor's order listing page #821
- - **Fix:** Filter out empty seller ids when a product is deleted `dokan_get_sellers_by` function #827
- - **Fix:** Deduct PayPal gateway fee from vendor's earning #830
- - **Feat:** Hide vendor info if admin wants to #829
- - **Improvement:** Pass vendor id in dokan_get_seller_active_withdraw_methods hook #813
-
-= v3.0.3 (April 03, 2020) =
-
- - **Fix:** Clear caches on product update #804
- - **Fix:** Vendor is not receiving email for new order #803
- - **Fix:** Remove weForms promotion from admin setup wizard #798
-
-= v3.0.2 (March 23, 2020) =
-
- - **Fix:** Unable to remove attributes in vendor product edit page #637
- - **Fix:** Feature image is not saving on quick edit
- - **Fix:** Vendor image issue #769
- - **Fix:** Set vendor eamil on new vendor creation #787
- - **Fix:** Return content from shotcode instead of being outputting #752
- - **Fix:** Map still showing on vendor dashabord settings page even if there is no API key
- - **Fix:** Product type not saving when quick edit #767
- - **Fix:** Render withdraw methods dynamically in setup wizard #771
- - **Fix:** Show vendor email to admin and actual vendor #773
- - **Fix:** Product type error in dokan_save_product function
- - **Fix:** Admin is unable to see the setup wizard on new dokan installation when WooCommerce is not installed #783
- - **Fix:** Add missing add_meta_query method in dokan REST API #788
- - **Fix:** Only render map if api key is availabe in store settings page #774
- - **Feat:** Add dokan_get_all_cap_labels function #781
- - **Improvement:** Added group description to exporters and updated privacy policy guide to drop use of deprecated classes #755
- - **Improvement:** dokan_get_shipping_processing_times function #785
- - **Improvement:** Add filter on withdraw export csv args #786
- - **Improvement:** Get correct product thumbnail size in vendor product list page #795
-
-= v3.0.1 (February 07, 2020) =
-
- - **Fix:** Fixed yoast seo causing conflict issue in single store page
- - **Fix:** Permission issue fixed for shop manager
- - **Fix:** Handle sales price error if its greater than regular price or empty
- - **Fix:** Change placholder text for filter by customer to registered customer
-
-= v3.0.0 (February 03, 2020) =
-
- - **Fix:** Add mapbox option in dokan admin setup wizard
- - **Fix:** Pass order object into woocommerce_order_item_{type}_html hook
- - **Fix:** Allow vendor to update store terms and condition with REST API #714
- - **Fix:** If show_email is truned off don't show the eamil in REST API response #748
- - **Fix:** Remove space while generating user_name via dokan_generate_username function #749
- - **Fix:** If a product is deleted and no vendor is found for that product display (no name) in backend order listing page #746
- - **Improvement:** Store listing filter styles so that it works with almost any theme
- - **Improvement:** Show notice in dokan admin setup wizard if minimum PHP version is not met for WooCommerce
- - **Improvement:** If dokan pro doesn't exist but commmision type is found in database, ignore that saved commission type #746
- - **Improvement:** Code quality and performance
-
-= v2.9.31 (January 14, 2020) =
-
- - **Fix:** Add option to set dokan store listing page for rendering all stores
-
-= v2.9.30 (January 10, 2020) =
-
- - **Feat:** Grid and List view for store listing page #712
- - **Feat:** Store sorting options in store listing page #712
- - **Feat:** Add Mapbox as Google map alternative
- - **Feat:** Add Enfold theme support
- - **Improvement:** dokan_get_vendor_by_product function so that it reruns vendor for product variation #726
-
-= v2.9.29 (December 26, 2019) =
-
- - **Fix:** Don't show the admin setup wizard who ran the setup wizard before
- - **Fix:** Remove non-ascii characters from some file names
- - **Fix:** Dokan dashboard hamburger menu is not working fixed
- - **Fix:** Downloadable product grunt and revoke access issue is fixed
- - **Tweak:** Added privacy policy info in setup wizard for admin
-
-= v2.9.28 (December 19, 2019) =
-
- - **Fix:** Sanitize and Escape data before saving and rendering #717
- - **Improvement:** Add privacy policy in readme.
-
-= v2.9.27 (December 11, 2019) =
-
- - **Feat:** Run Dokan Admin Setup Wizard without being WooCommerce installed #708
- - **Improvement:** Remove empty div from vendor payment settings page #695
- - **Improvement:** Deleting a attribute from predefined attributes and add the attribute again mess up attributes #703
- - **Improvement:** Add hooks in order details and admin setup wizard #715
- - **Improvement:* Pass post_type as a second parameter to the months_dropdown_results hook #710
-
-= v2.9.26 (November 19, 2019) =
-
- - **Feat:** Add option to hide out of stock products in best selling widget #697.
- - **Improvement:** Make dokan add vendor UI consistent to WordPress UI #696.
-
-= v2.9.25 (November 12, 2019) =
-
- - **Dev:** Add dokan backend settings input required field validation.
- - **Improvement:** Dokan_Commission::prepare_for_calculation() method.
-
-= v2.9.24 (November 08, 2019) =
-
- - **Fix:** Assets URL localization was creating a problem in frontend vendor shipping area, this has been fixed.
- - **Improvement:** Added a new filter `dokan_get_edit_product_url` to override the product edit URL.
-
-= v2.9.23 (November 07, 2019) =
-
-- **Feat:** Add REST API support for store contact form widget
-- **Feat:** Add Vendor listing page in dokan backend
-- **Feat:** Add vendor active inactive REST API
-- **Fix:** Increase refund table data length to allow more refund items
-- **Fix:** Withdraw threshold field disappears when commission type is selected in dokan settings
-- **Fix:** Order listing page shows the same orders when object cache is enabled
-- **Fix:** Best selling widgets warning in store sidebar
-- **Fix:** Save store name in vendor's user_meta so that store search form widget works correctly
-- **Fix:** If percent commission rate is not set while using combine commission calculation is not correct
-- **Dev:** Add filter to modify current page id in dokan_is_seller_dashboard function
-- **Localization:** Store open and close notice placeholder strings remains untranslated
-
-v2.9.22 -> October 03, 2019
------------------------------------
-- **fix:** Remove duplicate inpute filed in dokan admin settings form
-- **fix:** Make commissison value to 0 if no product found
-- **fix:** Attribute value's are swapped after changing the order of the attributes
-
-v2.9.21 -> September 24, 2019
------------------------------------
-- **fix:** If state is not found for a country in store settings, remove the state field on reload
-- **fix:** Only show vendor's own uploaded media to a vendor.
-- **fix:** Add required attribute for various input field in dokan_post_input_box function.
-- **fix:** Calculate commission for item by quantity when the commission is set to flat.
-- **Tweak:** Introduce Dokan_Commission class to calculate admin and vendor's commission.
-- **Tweak:** Remove unnecessary placeholder in admin commission field.
-
-v2.9.20 -> August 23, 2019
-------------------------------------
-- **Fix:** Geolocation map settings value is not saving
-- **Fix:** Fix warning in vendor dashboard widget when seller setup wizard is not run
-- **Fix:** Store banner height in vendor settings page it not honouring the saved settings
-- **Fix:** Conflict with avada theme fution builder
-- **Tweak:** Use WordPress backend date format while printing date in approved and cancelled withdraw request
-
-v2.9.19 -> July 29, 2019
-------------------------------------
-- **Fix:** Split orders created from admin dashboard
-- **Fix:** Add on backorder in product stock management
-- **Fix:** Dokan dashboard menu returning 404 with the latest version of visual composer plugin
-- **Tweak:** Dokan admin settings rearrange
-- **Tweak:** Add compatibility with ultimate member plugin
-- **Tweak:** Add few hooks in product listing template
-
-v2.9.18 -> July 10, 2019
-------------------------------------
-- **Feat:** Add google map type option field component
-- **Feat:** Add dokan_array_after helper function
-- **Fix:** Admin settings default value for multicheck field
-- **Tweek:** Remove unnecessary code and add hook after creating parent order
-- **Tweek:** Refactor dokan_get_vendor_by_product function and explicit error checking while using it
-
-v2.9.17 -> June 13, 2019
-------------------------------------
-- **Fix:** Remove unwanted code to fix conflict with yith plugin
-- **Tweak:** Dokan theme support and responsive menu
-
-v2.9.16 -> June 11, 2019
-------------------------------------
-- **Fix:** Hide hidden and out of stock products in vendor store page
-- **Fix:** A non-numeric value encountered warning in vendor product listing page, if product price is not given
-- **Fix:** Add failed order in vendor order listing page
-- **Fix:** Creating product from admin backend returns 2 instance of the product author
-- **Tweak:** Ensure dokan_get_seller_id_by_order filter is always taking effect
-- **Tweak:** Make dokan vendor dashboard responsive
-- **Tweak:** Show admin notice stating WooCommerce is required if not found on dokan installation
-- **Tweak:** Add hook after creating and updating object via dokan REST API
-- **Tweak:** Add dokan_ensure_vendor_coupon filter while ensuring vendor coupon restriction
-- **Tweak:** Add updater class to fix banner issue where store settings and listing template was overridden
-- **Tweak:** Add filter hook while fetching vendor products
-- **Tweak:** Add define method to define plugin constants
-
-v2.9.15 -> May 08, 2019
-------------------------------------
-- **Fix:** Vendor banner is not showing in the backend edit user profile page
-- **Fix:** Add filter to allow or skip nonce checking while registering new user
-- **Tweak:** Update appsero SDK
-
-v2.9.14 -> Apr 26, 2019
-------------------------------------
-- **Fix:** Schedule product price not showing correctly
-- **Fix:** Backward compatibility for banner and store time
-
-For the changelog history, view the full [changelog.txt](https://raw.githubusercontent.com/getdokan/dokan/develop/CHANGELOG.md).
+[CHECK THE FULL CHANGELOG](https://github.com/getdokan/dokan/blob/develop/CHANGELOG.md).
== Upgrade Notice ==
diff --git a/src/admin/components/AdminNotice.vue b/src/admin/components/AdminNotice.vue
index 69d02dd2ba..88fce3fee8 100644
--- a/src/admin/components/AdminNotice.vue
+++ b/src/admin/components/AdminNotice.vue
@@ -62,6 +62,10 @@ export default {
type: Number,
default: 5000
},
+ scope: {
+ type: String,
+ default: ''
+ }
},
data() {
@@ -82,8 +86,9 @@ export default {
methods: {
fetch() {
+ const notice_scope = this.scope ? `?scope=${this.scope}` : '';
$.ajax( {
- url: `${dokan_promo.rest.root}${dokan_promo.rest.version}/admin/notices/${this.endpoint}`,
+ url: `${dokan_promo.rest.root}${dokan_promo.rest.version}/admin/notices/${this.endpoint}${notice_scope}`,
method: 'get',
beforeSend: function ( xhr ) {
xhr.setRequestHeader( 'X-WP-Nonce', dokan_promo.rest.nonce );
diff --git a/src/admin/components/CombineInput.vue b/src/admin/components/CombineInput.vue
index f6e223305d..f4951985ab 100644
--- a/src/admin/components/CombineInput.vue
+++ b/src/admin/components/CombineInput.vue
@@ -1,36 +1,46 @@
-
-
-
- {{ '%' }}
-
-
- {{ '+' }}
-
-
- {{ getCurrencySymbol }}
-
-
+
+
+
+
+ {{ __( '%', 'dokan-lite' ) }}
+
+ {{ __( '+', 'dokan-lite' ) }}
+
+
+
+ {{ getCurrencySymbol }}
+
+
+
-
diff --git a/src/admin/components/Commission/CategoryBasedCommission.vue b/src/admin/components/Commission/CategoryBasedCommission.vue
new file mode 100644
index 0000000000..c380948270
--- /dev/null
+++ b/src/admin/components/Commission/CategoryBasedCommission.vue
@@ -0,0 +1,402 @@
+
+
+
+
+
{{ __( 'Category', 'dokan-lite' ) }}
+
+
+
+
+
{{ __( 'Percentage', 'dokan-lite' ) }}
+
+
+
{{ __( 'Flat', 'dokan-lite' ) }}
+
+
+
+
+
+
+
+
allCategroyEnabled = !allCategroyEnabled'>
+
+
+
{{__( 'All Categories', 'dokan-lite' )}}
+
+
+
+
+
+
{{ __( '%', 'dokan-lite' ) }}
+
+
+ {{ __( '+', 'dokan-lite' ) }}
+
+
+
{{ getCurrencySymbol }}
+
+
+
+
+
+
+
+
+
+
+
catRowClick( item, index )'>
+
+
+
+
+ #{{ item.term_id }}
+
+
+
+
+
+
+
{{ __( '%', 'dokan-lite' ) }}
+
+
+ {{ __( '+', 'dokan-lite' ) }}
+
+
+
{{ getCurrencySymbol }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/admin/components/Commission/index.js b/src/admin/components/Commission/index.js
new file mode 100644
index 0000000000..aa3357bf63
--- /dev/null
+++ b/src/admin/components/Commission/index.js
@@ -0,0 +1 @@
+import './style.css';
diff --git a/src/admin/components/Commission/style.css b/src/admin/components/Commission/style.css
new file mode 100644
index 0000000000..c38c0f161c
--- /dev/null
+++ b/src/admin/components/Commission/style.css
@@ -0,0 +1,4 @@
+@config './tailwind-category-commission.config.js';
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/src/admin/components/Commission/tailwind-category-commission.config.js b/src/admin/components/Commission/tailwind-category-commission.config.js
new file mode 100644
index 0000000000..063f70ff4f
--- /dev/null
+++ b/src/admin/components/Commission/tailwind-category-commission.config.js
@@ -0,0 +1,20 @@
+/** @type {import('tailwindcss').Config} */
+const defaultTheme = require("tailwindcss/defaultTheme");
+module.exports = {
+ corePlugins: {
+ preflight: false,
+ },
+ content: [
+ './src/admin/components/Commission/CategoryBasedCommission.vue',
+ './src/admin/components/CombineInput.vue',
+ ],
+ theme: {
+ extend: {
+ screens: {
+ ...defaultTheme.screens,
+ 'd-xs': '360px',
+ }
+ }
+ },
+ plugins: [],
+};
diff --git a/src/admin/components/Currency.vue b/src/admin/components/Currency.vue
index 9a3c4268af..9ec4fc48fe 100644
--- a/src/admin/components/Currency.vue
+++ b/src/admin/components/Currency.vue
@@ -8,7 +8,7 @@ export default {
methods: {
formattedPrice(value) {
- return accounting.formatMoney( value, dokan.currency );
+ return accounting.formatMoney( value, {...dokan.currency, precision: dokan.currency.precision+ 2} );
}
}
};
diff --git a/src/admin/components/Datepicker.vue b/src/admin/components/Datepicker.vue
index 2b4a2e368a..de2af72d53 100644
--- a/src/admin/components/Datepicker.vue
+++ b/src/admin/components/Datepicker.vue
@@ -2,8 +2,8 @@
@@ -15,52 +15,83 @@
required: true,
default: ''
},
-
format: {
type: String,
required: false,
- default: ''
+ default: 'YYYY-MM-DD'
},
-
placeholder: {
type: String,
required: false,
default: ''
},
-
changeMonthYear: {
type: Boolean,
required: false,
default: false
},
+ startFromCurrentDate: {
+ type: Boolean,
+ required: false,
+ default: false
+ }
},
- mounted() {
- const vm = this;
-
- jQuery(vm.$el).datepicker({
- dateFormat: vm.format,
- changeMonth: vm.changeMonthYear,
- changeYear: vm.changeMonthYear,
-
- beforeShow() {
- jQuery(this).datepicker('widget').addClass('dokan-datepicker');
+ computed: {
+ computedValue: {
+ get() {
+ return this.value;
},
-
- onSelect(date) {
- vm.updateValue(date);
+ set(newValue) {
+ this.$emit('input', newValue);
}
- });
+ }
+ },
+
+ mounted() {
+ this.initDatepicker();
},
methods: {
+ initDatepicker() {
+ const vm = this;
+
+ const options = {
+ dateFormat: vm.format,
+ changeMonth: vm.changeMonthYear,
+ changeYear: vm.changeMonthYear,
+ minDate: vm.startFromCurrentDate ? new Date() : null,
+
+ beforeShow() {
+ jQuery(this).datepicker('widget').addClass('dokan-datepicker');
+ },
+
+ onSelect(date) {
+ vm.$nextTick(() => {
+ vm.updateValue(date);
+ });
+ }
+ };
+
+ jQuery(this.$refs.datepicker).datepicker(options);
+ },
+
updateValue(value) {
- if ( ! value) {
- value = moment().format('YYYY-MM-DD');
+ if (!value) {
+ value = moment().format(this.format);
}
+ this.computedValue = value;
+ }
+ },
- this.$emit('input', value);
+ watch: {
+ value(newVal) {
+ jQuery(this.$refs.datepicker).datepicker('setDate', newVal);
}
+ },
+
+ beforeDestroy() {
+ jQuery(this.$refs.datepicker).datepicker('destroy');
}
};
diff --git a/src/admin/components/Fields.vue b/src/admin/components/Fields.vue
index e38bf30f8e..bb9a9ec9ef 100644
--- a/src/admin/components/Fields.vue
+++ b/src/admin/components/Fields.vue
@@ -1,7 +1,7 @@
-
+
{{ fieldData.label }}
{{ fieldData.description }}
@@ -10,7 +10,7 @@
-
+
@@ -43,7 +43,7 @@
-
+
@@ -72,58 +72,17 @@
-
-
-
-
-
-
- inputValueHandler( fieldData.name, event.target.value, fieldValue[fieldData.name] )"
- />
-
-
-
-
- {{ getError( fieldData.label ) }}
-
-
- {{ getValidationErrorMessage( fieldData.name ) }}
-
-
-
-
-
+
-
+
-
+
{{ __( 'Both percentage and fixed fee is required.', 'dokan-lite' ) }}
@@ -137,8 +96,47 @@
+
+
+
+
+
+
+
+
+
+
+ {{ getError( fieldData.label ) }}
+
+
+ {{ getValidationErrorMessage( fieldData.name ) }}
+
+
+
+
+
+
+
+
-
+
@@ -164,7 +162,7 @@
-
+
@@ -184,7 +182,7 @@
-
+
@@ -207,7 +205,7 @@
-
+
@@ -249,7 +247,7 @@
-
+
@@ -273,17 +271,16 @@
-
+
setCustomColor( e, fieldData.name )"
+ v-model="fieldValue[fieldData.name]"
+ @custom-change="e => setCustomColor( e, fieldData.name, fieldData.default )"
@toggleColorPicker="toggleColorPicker"
- :value="fieldValue[fieldData.name]"
- @input="event => inputValueHandler( fieldData.name, event.target.value, fieldValue[fieldData.name] )"
>
@@ -294,7 +291,7 @@
-
+
@@ -305,7 +302,7 @@
-
+
@@ -321,7 +320,7 @@
-
+
@@ -340,7 +339,7 @@
-
+
@@ -354,7 +353,7 @@
-
+
@@ -382,7 +381,7 @@
-
+
@@ -413,7 +412,7 @@
-
+
@@ -441,7 +440,7 @@
-
+
@@ -510,8 +509,9 @@
import FieldHeading from './FieldHeading.vue';
import SecretInput from './SecretInput.vue';
import WithdrawCharges from './Fields/WithdrawCharges.vue'
+ import CombineInput from "admin/components/CombineInput.vue";
+ import CategoryBasedCommission from "admin/components/Commission/CategoryBasedCommission.vue";
import DokanRadioGroup from "admin/components/DokanRadioGroup.vue";
-
let Mapbox = dokan_get_lib('Mapbox');
let TextEditor = dokan_get_lib('TextEditor');
let GoogleMaps = dokan_get_lib('GoogleMaps');
@@ -521,7 +521,9 @@
name: 'Fields',
components: {
- DokanRadioGroup,
+ CategoryBasedCommission,
+ CombineInput,
+ DokanRadioGroup,
Mapbox,
Switches,
TextEditor,
@@ -547,6 +549,7 @@
singleColorPicker : { default: this.fieldData.default, label: '', show_pallete: false },
yourStringTimeValue : '',
customFieldComponents : dokan.hooks.applyFilters( 'getDokanCustomFieldComponents', [] ),
+ commissionFieldComponents : dokan.hooks.applyFilters( 'getDokanCommissionFieldComponents', [] ),
multiCheckValues : {},
}
},
@@ -567,14 +570,6 @@
});
},
- watch: {
- fieldValue: {
- handler() {
- },
- deep: true,
- }
- },
-
computed: {
shouldShow(e) {
let shouldShow = true;
@@ -689,6 +684,16 @@
return true;
},
+
+ watchCategoryCommission() {
+ let data = JSON.parse( JSON.stringify( this.fieldValue[this.fieldData.name] ) );
+
+ if ( window._.isEmpty( data ) ) {
+ return {};
+ }
+
+ return data;
+ },
},
beforeMount() {
@@ -702,6 +707,10 @@
},
methods: {
+ scrollIntoField( fieldId, sectionId ) {
+ this.scrollToSettingField( fieldId, sectionId );
+ },
+
formatDokanRadioData( options ) {
let data = [];
Object.keys( options ).map( item => {
@@ -723,6 +732,7 @@
fieldData.is_lite ?? false
);
},
+
inputValueHandler( name, newValue, oldValue ) {
this.fieldValue[ name ] = this.validateInputData( name, newValue, oldValue, this.fieldData );
},
@@ -814,7 +824,6 @@
return 'on';
},
-
thisSomeEvent(value) {
console.log('hello priting...', value);
},
@@ -846,11 +855,19 @@
return;
}
- let isChecked = this.validateInputData( this.fieldData.name, status ? 'on' : 'off', this.fieldValue[ this.fieldData.name ], this.fieldData );
+ let isChecked = this.validateInputData( this.fieldData.name, status ? 'on' : 'off', this.fieldValue[ this.fieldData.name ], this.fieldData );
this.checked = isChecked;
this.fieldValue[ this.fieldData.name ] = isChecked;
+ // Make field value editable from premium version. (on switcher udpate)
+ this.fieldValue[ this.fieldData.name ] = dokan.hooks.applyFilters(
+ 'dokanFieldComponentSwitcherValue',
+ isChecked,
+ this.fieldValue,
+ this.fieldData.name
+ );
+
this.$root.$emit( 'onFieldSwitched', this.fieldValue[ this.fieldData.name ], this.fieldData.name );
},
@@ -917,12 +934,31 @@
}
},
- setCustomColor( value, key ) {
+ setCustomColor( value, key, defaultValue ) {
if ( ! key ) {
return;
}
- this.fieldData[ key ] = value;
+ // Regular expression to validate hex color code
+ const hexPattern = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;
+
+ this.fieldData[ key ] = hexPattern.test( value ) ? value : defaultValue;
+ },
+
+ commissionUpdated( data ) {
+ if (isNaN( data.fixed )) {
+ data.fixed = this.fieldValue[this.fieldData.fields.fixed_fee.name] ?? '';
+ }
+ if (isNaN( data.percentage )) {
+ data.percentage = this.fieldValue[this.fieldData.fields.percent_fee.name] ?? '';
+ }
+
+ this.fieldValue[this.fieldData.fields.percent_fee.name] = data.percentage;
+ this.fieldValue[this.fieldData.fields.fixed_fee.name] = data.fixed;
+ },
+
+ onCategoryUpdate(data) {
+ this.fieldValue[this.fieldData.name] = data;
},
},
};
@@ -1225,6 +1261,21 @@
}
}
+ a.dokan-setting-warning-link {
+ display: block;
+ margin-top: 8px;
+ text-decoration: none;
+
+ &:hover, &:active, &:focus {
+ outline: none;
+ box-shadow: none;
+ }
+
+ i.dashicons {
+ font-size: 18px;
+ }
+ }
+
.dashicons {
margin: 0px;
padding: 0px;
diff --git a/src/admin/components/Fields/WithdrawCharges.vue b/src/admin/components/Fields/WithdrawCharges.vue
index 2b2793b524..d2cc051827 100644
--- a/src/admin/components/Fields/WithdrawCharges.vue
+++ b/src/admin/components/Fields/WithdrawCharges.vue
@@ -83,12 +83,20 @@ export default {
: '';
},
chargeChangeHandler( data, field ) {
- let positiveValue = this.unFormatValue(data);
- let formatedData = this.formatPositiveValue( positiveValue );
+ let fixedCommission = this.fieldValue[ this.fieldData.name ][ field ];
+ if (isNaN( data.fixed )) {
+ data.fixed = fixedCommission.fixed ?? '';
+ }
+ if (isNaN( data.percentage )) {
+ data.percentage = fixedCommission.percentage ?? '';
+ }
+
+ // let positiveValue = this.unFormatValue(data);
+ // let formatedData = this.formatPositiveValue( positiveValue );
this.fieldValue[ this.fieldData.name ][ field ] = dokan.hooks.applyFilters(
'dokanFieldComponentInputValue',
- formatedData,
+ this.unFormatValue(data),
this.fieldValue[ this.fieldData.name ][ field ],
this.fieldData.name,
this.fieldData.is_lite ?? false
diff --git a/src/admin/components/ModuleUpgradePopup.vue b/src/admin/components/ModuleUpgradePopup.vue
index add89e26f1..4e028fca04 100644
--- a/src/admin/components/ModuleUpgradePopup.vue
+++ b/src/admin/components/ModuleUpgradePopup.vue
@@ -128,7 +128,7 @@ export default {
diff --git a/src/admin/main.js b/src/admin/main.js
index bcbf783347..6e9eccf1c8 100644
--- a/src/admin/main.js
+++ b/src/admin/main.js
@@ -1,35 +1,29 @@
-import App from './App.vue'
-import router from './router'
-import menuFix from './utils/admin-menu-fix'
+import App from './App.vue';
+import router from './router';
+import menuFix from './utils/admin-menu-fix';
/* eslint-disable no-new */
-let Vue = dokan_get_lib('Vue');
+const Vue = dokan_get_lib( 'Vue' );
-new Vue({
+new Vue( {
el: '#dokan-vue-admin',
router,
- render: h => h(App),
-
- created() {
- this.setLocaleData( dokan.i18n['dokan-lite'] );
- if ( dokan.dokan_pro_i18n ) {
- this.setLocaleData( dokan.dokan_pro_i18n['dokan'] );
- }
- },
-
+ render: ( h ) => h( App ),
methods: {
listTableTexts() {
return {
loading: this.__( 'Loading', 'dokan-lite' ),
- select_bulk_action: this.__( 'Select bulk action', 'dokan-lite' ),
+ select_bulk_action: this.__(
+ 'Select bulk action',
+ 'dokan-lite'
+ ),
bulk_actions: this.__( 'Bulk Actions', 'dokan-lite' ),
items: this.__( 'items', 'dokan-lite' ),
apply: this.__( 'Apply', 'dokan-lite' ),
- }
- }
+ };
+ },
},
-});
-
+} );
// fix the admin menu for the slug "vue-app"
-menuFix('dokan');
+menuFix( 'dokan' );
diff --git a/src/admin/notice/App.vue b/src/admin/notice/App.vue
new file mode 100644
index 0000000000..f0c4882d33
--- /dev/null
+++ b/src/admin/notice/App.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
diff --git a/src/admin/notice/main.js b/src/admin/notice/main.js
new file mode 100644
index 0000000000..bdd5a2befa
--- /dev/null
+++ b/src/admin/notice/main.js
@@ -0,0 +1,14 @@
+import Vue from 'vue';
+import App from './App.vue';
+import Mixin from '../../utils/Mixin';
+
+const { jQuery: $ } = window;
+
+if ( $( '#dokan-admin-notices' ).length ) {
+ Vue.mixin( Mixin );
+
+ new Vue( {
+ el: '#dokan-admin-notices',
+ render: ( h ) => h( App ),
+ } );
+}
diff --git a/src/admin/pages/AddVendor.vue b/src/admin/pages/AddVendor.vue
index 398cac3a72..0941fbeec6 100644
--- a/src/admin/pages/AddVendor.vue
+++ b/src/admin/pages/AddVendor.vue
@@ -183,12 +183,7 @@ export default {
if ( result.value ) {
this.$root.$emit( 'addAnotherVendor' );
} else if ( result.dismiss === Swal.DismissReason.cancel ) {
-
- if ( this.hasPro ) {
- this.$router.push( { path: 'vendors/' + response.id, query:{ edit: 'true' } } );
- } else {
- window.location.replace( `${dokan.urls.adminRoot}user-edit.php?user_id=${response.id}` );
- }
+ this.$router.push( { path: 'vendors/' + response.id, query:{ edit: 'true' } } );
}
} );
} )
diff --git a/src/admin/pages/ChangeLog.vue b/src/admin/pages/ChangeLog.vue
index ae36365a21..12c9f316d9 100644
--- a/src/admin/pages/ChangeLog.vue
+++ b/src/admin/pages/ChangeLog.vue
@@ -285,6 +285,7 @@ export default {
diff --git a/src/admin/pages/Settings.vue b/src/admin/pages/Settings.vue
index 2e908d3e05..522f88d425 100644
--- a/src/admin/pages/Settings.vue
+++ b/src/admin/pages/Settings.vue
@@ -13,32 +13,38 @@
-
-
-
-
-
-
+
+
+
+
{{ __( 'Settings', 'dokan-lite' ) }}
+
+
showMenu = !showMenu' type='checkbox'>
+
+
+
+
+
+
-
-
-
-
-
{{ section.title }}
-
{{ section.description }}
+
+
+
+
+
{{ section.title }}
+
{{ section.description }}
+
-
-
+
+
-
diff --git a/templates/orders/sub-order-related-order-meta-box-html.php b/templates/orders/sub-order-related-order-meta-box-html.php
new file mode 100644
index 0000000000..9e43a85364
--- /dev/null
+++ b/templates/orders/sub-order-related-order-meta-box-html.php
@@ -0,0 +1,111 @@
+
+
+
+
diff --git a/templates/products/dokan-category-header-ui.php b/templates/products/dokan-category-header-ui.php
index dcfa481e05..4d053e81c0 100644
--- a/templates/products/dokan-category-header-ui.php
+++ b/templates/products/dokan-category-header-ui.php
@@ -13,21 +13,23 @@
// If no category is set then add a empty category box.
if ( count( $chosen_cat ) < 1 ) {
- array_push( $chosen_cat, $initial_category_for_modal );
+ $chosen_cat[] = $initial_category_for_modal;
}
?>