Infographic Creator
Run ID: 69ccbd613e7fb09ff16a4a1e2026-04-01Design
PantheraHive BOS
BOS Dashboard

This document outlines the comprehensive design requirements for the "Infographic Creator" tool, serving as the foundational blueprint for its development. The goal is to create an intuitive, powerful, and AI-assisted platform that empowers users to design professional and engaging infographics with ease.


Infographic Creator: Design Requirements

1. Detailed Design Specifications

The Infographic Creator will be a web-based application, prioritizing a responsive design for optimal viewing across devices, with core editing functionality focused on desktop experiences.

1.1 Core Functionality

  • Template Library:

* Extensive & Categorized: A rich collection of pre-designed, professionally curated infographic templates. Categories include Business, Education, Marketing, Health, Science, Data Visualization, Processes, Timelines, etc.

* Search & Filter: Robust search capabilities by keyword, category, industry, or style.

* Preview: High-quality, interactive previews of templates.

* Customization: All template elements (text, images, icons, charts, colors, fonts) must be fully customizable.

  • Drag-and-Drop Editor:

* Canvas: A flexible canvas for arranging and editing elements.

* Element Library: Access to a vast library of design elements:

* Text: Various fonts, sizes, colors, alignments, text boxes, headings, paragraphs.

* Shapes: Basic geometric shapes (rectangles, circles, triangles), lines, arrows.

* Icons: A comprehensive, searchable library of SVG icons, with customizable colors.

* Images: Upload functionality, basic image editing (crop, resize, filters, opacity). Integration with stock photo libraries (e.g., Unsplash, Pexels) is desirable.

* Charts & Graphs: Bar charts, line charts, pie charts, area charts, scatter plots, bubble charts, heatmaps, treemaps, funnel charts, etc. Customizable data input (manual, CSV upload), colors, labels, axes.

* Layout Tools: Alignment guides, snapping, grouping/ungrouping, layering (bring to front/send to back), distribution tools.

* Brand Kit: Ability to save custom color palettes, fonts, and logos for consistent branding.

  • AI-Powered Assistance (Gemini Integration):

* Content Generation & Summarization:

* Input raw text or a topic, and AI generates concise, infographic-ready summaries or bullet points.

* Suggests relevant headings and subheadings.

* Rewrites text for clarity and impact.

* Data Visualization Suggestions:

* Analyzes uploaded data (e.g., CSV) and suggests optimal chart types and visualization styles.

* Automatically populates charts with data.

* Layout & Design Suggestions:

* Based on content and desired theme, AI suggests layout variations or element placements.

* Suggests color palettes and font pairings.

* Icon & Image Recommendations:

* Suggests relevant icons and stock images based on text content.

  • Data Import & Management:

* Manual Input: Simple spreadsheet-like interface for entering data directly into charts.

* CSV/Excel Upload: Secure upload for data files to populate charts.

* Data Linking: Ability to link data from external sources (e.g., Google Sheets, API – future consideration).

  • Export & Sharing:

* High-Resolution Export: PNG, JPG, PDF, SVG.

* Print-Ready Options: CMYK color profile option for PDF export.

* Social Media Optimization: Pre-set export dimensions for platforms like Instagram, Facebook, LinkedIn, Pinterest.

* Shareable Link: Generate a view-only link for easy sharing.

* Embed Code: Provide HTML embed code for websites.

  • Project Management:

* Save & Load: Securely save projects in the cloud.

* Versioning: Basic version history for saved projects.

* Folders/Organization: Ability to organize projects.

1.2 Technical Requirements

  • Cloud-Native: Built on a scalable cloud infrastructure (e.g., AWS, GCP, Azure).
  • Frontend: Modern JavaScript framework (e.g., React, Vue, Angular) for a dynamic and responsive UI.
  • Backend: Robust API-driven architecture (e.g., Node.js, Python/Django/Flask, Ruby on Rails) for data handling, AI integration, and file management.
  • Database: Scalable database solution (e.g., PostgreSQL, MongoDB).
  • Security: Implement industry-standard security practices (SSL, data encryption, authentication, authorization).
  • Performance: Optimized for fast loading times and smooth editing experience, even with complex infographics.

2. Wireframe Descriptions

The following describes the key screens and their primary components.

