364 lines
80 KiB
HTML
364 lines
80 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>andishkade-foolad — graphify tree viewer</title>
|
|
<style>
|
|
body {
|
|
font-family: 'Segoe UI', sans-serif;
|
|
margin: 0;
|
|
padding: 0;
|
|
background: #f9f9f9;
|
|
color: #333;
|
|
}
|
|
h1 {
|
|
margin: 20px 0 0 24px;
|
|
font-size: 2.2rem;
|
|
font-weight: bold;
|
|
color: #1e3a56;
|
|
}
|
|
.controls {
|
|
margin: 20px 0 15px 24px;
|
|
}
|
|
button {
|
|
margin-right: 10px;
|
|
padding: 8px 18px;
|
|
background: #007bff;
|
|
color: #fff;
|
|
border: none;
|
|
border-radius: 5px;
|
|
font-size: 0.95rem;
|
|
cursor: pointer;
|
|
transition: background 0.2s ease-in-out;
|
|
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
|
}
|
|
button:hover {
|
|
background: #0056b3;
|
|
}
|
|
button:active {
|
|
background: #004085;
|
|
}
|
|
#tree-container {
|
|
width: calc(100vw - 48px); /* Adjust for body margin/padding */
|
|
height: 85vh;
|
|
overflow: auto;
|
|
border-radius: 8px;
|
|
background: #fff;
|
|
margin-left: 24px;
|
|
margin-right: 24px;
|
|
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
|
|
border: 1px solid #ddd;
|
|
}
|
|
svg {
|
|
background: #fff;
|
|
border-radius: 8px;
|
|
display: block; /* Important for D3 */
|
|
}
|
|
.node circle {
|
|
stroke-width: 2.5px;
|
|
}
|
|
.node text { /* Base style for the <text> container */
|
|
font: 13px 'Segoe UI', sans-serif;
|
|
paint-order: stroke fill; /* Ensures text is readable over lines */
|
|
stroke: #fff; /* White halo */
|
|
stroke-width: 3px; /* Halo thickness */
|
|
stroke-linejoin: round;
|
|
stroke-opacity: 0.85; /* Halo opacity */
|
|
}
|
|
.link {
|
|
fill: none;
|
|
stroke-opacity: 0.7;
|
|
stroke-width: 2px;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h1>andishkade-foolad — Knowledge Graph</h1>
|
|
<div class="controls">
|
|
<button onclick="expandAll()">Expand All</button>
|
|
<button onclick="collapseAll()">Collapse All</button>
|
|
<button onclick="resetView()">Reset View</button>
|
|
</div>
|
|
<div id="tree-container">
|
|
<svg id="tree-svg" width="6000" height="8000"></svg>
|
|
</div>
|
|
|
|
<script src="https://d3js.org/d3.v7.min.js"></script>
|
|
<script>
|
|
const initialJsonData = {"name":"andishkade-foolad","total_count":1073,"children":[{"name":".agents","total_count":64,"children":[{"name":"hooks","total_count":14,"children":[{"name":"caveman-mode-tracker.js","total_count":4,"children":[{"name":"main()","total_count":1,"children":[]},{"name":"readStdin()","total_count":1,"children":[]},{"name":"respond()","total_count":1,"children":[]},{"name":"{ run: runStats }","total_count":1,"children":[]}]},{"name":"caveman-stats.js","total_count":10,"children":[{"name":"buildStats()","total_count":1,"children":[]},{"name":"collectUsage()","total_count":1,"children":[]},{"name":"compactNumber()","total_count":1,"children":[]},{"name":"formatNumber()","total_count":1,"children":[]},{"name":"formatStats()","total_count":1,"children":[]},{"name":"fs","total_count":1,"children":[]},{"name":"path","total_count":1,"children":[]},{"name":"readJsonl()","total_count":1,"children":[]},{"name":"run()","total_count":1,"children":[]},{"name":"writeLifetimeSuffix()","total_count":1,"children":[]}]}]},{"name":"skills","total_count":50,"children":[{"name":"caveman-compress","total_count":50,"children":[{"name":"scripts","total_count":50,"children":[{"name":"__init__.py","total_count":1,"children":[{"name":"Caveman compress scripts. This package provides tools to compress natural lan","total_count":1,"children":[]}]},{"name":"benchmark.py","total_count":4,"children":[{"name":"benchmark_pair()","total_count":1,"children":[]},{"name":"count_tokens()","total_count":1,"children":[]},{"name":"main()","total_count":1,"children":[]},{"name":"print_table()","total_count":1,"children":[]}]},{"name":"cli.py","total_count":2,"children":[{"name":"main()","total_count":1,"children":[]},{"name":"print_usage()","total_count":1,"children":[]}]},{"name":"compress.py","total_count":13,"children":[{"name":"backup_dir_for()","total_count":1,"children":[]},{"name":"build_compress_prompt()","total_count":1,"children":[]},{"name":"build_fix_prompt()","total_count":1,"children":[]},{"name":"call_claude()","total_count":1,"children":[]},{"name":"compress_file()","total_count":1,"children":[]},{"name":"Heuristic denylist for files that must never be shipped to a third-party API.","total_count":1,"children":[]},{"name":"is_sensitive_path()","total_count":1,"children":[]},{"name":"Resolve the out-of-tree backup directory for a given source file. Backups","total_count":1,"children":[]},{"name":"Send a prompt to Claude. Prefers the Anthropic SDK when ANTHROPIC_API_KEY","total_count":1,"children":[]},{"name":"Split YAML frontmatter from body. Returns (frontmatter, body). Memory fil","total_count":1,"children":[]},{"name":"split_frontmatter()","total_count":1,"children":[]},{"name":"Strip outer ```markdown ... ``` fence when it wraps the entire output.","total_count":1,"children":[]},{"name":"strip_llm_wrapper()","total_count":1,"children":[]}]},{"name":"detect.py","total_count":10,"children":[{"name":"_is_code_line()","total_count":1,"children":[]},{"name":"_is_json_content()","total_count":1,"children":[]},{"name":"_is_yaml_content()","total_count":1,"children":[]},{"name":"Check if a line looks like code.","total_count":1,"children":[]},{"name":"Check if content is valid JSON.","total_count":1,"children":[]},{"name":"Classify a file as 'natural_language', 'code', 'config', or 'unknown'. Re","total_count":1,"children":[]},{"name":"detect_file_type()","total_count":1,"children":[]},{"name":"Heuristic: check if content looks like YAML.","total_count":1,"children":[]},{"name":"Return True if the file is natural language and should be compressed.","total_count":1,"children":[]},{"name":"should_compress()","total_count":1,"children":[]}]},{"name":"validate.py","total_count":19,"children":[{"name":".__init__()","total_count":1,"children":[]},{"name":".add_error()","total_count":1,"children":[]},{"name":".add_warning()","total_count":1,"children":[]},{"name":"count_bullets()","total_count":1,"children":[]},{"name":"extract_code_blocks()","total_count":1,"children":[]},{"name":"extract_headings()","total_count":1,"children":[]},{"name":"extract_inline_codes()","total_count":1,"children":[]},{"name":"extract_paths()","total_count":1,"children":[]},{"name":"extract_urls()","total_count":1,"children":[]},{"name":"Line-based fenced code block extractor. Handles ``` and ~~~ fences with v","total_count":1,"children":[]},{"name":"read_file()","total_count":1,"children":[]},{"name":"validate()","total_count":1,"children":[]},{"name":"validate_bullets()","total_count":1,"children":[]},{"name":"validate_code_blocks()","total_count":1,"children":[]},{"name":"validate_headings()","total_count":1,"children":[]},{"name":"validate_inline_codes()","total_count":1,"children":[]},{"name":"validate_paths()","total_count":1,"children":[]},{"name":"validate_urls()","total_count":1,"children":[]},{"name":"ValidationResult","total_count":1,"children":[]}]},{"name":"__main__.py","total_count":1,"children":[]}]}]}]}]},{"name":"frontend","total_count":781,"children":[{"name":"package.json","total_count":47,"children":[{"name":"@eslint/js","total_count":1,"children":[]},{"name":"@radix-ui/react-slot","total_count":1,"children":[]},{"name":"@react-three/drei","total_count":1,"children":[]},{"name":"@react-three/fiber","total_count":1,"children":[]},{"name":"@tailwindcss/vite","total_count":1,"children":[]},{"name":"@types/leaflet","total_count":1,"children":[]},{"name":"@types/node","total_count":1,"children":[]},{"name":"@types/react","total_count":1,"children":[]},{"name":"@types/react-dom","total_count":1,"children":[]},{"name":"@vitejs/plugin-react","total_count":1,"children":[]},{"name":"apexcharts","total_count":1,"children":[]},{"name":"build","total_count":1,"children":[]},{"name":"class-variance-authority","total_count":1,"children":[]},{"name":"clsx","total_count":1,"children":[]},{"name":"dependencies","total_count":1,"children":[]},{"name":"dev","total_count":1,"children":[]},{"name":"devDependencies","total_count":1,"children":[]},{"name":"eslint","total_count":1,"children":[]},{"name":"eslint-plugin-react-hooks","total_count":1,"children":[]},{"name":"eslint-plugin-react-refresh","total_count":1,"children":[]},{"name":"framer-motion","total_count":1,"children":[]},{"name":"globals","total_count":1,"children":[]},{"name":"gsap","total_count":1,"children":[]},{"name":"leaflet","total_count":1,"children":[]},{"name":"lenis","total_count":1,"children":[]},{"name":"lint","total_count":1,"children":[]},{"name":"lucide-react","total_count":1,"children":[]},{"name":"mind-elixir","total_count":1,"children":[]},{"name":"name","total_count":1,"children":[]},{"name":"preview","total_count":1,"children":[]},{"name":"private","total_count":1,"children":[]},{"name":"react","total_count":1,"children":[]},{"name":"react-apexcharts","total_count":1,"children":[]},{"name":"react-dom","total_count":1,"children":[]},{"name":"react-globe.gl","total_count":1,"children":[]},{"name":"react-leaflet","total_count":1,"children":[]},{"name":"react-router-dom","total_count":1,"children":[]},{"name":"scripts","total_count":1,"children":[]},{"name":"tailwind-merge","total_count":1,"children":[]},{"name":"tailwindcss","total_count":1,"children":[]},{"name":"three","total_count":1,"children":[]},{"name":"three-globe","total_count":1,"children":[]},{"name":"type","total_count":1,"children":[]},{"name":"typescript","total_count":1,"children":[]},{"name":"typescript-eslint","total_count":1,"children":[]},{"name":"version","total_count":1,"children":[]},{"name":"vite","total_count":1,"children":[]}]},{"name":"public","total_count":1,"children":[{"name":"sw.js","total_count":1,"children":[]}]},{"name":"scripts","total_count":47,"children":[{"name":"fetch-competitor-news.mjs","total_count":17,"children":[{"name":"__dirname","total_count":1,"children":[]},{"name":"COMPANIES","total_count":1,"children":[]},{"name":"daemon()","total_count":1,"children":[]},{"name":"decode()","total_count":1,"children":[]},{"name":"faDate()","total_count":1,"children":[]},{"name":"fetchItems()","total_count":1,"children":[]},{"name":"fetchT()","total_count":1,"children":[]},{"name":"HISTORY","total_count":1,"children":[]},{"name":"loadHistory()","total_count":1,"children":[]},{"name":"msUntilNextRun()","total_count":1,"children":[]},{"name":"OUT","total_count":1,"children":[]},{"name":"runOnce()","total_count":1,"children":[]},{"name":"saveHistory()","total_count":1,"children":[]},{"name":"sleep()","total_count":1,"children":[]},{"name":"toPersian()","total_count":1,"children":[]},{"name":"topicKey()","total_count":1,"children":[]},{"name":"UA","total_count":1,"children":[]}]},{"name":"fetch-news.mjs","total_count":14,"children":[{"name":"__dirname","total_count":1,"children":[]},{"name":"decode()","total_count":1,"children":[]},{"name":"get()","total_count":1,"children":[]},{"name":"main()","total_count":1,"children":[]},{"name":"MINE_SRC","total_count":1,"children":[]},{"name":"norm()","total_count":1,"children":[]},{"name":"parseRss()","total_count":1,"children":[]},{"name":"ROOT","total_count":1,"children":[]},{"name":"sleep()","total_count":1,"children":[]},{"name":"SRC","total_count":1,"children":[]},{"name":"STEEL_SRC","total_count":1,"children":[]},{"name":"STOP","total_count":1,"children":[]},{"name":"stripTags()","total_count":1,"children":[]},{"name":"tag()","total_count":1,"children":[]}]},{"name":"generate-drafts.mjs","total_count":15,"children":[{"name":"CATEGORIES","total_count":1,"children":[]},{"name":"createDraft()","total_count":1,"children":[]},{"name":"decode()","total_count":1,"children":[]},{"name":"generate()","total_count":1,"children":[]},{"name":"get()","total_count":1,"children":[]},{"name":"main()","total_count":1,"children":[]},{"name":"NEWS_SITES","total_count":1,"children":[]},{"name":"PANEL","total_count":1,"children":[]},{"name":"panelLogin()","total_count":1,"children":[]},{"name":"parseItems()","total_count":1,"children":[]},{"name":"parseRss()","total_count":1,"children":[]},{"name":"scrape()","total_count":1,"children":[]},{"name":"sleep()","total_count":1,"children":[]},{"name":"stripTags()","total_count":1,"children":[]},{"name":"tag()","total_count":1,"children":[]}]},{"name":"gen.config.mjs","total_count":1,"children":[]}]},{"name":"src","total_count":645,"children":[{"name":"app","total_count":33,"children":[{"name":"layout","total_count":32,"children":[{"name":"Footer.tsx","total_count":14,"children":[{"name":"AparatIcon()","total_count":1,"children":[]},{"name":"CONTACT","total_count":1,"children":[]},{"name":"Footer()","total_count":1,"children":[]},{"name":"FooterCurve()","total_count":1,"children":[]},{"name":"IconProps","total_count":1,"children":[]},{"name":"LinkedinIcon()","total_count":1,"children":[]},{"name":"NAV_LINKS","total_count":1,"children":[]},{"name":"NavItem()","total_count":1,"children":[]},{"name":"NewsletterBox()","total_count":1,"children":[]},{"name":"scrollToTop()","total_count":1,"children":[]},{"name":"SocialIcon()","total_count":1,"children":[]},{"name":"SOCIALS","total_count":1,"children":[]},{"name":"TelegramIcon()","total_count":1,"children":[]},{"name":"XIcon()","total_count":1,"children":[]}]},{"name":"Header.tsx","total_count":12,"children":[{"name":"ABOUT","total_count":1,"children":[]},{"name":"DrawerAccordion()","total_count":1,"children":[]},{"name":"DrawerNavItem()","total_count":1,"children":[]},{"name":"Header()","total_count":1,"children":[]},{"name":"MEDIA","total_count":1,"children":[]},{"name":"NavDropdown()","total_count":1,"children":[]},{"name":"PlainNavItem()","total_count":1,"children":[]},{"name":"Section","total_count":1,"children":[]},{"name":"SECTIONS","total_count":1,"children":[]},{"name":"T","total_count":1,"children":[]},{"name":"TOP_NAV","total_count":1,"children":[]},{"name":"TopNav","total_count":1,"children":[]}]},{"name":"RootLayout.tsx","total_count":6,"children":[{"name":"ActivityTracker()","total_count":1,"children":[]},{"name":"DigitLocalizer()","total_count":1,"children":[]},{"name":"FA_DIGITS","total_count":1,"children":[]},{"name":"persianizeNode()","total_count":1,"children":[]},{"name":"RootLayout()","total_count":1,"children":[]},{"name":"useSmoothScroll()","total_count":1,"children":[]}]}]},{"name":"router.tsx","total_count":1,"children":[{"name":"router","total_count":1,"children":[]}]}]},{"name":"components","total_count":67,"children":[{"name":"ui","total_count":67,"children":[{"name":"animated-radial-chart.tsx","total_count":2,"children":[{"name":"AnimatedRadialChart()","total_count":1,"children":[]},{"name":"AnimatedRadialChartProps","total_count":1,"children":[]}]},{"name":"border-beam.tsx","total_count":2,"children":[{"name":"BorderBeam()","total_count":1,"children":[]},{"name":"BorderBeamProps","total_count":1,"children":[]}]},{"name":"DetailSheet.tsx","total_count":4,"children":[{"name":"CardDetail","total_count":1,"children":[]},{"name":"DetailSheet()","total_count":1,"children":[]},{"name":"L","total_count":1,"children":[]},{"name":"Props","total_count":1,"children":[]}]},{"name":"financial-score-cards.tsx","total_count":28,"children":[{"name":".circumference()","total_count":1,"children":[]},{"name":".formatNumber()","total_count":1,"children":[]},{"name":".getStrength()","total_count":1,"children":[]},{"name":".randomHash()","total_count":1,"children":[]},{"name":".randomInt()","total_count":1,"children":[]},{"name":"CounterContext","total_count":1,"children":[]},{"name":"CounterContextType","total_count":1,"children":[]},{"name":"CounterProvider()","total_count":1,"children":[]},{"name":"defaultData","total_count":1,"children":[]},{"name":"FinancialScore()","total_count":1,"children":[]},{"name":"FinancialScoreButton()","total_count":1,"children":[]},{"name":"FinancialScoreButtonProps","total_count":1,"children":[]},{"name":"FinancialScoreCard()","total_count":1,"children":[]},{"name":"FinancialScoreCardProps","total_count":1,"children":[]},{"name":"FinancialScoreCards()","total_count":1,"children":[]},{"name":"FinancialScoreDisplay()","total_count":1,"children":[]},{"name":"FinancialScoreDisplayProps","total_count":1,"children":[]},{"name":"FinancialScoreHalfCircle()","total_count":1,"children":[]},{"name":"FinancialScoreHalfCircleProps","total_count":1,"children":[]},{"name":"FinancialScoreHeader()","total_count":1,"children":[]},{"name":"FinancialScoreHeaderProps","total_count":1,"children":[]},{"name":"FinancialScoreProps","total_count":1,"children":[]},{"name":"Score","total_count":1,"children":[]},{"name":"Strength","total_count":1,"children":[]},{"name":"STRENGTH_FA","total_count":1,"children":[]},{"name":"toFa()","total_count":1,"children":[]},{"name":"useCounter()","total_count":1,"children":[]},{"name":"Utils","total_count":1,"children":[]}]},{"name":"globe.tsx","total_count":6,"children":[{"name":"Arc","total_count":1,"children":[]},{"name":"ARCS","total_count":1,"children":[]},{"name":"COLORS","total_count":1,"children":[]},{"name":"Globe()","total_count":1,"children":[]},{"name":"GlobeObject()","total_count":1,"children":[]},{"name":"World()","total_count":1,"children":[]}]},{"name":"liquid-glass-button.tsx","total_count":6,"children":[{"name":"Button","total_count":1,"children":[]},{"name":"ButtonProps","total_count":1,"children":[]},{"name":"buttonVariants","total_count":1,"children":[]},{"name":"GlassFilter()","total_count":1,"children":[]},{"name":"LiquidButton()","total_count":1,"children":[]},{"name":"liquidbuttonVariants","total_count":1,"children":[]}]},{"name":"liquid-glass-card.tsx","total_count":9,"children":[{"name":"Card()","total_count":1,"children":[]},{"name":"CardAction()","total_count":1,"children":[]},{"name":"CardContent()","total_count":1,"children":[]},{"name":"CardDescription()","total_count":1,"children":[]},{"name":"CardFooter()","total_count":1,"children":[]},{"name":"CardHeader()","total_count":1,"children":[]},{"name":"CardTitle()","total_count":1,"children":[]},{"name":"GlassFilter()","total_count":1,"children":[]},{"name":"LiquidCard()","total_count":1,"children":[]}]},{"name":"magic-text.tsx","total_count":6,"children":[{"name":"MagicText()","total_count":1,"children":[]},{"name":"MagicTextGroup()","total_count":1,"children":[]},{"name":"MagicTextGroupProps","total_count":1,"children":[]},{"name":"MagicTextProps","total_count":1,"children":[]},{"name":"Word()","total_count":1,"children":[]},{"name":"WordProps","total_count":1,"children":[]}]},{"name":"progress.tsx","total_count":2,"children":[{"name":"Vo2MaxCard()","total_count":1,"children":[]},{"name":"Vo2MaxCardProps","total_count":1,"children":[]}]},{"name":"StrategicEvents.tsx","total_count":2,"children":[{"name":"faNum()","total_count":1,"children":[]},{"name":"StrategicEvents()","total_count":1,"children":[]}]}]}]},{"name":"content","total_count":50,"children":[{"name":"factoryReports.ts","total_count":7,"children":[{"name":"asDir()","total_count":1,"children":[]},{"name":"bootstrapFactoryReports()","total_count":1,"children":[]},{"name":"FACTORY_REPORTS","total_count":1,"children":[]},{"name":"FACTORY_REPORTS_META","total_count":1,"children":[]},{"name":"FactoryReport","total_count":1,"children":[]},{"name":"SCROLL_DIRS","total_count":1,"children":[]},{"name":"ScrollDir","total_count":1,"children":[]}]},{"name":"integrations.ts","total_count":7,"children":[{"name":"asIcon()","total_count":1,"children":[]},{"name":"bootstrapIntegrations()","total_count":1,"children":[]},{"name":"ICON_TYPES","total_count":1,"children":[]},{"name":"Integration","total_count":1,"children":[]},{"name":"IntegrationIcon","total_count":1,"children":[]},{"name":"INTEGRATIONS","total_count":1,"children":[]},{"name":"INTEGRATIONS_META","total_count":1,"children":[]}]},{"name":"iranSites.ts","total_count":4,"children":[{"name":"IRAN_SITES","total_count":1,"children":[]},{"name":"IranSite","total_count":1,"children":[]},{"name":"SITE_TYPE_LABEL","total_count":1,"children":[]},{"name":"SiteType","total_count":1,"children":[]}]},{"name":"posts.ts","total_count":10,"children":[{"name":"bootstrapPosts()","total_count":1,"children":[]},{"name":"CommentTag","total_count":1,"children":[]},{"name":"getPost()","total_count":1,"children":[]},{"name":"IMG()","total_count":1,"children":[]},{"name":"Post","total_count":1,"children":[]},{"name":"PostBlock","total_count":1,"children":[]},{"name":"PostComment","total_count":1,"children":[]},{"name":"POSTS","total_count":1,"children":[]},{"name":"RELATED","total_count":1,"children":[]},{"name":"RelatedPost","total_count":1,"children":[]}]},{"name":"radar.ts","total_count":6,"children":[{"name":"bootstrapRadar()","total_count":1,"children":[]},{"name":"RADAR_CATEGORIES","total_count":1,"children":[]},{"name":"RADAR_CATEGORY_LABEL","total_count":1,"children":[]},{"name":"RADAR_ITEMS","total_count":1,"children":[]},{"name":"RadarCategory","total_count":1,"children":[]},{"name":"RadarItem","total_count":1,"children":[]}]},{"name":"radarCategories.ts","total_count":9,"children":[{"name":"asCats()","total_count":1,"children":[]},{"name":"bootstrapRadarPages()","total_count":1,"children":[]},{"name":"RADAR_CATEGORY_PAGES","total_count":1,"children":[]},{"name":"RADAR_SLUGS","total_count":1,"children":[]},{"name":"RadarCard","total_count":1,"children":[]},{"name":"RadarCategoryPage","total_count":1,"children":[]},{"name":"RadarSlug","total_count":1,"children":[]},{"name":"VALID_CATS","total_count":1,"children":[]},{"name":"VALID_SLUGS","total_count":1,"children":[]}]},{"name":"radarFuture.ts","total_count":7,"children":[{"name":"bootstrapRadarFuture()","total_count":1,"children":[]},{"name":"LABEL_TO_ENUM","total_count":1,"children":[]},{"name":"RADAR_FUTURE","total_count":1,"children":[]},{"name":"RADAR_FUTURE_ITEMS","total_count":1,"children":[]},{"name":"RADAR_SLUG_LABEL","total_count":1,"children":[]},{"name":"RadarFutureArticle","total_count":1,"children":[]},{"name":"RFBlock","total_count":1,"children":[]}]}]},{"name":"context","total_count":16,"children":[{"name":"AuthContext.tsx","total_count":11,"children":[{"name":"AuthContext","total_count":1,"children":[]},{"name":"AuthContextValue","total_count":1,"children":[]},{"name":"authFetch()","total_count":1,"children":[]},{"name":"AuthProvider()","total_count":1,"children":[]},{"name":"AuthState","total_count":1,"children":[]},{"name":"cacheMember()","total_count":1,"children":[]},{"name":"load()","total_count":1,"children":[]},{"name":"Member","total_count":1,"children":[]},{"name":"toMember()","total_count":1,"children":[]},{"name":"trackActivity()","total_count":1,"children":[]},{"name":"useAuth()","total_count":1,"children":[]}]},{"name":"LangContext.tsx","total_count":5,"children":[{"name":"Lang","total_count":1,"children":[]},{"name":"LangContext","total_count":1,"children":[]},{"name":"LangCtx","total_count":1,"children":[]},{"name":"LangProvider()","total_count":1,"children":[]},{"name":"useLang()","total_count":1,"children":[]}]}]},{"name":"data","total_count":51,"children":[{"name":"about.ts","total_count":5,"children":[{"name":"advisoryBoard","total_count":1,"children":[]},{"name":"AdvisoryMember","total_count":1,"children":[]},{"name":"bootstrapAbout()","total_count":1,"children":[]},{"name":"VisionItem","total_count":1,"children":[]},{"name":"visionItems","total_count":1,"children":[]}]},{"name":"banners.ts","total_count":5,"children":[{"name":"Banner","total_count":1,"children":[]},{"name":"bannerFor()","total_count":1,"children":[]},{"name":"banners","total_count":1,"children":[]},{"name":"bootstrapBanners()","total_count":1,"children":[]},{"name":"safeUrl()","total_count":1,"children":[]}]},{"name":"events.ts","total_count":4,"children":[{"name":"bootstrapEvents()","total_count":1,"children":[]},{"name":"Event","total_count":1,"children":[]},{"name":"events","total_count":1,"children":[]},{"name":"EventType","total_count":1,"children":[]}]},{"name":"market.ts","total_count":12,"children":[{"name":"bootstrapMarket()","total_count":1,"children":[]},{"name":"ExportData","total_count":1,"children":[]},{"name":"GlobalComparison","total_count":1,"children":[]},{"name":"InstituteStats","total_count":1,"children":[]},{"name":"MarketPrice","total_count":1,"children":[]},{"name":"marketPrices","total_count":1,"children":[]},{"name":"monthlyExport","total_count":1,"children":[]},{"name":"priceHistory","total_count":1,"children":[]},{"name":"PriceHistoryPoint","total_count":1,"children":[]},{"name":"PriceTrend","total_count":1,"children":[]},{"name":"STAT_KEY_BY_ID","total_count":1,"children":[]},{"name":"stats","total_count":1,"children":[]}]},{"name":"media.ts","total_count":8,"children":[{"name":"articleToPodcast()","total_count":1,"children":[]},{"name":"articleToVideo()","total_count":1,"children":[]},{"name":"bootstrapMedia()","total_count":1,"children":[]},{"name":"MediaLangText","total_count":1,"children":[]},{"name":"PodcastItem","total_count":1,"children":[]},{"name":"podcasts","total_count":1,"children":[]},{"name":"VideoItem","total_count":1,"children":[]},{"name":"videos","total_count":1,"children":[]}]},{"name":"plans.ts","total_count":4,"children":[{"name":"bootstrapPlans()","total_count":1,"children":[]},{"name":"Plan","total_count":1,"children":[]},{"name":"PlanCtaVariant","total_count":1,"children":[]},{"name":"plans","total_count":1,"children":[]}]},{"name":"reports.ts","total_count":5,"children":[{"name":"bootstrapReports()","total_count":1,"children":[]},{"name":"Report","total_count":1,"children":[]},{"name":"ReportCategory","total_count":1,"children":[]},{"name":"reports","total_count":1,"children":[]},{"name":"ReportType","total_count":1,"children":[]}]},{"name":"risks.ts","total_count":5,"children":[{"name":"bootstrapRisks()","total_count":1,"children":[]},{"name":"mapLevel()","total_count":1,"children":[]},{"name":"RiskAlert","total_count":1,"children":[]},{"name":"riskAlerts","total_count":1,"children":[]},{"name":"RiskLevel","total_count":1,"children":[]}]},{"name":"team.ts","total_count":3,"children":[{"name":"bootstrapTeam()","total_count":1,"children":[]},{"name":"team","total_count":1,"children":[]},{"name":"TeamMember","total_count":1,"children":[]}]}]},{"name":"lib","total_count":10,"children":[{"name":"utils.ts","total_count":10,"children":[{"name":"categoryColor()","total_count":1,"children":[]},{"name":"clamp()","total_count":1,"children":[]},{"name":"cn()","total_count":1,"children":[]},{"name":"formatPersianNumber()","total_count":1,"children":[]},{"name":"formatPrice()","total_count":1,"children":[]},{"name":"formatPriceCompact()","total_count":1,"children":[]},{"name":"reportTypeLabel()","total_count":1,"children":[]},{"name":"trendArrow()","total_count":1,"children":[]},{"name":"trendColor()","total_count":1,"children":[]},{"name":"truncate()","total_count":1,"children":[]}]}]},{"name":"pages","total_count":417,"children":[{"name":"About","total_count":15,"children":[{"name":"About.tsx","total_count":15,"children":[{"name":"About()","total_count":1,"children":[]},{"name":"COUNCIL_MEMBERS","total_count":1,"children":[]},{"name":"COUNCIL_PILLARS","total_count":1,"children":[]},{"name":"DEPT_TEAMS","total_count":1,"children":[]},{"name":"DEPTS","total_count":1,"children":[]},{"name":"DIRECTOR","total_count":1,"children":[]},{"name":"DIRECTOR_PILLARS","total_count":1,"children":[]},{"name":"MemberCard()","total_count":1,"children":[]},{"name":"memberGrid","total_count":1,"children":[]},{"name":"PillarRow()","total_count":1,"children":[]},{"name":"SectionLabel()","total_count":1,"children":[]},{"name":"Testimonial()","total_count":1,"children":[]},{"name":"tr","total_count":1,"children":[]},{"name":"VISION_IMAGES","total_count":1,"children":[]},{"name":"VISION_PILLARS","total_count":1,"children":[]}]}]},{"name":"Archive","total_count":7,"children":[{"name":"Archive.tsx","total_count":7,"children":[{"name":"Archive()","total_count":1,"children":[]},{"name":"formatPrice()","total_count":1,"children":[]},{"name":"MONTH_ORDER","total_count":1,"children":[]},{"name":"parseDateGroup()","total_count":1,"children":[]},{"name":"ReportRow()","total_count":1,"children":[]},{"name":"TYPE_COLORS","total_count":1,"children":[]},{"name":"TYPE_LABELS","total_count":1,"children":[]}]}]},{"name":"AtAGlance","total_count":15,"children":[{"name":"AtAGlance.tsx","total_count":15,"children":[{"name":"AtAGlance()","total_count":1,"children":[]},{"name":"Badge()","total_count":1,"children":[]},{"name":"Card","total_count":1,"children":[]},{"name":"CardModal()","total_count":1,"children":[]},{"name":"CARDS","total_count":1,"children":[]},{"name":"catLabel()","total_count":1,"children":[]},{"name":"catNum","total_count":1,"children":[]},{"name":"catRow()","total_count":1,"children":[]},{"name":"Meta()","total_count":1,"children":[]},{"name":"NEWS_ITEMS","total_count":1,"children":[]},{"name":"SectionHead()","total_count":1,"children":[]},{"name":"sidebarH","total_count":1,"children":[]},{"name":"Tab","total_count":1,"children":[]},{"name":"TABS","total_count":1,"children":[]},{"name":"TagRow()","total_count":1,"children":[]}]}]},{"name":"Auth","total_count":19,"children":[{"name":"AuthPage.tsx","total_count":19,"children":[{"name":"AuthPage()","total_count":1,"children":[]},{"name":"BldgIcon()","total_count":1,"children":[]},{"name":"BrandPanel()","total_count":1,"children":[]},{"name":"ErrBox()","total_count":1,"children":[]},{"name":"EyeToggle()","total_count":1,"children":[]},{"name":"FField()","total_count":1,"children":[]},{"name":"FInput()","total_count":1,"children":[]},{"name":"KeywordCycle()","total_count":1,"children":[]},{"name":"KW_EN","total_count":1,"children":[]},{"name":"KW_FA","total_count":1,"children":[]},{"name":"KW_POS","total_count":1,"children":[]},{"name":"LockIcon()","total_count":1,"children":[]},{"name":"LoginForm()","total_count":1,"children":[]},{"name":"MailIcon()","total_count":1,"children":[]},{"name":"Mode","total_count":1,"children":[]},{"name":"PhoneIcon()","total_count":1,"children":[]},{"name":"RegisterForm()","total_count":1,"children":[]},{"name":"SubmitBtn()","total_count":1,"children":[]},{"name":"UserIcon()","total_count":1,"children":[]}]}]},{"name":"Contact","total_count":6,"children":[{"name":"Contact.tsx","total_count":6,"children":[{"name":"Contact()","total_count":1,"children":[]},{"name":"Errors","total_count":1,"children":[]},{"name":"Field()","total_count":1,"children":[]},{"name":"FormState","total_count":1,"children":[]},{"name":"inputStyle()","total_count":1,"children":[]},{"name":"tr","total_count":1,"children":[]}]}]},{"name":"Events","total_count":12,"children":[{"name":"Events.tsx","total_count":12,"children":[{"name":"buildMonth()","total_count":1,"children":[]},{"name":"CBox()","total_count":1,"children":[]},{"name":"EVENT_IMGS","total_count":1,"children":[]},{"name":"Events()","total_count":1,"children":[]},{"name":"faNum()","total_count":1,"children":[]},{"name":"HERO_TARGET","total_count":1,"children":[]},{"name":"J_MONTHS","total_count":1,"children":[]},{"name":"jParts()","total_count":1,"children":[]},{"name":"MiniCalendar()","total_count":1,"children":[]},{"name":"TYPE_LABEL","total_count":1,"children":[]},{"name":"useCountdown()","total_count":1,"children":[]},{"name":"WEEKDAYS","total_count":1,"children":[]}]}]},{"name":"Experts","total_count":10,"children":[{"name":"Experts.tsx","total_count":10,"children":[{"name":"Expert","total_count":1,"children":[]},{"name":"ExpertCard()","total_count":1,"children":[]},{"name":"Experts()","total_count":1,"children":[]},{"name":"FEATURED_EXPERTS","total_count":1,"children":[]},{"name":"LinkedinIcon()","total_count":1,"children":[]},{"name":"ROOM_EXPERTS","total_count":1,"children":[]},{"name":"TelegramIcon()","total_count":1,"children":[]},{"name":"TR","total_count":1,"children":[]},{"name":"TwitterIcon()","total_count":1,"children":[]},{"name":"WebsiteIcon()","total_count":1,"children":[]}]}]},{"name":"Geopolitics","total_count":7,"children":[{"name":"Geopolitics.tsx","total_count":7,"children":[{"name":"Geopolitics()","total_count":1,"children":[]},{"name":"KPIS","total_count":1,"children":[]},{"name":"LEVEL_COLOR","total_count":1,"children":[]},{"name":"LEVEL_LABEL","total_count":1,"children":[]},{"name":"SCENARIOS","total_count":1,"children":[]},{"name":"SIGNALS","total_count":1,"children":[]},{"name":"T","total_count":1,"children":[]}]}]},{"name":"Home","total_count":43,"children":[{"name":"Home.tsx","total_count":1,"children":[{"name":"Home()","total_count":1,"children":[]}]},{"name":"sections","total_count":42,"children":[{"name":"AtAGlanceSection.tsx","total_count":5,"children":[{"name":"AtAGlanceSection()","total_count":1,"children":[]},{"name":"CalendarIcon()","total_count":1,"children":[]},{"name":"Glance","total_count":1,"children":[]},{"name":"ITEMS","total_count":1,"children":[]},{"name":"NavBtn()","total_count":1,"children":[]}]},{"name":"FactoryReportsScroll.tsx","total_count":9,"children":[{"name":"Cover","total_count":1,"children":[]},{"name":"COVERS","total_count":1,"children":[]},{"name":"EASE","total_count":1,"children":[]},{"name":"FactoryReportsScroll()","total_count":1,"children":[]},{"name":"FALLBACK_DIRS","total_count":1,"children":[]},{"name":"ReportCard()","total_count":1,"children":[]},{"name":"safeFile()","total_count":1,"children":[]},{"name":"ScrollAnimation()","total_count":1,"children":[]},{"name":"ScrollDir","total_count":1,"children":[]}]},{"name":"FeaturedReportBanner.tsx","total_count":1,"children":[{"name":"FeaturedReportBanner()","total_count":1,"children":[]}]},{"name":"IntegrationsSection.tsx","total_count":3,"children":[{"name":"EASE","total_count":1,"children":[]},{"name":"ICONS","total_count":1,"children":[]},{"name":"IntegrationsSection()","total_count":1,"children":[]}]},{"name":"InternalNewsSection.tsx","total_count":5,"children":[{"name":"InternalNewsSection()","total_count":1,"children":[]},{"name":"NEWS","total_count":1,"children":[]},{"name":"NewsItem","total_count":1,"children":[]},{"name":"T","total_count":1,"children":[]},{"name":"Tag()","total_count":1,"children":[]}]},{"name":"MapEventsSection.tsx","total_count":1,"children":[{"name":"MapEventsSection()","total_count":1,"children":[]}]},{"name":"RadarTechSection.tsx","total_count":4,"children":[{"name":"Area","total_count":1,"children":[]},{"name":"RadarTechSection()","total_count":1,"children":[]},{"name":"RESEARCH_AREAS","total_count":1,"children":[]},{"name":"T","total_count":1,"children":[]}]},{"name":"RiskSection.tsx","total_count":7,"children":[{"name":"fallbackRiskItems","total_count":1,"children":[]},{"name":"LEVEL","total_count":1,"children":[]},{"name":"RiskCard()","total_count":1,"children":[]},{"name":"RiskItem","total_count":1,"children":[]},{"name":"RiskLevel","total_count":1,"children":[]},{"name":"RiskSection()","total_count":1,"children":[]},{"name":"T","total_count":1,"children":[]}]},{"name":"SnapshotBar.tsx","total_count":3,"children":[{"name":"BASE_METALS","total_count":1,"children":[]},{"name":"SnapshotBar()","total_count":1,"children":[]},{"name":"UPDATE_LOG","total_count":1,"children":[]}]},{"name":"SpreadFeatures.tsx","total_count":2,"children":[{"name":"EASE","total_count":1,"children":[]},{"name":"SpreadFeatures()","total_count":1,"children":[]}]},{"name":"VideocastPodcastSection.tsx","total_count":2,"children":[{"name":"T","total_count":1,"children":[]},{"name":"VideocastPodcastSection()","total_count":1,"children":[]}]}]}]},{"name":"Market","total_count":6,"children":[{"name":"Market.tsx","total_count":6,"children":[{"name":"ComparisonTool()","total_count":1,"children":[]},{"name":"Market()","total_count":1,"children":[]},{"name":"PriceCard()","total_count":1,"children":[]},{"name":"Range","total_count":1,"children":[]},{"name":"RANGES","total_count":1,"children":[]},{"name":"TrendIcon()","total_count":1,"children":[]}]}]},{"name":"Membership","total_count":3,"children":[{"name":"Membership.tsx","total_count":3,"children":[{"name":"Membership()","total_count":1,"children":[]},{"name":"PLANS","total_count":1,"children":[]},{"name":"T","total_count":1,"children":[]}]}]},{"name":"Newstree","total_count":7,"children":[{"name":"Newstree.tsx","total_count":7,"children":[{"name":"buildTree()","total_count":1,"children":[]},{"name":"byTime()","total_count":1,"children":[]},{"name":"NEWS","total_count":1,"children":[]},{"name":"newsCount()","total_count":1,"children":[]},{"name":"NewsItem","total_count":1,"children":[]},{"name":"Newstree()","total_count":1,"children":[]},{"name":"norm()","total_count":1,"children":[]}]}]},{"name":"Observe","total_count":7,"children":[{"name":"Observe.tsx","total_count":7,"children":[{"name":"fmtDate()","total_count":1,"children":[]},{"name":"NEWS","total_count":1,"children":[]},{"name":"NewsItem","total_count":1,"children":[]},{"name":"Observe()","total_count":1,"children":[]},{"name":"Placed","total_count":1,"children":[]},{"name":"pulseIcon()","total_count":1,"children":[]},{"name":"spread()","total_count":1,"children":[]}]}]},{"name":"Podcast","total_count":5,"children":[{"name":"Podcast.tsx","total_count":5,"children":[{"name":"ActivePill()","total_count":1,"children":[]},{"name":"EpItem()","total_count":1,"children":[]},{"name":"Podcast()","total_count":1,"children":[]},{"name":"T","total_count":1,"children":[]},{"name":"WavePlayer()","total_count":1,"children":[]}]}]},{"name":"PostDetail","total_count":7,"children":[{"name":"PostDetail.tsx","total_count":7,"children":[{"name":"BarsChart()","total_count":1,"children":[]},{"name":"CommentCard()","total_count":1,"children":[]},{"name":"EASE","total_count":1,"children":[]},{"name":"MembershipGate()","total_count":1,"children":[]},{"name":"ParetoChart()","total_count":1,"children":[]},{"name":"PostDetail()","total_count":1,"children":[]},{"name":"RelatedSidebar()","total_count":1,"children":[]}]}]},{"name":"Profile","total_count":18,"children":[{"name":"ProfilePage.tsx","total_count":18,"children":[{"name":"card","total_count":1,"children":[]},{"name":"CardHead()","total_count":1,"children":[]},{"name":"ContactCard()","total_count":1,"children":[]},{"name":"ContactRow()","total_count":1,"children":[]},{"name":"EditLink()","total_count":1,"children":[]},{"name":"EMPTY","total_count":1,"children":[]},{"name":"Extra","total_count":1,"children":[]},{"name":"Field()","total_count":1,"children":[]},{"name":"IdentityCard()","total_count":1,"children":[]},{"name":"keyFor()","total_count":1,"children":[]},{"name":"loadExtra()","total_count":1,"children":[]},{"name":"PasswordCard()","total_count":1,"children":[]},{"name":"Placeholder()","total_count":1,"children":[]},{"name":"ProfilePage()","total_count":1,"children":[]},{"name":"ReadRow()","total_count":1,"children":[]},{"name":"Row()","total_count":1,"children":[]},{"name":"saveExtra()","total_count":1,"children":[]},{"name":"Section","total_count":1,"children":[]}]}]},{"name":"Pulse","total_count":14,"children":[{"name":"Pulse.tsx","total_count":14,"children":[{"name":"CategoryColumn()","total_count":1,"children":[]},{"name":"DATA_SOURCES","total_count":1,"children":[]},{"name":"ImageSlider()","total_count":1,"children":[]},{"name":"MembershipForm()","total_count":1,"children":[]},{"name":"PctCell()","total_count":1,"children":[]},{"name":"PRICE_TABLE_ROWS","total_count":1,"children":[]},{"name":"PriceTable()","total_count":1,"children":[]},{"name":"PRODUCT_CATEGORIES","total_count":1,"children":[]},{"name":"ProductCoverage()","total_count":1,"children":[]},{"name":"Pulse()","total_count":1,"children":[]},{"name":"SLIDES","total_count":1,"children":[]},{"name":"STATS","total_count":1,"children":[]},{"name":"T","total_count":1,"children":[]},{"name":"TX","total_count":1,"children":[]}]}]},{"name":"Radar","total_count":8,"children":[{"name":"Radar.tsx","total_count":8,"children":[{"name":"CATEGORY_ICON","total_count":1,"children":[]},{"name":"CATEGORY_LABEL","total_count":1,"children":[]},{"name":"MembershipGate()","total_count":1,"children":[]},{"name":"Pagination()","total_count":1,"children":[]},{"name":"Radar()","total_count":1,"children":[]},{"name":"RadarCard()","total_count":1,"children":[]},{"name":"RadarItemModal()","total_count":1,"children":[]},{"name":"T","total_count":1,"children":[]}]}]},{"name":"RadarCategory","total_count":9,"children":[{"name":"RadarCategory.tsx","total_count":9,"children":[{"name":"Breadcrumb()","total_count":1,"children":[]},{"name":"EASE","total_count":1,"children":[]},{"name":"FeaturedCard()","total_count":1,"children":[]},{"name":"GridCard()","total_count":1,"children":[]},{"name":"MiniCard()","total_count":1,"children":[]},{"name":"Pagination()","total_count":1,"children":[]},{"name":"RadarCategory()","total_count":1,"children":[]},{"name":"Reveal()","total_count":1,"children":[]},{"name":"SpecialBanner()","total_count":1,"children":[]}]}]},{"name":"RadarPost","total_count":6,"children":[{"name":"RadarPost.tsx","total_count":6,"children":[{"name":"Block()","total_count":1,"children":[]},{"name":"EASE","total_count":1,"children":[]},{"name":"MembershipGate()","total_count":1,"children":[]},{"name":"RadarPost()","total_count":1,"children":[]},{"name":"RelatedSidebar()","total_count":1,"children":[]},{"name":"Sources()","total_count":1,"children":[]}]}]},{"name":"ReportDetail","total_count":6,"children":[{"name":"ReportDetail.tsx","total_count":6,"children":[{"name":"formatPrice()","total_count":1,"children":[]},{"name":"LOREM_PARAGRAPHS","total_count":1,"children":[]},{"name":"RelatedReports()","total_count":1,"children":[]},{"name":"ReportDetail()","total_count":1,"children":[]},{"name":"TOC_ITEMS","total_count":1,"children":[]},{"name":"TYPE_LABELS","total_count":1,"children":[]}]}]},{"name":"Risks","total_count":5,"children":[{"name":"Risks.tsx","total_count":5,"children":[{"name":"formatPrice()","total_count":1,"children":[]},{"name":"levelConfig","total_count":1,"children":[]},{"name":"RiskLevel","total_count":1,"children":[]},{"name":"riskMatrix","total_count":1,"children":[]},{"name":"Risks()","total_count":1,"children":[]}]}]},{"name":"Scanner","total_count":7,"children":[{"name":"Scanner.tsx","total_count":7,"children":[{"name":"alertBorderColor","total_count":1,"children":[]},{"name":"alertLabel","total_count":1,"children":[]},{"name":"alertLabelColor","total_count":1,"children":[]},{"name":"AlertLevel","total_count":1,"children":[]},{"name":"formatNumber()","total_count":1,"children":[]},{"name":"PriceTicker()","total_count":1,"children":[]},{"name":"Scanner()","total_count":1,"children":[]}]}]},{"name":"Search","total_count":3,"children":[{"name":"SearchResults.tsx","total_count":3,"children":[{"name":"buildIndex()","total_count":1,"children":[]},{"name":"Result","total_count":1,"children":[]},{"name":"SearchResults()","total_count":1,"children":[]}]}]},{"name":"Special","total_count":5,"children":[{"name":"Special.tsx","total_count":5,"children":[{"name":"CompactCard()","total_count":1,"children":[]},{"name":"formatPrice()","total_count":1,"children":[]},{"name":"Special()","total_count":1,"children":[]},{"name":"SpecialCard()","total_count":1,"children":[]},{"name":"typeLabel","total_count":1,"children":[]}]}]},{"name":"SpecializedMeetings","total_count":3,"children":[{"name":"SpecializedMeetings.tsx","total_count":3,"children":[{"name":"CONTENT","total_count":1,"children":[]},{"name":"SpecializedMeetings()","total_count":1,"children":[]},{"name":"TARGET_DATE","total_count":1,"children":[]}]}]},{"name":"SteelDashboard","total_count":141,"children":[{"name":"data","total_count":2,"children":[{"name":"greenSteelProjects.ts","total_count":2,"children":[{"name":"GreenSteelProject","total_count":1,"children":[]},{"name":"greenSteelProjects","total_count":1,"children":[]}]}]},{"name":"sections","total_count":134,"children":[{"name":"GreenSteelTracker.tsx","total_count":14,"children":[{"name":"COUNTRY_FA","total_count":1,"children":[]},{"name":"faNum()","total_count":1,"children":[]},{"name":"Filter()","total_count":1,"children":[]},{"name":"GreenSteelTracker()","total_count":1,"children":[]},{"name":"REGION_COLOR","total_count":1,"children":[]},{"name":"REGION_FA","total_count":1,"children":[]},{"name":"REGION_ORDER","total_count":1,"children":[]},{"name":"SCALE_FA","total_count":1,"children":[]},{"name":"selectStyle","total_count":1,"children":[]},{"name":"Stat()","total_count":1,"children":[]},{"name":"STATUS_COLOR","total_count":1,"children":[]},{"name":"STATUS_FA","total_count":1,"children":[]},{"name":"TECH_FA","total_count":1,"children":[]},{"name":"uniq()","total_count":1,"children":[]}]},{"name":"IndustrySection.tsx","total_count":33,"children":[{"name":"ChangeCell()","total_count":1,"children":[]},{"name":"chipStyle()","total_count":1,"children":[]},{"name":"COMPANY_DOMAIN","total_count":1,"children":[]},{"name":"CompanyLogo()","total_count":1,"children":[]},{"name":"Competitor","total_count":1,"children":[]},{"name":"competitors","total_count":1,"children":[]},{"name":"CompetitorsModule()","total_count":1,"children":[]},{"name":"CompSortKey","total_count":1,"children":[]},{"name":"DrillBox()","total_count":1,"children":[]},{"name":"faDigits()","total_count":1,"children":[]},{"name":"faN()","total_count":1,"children":[]},{"name":"globalContext","total_count":1,"children":[]},{"name":"HeaderStat()","total_count":1,"children":[]},{"name":"IndustrySection()","total_count":1,"children":[]},{"name":"marketContext","total_count":1,"children":[]},{"name":"PriceRow","total_count":1,"children":[]},{"name":"prices","total_count":1,"children":[]},{"name":"PricesModule()","total_count":1,"children":[]},{"name":"PRODUCERS","total_count":1,"children":[]},{"name":"REGION_COLOR","total_count":1,"children":[]},{"name":"RegionFilter","total_count":1,"children":[]},{"name":"Risk","total_count":1,"children":[]},{"name":"RISK_CAT","total_count":1,"children":[]},{"name":"RiskCategory","total_count":1,"children":[]},{"name":"risks","total_count":1,"children":[]},{"name":"RisksModule()","total_count":1,"children":[]},{"name":"Spark()","total_count":1,"children":[]},{"name":"sparkData","total_count":1,"children":[]},{"name":"TECH_MIX","total_count":1,"children":[]},{"name":"TechMixPanel()","total_count":1,"children":[]},{"name":"tickerItems","total_count":1,"children":[]},{"name":"TopProducersPanel()","total_count":1,"children":[]},{"name":"TREND_FA","total_count":1,"children":[]}]},{"name":"SelfSection.tsx","total_count":39,"children":[{"name":"BudgetLine","total_count":1,"children":[]},{"name":"cardBase()","total_count":1,"children":[]},{"name":"catBg","total_count":1,"children":[]},{"name":"catBorderColor","total_count":1,"children":[]},{"name":"EASE","total_count":1,"children":[]},{"name":"EXP","total_count":1,"children":[]},{"name":"faNum()","total_count":1,"children":[]},{"name":"FEED_CATEGORIES","total_count":1,"children":[]},{"name":"FeedCategory","total_count":1,"children":[]},{"name":"FeedItem","total_count":1,"children":[]},{"name":"feedItems","total_count":1,"children":[]},{"name":"KPI","total_count":1,"children":[]},{"name":"kpis","total_count":1,"children":[]},{"name":"LABEL","total_count":1,"children":[]},{"name":"Milestone","total_count":1,"children":[]},{"name":"Module08()","total_count":1,"children":[]},{"name":"Module09()","total_count":1,"children":[]},{"name":"Module10()","total_count":1,"children":[]},{"name":"ProgressRing()","total_count":1,"children":[]},{"name":"Project","total_count":1,"children":[]},{"name":"ProjectCard()","total_count":1,"children":[]},{"name":"projects","total_count":1,"children":[]},{"name":"RiskItem","total_count":1,"children":[]},{"name":"SelfSection()","total_count":1,"children":[]},{"name":"severityColor()","total_count":1,"children":[]},{"name":"Source","total_count":1,"children":[]},{"name":"SourceRow()","total_count":1,"children":[]},{"name":"sources","total_count":1,"children":[]},{"name":"StatPill()","total_count":1,"children":[]},{"name":"statusDot()","total_count":1,"children":[]},{"name":"statusPill()","total_count":1,"children":[]},{"name":"strategies","total_count":1,"children":[]},{"name":"Strategy","total_count":1,"children":[]},{"name":"StrategyCard()","total_count":1,"children":[]},{"name":"TABLE","total_count":1,"children":[]},{"name":"TD()","total_count":1,"children":[]},{"name":"TH","total_count":1,"children":[]},{"name":"WeekMilestone","total_count":1,"children":[]},{"name":"weightColor()","total_count":1,"children":[]}]},{"name":"SteelPlantsGlobe.tsx","total_count":17,"children":[{"name":".getDerivedStateFromError()","total_count":1,"children":[]},{"name":".render()","total_count":1,"children":[]},{"name":"COUNTRY_FA","total_count":1,"children":[]},{"name":"faDigits()","total_count":1,"children":[]},{"name":"faNum()","total_count":1,"children":[]},{"name":"GlobeBoundary","total_count":1,"children":[]},{"name":"linkBtn","total_count":1,"children":[]},{"name":"METHOD_COLOR","total_count":1,"children":[]},{"name":"METHOD_FA","total_count":1,"children":[]},{"name":"METHOD_ORDER","total_count":1,"children":[]},{"name":"Plant","total_count":1,"children":[]},{"name":"Row()","total_count":1,"children":[]},{"name":"Section()","total_count":1,"children":[]},{"name":"STATUS_COLOR","total_count":1,"children":[]},{"name":"STATUS_FA","total_count":1,"children":[]},{"name":"STATUS_ORDER","total_count":1,"children":[]},{"name":"SteelPlantsGlobe()","total_count":1,"children":[]}]},{"name":"WorldSection.tsx","total_count":31,"children":[{"name":"EcosystemModule()","total_count":1,"children":[]},{"name":"faDigits()","total_count":1,"children":[]},{"name":"faNum()","total_count":1,"children":[]},{"name":"FilterTab","total_count":1,"children":[]},{"name":"GeopoliticsModule()","total_count":1,"children":[]},{"name":"GeoRow","total_count":1,"children":[]},{"name":"geoRows","total_count":1,"children":[]},{"name":"ImportanceBar()","total_count":1,"children":[]},{"name":"megaTrends","total_count":1,"children":[]},{"name":"MegaTrendsModule()","total_count":1,"children":[]},{"name":"Module()","total_count":1,"children":[]},{"name":"publications","total_count":1,"children":[]},{"name":"SignalDir","total_count":1,"children":[]},{"name":"signalStyle()","total_count":1,"children":[]},{"name":"Sparkline()","total_count":1,"children":[]},{"name":"startups","total_count":1,"children":[]},{"name":"tchip()","total_count":1,"children":[]},{"name":"td()","total_count":1,"children":[]},{"name":"TECH_CAT","total_count":1,"children":[]},{"name":"TECH_HORIZON","total_count":1,"children":[]},{"name":"TechCard()","total_count":1,"children":[]},{"name":"TechCategory","total_count":1,"children":[]},{"name":"TechHorizon","total_count":1,"children":[]},{"name":"technologies","total_count":1,"children":[]},{"name":"Technology","total_count":1,"children":[]},{"name":"TechRadarModule()","total_count":1,"children":[]},{"name":"th()","total_count":1,"children":[]},{"name":"TrendRow","total_count":1,"children":[]},{"name":"universities","total_count":1,"children":[]},{"name":"WorldSection()","total_count":1,"children":[]},{"name":"WStat()","total_count":1,"children":[]}]}]},{"name":"SteelDashboard.tsx","total_count":5,"children":[{"name":"DOCK_ICONS","total_count":1,"children":[]},{"name":"DockButton()","total_count":1,"children":[]},{"name":"SECTION_COMPONENTS","total_count":1,"children":[]},{"name":"SECTIONS","total_count":1,"children":[]},{"name":"SteelDashboard()","total_count":1,"children":[]}]}]},{"name":"Subscribe","total_count":9,"children":[{"name":"Subscribe.tsx","total_count":9,"children":[{"name":"CtaButton()","total_count":1,"children":[]},{"name":"FaqItem()","total_count":1,"children":[]},{"name":"FAQS","total_count":1,"children":[]},{"name":"FeatureCell()","total_count":1,"children":[]},{"name":"FEATURES","total_count":1,"children":[]},{"name":"OutlineCtaLink()","total_count":1,"children":[]},{"name":"PLAN_EXTRA_FEATURES","total_count":1,"children":[]},{"name":"PlanCard()","total_count":1,"children":[]},{"name":"Subscribe()","total_count":1,"children":[]}]}]},{"name":"Sustainability","total_count":7,"children":[{"name":"Sustainability.tsx","total_count":7,"children":[{"name":"INITIATIVES","total_count":1,"children":[]},{"name":"KPIS","total_count":1,"children":[]},{"name":"LEVEL_COLOR","total_count":1,"children":[]},{"name":"LEVEL_LABEL","total_count":1,"children":[]},{"name":"SIGNALS","total_count":1,"children":[]},{"name":"Sustainability()","total_count":1,"children":[]},{"name":"T","total_count":1,"children":[]}]}]},{"name":"Team","total_count":3,"children":[{"name":"Team.tsx","total_count":3,"children":[{"name":"MemberCard()","total_count":1,"children":[]},{"name":"Team()","total_count":1,"children":[]},{"name":"totalReports","total_count":1,"children":[]}]}]},{"name":"Technology","total_count":4,"children":[{"name":"Technology.tsx","total_count":4,"children":[{"name":"KPIS","total_count":1,"children":[]},{"name":"T","total_count":1,"children":[]},{"name":"Technology()","total_count":1,"children":[]},{"name":"TECHS","total_count":1,"children":[]}]}]}]},{"name":"main.tsx","total_count":1,"children":[]}]},{"name":"tsconfig.app.json","total_count":20,"children":[{"name":"@/*","total_count":1,"children":[]},{"name":"allowImportingTsExtensions","total_count":1,"children":[]},{"name":"compilerOptions","total_count":1,"children":[]},{"name":"erasableSyntaxOnly","total_count":1,"children":[]},{"name":"include","total_count":1,"children":[]},{"name":"jsx","total_count":1,"children":[]},{"name":"lib","total_count":1,"children":[]},{"name":"module","total_count":1,"children":[]},{"name":"moduleDetection","total_count":1,"children":[]},{"name":"moduleResolution","total_count":1,"children":[]},{"name":"noEmit","total_count":1,"children":[]},{"name":"noFallthroughCasesInSwitch","total_count":1,"children":[]},{"name":"noUnusedLocals","total_count":1,"children":[]},{"name":"noUnusedParameters","total_count":1,"children":[]},{"name":"paths","total_count":1,"children":[]},{"name":"skipLibCheck","total_count":1,"children":[]},{"name":"target","total_count":1,"children":[]},{"name":"tsBuildInfoFile","total_count":1,"children":[]},{"name":"types","total_count":1,"children":[]},{"name":"verbatimModuleSyntax","total_count":1,"children":[]}]},{"name":"tsconfig.json","total_count":2,"children":[{"name":"files","total_count":1,"children":[]},{"name":"references","total_count":1,"children":[]}]},{"name":"tsconfig.node.json","total_count":17,"children":[{"name":"allowImportingTsExtensions","total_count":1,"children":[]},{"name":"compilerOptions","total_count":1,"children":[]},{"name":"erasableSyntaxOnly","total_count":1,"children":[]},{"name":"include","total_count":1,"children":[]},{"name":"lib","total_count":1,"children":[]},{"name":"module","total_count":1,"children":[]},{"name":"moduleDetection","total_count":1,"children":[]},{"name":"moduleResolution","total_count":1,"children":[]},{"name":"noEmit","total_count":1,"children":[]},{"name":"noFallthroughCasesInSwitch","total_count":1,"children":[]},{"name":"noUnusedLocals","total_count":1,"children":[]},{"name":"noUnusedParameters","total_count":1,"children":[]},{"name":"skipLibCheck","total_count":1,"children":[]},{"name":"target","total_count":1,"children":[]},{"name":"tsBuildInfoFile","total_count":1,"children":[]},{"name":"types","total_count":1,"children":[]},{"name":"verbatimModuleSyntax","total_count":1,"children":[]}]},{"name":"vite.config.ts","total_count":1,"children":[{"name":"ALLOWED_TUNNEL_HOSTS","total_count":1,"children":[]}]},{"name":"eslint.config.js","total_count":1,"children":[]}]},{"name":"panel","total_count":228,"children":[{"name":"db.js","total_count":20,"children":[{"name":"buildQuery()","total_count":1,"children":[]},{"name":"db","total_count":1,"children":[]},{"name":"pool","total_count":1,"children":[]},{"name":"rowToAdvisoryMember()","total_count":1,"children":[]},{"name":"rowToArticle()","total_count":1,"children":[]},{"name":"rowToBanner()","total_count":1,"children":[]},{"name":"rowToEvent()","total_count":1,"children":[]},{"name":"rowToFactoryReport()","total_count":1,"children":[]},{"name":"rowToInstituteStat()","total_count":1,"children":[]},{"name":"rowToIntegration()","total_count":1,"children":[]},{"name":"rowToMarketChartPoint()","total_count":1,"children":[]},{"name":"rowToMarketPrice()","total_count":1,"children":[]},{"name":"rowToPlan()","total_count":1,"children":[]},{"name":"rowToPrice()","total_count":1,"children":[]},{"name":"rowToRadarItem()","total_count":1,"children":[]},{"name":"rowToRadarPage()","total_count":1,"children":[]},{"name":"rowToRiskSignal()","total_count":1,"children":[]},{"name":"rowToTeamMember()","total_count":1,"children":[]},{"name":"rowToVisionItem()","total_count":1,"children":[]},{"name":"upsertPrice()","total_count":1,"children":[]}]},{"name":"insert-events.mjs","total_count":3,"children":[{"name":"events","total_count":1,"children":[]},{"name":"jalali()","total_count":1,"children":[]},{"name":"stmt","total_count":1,"children":[]}]},{"name":"insert-factory.mjs","total_count":2,"children":[{"name":"reports","total_count":1,"children":[]},{"name":"stmt","total_count":1,"children":[]}]},{"name":"package.json","total_count":29,"children":[{"name":"@aws-sdk/client-s3","total_count":1,"children":[]},{"name":"bcryptjs","total_count":1,"children":[]},{"name":"cheerio","total_count":1,"children":[]},{"name":"cookie-parser","total_count":1,"children":[]},{"name":"cors","total_count":1,"children":[]},{"name":"dependencies","total_count":1,"children":[]},{"name":"description","total_count":1,"children":[]},{"name":"dev","total_count":1,"children":[]},{"name":"dotenv","total_count":1,"children":[]},{"name":"engines","total_count":1,"children":[]},{"name":"express","total_count":1,"children":[]},{"name":"express-async-errors","total_count":1,"children":[]},{"name":"express-rate-limit","total_count":1,"children":[]},{"name":"helmet","total_count":1,"children":[]},{"name":"jsonwebtoken","total_count":1,"children":[]},{"name":"main","total_count":1,"children":[]},{"name":"multer","total_count":1,"children":[]},{"name":"name","total_count":1,"children":[]},{"name":"nanoid","total_count":1,"children":[]},{"name":"node","total_count":1,"children":[]},{"name":"nodemailer","total_count":1,"children":[]},{"name":"pg","total_count":1,"children":[]},{"name":"private","total_count":1,"children":[]},{"name":"scripts","total_count":1,"children":[]},{"name":"seed","total_count":1,"children":[]},{"name":"sharp","total_count":1,"children":[]},{"name":"start","total_count":1,"children":[]},{"name":"type","total_count":1,"children":[]},{"name":"version","total_count":1,"children":[]}]},{"name":"public","total_count":67,"children":[{"name":"app.js","total_count":67,"children":[{"name":"$()","total_count":1,"children":[]},{"name":"api()","total_count":1,"children":[]},{"name":"CATEGORIES","total_count":1,"children":[]},{"name":"CHART_SERIES","total_count":1,"children":[]},{"name":"CONTENT_TYPES","total_count":1,"children":[]},{"name":"escapeAttr()","total_count":1,"children":[]},{"name":"escapeHtml()","total_count":1,"children":[]},{"name":"EVENT_TYPES","total_count":1,"children":[]},{"name":"fmtDateTime()","total_count":1,"children":[]},{"name":"friendlyUserError()","total_count":1,"children":[]},{"name":"inferContentType()","total_count":1,"children":[]},{"name":"INTEGRATION_ICONS","total_count":1,"children":[]},{"name":"POSITIONS","total_count":1,"children":[]},{"name":"RADAR_CATEGORIES","total_count":1,"children":[]},{"name":"RADAR_FUTURE_CATEGORIES","total_count":1,"children":[]},{"name":"RADAR_PAGE_SLUGS","total_count":1,"children":[]},{"name":"renderAdvisoryEditor()","total_count":1,"children":[]},{"name":"renderAdvisoryList()","total_count":1,"children":[]},{"name":"renderBannerEditor()","total_count":1,"children":[]},{"name":"renderBannersList()","total_count":1,"children":[]},{"name":"renderChartPointEditor()","total_count":1,"children":[]},{"name":"renderChartPointsList()","total_count":1,"children":[]},{"name":"renderEditor()","total_count":1,"children":[]},{"name":"renderEventEditor()","total_count":1,"children":[]},{"name":"renderEventsList()","total_count":1,"children":[]},{"name":"renderFactoryReportEditor()","total_count":1,"children":[]},{"name":"renderFactoryReportsList()","total_count":1,"children":[]},{"name":"renderImport()","total_count":1,"children":[]},{"name":"renderIntegrationEditor()","total_count":1,"children":[]},{"name":"renderIntegrationsList()","total_count":1,"children":[]},{"name":"renderList()","total_count":1,"children":[]},{"name":"renderLogin()","total_count":1,"children":[]},{"name":"renderMarketPriceEditor()","total_count":1,"children":[]},{"name":"renderMarketPricesList()","total_count":1,"children":[]},{"name":"renderMediaList()","total_count":1,"children":[]},{"name":"renderMemberDetail()","total_count":1,"children":[]},{"name":"renderMembersList()","total_count":1,"children":[]},{"name":"renderNewsletterList()","total_count":1,"children":[]},{"name":"renderPlanEditor()","total_count":1,"children":[]},{"name":"renderPlansList()","total_count":1,"children":[]},{"name":"renderRadarEditor()","total_count":1,"children":[]},{"name":"renderRadarFutureList()","total_count":1,"children":[]},{"name":"renderRadarList()","total_count":1,"children":[]},{"name":"renderRadarPageEditor()","total_count":1,"children":[]},{"name":"renderRadarPagesList()","total_count":1,"children":[]},{"name":"renderRiskEditor()","total_count":1,"children":[]},{"name":"renderRisksList()","total_count":1,"children":[]},{"name":"renderStatEditor()","total_count":1,"children":[]},{"name":"renderStatsList()","total_count":1,"children":[]},{"name":"renderTeamEditor()","total_count":1,"children":[]},{"name":"renderTeamList()","total_count":1,"children":[]},{"name":"renderTypeSelector()","total_count":1,"children":[]},{"name":"renderUserEditor()","total_count":1,"children":[]},{"name":"renderUsersList()","total_count":1,"children":[]},{"name":"renderVisionEditor()","total_count":1,"children":[]},{"name":"renderVisionList()","total_count":1,"children":[]},{"name":"RISK_LEVELS","total_count":1,"children":[]},{"name":"root","total_count":1,"children":[]},{"name":"SCROLL_DIRS","total_count":1,"children":[]},{"name":"sectionLabelsForCategory()","total_count":1,"children":[]},{"name":"TAB_GROUPS","total_count":1,"children":[]},{"name":"TAB_LABELS","total_count":1,"children":[]},{"name":"topbarHtml()","total_count":1,"children":[]},{"name":"TREND_TYPES","total_count":1,"children":[]},{"name":"TYPES","total_count":1,"children":[]},{"name":"VISION_ICONS","total_count":1,"children":[]},{"name":"wireTabs()","total_count":1,"children":[]}]}]},{"name":"run-import.mjs","total_count":1,"children":[{"name":"payloads","total_count":1,"children":[]}]},{"name":"scraper.js","total_count":8,"children":[{"name":"fetchPage()","total_count":1,"children":[]},{"name":"parseChangeCell()","total_count":1,"children":[]},{"name":"parsePrices()","total_count":1,"children":[]},{"name":"scrapeOnce()","total_count":1,"children":[]},{"name":"SOURCES","total_count":1,"children":[]},{"name":"startScraperLoop()","total_count":1,"children":[]},{"name":"stopScraperLoop()","total_count":1,"children":[]},{"name":"toNumber()","total_count":1,"children":[]}]},{"name":"scripts","total_count":12,"children":[{"name":"migrate-content.mjs","total_count":2,"children":[{"name":"CAT_TO_SUBMENU","total_count":1,"children":[]},{"name":"GLANCE","total_count":1,"children":[]}]},{"name":"seed-glance-mock.mjs","total_count":10,"children":[{"name":"__dirname","total_count":1,"children":[]},{"name":"cats","total_count":1,"children":[]},{"name":"DATA","total_count":1,"children":[]},{"name":"DATES_EN","total_count":1,"children":[]},{"name":"DATES_FA","total_count":1,"children":[]},{"name":"envPath","total_count":1,"children":[]},{"name":"IMGS","total_count":1,"children":[]},{"name":"main()","total_count":1,"children":[]},{"name":"pool","total_count":1,"children":[]},{"name":"rows","total_count":1,"children":[]}]}]},{"name":"seed-content.js","total_count":14,"children":[{"name":"ADVISORY_BOARD","total_count":1,"children":[]},{"name":"BANNERS","total_count":1,"children":[]},{"name":"EVENTS","total_count":1,"children":[]},{"name":"FACTORY_REPORTS","total_count":1,"children":[]},{"name":"INTEGRATIONS","total_count":1,"children":[]},{"name":"main()","total_count":1,"children":[]},{"name":"PLANS","total_count":1,"children":[]},{"name":"PODCASTS","total_count":1,"children":[]},{"name":"RADAR_ITEMS","total_count":1,"children":[]},{"name":"req()","total_count":1,"children":[]},{"name":"seedIfEmpty()","total_count":1,"children":[]},{"name":"TEAM","total_count":1,"children":[]},{"name":"VIDEOS","total_count":1,"children":[]},{"name":"VISION_ITEMS","total_count":1,"children":[]}]},{"name":"seed-radar.js","total_count":9,"children":[{"name":"FA_DIGITS","total_count":1,"children":[]},{"name":"faNum()","total_count":1,"children":[]},{"name":"IMG","total_count":1,"children":[]},{"name":"MONTHS","total_count":1,"children":[]},{"name":"pick()","total_count":1,"children":[]},{"name":"pickN()","total_count":1,"children":[]},{"name":"pool","total_count":1,"children":[]},{"name":"SOURCES","total_count":1,"children":[]},{"name":"TAGS","total_count":1,"children":[]}]},{"name":"seed.js","total_count":1,"children":[{"name":"hash","total_count":1,"children":[]}]},{"name":"server.js","total_count":57,"children":[{"name":"__dirname","total_count":1,"children":[]},{"name":"ADMIN_IPS","total_count":1,"children":[]},{"name":"ALLOWED_LEVELS","total_count":1,"children":[]},{"name":"ALLOWED_ORIGINS","total_count":1,"children":[]},{"name":"ALLOWED_SERIES","total_count":1,"children":[]},{"name":"app","total_count":1,"children":[]},{"name":"authRequired()","total_count":1,"children":[]},{"name":"BANNER_POSITIONS","total_count":1,"children":[]},{"name":"bumpLoginFail()","total_count":1,"children":[]},{"name":"canSendOtp()","total_count":1,"children":[]},{"name":"checkOtp()","total_count":1,"children":[]},{"name":"classifyPdfText()","total_count":1,"children":[]},{"name":"clearLoginFail()","total_count":1,"children":[]},{"name":"contactLimiter","total_count":1,"children":[]},{"name":"cookieSecure()","total_count":1,"children":[]},{"name":"deepSanitize()","total_count":1,"children":[]},{"name":"escHtml()","total_count":1,"children":[]},{"name":"INTEGRATION_ICONS","total_count":1,"children":[]},{"name":"isLocalhost()","total_count":1,"children":[]},{"name":"jsonOnly()","total_count":1,"children":[]},{"name":"loginFails","total_count":1,"children":[]},{"name":"loginLimiter","total_count":1,"children":[]},{"name":"loginLocked()","total_count":1,"children":[]},{"name":"MEDIA_BASE","total_count":1,"children":[]},{"name":"memberCookieOpts()","total_count":1,"children":[]},{"name":"memberRequired()","total_count":1,"children":[]},{"name":"newOtp()","total_count":1,"children":[]},{"name":"normalizeAdvisoryBody()","total_count":1,"children":[]},{"name":"normalizeArticleBody()","total_count":1,"children":[]},{"name":"normalizeBannerBody()","total_count":1,"children":[]},{"name":"normalizeChartPointBody()","total_count":1,"children":[]},{"name":"normalizeEventBody()","total_count":1,"children":[]},{"name":"normalizeFactoryReportBody()","total_count":1,"children":[]},{"name":"normalizeInstituteStatBody()","total_count":1,"children":[]},{"name":"normalizeIntegrationBody()","total_count":1,"children":[]},{"name":"normalizeMarketPriceBody()","total_count":1,"children":[]},{"name":"normalizePlanBody()","total_count":1,"children":[]},{"name":"normalizeRadarBody()","total_count":1,"children":[]},{"name":"normalizeRadarPageBody()","total_count":1,"children":[]},{"name":"normalizeRiskBody()","total_count":1,"children":[]},{"name":"normalizeTeamBody()","total_count":1,"children":[]},{"name":"normalizeVisionBody()","total_count":1,"children":[]},{"name":"otpSends","total_count":1,"children":[]},{"name":"otpStore","total_count":1,"children":[]},{"name":"ownerRequired()","total_count":1,"children":[]},{"name":"PORT","total_count":1,"children":[]},{"name":"putObject()","total_count":1,"children":[]},{"name":"s3Host","total_count":1,"children":[]},{"name":"safeHref()","total_count":1,"children":[]},{"name":"SECTION_KEYWORDS","total_count":1,"children":[]},{"name":"sendOtpSms()","total_count":1,"children":[]},{"name":"serveAdminSPA","total_count":1,"children":[]},{"name":"sniffKind()","total_count":1,"children":[]},{"name":"STATISTA_URL","total_count":1,"children":[]},{"name":"stripCites()","total_count":1,"children":[]},{"name":"upload","total_count":1,"children":[]},{"name":"uploadRaw","total_count":1,"children":[]}]},{"name":"update-radar-images.mjs","total_count":4,"children":[{"name":"articleImages","total_count":1,"children":[]},{"name":"aStmt","total_count":1,"children":[]},{"name":"radarImages","total_count":1,"children":[]},{"name":"stmt","total_count":1,"children":[]}]},{"name":"clear-banners.js","total_count":1,"children":[]}]}]};
|
|
|
|
function transformData(jsonData) {
|
|
// Helper function to recursively build the children structure
|
|
function processNode(node, parentL1StageName) {
|
|
let displayName = node.name;
|
|
// Append total_count if it exists and is not already in the name
|
|
if (node.total_count !== undefined) {
|
|
if (!/\(Total Count: \d+\)$/.test(displayName)) {
|
|
displayName += ` (Total Count: ${node.total_count})`;
|
|
}
|
|
}
|
|
|
|
const newNode = { name: displayName };
|
|
|
|
if (parentL1StageName === "Root") {
|
|
newNode.originalStageName = node.name;
|
|
} else {
|
|
newNode.originalStageName = parentL1StageName;
|
|
}
|
|
|
|
if (node.children && node.children.length > 0) {
|
|
const stageNameToPass = (parentL1StageName === "Root") ? node.name : parentL1StageName;
|
|
newNode.children = node.children.map(child => processNode(child, stageNameToPass));
|
|
}
|
|
|
|
return newNode;
|
|
}
|
|
|
|
let rootDisplayName = jsonData.name;
|
|
if (jsonData.total_count !== undefined && !/\(Total Count: \d+\)$/.test(rootDisplayName)) {
|
|
rootDisplayName += ` (Total Count: ${jsonData.total_count})`;
|
|
}
|
|
|
|
return {
|
|
name: rootDisplayName,
|
|
originalStageName: "Root",
|
|
children: (jsonData.children || []).map(child => processNode(child, "Root"))
|
|
};
|
|
}
|
|
|
|
const treeData = transformData(initialJsonData);
|
|
|
|
// Auto-populated phaseColors: every depth-1 child of the root gets
|
|
// a stable colour from a bigger palette so all top-level dirs are
|
|
// distinguishable.
|
|
const PALETTE = [
|
|
["#3498DB","#2980B9","#AED6F1"], ["#2ECC71","#27AE60","#A9DFBF"],
|
|
["#E74C3C","#C0392B","#F5B7B1"], ["#9B59B6","#8E44AD","#D7BDE2"],
|
|
["#F39C12","#D68910","#FAD7A0"], ["#1ABC9C","#117864","#A2D9CE"],
|
|
["#34495E","#1B2631","#ABB2B9"], ["#E67E22","#BA4A00","#F5CBA7"],
|
|
["#16A085","#0E6655","#A2D9CE"], ["#D35400","#A04000","#EDBB99"],
|
|
["#7F8C8D","#566573","#D5DBDB"], ["#C0392B","#7B241C","#F5B7B1"],
|
|
["#2E86C1","#1B4F72","#A9CCE3"], ["#28B463","#196F3D","#A9DFBF"],
|
|
["#AF7AC5","#6C3483","#D2B4DE"],
|
|
];
|
|
const phaseColors = { "Root": { fill: "#4A4A4A", stroke: "#333333", collapsedFill: "#6C757D" },
|
|
"Default": { fill: "#BDC3C7", stroke: "#95A5A6", collapsedFill: "#ECF0F1" } };
|
|
(initialJsonData.children || []).forEach((c, i) => {
|
|
const pal = PALETTE[i % PALETTE.length];
|
|
phaseColors[c.name] = { fill: pal[0], stroke: pal[1], collapsedFill: pal[2] };
|
|
});
|
|
|
|
const levelSpecificPalettes = {
|
|
0: { fill: "#4A4A4A", stroke: "#333333", collapsedFill: "#6C757D" },
|
|
2: { fill: "#6ab04c", stroke: "#508a38", collapsedFill: "#a3d391" },
|
|
3: { fill: "#f0932b", stroke: "#d0730f", collapsedFill: "#f6c07e" },
|
|
4: { fill: "#be2edd", stroke: "#a01cb3", collapsedFill: "#e08bf2" },
|
|
5: { fill: "#00a8ff", stroke: "#007ac1", collapsedFill: "#74d2ff" },
|
|
6: { fill: "#e55039", stroke: "#c23620", collapsedFill: "#f09a8d" },
|
|
default: { fill: "#747d8c", stroke: "#57606f", collapsedFill: "#a4b0be" }
|
|
};
|
|
|
|
const svgElement = d3.select("#tree-svg");
|
|
const initialSvgWidth = +svgElement.attr("width");
|
|
const initialSvgHeight = +svgElement.attr("height");
|
|
const margin = { top: 40, right: 120, bottom: 80, left: 450 };
|
|
let width = initialSvgWidth - margin.left - margin.right;
|
|
let height = initialSvgHeight - margin.top - margin.bottom;
|
|
const duration = 500;
|
|
let nodeCounter = 0;
|
|
const g = svgElement.append("g").attr("transform", `translate(${margin.left},${margin.top})`);
|
|
const treemap = d3.tree().nodeSize([40, 0]);
|
|
let rootNode = d3.hierarchy(treeData, d => d.children);
|
|
rootNode.x0 = 0;
|
|
rootNode.y0 = 0;
|
|
|
|
if (rootNode.children) {
|
|
rootNode.children.forEach(d_child => {
|
|
if (d_child.children) { collapseBranch(d_child); }
|
|
});
|
|
}
|
|
updateTree(rootNode);
|
|
|
|
function collapseBranch(d) { if (d.children) { d._children = d.children; d._children.forEach(collapseBranch); d.children = null; } }
|
|
function expandBranch(d) { if (d._children) { d.children = d._children; d._children = null; } if (d.children) { d.children.forEach(expandBranch); } }
|
|
window.expandAll = () => { expandBranch(rootNode); updateTree(rootNode); };
|
|
window.collapseAll = () => { if (rootNode.children) { rootNode.children.forEach(collapseBranch); } updateTree(rootNode); };
|
|
window.resetView = () => { if (rootNode.children) { rootNode.children.forEach(d_child => { if (d_child.children || d_child._children) { collapseBranch(d_child); } }); } if (rootNode._children && !rootNode.children) { rootNode.children = rootNode._children; rootNode._children = null; } updateTree(rootNode); };
|
|
|
|
function updateTree(source) {
|
|
const treeLayoutData = treemap(rootNode);
|
|
let nodes = treeLayoutData.descendants();
|
|
let links = treeLayoutData.descendants().slice(1);
|
|
|
|
let minX = 0;
|
|
let maxX = 0;
|
|
if (nodes.length > 0) {
|
|
minX = d3.min(nodes, d => d.x);
|
|
maxX = d3.max(nodes, d => d.x);
|
|
}
|
|
|
|
let neededHeight = Math.max(initialSvgHeight, maxX - minX + margin.top + margin.bottom + 100);
|
|
svgElement.transition().duration(duration / 2).attr("height", neededHeight);
|
|
g.transition().duration(duration / 2).attr("transform", `translate(${margin.left},${margin.top - minX + 40})`);
|
|
|
|
nodes.forEach(d => { d.y = d.depth * 400; }); // Adjust horizontal separation if needed
|
|
|
|
const node = g.selectAll('g.node').data(nodes, d => d.id || (d.id = ++nodeCounter));
|
|
const nodeEnter = node.enter().append('g')
|
|
.attr('class', d => "node" + (d.children || d._children ? " node--internal" : " node--leaf") + (d._children ? " _children" : ""))
|
|
.attr('transform', d => `translate(${source.y0},${source.x0})`)
|
|
.on('click', (event, d) => { if (d.children) { d._children = d.children; d.children = null; } else if (d._children) { d.children = d._children; d._children = null; } updateTree(d); })
|
|
.style('cursor', d => (d.children || d._children) ? 'pointer' : 'default');
|
|
|
|
nodeEnter.append('circle').attr('r', 1e-6);
|
|
|
|
nodeEnter.append('text')
|
|
.attr('dy', '.35em')
|
|
.attr('x', d => d.children || d._children ? -14 : 14)
|
|
.attr('text-anchor', d => d.children || d._children ? 'end' : 'start')
|
|
.style("fill-opacity", 1e-6)
|
|
.call(wrapText, 380);
|
|
|
|
const nodeUpdate = nodeEnter.merge(node);
|
|
nodeUpdate.transition().duration(duration)
|
|
.attr('transform', d => `translate(${d.y},${d.x})`)
|
|
.attr('class', d => "node" + (d.children ? " node--internal" : " node--leaf") + (d._children ? " node--internal _children" : ""));
|
|
|
|
nodeUpdate.select('circle').attr('r', 8.5)
|
|
.style('fill', d => {
|
|
let palette;
|
|
if (d.depth === 0) {
|
|
palette = levelSpecificPalettes[0];
|
|
} else if (d.depth === 1) {
|
|
palette = phaseColors[d.data.originalStageName] || phaseColors.Default;
|
|
} else {
|
|
palette = levelSpecificPalettes[d.depth] || levelSpecificPalettes.default;
|
|
}
|
|
if (d._children) return palette.collapsedFill;
|
|
if (d.children) return palette.fill;
|
|
return "#fff";
|
|
})
|
|
.style('stroke', d => {
|
|
let palette;
|
|
if (d.depth === 0) {
|
|
palette = levelSpecificPalettes[0];
|
|
} else if (d.depth === 1) {
|
|
palette = phaseColors[d.data.originalStageName] || phaseColors.Default;
|
|
} else {
|
|
palette = levelSpecificPalettes[d.depth] || levelSpecificPalettes.default;
|
|
}
|
|
return palette.stroke;
|
|
});
|
|
nodeUpdate.select('text').style("fill-opacity", 1).call(wrapText, 380);
|
|
|
|
const nodeExit = node.exit().transition().duration(duration).attr('transform', d => `translate(${source.y},${source.x})`).remove();
|
|
nodeExit.select('circle').attr('r', 1e-6);
|
|
nodeExit.select('text').style('fill-opacity', 1e-6);
|
|
|
|
const link = g.selectAll('path.link').data(links, d => d.id);
|
|
const linkEnter = link.enter().insert('path', "g").attr('class', 'link').attr('d', d => { const o = { x: source.x0, y: source.y0 }; return diagonal(o, o); });
|
|
|
|
linkEnter.merge(link).transition().duration(duration).attr('d', d => diagonal(d, d.parent))
|
|
.style('stroke', d => {
|
|
const sourceNode = d.parent;
|
|
if (!sourceNode) return phaseColors.Default.stroke;
|
|
const l1AncestorName = sourceNode.data.originalStageName;
|
|
const colorPalette = phaseColors[l1AncestorName] || phaseColors.Default;
|
|
return colorPalette.stroke;
|
|
});
|
|
link.exit().transition().duration(duration).attr('d', d => { const o = { x: source.x, y: source.y }; return diagonal(o, o); }).remove();
|
|
nodes.forEach(d => { d.x0 = d.x; d.y0 = d.y; });
|
|
}
|
|
|
|
function diagonal(s, d) { return `M ${s.y} ${s.x} C ${(s.y + d.y) / 2} ${s.x}, ${(s.y + d.y) / 2} ${d.x}, ${d.y} ${d.x}`; }
|
|
|
|
function wrapText(textElements, maxWidth) {
|
|
const textPartColors = {
|
|
name: '#343a40',
|
|
count: '#0056b3'
|
|
};
|
|
const countRegex = /(\s\(Total Count: \d+\))$/;
|
|
|
|
textElements.each(function () {
|
|
const textD3 = d3.select(this);
|
|
const originalNodeText = textD3.datum().data.name;
|
|
const x = parseFloat(textD3.attr("x") || 0);
|
|
const initialDy = textD3.attr("dy");
|
|
const textAnchor = textD3.attr("text-anchor");
|
|
const lineHeight = 1.1;
|
|
|
|
textD3.text(null);
|
|
|
|
let namePart = originalNodeText;
|
|
let countPartText = "";
|
|
|
|
const countMatch = originalNodeText.match(countRegex);
|
|
if (countMatch && originalNodeText.endsWith(countMatch[0])) {
|
|
namePart = originalNodeText.substring(0, originalNodeText.length - countMatch[0].length).trim();
|
|
countPartText = countMatch[0].trim();
|
|
}
|
|
|
|
const tokens = [];
|
|
namePart.split(/\s+/).filter(Boolean).forEach(word => {
|
|
tokens.push({ text: word, type: 'name' });
|
|
});
|
|
if (countPartText) {
|
|
tokens.push({ text: countPartText, type: 'count' });
|
|
}
|
|
|
|
if (tokens.length === 0 && originalNodeText) {
|
|
tokens.push({ text: originalNodeText, type: 'name' });
|
|
}
|
|
|
|
let currentTspan = textD3.append("tspan").attr("x", x).attr("dy", initialDy);
|
|
if (textAnchor === "end") currentTspan.attr("text-anchor", "end");
|
|
|
|
let lineTokens = [];
|
|
|
|
for (let i = 0; i < tokens.length; i++) {
|
|
const tokenObj = tokens[i];
|
|
|
|
lineTokens.push(tokenObj);
|
|
currentTspan.text(lineTokens.map(t => t.text).join(" "));
|
|
|
|
if (currentTspan.node().getComputedTextLength() > maxWidth && lineTokens.length > 1) {
|
|
lineTokens.pop();
|
|
|
|
currentTspan.text(null);
|
|
lineTokens.forEach((prevToken, idx) => {
|
|
currentTspan.append("tspan")
|
|
.text((idx > 0 ? " " : "") + prevToken.text)
|
|
.style("fill", textPartColors[prevToken.type] || textPartColors.name)
|
|
.style("font-weight", prevToken.type === 'count' ? "bold" : "normal");
|
|
});
|
|
|
|
lineTokens = [tokenObj];
|
|
currentTspan = textD3.append("tspan").attr("x", x).attr("dy", lineHeight + "em");
|
|
if (textAnchor === "end") currentTspan.attr("text-anchor", "end");
|
|
}
|
|
}
|
|
|
|
currentTspan.text(null);
|
|
lineTokens.forEach((token, idx) => {
|
|
currentTspan.append("tspan")
|
|
.text((idx > 0 ? " " : "") + token.text)
|
|
.style("fill", textPartColors[token.type] || textPartColors.name)
|
|
.style("font-weight", token.type === 'count' ? "bold" : "normal");
|
|
});
|
|
|
|
if (textD3.selectAll("tspan > tspan").empty() && textD3.select("tspan").text().length === 0 && originalNodeText) {
|
|
let t = textD3.select("tspan");
|
|
let displayText = originalNodeText;
|
|
t.text(displayText).style("fill", textPartColors.name);
|
|
if (t.node() && t.node().getComputedTextLength() > maxWidth && displayText.length > 20) {
|
|
let estimatedChars = Math.floor(maxWidth / (t.node().getComputedTextLength()/displayText.length) );
|
|
displayText = displayText.substring(0, Math.max(0, estimatedChars - 3)) + "...";
|
|
t.text(displayText);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|