Data Visualization Suite
Run ID: 69cd2d483e7fb09ff16a89b42026-04-01Analytics
PantheraHive BOS
BOS Dashboard

PantheraHive Deliverable: Data Visualization Suite - Step 1 of 3: Research & Design Requirements

Project Title: Data Visualization Suite

Workflow Step: 1 of 3 - Research & Design Requirements

Date: October 26, 2023

Prepared For: [Customer Name/Stakeholder Group]


1. Executive Summary

This document outlines the detailed design specifications, wireframe descriptions, color palette recommendations, and user experience (UX) guidelines for the proposed Data Visualization Suite. This comprehensive output serves as the foundational blueprint for development, ensuring all stakeholders are aligned on the vision, functionality, and aesthetic principles of the suite. Our goal is to create an intuitive, powerful, and aesthetically pleasing platform that empowers users to transform complex data into actionable insights.


2. Detailed Design Specifications

The Data Visualization Suite will be a robust, web-based application designed to facilitate data exploration, analysis, and presentation through interactive visualizations and dashboards.

2.1 Core Functionality

  • Data Ingestion & Integration:

* Multiple Data Sources: Support for various data connectors including SQL databases (PostgreSQL, MySQL, SQL Server), NoSQL databases (MongoDB), cloud data warehouses (Snowflake, BigQuery, Redshift), flat files (CSV, Excel, JSON), and RESTful APIs.

* Scheduled Data Refresh: Options for manual and scheduled data refreshes, with configurable frequencies.

* Data Preview & Schema Detection: Ability to preview raw data upon connection and automatically detect data types (string, number, date, boolean).

* Secure Credential Management: Encrypted storage and secure handling of data source credentials.

  • Visualization Types:

* Standard Charts: Bar charts (stacked, grouped), Line charts (single, multi-series), Area charts, Pie/Donut charts, Scatter plots, Bubble charts.

* Advanced Charts: Heatmaps, Treemaps, Sunburst charts, Gauge charts, Funnel charts, Chord diagrams, Network graphs.

* Geospatial Visualizations: Map charts with choropleth, point, and heat overlay capabilities (requiring GeoJSON or lat/long data).

* Tabular Data: Enhanced tables with sorting, pagination, conditional formatting, and mini-charts (sparklines).

* Key Performance Indicators (KPIs): Large numerical displays with comparison metrics and trend indicators.

  • Dashboard Creation & Management:

* Drag-and-Drop Interface: Intuitive canvas for arranging and resizing visualizations.

* Layout Options: Grid-based and flexible canvas layouts.

* Dashboard Templates: Pre-designed templates for common use cases (e.g., Sales Performance, Marketing Analytics).

* Saving & Loading: Ability to save, load, duplicate, and delete dashboards.

* Sharing & Collaboration: Secure sharing options with view-only or edit permissions, public/private dashboard links, and embedding capabilities (iframe).

* Versioning: Basic version control for dashboards.

  • Interactivity & Exploration:

* Filtering: Global and local filters (dropdowns, sliders, date pickers) applicable to one or multiple visualizations.

* Drill-Down/Up: Hierarchical exploration within visualizations (e.g., Year -> Quarter -> Month).

* Cross-Filtering (Brushing & Linking): Interactions in one chart dynamically filter or highlight data in others.

* Zoom & Pan: For detailed exploration of dense charts (e.g., line charts, scatter plots).

* Tooltips: On-hover information display with customizable content.

* Sorting: Dynamic sorting of chart axes and table columns.

  • Customization & Styling:

* Chart Properties: Extensive options for customizing titles, labels, axes (ranges, scales, ticks), legends, data point styling, and gridlines.

* Color Palettes: Pre-defined and custom color palettes for data series.

* Theming: Light and dark mode options, with ability to define custom themes.

* Annotations: Ability to add text, lines, or shapes to highlight specific data points or trends.

  • Data Transformation & Calculation:

* Basic Aggregations: Sum, Average, Count, Min, Max, Median, Standard Deviation.

* Calculated Fields: User-defined formulas using existing fields (e.g., Sales / Quantity for average price).

* Date Functions: Year, Quarter, Month, Week, Day extraction and date difference calculations.

* Filtering & Grouping: Ability to create custom groups and apply advanced filters at the data source level.

  • Export & Reporting:

* Image Export: PNG, JPEG, SVG for individual visualizations and entire dashboards.

* Data Export: CSV, Excel for underlying data of visualizations.

