Data Visualization Suite
Run ID: 69cb3a0761b1021a29a870b92026-03-31Analytics
PantheraHive BOS
BOS Dashboard

Data Visualization Suite: Step 1 - Research & Design Requirements

Project Title: PantheraHive Data Visualization Suite

Document Version: 1.0

Date: October 26, 2023


1. Introduction & Design Philosophy

This document outlines the comprehensive design requirements for the PantheraHive Data Visualization Suite. This initial step focuses on establishing a robust foundation for the suite's user experience (UX) and user interface (UI), ensuring it is powerful, intuitive, and visually appealing.

Our design philosophy is centered on Clarity, Interactivity, and Scalability:

  • Clarity: Data should be presented in an easily digestible and understandable manner, minimizing cognitive load. Visualizations must be clean, well-labeled, and free from unnecessary clutter.
  • Interactivity: Users must be able to explore data dynamically, drilling down into details, filtering, and customizing views to uncover insights efficiently.
  • Scalability: The suite must be capable of handling diverse data sources and large datasets, while maintaining high performance and responsiveness across various devices.
  • Accessibility: Adherence to WCAG 2.1 guidelines to ensure the suite is usable by individuals with disabilities.
  • Customization: Empowering users to tailor their dashboards and visualizations to specific needs.

2. Detailed Design Specifications

This section details the core features and functionalities required for the Data Visualization Suite.

2.1 Core Features & Functionality

  • Dashboard Management:

* Creation & Editing: Intuitive drag-and-drop interface for building custom dashboards.

* Layout Customization: Resizable and rearrangeable widgets/panels.

* Template Library: Pre-built dashboard templates for common use cases (e.g., Sales, Marketing, Operations).

* Versioning & History: Ability to revert to previous dashboard states.

* Sharing & Collaboration: Secure sharing of dashboards with specific users or teams, with configurable permissions (view, edit).

  • Data Visualization Engine:

* Chart Types: Support for a comprehensive range of chart types:

* Categorical: Bar charts (stacked, grouped), Pie charts, Donut charts.

* Time-Series: Line charts, Area charts (stacked, unstacked), Candlestick charts.

* Distribution: Histograms, Box plots, Scatter plots.

* Relationship: Bubble charts, Heatmaps, Treemaps, Sankey diagrams.

* Geospatial: Choropleth maps, Point maps.

* KPI & Gauge: Single value indicators, Gauge charts.

* Table: Advanced data tables with sorting, filtering, and pagination.

* Interactive Elements:

* Tooltips: Detailed information on hover.

* Drill-down: Ability to click on a data point to explore underlying data or related dashboards.

* Zoom & Pan: For time-series and scatter plots.

* Filtering: Global and widget-specific filters (date ranges, categories, multi-select).

* Legend Interactivity: Toggling series visibility.

* Brushing & Linking: Selecting data points in one chart to highlight related data in others.

  • Data Source Integration:

* Connectors: Support for various data sources (e.g., SQL databases, NoSQL databases, REST APIs, CSV, Excel, Google Sheets, cloud data warehouses like Snowflake, BigQuery).

* Data Transformation: Basic data cleaning, aggregation, and calculated fields within the platform.

* Scheduled Refresh: Automated data updates at configurable intervals.

* Secure Credentials Management: Encrypted storage of data source credentials.

  • User & Access Management:

* Role-Based Access Control (RBAC): Define roles with specific permissions (e.g., Admin, Editor, Viewer).

* User Groups: Organize users into groups for easier permission management.

* Single Sign-On (SSO): Integration with common SSO providers (e.g., OAuth, SAML).

  • Alerts & Notifications:

* Threshold-Based Alerts: Set up alerts when data points cross predefined thresholds.

* Notification Channels: Email, in-app notifications, webhooks.

  • Export & Sharing:

* Export Formats: Export dashboards and individual visualizations to PDF, PNG, JPEG, SVG, CSV, Excel.

* Embeddable Widgets: Generate code to embed visualizations into external websites or applications.

* Scheduled Reports: Automatically generate and send dashboard reports via email.

  • Responsiveness & Performance:

* Adaptive Layouts: Optimal viewing experience across desktop, tablet, and mobile devices.

* Optimized Loading: Fast dashboard and visualization rendering, even with large datasets.

* Caching Mechanisms: Implement caching for frequently accessed data and visualizations.

