@liquidcars/atlas 0.1.10

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 ADDED
@@ -0,0 +1,98 @@
1
+ # `@liquidcars/atlas`
2
+
3
+ Componente web reutilizable para explorar modelos conceptuales en 3D. El componente lee una isla de datos con `palette`, `entities` y `relations`, resuelve coordenadas relativas mediante `parent` y permite explorar geometrías, contenedores, relaciones animadas y selección contextual.
4
+
5
+ ## Prueba local
6
+
7
+ Desde la carpeta del paquete:
8
+
9
+ ```bash
10
+ python3 -m http.server 4173
11
+ ```
12
+
13
+ Después abre <http://localhost:4173/> (o <http://localhost:4173/demo/>). La demo usa el mismo modelo LiquidCars que la página actual, pero carga el componente como módulo ESM independiente. Es importante servirlo por HTTP, no abrir el HTML directamente con `file://`.
14
+
15
+ ## Uso directo en una página
16
+
17
+ ```html
18
+ <script type="module" src="./dist/liquidcars-atlas.js"></script>
19
+
20
+ <liquidcars-atlas height="720" relation-mode="selected" shell-labels="on">
21
+ <script type="application/json">
22
+ {
23
+ "palette": {
24
+ "channels": "#58b6ec",
25
+ "offers": "#48c8b0"
26
+ },
27
+ "entities": [
28
+ {
29
+ "id": "offers",
30
+ "name": "OFFERS",
31
+ "sub": "Stock y servicios",
32
+ "p": [0, -3, 0],
33
+ "s": [11, 3.4, 5],
34
+ "c": "#48c8b0",
35
+ "type": "shell",
36
+ "text": "..."
37
+ }
38
+ ],
39
+ "relations": [
40
+ { "from": "dealer", "to": "base-offer", "label": "mantiene" }
41
+ ]
42
+ }
43
+ </script>
44
+ </liquidcars-atlas>
45
+ ```
46
+
47
+ También se puede cargar el modelo desde JavaScript:
48
+
49
+ ```js
50
+ const atlas = document.querySelector('liquidcars-atlas');
51
+ atlas.model = model;
52
+ atlas.select('distribution-agreement');
53
+ atlas.setRelationMode('all'); // 'all' | 'selected' | 'none'
54
+ atlas.setTheme({
55
+ background: { color: '#07121e', glow: '#20394b' },
56
+ lighting: { ambient: 1.8, directional: 3.0 },
57
+ ui: { breadcrumbs: true, panel: true, toolbar: true, hint: false }
58
+ });
59
+ ```
60
+
61
+ El mismo bloque `theme` puede formar parte del JSON del modelo. Los estilos
62
+ principales también están expuestos como variables CSS (`--lc-bg`,
63
+ `--lc-bg-glow`, `--lc-panel-bg`, `--lc-toolbar-bg`, `--lc-crumb-bg`, etc.),
64
+ por lo que una aplicación puede adaptar la apariencia sin modificar el bundle.
65
+ Las propiedades `atlas.theme` y `atlas.styles` son alias prácticos de esta configuración.
66
+
67
+ Eventos disponibles: `lc-ready`, `lc-error`, `lc-select`, `lc-relation-mode` y `lc-disconnect`.
68
+
69
+ ## Contrato de datos
70
+
71
+ - `palette`: mapa de nombres de color a valores CSS/hex.
72
+ - `theme` (opcional): configuración de `background`, `lighting`, `panel`, `toolbar`, `breadcrumbs`, `hint` y `ui`. `ui` permite mostrar u ocultar `panel`, `toolbar`, `breadcrumbs` y `hint`.
73
+ - `entities`: objetos con `id`, `name`, `p`, `s`, `c`, `type`, `text` y opcionalmente `parent`, `geometry`, `radius`, `segments`, `frontLabel`, `anchor` y `ports`.
74
+ - `p` es la posición local respecto a `parent`; una entidad sin `parent` usa coordenadas de escena.
75
+ - `s` son dimensiones absolutas locales `[x, y, z]`.
76
+ - `relations` acepta objetos `{from, to, label}` o la forma corta `[from, to, label]`.
77
+
78
+ Geometrías incluidas en esta primera versión: `box`, `cylinder`, `sphere`, `cone`, `frustum-cone`, `frustum-pyramid`, `frustum-triangle`, `prism`, `pyramid-square`, `pyramid-triangle`, `octahedron`, `dodecahedron` e `icosahedron`.
79
+
80
+ ## Distribución
81
+
82
+ El archivo `dist/liquidcars-atlas.js` es un módulo ESM autocontenido: Three.js se incluye dentro del bundle, por lo que el consumidor no necesita instalar otra dependencia para probarlo. Para una distribución privada se puede servir ese archivo desde un CDN propio o desde el mismo sitio. Para publicar en npm, después de revisar el API estable:
83
+
84
+ ```bash
85
+ npm publish --access public
86
+ ```
87
+
88
+ Una vez publicado, los consumidores podrán instalarlo con `npm install @liquidcars/atlas` o cargar el bundle desde un CDN compatible con npm.
89
+
90
+ Para probar el paquete sin publicarlo, basta con instalar el tarball generado:
91
+
92
+ ```bash
93
+ npm install ./liquidcars-atlas-0.1.10.tgz
94
+ ```
95
+
96
+ ## Estado
97
+
98
+ `0.1.10` mantiene la corrección del desplazamiento interno del texto y ancla las etiquetas a las dimensiones reales de las geometrías redondeadas. Además fija un margen superior absoluto para las etiquetas secundarias de contenedores abiertos, situado dentro del frontal del contenedor y sin depender de sus dimensiones. También incluye configuración programática de tema, iluminación y elementos de interfaz.
@@ -0,0 +1,39 @@
1
+ <!doctype html>
2
+ <html lang="es">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>LiquidCars Atlas · Web Component demo</title>
7
+ <style>
8
+ :root { color-scheme: dark; font-family: Inter, ui-sans-serif, system-ui, sans-serif; }
9
+ body { margin: 0; min-height: 100vh; background: #07121e; color: #ecf4fb; }
10
+ header { padding: 22px 28px 10px; }
11
+ h1 { margin: 0 0 6px; font-size: clamp(24px, 4vw, 42px); }
12
+ p { margin: 0; color: #9bb0c4; }
13
+ main { padding: 12px 20px 28px; }
14
+ liquidcars-atlas { display: block; width: 100%; max-width: 1480px; margin: 0 auto; }
15
+ code { color: #85e5d3; }
16
+ </style>
17
+ <script type="module" src="../dist/liquidcars-atlas.js?v=0.1.10"></script>
18
+ </head>
19
+ <body>
20
+ <header>
21
+ <h1>LiquidCars Atlas</h1>
22
+ <p>Prueba de distribución del componente <code>&lt;liquidcars-atlas&gt;</code> · v0.1.10</p>
23
+ </header>
24
+ <main>
25
+ <liquidcars-atlas id="atlas" height="720" relation-mode="selected" shell-labels="on"></liquidcars-atlas>
26
+ </main>
27
+ <script type="module">
28
+ const atlas = document.querySelector('#atlas');
29
+ const model = await fetch(new URL('./model.json', import.meta.url)).then((response) => {
30
+ if (!response.ok) throw new Error(`No se pudo cargar el modelo (${response.status})`);
31
+ return response.json();
32
+ });
33
+ atlas.model = model;
34
+ atlas.addEventListener('lc-select', (event) => {
35
+ document.title = `${event.detail.entity?.name || 'LiquidCars Atlas'} · Web Component demo`;
36
+ });
37
+ </script>
38
+ </body>
39
+ </html>