Descripción
Integración completa de la biblioteca de stencils profesional de draw.io en el Map Editor (página Maps). Sustituye el menú desplegable de 12 formas básicas por un panel lateral estilo draw.io con 185 formas especializadas en DCIM (equipos de red, racks, componentes eléctricos, mobiliario de plano).
Características principales
- Panel Shapes lateral derecho (
StencilPanel.js): búsqueda transversal, secciones colapsables por set (Basic + Network/Floorplan/Cabinets/Racks genéricos/Racks APC), arrastrar-y-soltar al lienzo, clic para insertar al centro. Estado abierto/cerrado persistido en localStorage. - 185 formas profesionales convertidas offline desde draw.io:
- Network (57): switches, routers, firewalls, UPS, servidores, etc.
- Floorplan (46): paredes, puertas, escaleras, mobiliario (ideal para planos de Salas).
- Cabinets eléctricos (53): componentes de cuadro, breakers, contactores.
- Racks 19” genéricos (26): desde 1U hasta 48U, patch panels, servidores.
- Racks APC (3): modelos específicos de APC.
- Renderer SVG avanzado (
StencilRenderer.js):- Rasterización con supersampling 3x para zoom limpio.
- Tematizado automático al vuelo:
currentColor→ color de trazo del usuario, blancos draw.io → fondo oscuro del lienzo. - Etiqueta editable bajo la forma (doble clic → renombrar, persiste en
data.labelvía PUT parcial de anotaciones, cero cambios de backend).
- Compatibilidad total hacia atrás: el parser vectorial legacy (5 primitivas) sigue siendo la opción para leer las formas antiguas guardadas en BD.
Implementación
Componentes principales
-
Conversor mxGraph → SVG (
scripts/stencils/convert_mxgraph_stencils.py):- Descarga los 5 sets de stencils XML desde el repo
jgraph/drawio(fijado al commit43c1dfa7, Apache 2.0). - Interpreta el mini-lenguaje de dibujo mxGraph (path, rect, roundrect, ellipse, estilos, comandos de pintado).
- Emite catálogo JSON estático con carga perezosa (
static/stencils/index.json+<set_id>.json). - QA visual:
scripts/stencils/preview.htmlrenderiza todas las formas con tematizado dark.
- Descarga los 5 sets de stencils XML desde el repo
-
StencilRenderer.js:
- Instancia
Konva.Imagedesde el SVG completo del stencil. - Aplica supersampling 3x para mantener claridad en zoom.
- Mapea colores: stroke draw.io →
currentColor(controlado por el usuario), fill blanco → fondo oscuro del lienzo. - Maneja etiqueta editable mediante doble clic (persiste en
data.label, PUT parcial de anotaciones).
- Instancia
-
StencilPanel.js:
- Panel lateral derecho dockable (hereda
.sidebar-paneldeeditor.css). - Búsqueda transversal sobre todas las 185+ formas.
- Secciones colapsables por set (Basic + 5 sets de catálogo).
- Drag&drop al lienzo (Konva drag events) o clic = insertar al centro.
- Panel lateral derecho dockable (hereda
-
Fix de datos:
AnnotationsRenderer.js- El endpoint
/annotationsdevolvíadatacomo string JSON (serialización en el backend). - El modo Sala ya lo parseaba en su carga; el modo mapa no, causando fallos silenciosos cuando los renderers leían campos (
data.render,data.svg). - Normalización en
AnnotationsRenderer.renderAnnotation: siannot.dataes string, parsearlo; si falla, defaultear a{}.
- El endpoint
Cambios de código
- Nuevos archivos:
scripts/stencils/convert_mxgraph_stencils.py,scripts/stencils/preview.html, archivos JSON generados enstatic/stencils/. - Modificados:
static/js/blueprints/helpers/StencilRenderer.js(nuevo),static/js/blueprints/helpers/StencilPanel.js(nuevo),static/css/pages/shapes-library.css(refactorizado),static/js/blueprints/helpers/AnnotationsRenderer.js(fix data.string),static/js/blueprints/drawing/tools/SelectTool.js(export con render + label). - Removidos:
static/js/blueprints/helpers/ShapesLibraryHelper.js(deprecated), CSS dead code de#drawio-panel, bloque de restore enmap_editor.js,templates/blueprint_editor.html.part(huérfano).
Internacionalización
5 strings nuevos traducidos (django.po + compilemessages):
SHAPES→ “FORMAS”Search shapes→ “Buscar formas”Search shapes...→ “Buscar formas…”Shapes→ “Formas”Toggle Shapes Panel→ “Mostrar/ocultar panel de formas”
Licencia
Draw.io stencil libraries (Apache-2.0, commit 43c1dfa7 del repo jgraph/drawio) registradas en core/licenses_data/frontend.py. El LICENSE extra de stencils/ solo restringe productos Atlassian (N/A en nuestro caso, uso comercial permitido).
Verificación E2E
Local (stack Docker dev):
- ✅ Insertar por clic y por drag&drop.
- ✅ Renombrar con doble clic en etiqueta.
- ✅ Persistencia en BD y re-render tras recarga.
- ✅ Búsqueda transversal (“ups” → Network + Racks APC).
- ⚠️ Límites honestos:
- Cables anclan al bounding box de la forma; la etiqueta lo agranda ~10px hacia abajo → ancla queda un pelín baja. (Pulido de F4)
- Rellenos oscuros de algunos racks quedan apagados sobre lienzo oscuro. (Pulido de F4)
Véase también
- [[concept—blueprints—map-editor]]
- [[concept—saas—ux]]
- [[concept—core—observability]]