nexabase-report 0.28.48 → 0.28.50

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/NEXAREPORT.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- nexabase-report@0.28.48 — generado por scripts/gen-ai-context.mjs, no editar a mano -->
1
+ <!-- nexabase-report@0.28.50 — generado por scripts/gen-ai-context.mjs, no editar a mano -->
2
2
  # NexaReport — referencia para agentes de IA
3
3
 
4
4
  > Este archivo se genera desde los tipos TypeScript reales del paquete (`src/lib/types/report.ts`
@@ -281,10 +281,10 @@ El schema formal completo (todas las interfaces, no solo bandas/elementos) está
281
281
  `nexabase-report/schema`, así que es accesible sin instalar nada vía:
282
282
 
283
283
  ```
284
- https://unpkg.com/nexabase-report@0.28.48/schema/nexareport.schema.json
284
+ https://unpkg.com/nexabase-report@0.28.50/schema/nexareport.schema.json
285
285
  ```
286
286
 
287
- (cambia `@0.28.48` por `@latest` para la versión más reciente). Valida el JSON generado
287
+ (cambia `@0.28.50` por `@latest` para la versión más reciente). Valida el JSON generado
288
288
  contra ese schema antes de darlo por bueno — evita que un campo inventado llegue al usuario.
289
289
 
290
290
  Más ejemplos reales (subreportes, crosstab, master-detail, códigos de barras) en `examples/*.json`
@@ -883,6 +883,87 @@ desde el código. Nunca vas a recibir un JSON con un campo que ya no existe, o l
883
883
  <p>Pega el JSON resultante en el diseñador (<strong>Importar JSON</strong>) para revisarlo visualmente y ajustar
884
884
  posiciones, colores o binding fino — la IA arma la estructura, el diseñador es donde lo dejas
885
885
  exacto.</p>
886
+ `
887
+ },
888
+ {
889
+ id: "integracion-cdn",
890
+ title: "Publicar el visor en tu web (CDN)",
891
+ search: `cdn, jsdelivr, unpkg, embeber, integrar, cache, navegador, produccion, actualizar, script publicar el visor en tu web (cdn) si vas a mostrar <nexa viewer en un sitio externo sin pasar por un bundler, la forma más rápida es cargarlo desde un cdn público. hay una trampa con la que se han topado varios clientes: cargarlo mal hace que dejen de ver las correcciones que publicas. el problema: el navegador cachea la copia vieja un <script apuntando siempre a la misma url —sin número de versión— se cachea en el navegador de cada visitante hasta por 7 días . publicás un fix, el cdn ya lo tiene, pero el navegador del cliente sigue sirviendo su copia local vieja hasta que expire el caché o el usuario haga un refresco forzado (ctrl+shift+r). desde el diseñador no hay forma de "empujar" esa actualización: es una limitación del navegador, no de nexareport. html <! ❌ el navegador puede quedarse con esta copia hasta 7 días <script src="https://cdn.jsdelivr.net/npm/nexabase report/dist/nexabase report.umd.js" <\/script la solución: resolver la versión antes de cargar en vez de apuntar a la url sin versión, resolvé la última versión publicada (jsdelivr cachea esa consulta solo 10 segundos) y cargá el archivo desde la url versionada resultante. cada release usa una url distinta, así que el navegador no tiene forma de servir una copia vieja aunque quiera. html <nexa viewer id="viewer" minimal </nexa viewer <script function loadfrom(baseurl) { const css = document.createelement('link'); css.rel = 'stylesheet'; css.href = \${baseurl}/dist/style.css ; const cssready = new promise(resolve = { css.onload = resolve; css.onerror = resolve; }); document.head.appendchild(css); const js = document.createelement('script'); js.src = \${baseurl}/dist/nexabase report.umd.js ; const jsready = new promise((resolve, reject) = { js.onload = resolve; js.onerror = reject; }); document.head.appendchild(js); // esperar los dos recursos, no solo el js: si el visor arranca a medir alturas de // página antes de que el css esté aplicado, la paginación sale mal (páginas de // menos, scroll roto) sin que salte ningún error en consola. return promise.all([cssready, jsready]); } fetch('https://data.jsdelivr.com/v1/packages/npm/nexabase report/resolved?specifier=latest') .then(r = r.json()) .then(({ version }) = loadfrom( https://cdn.jsdelivr.net/npm/nexabase report@\${version} )) // la llamada de resolución de versión vive en un dominio distinto (data.jsdelivr.com) al // del cdn mismo — un proxy corporativo, un adblocker o una regla de csp pueden bloquear // justo esa llamada aunque el cdn sí sea alcanzable. si falla, cae a la etiqueta @latest // de jsdelivr directamente en vez de dejar el visor en blanco sin ningún aviso visible. .catch(() = loadfrom('https://cdn.jsdelivr.net/npm/nexabase report@latest')) .then(() = { nexareport.registernexareport(); const viewer = document.getelementbyid('viewer'); viewer.definition = { / json del reporte / }; viewer.data = [ / datos / ]; }) .catch(err = { document.getelementbyid('viewer').outerhtml = <div style="padding:16px;color: b91c1c;font family:system ui" no se pudo cargar nexareport: \${err && err.message err}</div ; }); <\/script no hace falta fijar el número de versión a mano ni editar nada en cada release: la resolución siempre trae la última publicada, y el navegador solo se ve obligado a bajarla de nuevo cuando efectivamente cambió. importante: esperá siempre los dos recursos (css y js) antes de inicializar el visor. si solo esperás el <script y dejás que el <link cargue en paralelo sin que nadie lo espere, en redes donde el css tarda más que el js (por ejemplo, el js ya en caché de una visita anterior y el css no) el visor puede arrancar a medir alturas de página antes de que el estilo esté aplicado — un candidato plausible para un reporte que de repente muestra una sola página sin ningún error en consola. si ya integraste con la url sin versión cambiar tu propio código al patrón de arriba resuelve el problema hacia adelante. para los usuarios que ya cargaron la versión vieja antes del cambio, no hay forma de purgar su caché de forma remota: necesitan un refresco forzado una única vez.`,
892
+ element: "",
893
+ html: `<h1>Publicar el visor en tu web (CDN)</h1>
894
+ <p>Si vas a mostrar <code>&lt;nexa-viewer&gt;</code> en un sitio externo sin pasar por un bundler, la forma más rápida
895
+ es cargarlo desde un CDN público. Hay una trampa con la que se han topado varios clientes: cargarlo
896
+ mal hace que dejen de ver las correcciones que publicas.</p>
897
+ <h2>El problema: el navegador cachea la copia vieja</h2>
898
+ <p>Un <code>&lt;script&gt;</code> apuntando siempre a la misma URL —sin número de versión— se cachea en el navegador de
899
+ cada visitante hasta por <strong>7 días</strong>. Publicás un fix, el CDN ya lo tiene, pero el navegador del
900
+ cliente sigue sirviendo su copia local vieja hasta que expire el caché o el usuario haga un refresco
901
+ forzado (Ctrl+Shift+R). Desde el diseñador no hay forma de &quot;empujar&quot; esa actualización: es una
902
+ limitación del navegador, no de NexaReport.</p>
903
+ <pre><code class="language-html">&lt;!-- ❌ El navegador puede quedarse con esta copia hasta 7 días --&gt;
904
+ &lt;script src=&quot;https://cdn.jsdelivr.net/npm/nexabase-report/dist/nexabase-report.umd.js&quot;&gt;&lt;/script&gt;
905
+ </code></pre>
906
+ <h2>La solución: resolver la versión antes de cargar</h2>
907
+ <p>En vez de apuntar a la URL sin versión, resolvé la última versión publicada (jsDelivr cachea esa
908
+ consulta solo 10 segundos) y cargá el archivo desde la URL versionada resultante. Cada release usa
909
+ una URL distinta, así que el navegador no tiene forma de servir una copia vieja aunque quiera.</p>
910
+ <pre><code class="language-html">&lt;nexa-viewer id=&quot;viewer&quot; minimal&gt;&lt;/nexa-viewer&gt;
911
+
912
+ &lt;script&gt;
913
+ function loadFrom(baseUrl) {
914
+ const css = document.createElement(&#39;link&#39;);
915
+ css.rel = &#39;stylesheet&#39;;
916
+ css.href = \`\${baseUrl}/dist/style.css\`;
917
+ const cssReady = new Promise(resolve =&gt; { css.onload = resolve; css.onerror = resolve; });
918
+ document.head.appendChild(css);
919
+
920
+ const js = document.createElement(&#39;script&#39;);
921
+ js.src = \`\${baseUrl}/dist/nexabase-report.umd.js\`;
922
+ const jsReady = new Promise((resolve, reject) =&gt; { js.onload = resolve; js.onerror = reject; });
923
+ document.head.appendChild(js);
924
+
925
+ // Esperar los DOS recursos, no solo el JS: si el visor arranca a medir alturas de
926
+ // página antes de que el CSS esté aplicado, la paginación sale mal (páginas de
927
+ // menos, scroll roto) sin que salte ningún error en consola.
928
+ return Promise.all([cssReady, jsReady]);
929
+ }
930
+
931
+ fetch(&#39;https://data.jsdelivr.com/v1/packages/npm/nexabase-report/resolved?specifier=latest&#39;)
932
+ .then(r =&gt; r.json())
933
+ .then(({ version }) =&gt; loadFrom(\`https://cdn.jsdelivr.net/npm/nexabase-report@\${version}\`))
934
+ // La llamada de resolución de versión vive en un dominio distinto (data.jsdelivr.com) al
935
+ // del CDN mismo — un proxy corporativo, un adblocker o una regla de CSP pueden bloquear
936
+ // justo esa llamada aunque el CDN sí sea alcanzable. Si falla, cae a la etiqueta \`@latest\`
937
+ // de jsDelivr directamente en vez de dejar el visor en blanco sin ningún aviso visible.
938
+ .catch(() =&gt; loadFrom(&#39;https://cdn.jsdelivr.net/npm/nexabase-report@latest&#39;))
939
+ .then(() =&gt; {
940
+ NexaReport.registerNexaReport();
941
+
942
+ const viewer = document.getElementById(&#39;viewer&#39;);
943
+ viewer.definition = { /* JSON del reporte */ };
944
+ viewer.data = [ /* datos */ ];
945
+ })
946
+ .catch(err =&gt; {
947
+ document.getElementById(&#39;viewer&#39;).outerHTML =
948
+ \`&lt;div style=&quot;padding:16px;color:#b91c1c;font-family:system-ui&quot;&gt;No se pudo cargar NexaReport: \${err &amp;&amp; err.message || err}&lt;/div&gt;\`;
949
+ });
950
+ &lt;/script&gt;
951
+ </code></pre>
952
+ <p>No hace falta fijar el número de versión a mano ni editar nada en cada release: la resolución
953
+ siempre trae la última publicada, y el navegador solo se ve obligado a bajarla de nuevo cuando
954
+ efectivamente cambió.</p>
955
+ <blockquote>
956
+ <p><strong>Importante:</strong> esperá siempre los dos recursos (CSS y JS) antes de inicializar el visor. Si
957
+ solo esperás el <code>&lt;script&gt;</code> y dejás que el <code>&lt;link&gt;</code> cargue en paralelo sin que nadie lo espere,
958
+ en redes donde el CSS tarda más que el JS (por ejemplo, el JS ya en caché de una visita anterior
959
+ y el CSS no) el visor puede arrancar a medir alturas de página antes de que el estilo esté
960
+ aplicado — un candidato plausible para un reporte que de repente muestra una sola página sin
961
+ ningún error en consola.</p>
962
+ </blockquote>
963
+ <h2>Si ya integraste con la URL sin versión</h2>
964
+ <p>Cambiar tu propio código al patrón de arriba resuelve el problema hacia adelante. Para los usuarios
965
+ que ya cargaron la versión vieja antes del cambio, no hay forma de purgar su caché de forma remota:
966
+ necesitan un refresco forzado una única vez.</p>
886
967
  `
887
968
  }
888
969
  ];
@@ -1,5 +1,5 @@
1
- import { g as Nl, c as ut, d as Vl } from "./index-BExMmJUt.js";
2
- import { j as Xl } from "./jspdf.es.min-miF7naN5.js";
1
+ import { g as Nl, c as ut, d as Vl } from "./index-Ci9Pp4eR.js";
2
+ import { j as Xl } from "./jspdf.es.min-CZaMqdri.js";
3
3
  function Jl(Pe, br) {
4
4
  for (var fe = 0; fe < br.length; fe++) {
5
5
  const HA = br[fe];