(bool) $is_gutenberg, 'elementor' => (bool) $is_elementor, 'divi' => (bool) $is_divi, ); } /** * Enqueue admin scripts & styles. */ public static function enqueue_admin_assets( $hook ) { if ( self::$page_hook && $hook !== self::$page_hook && false === strpos( $hook, 'translatesense' ) && false === strpos( $hook, 'mlang' ) ) { return; } // Asset file metadata handling with fallback $asset_file = TRANSLATESENSE_PLUGIN_DIR . 'assets/build/dashboard/index.asset.php'; $asset = file_exists( $asset_file ) ? require $asset_file : array( 'dependencies' => array( 'wp-element', 'wp-components', 'wp-api-fetch', 'wp-i18n' ), 'version' => TRANSLATESENSE_VERSION, ); // Enqueue CSS wp_enqueue_style( 'translatesense-admin-css', TRANSLATESENSE_PLUGIN_URL . 'assets/build/dashboard/index.css', array( 'wp-components' ), $asset['version'] ); // Enqueue WordPress Script Dependencies wp_enqueue_script( 'wp-element' ); wp_enqueue_script( 'wp-components' ); wp_enqueue_script( 'wp-api-fetch' ); wp_enqueue_script( 'wp-i18n' ); // Enqueue App Script (Production React Bundle) $script_url = TRANSLATESENSE_PLUGIN_URL . 'assets/build/dashboard/index.js'; wp_enqueue_script( 'translatesense-admin-js', $script_url, $asset['dependencies'], $asset['version'], true ); $admin_url = admin_url(); // Localize Script (Step 1.1) wp_localize_script( 'translatesense-admin-js', 'TranslateSenseData', array( 'restUrl' => esc_url_raw( rest_url( 'translatesense/v1/' ) ), 'nonce' => wp_create_nonce( 'wp_rest' ), 'polylangActive' => Polylang_Bridge::is_polylang_active(), 'connectorsUrl' => esc_url_raw( admin_url( 'options-connectors.php' ) ), 'pluginUrl' => TRANSLATESENSE_PLUGIN_URL, 'docsUrl' => defined( 'TRANSLATESENSE_DOCS_URL' ) ? TRANSLATESENSE_DOCS_URL : 'https://docs.dragwyb.com/', 'version' => TRANSLATESENSE_VERSION, 'adminUrl' => $admin_url, 'activeBuilders' => self::get_active_builders(), ) ); } /** * Get Dashboard Page URL with optional tab parameter. * * @param string $tab Optional tab name ('home', 'settings', 'gutenberg', 'elementor', 'cache') * @return string */ public static function get_dashboard_url( string $tab = '' ): string { $base_page = Polylang_Bridge::is_polylang_active() ? 'admin.php' : 'options-general.php'; $url = admin_url( $base_page . '?page=translatesense' ); if ( ! empty( $tab ) ) { $url = add_query_arg( 'tab', $tab, $url ); } return $url; } /** * Render React root container. */ public static function render_admin_root() { ?>