openscan-hardhat-links 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "use strict";(globalThis.webpackChunkopenscan=globalThis.webpackChunkopenscan||[]).push([[2149],{20684:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _services_MetadataService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../services/MetadataService */ 56577);\n\n\n\n/**\n * Displays a subscription tier badge (Backer, Partner, or Ally)\n * Only renders if the subscription is active\n */\nvar TierBadge = react__WEBPACK_IMPORTED_MODULE_1___default().memo(function (_a) {\n var subscription = _a.subscription, _b = _a.size, size = _b === void 0 ? "medium" : _b, _c = _a.showSuffix, showSuffix = _c === void 0 ? false : _c, _d = _a.className, className = _d === void 0 ? "" : _d;\n if (!subscription || !(0,_services_MetadataService__WEBPACK_IMPORTED_MODULE_2__.isSubscriptionActive)(subscription)) {\n return null;\n }\n var tierName = (0,_services_MetadataService__WEBPACK_IMPORTED_MODULE_2__.getSubscriptionTierName)(subscription.tier);\n var sizeClass = size === "small" ? "tier-badge-small" : "tier-badge-medium";\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "tier-badge tier-badge-".concat(subscription.tier, " ").concat(sizeClass, " ").concat(className).trim(), children: [tierName, showSuffix] }));\n});\nTierBadge.displayName = "TierBadge";\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TierBadge);\n\n\n//# sourceURL=webpack://openscan/./src/components/common/TierBadge.tsx?')},26637:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RPCIndicator: () => (/* binding */ RPCIndicator),\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n\n\n/**\n * Compact RPC indicator that shows parallel request statistics\n * Expands on click to show detailed provider information\n */\nfunction RPCIndicator(_a) {\n var metadata = _a.metadata, selectedProvider = _a.selectedProvider, onProviderSelect = _a.onProviderSelect, className = _a.className;\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false), isExpanded = _b[0], setIsExpanded = _b[1];\n var dropdownRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n var successCount = metadata.responses.filter(function (r) { return r.status === "success"; }).length;\n var totalCount = metadata.responses.length;\n // Close dropdown when clicking outside\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {\n var handleClickOutside = function (event) {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\n setIsExpanded(false);\n }\n };\n document.addEventListener("mousedown", handleClickOutside);\n return function () { return document.removeEventListener("mousedown", handleClickOutside); };\n }, []);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rpc-indicator ".concat(className || ""), ref: dropdownRef, children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rpc-indicator-badge", onClick: function () { return setIsExpanded(!isExpanded); }, title: "Click to see RPC provider details", children: [metadata.hasInconsistencies && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "rpc-indicator-warning", title: "Inconsistent responses", children: "\\u26A0\\uFE0F" })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "rpc-indicator-status", children: ["\\u2713 ", successCount, "/", totalCount] })] }), isExpanded && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rpc-indicator-dropdown", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rpc-indicator-header", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("strong", { children: "RPC Providers" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "rpc-indicator-strategy", children: ["Strategy: ", metadata.strategy] })] }), metadata.hasInconsistencies && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "rpc-indicator-warning-banner", children: "\\u26A0\\uFE0F Responses differ between providers" })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "rpc-indicator-list", children: metadata.responses.map(function (response, idx) {\n var isSelected = selectedProvider === response.url;\n var urlDisplay = truncateUrl(response.url);\n return (\n // biome-ignore lint/a11y/noStaticElementInteractions: <TODO>\n // biome-ignore lint/a11y/useKeyWithClickEvents: <TODO>\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rpc-indicator-item ".concat(isSelected ? "selected" : "", " ").concat(response.status), onClick: function () {\n if (response.status === "success") {\n onProviderSelect(response.url);\n setIsExpanded(false);\n }\n }, children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rpc-indicator-item-header", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "rpc-indicator-item-index", children: ["#", idx + 1] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "rpc-indicator-item-url", title: response.url, children: urlDisplay }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "rpc-indicator-item-status ".concat(response.status), children: response.status === "success" ? "✓" : "✗" })] }), response.status === "error" && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "rpc-indicator-item-error", children: response.error })), isSelected && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "rpc-indicator-item-badge", children: "Selected" })] }, response.url));\n }) })] }))] }));\n}\n/**\n * Truncate URL to show hostname only\n */\nfunction truncateUrl(url) {\n try {\n var urlObj = new URL(url);\n var hostname = urlObj.hostname;\n if (hostname.length > 30) {\n return "".concat(hostname.slice(0, 15), "...").concat(hostname.slice(-12));\n }\n return hostname;\n }\n catch (_a) {\n return url.length > 30 ? "".concat(url.slice(0, 15), "...").concat(url.slice(-12)) : url;\n }\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RPCIndicator);\n\n\n//# sourceURL=webpack://openscan/./src/components/common/RPCIndicator.tsx?')},42149:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ Network)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-router-dom */ 34794);\n/* harmony import */ var _context_AppContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../context/AppContext */ 92936);\n/* harmony import */ var _hooks_useDataService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../hooks/useDataService */ 71613);\n/* harmony import */ var _hooks_useProviderSelection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../hooks/useProviderSelection */ 54467);\n/* harmony import */ var _hooks_useSelectedData__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../hooks/useSelectedData */ 70645);\n/* harmony import */ var _common_Loader__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../common/Loader */ 3440);\n/* harmony import */ var _common_SearchBox__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../common/SearchBox */ 96009);\n/* harmony import */ var _NetworkProfileDisplay__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./NetworkProfileDisplay */ 53004);\n/* harmony import */ var _NetworkStatsDisplay__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./NetworkStatsDisplay */ 55286);\n\n\n\n\n\n\n\n\n\n\n\nfunction Network() {\n var _a;\n var networkId = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_10__.useParams)().networkId;\n var numericNetworkId = Number(networkId) || 1;\n var networkConfig = (0,_context_AppContext__WEBPACK_IMPORTED_MODULE_2__.useNetwork)(numericNetworkId);\n var dataService = (0,_hooks_useDataService__WEBPACK_IMPORTED_MODULE_3__.useDataService)(numericNetworkId);\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null), networkStatsResult = _b[0], setNetworkStatsResult = _b[1];\n var _c = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true), loading = _c[0], setLoading = _c[1];\n var _d = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null), error = _d[0], setError = _d[1];\n // Provider selection state\n var _e = (0,_hooks_useProviderSelection__WEBPACK_IMPORTED_MODULE_4__.useProviderSelection)("networkStats_".concat(numericNetworkId)), selectedProvider = _e[0], setSelectedProvider = _e[1];\n // Extract actual network stats based on selected provider\n var networkStats = (0,_hooks_useSelectedData__WEBPACK_IMPORTED_MODULE_5__.useSelectedData)(networkStatsResult, selectedProvider);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {\n if (!dataService) {\n setLoading(false);\n return;\n }\n setLoading(true);\n setError(null);\n dataService.networkAdapter\n .getNetworkStats()\n .then(function (result) {\n setNetworkStatsResult(result);\n })\n .catch(function (err) {\n setError(err.message || "Failed to fetch network stats");\n })\n .finally(function () { return setLoading(false); });\n }, [dataService]);\n // Generate title based on network\n // Strip "Ethereum" from network names (e.g., "Ethereum Mainnet" -> "MAINNET")\n var rawName = ((_a = networkConfig === null || networkConfig === void 0 ? void 0 : networkConfig.name) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || "OPENSCAN";\n var networkName = rawName.replace(/^ETHEREUM\\s*/i, "").trim();\n var networkColor = (networkConfig === null || networkConfig === void 0 ? void 0 : networkConfig.color) || "#627eea";\n var hasNetworkName = networkName.length > 0;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "home-container", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "home-content page-card", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { className: "home-title network-title", children: hasNetworkName && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "network-title-name", style: { "--network-color": networkColor }, children: networkName }), " "] })) }), (networkConfig === null || networkConfig === void 0 ? void 0 : networkConfig.description) && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "network-description", children: networkConfig.description })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_SearchBox__WEBPACK_IMPORTED_MODULE_7__["default"], {}), loading && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_Loader__WEBPACK_IMPORTED_MODULE_6__["default"], { text: "Loading network stats..." }), error && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("p", { className: "error-text-center", children: ["Error: ", error] }), networkStats && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_NetworkStatsDisplay__WEBPACK_IMPORTED_MODULE_9__["default"], { networkStats: networkStats, networkId: numericNetworkId, metadata: networkStatsResult === null || networkStatsResult === void 0 ? void 0 : networkStatsResult.metadata, selectedProvider: selectedProvider, onProviderSelect: setSelectedProvider })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_NetworkProfileDisplay__WEBPACK_IMPORTED_MODULE_8__["default"], { network: networkConfig })] }) }));\n}\n\n\n//# sourceURL=webpack://openscan/./src/components/pages/network/index.tsx?')},53004:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-markdown */ 41319);\n/* harmony import */ var _services_MetadataService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../services/MetadataService */ 56577);\n/* harmony import */ var _common_TierBadge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../common/TierBadge */ 20684);\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);\n return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError("Generator is already executing.");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n\n\n\n\n\nvar ProfileDisplay = react__WEBPACK_IMPORTED_MODULE_1___default().memo(function (_a) {\n var network = _a.network;\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)("collapsed"), profileState = _b[0], setProfileState = _b[1];\n var _c = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null), profileContent = _c[0], setProfileContent = _c[1];\n var _d = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null), error = _d[0], setError = _d[1];\n var hasActiveSubscription = (network === null || network === void 0 ? void 0 : network.subscription) && (0,_services_MetadataService__WEBPACK_IMPORTED_MODULE_2__.isSubscriptionActive)(network.subscription);\n var hasProfile = !!(network === null || network === void 0 ? void 0 : network.profile);\n // Reset state when network changes\n var networkId = network === null || network === void 0 ? void 0 : network.networkId;\n // biome-ignore lint/correctness/useExhaustiveDependencies: intentionally reset state when networkId changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {\n setProfileState("collapsed");\n setProfileContent(null);\n setError(null);\n }, [networkId]);\n var handleExpandClick = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function () { return __awaiter(void 0, void 0, void 0, function () {\n var content, err_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(network === null || network === void 0 ? void 0 : network.profile) || !hasActiveSubscription) {\n return [2 /*return*/];\n }\n // If already expanded, collapse\n if (profileState === "expanded") {\n setProfileState("collapsed");\n return [2 /*return*/];\n }\n // If content already loaded, just expand\n if (profileContent) {\n setProfileState("expanded");\n return [2 /*return*/];\n }\n // Load the profile content\n setProfileState("loading");\n setError(null);\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, (0,_services_MetadataService__WEBPACK_IMPORTED_MODULE_2__.fetchNetworkProfile)(network.profile)];\n case 2:\n content = _a.sent();\n setProfileContent(content);\n setProfileState("expanded");\n return [3 /*break*/, 4];\n case 3:\n err_1 = _a.sent();\n setError(err_1 instanceof Error ? err_1.message : "Failed to load profile");\n setProfileState("error");\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n }); }, [network === null || network === void 0 ? void 0 : network.profile, hasActiveSubscription, profileState, profileContent]);\n // Don\'t render anything if no subscription or no profile\n if (!hasActiveSubscription || !hasProfile) {\n return null;\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "container-wide profile-container", children: [profileState === "collapsed" && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { type: "button", className: "profile-expand-button", onClick: handleExpandClick, children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "profile-expand-text", children: ["More about ", network === null || network === void 0 ? void 0 : network.name] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_TierBadge__WEBPACK_IMPORTED_MODULE_3__["default"], { subscription: network === null || network === void 0 ? void 0 : network.subscription, size: "small" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "profile-expand-icon", children: "\\u25BC" })] })), profileState === "loading" && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "block-display-card", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-center profile-loading", children: "Loading network profile..." }) })), profileState === "error" && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "block-display-card", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "text-center profile-error", children: ["Failed to load profile: ", error, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", className: "profile-retry-button", onClick: handleExpandClick, children: "Retry" })] }) })), profileState === "expanded" && profileContent && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-display-card", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "profile-header", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("h2", { className: "profile-title", children: ["About ", network === null || network === void 0 ? void 0 : network.name] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "profile-header-actions", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_TierBadge__WEBPACK_IMPORTED_MODULE_3__["default"], { subscription: network === null || network === void 0 ? void 0 : network.subscription, size: "medium", showSuffix: true }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", className: "profile-collapse-button", onClick: handleExpandClick, "aria-label": "Collapse profile", children: "\\u25B2" })] })] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "profile-content", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react_markdown__WEBPACK_IMPORTED_MODULE_4__.Markdown, { components: {\n // Custom renderers for styling\n h1: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { className: "profile-h1", children: children });\n },\n h2: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { className: "profile-h2", children: children });\n },\n h3: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", { className: "profile-h3", children: children });\n },\n h4: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h4", { className: "profile-h4", children: children });\n },\n h5: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h5", { className: "profile-h5", children: children });\n },\n h6: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h6", { className: "profile-h6", children: children });\n },\n p: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "profile-p", children: children });\n },\n a: function (_a) {\n var href = _a.href, children = _a.children;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("a", { href: href, target: "_blank", rel: "noopener noreferrer", className: "profile-link", children: children }));\n },\n ul: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("ul", { className: "profile-ul", children: children });\n },\n ol: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("ol", { className: "profile-ol", children: children });\n },\n li: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("li", { className: "profile-li", children: children });\n },\n blockquote: function (_a) {\n var children = _a.children;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("blockquote", { className: "profile-blockquote", children: children }));\n },\n code: function (_a) {\n var className = _a.className, children = _a.children;\n // Check if it\'s a code block (has language class) or inline code\n var isCodeBlock = className === null || className === void 0 ? void 0 : className.startsWith("language-");\n if (isCodeBlock) {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("pre", { className: "profile-code-block", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("code", { children: children }) }));\n }\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("code", { className: "profile-inline-code", children: children });\n },\n pre: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: children });\n },\n hr: function () { return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("hr", { className: "profile-hr" }); },\n img: function (_a) {\n var src = _a.src, alt = _a.alt;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("img", { src: src, alt: alt, className: "profile-image" });\n },\n }, children: profileContent }) }), (network === null || network === void 0 ? void 0 : network.links) && network.links.length > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "profile-links", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", { className: "profile-links-title", children: "Official Links" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "profile-links-list", children: network.links.map(function (link, index) { return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("a", { href: link.url, target: "_blank", rel: "noopener noreferrer", className: "profile-link-item", children: link.name }, "".concat(link.name, "-").concat(index))); }) })] }))] }))] }));\n});\nProfileDisplay.displayName = "ProfileDisplay";\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProfileDisplay);\n\n\n//# sourceURL=webpack://openscan/./src/components/pages/network/NetworkProfileDisplay.tsx?')},54467:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useProviderSelection: () => (/* binding */ useProviderSelection)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nvar STORAGE_KEY_PREFIX = "rpc_selected_provider_";\n/**\n * Hook to manage selected RPC provider per page\n * Persists selection in sessionStorage\n *\n * @param pageKey - Unique key for the page (e.g., "block_1_12345")\n * @returns [selectedProvider, setSelectedProvider] tuple\n */\nfunction useProviderSelection(pageKey) {\n var storageKey = "".concat(STORAGE_KEY_PREFIX).concat(pageKey);\n var _a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(function () {\n try {\n return sessionStorage.getItem(storageKey);\n }\n catch (_a) {\n return null;\n }\n }), selectedProvider = _a[0], setSelectedProvider = _a[1];\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (selectedProvider) {\n try {\n sessionStorage.setItem(storageKey, selectedProvider);\n }\n catch (error) {\n console.warn("Failed to save provider selection:", error);\n }\n }\n else {\n try {\n sessionStorage.removeItem(storageKey);\n }\n catch (error) {\n console.warn("Failed to remove provider selection:", error);\n }\n }\n }, [selectedProvider, storageKey]);\n return [selectedProvider, setSelectedProvider];\n}\n\n\n//# sourceURL=webpack://openscan/./src/hooks/useProviderSelection.ts?')},55286:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _common_RPCIndicator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../common/RPCIndicator */ 26637);\n\n\n\nvar NetworkStatsDisplay = react__WEBPACK_IMPORTED_MODULE_1___default().memo(function (_a) {\n var networkStats = _a.networkStats, _b = _a.loading, loading = _b === void 0 ? false : _b, _c = _a.error, error = _c === void 0 ? null : _c, networkId = _a.networkId, metadata = _a.metadata, selectedProvider = _a.selectedProvider, onProviderSelect = _a.onProviderSelect;\n if (loading) {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "container-wide network-stats-container", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "block-display-card", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-center network-stats-loading", children: "Loading network statistics..." }) }) }));\n }\n if (error) {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "container-wide network-stats-container", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "block-display-card", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "text-center network-stats-error", children: ["Error loading network stats: ", error] }) }) }));\n }\n if (!networkStats) {\n return null;\n }\n // Format gas price from Wei to Gwei\n var formatGasPrice = function (weiPrice) {\n try {\n var gwei = Number(weiPrice) / 1e9;\n return "".concat(gwei.toFixed(2), " Gwei");\n }\n catch (_a) {\n return weiPrice;\n }\n };\n // Format block number with commas\n var formatBlockNumber = function (blockNumber) {\n try {\n return Number(blockNumber).toLocaleString();\n }\n catch (_a) {\n return blockNumber;\n }\n };\n // Parse protocol version from metadata (localhost/Hardhat only)\n var getProtocolVersion = function () {\n if (networkId !== 31337 || !networkStats.metadata) {\n return null;\n }\n try {\n return networkStats.metadata.clientVersion || null;\n }\n catch (err) {\n console.error("Failed to parse metadata:", err);\n return null;\n }\n };\n // Get forked network info (localhost/Hardhat only)\n var getForkedNetworkInfo = function () {\n if (networkId !== 31337 || !networkStats.metadata || !networkStats.metadata.forkedNetwork) {\n return null;\n }\n try {\n var forked = networkStats.metadata.forkedNetwork;\n return {\n networkId: forked.chainId,\n blockNumber: forked.forkBlockNumber,\n blockHash: forked.forkBlockHash,\n };\n }\n catch (err) {\n console.error("Failed to parse forked network info:", err);\n return null;\n }\n };\n var protocolVersion = getProtocolVersion();\n var forkedNetwork = getForkedNetworkInfo();\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "container-wide network-stats-container", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-display-card", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between items-center mb-medium", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { className: "network-stats-title margin-0", children: "Network Statistics" }), metadata && selectedProvider !== undefined && onProviderSelect && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_RPCIndicator__WEBPACK_IMPORTED_MODULE_2__.RPCIndicator, { metadata: metadata, selectedProvider: selectedProvider, onProviderSelect: onProviderSelect }))] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "data-grid-3", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Current Gas Price" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-value", children: formatGasPrice(networkStats.currentGasPrice) })] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Current Block Number" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-value", children: formatBlockNumber(networkStats.currentBlockNumber) })] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Sync Status" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-value", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "sync-status-indicator", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "sync-dot ".concat(networkStats.isSyncing ? "sync-dot-warning" : "sync-dot-success") }), networkStats.isSyncing ? "Syncing" : "Synced"] }) })] }), networkStats.clientVersion && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Client Version" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-value tx-mono", children: networkStats.clientVersion })] })), protocolVersion && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Protocol Version" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-value", children: protocolVersion })] })), forkedNetwork && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Forked Network" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "detail-value", children: ["Chain ID: ", forkedNetwork.networkId] })] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Fork Block Number" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-value", children: formatBlockNumber(forkedNetwork.blockNumber.toString()) })] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item network-stat-full-width", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Fork Block Hash" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-value tx-mono fork-hash-value", children: forkedNetwork.blockHash })] })] }))] })] }) }));\n});\nNetworkStatsDisplay.displayName = "NetworkStatsDisplay";\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NetworkStatsDisplay);\n\n\n//# sourceURL=webpack://openscan/./src/components/pages/network/NetworkStatsDisplay.tsx?')},70645:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useSelectedData: () => (/* binding */ useSelectedData)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n/**\n * Hook to extract the correct data based on selected provider\n * Handles fallback mode, default selection, and explicit provider selection\n *\n * @param result - The data with metadata from DataService\n * @param selectedProvider - The URL of the selected provider (or null for default)\n * @returns The actual data to display\n */\nfunction useSelectedData(result, selectedProvider) {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function () {\n if (!result) {\n return null;\n }\n // No metadata = fallback mode, return data as-is\n if (!result.metadata) {\n return result.data;\n }\n // No provider selected = use default (first successful)\n if (!selectedProvider) {\n return result.data;\n }\n // Find selected provider\'s response\n var providerResponse = result.metadata.responses.find(function (r) { return r.url === selectedProvider && r.status === "success"; });\n if (!providerResponse || !providerResponse.data) {\n // Fallback to default if selected provider not found\n console.warn("Selected provider ".concat(selectedProvider, " not found or failed, using default"));\n return result.data;\n }\n // Return the selected provider\'s data\n return providerResponse.data;\n }, [result, selectedProvider]);\n}\n\n\n//# sourceURL=webpack://openscan/./src/hooks/useSelectedData.ts?')},96009:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var _hooks_useSearch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../hooks/useSearch */ 65288);\n\n\nvar SearchBox = function () {\n var _a = (0,_hooks_useSearch__WEBPACK_IMPORTED_MODULE_1__.useSearch)(), searchTerm = _a.searchTerm, setSearchTerm = _a.setSearchTerm, isResolving = _a.isResolving, error = _a.error, clearError = _a.clearError, handleSearch = _a.handleSearch;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "search-box-container", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("form", { onSubmit: handleSearch, className: "search-form", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("input", { type: "text", className: "search-input", placeholder: "Search by Address / Txn Hash / Block / ENS Name", value: searchTerm, onChange: function (e) {\n setSearchTerm(e.target.value);\n clearError();\n }, disabled: isResolving }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "submit", className: "search-button", disabled: isResolving, children: isResolving ? "..." : "Scan" })] }), error && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "search-error", children: error })] }));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SearchBox);\n\n\n//# sourceURL=webpack://openscan/./src/components/common/SearchBox.tsx?')}}]);
1
+ "use strict";(globalThis.webpackChunkopenscan=globalThis.webpackChunkopenscan||[]).push([[2149],{20684:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _services_MetadataService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../services/MetadataService */ 56577);\n\n\n\n/**\n * Displays a subscription tier badge (Backer, Partner, or Ally)\n * Only renders if the subscription is active\n */\nvar TierBadge = react__WEBPACK_IMPORTED_MODULE_1___default().memo(function (_a) {\n var subscription = _a.subscription, _b = _a.size, size = _b === void 0 ? "medium" : _b, _c = _a.showSuffix, showSuffix = _c === void 0 ? false : _c, _d = _a.className, className = _d === void 0 ? "" : _d;\n if (!subscription || !(0,_services_MetadataService__WEBPACK_IMPORTED_MODULE_2__.isSubscriptionActive)(subscription)) {\n return null;\n }\n var tierName = (0,_services_MetadataService__WEBPACK_IMPORTED_MODULE_2__.getSubscriptionTierName)(subscription.tier);\n var sizeClass = size === "small" ? "tier-badge-small" : "tier-badge-medium";\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "tier-badge tier-badge-".concat(subscription.tier, " ").concat(sizeClass, " ").concat(className).trim(), children: [tierName, showSuffix] }));\n});\nTierBadge.displayName = "TierBadge";\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TierBadge);\n\n\n//# sourceURL=webpack://openscan/./src/components/common/TierBadge.tsx?')},26637:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RPCIndicator: () => (/* binding */ RPCIndicator),\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n\n\n/**\n * Compact RPC indicator that shows parallel request statistics\n * Expands on click to show detailed provider information\n */\nfunction RPCIndicator(_a) {\n var metadata = _a.metadata, selectedProvider = _a.selectedProvider, onProviderSelect = _a.onProviderSelect, className = _a.className;\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false), isExpanded = _b[0], setIsExpanded = _b[1];\n var dropdownRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n var successCount = metadata.responses.filter(function (r) { return r.status === "success"; }).length;\n var totalCount = metadata.responses.length;\n // Close dropdown when clicking outside\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {\n var handleClickOutside = function (event) {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\n setIsExpanded(false);\n }\n };\n document.addEventListener("mousedown", handleClickOutside);\n return function () { return document.removeEventListener("mousedown", handleClickOutside); };\n }, []);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rpc-indicator ".concat(className || ""), ref: dropdownRef, children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rpc-indicator-badge", onClick: function () { return setIsExpanded(!isExpanded); }, title: "Click to see RPC provider details", children: [metadata.hasInconsistencies && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "rpc-indicator-warning", title: "Inconsistent responses", children: "\\u26A0\\uFE0F" })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "rpc-indicator-status", children: ["\\u2713 ", successCount, "/", totalCount] })] }), isExpanded && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rpc-indicator-dropdown", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rpc-indicator-header", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("strong", { children: "RPC Providers" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "rpc-indicator-strategy", children: ["Strategy: ", metadata.strategy] })] }), metadata.hasInconsistencies && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "rpc-indicator-warning-banner", children: "\\u26A0\\uFE0F Responses differ between providers" })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "rpc-indicator-list", children: metadata.responses.map(function (response, idx) {\n var isSelected = selectedProvider === response.url;\n var urlDisplay = truncateUrl(response.url);\n return (\n // biome-ignore lint/a11y/noStaticElementInteractions: <TODO>\n // biome-ignore lint/a11y/useKeyWithClickEvents: <TODO>\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rpc-indicator-item ".concat(isSelected ? "selected" : "", " ").concat(response.status), onClick: function () {\n if (response.status === "success") {\n onProviderSelect(response.url);\n setIsExpanded(false);\n }\n }, children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rpc-indicator-item-header", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "rpc-indicator-item-index", children: ["#", idx + 1] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "rpc-indicator-item-url", title: response.url, children: urlDisplay }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "rpc-indicator-item-status ".concat(response.status), children: response.status === "success" ? "✓" : "✗" })] }), response.status === "error" && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "rpc-indicator-item-error", children: response.error })), isSelected && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "rpc-indicator-item-badge", children: "Selected" })] }, response.url));\n }) })] }))] }));\n}\n/**\n * Truncate URL to show hostname only\n */\nfunction truncateUrl(url) {\n try {\n var urlObj = new URL(url);\n var hostname = urlObj.hostname;\n if (hostname.length > 30) {\n return "".concat(hostname.slice(0, 15), "...").concat(hostname.slice(-12));\n }\n return hostname;\n }\n catch (_a) {\n return url.length > 30 ? "".concat(url.slice(0, 15), "...").concat(url.slice(-12)) : url;\n }\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RPCIndicator);\n\n\n//# sourceURL=webpack://openscan/./src/components/common/RPCIndicator.tsx?')},42149:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ Network)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-router-dom */ 34794);\n/* harmony import */ var _context_AppContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../context/AppContext */ 92936);\n/* harmony import */ var _hooks_useDataService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../hooks/useDataService */ 71613);\n/* harmony import */ var _hooks_useProviderSelection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../hooks/useProviderSelection */ 54467);\n/* harmony import */ var _hooks_useSelectedData__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../hooks/useSelectedData */ 70645);\n/* harmony import */ var _common_Loader__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../common/Loader */ 3440);\n/* harmony import */ var _common_SearchBox__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../common/SearchBox */ 96009);\n/* harmony import */ var _NetworkProfileDisplay__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./NetworkProfileDisplay */ 53004);\n/* harmony import */ var _NetworkStatsDisplay__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./NetworkStatsDisplay */ 55286);\n\n\n\n\n\n\n\n\n\n\n\nfunction Network() {\n var _a;\n var networkId = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_10__.useParams)().networkId;\n var numericNetworkId = Number(networkId) || 1;\n var networkConfig = (0,_context_AppContext__WEBPACK_IMPORTED_MODULE_2__.useNetwork)(numericNetworkId);\n var dataService = (0,_hooks_useDataService__WEBPACK_IMPORTED_MODULE_3__.useDataService)(numericNetworkId);\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null), networkStatsResult = _b[0], setNetworkStatsResult = _b[1];\n var _c = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true), loading = _c[0], setLoading = _c[1];\n var _d = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null), error = _d[0], setError = _d[1];\n // Provider selection state\n var _e = (0,_hooks_useProviderSelection__WEBPACK_IMPORTED_MODULE_4__.useProviderSelection)("networkStats_".concat(numericNetworkId)), selectedProvider = _e[0], setSelectedProvider = _e[1];\n // Extract actual network stats based on selected provider\n var networkStats = (0,_hooks_useSelectedData__WEBPACK_IMPORTED_MODULE_5__.useSelectedData)(networkStatsResult, selectedProvider);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {\n if (!dataService) {\n setLoading(false);\n return;\n }\n setLoading(true);\n setError(null);\n dataService.networkAdapter\n .getNetworkStats()\n .then(function (result) {\n setNetworkStatsResult(result);\n })\n .catch(function (err) {\n setError(err.message || "Failed to fetch network stats");\n })\n .finally(function () { return setLoading(false); });\n }, [dataService]);\n // Generate title based on network\n // Strip "Ethereum" from network names (e.g., "Ethereum Mainnet" -> "MAINNET")\n var rawName = ((_a = networkConfig === null || networkConfig === void 0 ? void 0 : networkConfig.name) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || "OPENSCAN";\n var networkName = rawName.replace(/^ETHEREUM\\s*/i, "").trim();\n var networkColor = (networkConfig === null || networkConfig === void 0 ? void 0 : networkConfig.color) || "#627eea";\n var hasNetworkName = networkName.length > 0;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "home-container", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "home-content page-card", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { className: "home-title network-title", children: hasNetworkName && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "network-title-name", style: { "--network-color": networkColor }, children: networkName }), " "] })) }), (networkConfig === null || networkConfig === void 0 ? void 0 : networkConfig.description) && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "network-description", children: networkConfig.description })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_SearchBox__WEBPACK_IMPORTED_MODULE_7__["default"], {}), loading && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_Loader__WEBPACK_IMPORTED_MODULE_6__["default"], { text: "Loading network stats..." }), error && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("p", { className: "error-text-center", children: ["Error: ", error] }), networkStats && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_NetworkStatsDisplay__WEBPACK_IMPORTED_MODULE_9__["default"], { networkStats: networkStats, networkId: numericNetworkId, metadata: networkStatsResult === null || networkStatsResult === void 0 ? void 0 : networkStatsResult.metadata, selectedProvider: selectedProvider, onProviderSelect: setSelectedProvider })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_NetworkProfileDisplay__WEBPACK_IMPORTED_MODULE_8__["default"], { network: networkConfig })] }) }));\n}\n\n\n//# sourceURL=webpack://openscan/./src/components/pages/network/index.tsx?')},53004:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_markdown__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-markdown */ 41319);\n/* harmony import */ var _services_MetadataService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../services/MetadataService */ 56577);\n/* harmony import */ var _common_TierBadge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../common/TierBadge */ 20684);\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);\n return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError("Generator is already executing.");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n\n\n\n\n\nvar ProfileDisplay = react__WEBPACK_IMPORTED_MODULE_1___default().memo(function (_a) {\n var network = _a.network;\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)("collapsed"), profileState = _b[0], setProfileState = _b[1];\n var _c = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null), profileContent = _c[0], setProfileContent = _c[1];\n var _d = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null), error = _d[0], setError = _d[1];\n var hasActiveSubscription = (network === null || network === void 0 ? void 0 : network.subscription) && (0,_services_MetadataService__WEBPACK_IMPORTED_MODULE_2__.isSubscriptionActive)(network.subscription);\n var hasProfile = !!(network === null || network === void 0 ? void 0 : network.profile);\n // Reset state when network changes\n var networkId = network === null || network === void 0 ? void 0 : network.networkId;\n // biome-ignore lint/correctness/useExhaustiveDependencies: intentionally reset state when networkId changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {\n setProfileState("collapsed");\n setProfileContent(null);\n setError(null);\n }, [networkId]);\n var handleExpandClick = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function () { return __awaiter(void 0, void 0, void 0, function () {\n var content, err_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(network === null || network === void 0 ? void 0 : network.profile) || !hasActiveSubscription) {\n return [2 /*return*/];\n }\n // If already expanded, collapse\n if (profileState === "expanded") {\n setProfileState("collapsed");\n return [2 /*return*/];\n }\n // If content already loaded, just expand\n if (profileContent) {\n setProfileState("expanded");\n return [2 /*return*/];\n }\n // Load the profile content\n setProfileState("loading");\n setError(null);\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, (0,_services_MetadataService__WEBPACK_IMPORTED_MODULE_2__.fetchNetworkProfile)(network.profile)];\n case 2:\n content = _a.sent();\n setProfileContent(content);\n setProfileState("expanded");\n return [3 /*break*/, 4];\n case 3:\n err_1 = _a.sent();\n setError(err_1 instanceof Error ? err_1.message : "Failed to load profile");\n setProfileState("error");\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n }); }, [network === null || network === void 0 ? void 0 : network.profile, hasActiveSubscription, profileState, profileContent]);\n // Don\'t render anything if no subscription or no profile\n if (!hasActiveSubscription || !hasProfile) {\n return null;\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "container-wide profile-container", children: [profileState === "collapsed" && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { type: "button", className: "profile-expand-button", onClick: handleExpandClick, children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "profile-expand-text", children: ["More about ", network === null || network === void 0 ? void 0 : network.name] }), (network === null || network === void 0 ? void 0 : network.networkId) !== 1 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_TierBadge__WEBPACK_IMPORTED_MODULE_3__["default"], { subscription: network === null || network === void 0 ? void 0 : network.subscription, size: "small" })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "profile-expand-icon", children: "\\u25BC" })] })), profileState === "loading" && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "block-display-card", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-center profile-loading", children: "Loading network profile..." }) })), profileState === "error" && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "block-display-card", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "text-center profile-error", children: ["Failed to load profile: ", error, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", className: "profile-retry-button", onClick: handleExpandClick, children: "Retry" })] }) })), profileState === "expanded" && profileContent && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-display-card", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "profile-header", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("h2", { className: "profile-title", children: ["About ", network === null || network === void 0 ? void 0 : network.name] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "profile-header-actions", children: [(network === null || network === void 0 ? void 0 : network.networkId) !== 1 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_TierBadge__WEBPACK_IMPORTED_MODULE_3__["default"], { subscription: network === null || network === void 0 ? void 0 : network.subscription, size: "medium", showSuffix: true })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", className: "profile-collapse-button", onClick: handleExpandClick, "aria-label": "Collapse profile", children: "\\u25B2" })] })] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "profile-content", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react_markdown__WEBPACK_IMPORTED_MODULE_4__.Markdown, { components: {\n // Custom renderers for styling\n h1: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { className: "profile-h1", children: children });\n },\n h2: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { className: "profile-h2", children: children });\n },\n h3: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", { className: "profile-h3", children: children });\n },\n h4: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h4", { className: "profile-h4", children: children });\n },\n h5: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h5", { className: "profile-h5", children: children });\n },\n h6: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h6", { className: "profile-h6", children: children });\n },\n p: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "profile-p", children: children });\n },\n a: function (_a) {\n var href = _a.href, children = _a.children;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("a", { href: href, target: "_blank", rel: "noopener noreferrer", className: "profile-link", children: children }));\n },\n ul: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("ul", { className: "profile-ul", children: children });\n },\n ol: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("ol", { className: "profile-ol", children: children });\n },\n li: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("li", { className: "profile-li", children: children });\n },\n blockquote: function (_a) {\n var children = _a.children;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("blockquote", { className: "profile-blockquote", children: children }));\n },\n code: function (_a) {\n var className = _a.className, children = _a.children;\n // Check if it\'s a code block (has language class) or inline code\n var isCodeBlock = className === null || className === void 0 ? void 0 : className.startsWith("language-");\n if (isCodeBlock) {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("pre", { className: "profile-code-block", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("code", { children: children }) }));\n }\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("code", { className: "profile-inline-code", children: children });\n },\n pre: function (_a) {\n var children = _a.children;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: children });\n },\n hr: function () { return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("hr", { className: "profile-hr" }); },\n img: function (_a) {\n var src = _a.src, alt = _a.alt;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("img", { src: src, alt: alt, className: "profile-image" });\n },\n }, children: profileContent }) }), (network === null || network === void 0 ? void 0 : network.links) && network.links.length > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "profile-links", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", { className: "profile-links-title", children: "Official Links" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "profile-links-list", children: network.links.map(function (link, index) { return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("a", { href: link.url, target: "_blank", rel: "noopener noreferrer", className: "profile-link-item", children: link.name }, "".concat(link.name, "-").concat(index))); }) })] }))] }))] }));\n});\nProfileDisplay.displayName = "ProfileDisplay";\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProfileDisplay);\n\n\n//# sourceURL=webpack://openscan/./src/components/pages/network/NetworkProfileDisplay.tsx?')},54467:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useProviderSelection: () => (/* binding */ useProviderSelection)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nvar STORAGE_KEY_PREFIX = "rpc_selected_provider_";\n/**\n * Hook to manage selected RPC provider per page\n * Persists selection in sessionStorage\n *\n * @param pageKey - Unique key for the page (e.g., "block_1_12345")\n * @returns [selectedProvider, setSelectedProvider] tuple\n */\nfunction useProviderSelection(pageKey) {\n var storageKey = "".concat(STORAGE_KEY_PREFIX).concat(pageKey);\n var _a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(function () {\n try {\n return sessionStorage.getItem(storageKey);\n }\n catch (_a) {\n return null;\n }\n }), selectedProvider = _a[0], setSelectedProvider = _a[1];\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (selectedProvider) {\n try {\n sessionStorage.setItem(storageKey, selectedProvider);\n }\n catch (error) {\n console.warn("Failed to save provider selection:", error);\n }\n }\n else {\n try {\n sessionStorage.removeItem(storageKey);\n }\n catch (error) {\n console.warn("Failed to remove provider selection:", error);\n }\n }\n }, [selectedProvider, storageKey]);\n return [selectedProvider, setSelectedProvider];\n}\n\n\n//# sourceURL=webpack://openscan/./src/hooks/useProviderSelection.ts?')},55286:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _common_RPCIndicator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../common/RPCIndicator */ 26637);\n\n\n\nvar NetworkStatsDisplay = react__WEBPACK_IMPORTED_MODULE_1___default().memo(function (_a) {\n var networkStats = _a.networkStats, _b = _a.loading, loading = _b === void 0 ? false : _b, _c = _a.error, error = _c === void 0 ? null : _c, networkId = _a.networkId, metadata = _a.metadata, selectedProvider = _a.selectedProvider, onProviderSelect = _a.onProviderSelect;\n if (loading) {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "container-wide network-stats-container", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "block-display-card", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-center network-stats-loading", children: "Loading network statistics..." }) }) }));\n }\n if (error) {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "container-wide network-stats-container", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "block-display-card", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "text-center network-stats-error", children: ["Error loading network stats: ", error] }) }) }));\n }\n if (!networkStats) {\n return null;\n }\n // Format gas price from Wei to Gwei\n var formatGasPrice = function (weiPrice) {\n try {\n var gwei = Number(weiPrice) / 1e9;\n return "".concat(gwei.toFixed(2), " Gwei");\n }\n catch (_a) {\n return weiPrice;\n }\n };\n // Format block number with commas\n var formatBlockNumber = function (blockNumber) {\n try {\n return Number(blockNumber).toLocaleString();\n }\n catch (_a) {\n return blockNumber;\n }\n };\n // Parse protocol version from metadata (localhost/Hardhat only)\n var getProtocolVersion = function () {\n if (networkId !== 31337 || !networkStats.metadata) {\n return null;\n }\n try {\n return networkStats.metadata.clientVersion || null;\n }\n catch (err) {\n console.error("Failed to parse metadata:", err);\n return null;\n }\n };\n // Get forked network info (localhost/Hardhat only)\n var getForkedNetworkInfo = function () {\n if (networkId !== 31337 || !networkStats.metadata || !networkStats.metadata.forkedNetwork) {\n return null;\n }\n try {\n var forked = networkStats.metadata.forkedNetwork;\n return {\n networkId: forked.chainId,\n blockNumber: forked.forkBlockNumber,\n blockHash: forked.forkBlockHash,\n };\n }\n catch (err) {\n console.error("Failed to parse forked network info:", err);\n return null;\n }\n };\n var protocolVersion = getProtocolVersion();\n var forkedNetwork = getForkedNetworkInfo();\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "container-wide network-stats-container", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-display-card", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between items-center mb-medium", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { className: "network-stats-title margin-0", children: "Network Statistics" }), metadata && selectedProvider !== undefined && onProviderSelect && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_RPCIndicator__WEBPACK_IMPORTED_MODULE_2__.RPCIndicator, { metadata: metadata, selectedProvider: selectedProvider, onProviderSelect: onProviderSelect }))] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "data-grid-3", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Current Gas Price" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-value", children: formatGasPrice(networkStats.currentGasPrice) })] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Current Block Number" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-value", children: formatBlockNumber(networkStats.currentBlockNumber) })] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Sync Status" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-value", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "sync-status-indicator", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "sync-dot ".concat(networkStats.isSyncing ? "sync-dot-warning" : "sync-dot-success") }), networkStats.isSyncing ? "Syncing" : "Synced"] }) })] }), networkStats.clientVersion && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Client Version" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-value tx-mono", children: networkStats.clientVersion })] })), protocolVersion && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Protocol Version" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-value", children: protocolVersion })] })), forkedNetwork && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Forked Network" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "detail-value", children: ["Chain ID: ", forkedNetwork.networkId] })] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Fork Block Number" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-value", children: formatBlockNumber(forkedNetwork.blockNumber.toString()) })] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "block-detail-item network-stat-full-width", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-label", children: "Fork Block Hash" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "detail-value tx-mono fork-hash-value", children: forkedNetwork.blockHash })] })] }))] })] }) }));\n});\nNetworkStatsDisplay.displayName = "NetworkStatsDisplay";\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NetworkStatsDisplay);\n\n\n//# sourceURL=webpack://openscan/./src/components/pages/network/NetworkStatsDisplay.tsx?')},70645:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useSelectedData: () => (/* binding */ useSelectedData)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n/**\n * Hook to extract the correct data based on selected provider\n * Handles fallback mode, default selection, and explicit provider selection\n *\n * @param result - The data with metadata from DataService\n * @param selectedProvider - The URL of the selected provider (or null for default)\n * @returns The actual data to display\n */\nfunction useSelectedData(result, selectedProvider) {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function () {\n if (!result) {\n return null;\n }\n // No metadata = fallback mode, return data as-is\n if (!result.metadata) {\n return result.data;\n }\n // No provider selected = use default (first successful)\n if (!selectedProvider) {\n return result.data;\n }\n // Find selected provider\'s response\n var providerResponse = result.metadata.responses.find(function (r) { return r.url === selectedProvider && r.status === "success"; });\n if (!providerResponse || !providerResponse.data) {\n // Fallback to default if selected provider not found\n console.warn("Selected provider ".concat(selectedProvider, " not found or failed, using default"));\n return result.data;\n }\n // Return the selected provider\'s data\n return providerResponse.data;\n }, [result, selectedProvider]);\n}\n\n\n//# sourceURL=webpack://openscan/./src/hooks/useSelectedData.ts?')},96009:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var _hooks_useSearch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../hooks/useSearch */ 65288);\n\n\nvar SearchBox = function () {\n var _a = (0,_hooks_useSearch__WEBPACK_IMPORTED_MODULE_1__.useSearch)(), searchTerm = _a.searchTerm, setSearchTerm = _a.setSearchTerm, isResolving = _a.isResolving, error = _a.error, clearError = _a.clearError, handleSearch = _a.handleSearch;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "search-box-container", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("form", { onSubmit: handleSearch, className: "search-form", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("input", { type: "text", className: "search-input", placeholder: "Search by Address / Txn Hash / Block / ENS Name", value: searchTerm, onChange: function (e) {\n setSearchTerm(e.target.value);\n clearError();\n }, disabled: isResolving }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "submit", className: "search-button", disabled: isResolving, children: isResolving ? "..." : "Scan" })] }), error && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "search-error", children: error })] }));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SearchBox);\n\n\n//# sourceURL=webpack://openscan/./src/components/common/SearchBox.tsx?')}}]);
@@ -1 +1 @@
1
- "use strict";(globalThis.webpackChunkopenscan=globalThis.webpackChunkopenscan||[]).push([[3564],{13564:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ Home)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-router-dom */ 34794);\n/* harmony import */ var _context_AppContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../context/AppContext */ 92936);\n/* harmony import */ var _common_NetworkIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../common/NetworkIcon */ 54316);\n/* harmony import */ var _common_TierBadge__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../common/TierBadge */ 20684);\n/* harmony import */ var _HomeSearchBar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./HomeSearchBar */ 38292);\n\n\n\n\n\n\n\nvar NetworkCard = function (_a) {\n var network = _a.network;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react_router_dom__WEBPACK_IMPORTED_MODULE_6__.Link, { to: "/".concat(network.networkId), className: "network-card-link", style: { "--network-color": network.color }, children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "network-card", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "network-card-header", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "network-card-icon", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_NetworkIcon__WEBPACK_IMPORTED_MODULE_3__["default"], { network: network, size: 32 }) }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "network-card-info", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "network-card-title-row", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", { className: "network-card-title", children: network.name }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_TierBadge__WEBPACK_IMPORTED_MODULE_4__["default"], { subscription: network.subscription, size: "small" })] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "network-card-chain-id", children: ["Network ID: ", network.networkId] })] })] }) }) }));\n};\nfunction Home() {\n var _a = (0,_context_AppContext__WEBPACK_IMPORTED_MODULE_2__.useNetworks)(), allNetworks = _a.enabledNetworks, isLoading = _a.isLoading;\n var displayNetworks = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(function () {\n var environment = "development";\n var isDevelopment = environment === "development";\n var envNetworks = "31337";\n // Check if Hardhat (31337) is explicitly enabled in REACT_APP_OPENSCAN_NETWORKS\n var hardhatNetworkId = 31337;\n var isHardhatExplicitlyEnabled = envNetworks === null || envNetworks === void 0 ? void 0 : envNetworks.split(",").map(function (id) { return parseInt(id.trim(), 10); }).includes(hardhatNetworkId);\n // Filter out Hardhat from home page if not in development and not explicitly enabled\n if (!isDevelopment && !isHardhatExplicitlyEnabled) {\n return allNetworks.filter(function (n) { return n.networkId !== hardhatNetworkId; });\n }\n return allNetworks;\n }, [allNetworks]);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "home-container", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "home-content page-card", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { className: "home-title", children: "OPENSCAN" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "subtitle", children: "Select a blockchain network to explore" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HomeSearchBar__WEBPACK_IMPORTED_MODULE_5__["default"], { networks: displayNetworks }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "network-grid", children: isLoading && displayNetworks.length === 0 ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "loading-text", children: "Loading networks..." })) : (displayNetworks.map(function (network) { return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(NetworkCard, { network: network }, network.networkId)); })) })] }) }));\n}\n\n\n//# sourceURL=webpack://openscan/./src/components/pages/home/index.tsx?')},20684:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _services_MetadataService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../services/MetadataService */ 56577);\n\n\n\n/**\n * Displays a subscription tier badge (Backer, Partner, or Ally)\n * Only renders if the subscription is active\n */\nvar TierBadge = react__WEBPACK_IMPORTED_MODULE_1___default().memo(function (_a) {\n var subscription = _a.subscription, _b = _a.size, size = _b === void 0 ? "medium" : _b, _c = _a.showSuffix, showSuffix = _c === void 0 ? false : _c, _d = _a.className, className = _d === void 0 ? "" : _d;\n if (!subscription || !(0,_services_MetadataService__WEBPACK_IMPORTED_MODULE_2__.isSubscriptionActive)(subscription)) {\n return null;\n }\n var tierName = (0,_services_MetadataService__WEBPACK_IMPORTED_MODULE_2__.getSubscriptionTierName)(subscription.tier);\n var sizeClass = size === "small" ? "tier-badge-small" : "tier-badge-medium";\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "tier-badge tier-badge-".concat(subscription.tier, " ").concat(sizeClass, " ").concat(className).trim(), children: [tierName, showSuffix] }));\n});\nTierBadge.displayName = "TierBadge";\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TierBadge);\n\n\n//# sourceURL=webpack://openscan/./src/components/common/TierBadge.tsx?')},38292:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ HomeSearchBar)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router-dom */ 34794);\n/* harmony import */ var _services_ENS_ENSService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../services/ENS/ENSService */ 66067);\n/* harmony import */ var _common_NetworkIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../common/NetworkIcon */ 54316);\n\n\n\n\n\nfunction detectSearchType(term) {\n var trimmed = term.trim();\n if (!trimmed)\n return null;\n if (/^0x[a-fA-F0-9]{64}$/.test(trimmed))\n return "transaction";\n if (/^0x[a-fA-F0-9]{40}$/.test(trimmed))\n return "address";\n if (/^\\d+$/.test(trimmed))\n return "block";\n if (_services_ENS_ENSService__WEBPACK_IMPORTED_MODULE_2__.ENSService.isENSName(trimmed))\n return "ens";\n return null;\n}\nfunction getSearchTypeLabel(type) {\n switch (type) {\n case "address":\n return "address";\n case "transaction":\n return "transaction";\n case "block":\n return "block";\n case "ens":\n return "ENS name";\n default:\n return "";\n }\n}\nfunction truncateSearchTerm(term) {\n if (term.length <= 16)\n return term;\n return "".concat(term.slice(0, 8), "...").concat(term.slice(-6));\n}\nfunction HomeSearchBar(_a) {\n var networks = _a.networks;\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(""), searchTerm = _b[0], setSearchTerm = _b[1];\n var _c = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false), isDropdownOpen = _c[0], setIsDropdownOpen = _c[1];\n var containerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n var navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_4__.useNavigate)();\n var searchType = detectSearchType(searchTerm);\n var showDropdown = isDropdownOpen && searchType !== null;\n // Close dropdown when clicking outside\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {\n function handleClickOutside(event) {\n if (containerRef.current && !containerRef.current.contains(event.target)) {\n setIsDropdownOpen(false);\n }\n }\n document.addEventListener("mousedown", handleClickOutside);\n return function () { return document.removeEventListener("mousedown", handleClickOutside); };\n }, []);\n // Open dropdown when valid pattern is detected\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {\n if (searchType !== null) {\n setIsDropdownOpen(true);\n }\n }, [searchType]);\n var handleInputChange = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function (e) {\n setSearchTerm(e.target.value);\n }, []);\n var handleKeyDown = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function (e) {\n if (e.key === "Escape") {\n setIsDropdownOpen(false);\n }\n }, []);\n var handleNetworkSelect = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function (network) {\n var term = searchTerm.trim();\n if (!term || !searchType)\n return;\n var networkId = network.networkId;\n switch (searchType) {\n case "transaction":\n navigate("/".concat(networkId, "/tx/").concat(term));\n break;\n case "address":\n navigate("/".concat(networkId, "/address/").concat(term));\n break;\n case "block":\n navigate("/".concat(networkId, "/block/").concat(term));\n break;\n case "ens":\n // Navigate directly to the ENS URL - the address page will resolve it\n navigate("/1/address/".concat(term));\n break;\n }\n setSearchTerm("");\n setIsDropdownOpen(false);\n }, [searchTerm, searchType, navigate]);\n // For ENS, only show Mainnet in dropdown\n var displayNetworks = searchType === "ens" ? networks.filter(function (n) { return n.networkId === 1; }) : networks;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "home-search-container", ref: containerRef, children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("input", { type: "text", className: "home-search-input", placeholder: "Search by Address / Tx Hash / Block / ENS Name", value: searchTerm, onChange: handleInputChange, onKeyDown: handleKeyDown }), showDropdown && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "home-search-dropdown", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "home-search-dropdown-header", children: ["Search ", getSearchTypeLabel(searchType), " ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "home-search-term", children: truncateSearchTerm(searchTerm.trim()) }), " on:"] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "home-search-dropdown-list", children: displayNetworks.map(function (network) { return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { type: "button", className: "home-search-dropdown-item", onClick: function () { return handleNetworkSelect(network); }, style: {\n "--network-color": network.color,\n }, children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_NetworkIcon__WEBPACK_IMPORTED_MODULE_3__["default"], { network: network, size: 20 }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "home-search-network-name", children: network.name })] }, network.networkId)); }) })] }))] }));\n}\n\n\n//# sourceURL=webpack://openscan/./src/components/pages/home/HomeSearchBar.tsx?')}}]);
1
+ "use strict";(globalThis.webpackChunkopenscan=globalThis.webpackChunkopenscan||[]).push([[3564],{13564:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ Home)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-router-dom */ 34794);\n/* harmony import */ var _context_AppContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../context/AppContext */ 92936);\n/* harmony import */ var _common_NetworkIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../common/NetworkIcon */ 54316);\n/* harmony import */ var _common_TierBadge__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../common/TierBadge */ 20684);\n/* harmony import */ var _HomeSearchBar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./HomeSearchBar */ 38292);\n\n\n\n\n\n\n\nvar NetworkCard = function (_a) {\n var network = _a.network;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react_router_dom__WEBPACK_IMPORTED_MODULE_6__.Link, { to: "/".concat(network.networkId), className: "network-card-link", style: { "--network-color": network.color }, children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "network-card", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "network-card-header", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "network-card-icon", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_NetworkIcon__WEBPACK_IMPORTED_MODULE_3__["default"], { network: network, size: 32 }) }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "network-card-info", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "network-card-title-row", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", { className: "network-card-title", children: network.name }), network.networkId !== 1 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_TierBadge__WEBPACK_IMPORTED_MODULE_4__["default"], { subscription: network.subscription, size: "small" }))] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "network-card-chain-id", children: ["Network ID: ", network.networkId] })] })] }) }) }));\n};\nfunction Home() {\n var _a = (0,_context_AppContext__WEBPACK_IMPORTED_MODULE_2__.useNetworks)(), enabledNetworks = _a.enabledNetworks, isLoading = _a.isLoading;\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false), showTestnets = _b[0], setShowTestnets = _b[1];\n var _c = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(function () {\n var isDevelopment = "development" === "development";\n var localhostNetworkId = 31337;\n // In development, treat localhost as a production network (show with other networks)\n var isProductionNetwork = function (n) {\n if (isDevelopment && n.networkId === localhostNetworkId) {\n return true;\n }\n return !n.isTestnet;\n };\n var productionNetworks = enabledNetworks.filter(isProductionNetwork);\n var testnetNetworks = enabledNetworks.filter(function (n) { return !isProductionNetwork(n); });\n return { productionNetworks: productionNetworks, testnetNetworks: testnetNetworks };\n }, [enabledNetworks]), productionNetworks = _c.productionNetworks, testnetNetworks = _c.testnetNetworks;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "home-container", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "home-content page-card", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { className: "home-title", children: "OPENSCAN" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HomeSearchBar__WEBPACK_IMPORTED_MODULE_5__["default"], { networks: enabledNetworks }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "network-grid", children: isLoading && productionNetworks.length === 0 ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "loading-text", children: "Loading networks..." })) : (productionNetworks.map(function (network) { return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(NetworkCard, { network: network }, network.networkId)); })) }), testnetNetworks.length > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [showTestnets && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "network-grid testnet-grid", children: testnetNetworks.map(function (network) { return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(NetworkCard, { network: network }, network.networkId)); }) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "testnet-toggle-container", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", className: "testnet-toggle-btn", onClick: function () { return setShowTestnets(!showTestnets); }, children: showTestnets ? "Hide testnets" : "Show testnets" }) })] }))] }) }));\n}\n\n\n//# sourceURL=webpack://openscan/./src/components/pages/home/index.tsx?')},20684:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _services_MetadataService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../services/MetadataService */ 56577);\n\n\n\n/**\n * Displays a subscription tier badge (Backer, Partner, or Ally)\n * Only renders if the subscription is active\n */\nvar TierBadge = react__WEBPACK_IMPORTED_MODULE_1___default().memo(function (_a) {\n var subscription = _a.subscription, _b = _a.size, size = _b === void 0 ? "medium" : _b, _c = _a.showSuffix, showSuffix = _c === void 0 ? false : _c, _d = _a.className, className = _d === void 0 ? "" : _d;\n if (!subscription || !(0,_services_MetadataService__WEBPACK_IMPORTED_MODULE_2__.isSubscriptionActive)(subscription)) {\n return null;\n }\n var tierName = (0,_services_MetadataService__WEBPACK_IMPORTED_MODULE_2__.getSubscriptionTierName)(subscription.tier);\n var sizeClass = size === "small" ? "tier-badge-small" : "tier-badge-medium";\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "tier-badge tier-badge-".concat(subscription.tier, " ").concat(sizeClass, " ").concat(className).trim(), children: [tierName, showSuffix] }));\n});\nTierBadge.displayName = "TierBadge";\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TierBadge);\n\n\n//# sourceURL=webpack://openscan/./src/components/common/TierBadge.tsx?')},38292:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ HomeSearchBar)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ 74848);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 96540);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router-dom */ 34794);\n/* harmony import */ var _services_ENS_ENSService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../services/ENS/ENSService */ 66067);\n/* harmony import */ var _common_NetworkIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../common/NetworkIcon */ 54316);\n\n\n\n\n\nfunction detectSearchType(term) {\n var trimmed = term.trim();\n if (!trimmed)\n return null;\n if (/^0x[a-fA-F0-9]{64}$/.test(trimmed))\n return "transaction";\n if (/^0x[a-fA-F0-9]{40}$/.test(trimmed))\n return "address";\n if (/^\\d+$/.test(trimmed))\n return "block";\n if (_services_ENS_ENSService__WEBPACK_IMPORTED_MODULE_2__.ENSService.isENSName(trimmed))\n return "ens";\n return null;\n}\nfunction getSearchTypeLabel(type) {\n switch (type) {\n case "address":\n return "address";\n case "transaction":\n return "transaction";\n case "block":\n return "block";\n case "ens":\n return "ENS name";\n default:\n return "";\n }\n}\nfunction truncateSearchTerm(term) {\n if (term.length <= 16)\n return term;\n return "".concat(term.slice(0, 8), "...").concat(term.slice(-6));\n}\nfunction HomeSearchBar(_a) {\n var networks = _a.networks;\n var _b = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(""), searchTerm = _b[0], setSearchTerm = _b[1];\n var _c = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false), isDropdownOpen = _c[0], setIsDropdownOpen = _c[1];\n var containerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n var navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_4__.useNavigate)();\n var searchType = detectSearchType(searchTerm);\n var showDropdown = isDropdownOpen && searchType !== null;\n // Close dropdown when clicking outside\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {\n function handleClickOutside(event) {\n if (containerRef.current && !containerRef.current.contains(event.target)) {\n setIsDropdownOpen(false);\n }\n }\n document.addEventListener("mousedown", handleClickOutside);\n return function () { return document.removeEventListener("mousedown", handleClickOutside); };\n }, []);\n // Open dropdown when valid pattern is detected\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {\n if (searchType !== null) {\n setIsDropdownOpen(true);\n }\n }, [searchType]);\n var handleInputChange = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function (e) {\n setSearchTerm(e.target.value);\n }, []);\n var handleKeyDown = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function (e) {\n if (e.key === "Escape") {\n setIsDropdownOpen(false);\n }\n }, []);\n var handleNetworkSelect = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function (network) {\n var term = searchTerm.trim();\n if (!term || !searchType)\n return;\n var networkId = network.networkId;\n switch (searchType) {\n case "transaction":\n navigate("/".concat(networkId, "/tx/").concat(term));\n break;\n case "address":\n navigate("/".concat(networkId, "/address/").concat(term));\n break;\n case "block":\n navigate("/".concat(networkId, "/block/").concat(term));\n break;\n case "ens":\n // Navigate directly to the ENS URL - the address page will resolve it\n navigate("/1/address/".concat(term));\n break;\n }\n setSearchTerm("");\n setIsDropdownOpen(false);\n }, [searchTerm, searchType, navigate]);\n // For ENS, only show Mainnet in dropdown\n var displayNetworks = searchType === "ens" ? networks.filter(function (n) { return n.networkId === 1; }) : networks;\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "home-search-container", ref: containerRef, children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("input", { type: "text", className: "home-search-input", placeholder: "Search by Address / Tx Hash / Block / ENS Name", value: searchTerm, onChange: handleInputChange, onKeyDown: handleKeyDown }), showDropdown && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "home-search-dropdown", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "home-search-dropdown-header", children: ["Search ", getSearchTypeLabel(searchType), " ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "home-search-term", children: truncateSearchTerm(searchTerm.trim()) }), " on:"] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "home-search-dropdown-list", children: displayNetworks.map(function (network) { return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { type: "button", className: "home-search-dropdown-item", onClick: function () { return handleNetworkSelect(network); }, style: {\n "--network-color": network.color,\n }, children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_common_NetworkIcon__WEBPACK_IMPORTED_MODULE_3__["default"], { network: network, size: 20 }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "home-search-network-name", children: network.name })] }, network.networkId)); }) })] }))] }));\n}\n\n\n//# sourceURL=webpack://openscan/./src/components/pages/home/HomeSearchBar.tsx?')}}]);