2.1 Dashboard / Project Management Screen

  • Layout: Two-column or grid layout.
  • Left Sidebar (Optional/Collapsible):

* Logo/Brand

* Navigation: Home, My Projects, Templates, Brand Kit, Settings, Help.

  • Main Content Area:

* "Create New Infographic" Button: Prominently displayed.

* Template Browser Section:

* Featured Templates/Recently Used Templates.

* Search Bar.

* Category Filters (e.g., Business, Education, Data).

* "Browse All Templates" link.

* "My Projects" Section:

* Grid or List view of saved infographics.

* Each project card includes: Thumbnail, Title, Last Modified Date, Options (Edit, Duplicate, Delete, Export).

* Search and Sort functionality for projects.

2.2 Template Browser Screen

  • Layout: Full-width grid for template display, with a left sidebar for filtering.
  • Header:

* Search Bar (for templates).

* "Create Blank Infographic" button.

  • Left Sidebar:

* Categories: Expandable list (e.g., Business, Marketing, Education, Health, Process, Timeline, Data).

* Style Filters: (e.g., Modern, Minimalist, Playful, Corporate).

* Color Filters: (e.g., Blue, Green, Multi-color).

  • Main Content Area:

* Template Grid: Display of template thumbnails with titles. Hovering over a thumbnail shows a larger preview and "Use This Template" button.

* Pagination/Load More.

2.3 Infographic Editor Screen

  • Layout: Central canvas, with left and right sidebars, and a top toolbar.
  • Top Toolbar:

* Logo / "Back to Dashboard" button.

* Infographic Title (editable).

* Undo / Redo buttons.

* Zoom controls.

* "AI Assistant" button (activates AI sidebar).

* "Preview" button.

* "Save" button.

* "Export / Share" button.

  • Left Sidebar (Element Library & AI Assistant):

* Tabs/Sections:

* Templates: Browse and insert new templates or sections.

* Elements: Text, Images, Icons, Shapes, Charts. Each section has its own sub-library and search.

* Uploads: User's uploaded images/files.

* AI Assistant: Input field for prompts, display of AI-generated text, data visualization suggestions, layout ideas.

  • Central Canvas:

* The main workspace where the infographic is built.

* Drag-and-drop functionality for elements.

* Selection handles for resizing, rotating, and moving elements.

* Contextual menus on right-click for selected elements.

* Grid and snap lines for precise placement.

  • Right Sidebar (Properties Panel):

* Contextual: Changes based on the selected element.

* Text Properties: Font family, size, color, bold, italic, underline, alignment, line height, letter spacing.

* Shape Properties: Fill color, border color, border thickness, opacity, corner radius.

* Image Properties: Crop, resize, filters, opacity, aspect ratio lock.

* Icon Properties: Color, size.

* Chart Properties: Data input (manual/CSV), chart type, colors, labels, axes settings, legend visibility.

* Canvas Properties (when nothing is selected): Canvas size, background color/image.

* Layer Panel: List of all elements on the canvas, with drag-to-reorder, hide/show, lock/unlock options.

2.4 Data Input / Chart Editor Modal

  • Layout: Overlay modal appearing over the editor.
  • Header: Chart Title, "Select Chart Type" dropdown.
  • Content Area:

* Data Table: Spreadsheet-like interface for manual data entry (rows and columns).

* "Import CSV/Excel" button.

* "Clear Data" button.

* "AI Suggest Data" button: (Uses Gemini to suggest data points based on context/topic).

  • Chart Preview: Real-time preview of the chart as data is entered.
  • Footer: "Apply" and "Cancel" buttons.

3. Color Palettes

Professional and versatile color palettes are crucial for creating impactful infographics. We will offer a selection of curated palettes, allowing users to choose or create their own.

3.1 Core Brand Palette (PantheraHive/Infographic Creator)

This palette will be used for the application UI itself and as a default option for users.

  • Primary Accent: #4A90E2 (Vibrant Blue - Professional, Trustworthy)
  • Secondary Accent: #50E3C2 (Aqua Green - Fresh, Innovative)
  • Text/Primary Dark: #333333 (Dark Grey - High Contrast, Readable)
  • Subtle Text/Secondary Dark: #666666 (Medium Grey - Softer Text)
  • Background/Light Neutral: #F8F8F8 (Off-White - Clean, Modern)
  • Borders/Dividers: #E0E0E0 (Light Grey - Subtle Separation)
  • Success: #7ED321 (Green)
  • Error: #D0021B (Red)
  • Warning: #F8E71C (Yellow)

