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

The following outlines the detailed design requirements, wireframe descriptions, color palettes, and user experience (UX) recommendations for the "Infographic Creator" tool. This deliverable focuses on creating an intuitive, powerful, and visually appealing platform that empowers users to design professional infographics with ease.


Infographic Creator: Design & UX Requirements

1. Overall Goal and Target Audience

The primary goal of the "Infographic Creator" is to provide a user-friendly, robust, and visually appealing platform that enables individuals and organizations to design high-quality, informative, and engaging infographics without requiring extensive graphic design expertise.

Target Audience:

  • Marketers & Content Creators: For visual storytelling, campaign reports, social media content.
  • Educators & Students: For presenting complex information, study guides, project summaries.
  • Small Business Owners: For marketing materials, pitch decks, internal communications.
  • Non-profits: For impact reports, awareness campaigns, fundraising materials.
  • Internal Communicators: For company announcements, process explanations,
gemini Output

As part of the "Infographic Creator" workflow, this step outlines the comprehensive design specifications for developing a robust and intuitive tool. The goal is to enable users to create professional-grade infographics with ease, combining powerful customization with a user-friendly interface.


Infographic Creator: Detailed Design Specifications

1. Overall Product Vision & Core Functionality

The Infographic Creator will be a web-based application designed to empower users, regardless of their design expertise, to transform data and information into visually compelling infographics. It will offer a blend of pre-designed templates, intuitive drag-and-drop editing, and comprehensive customization options.

Key Functional Requirements:

  • Template-Driven Creation: A wide array of professional, category-specific templates (e.g., Statistical, Timeline, Process, Comparison, List, Resume) to jumpstart the design process.
  • Intuitive Editor: A canvas-based editor with drag-and-drop functionality for elements.
  • Content Input: Easy input for text, numbers, and data points.
  • Data Visualization: Integrated tools for generating various chart types (bar, pie, line, area, pictogram) from user-entered or uploaded data.
  • Extensive Asset Library: Access to a rich library of icons, shapes, illustrations, and stock images.
  • Customization Control: Granular control over fonts, colors, backgrounds, element sizing, and positioning.
  • User Uploads: Ability to upload custom images, logos, and brand assets.
  • Real-time Preview: Instant visualization of changes as they are made.
  • Export Options: High-quality export in various formats (PNG, JPG, PDF, SVG).
  • Save & Manage Projects: Users can save their progress and access previous designs.

2. Wireframe Descriptions (Key Screens)

This section describes the layout and core components of the main user interface screens.

2.1. Screen 1: Dashboard / Template Selection

  • Header: "Welcome to the Infographic Creator!" or "My Infographics & Templates"
  • Navigation:

* "My Projects" (List of saved infographics)

* "Create New" (Leads to template selection)

* "Tutorials / Help"

  • Main Content Area:

* Section 1: "Start a New Infographic"

* Prominent "Blank Canvas" button.

* Carousel or Grid of "Featured Templates" (e.g., "Popular," "New").

* Section 2: "Browse All Templates"

* Category filters (e.g., Business, Education, Marketing, Health, Resumes, Timelines).

* Search bar for templates.

* Grid view displaying template thumbnails with titles and brief descriptions. Each thumbnail has a "Preview" and "Select" button.

  • Call to Action: "Select Template" or "Start from Scratch" initiates the editor.

2.2. Screen 2: Main Editor Interface

This is the central workspace for creating and customizing infographics.

  • Top Bar (Global Controls):

* Logo/Product Name: Left-aligned.

* Project Title: Editable text field.

* Action Buttons: "Undo," "Redo," "Save," "Preview," "Share" (optional), "Export."

* User Profile/Help: Right-aligned.

  • Left Panel (Element & Content Library):

* Tabs for Categories:

* Templates: Browse and apply new templates or sections.

* Text: Add headings, subheadings, body text, data points. Pre-formatted text blocks.

* Data/Charts: Select chart types (bar, pie, line, area, pictogram), input data fields, upload CSV.

* Visuals: Icons (searchable library), Shapes, Illustrations, Stock Photos (searchable library).

* Uploads: User's uploaded images, logos.

* Design: Backgrounds, overall themes, layout presets.

  • Central Canvas (Work Area):

* Infographic Preview: The main design area where the infographic is built.

* Drag-and-Drop: Users can drag elements from the left panel onto the canvas.

