Infographic Creator
Run ID: 69b6ee7095d85cd597625a402026-03-29Design
PantheraHive BOS
BOS Dashboard

Workflow Execution: Infographic Creator (Design)

Topic: Climate Change Stats 2026

Style: Modern

This output provides a comprehensive plan for creating a modern infographic on Climate Change Statistics for 2026. It includes recommended content, data points, design principles, and actionable steps to ensure a professional and impactful final product.


1. Infographic Overview & Core Message

Goal: To present critical, up-to-date climate change statistics and projections for 2026 in a clear, concise, and visually engaging modern format.

Target Audience: General public, students, educators, policymakers, businesses, and environmental advocates seeking quick, impactful data.

Core Message: The planet is experiencing accelerating climate change impacts, with key indicators nearing critical thresholds by 2026, necessitating urgent action.

Recommended Title:

  • Primary: "Climate Pulse 2026: Key Statistics & Urgent Trends"
  • Alternative 1: "2026 Climate Snapshot: The State of Our Warming World"
  • Alternative 2: "The Climate Crisis: Stats & Projections to 2026"

Recommended Subtitle: "A concise look at the latest climate science indicators and their near-future implications."


2. Infographic Structure & Key Sections

To maintain a modern, clean look, the infographic should be divided into logical, easily digestible sections. Each section will feature a prominent heading, a concise summary, and key data points.

  1. Introduction: The Global Outlook
  2. Atmospheric Indicators: The Air We Breathe
  3. Global Temperature Trends: Nearing Critical Thresholds
  4. Ocean & Ice Dynamics: Rising Tides, Melting Worlds
  5. Extreme Weather Impacts: A New Normal
  6. Socio-Economic & Ecological Consequences: Ripple Effects
  7. The Path Ahead (Briefly): Actions & Outlook

3. Detailed Content & Data Points (for 2026 Projections/Trends)

Note: Statistics for 2026 are projections based on current trends and scientific consensus (e.g., IPCC, WMO, NOAA, NASA reports). Exact numbers for 2026 are not yet available, so these represent likely trends and ranges.

3.1. Introduction: The Global Outlook

  • Summary: Briefly set the stage, emphasizing the urgency and the ongoing nature of climate change.
  • Key Message: By 2026, global warming continues its relentless march, with visible and measurable impacts across the planet.
  • Data Point (Visual Hook): Small Earth icon with an upward-trending arrow.

* "Global Warming: Accelerating beyond pre-industrial levels."

3.2. Atmospheric Indicators: The Air We Breathe

  • Summary: Focus on the primary greenhouse gas driving warming.
  • Key Message: Carbon Dioxide levels continue to climb, trapping more heat.
  • Data Points:

* CO2 Concentration:

* "Approaching 430 ppm: Atmospheric CO2 levels are projected to reach ~426-429 parts per million (ppm) by 2026, a significant increase from pre-industrial levels (~280 ppm)."

Visual:* A line graph showing rising CO2 from 1950 to 2026, highlighting the 2026 projection.

* Annual Increase:

* "+2-3 ppm/year: CO2 concentration continues to rise at an alarming rate annually."

Visual:* Small upward arrow with the number.

3.3. Global Temperature Trends: Nearing Critical Thresholds

  • Summary: Highlight the ongoing temperature rise relative to pre-industrial levels and the proximity to the 1.5°C Paris Agreement limit.
  • Key Message: The world is rapidly approaching the critical 1.5°C warming threshold.
  • Data Points:

* Global Average Temperature Anomaly:

* "~1.3-1.4°C Above Pre-Industrial: 2026 is projected to be among the warmest years on record, maintaining the trend of being ~1.3°C to 1.4°C warmer than 1850-1900 levels."

Visual:* A thermometer icon with the mercury rising, or a bar chart comparing pre-industrial to 2026.

* 1.5°C Threshold Probability:

* "High Probability of Temporary Exceedance: There's a significant chance (e.g., >60% per WMO) that at least one year between 2023-2027 will temporarily exceed 1.5°C above pre-industrial levels, with 2026 being a key year in this period."