2.2 Technical & Non-Functional Requirements

  • Performance: All dashboards and visualizations must load within 3 seconds for typical datasets (up to 1 million rows). Interactions (filtering, drill-down) should respond within 500ms.
  • Scalability: The architecture must support concurrent users and the ability to process and visualize datasets up to 100 million rows efficiently.
  • Security:

* End-to-end encryption for data in transit (TLS 1.2+) and at rest (AES-256).

* Robust authentication and authorization mechanisms.

* Regular security audits and vulnerability assessments.

  • Maintainability: Codebase designed for easy updates, bug fixes, and feature additions.
  • Browser Compatibility: Full support for modern browsers (Chrome, Firefox, Safari, Edge).

3. Wireframe Descriptions (High-Level)

This section provides textual descriptions of the key screens and their layout, focusing on information hierarchy and interaction points.

3.1 Dashboard Home Screen

  • Layout: Three-column structure, with an optional collapsible left sidebar.
  • Top Header:

* Logo/Suite Name (left).

* Global Search Bar (center).

* User Profile/Settings, Notifications, Help (right).

  • Left Sidebar (Collapsible):

* "My Dashboards" (list of user's saved dashboards).

* "Shared Dashboards" (list of dashboards shared with the user).

* "Templates" (access to pre-built templates).

* "Data Sources" (link to data source management).

* "Users & Roles" (admin-only link).

* "Create New Dashboard" button.

  • Main Content Area (Dashboard Canvas):

* Dashboard Title & Description: Prominently displayed at the top.

* Global Filters Panel: Optional, collapsible panel at the top or left of the canvas, containing date range pickers, dropdowns for common dimensions (e.g., Region, Product Category).

* Grid Layout: A flexible grid where individual visualization widgets are placed. Each widget has:

* Title.

* Options menu (e.g., Export, Edit, Duplicate, Remove).

* Interactive chart/table area.

* Optional widget-specific filters.

* "Add Widget" Button: Clearly visible to allow users to add new visualizations.

3.2 Visualization Editor Screen

  • Layout: Split-pane interface, with a data/chart configuration panel on the left and a live preview on the right.
  • Top Header:

* "Back to Dashboard" button.

* Visualization Title.

* "Save" / "Save & Add to Dashboard" buttons.

  • Left Panel (Configuration):

* Data Source Selector: Dropdown to choose the data source.

* Data Fields List: Tree-view or searchable list of available fields from the selected data source (dimensions, measures). Drag-and-drop functionality.

* Chart Type Selector: Dropdown or icon-based selection of visualization types.

* Mapping Area: Sections to drag data fields to chart axes (e.g., X-Axis, Y-Axis, Color, Size, Filters).

* Customization Options: Tabs or collapsible sections for:

* General: Title, Description, Legend position.

* Axes: Labels, Min/Max, Grid lines.

* Series: Color, Line style, Point style.

* Data Labels: On/Off, Format.

* Tooltips: Custom content.

* Advanced: Custom CSS/JS (optional, for power users).

  • Right Panel (Live Preview):

* Real-time rendering of the visualization as configurations are made.

* Interactive elements (hover, click) enabled for testing.

3.3 Data Source Management Screen

  • Layout: Tabular list view with a header for actions.
  • Top Header:

* "Add New Data Source" button.

* Search bar for existing data sources.

  • Data Source List (Table):

* Columns: Name, Type (e.g., PostgreSQL, API, CSV), Status (Connected/Disconnected), Last Refresh, Actions.

* Actions Column: Edit, Test Connection, Refresh Schema, Delete.

  • "Add New Data Source" Modal/Screen:

* Step-by-step wizard:

1. Choose Data Source Type (e.g., Database, File Upload, API).

2. Enter Connection Details (Host, Port, Database Name, Credentials, API Endpoint, etc.).

3. Test Connection.

4. Name Data Source & Save.


4. Color Palettes

A cohesive and accessible color palette is crucial for both branding and data clarity.

4.1 Primary Brand Palette

  • PantheraHive Blue: #007BFF (RGB: 0, 123, 255) - Primary interactive elements, buttons, headers.
  • PantheraHive Dark: #212529 (RGB: 33, 37, 41) - Main text, primary backgrounds for dark mode.
  • PantheraHive Light: #F8F9FA (RGB: 248, 249, 250) - Backgrounds, secondary text.

4.2 Neutral Palette (UI Elements)

  • Backgrounds:

* #FFFFFF (White) - Main content areas, cards.

* #F2F4F7 (Light Gray) - Section separators, subtle backgrounds.

* #E9ECEF (Border Gray) - Borders, dividers.

  • Text:

* #343A40 (Dark Gray) - Primary body text, labels.

* #6C757D (Medium Gray) - Secondary text, helper text.

  • Interactive States:

* #CED4DA (Input Border) - Default input fields.

* #ADB5BD (Hover Gray) - Hover states for subtle elements.

4.3 Data Visualization Palette

This palette is designed to ensure distinctiveness and readability for multiple data series. It is colorblind-friendly where possible and offers sufficient contrast.

  • Category 1 (Primary Highlight): #007BFF (PantheraHive Blue)
  • Category 2: #28A745 (Green)
  • Category 3: #DC3545 (Red)
  • Category 4: #FFC107 (Yellow/Amber)
  • Category 5: #6F42C1 (Purple)
  • Category 6: #17A2B8 (Cyan)
  • Category 7: #FD7E14 (Orange)
  • Category 8: #E83E8C (Pink)
  • Category 9: #6C757D (Slate Gray)
  • Category 10: #20C997 (Teal)
  • Sequential/Diverging (Example Gradient):

* Low: #F8F9FA -> Mid: #007BFF -> High: #003B7F (for single-hue progression)

* Diverging: #DC3545 -> #FFFFFF -> #28A745 (for values around a central point)

4.4 Status & Feedback Colors

  • Success: #28A745 (Green)
  • Warning: #FFC107 (Yellow/Amber)
  • Error: #DC3545 (Red)
  • Information: #17A2B8 (Cyan)

Note on Accessibility: All color choices will be regularly checked for WCAG 2.1 AA contrast compliance, especially for text and interactive elements.


5. User Experience (UX) Recommendations

These recommendations aim to create an intuitive, efficient, and enjoyable experience for all users.

5.1 Clarity & Simplicity

  • Minimalist Design: Prioritize content over chrome. Reduce visual clutter to focus user attention on data.
  • Clear Labeling: Use descriptive and consistent labels for all UI elements, charts, and data points.
  • Progressive Disclosure: Present complex options only when needed. Start with basic controls and offer advanced settings via "More Options" or dedicated panels.
  • Information Hierarchy: Use size, color, and placement to guide the user's eye and indicate importance.

5.2 Consistency

  • UI Patterns: Maintain consistent layout, navigation, and interactive patterns across the entire suite.
  • Terminology: Use a consistent vocabulary for all features, labels, and messages.
  • Visual Language: Apply the defined color palette, typography, and iconography uniformly.

5.3 Feedback & Responsiveness

  • Instant Feedback: Provide immediate visual or textual feedback for user actions (e.g., loading indicators, success messages, error alerts).
gemini Output

Data Visualization Suite: Design Specifications & UX Recommendations

This document outlines the detailed design specifications, conceptual wireframes, color palettes, and user experience (UX) recommendations for the "Data Visualization Suite." The goal is to create a powerful, intuitive, and visually compelling platform that empowers users to extract actionable insights from their data.


1. Overall Design Philosophy & Principles

Our design approach for the Data Visualization Suite is anchored in the following core principles:

  • Clarity & Readability: Information must be presented in a clear, concise, and easily digestible manner, minimizing cognitive load. Visualizations will be free from clutter and prioritize data integrity.
  • Actionability: Designs will guide users towards insights that drive decisions. Key metrics, trends, and anomalies will be highlighted effectively.
  • User-Centricity: The suite will be designed with the end-user in mind, focusing on intuitive navigation, interactive exploration, and customizable views.
  • Consistency: A unified visual language across all components ensures a predictable and seamless user experience.
  • Scalability & Performance: The design will accommodate varying data volumes and types, ensuring smooth performance and responsiveness across different devices.
  • Modern Aesthetics: A clean, professional, and contemporary visual design will enhance user engagement and trust.
  • Accessibility: Adherence to accessibility standards ensures the suite is usable by a diverse range of users.

2. Core Components & Modules

The Data Visualization Suite will comprise the following key modules:

  • Dashboard Overview: A high-level summary providing immediate insights into critical KPIs and trends across various data domains.
  • Detailed Report Views: Dedicated sections for in-depth analysis of specific data sets (e.g., Sales Performance, Marketing Campaigns, Operational Efficiency, Customer Behavior).
  • Interactive Filters & Controls: A robust system for data slicing, dicing, and drilling down, allowing users to customize their view.
  • Data Export & Sharing: Functionality to export visualizations and raw data, or share reports with colleagues.
  • User Settings & Preferences: Options for personalization, theme selection, and alert management.
  • Data Source Management (Conceptual): An interface for connecting and managing various data sources (not explicitly covered in this design spec but considered for future integration).

3. Detailed Design Specifications for Key Visualizations

Each visualization type will adhere to specific design guidelines to ensure optimal clarity and impact.

3.1. Key Performance Indicator (KPI) Cards

  • Purpose: To provide quick, at-a-glance insights into critical metrics.
  • Structure:

* Primary Metric: Large, bold font displaying the current value.

* Metric Label: Clear, concise label below the primary metric.

* Trend Indicator: Small arrow (▲/▼) or sparkline showing performance relative to a previous period (e.g., "vs. Last Month").

* Delta Value: Percentage or absolute change from the comparison period.

* Threshold Highlighting: Optional color coding (e.g., green for positive, red for negative) based on predefined targets or thresholds.

  • Interactivity: Clicking on a KPI card should navigate to a detailed report view related to that metric.
  • Example:

* Total Revenue

* $1,250,000

* ▲ 5.2% vs. Last Month

* (Subtle green background if above target)

3.2. Line Charts

  • Purpose: To display trends over time or continuous data points.
  • Elements:

* Axes: Clearly labeled X-axis (time, categories) and Y-axis (values). Y-axis should start at zero unless specific data distribution requires otherwise.

* Lines: Smooth, distinct lines for each data series. Utilize varying colors and optional line styles (e.g., dashed for forecast).

* Data Points: Optional small circles/dots on data points, especially when showing discrete measurements.

* Tooltips: On hover, display exact date/category and value(s) for the hovered point.

* Legend: Clear and concise, positioned to avoid obscuring data.

* Grids: Subtle, light gray grid lines for readability, primarily horizontal.

  • Interactivity: Zooming/panning, brush selections for time ranges, series toggling.

3.3. Bar Charts (Vertical & Horizontal)

  • Purpose: To compare categorical data.
  • Elements:

* Axes: Clearly labeled X-axis (categories) and Y-axis (values for vertical bars), or vice-versa for horizontal bars.

* Bars: Consistent width, appropriate spacing between bars. Use distinct colors for different categories or a single color with varying shades for a single category comparison.

* Sorting: Default sorting by value (descending) or by category (alphabetical) with an option to change.

* Tooltips: On hover, display category and value.

* Stacked Bars: Use for showing parts of a whole across categories. Ensure color segments are easily distinguishable.

  • Interactivity: Sorting options, filtering by clicking on a bar (drill-down).

3.4. Pie/Donut Charts

  • Purpose: To show proportions of a whole (limited to 5-7 segments for clarity).
  • Elements:

* Segments: Distinct colors for each segment.

* Labels: Percentage and/or value displayed directly on or adjacent to segments. Avoid overlapping labels.

* Donut Hole: For Donut charts, the center can display the total value or a key summary.

* Legend: Essential for mapping colors to categories.

* Tooltips: On hover, display category, value, and percentage.

  • Caution: Avoid using for too many categories or for comparing magnitudes across different charts. Bar charts are often superior for comparisons.

3.5. Data Grids/Tables

  • Purpose: To display detailed, raw data in an organized, searchable format.
  • Elements:

* Headers: Sticky headers for scrolling tables. Clear column names.

* Rows: Alternating row colors for readability (zebra stripping).

* Pagination: For large datasets.

* Sorting: Clickable column headers to sort ascending/descending.

* Filtering/Searching: Global search bar and per-column filters.

* Export Options: Buttons for CSV, Excel, PDF export.

  • Interactivity: Row selection, inline editing (if applicable), drill-down on specific rows.

4. Wireframe Descriptions (Conceptual Layouts)

These descriptions outline the general structure and content for key screens.

4.1. Main Dashboard View

  • Layout: Responsive grid layout, allowing widgets to rearrange on smaller screens.
  • Header:

* Suite Logo/Name (Top Left)

* Global Search Bar (Center)

* User Profile/Settings Icon (Top Right)

* Notification Bell Icon (Top Right)

  • Left Sidebar Navigation:

* Collapsible/Expandable.

* Primary navigation links: Dashboard, Sales, Marketing, Operations, Customers, Settings.

* Icons accompanying text labels.

  • Main Content Area (Dashboard Grid):

* Top Row: 3-4 prominent KPI cards (e.g., Total Revenue, New Customers, Conversion Rate, Avg. Order Value).

* Second Row: A large Line Chart showing "Revenue Trend Over Time" with a date range selector.

* Third Row: Two medium-sized widgets side-by-side: "Top 5 Products by Sales" (Bar Chart) and "Revenue by Region" (Donut Chart or Map).

* Bottom Row: A small Data Grid showing "Recent Orders" or "Upcoming Tasks."

  • Global Filters: A subtle, accessible filter bar at the top of the content area for overall date range, business unit, etc.

4.2. Detailed Report View (e.g., Sales Performance)

  • Layout: Similar to Dashboard, but focused on a specific domain.
  • Header: Same as Dashboard.
  • Left Sidebar Navigation: Highlight current section (e.g., "Sales" is active). Sub-navigation for Sales (e.g., Overview, Products, Customers, Regions).
  • Main Content Area (Sales Performance):

* Top Section: Title of the report (e.g., "Sales Performance Overview").

* Filter Panel (Left or Top): More granular filters specific to sales data (e.g., Product Category, Sales Rep, Customer Segment, Date Range Selector with custom options).

* Key Sales Metrics: A row of 3-5 KPI cards relevant to sales (e.g., Total Sales, Average Deal Size, Sales Cycle Length, Win Rate).

* Primary Chart: Large Line Chart showing "Monthly Sales Trend."

* Secondary Charts: Two-column layout below the primary chart:

* "Sales by Product Category" (Bar Chart)

* "Sales by Region" (Horizontal Bar Chart or Geo Map)

* Detailed Data Table: A comprehensive Data Grid showing "All Sales Transactions" with sortable columns, search, and pagination.


5. Color Palettes

A harmonious and accessible color palette is crucial for both aesthetics and data interpretation.

  • Primary Brand Colors:

* Primary Blue: #007bff (A vibrant, professional blue for main actions, primary headings, and interactive elements).

* Secondary Gray: #6c757d (For secondary text, subtle borders, and inactive states).

* Accent Teal: #20c997 (For specific highlights, success states, or a complementary accent).

  • UI Neutral Palette:

* Background: #f8f9fa (Light off-white for main content areas).

* Card/Panel Background: #ffffff (Pure white for distinct cards, modals).

* Text (Primary): #212529 (Dark charcoal for main body text).

* Text (Secondary): #495057 (Slightly lighter gray for secondary information).

* Borders/Dividers: #dee2e6 (Light gray for subtle separation).

  • Data Visualization Palette:

* Categorical (Distinct): A set of 6-8 distinct, colorblind-friendly colors for different categories. Examples:

* #4285F4 (Blue)

* #EA4335 (Red)

* #FBBC05 (Yellow)

* #34A853 (Green)

* #9C27B0 (Purple)

* #FF5722 (Orange)

* #00BCD4 (Cyan)

* #795548 (Brown)

* Sequential (Gradient): For intensity or magnitude. Example: From a light blue #e3f2fd to a dark blue #1976d2.

* Diverging (Positive/Negative): For showing deviation from a central point. Example: Red for negative, gray for neutral, green for positive.

* Negative: #dc3545 (Red)

* Neutral: #adb5bd (Gray)

* Positive: #28a745 (Green)

  • Alert & Status Colors:

* Success: #28a745 (Green)

* Warning: #ffc107 (Yellow/Orange)

* Danger/Error: #dc3545 (Red)

* Info: #17a2b8 (Light Blue)


6. Typography

Clear and consistent typography enhances readability and establishes a professional tone.

  • Primary Font Family (Headings & Key Metrics): Roboto or Inter (Modern, sans-serif, highly readable). Used for titles, KPI values, and main headings.
  • Secondary Font Family (Body Text & Labels): Open Sans or Lato (Highly legible, sans-serif). Used for paragraph text, chart labels, table data, and tooltips.
  • Font Sizes & Weights (Examples):

* H1 (Page Title): 28px, Bold

* H2 (Section Title): 22px, Semi-Bold

* H3 (Widget Title): 18px, Medium

* KPI Value: 36-48px, Bold

* KPI Label: 14px, Regular

* Body Text: 14-16px, Regular

* Chart Labels/Axes: 12-14px, Regular

* Table Headers: 14px, Medium

* Table Data: 13-14px, Regular

  • Line Height: 1.5 for body text to improve readability.
  • Color: Use #212529 for primary text and #495057 for secondary text/labels to ensure good contrast.

7. Iconography

Icons will be used to enhance navigation, denote actions, and visually represent concepts.

  • Style: Outline/Line Icons. This provides a clean, modern aesthetic and integrates well with data visualizations. Icons should be consistent in stroke weight and corner radius.
  • Library: Utilize a well-established icon library (e.g., Font Awesome, Material Icons, Feather Icons) for consistency and scalability.
  • Usage:

* Navigation (e.g., Dashboard icon, Settings cog).

* Actions (e.g., Export icon, Filter icon, Edit icon).

* Status (e.g., Checkmark for success, Exclamation for warning).

  • Size: Standard sizes (e.g., 16px, 20px, 24px) for consistency.
  • Color: Typically inherit text color or a neutral gray, with a primary brand color on hover/active states.

8. UX Recommendations

Optimizing the user experience is paramount for data exploration and insight generation.

  • Intuitive Navigation:

* Clear Hierarchy: Use a consistent left-hand navigation bar for primary sections and potentially a secondary tabbed navigation for sub-sections within a report.

* Breadcrumbs: Implement breadcrumbs for complex drill-down paths to help users understand their location within the suite.

* Search Functionality: A global search bar to quickly find reports, dashboards, or specific data points.

  • Interactive Filtering & Drilling:

* Prominent Filter Controls: Filters should be easily discoverable (e.g., dedicated sidebar panel,

gemini Output

Finalized Design Assets: Data Visualization Suite

This document outlines the finalized design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the Data Visualization Suite. This comprehensive guide ensures a consistent, intuitive, and visually appealing experience for all users, aligning with modern design principles and best practices for data presentation.


1. Executive Summary

The Data Visualization Suite is designed to provide users with powerful, interactive, and easy-to-understand insights from complex data. Our focus is on clarity, performance, and user empowerment, enabling quick data exploration and informed decision-making. This final design package ensures a polished, professional, and highly functional product ready for development.


2. Detailed Design Specifications

This section details the foundational elements that will govern the visual and interactive design of the Data Visualization Suite.

2.1. Layout & Grid System

  • Grid System: A responsive 12-column grid system will be implemented to ensure flexible and consistent layouts across various screen sizes (desktop, tablet, mobile).

* Desktop: Max content width of 1440px, with 24px gutters and 24px margins.

* Tablet: 16px gutters and 16px margins.

* Mobile: 16px margins, single-column stacking for complex elements.

  • Spacing: A 8px baseline grid will be used for all vertical and horizontal spacing, ensuring harmonious alignment and visual rhythm. Common spacing values include 8px, 16px, 24px, 32px, 48px, etc.
  • Dashboard Layout: Modular widget-based design, allowing users to customize and arrange data visualizations. Each widget will reside within a card component.
  • Header & Sidebar: A fixed top header for global navigation and branding, and an optional collapsible left sidebar for primary navigation and filtering options.

2.2. Typography

  • Primary Font Family: Inter (or a similar modern sans-serif like Roboto, Open Sans) for all body text, labels, and data annotations. This font offers excellent readability across various sizes and weights.

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

  • Secondary Font Family: Montserrat (or a similar geometric sans-serif like Poppins, Lato) for headings and titles, providing a distinct visual hierarchy.

* Weights: Semi-Bold (600), Bold (700).

  • Font Sizing & Hierarchy:

* H1 (Page Title): Montserrat Bold, 32px

* H2 (Section Title): Montserrat Semi-Bold, 24px

* H3 (Widget Title): Montserrat Semi-Bold, 18px

* Body Text: Inter Regular, 14px - 16px

* Labels/Captions: Inter Regular, 12px - 14px

* Data Values: Inter Semi-Bold, 16px - 24px (depending on prominence)

  • Line Height: 1.5 for body text, 1.2 for headings.

2.3. Iconography

  • Style: Clean, modern, outline (stroke-based) icons for interface elements (navigation, actions, settings). Solid (filled) icons may be used sparingly for emphasis or interactive states.
  • Library: A consistent icon library (e.g., Font Awesome Pro, Material Icons, or custom SVG set) will be used.
  • Size: Standard icon size 20px x 20px or 24px x 24px. Smaller 16px x 16px for inline actions.
  • Usage: Icons should always be accompanied by descriptive text unless their meaning is universally understood within the context.

2.4. Interactive Elements

  • Buttons:

* Primary: Solid background color (Primary Blue), white text.

* Secondary: Outline (Primary Blue border, white background), Primary Blue text.

* Tertiary/Ghost: Transparent background, Primary Blue text.

* States: Default, Hover, Active, Focus, Disabled (lighter opacity/greyed out).

* Radius: 4px border-radius for a soft, modern feel.

  • Input Fields (Text, Number, Date Pickers):

* Clean, minimalistic design with a light border.

* Clear focus state (e.g., Primary Blue border).

* Placeholder text for guidance.

* Error states (red border, error message).

  • Dropdowns/Selects:

* Consistent styling with input fields.

* Clear hover and active states for options.

  • Toggles/Checkboxes/Radio Buttons:

* Modern, clear visual indication of selected state (e.g., Primary Blue fill).

* Accessible hit areas.

  • Sliders:

* Track and thumb design, indicating current range or value.

* Interactive and visually distinct from static elements.

2.5. Data Visualization Components

  • Chart Types: Support for common and effective chart types:

* Bar Charts (Vertical, Horizontal, Stacked)

* Line Charts

* Area Charts

* Pie/Donut Charts

* Scatter Plots

* Heatmaps

* Treemaps

* Gauge Charts

* Tables (enhanced with sparklines, conditional formatting)

  • Legends: Clear, concise, interactive legends with options to toggle data series visibility. Positioned strategically (e.g., top, bottom, or right).
  • Tooltips: On-hover tooltips providing detailed data points and context. Consistent styling across all charts.
  • Axes: Clearly labeled axes with appropriate scaling and formatting for numbers, dates, and categories.
  • Interactivity:

* Hover Effects: Highlight data points/series on hover.

* Click-to-Drill-Down: Ability to click on a data point to view more granular data or related reports.

* Zoom/Pan: For time-series or dense scatter plots.

* Filtering/Sorting: Direct interaction with chart elements to filter data.

  • Animations: Subtle, smooth animations for chart loading, data updates, and state changes to enhance user experience without distraction.

2.6. Responsiveness

  • All components and layouts will be designed to gracefully adapt to different screen sizes (desktop, tablet, mobile).
  • Content prioritization: Essential information remains visible, secondary information may be collapsed or placed in accordions on smaller screens.
  • Touch-friendly interactions for mobile and tablet devices.

2.7. Accessibility (WCAG 2.1 AA Compliance Target)

  • Color Contrast: Ensure sufficient contrast ratios for text and interactive elements against their backgrounds.
  • Keyboard Navigation: All interactive elements must be fully navigable and operable via keyboard.
  • ARIA Attributes: Implement appropriate ARIA roles, states, and properties for screen reader compatibility.
  • Semantic HTML: Use semantic HTML tags to provide meaningful structure.
  • Focus Management: Clear visual focus indicators for interactive elements.
  • Alt Text: Provide descriptive alt text for images and complex visual elements where appropriate.

3. Key Wireframe Descriptions

While specific wireframe images are not provided in this text-based output, the following descriptions detail the structural layout and key components of essential screens within the Data Visualization Suite.

3.1. Main Dashboard Wireframe

  • Header (Fixed Top):

* Left: Logo, Suite Title ("Data Visualization Suite").

* Center: Global Search Bar, Quick Add/Create button.

* Right: User Profile/Avatar, Notifications Icon, Settings Icon, Help Icon.

  • Left Sidebar (Collapsible):

* Main Navigation: Dashboard, Reports, Data Sources, Settings, User Management.

* Sub-navigation/Filters (contextual to selected main nav item).

  • Main Content Area (Grid-based):

* Dashboard Title: H1, prominently displayed.

* Date Range Selector/Global Filters: Located at the top of the content area, allowing users to apply filters across all widgets.

* Widget Grid:

* Composed of N number of individual "Card" components.

* Each Card: H3 Title, small description/last updated timestamp, Chart/Data Visualization area, Action Menu (e.g., Export, Edit, Refresh, Maximize).

* Examples of widgets: Key Performance Indicators (KPIs) with large numbers and trend indicators, Bar Chart, Line Chart, Table.

* Drag-and-Drop functionality: To rearrange and resize widgets.

* Add Widget Button: Prominently placed for customization.

3.2. Detailed Report View Wireframe

  • Header (Fixed Top): Same as Dashboard header.
  • Left Sidebar (Optional/Contextual):

* Report-specific Filters: Date Range, Dimensions (e.g., Region, Product), Metrics (e.g., Sales, Profit), Comparison options.

* Export/Share options.

  • Main Content Area:

* Report Title: H1, with a concise description.

* Primary Visualization Area: Large, prominent area dedicated to the main chart (e.g., a complex line chart with multiple series, a detailed scatter plot).

* Includes interactive legend, zoom/pan controls, and tooltips.

* Supporting Metrics/KPIs: A row of smaller KPI cards above or below the primary visualization providing key summary figures related to the report.

* Data Table: Below the primary visualization, a detailed, sortable, and filterable data table showing the raw or summarized data used in the report. Pagination controls.

* Secondary Visualizations: Optionally, smaller, related charts providing additional context or different views of the data.

3.3. Data Filtering Panel Wireframe (Example for a Report or Data Table)

  • Panel Header: "Filters & Options" or "Customize View."
  • Filter Groups (Accordions/Expandable Sections):

* Date Range: Predefined ranges (Today, Last 7 Days, Month to Date) and Custom Range picker.

* Dimensions: Multi-select dropdowns or checkboxes for categorical filters (e.g., "Product Category," "Region," "Customer Segment").

* Metrics: Checkboxes to select which metrics to display (e.g., "Total Sales," "Average Order Value," "Conversion Rate").

* Comparison: Options to compare data against previous periods or other segments.

  • Search Bar: Within each filter group for large lists.
  • Applied Filters Display: A section showing all currently applied filters with "X" icons to remove them individually.
  • Action Buttons:

* "Apply Filters" (Primary Button)

* "Clear All Filters" (Secondary/Tertiary Button)


4. Color Palettes

The color palette is designed for clarity, professionalism, and effective data differentiation, adhering to accessibility standards.

4.1. Primary Brand & UI Colors

  • Primary Blue: #007bff (RGB: 0, 123, 255) - Used for primary actions, active states, main branding elements, and key informational highlights.
  • Dark Grey (Text): #212529 (RGB: 33, 37, 41) - For main body text, headings, and critical labels.
  • Light Grey (Background): #f8f9fa (RGB: 248, 249, 250) - For page backgrounds, card backgrounds, and subtle distinctions.

4.2. Secondary & Accent Colors

  • Accent Green: #28a745 (RGB: 40, 167, 69) - For positive indicators, success messages, and secondary actions.
  • Accent Orange: #fd7e14 (RGB: 253, 126, 20) - For warning messages, attention-grabbing elements, or complementary data series.
  • Accent Purple: #6f42c1 (RGB: 111, 66, 193) - For additional UI elements or a distinct data series.

4.3. Data Visualization Palettes

  • Categorical Palette (for distinct categories): A set of 6-8 distinct, vibrant yet harmonious colors that are easily distinguishable.

* #007bff (Blue)

* #28a745 (Green)

#dc3545 (Red - used carefully to avoid error connotation*)

* #ffc107 (Yellow)

* #6f42c1 (Purple)

* #17a2b8 (Cyan)

* #6c757d (Grey)

* #e83e8c (Pink)

Note: For more than 8 categories, consider grouping, using shades, or allowing users to customize.*

  • Sequential Palette (for data with ordered values): Gradients of a single or two complementary hues.

* Example: Light Blue (#e0f2f7) -> Medium Blue (#a7d9ee) -> Primary Blue (#007bff) -> Dark Blue (#0056b3)

  • Diverging Palette (for data with a critical midpoint): Two distinct hues diverging from a neutral midpoint.

* Example: Red (#dc3545) -> Light Red (#f8d7da) -> Grey (#e9ecef) -> Light Green (#d4edda) -> Green (#28a745)

4.4. Semantic Colors

  • Success: #28a745 (Green)
  • Warning: #ffc107 (Yellow/Amber)
  • Error: #dc3545 (Red)

*

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