* PDF Export: High-quality PDF generation for dashboards.

* Scheduled Reports: Emailing dashboards or reports on a recurring basis.

  • User Management & Permissions (if applicable):

* Role-Based Access Control (RBAC): Define roles (Admin, Editor, Viewer) with specific permissions for data sources, dashboards, and features.

* User Authentication: Secure login, potentially integrating with SSO (Single Sign-On).

2.2 Technical Considerations

  • Scalability: Designed to handle large datasets and a growing number of users without performance degradation.
  • Performance: Optimized for fast data loading, rendering, and interactive responses using efficient data retrieval and client-side rendering techniques.
  • Security: Adherence to industry best practices for data security, including encryption in transit and at rest, secure authentication, and authorization mechanisms.
  • Responsiveness: Fully responsive design, ensuring optimal viewing and interaction across various devices (desktop, tablet, mobile).
  • Browser Compatibility: Full support for modern web browsers (Chrome, Firefox, Edge, Safari).
  • Extensibility (API): Provision for a well-documented API to allow for custom data connectors or embedding in other applications.

3. Wireframe Descriptions (Conceptual Layouts)

The following describes the conceptual layouts for key screens, focusing on information hierarchy and functionality.

3.1 Dashboard Overview / Home Screen

  • Header: Global navigation (Home, Data Sources, Dashboards, Settings, User Profile), Search bar, "Create New Dashboard" button.
  • Main Content Area:

* Dashboard List/Grid: Displays thumbnails or cards of existing dashboards. Each card includes:

* Dashboard Title

* Last Modified Date

* Owner/Creator

* Sharing Status (e.g., "Shared," "Private")

* Action Menu (Edit, Duplicate, Share, Delete).

* Filtering/Sorting: Options to filter dashboards by owner, tags, or sort by name, date.

* "Favorites" Section: Optionally, a dedicated section for frequently accessed dashboards.

* "Recent" Section: Displays recently viewed or edited dashboards.

  • Sidebar (Optional): Categories or tags for organizing dashboards.

3.2 Individual Dashboard View

  • Header: Dashboard Title, Last Refreshed Time, "Edit Dashboard" button, "Share" button, "Export" button, "Refresh Data" button, "Full Screen" toggle.
  • Canvas Area:

* Arrangement of Visualizations: Grid or free-form arrangement of various charts, tables, KPIs.

* Interactive Elements: Global filters (date range picker, dropdowns) positioned at the top or in a dedicated sidebar.

* Visualization Interaction: Each visualization should respond to user interactions (hover tooltips, clicks for drill-down/cross-filtering).

* Individual Chart Menu: Each chart has a small contextual menu for actions like "View Data," "Export Chart," "Edit Chart."

3.3 Data Source Connection & Management

  • Header: "Data Sources" title, "Add New Data Source" button.
  • Main Content Area:

* List of Connected Data Sources: Each entry includes:

* Data Source Name

* Type (e.g., "PostgreSQL," "CSV")

* Status (e.g., "Connected," "Error")

* Last Refreshed

* Action Menu (Edit Connection, Refresh Schema, Delete, Test Connection).

* Data Source Details Panel (on selection): Displays schema, tables/collections, field types, and sample data.

  • "Add New Data Source" Workflow:

* Step 1: Choose Connector: List of available connectors (e.g., SQL, CSV, API).

* Step 2: Enter Credentials/Details: Form fields specific to the chosen connector (host, port, username, password, file upload).

* Step 3: Test Connection: Button to verify credentials.

* Step 4: Select Tables/Collections: Interface to select relevant tables or collections and preview schema.

* Step 5: Name Data Source: Assign a user-friendly name.

3.4 Visualization Builder / Editor

  • Left Sidebar (Data Panel):

* Data Source Selector: Dropdown to select the active data source.

* Fields List: Categorized list of available dimensions (categorical) and measures (numerical) from the selected data source. Search bar for fields.

* Calculated Fields: Section to create and manage custom calculations.

  • Center Canvas (Chart Preview):

* Real-time Preview: Displays the visualization as it's being built.

* Drag-and-Drop Zones: Clearly labeled areas for "X-axis," "Y-axis," "Color," "Size," "Filters," "Tooltip" (e.g., "Drop fields here").

  • Right Sidebar (Properties Panel):

* Visualization Type Selector: Dropdown/icons to change chart type.

* General Settings: Chart title, subtitle, legend position, tooltips on/off.