3.2 Example User-Facing Palettes

These will be available for users to apply to their infographics. Each palette will ensure good contrast and visual appeal.

Palette 1: "Modern Professional"

  • Primary: #2C3E50 (Dark Navy - Sophisticated)
  • Secondary: #3498DB (Sky Blue - Clear, Trustworthy)
  • Accent 1: #2ECC71 (Emerald Green - Growth, Success)
  • Accent 2: #E67E22 (Orange - Energy, Attention)
  • Neutral: #ECF0F1 (Light Grey - Clean Background)
  • Text: #333333

Palette 2: "Vibrant Tech"

  • Primary: #673AB7 (Deep Purple - Innovation)
  • Secondary: #FFC107 (Amber - Bright, Energetic)
  • Accent 1: #03A9F4 (Light Blue - Modern)
  • Accent 2: #8BC34A (Lime Green - Fresh)
  • Neutral: #FAFAFA (Very Light Grey)
  • Text: #212121

Palette 3: "Earthy & Organic"

  • Primary: #4CAF50 (Forest Green - Natural, Balanced)
  • Secondary: #FF9800 (Deep Orange - Warmth, Creativity)
  • Accent 1: #795548 (Brown - Grounded)
  • Accent 2: #CDDC39 (Lime - Freshness)
  • Neutral: #F5F5F5 (Off-White)
  • Text: #4E342E

Color Palette Best Practices for Users:

  • Contrast Checker: Provide an integrated tool or warning for insufficient contrast, especially for text.
  • Accessibility: Ensure all default templates and suggested palettes meet WCAG 2.1 AA standards for color contrast.
  • Custom Palette Builder: Allow users to define and save their own palettes using hex codes, RGB, or HSL.

4. UX Recommendations

User experience is paramount for an Infographic Creator tool. The design should be intuitive, efficient, and enjoyable.

4.1 Onboarding & First-Time Experience

  • Interactive Tutorial: A brief, guided tour highlighting key features (template selection, editor layout, adding elements, AI assistance, export).
  • Empty State Guidance: When a user starts a new blank infographic, provide clear prompts (e.g., "Start with a template," "Add text," "Upload data").
  • AI-Powered Quick Start: Offer a "Generate Infographic Idea" prompt, where Gemini helps define the topic, structure, and even suggests initial content/data points.

4.2 Editor Usability

  • Direct Manipulation: Emphasize drag-and-drop, direct resizing, and rotation of elements on the canvas.
  • Contextual Menus: Right-click menus on selected elements should provide quick access to common actions (duplicate, delete, group, layer order).
  • Keyboard Shortcuts: Implement standard shortcuts (Ctrl/Cmd+C/V/Z/Y, Delete, Arrow keys for nudging).
  • Smart Guides & Snapping: Visual guides for alignment, distribution, and consistent spacing between elements. Snap to grid or other elements.
  • Infinite Canvas (Virtual): While the export area is fixed, allow users to place elements outside the main canvas for temporary storage or experimentation.
  • Undo/Redo History: A robust, multi-level undo/redo system.
  • Clear Feedback: Visual cues for successful actions (e.g., element snapped, item saved) and clear error messages.
  • Performance: The editor must be highly responsive, with minimal lag, especially when handling multiple elements or complex operations.

