Visual HTML/CSS/JavaScript Designer desarrollado con Electron y Node.js.
Replica exactamente la funcionalidad de BCODE RAD (Free Pascal/Lazarus) en una arquitectura moderna con Electron 33.x y Node.js 22.x.
- ✅ Editor Visual con drag & drop de componentes Bootstrap
- ✅ Editor de Código Monaco Editor con syntax highlighting
- ✅ Sistema de Plugins JavaScript extensible (6 plugins activos)
- ✅ Sincronización Bidireccional entre vista visual y código
- ✅ Undo/Redo ilimitado (sin límite de 1023 estados)
- ✅ Catálogo de Componentes Bootstrap 3/4 predefinidos
- ✅ Sin límites hardcoded - Arrays dinámicos para componentes y plugins
- ✅ Arquitectura Modular - Separación clara de responsabilidades
- Node.js v18 o superior (recomendado v22.x)
- npm v9 o superior
cd bcode-electron
npm installnpm startO con DevTools abierto:
npm run devnpm run build:winnpm run build:macnpm run build:linuxLos ejecutables se generarán en el directorio dist/.
- Menú: Archivo → Nuevo (o
Ctrl+N) - Se crea un proyecto HTML5 con Bootstrap precargado
- Selecciona un componente de la Paleta (izquierda)
- Haz clic en el Composer Visual donde deseas insertarlo
- El componente se añadirá automáticamente
- Presiona F5 o click en "Vista" para alternar entre Visual/Código
- Edita HTML en el Editor Monaco
- Presiona F6 o click en "Sincronizar" para actualizar la vista visual
- Menú: Archivo → Guardar (o
Ctrl+S) - Guardar Como: Archivo → Guardar Como (o
Ctrl+Shift+S)
| Atajo | Acción |
|---|---|
Ctrl+N |
Nuevo proyecto |
Ctrl+O |
Abrir archivo |
Ctrl+S |
Guardar |
Ctrl+Shift+S |
Guardar como |
Ctrl+Z |
Deshacer |
Ctrl+Shift+Z |
Rehacer |
F5 |
Alternar Vista Visual/Código |
F6 |
Sincronizar Código → Visual |
F7 |
Sincronizar Visual → Código |
bcode-electron/
├── main.js # Proceso principal Electron
├── preload.js # Capa de seguridad IPC
├── package.json # Configuración npm
│
├── renderer/
│ ├── index.html # UI principal
│ ├── styles/
│ │ └── main.css # Estilos de la aplicación
│ └── scripts/
│ ├── renderer.js # Orquestador principal
│ ├── PluginManager.js # Gestión de plugins (TVisualComposer)
│ ├── ComponentManager.js # Gestión de componentes (uCoreWebComps)
│ └── SyncManager.js # Sincronización + Undo/Redo (uComposer)
│
├── plugins/
│ ├── jquery-3.5.1.min.js # jQuery 3.5.1
│ ├── editorOnClick.js # Selección desde editor
│ ├── drp.js # Drag & drop + selección
│ ├── resizerPlugin-1.0.js # Redimensionamiento
│ ├── loadBootstrap3.js # Carga Bootstrap 3
│ └── selectOnComposer.js # Doble clic → HTTP POST
│
├── ini/
│ ├── plugins.ini # Configuración de plugins
│ └── wcomp.ini # Catálogo de componentes
│
└── litedesigner/components/ # Templates HTML de componentes
├── basic/ # Container, Row, Column
├── navbars/ # Barras de navegación
├── cards/ # Tarjetas
└── buttons/ # Botones
- jQuery 3.5.1 - Biblioteca base
- editorOnClick.js - Selección de elementos desde el editor
- drp.js - Drag & drop + sistema de selección visual
- resizerPlugin-1.0.js - Redimensionamiento de componentes
- loadBootstrap3.js - Carga dinámica de Bootstrap 3
- selectOnComposer.js - Doble clic → envío al editor
[p1]
plugin=nombre-plugin.js
beginfunc=funcionInicio()
endfunc=funcionFin('$CompID')
timerfunc=
interval=0
enable=1- plugin: Nombre del archivo JavaScript
- beginfunc: Función a ejecutar al iniciar el composer
- endfunc: Función a ejecutar después de insertar componente
- timerfunc: Función a ejecutar periódicamente
- interval: Intervalo del timer (ms)
- enable: 1 = habilitado, 0 = deshabilitado
- Crea archivo JavaScript en
plugins/ - Edita
ini/plugins.iniy añade sección:
[p7]
plugin=mi-plugin.js
beginfunc=miPluginStart()
endfunc=miPluginEnd('$CompID')
timerfunc=
interval=0
enable=1- Reinicia la aplicación
- Crea archivo HTML en
litedesigner/components/categoria/
<div class="uwc mi-componente" id="ucompid">
<!-- Tu HTML aquí -->
</div>Importante: Usa id="ucompid" como placeholder, se reemplazará automáticamente.
- Edita
ini/wcomp.ini:
[mi_componente]
name=Mi Componente
tab=MiCategoria
path=litedesigner/components/categoria/mi_componente.html- Reinicia la aplicación
| Aspecto | BCODE Pascal | BCODE Electron |
|---|---|---|
| Límite de componentes | 101 (array estático) | Ilimitado (array dinámico) |
| Límite de plugins | 1024 (array estático) | Ilimitado (array dinámico) |
| Undo/Redo | 1023 estados | 100 estados (configurable) |
| Editor de código | SynEdit | Monaco Editor |
| Composer visual | TWebkitComposer | iframe con sandbox |
| Plataforma | Windows/Linux | Windows/macOS/Linux |
| Lenguaje | Free Pascal | JavaScript/Node.js |
Replica TVisualComposer de coreplugins.pas
class PluginManager {
loadPlugins() // Carga plugins desde ini/plugins.ini
runBeginFuncQueue() // Ejecuta beginfunc de plugins
runEndFuncQueue(compID) // Ejecuta endfunc con ID de componente
setupTimers() // Configura timerfunc periódicos
}Replica uCoreWebComps de corewebcomps.pas
class ComponentManager {
loadCatalog() // Carga catálogo desde ini/wcomp.ini
createComponent(name, html) // Crea nuevo componente con ID único
generateId() // Genera ID único (Date.now)
}Replica uComposer de utypes.pas
class SyncManager {
saveUndo() // Guarda estado actual
undo() // Deshace último cambio
redo() // Rehace cambio deshecho
syncCodeToVisual() // Sincroniza código → visual
syncVisualToCode() // Sincroniza visual → código
}rm -rf node_modules package-lock.json
npm install- Presiona
F6para forzar sincronización - Verifica la consola del navegador (DevTools)
- Verifica que jQuery esté cargado en el composer
- Comprueba la consola para errores de plugins
- Asegúrate de estar en vista visual (F5)
Verifica versiones:
node -v # Debe ser v18+
npm -v # Debe ser v9+GPL2 License
Benjamin Sanchez Cardenas | bsanchezcardenas@gmail.com Desarrollado como réplica moderna de BCODE RAD (Free Pascal/Lazarus).
Versión: 1.0.0
Electron: 33.0.2
Node.js: 22.x
Fecha: Noviembre 2025