* Axis Settings: Labels, min/max, scale type (linear, log), gridlines.

* Color Settings: Palettes, conditional formatting rules.

* Data Labels: Show/hide, format.

* Interactivity Settings: Drill-down options, cross-filtering behavior.

  • Footer: "Save Visualization," "Cancel" buttons.

4. Color Palettes

A well-defined color palette is crucial for aesthetics, data differentiation, and accessibility. We propose a balanced palette that is professional, clear, and visually appealing.

4.1 Primary Brand Palette

These colors represent the core identity of the suite and are used for primary actions, branding, and key UI elements.

  • Primary Blue: #007bff (RGB: 0, 123, 255) - Strong, trustworthy, for main CTAs, active states, important headers.
  • Primary Dark Blue: #0056b3 (RGB: 0, 86, 179) - For hover states, darker accents.
  • Primary Grey: #6c757d (RGB: 108, 117, 125) - For secondary text, disabled states, subtle borders.

4.2 Data Visualization Palettes

These are designed to effectively differentiate data series while maintaining visual harmony and accessibility.

  • Categorical Palette (Sequential/Diverging - for multiple distinct series):

* #4285F4 (Blue)

* #EA4335 (Red)

* #FBBC05 (Yellow)

* #34A853 (Green)

* #FF6D00 (Orange)

* #673AB7 (Deep Purple)

* #00BCD4 (Cyan)

* #E91E63 (Pink)

Recommendation:* Provide options for different categorical palettes (e.g., pastel, vibrant) and ensure sufficient contrast for colorblind users.

  • Quantitative Palette (Gradient - for continuous data):