4.3 AI Integration UX

  • Seamless Integration: AI features should feel like natural extensions of the editor, not separate tools.
  • Clear AI Prompts: Guide users on how to interact with the AI (e.g., "Describe your topic,"
gemini Output

Infographic Creator: Design Specifications & UX Recommendations

This document outlines the detailed design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the Infographic Creator. The goal is to produce professional, engaging, and highly informative infographics that effectively communicate complex information.


1. Detailed Design Specifications

The infographic will be designed to be visually appealing, easy to understand, and highly shareable. It will support various content types and maintain a professional aesthetic.

1.1 Core Infographic Elements

  • Title/Headline: Prominent, concise, and engaging. Uses a larger font size and distinct styling.
  • Introduction/Hook: A brief paragraph or set of bullet points that sets the context and captures the viewer's interest.
  • Main Information Blocks: Distinct sections presenting key data, facts, or steps. Each block should be visually separated and self-contained.
  • Visual Elements:

* Icons: Simple, recognizable, and consistent vector icons to represent concepts.

* Charts & Graphs: Bar charts, pie charts, line graphs, area charts, and scatter plots for data visualization. Must be clearly labeled with axes, legends, and data points.

* Illustrations: Custom or stock illustrations to enhance visual appeal and convey abstract ideas.

* Images: High-resolution, relevant images where appropriate, used sparingly to avoid clutter.

  • Text Elements:

* Headings/Subheadings: For clear section demarcation within information blocks.

* Body Text: Concise explanations, facts, and descriptions.

* Callouts/Quotes: Highlight key statements or statistics.

  • Flow & Narrative: A clear, logical progression of information, guiding the viewer's eye from start to finish.
  • Call to Action (CTA): (Optional, but recommended) A clear, actionable statement directing the viewer to the next step (e.g., "Learn More," "Visit Our Website," "Download Report").
  • Source/Attribution: Clearly credits data sources and any external content used, enhancing credibility.
  • Branding: Subtle integration of company logo and brand colors (if applicable).

1.2 Supported Infographic Types

The design framework will accommodate the following common infographic structures:

  • Statistical/Data-Driven: Focus on presenting numbers, percentages, and data comparisons using charts, graphs, and large statistical callouts.
  • Process/How-To: Illustrates a step-by-step procedure or workflow using numbered steps, arrows, and sequential layouts.
  • Timeline: Visualizes historical events, project milestones, or future forecasts along a chronological axis.
  • Comparison: Highlights similarities and differences between two or more items, concepts, or data sets, often using a split-screen or side-by-side layout.
  • List/Fact-Based: Presents a series of facts, tips, or resources in an easy-to-digest, visually appealing list format.

1.3 Technical Specifications

  • Resolution & Aspect Ratio: Optimized for common digital viewing (e.g., 1080x1920px for vertical, 1920x1080px for horizontal, or custom dimensions for web embedding). High-resolution for print (300 DPI minimum).
  • Font Licensing: Use commercially licensed or open-source fonts for professional use.
  • Export Formats:

* Raster: PNG (high-quality, transparent background options), JPG (optimized for web).

* Vector: SVG (for scalability without loss of quality), PDF (for print and interactive digital distribution).


2. Wireframe Descriptions

Below are conceptual wireframes for three distinct infographic types, illustrating the general layout and flow.

2.1 Wireframe 1: Statistical Infographic

This layout emphasizes numerical data and visual comparisons.

  • Top Section:

* [Large Text] Infographic Title: Catchy & Informative

* [Text] Brief Introduction/Context (2-3 lines)

  • Main Body - Data Block 1:

* [Large Number] Key Statistic 1

* [Icon] Corresponding Icon

* [Text] Short Description of Statistic 1

* [Chart] Bar Chart / Pie Chart (Visualizing related data)

  • Main Body - Data Block 2:

* [Large Number] Key Statistic 2

* [Icon] Corresponding Icon

* [Text] Short Description of Statistic 2

* [Chart] Line Graph / Area Chart (Visualizing trends)

  • Mid-Section - Comparison/Insight:

* [Heading] Insightful Comparison or Key Takeaway

* [Text/Visuals] Side-by-side comparison or a compelling visual summary.

  • Main Body - Data Block 3:

* [Large Number] Key Statistic 3

* [Icon] Corresponding Icon

* [Text] Short Description of Statistic 3

* [Chart] Donut Chart / Pictogram (Further data visualization)

  • Bottom Section:

* [Text] Call to Action (Optional): "Learn More" / "Visit Website"

* [Small Text] Data Sources & Attributions

* [Small Image] Company Logo / Branding

2.2 Wireframe 2: Process Infographic

This layout guides the viewer through a series of sequential steps.

  • Top Section:

* [Large Text] Infographic Title: How It Works / Our Process

* [Text] Brief Overview of the Process (1-2 lines)

  • Main Body - Step 1:

* [Large Number] 1.

* [Icon] Icon representing Step 1

* [Heading] Step 1 Title

* [Text] Detailed Description of Step 1

  • [Arrow/Connector] Downward-pointing arrow or connecting line
  • Main Body - Step 2:

* [Large Number] 2.

* [Icon] Icon representing Step 2

* [Heading] Step 2 Title

* [Text] Detailed Description of Step 2

  • [Arrow/Connector] Downward-pointing arrow or connecting line
  • Main Body - Step 3:

* [Large Number] 3.

* [Icon] Icon representing Step 3

* [Heading] Step 3 Title

* [Text] Detailed Description of Step 3

  • (Repeat for additional steps)
  • Bottom Section:

* [Heading] Desired Outcome / Conclusion

* [Text] Summary of benefits or final result.

* [Text] Call to Action (Optional)

* [Small Text] Sources & Attributions

* [Small Image] Company Logo / Branding

2.3 Wireframe 3: Timeline Infographic

This layout visually represents events along a chronological axis.

  • Top Section:

* [Large Text] Infographic Title: Our Journey / Key Milestones

* [Text] Brief Introduction to the Timeline (1-2 lines)

  • Main Body - Timeline Axis:

* [Horizontal Line] A central line spanning the infographic width.

  • Event 1 (Left Side):

* [Year/Date] 20XX (Prominent)

* [Icon] Event Icon

* [Heading] Event Title 1

* [Text] Brief Description of Event 1

  • Event 2 (Right Side):

* [Year/Date] 20XY (Prominent)

* [Icon] Event Icon

* [Heading] Event Title 2

* [Text] Brief Description of Event 2

  • (Alternate left/right for subsequent events to maintain visual balance)
  • Event N (End of Timeline):

* [Year/Date] 20ZZ

* [Icon] Event Icon

* [Heading] Event Title N

* [Text] Brief Description of Event N

  • Bottom Section:

* [Heading] Future Outlook / Key Learning

* [Text] Concluding statement or future projection.

* [Text] Call to Action (Optional)

* [Small Text] Sources & Attributions

* [Small Image] Company Logo / Branding


3. Color Palettes

A selection of professional and versatile color palettes to suit different themes and branding needs. Each palette includes a primary, secondary, accent, and neutral color.

3.1 Palette 1: Professional & Trustworthy

  • Mood: Corporate, reliable, authoritative.
  • Primary: #004B8D (Deep Blue)
  • Secondary: #2C7DA0 (Medium Blue)
  • Accent: #FFC107 (Amber Yellow)
  • Neutral: #E0E0E0 (Light Grey)
  • Text: #333333 (Dark Grey)

3.2 Palette 2: Vibrant & Engaging

  • Mood: Dynamic, creative, energetic.
  • Primary: #E63946 (Vivid Red)
  • Secondary: #F4A261 (Warm Orange)
  • Accent: #2A9D8F (Teal)
  • Neutral: #F1FAEE (Light Cream)
  • Text: #1D3557 (Dark Blue-Grey)

3.3 Palette 3: Modern & Minimalist

  • Mood: Sleek, sophisticated, clean.
  • Primary: #212121 (Charcoal Black)
  • Secondary: #424242 (Dark Grey)
  • Accent: #00BFFF (Deep Sky Blue)
  • Neutral: #F5F5F5 (Off-White)
  • Text: #212121 (Charcoal Black)

3.4 Palette 4: Organic & Earthy

  • Mood: Natural, calm, sustainable.
  • Primary: #4CAF50 (Forest Green)
  • Secondary: #8BC34A (Lime Green)
  • Accent: #FF9800 (Orange Peel)
  • Neutral: #F5F5DC (Beige)
  • Text: #5D4037 (Dark Brown)

4. UX Recommendations for Infographics

These recommendations focus on ensuring the infographic is intuitive, easy to digest, and provides a positive viewing experience.

4.1 Clarity & Readability

  • Font Selection: Use highly legible sans-serif fonts for body text (e.g., Open Sans, Lato, Montserrat). Limit font families to 2-3 for consistency: one for titles, one for headings, and one for body text.
  • Font Size & Hierarchy: Establish a clear typographic hierarchy. Titles should be largest, followed by main headings, subheadings, and then body text. Ensure sufficient line height for readability.
  • Contrast: Maintain high contrast between text and background colors to prevent eye strain. Use tools to check WCAG compliance for color contrast ratios.
  • Whitespace: Utilize generous whitespace around elements, sections, and text blocks to prevent visual clutter and improve comprehension. This helps guide the eye and allows information to breathe.

4.2 Visual Hierarchy & Flow

  • Eye-Tracking: Design the infographic to guide the viewer's eye logically, typically from top-left to bottom-right, or following a clear directional path (e.g., arrows in a process infographic).
  • Size, Color, and Placement: Use these elements strategically to emphasize the most important information. Larger,
gemini Output

This output details the final design specifications for the "Infographic Creator" workflow, ensuring a professional, visually appealing, and user-friendly deliverable. It encompasses wireframe descriptions, detailed design specifications, curated color palettes, and critical UX recommendations to guide the development and final presentation of infographics.


Infographic Creator: Final Design Asset Specifications

1. Project Overview

The "Infographic Creator" aims to empower users to transform complex data, statistics, and information into engaging, easy-to-understand visual narratives. This tool is designed for a broad audience including marketers, educators, researchers, content creators, and business professionals who require an efficient and intuitive way to communicate insights effectively. The focus is on clarity, aesthetic appeal, and modular flexibility to cater to diverse informational needs.

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
"); 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' import ReactDOM from 'react-dom/client' import App from './App' import './index.css' ReactDOM.createRoot(document.getElementById('root')!).render( ) "); 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' import './App.css' function App(){ return(

