neogestify-ui-components 2.1.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -1
- package/dist/components/ElementLibraryBuilder/index.d.mts +5 -0
- package/dist/components/ElementLibraryBuilder/index.d.ts +5 -0
- package/dist/components/ElementLibraryBuilder/index.js +689 -0
- package/dist/components/ElementLibraryBuilder/index.js.map +1 -0
- package/dist/components/ElementLibraryBuilder/index.mjs +687 -0
- package/dist/components/ElementLibraryBuilder/index.mjs.map +1 -0
- package/dist/components/VenueMapEditor/index.d.mts +18 -2
- package/dist/components/VenueMapEditor/index.d.ts +18 -2
- package/dist/components/VenueMapEditor/index.js +75 -3
- package/dist/components/VenueMapEditor/index.js.map +1 -1
- package/dist/components/VenueMapEditor/index.mjs +75 -4
- package/dist/components/VenueMapEditor/index.mjs.map +1 -1
- package/dist/index.d.mts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +468 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +467 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/ElementLibraryBuilder/builder.tsx +400 -0
- package/src/components/ElementLibraryBuilder/index.ts +1 -0
- package/src/components/VenueMapEditor/components/ElementNode.tsx +22 -0
- package/src/components/VenueMapEditor/components/PropertiesPanel.tsx +17 -4
- package/src/components/VenueMapEditor/components/Toolbar.tsx +14 -4
- package/src/components/VenueMapEditor/index.ts +2 -0
- package/src/components/VenueMapEditor/types.ts +11 -1
- package/src/components/VenueMapEditor/utils/svgParser.ts +33 -0
- package/src/index.ts +1 -0
package/README.md
CHANGED
|
@@ -584,12 +584,13 @@ Ahora puedes definir cualquier figura SVG usando un path:
|
|
|
584
584
|
|-------|------|-----------|-------------|
|
|
585
585
|
| `id` | `string` | ✓ | Identificador único del tipo. Se usa como key en `onElementTypeClick`. |
|
|
586
586
|
| `label` | `string` | ✓ | Nombre visible en la paleta y en el canvas. |
|
|
587
|
-
| `shape` | `"rect" \| "circle" \| "arrow" \| "path"` | ✓ | Forma del objeto. |
|
|
587
|
+
| `shape` | `"rect" \| "circle" \| "arrow" \| "path" \| "svg"` | ✓ | Forma del objeto. |
|
|
588
588
|
| `defaultWidth` | `number` | ✓ | Ancho inicial al colocar el elemento (unidades de canvas ≈ px a zoom 1×). |
|
|
589
589
|
| `defaultHeight` | `number` | ✓ | Alto inicial. |
|
|
590
590
|
| `color` | `string` | ✓ | Color de relleno (cualquier valor CSS: `#hex`, `rgb()`, `hsl()`, etc.). |
|
|
591
591
|
| `strokeColor` | `string` | ✓ | Color del borde. |
|
|
592
592
|
| `svgPath` | `string` | solo para `shape:"path"` | Atributo `d` de un `<path>` SVG. Se escala automáticamente al bounding box del elemento. |
|
|
593
|
+
| `svgMarkup` | `string` | solo para `shape:"svg"` | Markup SVG completo `<svg>...</svg>`. Se extrae el contenido interno y se escala al bounding box del elemento. Debe incluir `viewBox`. |
|
|
593
594
|
| `viewBox` | `string` | — | Espacio de coordenadas del `svgPath`. Formato: `"minX minY w h"`. Default: `"0 0 100 100"`. |
|
|
594
595
|
| `fillRule` | `"nonzero" \| "evenodd"` | — | Regla de relleno SVG. Usa `"evenodd"` para crear huecos con sub-paths (engranajes, letras, donuts). Default: `"nonzero"`. |
|
|
595
596
|
|
|
@@ -601,6 +602,7 @@ Ahora puedes definir cualquier figura SVG usando un path:
|
|
|
601
602
|
| `circle` | Elipse (círculo si `width === height`) | Mesas redondas, columnas, plantas |
|
|
602
603
|
| `arrow` | Flecha apuntando a la derecha | Entradas, salidas, sentidos de circulación |
|
|
603
604
|
| `path` | Forma SVG personalizada libre | Cualquier figura: estrella, engranaje, piano, logo... |
|
|
605
|
+
| `svg` | SVG completo inline | Cualquier SVG con múltiples elementos, gradientes, etc. |
|
|
604
606
|
|
|
605
607
|
#### Formas personalizadas con `shape: "path"`
|
|
606
608
|
|
|
@@ -641,6 +643,49 @@ El campo `svgPath` acepta el atributo `d` de cualquier `<path>` SVG estándar. E
|
|
|
641
643
|
|
|
642
644
|
> **Hitbox de piso:** para formas personalizadas que no llenan su bounding box (estrellas, logos, etc.), la detección de bordes usa un cuadrado de lado `min(width, height)` centrado en el elemento — esto evita que la figura quede demasiado restringida al área del piso.
|
|
643
645
|
|
|
646
|
+
#### Formas personalizadas con `shape: "svg"`
|
|
647
|
+
|
|
648
|
+
El campo `svgMarkup` acepta un **SVG completo** como string. El sistema extrae el `viewBox` del tag `<svg>` y renderiza los elementos internos escalados al bounding box del elemento. Esto permite usar figuras con múltiples paths, círculos, rectángulos, textos, etc.
|
|
649
|
+
|
|
650
|
+
> **Seguridad:** el markup se sanitiza automáticamente eliminando `<script>`, `on*` event handlers, `javascript:` URIs y tags peligrosos.
|
|
651
|
+
|
|
652
|
+
```json
|
|
653
|
+
{
|
|
654
|
+
"iconos": {
|
|
655
|
+
"name": "Iconos SVG",
|
|
656
|
+
"objects": [
|
|
657
|
+
{
|
|
658
|
+
"id": "CAR",
|
|
659
|
+
"label": "Carro",
|
|
660
|
+
"shape": "svg",
|
|
661
|
+
"svgMarkup": "<svg viewBox=\"0 0 100 100\"><rect x=\"10\" y=\"40\" width=\"80\" height=\"35\" rx=\"5\" fill=\"currentColor\"/><rect x=\"5\" y=\"50\" width=\"90\" height=\"20\" rx=\"3\" fill=\"currentColor\"/><circle cx=\"28\" cy=\"75\" r=\"9\" fill=\"currentColor\"/><circle cx=\"72\" cy=\"75\" r=\"9\" fill=\"currentColor\"/><rect x=\"25\" y=\"44\" width=\"20\" height=\"12\" rx=\"2\" fill=\"white\" opacity=\"0.4\"/><rect x=\"55\" y=\"44\" width=\"20\" height=\"12\" rx=\"2\" fill=\"white\" opacity=\"0.4\"/></svg>",
|
|
662
|
+
"defaultWidth": 80,
|
|
663
|
+
"defaultHeight": 80,
|
|
664
|
+
"color": "#3b82f6",
|
|
665
|
+
"strokeColor": "#1e40af"
|
|
666
|
+
},
|
|
667
|
+
{
|
|
668
|
+
"id": "PEOPLE",
|
|
669
|
+
"label": "Persona",
|
|
670
|
+
"shape": "svg",
|
|
671
|
+
"svgMarkup": "<svg viewBox=\"0 0 100 100\"><circle cx=\"50\" cy=\"25\" r=\"15\"/><path d=\"M30 90 L30 50 Q30 40 40 40 L60 40 Q70 40 70 50 L70 90 M20 60 L80 60\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"6\" stroke-linecap=\"round\"/></svg>",
|
|
672
|
+
"defaultWidth": 50,
|
|
673
|
+
"defaultHeight": 50,
|
|
674
|
+
"color": "#f97316",
|
|
675
|
+
"strokeColor": "#c2410c"
|
|
676
|
+
}
|
|
677
|
+
]
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
**Notas sobre `shape: "svg"`:**
|
|
683
|
+
|
|
684
|
+
- El string `svgMarkup` **debe** ser un `<svg>` válido con atributo `viewBox`.
|
|
685
|
+
- Los atributos `color` y `strokeColor` del `ElementTypeDef` se aplican como `fill` y `stroke` en el `<g>` contenedor. Usa `currentColor` en tu SVG para heredar el color.
|
|
686
|
+
- El `viewBox` se extrae automáticamente del `<svg>` — no necesitas especificarlo por separado.
|
|
687
|
+
- Funciona con cualquier combinación de elementos SVG internos: `<path>`, `<circle>`, `<rect>`, `<g>`, `<line>`, `<polygon>`, etc.
|
|
688
|
+
|
|
644
689
|
#### Varios grupos en un archivo
|
|
645
690
|
|
|
646
691
|
Un mismo archivo puede tener tantos grupos como necesites. Cada grupo aparece como una **pestaña separada** en la paleta. Se pueden cargar múltiples archivos — los grupos se acumulan. Cada grupo importado muestra un botón **×** en su pestaña para eliminarlo.
|