* Single Hue Gradient: From a light shade of a primary color to a dark shade (e.g., Light Blue to Dark Blue: #E3F2FD -> #2196F3 -> #1A237E).

* Diverging Gradient: For data with a meaningful midpoint (e.g., Red-White-Green: #D32F2F -> #FFFFFF -> #388E3C).

Recommendation:* Allow users to customize gradient start/end colors.

4.3 Neutral & Semantic Palettes

  • Backgrounds:

* Light Mode: #FFFFFF (White) - Primary background. #F8F9FA (Light Grey) - Secondary background for panels, cards.

* Dark Mode: #121212 (Dark Grey) - Primary background. #1E1E1E (Slightly Lighter Dark Grey) - Secondary background.

  • Text:

* Dark Text (Light Mode): #212529 (Dark Charcoal) - Primary text. #6c757d (Grey) - Secondary text.

* Light Text (Dark Mode): #E0E0E0 (Light Grey) - Primary text. #B0B0B0 (Medium Grey) - Secondary text.

  • Borders/Dividers: #DEE2E6 (Light Grey) in light mode; #424242 in dark mode.
  • Semantic Colors:

* Success: #28A745 (Green)

* Warning: #FFC107 (Yellow/Orange)

* Danger/Error: #DC3545 (Red)

* Info: #17A2B8 (Teal)

4.4 Accessibility Considerations

  • Contrast Ratios: All text and interactive elements will meet WCAG 2.1 AA (at minimum) contrast ratio standards (
gemini Output

Data Visualization Suite: Design Specifications & UX Recommendations

Project Overview

This document outlines the detailed design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the "Data Visualization Suite." The goal is to create a robust, intuitive, and visually compelling platform that empowers users to transform complex data into actionable insights through interactive visualizations and customizable dashboards. This suite will prioritize user efficiency, data integrity, and aesthetic clarity.


1. Detailed Design Specifications

The Data Visualization Suite will be structured around several core modules, each designed to address specific aspects of data exploration, analysis, and reporting.

1.1 Core Modules & Functionalities

  • 1.1.1 Dashboard Overview

* Purpose: Provide a high-level, real-time summary of key performance indicators (KPIs) and critical metrics.

* Features:

* Customizable Layouts: Users can drag-and-drop, resize, and arrange widgets (charts, tables, single-value indicators) to create personalized dashboards.

* Widget Library: A rich library of pre-built visualization types (e.g., bar charts, line graphs, pie charts, gauges, heatmaps, scatter plots, summary tables).

* Drill-Down Capabilities: Clickable elements within widgets allowing users to delve into underlying data or navigate to more detailed reports.

* Global Filters: Apply filters (date range, categories, dimensions) across all widgets on a dashboard.

* Sharing & Collaboration: Secure sharing of dashboards with other users or teams, with configurable view/edit permissions.

* Export Options: Export dashboards as images (PNG, JPG), PDFs, or raw data (CSV, XLSX).

  • 1.1.2 Report Builder & Generator

* Purpose: Enable users to create detailed, multi-page reports with advanced customization and scheduling options.

* Features:

* Drag-and-Drop Interface: Intuitive canvas for arranging visualizations, text blocks, and images.

* Template Management: Save custom report layouts as templates for future use; access a library of pre-defined templates.

* Data Source Integration: Connect to various data sources (databases, APIs, flat files) with secure credentials.

* Advanced Filtering & Grouping: Sophisticated options to segment and aggregate data within reports.

* Scheduling & Automation: Schedule reports for automatic generation and distribution (email, cloud storage) at specified intervals.

* Versioning: Maintain a history of report versions for auditing and comparison.

* Interactive Elements: Include interactive charts within exported PDFs (if supported by viewer) or web-based reports.

  • 1.1.3 Interactive Charts & Graphs

* Purpose: Offer a dedicated environment for deep dive analysis into individual datasets using a wide array of interactive visualization types.

* Features:

* Extensive Chart Library: Support for a comprehensive range of chart types, including:

* Categorical: Bar charts (stacked, grouped), Column charts.

* Trend: Line charts, Area charts.

* Composition: Pie charts, Donut charts, Treemaps, Sunbursts.

* Distribution: Histograms, Box plots, Scatter plots.

* Comparison: Bubble charts, Radar charts.

* Geospatial: Choropleth maps, Point maps (with appropriate data).

* Relational: Network graphs (basic).

* Tabular: Data tables with conditional formatting.

* Dynamic Filtering: Apply filters directly within the chart view, with immediate updates.

* Zoom & Pan: Interactive controls for exploring specific data ranges.

* Tooltips: On-hover information display for data points, providing detailed context.

* Data Highlighting: Ability to highlight specific data series or points for comparison.

* Annotation Tools: Add notes or callouts directly on charts to highlight insights.

* Data Export: Export underlying data for any visualization.

  • 1.1.4 Data Explorer & Table View

* Purpose: Provide a robust interface for raw data inspection, cleaning, and preparation before visualization.

* Features:

* Filterable & Sortable Columns: Easily filter, sort, and search data within the table.

* Pagination & Infinite Scroll: Efficiently handle large datasets.

* Column Customization: Hide/show columns, reorder columns, rename headers.

* Conditional Formatting: Apply visual rules to highlight specific data points (e.g., values above/below a threshold).

* Basic Data Transformation: Simple operations like data type conversion, aggregation (sum, average, count), and calculated fields.

* Data Export: Export filtered or raw data to CSV, XLSX.

* Metadata View: Display information about each column (data type, unique values, missing values).

  • 1.1.5 Settings & Administration

* Purpose: Manage user accounts, data sources, system configurations, and security settings.

* Features:

* User Management: Create, edit, and delete user accounts; assign roles (Admin, Editor, Viewer).

* Role-Based Access Control (RBAC): Granular permissions for accessing dashboards, reports, and data sources.

* Data Source Configuration: Add, manage, and test connections to various data sources (e.g., SQL databases, NoSQL databases, REST APIs, cloud storage).

* Branding & Customization: Upload company logo, define primary color scheme for the suite interface.

* Audit Logs: Track user activities and system changes for security and compliance.

* API Key Management: Generate and manage API keys for external integrations.

1.2 General Features & Capabilities

  • 1.2.1 Responsive Design: The suite will be fully responsive, adapting seamlessly to various screen sizes (desktop, tablet, mobile) to ensure accessibility and usability across devices.
  • 1.2.2 Data Connectivity: Support for a wide range of data connectors, including direct database connections (SQL, PostgreSQL, MySQL), cloud data warehouses (Snowflake, BigQuery, Redshift), REST APIs, and file uploads (CSV, Excel, JSON).
  • 1.2.3 Real-time / Near Real-time Updates: Option for dashboards and reports to refresh data automatically at configurable intervals.
  • 1.2.4 Collaboration & Sharing: Robust mechanisms for sharing dashboards and reports securely, with detailed permission levels.
  • 1.2.5 Customization & Personalization: Empower users to tailor their experience, from dashboard layouts to default report settings.
  • 1.2.6 Security: Industry-standard security protocols, including data encryption (at rest and in transit), authentication (OAuth 2.0, SAML), and robust authorization.
  • 1.2.7 Performance Optimization: Efficient data querying, caching mechanisms, and optimized rendering for large datasets to ensure a smooth user experience.
  • 1.2.8 Accessibility: Adherence to WCAG 2.1 AA standards, including keyboard navigation, screen reader compatibility, and sufficient color contrast.

2. Wireframe Descriptions

Below are descriptions for key wireframes, outlining the layout and primary interactive elements for critical screens within the Data Visualization Suite.

2.1 Main Dashboard Screen

  • Layout:

* Top Header (Fixed):

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

* Center: Search bar (for dashboards, reports, data sources).

* Right: User Profile (avatar, name, dropdown for settings, logout), Notifications icon, "Create New" button (dashboard, report).

* Left Navigation Sidebar (Collapsible):

* Icons and text labels for primary modules: "Dashboards", "Reports", "Data Explorer", "Data Sources", "Settings".

* Expand/Collapse toggle.

* Main Content Area:

* Dashboard Title & Description: Prominently displayed.

* Global Filters Bar (Top): Date range picker, dropdowns for key dimensions (e.g., Region, Product Category). "Apply" / "Reset" buttons.

* Dashboard Widgets Grid:

* A flexible grid layout where widgets are arranged. Each widget is a card with a title, a visualization (chart/table/KPI), and a small set of actions (e.g., "Edit," "Export," "Refresh," "Maximize").

* Widgets are resizable and draggable.

* "Add Widget" Button: A floating action button or a clear button within the grid to add new visualizations.

  • Interactive Elements:

* Clicking on a widget title or an element within a chart can trigger a drill-down.

* Global filters update all relevant widgets dynamically.

* Drag-and-drop functionality for rearranging widgets.

* Hovering over chart elements displays tooltips.

2.2 Report Builder Screen

  • Layout:

* Top Header (Fixed): Similar to Dashboard header, but with "Report Title" editable field, "Save," "Preview," "Schedule," "Export" buttons.

* Left Panel (Collapsible - "Components / Data Fields"):

* Components Tab: List of available report elements (Chart, Table, Text Block, Image, Page Break). Drag-and-droppable onto the canvas.

* Data Fields Tab: Tree view or list of available data fields from the selected data source, categorized by dimension/measure. Drag-and-droppable onto components or directly onto canvas for quick visualization.

* Central Canvas:

* A multi-page, scrollable area representing the report layout.

* Each page has a dotted border to indicate print/export boundaries.

* Elements (charts, tables, text) can be dragged, dropped, resized, and moved within the canvas.

* Context menu on right-click for elements (e.g., "Edit Data," "Duplicate," "Delete").

* Right Panel (Collapsible - "Properties"):

* Contextual panel that changes based on the selected element on the canvas.

* Report Properties: (When no element is selected) Report name, description, page size, orientation, header/footer settings.

* Element Properties: (When an element is selected) Chart type, data mapping (axis, series), color palette, title, legend position, filter settings, text formatting, image source.

  • Interactive Elements:

* Drag-and-drop components and data fields onto the canvas.

* Live preview of chart changes as properties are adjusted.

* Page navigation controls if the report has multiple pages.

2.3 Chart Detail View (Interactive Chart Explorer)

  • Layout:

* Top Header: Breadcrumbs (e.g., Dashboard > Chart Name), Chart Title, "Edit," "Save as New," "Export Data," "Export Image" buttons.

* Left Panel (Collapsible - "Filters & Dimensions"):

* Global Filters: Date range, dropdowns, multi-select checkboxes relevant to the dataset.

* Dimensions & Measures: List of available data fields, allowing users to quickly swap fields mapped to axes or color.

* Central Chart Area:

* The main interactive visualization.

* Zoom/Pan controls (if applicable to chart type).

* Legend.

* Toggle for full-screen view.

* Bottom Panel (Collapsible - "Underlying Data"):

* A data table displaying the raw data points used to generate the current chart, respecting all applied filters.

* Filterable and sortable columns.

* Export options for this specific table.

  • Interactive Elements:

* Applying filters in the left panel updates the chart and underlying data table instantly.

* Clicking on data points in the chart displays detailed tooltips.

* Brush-and-link functionality where selecting a range in one part of the chart filters other parts (e.g., selecting a time range on a line chart updates a bar chart below).


3. Color Palettes

A well-defined color palette ensures visual consistency, accessibility, and effective data communication.

3.1 Primary Brand & UI Colors

  • Primary Blue: #007bff (or equivalent brand blue) - For primary actions, prominent buttons, active states, main navigation highlights.
  • Secondary Gray: #6c757d - For secondary actions, subtle borders, inactive states.
  • Accent Teal/Green: #20c997 - For positive indicators, success messages, or a distinct accent on interactive elements.
  • Text Dark Gray: #343a40 - For primary text, ensuring high contrast.
  • Text Light Gray: #6f7a85 - For secondary text, descriptions, subtle labels.
  • Background White: #FFFFFF - Main content background.
  • Background Light Gray: #f8f9fa - For alternate section backgrounds, sidebars, card backgrounds.

3.2 Data Visualization Palettes

  • Categorical Palette (for distinct categories):

* A set of 6-10 distinct, perceptually uniform colors.

* Example set:

* #1f77b4 (Blue)

* #ff7f0e (Orange)

* #2ca02c (Green)

* #d62728 (Red)

* #9467bd (Purple)

* #8c564b (Brown)

* #e377c2 (Pink)

* #7f7f7f (Gray)

* #bcbd22 (Olive)

* #17becf (Cyan)

* Considerations: Ensure sufficient contrast between adjacent colors, even for colorblind users (test with tools like Colorbrewer 2.0 or Coblis).

  • Sequential Palette (for ordered data, e.g., intensity):

* Gradient from light to dark (or vice versa) of a single hue.

* Example: Blues (e.g., #deebf7 -> #9ecae1 -> #3182bd) or Greens.

  • Diverging Palette (for data with a critical midpoint, e.g., deviation from zero):

*

gemini Output

This document outlines the finalized design assets for the Data Visualization Suite, encompassing detailed design specifications, wireframe descriptions for key views, a comprehensive color palette, and critical User Experience (UX) recommendations. This deliverable serves as the foundational blueprint for the visual and interactive design, ensuring a professional, intuitive, and highly functional product.


Finalized Design Assets: Data Visualization Suite

1. Introduction

This deliverable provides the comprehensive design specifications for the Data Visualization Suite, focusing on clarity, consistency, and an exceptional user experience. Our goal is to create a powerful yet intuitive platform that empowers users to transform complex data into actionable insights through stunning and interactive visualizations.

2. Design Principles & Philosophy

The design of the Data Visualization Suite is guided by the following core principles:

  • Clarity & Simplicity: Prioritize readability and immediate understanding of data. Eliminate visual clutter.
  • Consistency: Maintain a uniform visual language across all components, layouts, and interactions for predictable user behavior.
  • Intuition & Discoverability: Design interfaces that are easy to learn and navigate, allowing users to effortlessly find features and explore data.
  • Accessibility: Ensure the suite is usable by individuals with diverse needs, adhering to WCAG 2.1 guidelines where applicable.
  • Modernity & Professionalism: Employ a clean, contemporary aesthetic that instills trust and reflects the sophistication of the underlying technology.
  • Interactivity & Engagement: Provide dynamic elements that encourage exploration and deeper analysis of data.

3. Detailed Design Specifications

3.1. Layout and Grid System

  • Responsive Grid: Utilizes a 12-column flexible grid system for consistent spacing and alignment across all screen sizes.

* Gutters: 24px between columns.

* Margins: 32px on desktop, 16px on mobile.

  • Breakpoints:

* Mobile: < 768px

* Tablet: 768px - 1023px

* Desktop: > 1024px

  • Spacing System: A modular 8px baseline grid is used for all vertical and horizontal spacing (e.g., 8px, 16px, 24px, 32px, 48px, etc.) to maintain visual harmony.
  • Dashboard Layouts:

* Fixed Header/Sidebar: A persistent top navigation bar (64px height) and an optional collapsible left sidebar (240px width expanded, 64px collapsed) provide primary navigation.

* Content Area: Dynamic grid-based layout for dashboard widgets and detailed views, supporting drag-and-drop customization and resizing.

3.2. Typography

  • Primary Font (UI & Body Text): Inter (Sans-serif)

* Rationale: Modern, highly readable, excellent legibility across various sizes and weights, ideal for data-dense interfaces.

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

  • Secondary Font (Headings & Titles): Montserrat (Sans-serif)

* Rationale: Strong, geometric, and impactful, providing good contrast for headings while maintaining a professional look.

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

  • Font Sizes:

* H1 (Page Title): Montserrat Semi-bold 32px

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

* H3 (Card Title): Inter Semi-bold 18px

* Body Text (Default): Inter Regular 16px

* Labels/Small Text: Inter Regular 14px

* Captions/Metadata: Inter Regular 12px

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

3.3. Iconography

  • Style: Line-based, vector icons with a consistent stroke weight (2px) and rounded corners.
  • Library: Font Awesome Pro or a custom-designed set for domain-specific icons.
  • Size: Default 20x20px, scalable for different contexts (e.g., 16x16px for inline, 24x24px for prominent actions).
  • Color: Inherits text color by default, with specific colors for interactive states or status indicators.

3.4. Component Specifications

  • Navigation Elements:

* Sidebar: Active item highlighted with a solid background color (Primary Blue 600) and white text/icon. Inactive items are text/icon in Primary Gray 700 on a transparent background. Hover state shows a subtle background change (Primary Gray 100).

* Top Bar: Contains branding, user profile, notifications, and global search. Icons are Primary Gray 700.

  • Buttons:

* Primary: Background: Primary Blue 600, Text: White. Hover: Primary Blue 700. Active: Primary Blue 800.

* Secondary (Outline): Border: Primary Blue 600, Text: Primary Blue 600. Background: Transparent. Hover: Background Primary Blue 100.

* Tertiary (Text Only): Text: Primary Blue 600. Hover: Underline or slight background change.

* Disabled: Background: Primary Gray 300, Text: Primary Gray 500.

* Size: Standard (40px height), Small (32px height). Border-radius: 4px.

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

* Default: Border: Primary Gray 300, Background: White, Text: Primary Gray 900.

* Focus: Border: Primary Blue 500, subtle shadow.

* Error: Border: Status Red 500.

* Placeholder: Primary Gray 500. Border-radius: 4px.

  • Cards/Widgets:

* Background: White.

* Border: Subtle 1px Primary Gray 200 border, or a soft shadow (box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.05)).

* Padding: 24px internal padding.

* Header: Inter Semi-bold 18px, Primary Gray 900.

  • Tables:

* Header: Primary Gray 100 background, Inter Semi-bold 14px, Primary Gray 700 text.

* Rows: Alternating light background (Primary Gray 50) for readability. Inter Regular 14px, Primary Gray 900 text.

* Hover: Row background Primary Blue 50.

* Borders: 1px Primary Gray 200 for cell dividers.

  • Tooltips & Modals:

* Tooltips: Small, dark overlay (Primary Gray 900) with white text, rounded corners (4px). Appears on hover.

* Modals: Centered overlay with a white background, soft shadow, and a clear close button. Headers use Montserrat Semi-bold 24px.

  • Loading Indicators: Subtle spinners (Primary Blue 500) or skeleton screens for content loading.

4. Wireframe Descriptions (Key Views)

4.1. Main Dashboard View

  • Layout: Fixed top navigation bar, collapsible left sidebar for primary module navigation (e.g., Dashboards, Reports, Data Sources, Settings).
  • Header: Dashboard title, global search bar, "Add New Widget" button, "Share" button, "Export" button, user profile/settings.
  • Content Area:

* Greeting/Overview: Personalized welcome message, quick summary of unread notifications or urgent alerts.

* Widget Grid: A flexible, customizable grid of data visualization widgets (e.g., KPI cards, line charts, bar charts, pie charts, geographic maps).

* Interactivity: Each widget has a header with a title, last updated timestamp, and a context menu (ellipsis icon) for options like "Edit," "Duplicate," "Refresh," "Delete," "View Details." Widgets are draggable and resizable.

* Filters: Global filters (date range, specific dimensions) applied to all widgets, located at the top of the content area.

  • Mobile View: Widgets stack vertically, with a responsive layout ensuring readability. Primary navigation accessed via a hamburger menu.

4.2. Detailed Report/Analysis View

  • Layout: Similar to Dashboard, with a focus on a single, comprehensive report or analysis.
  • Header: Report title, breadcrumbs for navigation, "Edit Report" button, "Export" button, "Schedule Refresh" button.
  • Sidebar (Contextual): On the left, a contextual sidebar for report-specific filters, dimensions, measures, and drill-down options. This allows users to dynamically slice and dice the data.
  • Main Content Area:

* Primary Visualization: A large, interactive chart (e.g., multi-series line chart, complex scatter plot, pivot table).

* Supporting Visualizations/Tables: Smaller, related charts or data tables providing additional context or granular detail.

* Annotations/Insights: A dedicated section for automated insights or user-added annotations to explain trends or anomalies.

* Drill-down: Clicking on data points in the primary visualization reveals deeper levels of data or opens a modal with specific record details.

  • Interactivity: Zooming, panning, brushing, and linking between charts are supported.

4.3. Data Source Management View

  • Layout: Standard app layout with a list-detail pattern.
  • Header: "Data Sources" title, "Add New Data Source" button, search bar for existing sources.
  • Left Panel: A scrollable list of connected data sources. Each item shows the source name, type (e.g., "SQL Database," "CSV," "API"), and connection status (e.g., "Connected," "Error," "Pending").
  • Right Panel (Detail View):

* Data Source Details: Name, type, connection string/details (masked for security), last refresh, created by.

* Connection Status: Clear visual indicator (icon + text) for connection health.

* Actions: "Test Connection," "Edit Connection," "Refresh Schema," "Delete Data Source."

* Associated Datasets/Tables: A list of tables or datasets available from this source, with an option to "Prepare Dataset" (leading to a data preparation/transformation interface).

* Usage: List of dashboards/reports using this data source.

  • Add New Data Source Modal/Wizard: A multi-step process guiding users through selecting a source type, entering credentials, and testing the connection.

4.4. User Settings/Profile View

  • Layout: Standard app layout with a tabbed or accordion interface for different setting categories.
  • Header: "Settings" title.
  • Left Panel (Navigation): Tabs or links for "Profile," "Account," "Notifications," "Security," "Preferences," "Integrations."
  • Right Panel (Content):

* Profile: User's name, email, profile picture, password change, contact info.

* Account: Subscription details, billing information, usage stats.

* Notifications: Toggle for email, in-app notifications, frequency settings.

* Security: Two-factor authentication setup, active sessions, API keys management.

* Preferences: Language, theme (light/dark mode), default dashboard, time zone.

* Integrations: List of connected third-party services.

  • Actions: "Save Changes" button, "Cancel" button.

5. Color Palettes

The color palette is designed for clarity, accessibility, and visual appeal, ensuring data stands out while the UI remains unobtrusive.

5.1. Primary UI Palette (Grayscale & Core Action)

  • Primary Blue (Action/Highlight):

* #007BFF (Blue 500) - Default interactive elements, primary buttons

* #0056B3 (Blue 700) - Hover/Active states

* #EBF5FF (Blue 50) - Lightest background for selected states

  • Primary Gray (Text & Backgrounds):

* #FFFFFF (White) - Main background, card backgrounds

* #F8F9FA (Gray 50) - Secondary background, table row stripes

* #E9ECEF (Gray 100) - Borders, dividers

* #DEE2E6 (Gray 200) - Input borders, subtle separators

* #ADB5BD (Gray 500) - Placeholder text, disabled elements

* #6C757D (Gray 700) - Secondary text, icons

* #343A40 (Gray 900) - Primary text, headings

5.2. Accent Palette (Interactive Highlights)

  • Accent Green: #28A745 (Success messages, positive indicators)
  • Accent Yellow: #FFC107 (Warning messages, neutral alerts)
  • Accent Red: #DC3545 (Error messages, critical alerts)
  • Accent Purple: #6F42C1 (Specific category highlight, secondary interactive element)

5.3. Data Visualization Palette

Designed to be distinct, color-blind friendly, and aesthetically pleasing.

  • Categorical Palette (for distinct categories):

* #4285F4 (Google Blue)

* #EA4335 (Google Red)

* #FBBC05 (Google Yellow)

* #34A853 (Google Green)

* #9C27B0 (Deep Purple)

* `

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
"); var hasSrcMain=Object.keys(extracted).some(function(k){return k.indexOf("src/main")>=0;}); if(!hasSrcMain) zip.file(folder+"src/main."+ext,"import React from 'react' import ReactDOM from 'react-dom/client' import App from './App' import './index.css' ReactDOM.createRoot(document.getElementById('root')!).render( ) "); var hasSrcApp=Object.keys(extracted).some(function(k){return k==="src/App."+ext||k==="App."+ext;}); if(!hasSrcApp) zip.file(folder+"src/App."+ext,"import React from 'react' import './App.css' function App(){ return(

"+slugTitle(pn)+"

Built with PantheraHive BOS

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

"+slugTitle(pn)+"

Built with PantheraHive BOS

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

"+title+"

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

$1

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

$1

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

$1

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

"); h+="

"+hc+"

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