@liquidcars/atlas 0.1.37 → 0.1.39

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 CHANGED
@@ -187,37 +187,59 @@ para mantener el contraste sobre geometrías tanto claras como oscuras.
187
187
  ## Geometry packs
188
188
 
189
189
  Las geometrías pueden distribuirse en paquetes independientes. El componente
190
- expone `registerGeometryPack()`, `unregisterGeometryPack()` y
191
- `getGeometryCatalog()`; los mismos métodos están disponibles como estáticos en
192
- `LiquidCarsAtlas`. Los identificadores usan un namespace (`infra.server`,
193
- `architecture.application`, etc.) y las primitivas integradas también se
194
- publican como `geo.box`, `geo.sphere`, etc. Los nombres históricos sin
195
- namespace siguen siendo compatibles.
190
+ expone `registerGeometryPack()`, `unregisterGeometryPack()`,
191
+ `getGeometryCatalog()` y `getGeometryPackCatalog()`; los mismos métodos están
192
+ disponibles como estáticos en `LiquidCarsAtlas`. Los identificadores usan un
193
+ namespace (`infra.server`, `emoji-fluent.robot`, `architecture.hexagonal.port`, etc.) y las primitivas
194
+ integradas también se publican como `geo.box`, `geo.sphere`, etc. Los nombres
195
+ históricos sin namespace siguen siendo compatibles. Los namespaces pueden contener segmentos separados por puntos, de modo que packs especializados como `architecture.hexagonal` convivan con `architecture`.
196
+
197
+ `getGeometryCatalog()` conserva el catálogo operativo de geometrías.
198
+ `getGeometryPackCatalog()` describe las librerías registradas, incluyendo
199
+ autoría, licencia, procedencia y recursos, sin duplicar estos datos en cada
200
+ geometría.
201
+
202
+ El módulo exporta también `ATLAS_VERSION`, y la clase registrada expone la
203
+ misma versión mediante `customElements.get("liquidcars-atlas").version`. Esta
204
+ segunda forma identifica la implementación que el navegador utiliza realmente
205
+ si accidentalmente se cargan varias versiones del core.
196
206
 
197
207
  ```js
198
208
  import { registerGeometryPack } from "@liquidcars/atlas";
199
209
 
210
+ const robotImage = new URL("./assets/robot.svg", import.meta.url).href;
211
+
200
212
  registerGeometryPack({
201
- namespace: "infra",
202
- name: "Infrastructure",
213
+ namespace: "example",
214
+ name: "Example visual assets",
203
215
  version: "0.1.0",
204
- palette: { chassis: "#587386", accent: "#72dbc9" },
216
+ authors: [{ name: "Example Studio", url: "https://example.com" }],
217
+ license: { spdx: "MIT", url: "https://opensource.org/license/mit" },
218
+ sources: [{
219
+ id: "example-artwork",
220
+ name: "Example artwork",
221
+ authors: ["Example Studio"],
222
+ license: "MIT"
223
+ }],
224
+ resources: [{
225
+ id: "robot",
226
+ kind: "image",
227
+ mimeType: "image/svg+xml",
228
+ path: "./assets/robot.svg",
229
+ url: robotImage,
230
+ source: "example-artwork"
231
+ }],
232
+ palette: { backplate: "#193142", image: "#ffffff" },
205
233
  geometries: [{
206
- id: "server",
207
- name: "Server",
208
- canonicalSize: [2.7, 1.8, 2.2],
209
- parameters: {
210
- units: { type: "number", min: 1, max: 8, default: 3 },
211
- icon: { type: "icon", default: "⚙" },
212
- image: { type: "image", default: "" }
213
- },
214
- anchors: { input: [-1, 0, 0], output: [1, 0, 0], network: [0, 0, 1] },
215
- create({ parameters }) {
234
+ id: "robot",
235
+ canonicalSize: [2.4, 2.4, .5],
236
+ resource: "robot",
237
+ create({ resources }) {
216
238
  return { parts: [
217
- { shape: "box", size: [1, 1, 1], color: "chassis" },
218
- { shape: "plane", size: [.42, .42, 1], position: [0, 0, .51],
219
- color: "accent", icon: parameters.icon, image: parameters.image,
220
- edges: false, doubleSided: true }
239
+ { shape: "box", size: [.92, .92, .12], color: "backplate", radius: .16 },
240
+ { shape: "plane", size: [.84, .84, 1], position: [0, 0, .07],
241
+ color: "image", image: resources.robot.url, imageFit: "contain",
242
+ transparent: true, edges: false }
221
243
  ] };
222
244
  }
223
245
  }]
@@ -228,17 +250,22 @@ El modelo configura cada instancia sin conocer la implementación del paquete:
228
250
 
229
251
  ```json
