Infographic Creator
Run ID: 69cb108842bc43f7e3be70ba2026-03-31Design
PantheraHive BOS
BOS Dashboard

This document outlines the comprehensive design and user experience (UX) requirements for the "Infographic Creator" application. The goal is to develop an intuitive, powerful, and visually appealing tool that empowers users to create professional-grade infographics with ease and efficiency.


1. Overall Design Philosophy

The Infographic Creator will be built upon the following core design principles:

  • Clarity & Simplicity: Minimize cognitive load with a clean, uncluttered interface. Users should easily understand how to achieve their goals without extensive training.
  • Empowerment & Control: Provide users with powerful customization options and creative control, while maintaining an intuitive workflow that doesn't overwhelm them.
  • Visual Appeal: Both the application interface and the infographics produced must be aesthetically pleasing, modern, and professional.
  • Efficiency: Streamline the creation process through intuitive interactions, smart tools, and pre-designed elements to save user time.
  • Professional Output: Ensure that all exported infographics are of high quality, suitable for various professional contexts (presentations, reports, web, print).

2. Core Design Requirements

2.1. User Interface (UI) Requirements

  • Modern & Clean Aesthetics: Employ flat design principles with subtle shadows and gradients where appropriate. Use clear, legible typography and ample whitespace.
  • Responsive Design (Desktop-First): The primary editing experience will be optimized for desktop browsers. The dashboard and viewing experience should be responsive across various screen sizes, including tablets and mobile devices.
  • Intuitive Navigation: Implement a clear information hierarchy, consistent placement of navigation elements, and logical grouping of tools and options.
  • High Contrast & Readability: Ensure all text, icons, and UI elements have sufficient contrast against their backgrounds to meet accessibility standards (WCAG 2.1 AA).
  • Scalable Components: Design UI elements to be scalable, allowing for future feature additions without requiring a complete redesign.

2.2. Infographic Output Requirements

  • High Resolution & Print-Ready: Support export options for various resolutions, including vector formats (SVG) and high-DPI raster formats (PNG, JPG, PDF) suitable for print and digital use.
  • Vector-Based Elements: All core design elements (icons, shapes, charts) should be vector-based to ensure infinite scalability without loss of quality.
  • Branding Consistency: Allow users to define and save custom brand kits, including specific color palettes, font styles, and logo uploads, for consistent application across all their infographics.
  • Variety of Visualizations: Offer a comprehensive library of data visualization types, including bar charts, pie charts, line graphs, area charts, scatter plots, timelines, process flows, maps, and pictograms.
  • Deep Customization: Provide granular control over all infographic elements: colors (fill, stroke), fonts (type, size, weight, style), element sizing, positioning, rotation, opacity, layering, and grouping.

2.3. Performance & Technical Requirements

  • Fast Loading Times: Optimize asset loading and application initialization to minimize user wait times.
  • Smooth Interactions: Ensure a fluid and responsive editing experience, with no lag during drag-and-drop operations, resizing, complex element manipulations, or canvas panning/zooming.
  • Reliable Auto-Save: Implement robust auto-save functionality to prevent data loss, with clear visual feedback to the user when a project has been saved.
  • Browser Compatibility: Support modern web browsers
gemini Output

Infographic Creator: Design Specifications (Step 2 of 3)

This document outlines the comprehensive design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the Infographic Creator. The goal is to develop a professional, intuitive, and powerful tool that enables users to create stunning and effective infographics with ease.


1. Detailed Design Specifications

The Infographic Creator will be a web-based application designed for both novice and experienced users. It will focus on providing a seamless creative process from concept to export.

1.1 Core Features & Functionality

  • Template Library:

* Extensive Collection: A diverse range of professionally designed templates categorized by industry (e.g., Business, Marketing, Education, Health), infographic type (e.g., Process, Comparison, Timeline, Statistical, Flowchart), and style (e.g., Modern, Minimalist, Illustrative).

* Customizable: All elements within templates (text, images, icons, charts, colors) must be fully editable.

* Search & Filter: Robust search functionality and filtering options to quickly find relevant templates.