* Resizable Elements: All elements (text boxes, images, charts) are resizable with handles.

* Contextual Menus: Right-click or double-click on an element reveals specific editing options (e.g., edit text, change chart data, crop image).

* Alignment Guides: Smart guides appear when moving elements for precise alignment and spacing.

* Zoom Controls: Slider or buttons for zooming in/out of the canvas.

* Grid Overlay: Toggleable grid for precise positioning.

  • Right Panel (Properties & Settings):

* Context-Sensitive: This panel dynamically changes based on the selected element on the canvas.

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

* If Chart Selected: Data input table/fields, chart type selector, axis labels, legend options, data series colors, animation settings (optional).

* If Image Selected: Crop, resize, rotate, opacity, filters, borders.

* If Background Selected (no element selected): Background color, image, gradient, pattern.

* Layers Panel (Advanced): Optional panel showing element hierarchy for precise z-index control.

2.3. Screen 3: Export Options (Modal Window)

  • Header: "Export Your Infographic"
  • File Format Selection: Radio buttons/dropdown for:

* PNG (High Quality)

* JPG (Web Optimized)

* PDF (Print Ready)

* SVG (Vector - for advanced users)

  • Quality/Resolution Settings: Slider or dropdown (e.g., Standard, High, Custom DPI).
  • Size Options: "Original Size," "Fit to Width," "Custom Dimensions."
  • Preview Thumbnail: Small preview of the infographic.
  • Call to Action: "Download" button.
  • Optional: "Share" options (direct link, social media).

3. Color Palettes

The tool will offer several default professional color palettes and allow for extensive user customization.

3.1. Default Palettes for Templates & UI

Palette 1: "Professional & Modern"

  • Primary (UI Accents, Key Data): #2A5A88 (Deep Blue)
  • Secondary (UI Elements, Supporting Data): #3CB0C8 (Teal)
  • Accent (Call-to-Action, Highlights): #FF8C42 (Vibrant Orange)
  • Neutrals (Backgrounds, Text, Borders): #F8F9FA (Off-White), #E0E0E0 (Light Gray), #495057 (Dark Gray), #FFFFFF (Pure White)
  • Purpose: Corporate, technology, data-heavy infographics.

Palette 2: "Energetic & Creative"

  • Primary (UI Accents, Key Data): #7F3FBF (Vibrant Purple)
  • Secondary (UI Elements, Supporting Data): #FFD700 (Sunny Yellow)
  • Accent (Call-to-Action, Highlights): #FF69B4 (Hot Pink)
  • Neutrals (Backgrounds, Text, Borders): #F0F2F5 (Light Cool Gray), #CCCCCC (Medium Gray), #343A40 (Charcoal), #FFFFFF (Pure White)
  • Purpose: Marketing, creative projects, education, vibrant storytelling.

Palette 3: "Clean & Minimalist"

  • Primary (UI Accents, Key Data): #28A745 (Forest Green)
  • Secondary (UI Elements, Supporting Data): #17A2B8 (Muted Cyan)
  • Accent (Call-to-Action, Highlights): #FFC107 (Amber)
  • Neutrals (Backgrounds, Text, Borders): #FDFDFD (Almost White), #E9ECEF (Very Light Gray), #212529 (Dark Blackish Gray), #FFFFFF (Pure White)
  • Purpose: Simplicity, clean data presentation, health, environmental themes.

3.2. Color Management Features

  • In-tool Color Picker: Full spectrum color picker (HEX, RGB, HSL support).
  • Brand Kit: Option for users to save their brand colors for quick access.
  • Template-specific Palettes: Each template will come with a pre-defined, harmonious color palette that can be easily modified.
  • Accessibility Check: (Optional but recommended) A tool that checks contrast ratios for text and background colors to meet WCAG guidelines.

4. User Experience (UX) Recommendations

  • Intuitive Onboarding:

* A brief, interactive tutorial for first-time users highlighting key features.

* Tooltips on hover for complex elements.

  • Drag-and-Drop Excellence:

* Smooth, responsive drag-and-drop mechanics for all canvas elements.

* Clear visual feedback when dragging (e.g., ghost image, drop zone indicators).

  • Real-time Visual Feedback:

* All changes (font size, color, element position, data updates) should reflect instantly on the canvas.

* Live chart updates as data is entered.

  • Contextual Editing & Smart Defaults:

* The right-hand properties panel should automatically display relevant options for the currently selected element.

* Sensible default values for fonts, colors, and element sizes to reduce initial cognitive load.

  • Robust Undo/Redo:

* An extensive history stack for undo/redo actions, allowing users to revert multiple changes.

  • Smart Alignment & Spacing:

* Automatic snap-to-grid and object alignment guides (e.g., aligning to center, edges of other elements).

* Distribution tools for even spacing of multiple selected elements.

  • Pre-designed Sections & Blocks:

* Offer pre-designed content blocks (e.g., "Introduction," "Key Statistics," "Timeline Segment," "Conclusion") that users can drag and drop and then customize. This speeds up creation significantly.

  • Search & Filtering:

* Powerful search functionality for templates, icons, images, and other assets within the library.

* Category filters to narrow down choices.

  • Performance Optimization:

* Ensure the editor is highly responsive and performs smoothly even with complex infographics and numerous elements. Lazy loading of assets.

  • Accessibility Considerations:

* Ensure adequate color contrast ratios for text and UI elements.

* Provide keyboard navigation support for essential functions.

* Clear, descriptive labels for interactive elements.

  • Error Prevention & Recovery:

* Confirmation dialogs for irreversible actions (e.g., deleting a project).

* Auto-save functionality to prevent loss of work.

  • Responsive Design (for the editor interface):

* While the output infographic might be fixed-size, the creator tool itself should adapt to different screen sizes for a consistent user experience on various devices.


This detailed specification provides a solid foundation for the development of the Infographic Creator, focusing on user-centric design, powerful features, and a professional aesthetic.

gemini Output

As part of the "Infographic Creator" workflow, this deliverable outlines the finalized design assets, providing comprehensive specifications, wireframe descriptions, color palettes, and critical UX recommendations. This document serves as a blueprint for the development phase, ensuring a cohesive, professional, and user-centric product.


Finalized Design Assets: Infographic Creator

1. Project Overview & Design Principles

The Infographic Creator aims to empower users to effortlessly transform data and ideas into compelling visual narratives. The design prioritates simplicity, flexibility, and visual appeal.

Core Design Principles:

  • Intuitive Workflow: Guide users through creation with minimal friction.
  • Customization & Control: Provide robust tools for personalization while maintaining design integrity.
  • Visual Clarity: Ensure infographics are easy to read and understand.
  • Consistency: Maintain a unified look and feel across the application.
  • Responsiveness: Adapt to various screen sizes for optimal usability.

2. Design Specifications

2.1. Layout & Grid System

  • Responsive Grid: Utilizes a 12-column responsive grid system (e.g., Bootstrap, Material Design Grid) for flexible content arrangement across devices.
  • Base Spacing Unit: 8px. All padding, margins, and component spacing will be multiples of 8px (e.g., 8px, 16px, 24px, 32px).
  • Content Area: Max width for the main canvas/editor area is 1440px, centered horizontally. Side panels (toolbars, properties) will have fixed or percentage-based widths.
  • Hierarchy: Clear visual hierarchy established through size, color, and placement to guide user attention to primary actions and information.

2.2. Typography

A modern, professional, and highly readable font pairing is chosen to ensure clarity and aesthetic appeal.

  • Primary Font (Headings & UI Elements): Inter (Sans-serif)

* Usage: All headings (H1-H6), navigation items, button labels, key UI text.

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

* Rationale: Modern, highly legible, excellent for UI and digital display.

  • Secondary Font (Body Text & Data Labels): Open Sans (Sans-serif)

* Usage: Paragraphs, descriptive text, data labels, tooltips, input field text.

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

* Rationale: Highly readable at small sizes, complements Inter well, widely available.

Font Sizing (Desktop Base):

  • H1: 48px (Inter Bold) - Page Titles
  • H2: 36px (Inter Semi-bold) - Section Titles
  • H3: 28px (Inter Medium) - Sub-section Titles
  • H4: 22px (Inter Medium) - Card Titles, Component Headings
  • Body Large: 18px (Open Sans Regular) - Key descriptions
  • Body Medium: 16px (Open Sans Regular) - Standard paragraph text
  • Body Small: 14px (Open Sans Regular) - Labels, helper text, tooltips
  • Caption/Tiny: 12px (Open Sans Regular) - Fine print, metadata