"+slugTitle(pn)+"

Built with PantheraHive BOS

) } export default App "); zip.file(folder+"src/index.css","*{margin:0;padding:0;box-sizing:border-box} body{font-family:system-ui,-apple-system,sans-serif;background:#f0f2f5;color:#1a1a2e} .app{min-height:100vh;display:flex;flex-direction:column} .app-header{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px} h1{font-size:2.5rem;font-weight:700} "); 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)+" Generated by PantheraHive BOS. ## Setup ```bash npm install npm run dev ``` ## Build ```bash npm run build ``` ## Open in IDE Open the project folder in VS Code or WebStorm. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local "); } /* --- 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",'{ "name": "'+pn+'", "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "build": "vue-tsc -b && vite build", "preview": "vite preview" }, "dependencies": { "vue": "^3.5.13", "vue-router": "^4.4.5", "pinia": "^2.3.0", "axios": "^1.7.9" }, "devDependencies": { "@vitejs/plugin-vue": "^5.2.1", "typescript": "~5.7.3", "vite": "^6.0.5", "vue-tsc": "^2.2.0" } } '); zip.file(folder+"vite.config.ts","import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import { resolve } from 'path' export default defineConfig({ plugins: [vue()], resolve: { alias: { '@': resolve(__dirname,'src') } } }) "); zip.file(folder+"tsconfig.json",'{"files":[],"references":[{"path":"./tsconfig.app.json"},{"path":"./tsconfig.node.json"}]} '); zip.file(folder+"tsconfig.app.json",'{ "compilerOptions":{ "target":"ES2020","useDefineForClassFields":true,"module":"ESNext","lib":["ES2020","DOM","DOM.Iterable"], "skipLibCheck":true,"moduleResolution":"bundler","allowImportingTsExtensions":true, "isolatedModules":true,"moduleDetection":"force","noEmit":true,"jsxImportSource":"vue", "strict":true,"paths":{"@/*":["./src/*"]} }, "include":["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue"] } '); zip.file(folder+"env.d.ts","/// "); zip.file(folder+"index.html"," "+slugTitle(pn)+"
"); 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' import { createPinia } from 'pinia' import App from './App.vue' import './assets/main.css' const app = createApp(App) app.use(createPinia()) app.mount('#app') "); var hasApp=Object.keys(extracted).some(function(k){return k.indexOf("App.vue")>=0;}); if(!hasApp) zip.file(folder+"src/App.vue"," "); 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} "); 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)+" Generated by PantheraHive BOS. ## Setup ```bash npm install npm run dev ``` ## Build ```bash npm run build ``` Open in VS Code or WebStorm. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local "); } /* --- 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",'{ "name": "'+pn+'", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "test": "ng test" }, "dependencies": { "@angular/animations": "^19.0.0", "@angular/common": "^19.0.0", "@angular/compiler": "^19.0.0", "@angular/core": "^19.0.0", "@angular/forms": "^19.0.0", "@angular/platform-browser": "^19.0.0", "@angular/platform-browser-dynamic": "^19.0.0", "@angular/router": "^19.0.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.15.0" }, "devDependencies": { "@angular-devkit/build-angular": "^19.0.0", "@angular/cli": "^19.0.0", "@angular/compiler-cli": "^19.0.0", "typescript": "~5.6.0" } } '); zip.file(folder+"angular.json",'{ "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, "newProjectRoot": "projects", "projects": { "'+pn+'": { "projectType": "application", "root": "", "sourceRoot": "src", "prefix": "app", "architect": { "build": { "builder": "@angular-devkit/build-angular:application", "options": { "outputPath": "dist/'+pn+'", "index": "src/index.html", "browser": "src/main.ts", "tsConfig": "tsconfig.app.json", "styles": ["src/styles.css"], "scripts": [] } }, "serve": {"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"'+pn+':build:production"},"development":{"buildTarget":"'+pn+':build:development"}},"defaultConfiguration":"development"} } } } } '); zip.file(folder+"tsconfig.json",'{ "compileOnSave": false, "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"]}, "references":[{"path":"./tsconfig.app.json"}] } '); zip.file(folder+"tsconfig.app.json",'{ "extends":"./tsconfig.json", "compilerOptions":{"outDir":"./dist/out-tsc","types":[]}, "files":["src/main.ts"], "include":["src/**/*.d.ts"] } '); zip.file(folder+"src/index.html"," "+slugTitle(pn)+" "); zip.file(folder+"src/main.ts","import { bootstrapApplication } from '@angular/platform-browser'; import { appConfig } from './app/app.config'; import { AppComponent } from './app/app.component'; bootstrapApplication(AppComponent, appConfig) .catch(err => console.error(err)); "); zip.file(folder+"src/styles.css","* { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: system-ui, -apple-system, sans-serif; background: #f9fafb; color: #111827; } "); 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'; import { RouterOutlet } from '@angular/router'; @Component({ selector: 'app-root', standalone: true, imports: [RouterOutlet], templateUrl: './app.component.html', styleUrl: './app.component.css' }) export class AppComponent { title = '"+pn+"'; } "); zip.file(folder+"src/app/app.component.html","