* User-Generated Templates: (Future consideration) Ability for users to save their designs as templates.

  • Intuitive Drag-and-Drop Editor:

* Canvas-Based Editing: A central, resizable canvas where users compose their infographic.

* Element Placement: Easy drag-and-drop functionality for adding and arranging elements.

* Resizing & Rotation: Handles for precise resizing and rotation of all visual elements.

* Layer Management: Ability to bring elements forward/backward, group/ungroup, and lock layers.

  • Rich Element Library:

* Text: Various text boxes (headings, subheadings, body text), pre-formatted text styles, rich text editor (font, size, color, bold, italic, underline, alignment, line spacing, bullet points).

* Images:

* Stock Photo Integration: Access to a curated library of high-quality stock images.

* User Uploads: Ability to upload custom images (JPG, PNG, SVG) with drag-and-drop support.

* Image Editing: Basic tools like cropping, filters, transparency, and border options.

* Icons: A vast library of vector icons categorized for easy search and customization (color, size).

* Shapes: Basic geometric shapes (circles, squares, triangles, lines) and decorative shapes, fully customizable (color, border, transparency).

* Charts & Graphs:

* Types: Bar charts (horizontal/vertical), Line charts, Pie charts, Donut charts, Area charts, Scatter plots, Progress bars, Treemaps.

* Data Input: Manual data entry, CSV upload, and (future consideration) integration with external data sources.

* Customization: Full control over chart colors, labels, axes, legends, and data point styles.

  • Color & Branding Tools:

* Custom Color Palettes: Ability to define and save custom color palettes using hex codes, RGB, or HSL.

* Brand Kit: Dedicated section to store brand logos, primary fonts, and brand colors for quick application across projects.

* Global Color Change: Option to change a specific color across the entire infographic.

  • Layout & Alignment:

* Grids & Guides: Toggleable grid lines, smart guides for precise alignment, and snap-to-grid functionality.

* Alignment Tools: Options to align selected elements (left, right, center, top, bottom, middle) and distribute spacing evenly.

* Canvas Settings: Adjustable canvas dimensions (width, height), orientation (portrait/landscape), and background color/image.

  • Version Control & Autosave:

* Autosave: Continuous saving of project progress to prevent data loss.

* Version History: (Advanced) Ability to view and restore previous versions of an infographic.

  • Export & Sharing:

* High-Resolution Export: Export options for various formats: JPG, PNG (with transparency), PDF (print-ready), SVG (vector).

* Quality Settings: Adjustable resolution/quality for raster exports.

* Direct Sharing: Options to share infographics directly via URL, email, or social media platforms.

  • User Account & Project Management:

* Dashboard: Central hub to view, organize, duplicate, and delete user-created infographics.

* Folder Organization: Ability to create folders for project management.

1.2 User Flow

  1. Access: User logs in or starts as a guest.
  2. Start New Infographic:

* Select from Template Library (browse, search, filter).

* Start from Scratch (define canvas size).

  1. Edit Canvas:

* Drag and drop elements (text, images, icons, shapes, charts) from the left panel onto the canvas.

* Select elements to activate contextual property panel (right sidebar).

* Modify element properties (text content, font, color, size; image source, crop, filter; chart data, colors).

* Arrange elements using alignment tools, grids, and layers.

* Customize background, overall colors, and fonts.

  1. Review: Preview the infographic.
  2. Save: Project is automatically saved; manual save option also available.
  3. Export/Share: Choose desired format and quality, then download or share directly.

2. Wireframe Descriptions

The following wireframe descriptions detail the layout and key interactive elements of the primary screens.

2.1 Dashboard / Project Management Screen

  • Header (Top Bar):

* Left: Application Logo.

* Center: Search bar for templates and user projects.

* Right: User Profile icon (dropdown for settings, logout), "New Infographic" button (prominent, e.g., Primary CTA).

  • Main Content Area:

* Left Section (Sidebar/Tabs):

* "My Infographics" (default view): Displays a grid or list of user's saved projects. Each project card includes thumbnail, title, last modified date, and quick actions (edit, duplicate, delete, share).

* "Templates": Browse categories, featured templates, trending templates.

* "Brand Kit": Quick access to manage brand assets.