230
252
  {
231
- "geometry": "infra.server",
232
- "geometryOptions": { "units": 4, "icon": "DB" },
233
- "geometryPalette": { "accent": "#ffd166" }
253
+ "geometry": "example.robot",
254
+ "geometryPalette": { "backplate": "#284b63" }
234
255
  }
235
256
  ```
236
257
 
237
258
  Cada definición puede declarar parámetros tipados, una paleta local,
238
- proporciones canónicas y anchors. Las piezas declarativas admiten primitivas,
239
- posición, rotación, escala, materiales, iconos de texto o emoji e imágenes por
240
- URL/data URI; los SVG también pueden proporcionarse inline. Para planos con
241
- imagen, `imageFit` admite `cover`, `contain` y `stretch`. El renderer mantiene Three.js encapsulado para evitar que los packs
259
+ proporciones canónicas y anchors. Los recursos declarados por el pack se
260
+ entregan a `create({ resources })` indexados por `id`; pueden estar
261
+ empaquetados mediante `new URL("./assets/...", import.meta.url)`, ser data URIs
262
+ o apuntar a un recurso remoto. `sources` permite atribuir una colección de
263
+ terceros una sola vez y cada recurso puede sobrescribir `authors` o `license`.
264
+
265
+ Las piezas declarativas admiten primitivas, posición, rotación, escala,
266
+ materiales e imágenes por URL/data URI; los SVG también pueden proporcionarse
267
+ inline. Para planos con imagen, `imageFit` admite `cover`, `contain` y
268
+ `stretch`. El renderer mantiene Three.js encapsulado para evitar que los packs
242
269
  dependan de su versión interna. Las relaciones parten por defecto de la
243
270
  superficie orientada hacia el otro extremo. `anchor: center` conserva el
244
271
  comportamiento centrado cuando sea necesario, y `fromAnchor` y `toAnchor`
@@ -314,12 +341,12 @@ Una vez publicado, los consumidores podrán instalarlo con `npm install @liquidc
314
341
  Para probar el paquete sin publicarlo, basta con instalar el tarball generado:
315
342
 
316
343
  ```bash
317
- npm install ./liquidcars-atlas-0.1.28.tgz
344
+ npm install ./liquidcars-atlas-0.1.39.tgz
318
345
  ```
319
346
 
320
347
  ## Estado
321
348
 
322
- `0.1.28` rasteriza explícitamente los SVG sobre un canvas antes de subirlos a
349
+ `0.1.39` incorpora metadatos normalizados de autoría, licencia, procedencia y recursos para los geometry packs, añade `getGeometryPackCatalog()` y entrega los recursos declarados a `create({ resources })`. Se mantiene intacto `getGeometryCatalog()` para conservar la compatibilidad. `0.1.28` rasteriza explícitamente los SVG sobre un canvas antes de subirlos a
323
350
  WebGL y emite diagnósticos cuando falla la carga o la conversión. `0.1.27` añade carga automática de imágenes SVG remotas, SVG mediante data URI
324
351
  y SVG inline, manteniendo las mismas opciones de cara y ajuste que las imágenes
325
352
  raster. `0.1.26` mantiene el centro como anclaje implícito de toda relación y utiliza
@@ -327,7 +354,7 @@ los puertos de geometrías externas únicamente cuando el modelo los solicita.
327
354
  También evita recorrer los materiales de geometrías compuestas en cada frame,
328
355
  refuerza la liberación de recursos y expone `getRenderStats()`.
329
356
  `0.1.24` incorporó geometry packs independientes, namespaces, parámetros
330
- personalizados, paletas locales, anchors e imágenes/iconos declarativos. La
357
+ personalizados, paletas locales, anchors e imágenes declarativas. La
331
358
  versión `0.1.23` añadió desplazamiento lateral de cámara mediante ratón, teclado
332
359
  modificador y gestos táctiles, además de la API pública `panBy()` y `panTo()`.
333
360
  Se conserva la selección contextual de relaciones introducida en `0.1.22`: el usuario puede