2.3. Iconography

  • Style: Line-art, consistent stroke weight (1.5px), rounded corners.
  • Library: Utilize a professional icon set (e.g., Feather Icons, Font Awesome Pro - thin style, or a custom set) to maintain consistency.
  • Usage: Navigation, actions, feature identification, status indicators.
  • Sizing: Standard sizes 16px, 20px, 24px, 32px.

2.4. Imagery & Media

  • Placeholder Assets: Use high-quality, relevant stock photos or illustrations for template examples. All placeholders should be easily replaceable by the user.
  • Aspect Ratios: Maintain common aspect ratios (e.g., 16:9, 4:3, 1:1) for image components within the editor. Provide tools for cropping and resizing.
  • File Types: Support common image formats (JPG, PNG, SVG, GIF) and potentially video (MP4) for advanced infographics.

2.5. Interactive Elements

  • Buttons:

* Primary: Solid fill, high contrast (e.g., Accent color), prominent.

* Secondary: Outline or ghost style, less prominent.

* Tertiary/Text: Text-only, for less critical actions.

* States: Default, Hover, Active, Focus, Disabled. Clear visual feedback for each state.

  • Input Fields:

* Text/Number: Clear labels, placeholder text, consistent height.

* Dropdowns/Selects: Consistent styling with clear arrow indicators.

* Checkboxes/Radio Buttons: Custom-styled to match the brand.

* Sliders: For numerical adjustments (e.g., font size, opacity).

  • Tooltips & Modals:

* Tooltips: Appear on hover for short, contextual help.

* Modals: Used for critical actions, confirmations, or complex input. Clearly defined header, body, and action buttons.

  • Drag & Drop: Implement intuitive drag-and-drop functionality for canvas elements and potentially for uploading media. Visual cues (e.g., ghosting, highlight borders) are essential.

3. Wireframe Descriptions (Key Screens)

3.1. Dashboard / Project Home

  • Layout:

* Header: Global navigation (Home, Templates, My Infographics, Account Settings), "Create New Infographic" CTA, User Profile dropdown.

* Main Content:

* "My Infographics" Section: Grid or list view of recently edited/created infographics. Each item includes a thumbnail, title, last modified date, and quick action menu (Edit, Duplicate, Delete, Share).

* "Suggested Templates" / "Popular Templates" Section: Curated selection of templates to inspire new creations.

* Sidebar (Optional): Filters (e.g., by category, date), search bar.

  • Key Interactions: Clicking "Create New" navigates to Template Selection. Clicking an infographic thumbnail or "Edit" button opens the Editor.

3.2. Template Selection

  • Layout:

* Header: Back button to Dashboard, search bar for templates, category filters (e.g., Business, Education, Social Media, Marketing).

* Main Content: Grid display of available infographic templates. Each template card shows:

* Thumbnail preview.

* Template name.

* Category tag.

* "Preview" button (opens a larger view) and "Use Template" button (opens in Editor).

* "Start from Scratch" Option: A prominent card or button allowing users to begin with a blank canvas.

  • Key Interactions: Filtering templates, previewing, selecting a template to begin editing.

3.3. Infographic Editor (Main Workspace)

  • Layout:

* Top Bar: Infographic Title (editable), Save button (auto-save indicator), Undo/Redo, Preview, Share, Export buttons.

* Left Sidebar (Tools Panel):

* Content: Text, Images, Icons, Shapes, Charts, Data Table. Each opens a sub-panel/modal for selection/upload.

* Design: Layouts, Background, Colors, Fonts.

* Assets: User's uploaded assets library.

* Central Canvas: The main infographic workspace. Drag-and-drop elements, resize, reposition. Grid lines for alignment. Zoom controls.

* Right Sidebar (Properties Panel): Contextual properties based on selected element (e.g., for text: font family, size, color, alignment; for images: crop, opacity, filters; for charts: data input, chart type, labels).

  • Key Interactions:

* Drag-and-drop elements onto the canvas.

* Clicking an element activates its properties in the Right Sidebar.

* Resizing and rotating elements using handles.

* Double-clicking text for inline editing.

* Chart data input via a pop-up table or CSV upload.

3.4. Preview & Export

  • Layout:

* Header: Back to Editor, Download, Share options.

* Main Content: Full-screen, interactive preview of the infographic. Zoom in/out functionality.

* Export Options (Modal/Panel):