* Right Section:

* If "My Infographics" is selected: Displays project cards.

* If "Templates" is selected: Displays template cards with preview, category, and "Use Template" button.

* "Create from Scratch" button (secondary CTA) prominently displayed in the templates or projects view.

2.2 Infographic Editor Screen

  • Top Bar (Editor Controls):

* Left: Application Logo, "Back to Dashboard" link/button.

* Center: Project Title (editable), "Save" button (with autosave indicator), "Undo" / "Redo" buttons.

* Right: "Share" button, "Preview" button, "Export" button (prominent).

  • Left Sidebar (Element Panel - Collapsible/Expandable):

* Tabs/Sections:

* Templates: Quick access to templates within the editor.

* Text: Pre-formatted text styles (H1, H2, Body, List), "Add Text Box" button.

* Images: "Upload Image" button, search bar for stock images, image library previews.

* Icons: Search bar for icons, categorized icon sets, icon library previews.

* Shapes: Basic shapes, lines, arrows.

* Charts: Chart type selection (Bar, Pie, Line, etc.), "Add Chart" button.

* Backgrounds: Solid colors, gradient options, texture/pattern library, "Upload Background" option.

* Brand Kit: Saved brand colors, fonts, logos.

* Each section displays a scrollable list or grid of available elements/options.

  • Central Canvas Area:

* Interactive Design Space: The main area where the infographic is built.

* Drag-and-Drop Zones: Visual cues for dragging elements onto the canvas.

* Element Selection: Clicking an element highlights it with bounding box, resizing handles, and rotation handle.

* Contextual Mini-Toolbar (on selected element): Quick access to common actions like duplicate, delete, bring forward/backward, lock.

* Grid Lines & Smart Guides: Toggleable visual aids for alignment.

  • Right Sidebar (Properties Panel - Collapsible/Expandable):

* Dynamic Content: Changes based on the selected element on the canvas or if no element is selected (canvas properties).

* If Text Selected: Font family, size, color, bold/italic/underline, alignment, line spacing, letter spacing.

* If Image Selected: Crop, resize, rotate, transparency, filters, border, replace image.

* If Chart Selected: Data input table/upload, chart type switcher, color scheme picker, axis labels, legend visibility.

* If No Element Selected (Canvas Properties): Canvas dimensions, background color/image, padding, zoom level.

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

  • Footer (Optional): Zoom controls, page navigation (if multi-page infographic).

3. Color Palettes

We propose three distinct color palettes to cater to different moods and brand aesthetics. Each palette is designed to be professional, versatile, and visually appealing for infographics.

3.1 Palette 1: "Modern Professional"

  • Mood: Trustworthy, Corporate, Clean, Sophisticated.
  • Use Case: Business reports, corporate presentations, data-heavy infographics.
  • Colors:

* Primary (Deep Ocean Blue): #2A4D69 (Strong, reliable base)

* Secondary (Sky Blue): #6F8FA9 (Complementary, calming)

* Accent (Vibrant Coral): #FF6B6B (Eye-catching, highlights key data)

* Neutral 1 (Light Grey): #E0E0E0 (Backgrounds, subtle dividers)

* Neutral 2 (Charcoal Grey): #333333 (Text, strong outlines)

* White: #FFFFFF (Clean backgrounds, text contrast)

3.2 Palette 2: "Vibrant & Engaging"

  • Mood: Energetic, Creative, Friendly, Optimistic.
  • Use Case: Educational content, social media infographics, creative projects.
  • Colors:

* Primary (Emerald Green): #2ECC71 (Fresh, growth, positive)

* Secondary (Sunny Yellow): #FFD166 (Bright, attention-grabbing)

* Accent (Deep Teal): #118AB2 (Sophisticated contrast, depth)

* Neutral 1 (Soft Beige): #F7F7F7 (Warm backgrounds)

* Neutral 2 (Dark Slate): #4A4A4A (Primary text, strong elements)

* White: #FFFFFF (Clean backgrounds, text contrast)

3.3 Palette 3: "Minimalist & Elegant"

  • Mood: Serene, Chic, Understated, Focused.
  • Use Case: Fashion, lifestyle, art, clean data visualization.
  • Colors:

* Primary (Muted Sage Green): #8D9F9D (Calm, earthy, sophisticated)

* Secondary (Blush Pink): #E6B8B8 (Soft, gentle, inviting)

* Accent (Dark Plum): #5D4B6D (Deep, rich contrast for highlights)

* Neutral 1 (Off-White): `#

gemini Output

Infographic Creator: Finalized Design Assets & Specifications

This document outlines the comprehensive and detailed design specifications for the "Infographic Creator" application, serving as a direct deliverable for the customer. It encompasses core design principles, wireframe descriptions for key screens, specific color palettes, and critical user experience (UX) recommendations to ensure a professional, intuitive, and highly functional product.


1. Project Overview & Core Design Principles

The "Infographic Creator" aims to empower users to transform complex data and information into visually engaging and easily digestible infographics. The design prioritizes ease of use, flexibility, and professional output quality.

Core Design Principles:

  • Clarity & Simplicity: The interface should be intuitive, minimizing cognitive load and guiding users through the creation process seamlessly.
  • Modularity & Flexibility: Components should be reusable and customizable, allowing for a wide range of infographic styles and user preferences.
  • Visual Hierarchy: Information should be presented in a structured manner, using size, color, and placement to guide the user's eye.
  • Professional Aesthetics: A clean, modern, and aesthetically pleasing design that inspires trust and confidence in the generated output.
  • Performance & Responsiveness: The application should be fast, fluid, and adaptable to various screen sizes (if web-based).

2. Detailed Design Specifications

2.1. Layout & Grid System

  • Base Grid: 8-pixel grid system for all spacing, sizing, and alignment to ensure consistency and visual harmony.
  • Main Layout:

* Header (Fixed Top): Application logo, main navigation (Dashboard, Templates, My Infographics), user profile/settings. Height: 64px.

* Sidebar (Left - Editor View): Contextual panels (e.g., Template Library, Asset Library, Data Input, Layers). Width: 280px (collapsible to 64px icon-only view).

* Canvas Area (Center): The primary workspace where the infographic is designed. Responsive width, dynamic height based on content.

* Properties Panel (Right - Editor View): Contextual controls for selected elements (text, shapes, charts, images). Width: 280px.

* Footer (Optional): Status bar, quick tips, or version info. Height: 48px.

  • Content Padding: Consistent 24px or 32px internal padding within content blocks and sections.

2.2. Typography

A carefully selected font stack ensures readability and professional appeal.

  • Primary Font (UI & Headings): Inter (Google Fonts)

* Rationale: Modern, highly legible, versatile, and excellent for both UI elements and infographic headings due to its clear letterforms and range of weights.

* Weights: Regular (400), Medium (500), Semi-bold (600), Bold (700)

* Sizes (UI):

* H1 (Page Titles): 28px / Semi-bold

* H2 (Section Titles): 22px / Medium

* H3 (Sub-sections): 18px / Medium

* Body Text: 15px / Regular

* Small Text/Labels: 13px / Regular

* Button Text: 14px / Medium

  • Secondary Font (Infographic Body Text & Data Labels): Open Sans (Google Fonts)

* Rationale: A highly readable humanist sans-serif, excellent for longer passages and data labels within the infographic itself, complementing Inter without clashing.

* Weights: Regular (400), Semi-bold (600)

* Sizes (Infographic Canvas):

* Main Body: 14-16px / Regular

* Sub-headings: 18-20px / Semi-bold

* Data Labels: 12-14px / Regular

  • Monospace Font (for Code/Data Input, if applicable): Fira Code (Google Fonts)

* Rationale: Clear, fixed-width font for any data input fields or code snippets.

2.3. Iconography

  • Style: Line-based, consistent stroke weight (1.5px or 2px), rounded corners. SVG format for scalability and color customization.
  • Library: Utilize a professional icon library (e.g., Feather Icons, Phosphor Icons, or a custom set) for consistency.
  • Usage: Clear, descriptive icons for navigation, actions, tools, and visual cues within the editor.

2.4. Imagery & Illustrations

  • UI Imagery: Minimal use of background images; focus on clean UI. Any hero images should be high-quality, relevant, and convey clarity and insight.
  • Infographic Illustrations: Provide a diverse library of vector illustrations (flat design, isometric, line art) that users can drag-and-drop onto their canvas. Ensure these are easily customizable in terms of color.
  • Image Uploads: Support for common formats (PNG, JPG, SVG) with clear guidelines for optimal resolution and aspect ratios.

2.5. Interactive Elements

  • Buttons:

* Primary: Solid fill, rounded corners (4-6px radius), prominent color. Example: #007bff background, white text.

* Secondary: Outline button, transparent background, border in primary color.

* Tertiary/Ghost: Text-only button, subtle hover state.

* States: Clear hover, active, and disabled states (e.g., reduced opacity for disabled).

  • Input Fields:

* Clean, subtle border (e.g., #D3DCE6), light background.

* Clear focus state (e.g., border color changes to primary accent).

* Placeholder text in light gray.

  • Sliders & Toggles: Modern, track-based sliders with clear handles. Toggle switches for on/off states.
  • Tooltips: Informative, short text on hover, subtle background (e.g., #333), white text.
  • Modals/Dialogs: Centered, semi-transparent overlay, clear title, action buttons.

2.6. Data Visualization Elements

  • Chart Styles:

* Clean & Minimalist: Avoid excessive ornamentation. Focus on data clarity.

* Consistent Aesthetics: All charts (bar, line, pie, scatter, area) should adhere to the application's color palette and typography.

* Labels & Legends: Clear, readable labels with good contrast. Legends should be concise and easily understandable.

* Animation (Subtle): Introduce subtle, smooth animations for chart loading or data updates to enhance user experience without being distracting.

  • Icon-based Data: Support for repeating icons to represent quantities (e.g., 5 human icons for 5 million people).
  • Maps: Basic choropleth or bubble map support with customizable color gradients.

3. Wireframe Descriptions (Key Screens)

These descriptions detail the layout and functionality of critical screens within the Infographic Creator.

3.1. Dashboard / Project List Screen

  • Header: Application Logo, "Create New Infographic" button, Search bar, User Avatar/Profile menu.
  • Main Content:

* "My Infographics" Section: Grid or list view of user's saved infographics. Each item shows a thumbnail, title, last modified date, and quick actions (Edit, Duplicate, Delete, Share).

* "Templates" Section: Curated collection of featured or recently used templates.

* "Folders/Categories" (Optional): Sidebar or filter options for organizing projects.

  • "Create New Infographic" Workflow:

1. Start from Scratch: Opens a blank canvas.

2. Browse Templates: Navigates to the Template Library.

3. Import Data: Option to start by uploading data (e.g., CSV, Excel) to auto-generate charts.

3.2. Template Selection Screen

  • Header: Application Logo, "Back to Dashboard", Search Templates, Filter by Category (e.g., Business, Education, Health, Timeline, Comparison).
  • Main Content:

* Template Grid: Large, clear thumbnails of available templates.

* Template Card: Each card displays a preview image, title, and a "Use Template" button.

* Preview Modal: Clicking a template thumbnail opens a modal with a larger preview, description, and "Use Template" or "Close" options.

3.3. Editor Interface (Main Design Canvas)

This is the core workspace where users create and edit infographics.

  • Header:

* Application Logo / "Dashboard" link.

* Infographic Title (editable).

* "Save" button, "Preview" button, "Share/Export" button.

* Undo/Redo, Zoom controls.

* User Avatar/Profile.

  • Left Sidebar (Tool & Asset Panels):

* Tabs/Sections:

* Templates: Quick access to template library.

* Elements: Shapes, lines, icons, illustrations.

* Text: Pre-designed text blocks, headings, body text.

* Charts: Bar, line, pie, area, scatter, progress charts.

* Uploads: User-uploaded images, SVGs.

* Data: Input/manage data tables for charts.

* Layers: List of all elements on the canvas, with visibility and lock controls.

  • Center Canvas:

* The main design area, representing the infographic.

* Drag-and-drop functionality for elements from the sidebar.

* Resizing handles, rotation controls, and alignment guides for selected elements.

* Contextual mini-toolbar for quick actions (duplicate, delete, send to front/back) on selected elements.

  • Right Properties Panel (Contextual Editor):

* Dynamic Content: Changes based on the selected element on the canvas.

* Text Editor: Font family, size, color, weight, alignment, line height, letter spacing.

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

* Image Editor: Crop, resize, filters, opacity.

* Chart Editor: Data input (manual or upload), chart type, colors for series, axis labels, legends, data labels.

* Canvas Settings: Background color, dimensions, grid visibility.

3.4. Preview & Export Options Screen

  • Header: Application Logo, Infographic Title, "Back to Editor" button.
  • Main Content:

* Large Preview Area: Displays the final infographic as it will appear.

* Export Options Panel (Right):

* File Format: PNG (standard, transparent background), JPG (compressed), PDF (vector, print-ready), SVG (vector, web-friendly).

* Quality/Resolution: Low, Medium, High, Custom (e.g., 72dpi, 300dpi).

* Dimensions: Original, Custom Width/Height.

* Share Options: Generate shareable link, embed code, direct share to social media (Facebook, Twitter, LinkedIn).

* "Download" / "Generate Link" / "Share" Buttons.


4. Color Palettes

A cohesive and accessible color palette is crucial for both the UI and the infographic output.

4.1. Primary UI Palette

  • Primary Accent: #007bff (Vibrant Blue) - For primary buttons, active states, key highlights.
  • Secondary Accent: #28a745 (Success Green) - For positive feedback, confirmation.
  • Warning/Error: #dc3545 (Danger Red) - For error messages, destructive actions.
  • Information: #ffc107 (Warning Yellow) - For warnings, attention-grabbing.
  • Neutral Text: #343a40 (Dark Gray) - For main body text, headings.
  • Subtle Text/Icons: #6c757d (Medium Gray) - For secondary text, disabled states, subtle icons.
  • Border/Divider: #dee2e6 (Light Gray) - For input field borders, dividers.
  • Background: #f8f9fa (Off-white) - For general UI backgrounds.
  • Canvas Background (Default): #ffffff (Pure White) - For the infographic canvas itself.

4.2. Data Visualization Palette (Example Scheme)

This palette provides a set of harmonious colors optimized for charts and graphs, ensuring good contrast and visual separation. Users should also have the option to customize these.

  • Set 1 (Categorical, Vibrant):

* #4285F4 (Google Blue)

* #DB4437 (Google Red)

* #F4B400 (Google Yellow)

* #0F9D58 (Google Green)

* #AB47BC (Deep Purple)

* #FF7043 (Coral)

* #26A69A (Teal)

* #78909C (Blue Gray)

  • Set 2 (Categorical, Muted):

* #66BB6A (Light Green)

* #42A5F5 (Light Blue)

* #FFA726 (Orange)

* #EF5350 (Light Red)

* #7E57C2 (Lavender)

* #26C6DA (Cyan)

  • Gradient Options: For continuous data, provide pre-defined color gradients (e.g., a blue-to-green gradient, a single-hue saturation gradient).

4.3. Accessibility Considerations

  • Contrast Ratio: Ensure all text and interactive elements meet WCAG 2.1 AA contrast ratio standards (minimum 4.5:1 for normal text, 3:1 for large text).
  • Color Blindness: Avoid relying solely on color to convey information. Use labels, patterns, or different line styles in addition to color for data visualization. Provide colorblind-safe palettes as an option.

5. User Experience (UX) Recommendations

5.1. Usability & Learnability

  • Onboarding Tour: A brief, interactive tour for first-time users highlighting key features of the editor.
  • Contextual Help: Tooltips for complex features, "i" icons linking to help documentation.
  • Drag-and-Drop: Extensive use of drag-and-drop for adding elements, reordering layers, and arranging data.
  • Real-time Preview: Any changes made in the properties panel should immediately reflect on the canvas.
  • Undo/Redo: Robust undo/redo functionality for multiple steps.
  • Snapping & Alignment Guides: Smart guides that appear when moving elements, helping users align them perfectly with other elements or the grid.
  • **Keyboard Shortcuts
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);}});}