"+slugTitle(pn)+"

Built with PantheraHive BOS

"); 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} "); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; export const appConfig: ApplicationConfig = { providers: [ provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes) ] }; "); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router'; export const routes: Routes = []; "); 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)+" Generated by PantheraHive BOS. ## Setup ```bash npm install ng serve # or: npm start ``` ## Build ```bash ng build ``` Open in VS Code with Angular Language Service extension. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local .angular/ "); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^```[w]* ?/m,"").replace(/ ?```$/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(" "):"# add dependencies here "; zip.file(folder+"main.py",src||"# "+title+" # Generated by PantheraHive BOS print(title+" loaded") "); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables "); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Setup ```bash python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ## Run ```bash python main.py ``` "); zip.file(folder+".gitignore",".venv/ __pycache__/ *.pyc .env .DS_Store "); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^```[w]* ?/m,"").replace(/ ?```$/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)+" "; zip.file(folder+"package.json",pkgJson); var fallback="const express=require("express"); const app=express(); app.use(express.json()); app.get("/",(req,res)=>{ res.json({message:""+title+" API"}); }); const PORT=process.env.PORT||3000; app.listen(PORT,()=>console.log("Server on port "+PORT)); "; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000 "); zip.file(folder+".gitignore","node_modules/ .env .DS_Store "); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Setup ```bash npm install ``` ## Run ```bash npm run dev ``` "); } /* --- 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:" "+title+" "+code+" "; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" — styles */ *{margin:0;padding:0;box-sizing:border-box} body{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e} "); zip.file(folder+"script.js","/* "+title+" — scripts */ "); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Open Double-click `index.html` in your browser. Or serve locally: ```bash npx serve . # or python3 -m http.server 3000 ``` "); zip.file(folder+".gitignore",".DS_Store node_modules/ .env "); } /* ===== 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(/ {2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. Files: - "+app+".md (Markdown) - "+app+".html (styled HTML) "); } 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);}});}