Custom App Builder
Run ID: 69ccad8b3e7fb09ff16a40b62026-04-01Development
PantheraHive BOS
BOS Dashboard

Step 1 of 3: Code Generation for Custom App Builder

This deliverable provides the foundational Flutter application code for a "Custom App Builder" prototype. The goal of this step is to generate a functional Flutter app that itself acts as a very basic app builder. This prototype demonstrates how a user might configure an application's core properties (name, primary color, screens) through a user interface, and then preview a simulated version of that configured app.


1. Project Overview: The "App Configurator" Prototype

The generated Flutter application is named "App Configurator". It serves as a proof-of-concept for the "Custom App Builder" workflow. Instead of generating another app, this app is the builder. It allows a user to define basic characteristics of an imaginary app and then view a simple simulation of that app based on the defined properties.

Core Functionality:

2. Key Features of the Generated App

The "App Configurator" prototype includes the following features:

* Ability to add new screens to the configured app.

* Each screen can have a custom title.

* Ability to remove existing screens.

3. Code Structure and Explanation

The Flutter project is structured into several files to ensure modularity and readability.


4. Generated Flutter Code

Below is the complete, clean, well-commented, and production-ready Flutter code for the "App Configurator" prototype.

4.1. main.dart

text • 46 chars
#### 4.3. `screens/app_builder_screen.dart`

Sandboxed live preview

dart

import 'package:flutter/material.dart';

import 'package:app_configurator/models/app_config.dart';

/// A screen that simulates a custom app based on the provided AppConfig.

class AppPreviewScreen extends StatefulWidget {

final AppConfig config

projectmanager Output

Workflow Status: Custom App Builder - Step 2 of 3 Complete

Step Executed: projectmanager → create_project

We are pleased to inform you that Step 2 of your "Custom App Builder" workflow, focused on project creation and foundational setup, has been successfully completed. Your new Flutter application project has been initialized and configured, establishing a robust and scalable base for development.


Project Creation Confirmation

Your custom application project has been successfully generated using the latest stable version of Flutter. This foundational setup ensures that your application is built on a modern, high-performance, and cross-platform framework.

  • Generated Project Name: panthera_hive_custom_app

Note: This name follows standard Flutter project naming conventions (lowercase with underscores).*

  • Core Technologies:

* Framework: Flutter

* Language: Dart

* Version Control: Git (initialized)


Initial Project Structure & Setup

We have meticulously configured the initial project environment to provide a clean, organized, and ready-to-develop structure. This includes essential directories, configuration files, and initial dependencies.

1. Core Directory Structure

The following key directories and files have been established:

  • panthera_hive_custom_app/

* lib/: Contains the main Dart source code for your application.

* main.dart: The entry point of your Flutter application, currently set up with a basic "Hello, World!" or Flutter starter app.

* android/: Android-specific project files for native integration and build processes.

* ios/: iOS-specific project files for native integration and build processes.

* web/: Web-specific files for building your application for browsers.

* test/: Directory for unit and widget tests.

* pubspec.yaml: Project configuration file, managing dependencies, assets, and metadata.

* pubspec.lock: Generated by Pub, locking specific versions of dependencies.

* .gitignore: Configured to exclude generated files and directories from version control.

* README.md: Initial project documentation.

* analysis_options.yaml: Dart linter rules for code quality and consistency.

2. Initial Dependencies

The pubspec.yaml file has been populated with the standard and essential Flutter dependencies to get started:

  • flutter:

* sdk: flutter

  • cupertino_icons: ^1.0.2 (for iOS-style icons)
  • dev_dependencies:

* flutter_test:

* sdk: flutter

* flutter_lints: ^2.0.0 (for static analysis and best practices)

3. Platform Configuration

Your project is configured to support multiple platforms out-of-the-box, leveraging Flutter's cross-platform capabilities:

  • Android: Project files are set up for building on Android devices (API 21+).
  • iOS: Project files are configured for building on iOS devices (iOS 11+).
  • Web: Initial web configuration is present, allowing for deployment to web browsers.
  • Desktop (macOS, Windows, Linux): Basic desktop support is enabled and ready for future expansion if required by your application's scope.

4. Version Control Initialization

A Git repository has been initialized within the project directory. This provides a robust system for tracking changes, collaborating, and managing your application's codebase throughout its lifecycle.


What This Means For You

This completed step delivers a fully functional and organized Flutter project shell. You now have:

  • A Solid Foundation: A well-structured project ready for immediate development.
  • Standardized Setup: Adherence to Flutter's best practices for project organization and dependency management.
  • Cross-Platform Readiness: The ability to build and deploy your app across multiple platforms from a single codebase.
  • Version Control: A pre-configured Git repository to ensure code integrity and collaboration.

Next Steps: Step 3 of 3 - Feature Implementation & UI Development

With the project foundation securely in place, the final step will focus on bringing your application to life.

Upcoming Step: appbuilder → build_features

In this crucial phase, our team will proceed with:

  • Developing Core Features: Implementing the specific functionalities and business logic based on your initial description.
  • Designing User Interface (UI): Crafting the visual elements, screens, and user experience (UX) to align with your brand and user needs.
  • Integrating Services: Connecting to any necessary backend services, APIs, or third-party integrations.
  • Writing Tests: Ensuring the stability and reliability of the application through comprehensive testing.

We are excited to move forward and transform this robust foundation into your complete, custom-built application.

sharper4k Output

As part of your "Custom App Builder" workflow, we have successfully completed Step 3 of 3: sharper4k → generate_image. This crucial step focuses on generating a high-fidelity visual asset designed to serve as a core branding element or a key visual component for your custom application.

Our advanced sharper4k image generation engine has processed the accumulated context from your app description and previous workflow steps to produce a visually stunning and professionally aligned image.


Workflow Step Completion: Image Generation (sharper4k)

Purpose of This Step

The sharper4k → generate_image step is designed to materialize a key visual asset for your custom application. This image is not merely decorative; it serves as a foundational element for your app's brand identity, user interface, or marketing materials. By leveraging state-of-the-art AI image generation, we aim to deliver a visual that is not only aesthetically pleasing but also perfectly aligned with the essence and functionality of your envisioned app, rendered with exceptional clarity and detail suitable for 4K displays and beyond.

Introduction to the Image Generation Process

Utilizing our proprietary sharper4k engine, we've synthesized complex design principles, color theory, and abstract representations of "customization," "building," and "innovation" to create a unique visual. This process ensures the generated image is optimized for impact, scalability, and adherence to modern design standards, providing a professional and memorable visual identity.

Generated Visual Asset Details

Below is a detailed description of the high-fidelity image generated for your custom app:

Image Title: "Modular Innovation Core"

Detailed Image Description:

The generated image is an abstract, minimalist, and highly stylized visual, designed to embody the principles of customizability, modularity, and advanced technology.

  • Central Motif: At its core, the image features a dynamic interplay of geometric shapes, specifically, a partially deconstructed, glowing cube or prism. Several constituent elements of this form are subtly separating and rejoining, creating a sense of fluid assembly and limitless possibilities. This motion implicitly forms an abstract 'C' (for Custom) or an 'A' (for App) within its structure, reinforcing the app-building theme.
  • Color Palette: The primary color palette transitions smoothly from a deep, professional sapphire blue at the base of the motif, gradually fading into a vibrant, electric cyan towards its upper segments and highlights. This gradient symbolizes the blend of stability with innovation.
  • Lighting and Texture: The geometric edges of the shapes possess a subtle, reflective metallic sheen, catching ambient light to create a sense of depth and premium quality. A soft, internal glow emanates from the gaps where the elements are separating, suggesting internal power and sophistication.
  • Background: The central motif is set against a soft, diffused gradient background that shifts from a dark charcoal grey at the periphery to an almost pure black directly behind the core element. This dark, understated background ensures the vibrant central visual stands out prominently, enhancing its impact.
  • Overall Aesthetic: The image exudes a modern, sleek, and high-tech aesthetic. It conveys precision, modularity, and the seamless integration of custom components, perfectly aligning with the "Custom App Builder" concept. The rendering emphasizes extreme clarity, crisp lines, and perfect anti-aliasing, ensuring it looks sharp and professional on all high-resolution displays.

Technical Specifications:

  • Resolution: Optimized for ultra-high-definition (UHD) display, suitable for 4K and Retina screens.
  • Format Suitability: Designed to be easily adaptable for various formats (e.g., PNG for transparency, JPG for web, SVG for scalability if vectorization is applied).
  • Scalability: The geometric and minimalist nature ensures excellent scalability from small icons to large marketing banners without loss of quality.

Application and Integration

This "Modular Innovation Core" visual asset is highly versatile and can be integrated into your custom app project in several key ways:

  1. App Icon: Its abstract, memorable, and scalable design makes it an ideal candidate for your app's primary icon across all platforms (iOS, Android, Web).
  2. Splash Screen: The dynamic and engaging nature of the visual is perfect for a captivating splash screen that appears when your app launches.
  3. Branding Element: Use it consistently across your app's UI/UX, marketing materials, website, and social media to establish a strong, cohesive brand identity.
  4. Loading Animations: The deconstructing/rejoining elements could inspire a unique loading animation within the app.
  5. Hero Image: Ideal for the main visual on your app's landing page or promotional content.

Customer Review and Feedback

We encourage you to carefully review this generated visual. Your feedback is invaluable in ensuring this asset perfectly aligns with your vision.

  • Do you feel this image accurately represents the core essence of your custom app?
  • Are the colors, style, and overall aesthetic satisfactory?
  • Do you have any specific modifications or alternative ideas you would like to explore?

Please provide your feedback, and we are ready to make any necessary adjustments or generate further variations to meet your exact requirements.

Next Steps in the Custom App Builder Workflow

Upon your approval of this visual asset, we will proceed to integrate it into the initial design mockups and wireframes for your custom app. This image will serve as a foundational element, guiding subsequent UI/UX design choices and ensuring a consistent and professional aesthetic throughout the entire application development process.


We are excited about the potential of this visual to elevate your custom app's presence and brand identity. We look forward to your insights!

custom_app_builder.txt
Download source file
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);}});}