* File Format: PNG, JPG, PDF (standard, print-ready), SVG.

* Quality/Resolution: Standard, High, Custom.

* Page Size (for PDF): A4, Letter, Custom dimensions.

* Background: Transparent/Solid color.

  • Key Interactions: Reviewing the final infographic, selecting export parameters, downloading the file.

4. Color Palettes

A professional, modern, and accessible color palette designed to be visually appealing and functional.

  • Primary Brand Color:

* Name: Panthera Blue

* Hex: #007BFF

* Usage: Primary CTAs, active states, main branding elements, prominent icons.

  • Secondary Accent Color:

* Name: Teal

* Hex: #20C997

* Usage: Secondary CTAs, highlights, progress indicators, chart accents.

  • Neutral Palette (Grays): Essential for text, backgrounds, borders, and disabled states.

* Dark Gray (Text): #343A40 (Primary text, headings)

* Medium Gray (Subtle Text/Icons): #6C757D (Secondary text, helper text, inactive icons)

* Light Gray (Borders/Dividers): #DEE2E6 (Borders, separators, subtle backgrounds)

* Extra Light Gray (Backgrounds): #F8F9FA (Page backgrounds, card backgrounds)

* White: #FFFFFF (Main content areas, canvas background)

  • Semantic Colors: For feedback and status indicators.

* Success (Green): #28A745 (Confirmation, successful actions)

* Warning (Yellow): #FFC107 (Caution, non-critical alerts)

* Danger (Red): #DC3545 (Error messages, destructive actions)

* Info (Blue): #17A2B8 (Informational messages)

Accessibility Note: Ensure sufficient contrast ratios (WCAG 2.1 AA compliant) for all text and interactive elements against their backgrounds.

5. UX Recommendations

5.1. Usability & Learnability

  • Onboarding Tour: Implement a short, interactive tour for first-time users, highlighting key features of the editor.
  • Contextual Tooltips: Provide helpful tooltips on hover for complex icons or less obvious controls.
  • Undo/Redo Functionality: Essential for any design tool, with clear visual feedback.
  • Clear Feedback: Provide immediate visual feedback for user actions (e.g., element selected, saved successfully, error messages).
  • Drag-and-Drop Indicators: Visually indicate valid drop zones and highlight elements being dragged.
  • Keyboard Shortcuts: Offer common shortcuts for efficiency (e.g., Ctrl+C/V, Delete, Arrow keys for nudging).

5.2. Efficiency & Control

  • Smart Guides & Alignment: Automatically display alignment guides when moving elements to help users align objects precisely.
  • Snapping: Enable snapping to grid and other elements for easy arrangement.
  • Grouping & Layering: Allow users to group multiple elements and manage layers (bring forward, send backward).
  • Pre-sets & Styles: Offer pre-defined style sets (font pairings, color combinations) to speed up design.
  • Asset Library: A dedicated section for users to manage their uploaded images, logos, and custom icons for reuse.
  • Template Customization: Ensure templates are fully customizable, not just placeholders. Users should be able to modify every element.

5.3. Accessibility

  • Color Contrast: All color combinations (text on background, interactive elements) must meet WCAG 2.1 AA standards (minimum contrast ratio of 4.5:1 for normal text, 3:1 for large text).
  • Keyboard Navigation: All interactive elements must be reachable and operable via keyboard (Tab, Shift+Tab, Enter, Spacebar).
  • ARIA Labels: Use ARIA attributes to enhance screen reader accessibility for complex components and interactive elements.
  • Focus Indicators: Provide clear visual focus indicators for all interactive elements when navigated via keyboard.
  • Alt Text for Images: Prompt users to add descriptive alt text for images to ensure accessibility for visually impaired users in exported infographics.

5.4. Visual Hierarchy & Information Architecture

  • Clear Navigation: Ensure the main navigation is always visible and intuitive.
  • Progressive Disclosure: Present complex options only when needed (e.g., advanced settings appearing after clicking an "Advanced" button).
  • Visual Grouping: Use proximity, background colors, and borders to visually group related elements and actions.
  • Consistency: Maintain consistent placement of controls (e.g., "Save" button always in the top right), icon meanings, and interaction patterns.

This detailed design specification provides a robust foundation for developing the Infographic Creator, ensuring a high-quality, user-friendly, and visually appealing product.

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);}});}