Visual:* A clock or gauge icon indicating "Nearing 1.5°C".

3.4. Ocean & Ice Dynamics: Rising Tides, Melting Worlds

  • Summary: Detail the impact on oceans and cryosphere.
  • Key Message: Oceans are warming, acidifying, and expanding, contributing to significant sea-level rise and ice loss.
  • Data Points:

* Global Mean Sea Level Rise:

* "Rising ~3.6-4.0 mm/year: Global mean sea level continues to rise, with projections indicating an ongoing increase of approximately 3.6-4.0 mm per year by 2026 (based on 2006-2018 average trend)."

Visual:* A rising water level graphic next to a coastline.

* Ocean Heat Content:

* "Record High Ocean Heat: Oceans absorb over 90% of excess heat, leading to continued record-breaking ocean heat content, impacting marine life and weather patterns."

Visual:* A heat map of the ocean or a rising temperature gauge within an ocean icon.

* Arctic Sea Ice Extent:

* "Continued Decline: Arctic sea ice continues its long-term decline, with summer minimums projected to remain significantly below historical averages."

Visual:* A melting ice cap icon with a downward trend arrow.

3.5. Extreme Weather Impacts: A New Normal

  • Summary: Illustrate the increased frequency and intensity of severe weather events.
  • Key Message: Climate change is intensifying extreme weather, leading to more frequent and severe events globally.
  • Data Points:

* Heatwaves:

* "Increased Frequency & Intensity: Expect more frequent, longer-duration, and more intense heatwaves across many regions."

Visual:* Sun icon with heatwaves.

* Droughts & Floods:

* "Regional Extremes: Continued increase in severe droughts in some regions and heavy rainfall/flooding in others."

Visual:* Split icon: parched earth / heavy rain clouds.

* Tropical Cyclones:

* "Stronger Storms: While total numbers may vary, the proportion of intense (Category 4 & 5) tropical cyclones is projected to increase."

Visual:* Hurricane/cyclone icon.

3.6. Socio-Economic & Ecological Consequences: Ripple Effects

  • Summary: Broaden the scope to human and natural systems.
  • Key Message: Climate impacts are cascading, affecting human health, economies, and biodiversity.
  • Data Points:

* Economic Losses:

* "Billions in Damages: Climate-related disasters continue to incur billions of dollars in economic losses globally each year."

Visual:* Stack of money/coins with a broken sign.

* Food Security:

* "Agricultural Disruptions: Regional crop yield reductions and increased food insecurity due to extreme weather."

Visual:* Wheat stalk or corn cob with a crack.

* Biodiversity Loss:

* "Accelerated Extinction Rates: Continued threat to ecosystems and species due to habitat loss, ocean acidification, and temperature shifts."

Visual:* Dying tree or endangered animal silhouette.

* Climate Migration:

* "Increasing Displacement: Growing numbers of people displaced by climate impacts like floods, droughts, and sea-level rise."

Visual:* People walking with bags.

3.7. The Path Ahead (Briefly): Actions & Outlook

  • Summary: A very brief concluding thought to provide context, not detailed solutions (as the focus is "stats").
  • Key Message: The data underscores the urgency for immediate and sustained climate action.
  • Data Point (Call to Reflection):

* "Decisive Decade: The statistics for 2026 reinforce that the next few years are critical for global efforts to mitigate the worst impacts of climate change."

Visual:* A subtle upward arrow or a "call to action" icon.


4. Modern Design & Visual Recommendations

A modern infographic emphasizes clarity, conciseness, and aesthetic appeal.

4.1. Color Palette

  • Primary Colors: Cool, muted tones (e.g., deep blues, teals, soft greens) to represent the environment and stability.
  • Accent/Warning Colors: Pops of bright, contrasting colors (e.g., vibrant reds, oranges, deep yellows) for alarming statistics or critical thresholds.
  • Neutrals: Ample use of white space, light grays for backgrounds or subtle separators.
  • Example Palette:

* Background: #F8F8F8 (Off-white)

* Text: #333333 (Dark Gray)

* Primary Accent (Positive/Stable): #2E8B57 (Sea Green)

* Secondary Accent (Warning/Critical): #FF6347 (Tomato Red)

* Tertiary Accent (Neutral Data): #6A5ACD (Slate Blue)

4.2. Typography

  • Sans-serif Fonts: Use clean, highly readable sans-serif fonts throughout.

* Headings: Bold, slightly larger font (e.g., Montserrat, Lato Black).

* Body Text: Regular or Light weight (e.g., Open Sans, Roboto, Lato).

* Data Points: Clear, distinct font, potentially slightly bolder (e.g., Poppins SemiBold).

  • Hierarchy: Establish a clear font size and weight hierarchy for titles, section headings, data points, and descriptive text.

4.3. Layout & Visual Elements

  • Grid-Based Layout: Use a structured grid to ensure alignment, balance, and ample white space. This enhances readability and gives a professional, modern feel.
  • Clean Sections: Clearly delineate each section with subtle dividers or distinct background colors.
  • Minimalist Design: Avoid clutter. Every element should serve a purpose.
  • Visual Flow: Guide the reader's eye logically from top to bottom or left to right.
  • Ample White Space: Crucial for a modern aesthetic, preventing visual fatigue and making the content pop.

4.4. Iconography

  • Flat or Line Icons: Use a consistent style of flat or line icons for visual representation (e.g., Earth, thermometer, rising water, storm cloud, melting ice, plant, factory, dollar sign).
  • Consistency: All icons should share the same design language (e.g., stroke weight, fill style).
  • Purpose: Icons should simplify complex ideas and add visual interest without distracting from the data.

4.5. Data Visualization Types

  • Simple Charts:

* Line Graphs: Ideal for showing trends over time (e.g., CO2 levels, temperature anomaly).

* Bar Charts: Good for comparing discrete values (e.g., economic losses over years, if space allows).

* Donut/Pie Charts: Useful for showing proportions (e.g., percentage breakdown of heat absorption).

  • Infographic Elements:

* Thermometer Scales: For temperature changes.

* Rising Water Levels: For sea-level rise.

* Gauge/Dial Graphics: For proximity to thresholds (e.g., 1.5°C).

* Annotated Maps: If specific regional impacts are highlighted (e.g., drought areas).

  • Direct Numbers: Present key statistics boldly with minimal surrounding text.

5. Recommended Tools & Platforms

To create an infographic with a modern style, consider the following tools:

  • Professional Design Software:

* Adobe Illustrator: For vector graphics, precise control, and scalable designs.

* Adobe InDesign: Excellent for multi-page layouts, though Illustrator is often preferred for single-page infographics.

  • User-Friendly Online Tools:

* Canva: Great for beginners and quick designs, offers many modern templates and stock elements.

* Piktochart: Specifically designed for infographics, offering templates and easy data visualization tools.

* Venngage: Another strong infographic creator with a focus on professional templates and data integration.

  • Data Visualization Libraries (for developers/advanced users):

* D3.js, Chart.js: For custom, interactive web-based infographics.


6. Actionable Steps for Implementation

  1. Content Finalization: Review the provided data points and tailor them to your specific narrative. Ensure all statistics are accurately referenced (even if not explicitly shown on the infographic, have sources ready).
  2. Choose Your Tool: Select a design tool based on your expertise and desired level of control.
  3. Sketch Layouts: Before digital design, sketch out a few different layouts for the infographic to visualize the flow and placement of sections.
  4. Select Color Palette & Fonts: Implement the chosen modern color palette and typography.
  5. Design Section by Section:

* Start with the title and introduction.

* Build out each data section, integrating icons and simple charts.

* Ensure consistency in icon style, chart design, and text formatting.

  1. Prioritize White Space: Regularly check for clutter and add white space to improve readability.
  2. Data Visualization: Use the recommended chart types for each data point. Make sure charts are easy to read and labels are clear.
  3. Review & Refine:

* Clarity: Is the message clear and easy to understand?

* Accuracy: Are all statistics correct and attributed (if applicable)?

* Visual Appeal: Does it look professional and modern?

* Flow: Does the infographic tell a coherent story?

* Proofread: Check for any typos or grammatical errors.

  1. Add a Source/Disclaimer Section: At the bottom, include a small section for "Data Sources:" (e.g., IPCC, WMO, NOAA, NASA, etc.) and a small disclaimer about projections.

7. Disclaimer & Data Sourcing Note

  • Disclaimer: The statistics provided for 2026 are based on current scientific projections, trends, and models from reputable climate organizations. Actual figures for 2026 may vary slightly as new data becomes available.
  • Data Sourcing: Always refer to the latest reports from authoritative bodies such as:

* Intergovernmental Panel on Climate Change (IPCC)

* World Meteorological Organization (WMO)

* National Oceanic and Atmospheric Administration (NOAA)

* National Aeronautics and Space Administration (NASA)

* European Centre for Medium-Range Weather Forecasts (ECMWF)

* Copernicus Climate Change Service (C3S)

infographic_creator.md
Download as Markdown
Copy all content
Full output as text
Download ZIP
IDE-ready project ZIP
Copy share link
Permanent URL for this run
Get Embed Code
Embed this result on any website
Print / Save PDF
Use browser print dialog
\n\n\n"); var hasSrcMain=Object.keys(extracted).some(function(k){return k.indexOf("src/main")>=0;}); if(!hasSrcMain) zip.file(folder+"src/main."+ext,"import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n \n \n \n)\n"); var hasSrcApp=Object.keys(extracted).some(function(k){return k==="src/App."+ext||k==="App."+ext;}); if(!hasSrcApp) zip.file(folder+"src/App."+ext,"import React from 'react'\nimport './App.css'\n\nfunction App(){\n return(\n
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n
\n )\n}\nexport default App\n"); zip.file(folder+"src/index.css","*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#f0f2f5;color:#1a1a2e}\n.app{min-height:100vh;display:flex;flex-direction:column}\n.app-header{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px}\nh1{font-size:2.5rem;font-weight:700}\n"); zip.file(folder+"src/App.css",""); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/pages/.gitkeep",""); zip.file(folder+"src/hooks/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\n## Open in IDE\nOpen the project folder in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- Vue (Vite + Composition API + TypeScript) --- */ function buildVue(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "type": "module",\n "scripts": {\n "dev": "vite",\n "build": "vue-tsc -b && vite build",\n "preview": "vite preview"\n },\n "dependencies": {\n "vue": "^3.5.13",\n "vue-router": "^4.4.5",\n "pinia": "^2.3.0",\n "axios": "^1.7.9"\n },\n "devDependencies": {\n "@vitejs/plugin-vue": "^5.2.1",\n "typescript": "~5.7.3",\n "vite": "^6.0.5",\n "vue-tsc": "^2.2.0"\n }\n}\n'); zip.file(folder+"vite.config.ts","import { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport { resolve } from 'path'\n\nexport default defineConfig({\n plugins: [vue()],\n resolve: { alias: { '@': resolve(__dirname,'src') } }\n})\n"); zip.file(folder+"tsconfig.json",'{"files":[],"references":[{"path":"./tsconfig.app.json"},{"path":"./tsconfig.node.json"}]}\n'); zip.file(folder+"tsconfig.app.json",'{\n "compilerOptions":{\n "target":"ES2020","useDefineForClassFields":true,"module":"ESNext","lib":["ES2020","DOM","DOM.Iterable"],\n "skipLibCheck":true,"moduleResolution":"bundler","allowImportingTsExtensions":true,\n "isolatedModules":true,"moduleDetection":"force","noEmit":true,"jsxImportSource":"vue",\n "strict":true,"paths":{"@/*":["./src/*"]}\n },\n "include":["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue"]\n}\n'); zip.file(folder+"env.d.ts","/// \n"); zip.file(folder+"index.html","\n\n\n \n \n "+slugTitle(pn)+"\n\n\n
\n \n\n\n"); var hasMain=Object.keys(extracted).some(function(k){return k==="src/main.ts"||k==="main.ts";}); if(!hasMain) zip.file(folder+"src/main.ts","import { createApp } from 'vue'\nimport { createPinia } from 'pinia'\nimport App from './App.vue'\nimport './assets/main.css'\n\nconst app = createApp(App)\napp.use(createPinia())\napp.mount('#app')\n"); var hasApp=Object.keys(extracted).some(function(k){return k.indexOf("App.vue")>=0;}); if(!hasApp) zip.file(folder+"src/App.vue","\n\n\n\n\n"); zip.file(folder+"src/assets/main.css","*{margin:0;padding:0;box-sizing:border-box}body{font-family:system-ui,sans-serif;background:#fff;color:#213547}\n"); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/views/.gitkeep",""); zip.file(folder+"src/stores/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\nOpen in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- Angular (v19 standalone) --- */ function buildAngular(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var sel=pn.replace(/_/g,"-"); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "scripts": {\n "ng": "ng",\n "start": "ng serve",\n "build": "ng build",\n "test": "ng test"\n },\n "dependencies": {\n "@angular/animations": "^19.0.0",\n "@angular/common": "^19.0.0",\n "@angular/compiler": "^19.0.0",\n "@angular/core": "^19.0.0",\n "@angular/forms": "^19.0.0",\n "@angular/platform-browser": "^19.0.0",\n "@angular/platform-browser-dynamic": "^19.0.0",\n "@angular/router": "^19.0.0",\n "rxjs": "~7.8.0",\n "tslib": "^2.3.0",\n "zone.js": "~0.15.0"\n },\n "devDependencies": {\n "@angular-devkit/build-angular": "^19.0.0",\n "@angular/cli": "^19.0.0",\n "@angular/compiler-cli": "^19.0.0",\n "typescript": "~5.6.0"\n }\n}\n'); zip.file(folder+"angular.json",'{\n "$schema": "./node_modules/@angular/cli/lib/config/schema.json",\n "version": 1,\n "newProjectRoot": "projects",\n "projects": {\n "'+pn+'": {\n "projectType": "application",\n "root": "",\n "sourceRoot": "src",\n "prefix": "app",\n "architect": {\n "build": {\n "builder": "@angular-devkit/build-angular:application",\n "options": {\n "outputPath": "dist/'+pn+'",\n "index": "src/index.html",\n "browser": "src/main.ts",\n "tsConfig": "tsconfig.app.json",\n "styles": ["src/styles.css"],\n "scripts": []\n }\n },\n "serve": {"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"'+pn+':build:production"},"development":{"buildTarget":"'+pn+':build:development"}},"defaultConfiguration":"development"}\n }\n }\n }\n}\n'); zip.file(folder+"tsconfig.json",'{\n "compileOnSave": false,\n "compilerOptions": {"baseUrl":"./","outDir":"./dist/out-tsc","forceConsistentCasingInFileNames":true,"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"paths":{"@/*":["src/*"]},"skipLibCheck":true,"esModuleInterop":true,"sourceMap":true,"declaration":false,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","useDefineForClassFields":false,"lib":["ES2022","dom"]},\n "references":[{"path":"./tsconfig.app.json"}]\n}\n'); zip.file(folder+"tsconfig.app.json",'{\n "extends":"./tsconfig.json",\n "compilerOptions":{"outDir":"./dist/out-tsc","types":[]},\n "files":["src/main.ts"],\n "include":["src/**/*.d.ts"]\n}\n'); zip.file(folder+"src/index.html","\n\n\n \n "+slugTitle(pn)+"\n \n \n \n\n\n \n\n\n"); zip.file(folder+"src/main.ts","import { bootstrapApplication } from '@angular/platform-browser';\nimport { appConfig } from './app/app.config';\nimport { AppComponent } from './app/app.component';\n\nbootstrapApplication(AppComponent, appConfig)\n .catch(err => console.error(err));\n"); zip.file(folder+"src/styles.css","* { margin: 0; padding: 0; box-sizing: border-box; }\nbody { font-family: system-ui, -apple-system, sans-serif; background: #f9fafb; color: #111827; }\n"); var hasComp=Object.keys(extracted).some(function(k){return k.indexOf("app.component")>=0;}); if(!hasComp){ zip.file(folder+"src/app/app.component.ts","import { Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n selector: 'app-root',\n standalone: true,\n imports: [RouterOutlet],\n templateUrl: './app.component.html',\n styleUrl: './app.component.css'\n})\nexport class AppComponent {\n title = '"+pn+"';\n}\n"); zip.file(folder+"src/app/app.component.html","
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n \n
\n"); zip.file(folder+"src/app/app.component.css",".app-header{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:16px}h1{font-size:2.5rem;font-weight:700;color:#6366f1}\n"); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';\nimport { provideRouter } from '@angular/router';\nimport { routes } from './app.routes';\n\nexport const appConfig: ApplicationConfig = {\n providers: [\n provideZoneChangeDetection({ eventCoalescing: true }),\n provideRouter(routes)\n ]\n};\n"); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router';\n\nexport const routes: Routes = [];\n"); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nng serve\n# or: npm start\n\`\`\`\n\n## Build\n\`\`\`bash\nng build\n\`\`\`\n\nOpen in VS Code with Angular Language Service extension.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n.angular/\n"); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/m,"").trim(); var reqMap={"numpy":"numpy","pandas":"pandas","sklearn":"scikit-learn","tensorflow":"tensorflow","torch":"torch","flask":"flask","fastapi":"fastapi","uvicorn":"uvicorn","requests":"requests","sqlalchemy":"sqlalchemy","pydantic":"pydantic","dotenv":"python-dotenv","PIL":"Pillow","cv2":"opencv-python","matplotlib":"matplotlib","seaborn":"seaborn","scipy":"scipy"}; var reqs=[]; Object.keys(reqMap).forEach(function(k){if(src.indexOf("import "+k)>=0||src.indexOf("from "+k)>=0)reqs.push(reqMap[k]);}); var reqsTxt=reqs.length?reqs.join("\n"):"# add dependencies here\n"; zip.file(folder+"main.py",src||"# "+title+"\n# Generated by PantheraHive BOS\n\nprint(title+\" loaded\")\n"); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\n\`\`\`\n\n## Run\n\`\`\`bash\npython main.py\n\`\`\`\n"); zip.file(folder+".gitignore",".venv/\n__pycache__/\n*.pyc\n.env\n.DS_Store\n"); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/m,"").trim(); var depMap={"mongoose":"^8.0.0","dotenv":"^16.4.5","axios":"^1.7.9","cors":"^2.8.5","bcryptjs":"^2.4.3","jsonwebtoken":"^9.0.2","socket.io":"^4.7.4","uuid":"^9.0.1","zod":"^3.22.4","express":"^4.18.2"}; var deps={}; Object.keys(depMap).forEach(function(k){if(src.indexOf(k)>=0)deps[k]=depMap[k];}); if(!deps["express"])deps["express"]="^4.18.2"; var pkgJson=JSON.stringify({"name":pn,"version":"1.0.0","main":"src/index.js","scripts":{"start":"node src/index.js","dev":"nodemon src/index.js"},"dependencies":deps,"devDependencies":{"nodemon":"^3.0.3"}},null,2)+"\n"; zip.file(folder+"package.json",pkgJson); var fallback="const express=require(\"express\");\nconst app=express();\napp.use(express.json());\n\napp.get(\"/\",(req,res)=>{\n res.json({message:\""+title+" API\"});\n});\n\nconst PORT=process.env.PORT||3000;\napp.listen(PORT,()=>console.log(\"Server on port \"+PORT));\n"; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000\n"); zip.file(folder+".gitignore","node_modules/\n.env\n.DS_Store\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\n\`\`\`\n\n## Run\n\`\`\`bash\nnpm run dev\n\`\`\`\n"); } /* --- Vanilla HTML --- */ function buildVanillaHtml(zip,folder,app,code){ var title=slugTitle(app); var isFullDoc=code.trim().toLowerCase().indexOf("=0||code.trim().toLowerCase().indexOf("=0; var indexHtml=isFullDoc?code:"\n\n\n\n\n"+title+"\n\n\n\n"+code+"\n\n\n\n"; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" — styles */\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e}\n"); zip.file(folder+"script.js","/* "+title+" — scripts */\n"); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Open\nDouble-click \`index.html\` in your browser.\n\nOr serve locally:\n\`\`\`bash\nnpx serve .\n# or\npython3 -m http.server 3000\n\`\`\`\n"); zip.file(folder+".gitignore",".DS_Store\nnode_modules/\n.env\n"); } /* ===== MAIN ===== */ var sc=document.createElement("script"); sc.src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"; sc.onerror=function(){ if(lbl)lbl.textContent="Download ZIP"; alert("JSZip load failed — check connection."); }; sc.onload=function(){ var zip=new JSZip(); var base=(_phFname||"output").replace(/\.[^.]+$/,""); var app=base.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||"my_app"; var folder=app+"/"; var vc=document.getElementById("panel-content"); var panelTxt=vc?(vc.innerText||vc.textContent||""):""; var lang=detectLang(_phCode,panelTxt); if(_phIsHtml){ buildVanillaHtml(zip,folder,app,_phCode); } else if(lang==="flutter"){ buildFlutter(zip,folder,app,_phCode,panelTxt); } else if(lang==="react-native"){ buildReactNative(zip,folder,app,_phCode,panelTxt); } else if(lang==="swift"){ buildSwift(zip,folder,app,_phCode,panelTxt); } else if(lang==="kotlin"){ buildKotlin(zip,folder,app,_phCode,panelTxt); } else if(lang==="react"){ buildReact(zip,folder,app,_phCode,panelTxt); } else if(lang==="vue"){ buildVue(zip,folder,app,_phCode,panelTxt); } else if(lang==="angular"){ buildAngular(zip,folder,app,_phCode,panelTxt); } else if(lang==="python"){ buildPython(zip,folder,app,_phCode); } else if(lang==="node"){ buildNode(zip,folder,app,_phCode); } else { /* Document/content workflow */ var title=app.replace(/_/g," "); var md=_phAll||_phCode||panelTxt||"No content"; zip.file(folder+app+".md",md); var h=""+title+""; h+="

"+title+"

"; var hc=md.replace(/&/g,"&").replace(//g,">"); hc=hc.replace(/^### (.+)$/gm,"

$1

"); hc=hc.replace(/^## (.+)$/gm,"

$1

"); hc=hc.replace(/^# (.+)$/gm,"

$1

"); hc=hc.replace(/\*\*(.+?)\*\*/g,"$1"); hc=hc.replace(/\n{2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\nFiles:\n- "+app+".md (Markdown)\n- "+app+".html (styled HTML)\n"); } zip.generateAsync({type:"blob"}).then(function(blob){ var a=document.createElement("a"); a.href=URL.createObjectURL(blob); a.download=app+".zip"; a.click(); URL.revokeObjectURL(a.href); if(lbl)lbl.textContent="Download ZIP"; }); }; document.head.appendChild(sc); } function phShare(){navigator.clipboard.writeText(window.location.href).then(function(){var el=document.getElementById("ph-share-lbl");if(el){el.textContent="Link copied!";setTimeout(function(){el.textContent="Copy share link";},2500);}});}function phEmbed(){var runId=window.location.pathname.split("/").pop().replace(".html","");var embedUrl="https://pantherahive.com/embed/"+runId;var code='';navigator.clipboard.writeText(code).then(function(){var el=document.getElementById("ph-embed-lbl");if(el){el.textContent="Embed code copied!";setTimeout(function(){el.textContent="Get Embed Code";},2500);}});}