PageSourceSearch

https://www.hamienet.com/assets/AdminApp-D1oXn0it.js

js hamienet.com collected 2026-09-24 18:59:25 UTC 65,300 bytes, 967 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AdManager-Ct0IrFQq.js","assets/vendor-react-Bay9Y7Lb.js","assets/index-D0Bmh-UX.js","assets/vendor-i18n-R-bMoYp_.js","assets/vendor-dVNaLJx_.js","assets/vendor-DqKRdbjz.css","assets/index-WEfYDNmt.css","assets/AdminModuleStudio-DjF-FEL6.js","assets/ai-DU77DB8o.js","assets/vendor-ai-DIIXepW_.js","assets/AdminSettings-qDZf9At9.js","assets/AdminWireguard-DvDYRT_d.js","assets/vendor-framer-C8eEgkdL.js","assets/AiSettings-BoPY5f8A.js","assets/AdminShared-P_hor2hS.js","assets/AppearanceSettings-Dla95Hy3.js","assets/ArchiveImporter-n0Q0QYy4.js","assets/synth-BE1TSTD4.js","assets/vendor-react-three-MDLA5jog.js","assets/wasm-synth-adapter-BrqgBX1y.js","assets/vendor-spessasynth-DH8n6o_V.js","assets/vendor-audio-DH3w0BzW.js","assets/BIDashboard-DcWnvIuE.js","assets/BackupManager-D8hVThKF.js","assets/CinematicStudio-BoU7Bw9s.js","assets/Musician3D-D56sI7cs.js","assets/ClimateControl-DAlqu7Gg.js","assets/ClusterSync-DKKIVbtK.js","assets/useIdlePollingPause-Al1AXAz9.js","assets/CollectionManager-Cr8WrcZS.js","assets/CreditManager-wYOeDl1g.js","assets/credit-rules-8PgauDOD.js","assets/DataMigration-D3CXrQtz.js","assets/DatabaseManager-BqSTDDnc.js","assets/DevAgent-BghXVV06.js","assets/DocuCenter-D0hYjWMZ.js","assets/EmailSettings-CBkm3rKS.js","assets/FileSystem-Gq9PfcKK.js","assets/GraphicManager-RJLdonMh.js","assets/utils-BYCVoSTN.js","assets/labTools-BATZiaPB.js","assets/HelpCenterManager-D-9RnvrU.js","assets/LiveMonitor-DatH1KEW.js","assets/MediaLibrary-CsRy_8DG.js","assets/Waveform-MxtdejK7.js","assets/UserAvatar-BQN4jlY-.js","assets/GlobeFlag-V1uaxVEK.js","assets/MenuManager-1Nkr2IrM.js","assets/PerformanceMonitor-BzGDNWTK.js","assets/PuppetStudio-CpqKJqXk.js","assets/StagePuppetEngine-BtPqoUG7.js","assets/IkMath-D6fi1ppd.js","assets/vendor-gsap-50Lx19ak.js","assets/InstrumentMappings-UYUlFRMy.js","assets/RegionManager-CnhTdhVc.js","assets/ScanAndTag-DszYOwrm.js","assets/ScoreImporter-CXoMCKwM.js","assets/SearchConsoleSettings-8eK2Diqe.js","assets/SearchSettings-BSlJndKx.js","assets/SiteModuleStudio-qY8wsxxx.js","assets/SocialSettings-D4xNlkDk.js","assets/SoundfontManager-C6kr0CCX.js","assets/SoundfontQualityLab-B9zmg6dJ.js","assets/SharedKeyboard-B3r3Jaho.js","assets/useMidiKeyboard-DlyEIN8T.js","assets/SouthparkActionsStudio-DE8P5dhV.js","assets/SouthparkCharacter-BNwA9Wd0.js","assets/SouthparkStageDesigner-D3wJTqgo.js","assets/SouthparkStageBanner-BCxT9awg.js","assets/SouthparkStudio-3yAVRK5D.js","assets/SouthparkVariants-DgWdjJ-T.js","assets/SouthparkOrchestraVisualizer-BGIvyqzT.js","assets/SpamConfigTabs-Bz5cy6i6.js","assets/SubscriptionManager-DgMZeVgt.js","assets/SubscriptionSettings-D4ahxxuJ.js","assets/SystemInfo-D4Z1kN9f.js","assets/SystemManager-BSBbLvNx.js","assets/SystemMonitor-BtaKLdqu.js","assets/SystemSettings-CbmXa8gg.js","assets/TranslationManager-1sTCXwQ0.js","assets/TrustScoreConfig-D0xv0bQl.js","assets/TagManager-COGvUhIS.js","assets/TicketSupport--Koo4yg7.js","assets/TrustSafety-cHE1J5RX.js","assets/UnifiedLogs-BQXbYxtq.js","assets/UserManagement-DFmAfWJ0.js","assets/WebScraper-YXZBgNTW.js","assets/WorkerManager-CTxYVO4S.js"])))=>i.map(i=>d[i]);
2import { r as reactExports, j as jsxRuntimeExports, R as React } from "./vendor-react-Bay9Y7Lb.js";
3import { _ as __vitePreload } from "./vendor-react-three-MDLA5jog.js";
4import { S as SettingsProvider, a as api } from "./index-D0Bmh-UX.js";
5import { cJ as ShieldAlert, a$ as Shield, cL as RefreshCw, dS as ChevronsRight, dT as ChevronsLeft, bf as Search, cb as Pin, dU as Thermometer, dV as Film, dW as Smile, cf as Activity, bg as Music, c0 as Share2, dX as Server, ci as Cpu, df as SlidersVertical, b9 as Settings, bq as Coins, dY as Book, dZ as Archive, bF as CircleQuestionMark, aZ as Mail, bH as Hash, d_ as ArrowLeftRight, d$ as Languages, bn as Globe, bJ as PanelsTopLeft, bG as Box, cE as Key, d7 as Image, e0 as Palette, ck as HardDrive, dO as LifeBuoy, ch as Database, dN as Users, e1 as Calculator, cl as OctagonAlert, e2 as Bot, e3 as ChartNoAxesColumnIncreasing, e4 as DatabaseZap, cB as ChevronDown, bk as LogOut, aW as X } from "./vendor-dVNaLJx_.js";
6import "./vendor-i18n-R-bMoYp_.js";
7const adminModuleFiles = /* @__PURE__ */ Object.assign({ 
7"./AdminModules/AdManager.tsx": () => __vitePreload(() => import("./AdManager-Ct0IrFQq.js"), true ? __vite__mapDeps([0,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/AdminModuleStudio.tsx": () => __vitePreload(() => import("./AdminModuleStudio-DjF-FEL6.js"), true ? __vite__mapDeps([7,1,2,3,4,5,6,8,9]) : void 0), 
7"./AdminModules/AdminSettings.tsx": () => __vitePreload(() => import("./AdminSettings-qDZf9At9.js"), true ? __vite__mapDeps([10,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/AdminWireguard.tsx": () => __vitePreload(() => import("./AdminWireguard-DvDYRT_d.js"), true ? __vite__mapDeps([11,1,4,3,5,12]) : void 0), 
7"./AdminModules/AiSettings.tsx": () => __vitePreload(() => import("./AiSettings-BoPY5f8A.js"), true ? __vite__mapDeps([13,1,2,3,4,5,6,14]) : void 0), 
7"./AdminModules/AppearanceSettings.tsx": () => __vitePreload(() => import("./AppearanceSettings-Dla95Hy3.js"), true ? __vite__mapDeps([15,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/ArchiveImporter.tsx": () => __vitePreload(() => import("./ArchiveImporter-n0Q0QYy4.js"), true ? __vite__mapDeps([16,1,2,3,4,5,6,17,18,19,20,21]) : void 0), 
7"./AdminModules/BIDashboard.tsx": () => __vitePreload(() => import("./BIDashboard-DcWnvIuE.js"), true ? __vite__mapDeps([22,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/BackupManager.tsx": () => __vitePreload(() => import("./BackupManager-D8hVThKF.js"), true ? __vite__mapDeps([23,1,4,3,5]) : void 0), 
7"./AdminModules/CinematicStudio.tsx": () => __vitePreload(() => import("./CinematicStudio-BoU7Bw9s.js"), true ? __vite__mapDeps([24,1,18,4,3,5,25]) : void 0), 
7"./AdminModules/ClimateControl.tsx": () => __vitePreload(() => import("./ClimateControl-DAlqu7Gg.js"), true ? __vite__mapDeps([26,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/ClusterSync.tsx": () => __vitePreload(() => import("./ClusterSync-DKKIVbtK.js"), true ? __vite__mapDeps([27,1,2,3,4,5,6,28]) : void 0), 
7"./AdminModules/CollectionManager.tsx": () => __vitePreload(() => import("./CollectionManager-Cr8WrcZS.js"), true ? __vite__mapDeps([29,1,2,3,4,5,6,8,9]) : void 0), 
7"./AdminModules/CreditManager.tsx": () => __vitePreload(() => import("./CreditManager-wYOeDl1g.js"), true ? __vite__mapDeps([30,1,2,3,4,5,6,31,14]) : void 0), 
7"./AdminModules/DataMigration.tsx": () => __vitePreload(() => import("./DataMigration-D3CXrQtz.js"), true ? __vite__mapDeps([32,1,2,3,4,5,6,16,17,18,19,20,21]) : void 0), 
7"./AdminModules/DatabaseManager.tsx": () => __vitePreload(() => import("./DatabaseManager-BqSTDDnc.js"), true ? __vite__mapDeps([33,1,14,4,3,5,2,6]) : void 0), 
7"./AdminModules/DevAgent.tsx": () => __vitePreload(() => import("./DevAgent-BghXVV06.js"), true ? __vite__mapDeps([34,1,2,3,4,5,6,8,9]) : void 0), 
7"./AdminModules/DocuCenter.tsx": () => __vitePreload(() => import("./DocuCenter-D0hYjWMZ.js"), true ? __vite__mapDeps([35,1,4,3,5]) : void 0), 
7"./AdminModules/EmailSettings.tsx": () => __vitePreload(() => import("./EmailSettings-CBkm3rKS.js"), true ? __vite__mapDeps([36,1,2,3,4,5,6,14]) : void 0), 
7"./AdminModules/FileSystem.tsx": () => __vitePreload(() => import("./FileSystem-Gq9PfcKK.js"), true ? __vite__mapDeps([37,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/GraphicManager.tsx": () => __vitePreload(() => import("./GraphicManager-RJLdonMh.js"), true ? __vite__mapDeps([38,1,2,3,4,5,6,39,8,9,14,40]) : void 0), 
7"./AdminModules/HelpCenterManager.tsx": () => __vitePreload(() => import("./HelpCenterManager-D-9RnvrU.js"), true ? __vite__mapDeps([41,1,2,3,4,5,6,14,8,9]) : void 0), 
7"./AdminModules/LiveMonitor.tsx": () => __vitePreload(() => import("./LiveMonitor-DatH1KEW.js"), true ? __vite__mapDeps([42,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/MediaLibrary.tsx": () => __vitePreload(() => import("./MediaLibrary-CsRy_8DG.js"), true ? __vite__mapDeps([43,1,2,3,4,5,6,17,18,19,20,21,14,39,44,12,45,46]) : void 0), 
7"./AdminModules/MenuManager.tsx": () => __vitePreload(() => import("./MenuManager-1Nkr2IrM.js"), true ? __vite__mapDeps([47,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/PerformanceMonitor.tsx": () => __vitePreload(() => import("./PerformanceMonitor-BzGDNWTK.js"), true ? __vite__mapDeps([48,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/PuppetStudio.tsx": () => __vitePreload(() => import("./PuppetStudio-CpqKJqXk.js"), true ? __vite__mapDeps([49,1,4,3,5,50,17,18,19,20,21,51,52,12,53,39,2,6]) : void 0), 
7"./AdminModules/RegionManager.tsx": () => __vitePreload(() => import("./RegionManager-CnhTdhVc.js"), true ? __vite__mapDeps([54,1,2,3,4,5,6,14]) : void 0), 
7"./AdminModules/ScanAndTag.tsx": () => __vitePreload(() => import("./ScanAndTag-DszYOwrm.js"), true ? __vite__mapDeps([55,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/ScoreImporter.tsx": () => __vitePreload(() => import("./ScoreImporter-CXoMCKwM.js"), true ? __vite__mapDeps([56,1,4,3,5]) : void 0), 
7"./AdminModules/SearchConsoleSettings.tsx": () => __vitePreload(() => import("./SearchConsoleSettings-8eK2Diqe.js"), true ? __vite__mapDeps([57,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/SearchSettings.tsx": () => __vitePreload(() => import("./SearchSettings-BSlJndKx.js"), true ? __vite__mapDeps([58,1,2,3,4,5,6,14]) : void 0), 
7"./AdminModules/SiteModuleStudio.tsx": () => __vitePreload(() => import("./SiteModuleStudio-qY8wsxxx.js"), true ? __vite__mapDeps([59,1,2,3,4,5,6,8,9,39]) : void 0), 
7"./AdminModules/SocialSettings.tsx": () => __vitePreload(() => import("./SocialSettings-D4xNlkDk.js"), true ? __vite__mapDeps([60,1,2,3,4,5,6,14]) : void 0), 
7"./AdminModules/SoundfontManager.tsx": () => __vitePreload(() => import("./SoundfontManager-C6kr0CCX.js"), true ? __vite__mapDeps([61,1,2,3,4,5,6,39,62,63,18,64,19,20]) : void 0), 
7"./AdminModules/SoundfontQualityLab.tsx": () => __vitePreload(() => import("./SoundfontQualityLab-B9zmg6dJ.js"), true ? __vite__mapDeps([62,1,2,3,4,5,6,63,18,64,19,20,39]) : void 0), 
7"./AdminModules/SouthparkActionsStudio.tsx": () => __vitePreload(() => import("./SouthparkActionsStudio-DE8P5dhV.js"), true ? __vite__mapDeps([65,1,66,51,12,4,3,5,39,2,6]) : void 0), 
7"./AdminModules/SouthparkStageDesigner.tsx": () => __vitePreload(() => import("./SouthparkStageDesigner-D3wJTqgo.js"), true ? __vite__mapDeps([67,1,50,17,18,4,3,5,19,20,21,51,52,12,66,68]) : void 0), 
7"./AdminModules/SouthparkStudio.tsx": () => __vitePreload(() => import("./SouthparkStudio-3yAVRK5D.js"), true ? __vite__mapDeps([69,1,66,51,12,4,3,5,70,71,17,18,19,20,21,50,52,68,39,2,6,67,65]) : void 0), 
7"./AdminModules/SpamConfigTabs.tsx": () => __vitePreload(() => import("./SpamConfigTabs-Bz5cy6i6.js"), true ? __vite__mapDeps([72,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/SubscriptionManager.tsx": () => __vitePreload(() => import("./SubscriptionManager-DgMZeVgt.js"), true ? __vite__mapDeps([73,1,2,3,4,5,6,14]) : void 0), 
7"./AdminModules/SubscriptionSettings.tsx": () => __vitePreload(() => import("./SubscriptionSettings-D4ahxxuJ.js"), true ? __vite__mapDeps([74,1,2,3,4,5,6,14]) : void 0), 
7"./AdminModules/SystemInfo.tsx": () => __vitePreload(() => import("./SystemInfo-D4Z1kN9f.js"), true ? __vite__mapDeps([75,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/SystemManager.tsx": () => __vitePreload(() => import("./SystemManager-BSBbLvNx.js"), true ? __vite__mapDeps([76,1,4,3,5]) : void 0), 
7"./AdminModules/SystemMonitor.tsx": () => __vitePreload(() => import("./SystemMonitor-BtaKLdqu.js"), true ? __vite__mapDeps([77,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/SystemSettings.tsx": () => __vitePreload(() => import("./SystemSettings-CbmXa8gg.js"), true ? __vite__mapDeps([78,1,54,2,3,4,5,6,14,79,8,9,39,10,60,36,15,80,45,72,30,31,74,58,23,13]) : void 0), 
7"./AdminModules/TagManager.tsx": () => __vitePreload(() => import("./TagManager-COGvUhIS.js"), true ? __vite__mapDeps([81,1,2,3,4,5,6,14,8,9,39]) : void 0), 
7"./AdminModules/TicketSupport.tsx": () => __vitePreload(() => import("./TicketSupport--Koo4yg7.js"), true ? __vite__mapDeps([82,1,2,3,4,5,6,14,39]) : void 0), 
7"./AdminModules/TranslationManager.tsx": () => __vitePreload(() => import("./TranslationManager-1sTCXwQ0.js"), true ? __vite__mapDeps([79,1,2,3,4,5,6,14,8,9,39]) : void 0), 
7"./AdminModules/TrustSafety.tsx": () => __vitePreload(() => import("./TrustSafety-cHE1J5RX.js"), true ? __vite__mapDeps([83,1,2,3,4,5,6,45]) : void 0), 
7"./AdminModules/TrustScoreConfig.tsx": () => __vitePreload(() => import("./TrustScoreConfig-D0xv0bQl.js"), true ? __vite__mapDeps([80,1,2,3,4,5,6,14,45,72]) : void 0), 
7"./AdminModules/UnifiedLogs.tsx": () => __vitePreload(() => import("./UnifiedLogs-BQXbYxtq.js"), true ? __vite__mapDeps([84,1,2,3,4,5,6]) : void 0), 
7"./AdminModules/UserManagement.tsx": () => __vitePreload(() => import("./UserManagement-DFmAfWJ0.js"), true ? __vite__mapDeps([85,1,2,3,4,5,6,14,45]) : void 0), 
7"./AdminModules/WebScraper.tsx": () => __vitePreload(() => import("./WebScraper-YXZBgNTW.js"), true ? __vite__mapDeps([86,1,4,3,5]) : void 0), 
7"./AdminModules/WorkerManager.tsx": () => __vitePreload(() => import("./WorkerManager-CTxYVO4S.js"), true ? __vite__mapDeps([87,1,2,3,4,5,6,28]) : void 0)
7 });
8const getLazyComponent = (filename) => {
9  let importFn = adminModuleFiles[`./AdminModules/${filename}.tsx`];
10  if (!importFn) {
11    const pascalName = filename.split(/[_-]/).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join("");
12    importFn = adminModuleFiles[`./AdminModules/${pascalName}.tsx`];
13  }
14  if (importFn) {
15    return React.lazy(importFn);
16  }
17  return null;
18};
19const lazyComponentsCache = {};
20const getComponentForModule = (filename) => {
21  if (!lazyComponentsCache[filename]) {
22    const comp = getLazyComponent(filename);
23    if (comp) {
24      lazyComponentsCache[filename] = comp;
25    }
26  }
27  return lazyComponentsCache[filename];
28};
29const LEGACY_COMPONENT_MAP = {
30  "dashboard": { filename: "BIDashboard", label: "Intelligence Dashboard", iconKey: "dashboard" },
31  "documentation": { filename: "DocuCenter", label: "DocuCenter", iconKey: "book" },
32  "dev_agent": { filename: "DevAgent", label: "AI Developer", iconKey: "bot" },
33  "trust": { filename: "TrustSafety", label: "Trust & Safety", iconKey: "trust" },
34  "users": { filename: "UserManagement", label: "User Governance", iconKey: "users" },
35  "media": { filename: "MediaLibrary", label: "Content Assets", iconKey: "media" },
36  "worker_manager": { filename: "WorkerManager", label: "Worker Manager", iconKey: "worker" },
37  "tags": { filename: "TagManager", label: "Tag Dictionary", iconKey: "hash" },
38  "tickets": { filename: "TicketSupport", label: "Support Desk", iconKey: "tickets" },
39  "help_content": { filename: "HelpCenterManager", label: "Support & Resources", iconKey: "help-circle" },
40  "modules": { filename: "AdminModuleStudio", label: "Admin Module Studio", iconKey: "modules" },
41  "site_modules": { filename: "SiteModuleStudio", label: "Site Architect", iconKey: "site_modules" },
42  "menu_manager": { filename: "MenuManager", label: "Menu Manager", iconKey: "menu" },
43  "files": { filename: "FileSystem", label: "File System", iconKey: "files" },
44  "graphics": { filename: "GraphicManager", label: "Graphic Manager", iconKey: "graphics" },
45  "database": { filename: "DatabaseManager", label: "Schema & Data", iconKey: "database" },
46  "info": { filename: "SystemInfo", label: "System Overview", iconKey: "info" },
47  "logs": { filename: "UnifiedLogs", label: "Unified Logs", iconKey: "logs" },
48  "system_settings": { filename: "SystemSettings", label: "System Settings", iconKey: "system_settings" },
49  "backup": { filename: "BackupManager", label: "Backup Manager", iconKey: "archive" },
50  "appearance": { filename: "AppearanceSettings", label: "Appearance", iconKey: "appearance" },
51  "settings": { filename: "AdminSettings", label: "Admin Roles", iconKey: "key" },
52  "languages": { filename: "TranslationManager", label: "Translation Manager", iconKey: "languages" },
53  "system_manager": { filename: "SystemManager", label: "System Deployments", iconKey: "server" },
54  "ai_settings": { filename: "AiSettings", label: "AI Configuration", iconKey: "bot" },
55  "email_settings": { filename: "EmailSettings", label: "Email Configuration", iconKey: "mail" },
56  "search_settings": { filename: "SearchSettings", label: "Search Engine", iconKey: "search" },
57  "social_settings": { filename: "SocialSettings", label: "Social & Sharing", iconKey: "share2" },
58  "trust_score_config": { filename: "TrustScoreConfig", label: "Trust Score Rules", iconKey: "shield-alert" },
59  "region_manager": { filename: "RegionManager", label: "Regional Settings", iconKey: "globe" },
60  "migration": { filename: "DataMigration", label: "Data Migration", iconKey: "refresh-cw" },
61  "coins": { filename: "CreditManager", label: "Usage & Quotas", iconKey: "coins" },
62  "subscription_manager": { filename: "SubscriptionManager", label: "Supporter Registry", iconKey: "users" },
63  "soundfonts": { filename: "SoundfontManager", label: "Soundfont Engine", iconKey: "music" },
64  "scraper": { filename: "WebScraper", label: "Web Scraper & Importer", iconKey: "globe" },
65  "archive_importer": { filename: "ArchiveImporter", label: "High-Speed MIDI Archive Importer", iconKey: "archive" },
66  "cluster_sync": { filename: "ClusterSync", label: "Multi-Region Cluster", iconKey: "globe" },
67  "wireguard": { filename: "AdminWireguard", label: "Wireguard Management", iconKey: "shield" },
68  "monitoring": { filename: "SystemMonitor", label: "Infrastructure Analytics", iconKey: "activity" },
69  "gsc_settings": { filename: "SearchConsoleSettings", label: "Google Search Console", iconKey: "globe" },
70  "puppets": { filename: "PuppetStudio", label: "Puppet Studio", iconKey: "smile" },
71  "live_monitor": { filename: "LiveMonitor", label: "Live Monitor", iconKey: "activity" },
72  "performance_monitor": { filename: "PerformanceMonitor", label: "User Experience Logger", iconKey: "activity" },
73  "ads": { filename: "AdManager", label: "Ad Monetization", iconKey: "coins" },
74  "collections": { filename: "CollectionManager", label: "MIDI Collections", iconKey: "site_modules" },
75  "scan_tag": { filename: "ScanAndTag", label: "Scan & Tag", iconKey: "music" },
76  "cinematic_studio": { filename: "CinematicStudio", label: "Cinematic Studio", iconKey: "film" },
77  "score_importer": { filename: "ScoreImporter", label: "Score Importer", iconKey: "music" },
78  "southpark_studio": { filename: "SouthparkStudio", label: "South Park Studio", iconKey: "smile" },
79  "climate_control": { filename: "ClimateControl", label: "Climate & AC Guardian", iconKey: "thermometer" }
80};
81const LESS_USED_MODULE_IDS = /* @__PURE__ */ new Set([
82  "ai_settings",
83  "appearance",
84  "email_settings",
85  "search_settings",
86  "social_settings",
87  "trust_score_config",
88  "region_manager",
89  "languages",
90  "migration",
91  "backup",
92  "system_manager",
93  "soundfonts",
94  "graphics",
95  "files",
96  "coins",
97  "ads"
98]);
99const ADMIN_MENU_GROUPS = [
100  {
101    name: "Dashboard & Performance",
102    icon: ChartNoAxesColumnIncreasing,
103    items: ["dashboard", "climate_control", "info", "logs", "worker_manager", "system_manager", "wireguard", "monitoring", "live_monitor", "performance_monitor"]
104  },
105  {
106    name: "Content & Media",
107    icon: Database,
108    items: ["media", "tags", "scan_tag", "graphics", "files", "documentation", "soundfonts", "scraper", "archive_importer", "score_importer"]
109  },
110  {
111    name: "User Governance",
112    icon: Users,
113    items: ["users", "coins", "trust", "tickets"]
114  },
115  {
116    name: "Creative Studio",
117    icon: PanelsTopLeft,
118    items: ["modules", "site_modules", "collections", "menu_manager", "languages", "region_manager", "puppets", "cinematic_studio", "southpark_studio"]
119  },
120  {
121    name: "Database Operations",
122    icon: DatabaseZap,
123    items: ["backup", "database", "migration", "cluster_sync"]
124  },
125  {
126    name: "System Settings",
127    icon: SlidersVertical,
128    items: ["system_settings"],
129    children: ["ai_settings", "appearance", "email_settings", "search_settings", "social_settings", "trust_score_config", "settings", "gsc_settings", "ads"]
130  }
131];
132const ICON_MAP = {
133  "dashboard": ChartNoAxesColumnIncreasing,
134  "bot": Bot,
135  "trust": OctagonAlert,
136  "calculator": Calculator,
137  "users": Users,
138  "media": Database,
139  "tickets": LifeBuoy,
140  "files": HardDrive,
141  "database": Server,
142  "appearance": Palette,
143  "graphics": Image,
144  "logs": Activity,
145  "key": Key,
146  "modules": Box,
147  "site_modules": PanelsTopLeft,
148  "menu": PanelsTopLeft,
149  "info": Server,
150  "globe": Globe,
151  "languages": Languages,
152  "refresh-cw": ArrowLeftRight,
153  "hash": Hash,
154  "mail": Mail,
155  "help-circle": CircleQuestionMark,
156  "social": Share2,
157  "search": Search,
158  "archive": Archive,
159  "book": Book,
160  "coins": Coins,
161  "settings": Settings,
162  "system_settings": SlidersVertical,
163  "worker": Cpu,
164  "server": Server,
165  "shield-alert": ShieldAlert,
166  "share2": Share2,
167  "music": Music,
168  "activity": Activity,
169  "smile": Smile,
170  "film": Film,
171  "thermometer": Thermometer
172};
173const QuickJump = ({ isOpen, onClose, modules, onSelect }) => {
174  const [search, setSearch] = reactExports.useState("");
175  const [selectedIndex, setSelectedIndex] = reactExports.useState(0);
176  const inputRef = reactExports.useRef(null);
177  const filtered = reactExports.useMemo(() => {
178    if (!search) return modules.slice(0, 10);
179    return modules.filter((m) => m.label.toLowerCase().includes(search.toLowerCase())).slice(0, 10);
180  }, [search, modules]);
181  reactExports.useEffect(() => {
182    if (isOpen) {
183      setSearch("");
184      setSelectedIndex(0);
185      setTimeout(() => {
186        var _a;
187        return (_a = inputRef.current) == null ? void 0 : _a.focus();
188      }, 10);
189    }
190  }, [isOpen]);
191  const handleKeyDown = (e) => {
192    if (e.key === "ArrowDown") {
193      setSelectedIndex((prev) => (prev + 1) % filtered.length);
194      e.preventDefault();
195    } else if (e.key === "ArrowUp") {
196      setSelectedIndex((prev) => (prev - 1 + filtered.length) % filtered.length);
197      e.preventDefault();
198    } else if (e.key === "Enter" && filtered[selectedIndex]) {
199      onSelect(filtered[selectedIndex].id);
200      onClose();
201    } else if (e.key === "Escape") {
202      onClose();
203    }
204  };
205  if (!isOpen) return null;
206  return /* @__PURE__ */ jsxRuntimeExports.jsx(
207    "div",
208    {
209      className: "fixed inset-0 z-[100] flex items-start justify-center pt-[15vh] bg-black/60 backdrop-blur-sm animate-in fade-in duration-200",
210      onClick: onClose,
211      children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
212        "div",
213        {
214          className: "w-full max-w-xl bg-zinc-900 border border-zinc-800 rounded-xl shadow-2xl overflow-hidden animate-in zoom-in-95 duration-200",
215          onClick: (e) => e.stopPropagation(),
216          children: [
217            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-4 border-b border-zinc-800 flex items-center gap-3", children: [
218              /* @__PURE__ */ jsxRuntimeExports.jsx(Search, { className: "text-zinc-500", size: 20 }),
219              /* @__PURE__ */ jsxRuntimeExports.jsx(
220                "input",
221                {
222                  ref: inputRef,
223                  type: "text",
224                  placeholder: "Search modules... (↑↓ to navigate, Enter to select)",
225                  className: "flex-1 bg-transparent border-none outline-none text-white text-lg",
226                  value: search,
227                  onChange: (e) => setSearch(e.target.value),
228                  onKeyDown: handleKeyDown
229                }
230              ),
231              /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
232                /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center gap-1 px-2 py-1 bg-zinc-800 rounded text-[10px] text-zinc-400 font-mono", children: /* @__PURE__ */ jsxRuntimeExports.jsx("kbd", { children: "ESC" }) }),
233                /* @__PURE__ */ jsxRuntimeExports.jsx(
234                  "button",
235                  {
236                    onClick: onClose,
237                    className: "p-1 hover:bg-zinc-800 rounded-lg text-zinc-500 hover:text-white transition-colors",
238                    children: /* @__PURE__ */ jsxRuntimeExports.jsx(X, { size: 18 })
239                  }
240                )
241              ] })
242            ] }),
243            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-h-[60vh] overflow-y-auto p-2", children: [
244              filtered.map((m, i) => {
245                const Icon = ICON_MAP[m.iconKey] || Box;
246                return /* @__PURE__ */ jsxRuntimeExports.jsxs(
247                  "a",
248                  {
249                    href: `/admin/${m.id}`,
250                    className: `flex items-center gap-3 p-3 rounded-lg cursor-pointer transition-colors ${i === selectedIndex ? "bg-indigo-600 text-white" : "text-zinc-400 hover:bg-zinc-800 hover:text-white"} block`,
251                    onClick: (e) => {
252                      onSelect(m.id, e);
253                      if (!(e.ctrlKey || e.metaKey || e.button === 1)) {
254                        onClose();
255                      }
256                    },
257                    children: [
258                      /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { size: 18 }),
259                      /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium", children: m.label }),
260                      /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ml-auto text-xs opacity-50 font-mono", children: m.id })
261                    ]
262                  },
263                  m.id
264                );
265              }),
266              filtered.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-8 text-center text-zinc-500", children: "No modules found" })
267            ] })
268          ]
269        }
270      )
271    }
272  );
273};
274const AdminPage = ({ onUploadClick, onExit }) => {
275  const [user] = reactExports.useState(() => {
276    const saved = localStorage.getItem("hamie_session");
277    try {
278      return saved ? JSON.parse(saved) : null;
279    } catch {
280      return null;
281    }
282  });
283  const [isLocked, setIsLocked] = reactExports.useState(true);
284  const [pin, setPin] = reactExports.useState("");
285  const [error, setError] = reactExports.useState("");
286  const [isLoading, setIsLoading] = reactExports.useState(false);
287  const [activeRole, setActiveRole] = reactExports.useState(null);
288  const [rememberMe, setRememberMe] = reactExports.useState(false);
289  const initialModule = window.location.pathname.startsWith("/admin/") ? window.location.pathname.replace("/admin/", "") : "dashboard";
290  const [activeModuleId, setActiveModuleId] = reactExports.useState(initialModule);
291  const [systemInfo, setSystemInfo] = reactExports.useState(null);
292  const nodeName = reactExports.useMemo(() => {
293    if (typeof window !== "undefined") {
294      const host = window.location.hostname || "";
295      const href = window.location.href || "";
296      if (host.includes("192.168.40.") || host.includes("jp") || href.includes("192.168.40.") || href.includes("jp")) {
297        return "JP";
298      }
299      if (host.includes("192.168.1.") || host.includes("hamienet.ca")) {
300        return "HK";
301      }
302    }
303    if (!systemInfo || !systemInfo.environment) return "HK";
304    const env = systemInfo.environment;
305    if (env.CLUSTER_NODE) return env.CLUSTER_NODE.toUpperCase();
306    if (env.NODE_LOCATION) return env.NODE_LOCATION.toUpperCase();
307    if (env.REGION) return env.REGION.toUpperCase();
308    if (env.DATABASE_URL) {
309      if (env.DATABASE_URL.includes("192.168.40.") || env.DATABASE_URL.includes("5434") || env.DATABASE_URL.includes("jp")) return "JP";
310      if (env.DATABASE_URL.includes("192.168.1.115")) return "HK";
311    }
312    return "HK";
313  }, [systemInfo]);
314  const [dbModules, setDbModules] = reactExports.useState([]);
315  const [isSidebarCollapsed, setIsSidebarCollapsed] = reactExports.useState(() => {
316    if (typeof window === "undefined") return true;
317    const path = window.location.pathname;
318    return !(path === "/admin" || path === "/admin/");
319  });
320  const [expandedGroups, setExpandedGroups] = reactExports.useState(["Dashboard & Performance", "System Settings"]);
321  const [isQuickJumpOpen, setIsQuickJumpOpen] = reactExports.useState(false);
322  const [pinnedModuleIds, setPinnedModuleIds] = reactExports.useState([]);
323  const [refreshTrigger] = reactExports.useState(0);
324  const [entryError, setEntryError] = reactExports.useState(null);
325  const [customMenu, setCustomMenu] = reactExports.useState(null);
326  const [hideLessUsed, setHideLessUsed] = reactExports.useState(() => {
327    return localStorage.getItem("hamienet_hide_less_used") === "true";
328  });
329  reactExports.useEffect(() => {
330    localStorage.setItem("hamienet_hide_less_used", String(hideLessUsed));
331  }, [hideLessUsed]);
332  reactExports.useEffect(() => {
333    const handleKeyDown = (e) => {
334      if ((e.ctrlKey || e.metaKey) && e.key === "k") {
335        e.preventDefault();
336        setIsQuickJumpOpen(true);
337      }
338    };
339    window.addEventListener("keydown", handleKeyDown);
340    return () => window.removeEventListener("keydown", handleKeyDown);
341  }, []);
342  reactExports.useEffect(() => {
343    const handlePopState = () => {
344      if (window.location.pathname.startsWith("/admin/")) {
345        setActiveModuleId(window.location.pathname.replace("/admin/", ""));
346      } else if (window.location.pathname === "/admin") {
347        setActiveModuleId("dashboard");
348      }
349    };
350    window.addEventListener("popstate", handlePopState);
351    return () => window.removeEventListener("popstate", handlePopState);
352  }, []);
353  reactExports.useEffect(() => {
354    const checkStatus = async () => {
355      try {
356        const status = await api.getAdminStatus();
357        if (status.verified && status.role) {
358          setIsLocked(false);
359          setActiveRole(status.role);
360          return;
361        }
362        const grantToken = localStorage.getItem("hamienet_admin_grant");
363        if (grantToken) {
364          setIsLoading(true);
365          try {
366            const reverify = await api.reverifyAdmin(grantToken);
367            if (reverify.verified && reverify.role) {
368              setIsLocked(false);
369              setActiveRole(reverify.role);
370            } else {
371              localStorage.removeItem("hamienet_admin_grant");
372            }
373          } catch (e) {
374            console.error("Auto-reverification failed:", e);
375          } finally {
376            setIsLoading(false);
377          }
378        }
379      } catch (err) {
380        console.error("Verification sync failed:", err);
381      }
382    };
383    checkStatus();
384  }, []);
385  reactExports.useEffect(() => {
386    const loadData = async () => {
387      var _a, _b;
388      try {
389        const [info, modules, menuConfig] = await Promise.all([
390          api.getSystemInfo().catch(() => ({ dataSource: "ERROR", dbLatency: 0 })),
391          api.getAdminModules().catch(() => []),
392          api.getSystemSetting("admin_menu_config").catch(() => null)
393        ]);
394        setSystemInfo(info);
395        setDbModules(modules || []);
396        if (menuConfig && Array.isArray(menuConfig.value)) {
397          const existingIds = new Set(menuConfig.value.map((item) => item.id));
398          const missingModules = Object.keys(LEGACY_COMPONENT_MAP).filter((id) => !existingIds.has(id));
399          if (missingModules.length > 0) {
400            const updatedMenu = [...menuConfig.value];
401            missingModules.forEach((id) => {
402              if (id === "live_monitor") {
403                const insertIdx = updatedMenu.findIndex((item) => item.id === "logs" || item.id === "info" || item.id === "dashboard");
404                if (insertIdx !== -1) {
405                  updatedMenu.splice(insertIdx + 1, 0, { id: "live_monitor", type: "module" });
406                  return;
407                }
408              }
409              updatedMenu.push({ id, type: "module" });
410            });
411            setCustomMenu(updatedMenu);
412          } else {
413            setCustomMenu(menuConfig.value);
414          }
415        } else {
416          setCustomMenu(null);
417        }
418        setEntryError(null);
419      } catch (err) {
420        console.error("CRITICAL: AdminPage loadData failed", err);
421        if (((_a = err.message) == null ? void 0 : _a.includes("403")) || ((_b = err.message) == null ? void 0 : _b.includes("Access Denied"))) {
422          setEntryError("Session Authorization Failed. Please ensure you are logged in as an administrator.");
423        } else {
424          setEntryError("Failed to initialize Admin Studio. Check your connection.");
425        }
426      }
427    };
428    loadData();
429  }, [refreshTrigger]);
430  reactExports.useEffect(() => {
431    const loadPins = async () => {
432      try {
433        const dbPins = await api.getAdminPins();
434        if (Array.isArray(dbPins) && dbPins.length > 0) {
435          setPinnedModuleIds(dbPins);
436          localStorage.setItem("hamienet_admin_pins", JSON.stringify(dbPins));
437          return;
438        }
439        const localData = localStorage.getItem("hamienet_admin_pins");
440        if (localData) {
441          try {
442            const parsed = JSON.parse(localData);
443            if (Array.isArray(parsed)) {
444              setPinnedModuleIds(parsed);
445            }
446          } catch (e) {
447            console.error("Failed to parse local pins", e);
448          }
449        }
450      } catch (err) {
451        console.error("Failed to load pinned modules", err);
452        const localData = localStorage.getItem("hamienet_admin_pins");
453        if (localData) {
454          try {
455            const parsed = JSON.parse(localData);
456            if (Array.isArray(parsed)) setPinnedModuleIds(parsed);
457          } catch (e) {
458          }
459        }
460      }
461    };
462    if (!isLocked) loadPins();
463  }, [isLocked]);
464  const allModules = reactExports.useMemo(() => {
465    const list = [];
466    Object.entries(LEGACY_COMPONENT_MAP).forEach(([id, cfg]) => {
467      list.push({
468        id,
469        label: cfg.label,
470        iconKey: cfg.iconKey,
471        type: "module",
472        component: getComponentForModule(cfg.filename)
473      });
474    });
475    dbModules.forEach((mod) => {
476      if (!list.find((l) => l.id === mod.id)) {
477        list.push({
478          id: mod.id,
479          label: mod.name,
480          iconKey: mod.iconKey || "box",
481          type: "module",
482          component: getComponentForModule(mod.id) || (() => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-10", children: [
483            /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-bold mb-4", children: mod.name }),
484            /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "p-4 bg-zinc-900 rounded", children: mod.content })
485          ] }))
486        });
487      }
488    });
489    return list;
490  }, [dbModules]);
491  const authorizedModules = reactExports.useMemo(() => {
492    try {
493      if (!activeRole) return [];
494      console.log("[AdminPortal] Current activeRole:", {
495        id: activeRole.id,
496        name: activeRole.name,
497        isSuperAdmin: activeRole.isSuperAdmin,
498        allowedType: typeof activeRole.allowedModules,
499        allowedIsArray: Array.isArray(activeRole.allowedModules)
500      });
501      return allModules.filter((mod) => {
502        if (!mod) return false;
503        if (activeRole.isSuperAdmin) return true;
504        let allowed = activeRole.allowedModules;
505        if (typeof allowed === "string") {
506          try {
507            allowed = JSON.parse(allowed);
508          } catch (e) {
509            return false;
510          }
511        }
512        if (!allowed || !Array.isArray(allowed)) return false;
513        if (allowed.includes("all")) return true;
514        return allowed.includes(mod.id);
515      });
516    } catch (err) {
517      console.error("Critical error in authorizedModules filter:", err);
518      return [];
519    }
520  }, [allModules, activeRole]);
521  const activeModuleItem = authorizedModules.find((m) => m.id === activeModuleId);
522  const ActiveModule = activeModuleItem == null ? void 0 : activeModuleItem.component;
523  const filteredMenu = reactExports.useMemo(() => {
524    if (!customMenu) return null;
525    if (!hideLessUsed) return customMenu;
526    const result = [];
527    let tempHeading = null;
528    let tempSeparator = null;
529    customMenu.forEach((item) => {
530      if (item.type === "heading") {
531        tempHeading = item;
532      } else if (item.type === "separator") {
533        tempSeparator = item;
534      } else {
535        const mod = authorizedModules.find((m) => m.id === item.id);
536        if (mod && !LESS_USED_MODULE_IDS.has(item.id)) {
537          if (tempSeparator) {
538            result.push(tempSeparator);
539            tempSeparator = null;
540          }
541          if (tempHeading) {
542            result.push(tempHeading);
543            tempHeading = null;
544          }
545          result.push(item);
546        }
547      }
548    });
549    return result;
550  }, [customMenu, hideLessUsed, authorizedModules]);
551  reactExports.useEffect(() => {
552    if (activeModuleItem) {
553      document.title = `${activeModuleItem.label} | Admin Studio`;
554    } else {
555      document.title = "Admin Studio";
556    }
557    return () => {
558      document.title = "HamieNet";
559    };
560  }, [activeModuleItem]);
561  const verifyPin = async (pinToVerify) => {
562    if (pinToVerify.length < 6) return;
563    setIsLoading(true);
564    setError("");
565    try {
566      const data = await api.verifyAdminPin(pinToVerify, rememberMe);
567      if (data && data.id) {
568        setActiveRole(data);
569        setIsLocked(false);
570        if (rememberMe && data.adminToken) {
571          localStorage.setItem("hamienet_admin_grant", data.adminToken);
572        }
573      } else {
574        setError("Invalid PIN");
575        setPin("");
576      }
577    } catch (err) {
578      console.error("PIN verification error", err);
579      setError("Verification failed");
580      setPin("");
581    } finally {
582      setIsLoading(false);
583    }
584  };
585  const handlePinSubmit = async (e) => {
586    e == null ? void 0 : e.preventDefault();
587    await verifyPin(pin);
588  };
589  const handleLogout = () => {
590    localStorage.removeItem("hamienet_admin_grant");
591    setIsLocked(true);
592    setActiveRole(null);
593    setError("");
594  };
595  const toggleGroup = (name) => {
596    setExpandedGroups((prev) => prev.includes(name) ? prev.filter((n) => n !== name) : [...prev, name]);
597  };
598  const navigateTo = (id, e) => {
599    if (e && (e.ctrlKey || e.metaKey || e.button === 1)) {
600      return;
601    }
602    if (e) {
603      e.preventDefault();
604    }
605    setActiveModuleId(id);
606    window.history.pushState({}, "", `/admin/${id}`);
607    setIsSidebarCollapsed(true);
608  };
609  const togglePin = async (moduleId, e) => {
610    e.preventDefault();
611    e.stopPropagation();
612    const currentPins = Array.isArray(pinnedModuleIds) ? pinnedModuleIds : [];
613    const newPins = currentPins.includes(moduleId) ? currentPins.filter((id) => id !== moduleId) : [...currentPins, moduleId];
614    setPinnedModuleIds(newPins);
615    localStorage.setItem("hamienet_admin_pins", JSON.stringify(newPins));
616    try {
617      await api.saveAdminPins(newPins);
618    } catch (err) {
619      console.error("Failed to save pins to DB:", err);
620    }
621  };
622  if (!user || user.role !== "ADMIN") {
623    return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-screen items-center justify-center bg-[#050505] text-white p-10 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-md", children: [
624      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-16 h-16 bg-red-600/20 rounded-full flex items-center justify-center mb-6 mx-auto", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ShieldAlert, { className: "text-red-600", size: 32 }) }),
625      /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-3xl font-black mb-4 tracking-tighter uppercase", children: "Restricted Area" }),
626      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-zinc-500 mb-8 leading-relaxed", children: "Access to the Admin Studio requires an authenticated administrator account. Please sign in with your administrative credentials to continue." }),
627      /* @__PURE__ */ jsxRuntimeExports.jsx(
628        "button",
629        {
630          onClick: () => window.location.href = "/?auth=login",
631          className: "px-8 py-3 bg-white text-black rounded-full font-bold hover:bg-zinc-200 transition-all",
632          children: "Return to Site"
633        }
634      )
635    ] }) });
636  }
637  if (isLocked) {
638    return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-screen items-center justify-center bg-[#111]", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "w-full max-w-sm p-8 bg-zinc-900 border border-zinc-800 rounded-2xl shadow-2xl", children: [
639      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-8", children: [
640        /* @__PURE__ */ jsxRuntimeExports.jsx(Shield, { size: 48, className: "mx-auto text-indigo-500 mb-4" }),
641        /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-2xl font-bold text-white", children: "Admin Studio" })
642      ] }),
643      /* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handlePinSubmit, children: [
644        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center gap-2 mb-4", children: Array.from({ length: 6 }).map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(
645          "input",
646          {
647            type: "password",
648            maxLength: 1,
649            autoFocus: i === 0,
650            value: pin[i] || "",
651            className: "w-10 h-12 bg-zinc-800 border border-zinc-700 rounded text-center text-xl text-white outline-none focus:border-indigo-500",
652            onChange: (e) => {
653              var _a;
654              const val = e.target.value.replace(/[^0-9]/g, "");
655              if (!val && e.target.value) return;
656              const newPinArr = pin.split("");
657              newPinArr[i] = val;
658              const nextPin = newPinArr.join("");
659              setPin(nextPin);
660              if (val && i < 5) {
661                (_a = e.target.nextElementSibling) == null ? void 0 : _a.focus();
662              }
663              if (nextPin.length === 6) {
664                verifyPin(nextPin);
665              }
666            }
667          },
668          i
669        )) }),
670        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center gap-3 mb-6 px-1", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "flex items-center gap-2 cursor-pointer group", children: [
671          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative flex items-center justify-center", children: [
672            /* @__PURE__ */ jsxRuntimeExports.jsx(
673              "input",
674              {
675                type: "checkbox",
676                className: "sr-only",
677                checked: rememberMe,
678                onChange: (e) => setRememberMe(e.target.checked)
679              }
680            ),
681            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-5 h-5 border rounded transition-all duration-200 flex items-center justify-center ${rememberMe ? "bg-indigo-600 border-indigo-600" : "bg-transparent border-zinc-700 group-hover:border-zinc-500"}`, children: rememberMe && /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-3.5 h-3.5 text-white", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: "4", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" }) }) })
682          ] }),
683          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-zinc-400 group-hover:text-zinc-300 transition-colors select-none", children: "Remember this device" })
684        ] }) }),
685        error && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-red-400 text-center text-sm", children: error }),
686        /* @__PURE__ */ jsxRuntimeExports.jsx("button", { type: "submit", disabled: isLoading || pin.length < 6, className: "w-full mt-6 bg-indigo-600 text-white font-bold py-3 rounded-lg", children: isLoading ? /* @__PURE__ */ jsxRuntimeExports.jsx(RefreshCw, { className: "animate-spin mx-auto" }) : "Unlock" })
687      ] })
688    ] }) });
689  }
690  if (entryError) {
691    return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col h-screen items-center justify-center bg-black text-white p-10 text-center", children: [
692      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-16 h-16 bg-red-600/20 rounded-full flex items-center justify-center mb-6", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-2xl font-bold text-red-500", children: "!" }) }),
693      /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-2xl font-black mb-4 uppercase", children: "Initialization Error" }),
694      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-zinc-500 mb-8 max-w-sm text-sm", children: entryError }),
695      /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: () => window.location.reload(), className: "px-6 py-2 bg-white text-black rounded-full font-bold hover:bg-zinc-200", children: "Retry Connection" })
696    ] });
697  }
698  return /* @__PURE__ */ jsxRuntimeExports.jsxs(SettingsProvider, { children: [
699    /* @__PURE__ */ jsxRuntimeExports.jsx("style", { children: `
700            .sidebar-transition { transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1); }
701            .item-transition { transition: all 0.2s ease; }
702            .custom-scrollbar::-webkit-scrollbar { width: 4px; }
703            .custom-scrollbar::-webkit-scrollbar-track { background: transparent; }
704            .custom-scrollbar::-webkit-scrollbar-thumb { background: #333; border-radius: 10px; }
705            .custom-scrollbar::-webkit-scrollbar-thumb:hover { background: #444; }
706        ` }),
707    /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-screen bg-zinc-950 text-white overflow-hidden font-sans", children: [
708      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `bg-[#0d0d0d] border-r border-zinc-800 flex flex-col sidebar-transition ${isSidebarCollapsed ? "w-20" : "w-72"}`, children: [
709        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "h-16 border-b border-zinc-800 flex items-center justify-between px-5 shrink-0", children: [
710          !isSidebarCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
711            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-8 h-8 bg-indigo-600 rounded flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Shield, { size: 18, className: "text-white" }) }),
712            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col", children: [
713              /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-bold tracking-tight text-sm leading-tight", children: [
714                "Command Center (",
715                nodeName,
716                ")"
717              ] }),
718              (() => {
719                var _a, _b;
720                const version = (_a = document.querySelector('meta[name="git-version"]')) == null ? void 0 : _a.getAttribute("content");
721                const buildTime = (_b = document.querySelector('meta[name="build-time"]')) == null ? void 0 : _b.getAttribute("content");
722                let formattedBuildTime = "";
723                if (buildTime) {
724                  try {
725                    const d = new Date(buildTime);
726                    if (!isNaN(d.getTime())) {
727                      const pad = (n) => String(n).padStart(2, "0");
728                      formattedBuildTime = `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
729                    } else {
730                      formattedBuildTime = buildTime;
731                    }
732                  } catch (e) {
733                    formattedBuildTime = buildTime;
734                  }
735                }
736                return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col text-[10px] text-zinc-500 font-mono tracking-wider mt-0.5 leading-tight", children: [
737                  version && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: version }),
738                  formattedBuildTime && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
739                    "Build: ",
740                    formattedBuildTime
741                  ] })
742                ] });
743              })()
744            ] })
745          ] }),
746          /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: () => setIsSidebarCollapsed(!isSidebarCollapsed), className: "p-2 hover:bg-zinc-800 rounded-lg text-zinc-500 hover:text-white transition-colors", children: isSidebarCollapsed ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronsRight, { size: 20 }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronsLeft, { size: 20 }) })
747        ] }),
748        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-2 space-y-2", children: [
749          !isSidebarCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsxs(
750            "button",
751            {
752              onClick: () => setIsQuickJumpOpen(true),
753              className: "w-full flex items-center gap-2 px-3 py-1.5 bg-zinc-900 border border-zinc-800 rounded-lg text-[10px] text-zinc-500 hover:border-zinc-700 transition-colors mb-2",
754              children: [
755                /* @__PURE__ */ jsxRuntimeExports.jsx(Search, { size: 14 }),
756                /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Quick Jump..." }),
757                /* @__PURE__ */ jsxRuntimeExports.jsx("kbd", { className: "ml-auto font-mono opacity-50", children: "Ctrl+K" })
758              ]
759            }
760          ),
761          !isSidebarCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-3 py-2 flex items-center justify-between bg-zinc-900/40 border border-zinc-800/50 rounded-lg mb-3 select-none", children: [
762            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-black text-zinc-500 uppercase tracking-widest", children: "Hide Utilities" }),
763            /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "relative flex items-center cursor-pointer", children: [
764              /* @__PURE__ */ jsxRuntimeExports.jsx(
765                "input",
766                {
767                  type: "checkbox",
768                  checked: hideLessUsed,
769                  onChange: (e) => setHideLessUsed(e.target.checked),
770                  className: "sr-only peer"
771                }
772              ),
773              /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `w-8 h-4 rounded-full transition-all duration-200 relative ${hideLessUsed ? "bg-indigo-600" : "bg-zinc-800"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `absolute top-0.5 w-3 h-3 bg-white rounded-full transition-all duration-200 ${hideLessUsed ? "left-[17px]" : "left-0.5"}` }) })
774            ] })
775          ] }),
776          Array.isArray(pinnedModuleIds) && pinnedModuleIds.length > 0 && !isSidebarCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
777            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 px-3 py-1.5 text-[10px] uppercase tracking-widest font-bold text-indigo-400/70 bg-indigo-500/5 rounded-md mb-1", children: [
778              /* @__PURE__ */ jsxRuntimeExports.jsx(Pin, { size: 10, className: "rotate-45" }),
779              /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Pinned Access" })
780            ] }),
781            /* @__P
781URE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-1", children: pinnedModuleIds.filter((id) => !!id).map((id) => {
782              const mod = authorizedModules.find((m) => m.id === id);
783              if (!mod) return null;
784              const Icon = ICON_MAP[mod.iconKey] || Box;
785              const isActive = activeModuleId === mod.id;
786              return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "group relative", children: [
787                /* @__PURE__ */ jsxRuntimeExports.jsxs(
788                  "a",
789                  {
790                    href: `/admin/${id}`,
791                    onClick: (e) => navigateTo(id, e),
792                    className: `w-full flex items-center gap-3 p-1.5 rounded-lg text-[13px] item-transition ${isActive ? "bg-indigo-600/20 text-indigo-300 border border-indigo-600/30" : "text-zinc-400 hover:bg-zinc-800/50 hover:text-zinc-200 border border-transparent"}`,
793                    children: [
794                      /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { size: 16, className: isActive ? "text-indigo-400" : "" }),
795                      /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate flex-1 text-left", children: mod.label })
796                    ]
797                  }
798                ),
799                /* @__PURE__ */ jsxRuntimeExports.jsx(
800                  "button",
801                  {
802                    onClick: (e) => togglePin(id, e),
803                    className: "absolute right-2 top-1/2 -translate-y-1/2 p-1.5 opacity-0 group-hover:opacity-100 hover:bg-zinc-700/50 rounded-md text-zinc-500 hover:text-indigo-400 transition-all",
804                    title: "Unpin",
805                    children: /* @__PURE__ */ jsxRuntimeExports.jsx(Pin, { size: 14, className: "fill-indigo-500/30" })
806                  }
807                )
808              ] }, `pinned-${id}`);
809            }) })
810          ] }),
811          filteredMenu ? filteredMenu.map((item) => {
812            if (item.type === "separator") {
813              return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-px bg-zinc-800/60 my-4 mx-2" }, item.id);
814            }
815            if (item.type === "heading") {
816              return !isSidebarCollapsed ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-3 py-1.5 text-[10px] uppercase tracking-widest font-black text-indigo-400/80 bg-indigo-500/5 rounded-md border border-indigo-600/10 mb-1 mt-3", children: item.label || "SECTION" }, item.id) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-px bg-zinc-800/60 my-4 mx-2" }, item.id);
817            }
818            const mod = authorizedModules.find((m) => m.id === item.id);
819            if (!mod) return null;
820            const Icon = ICON_MAP[mod.iconKey] || Box;
821            const isActive = activeModuleId === mod.id;
822            return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "group relative", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
823              "a",
824              {
825                href: `/admin/${mod.id}`,
826                onClick: (e) => navigateTo(mod.id, e),
827                className: `w-full flex items-center gap-3 p-1.5 rounded-lg text-[13px] item-transition ${isActive ? "bg-indigo-600/10 text-indigo-400 border border-indigo-600/20" : "text-zinc-400 hover:bg-zinc-800/50 hover:text-zinc-200 border border-transparent"} ${isSidebarCollapsed ? "justify-center" : ""}`,
828                title: isSidebarCollapsed ? mod.label : "",
829                children: [
830                  /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { size: 16, className: isActive ? "text-indigo-400" : "" }),
831                  !isSidebarCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
832                    /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate flex-1 text-left", children: mod.label }),
833                    /* @__PURE__ */ jsxRuntimeExports.jsx(
834                      "button",
835                      {
836                        onClick: (e) => togglePin(mod.id, e),
837                        className: `p-1 rounded-md transition-all ${Array.isArray(pinnedModuleIds) && pinnedModuleIds.includes(mod.id) ? "text-indigo-400 opacity-100" : "text-zinc-600 hover:text-zinc-400 opacity-0 group-hover:opacity-100"}`,
838                        children: /* @__PURE__ */ jsxRuntimeExports.jsx(Pin, { size: 14, className: Array.isArray(pinnedModuleIds) && pinnedModuleIds.includes(mod.id) ? "fill-indigo-500/30" : "" })
839                      }
840                    )
841                  ] })
842                ]
843              }
844            ) }, mod.id);
845          }) : ADMIN_MENU_GROUPS.map((group) => {
846            var _a;
847            const isExpanded = expandedGroups.includes(group.name);
848            const groupItems = authorizedModules.filter((m) => group.items.includes(m.id) && (!hideLessUsed || !LESS_USED_MODULE_IDS.has(m.id)));
849            const visibleChildren = ((_a = group.children) == null ? void 0 : _a.filter((childId) => {
850              const childMod = authorizedModules.find((m) => m.id === childId);
851              return childMod && (!hideLessUsed || !LESS_USED_MODULE_IDS.has(childId));
852            })) || [];
853            const hasChildren = visibleChildren.length > 0;
854            if (groupItems.length === 0 && !hasChildren) return null;
855            return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
856              !isSidebarCollapsed ? /* @__PURE__ */ jsxRuntimeExports.jsxs(
857                "button",
858                {
859                  onClick: () => toggleGroup(group.name),
860                  className: "w-full flex items-center gap-2 px-3 py-1.5 text-[10px] uppercase tracking-widest font-black text-zinc-500 hover:text-zinc-300 transition-colors bg-zinc-900/40 rounded-md border border-zinc-800/50 mb-1",
861                  children: [
862                    /* @__PURE__ */ jsxRuntimeExports.jsx(group.icon, { size: 12 }),
863                    /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: group.name }),
864                    /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { size: 10, className: `ml-auto transition-transform ${isExpanded ? "" : "-rotate-90"}` })
865                  ]
866                }
867              ) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-px bg-zinc-800 my-4 mx-2" }),
868              (isExpanded || isSidebarCollapsed) && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
869                groupItems.map((mod) => {
870                  const Icon = ICON_MAP[mod.iconKey] || Box;
871                  const isActive = activeModuleId === mod.id;
872                  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "group relative", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
873                    "a",
874                    {
875                      href: `/admin/${mod.id}`,
876                      onClick: (e) => navigateTo(mod.id, e),
877                      className: `w-full flex items-center gap-3 p-1.5 rounded-lg text-[13px] item-transition ${isActive ? "bg-indigo-600/10 text-indigo-400 border border-indigo-600/20" : "text-zinc-400 hover:bg-zinc-800/50 hover:text-zinc-200 border border-transparent"} ${isSidebarCollapsed ? "justify-center" : ""}`,
878                      title: isSidebarCollapsed ? mod.label : "",
879                      children: [
880                        /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { size: 16, className: isActive ? "text-indigo-400" : "" }),
881                        !isSidebarCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
882                          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate flex-1 text-left", children: mod.label }),
883                          /* @__PURE__ */ jsxRuntimeExports.jsx(
884                            "button",
885                            {
886                              onClick: (e) => togglePin(mod.id, e),
887                              className: `p-1 rounded-md transition-all ${Array.isArray(pinnedModuleIds) && pinnedModuleIds.includes(mod.id) ? "text-indigo-400 opacity-100" : "text-zinc-600 hover:text-zinc-400 opacity-0 group-hover:opacity-100"}`,
888                              children: /* @__PURE__ */ jsxRuntimeExports.jsx(Pin, { size: 14, className: Array.isArray(pinnedModuleIds) && pinnedModuleIds.includes(mod.id) ? "fill-indigo-500/30" : "" })
889                            }
890                          )
891                        ] })
892                      ]
893                    }
894                  ) }, mod.id);
895                }),
896                group.name === "System Settings" && !isSidebarCollapsed && isExpanded && hasChildren && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ml-4 pl-4 border-l border-zinc-800 space-y-1 mt-1", children: visibleChildren.map((childId) => {
897                  const childMod = authorizedModules.find((m) => m.id === childId);
898                  if (!childMod) return null;
899                  const ChildIcon = ICON_MAP[childMod.iconKey] || Settings;
900                  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
901                    "a",
902                    {
903                      href: `/admin/${childId}`,
904                      onClick: (e) => navigateTo(childId, e),
905                      className: `w-full flex items-center gap-3 p-2 rounded-lg text-xs item-transition ${activeModuleId === childId ? "text-indigo-400 font-bold" : "text-zinc-500 hover:text-zinc-300"}`,
906                      children: [
907                        /* @__PURE__ */ jsxRuntimeExports.jsx(ChildIcon, { size: 14 }),
908                        /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: childMod.label })
909                      ]
910                    },
911                    childId
912                  );
913                }) })
914              ] })
915            ] }, group.name);
916          })
917        ] }),
918        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-4 border-t border-zinc-800 bg-[#0a0a0a]", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
919          !isSidebarCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
920            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-bold truncate text-white uppercase tracking-tighter", children: activeRole == null ? void 0 : activeRole.name }),
921            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1 text-[10px] text-zinc-500", children: [
922              /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-1.5 h-1.5 bg-emerald-500 rounded-full animate-pulse" }),
923              /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Verified Admin" })
924            ] }),
925            systemInfo && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3 mt-2 text-[9px] font-mono text-zinc-500", children: [
926              /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1 cursor-help", title: "Data Source", children: [
927                /* @__PURE__ */ jsxRuntimeExports.jsx(Database, { size: 10, className: systemInfo.dataSource === "LIVE" ? "text-emerald-500" : "text-amber-500" }),
928                /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: systemInfo.dataSource })
929              ] }),
930              /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1 cursor-help", title: "DB Latency", children: [
931                /* @__PURE__ */ jsxRuntimeExports.jsx(Activity, { size: 10, className: systemInfo.dbLatency < 50 ? "text-emerald-500" : systemInfo.dbLatency < 100 ? "text-amber-500" : "text-red-500" }),
932                /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
933                  systemInfo.dbLatency,
934                  "ms"
935                ] })
936              ] })
937            ] })
938          ] }),
939          /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: onExit || handleLogout, className: "p-2.5 hover:bg-zinc-800 rounded-lg text-zinc-500 hover:text-white transition-all", title: "Exit / Lock", children: /* @__PURE__ */ jsxRuntimeExports.jsx(LogOut, { size: 18 }) })
940        ] }) })
941      ] }),
942      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 flex flex-col overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsx("main", { className: "flex-1 overflow-auto bg-black relative flex flex-col min-h-0 custom-scrollbar", children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full flex-col items-center justify-center gap-4", children: [
943        /* @__PURE__ */ jsxRuntimeExports.jsx(RefreshCw, { className: "animate-spin text-indigo-500", size: 32 }),
944        /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-zinc-500 font-mono uppercase tracking-widest", children: "Initialising Module..." })
945      ] }), children: ActiveModule && /* @__PURE__ */ jsxRuntimeExports.jsx(ActiveModule, { refreshTrigger, onUploadClick, activeRole }) }) }) }),
946      /* @__PURE__ */ jsxRuntimeExports.jsx(
947        QuickJump,
948        {
949          isOpen: isQuickJumpOpen,
950          onClose: () => setIsQuickJumpOpen(false),
951          modules: authorizedModules,
952          onSelect: navigateTo
953        }
954      )
955    ] })
956  ] });
957};
958const AdminApp = ({ onExit }) => {
959  const content = /* @__PURE__ */ jsxRuntimeExports.jsx(AdminPage, { onUploadClick: () => alert("Uploads handled via Media Library in Admin Mode"), onExit });
960  if (onExit) {
961    return content;
962  }
963  return /* @__PURE__ */ jsxRuntimeExports.jsx(SettingsProvider, { children: content });
964};
965export {
966  AdminApp as default
967};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.