nexabase-report 0.28.49 → 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.49 — 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.49/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.49` 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`
@@ -888,7 +888,7 @@ exacto.</p>
888
888
  {
889
889
  id: "integracion-cdn",
890
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 fetch('https://data.jsdelivr.com/v1/packages/npm/nexabase report/resolved?specifier=latest') .then(r = r.json()) .then(({ version }) = { const css = document.createelement('link'); css.rel = 'stylesheet'; css.href = https://cdn.jsdelivr.net/npm/nexabase report@\${version}/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 = https://cdn.jsdelivr.net/npm/nexabase report@\${version}/dist/nexabase report.umd.js ; const jsready = new promise(resolve = { js.onload = resolve; }); 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. promise.all([cssready, jsready]).then(() = { nexareport.registernexareport(); const viewer = document.getelementbyid('viewer'); viewer.definition = { / json del reporte / }; viewer.data = [ / datos / ]; }); }); <\/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.`,
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
892
  element: "",
893
893
  html: `<h1>Publicar el visor en tu web (CDN)</h1>
894
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
@@ -910,30 +910,42 @@ una URL distinta, así que el navegador no tiene forma de servir una copia vieja
910
910
  <pre><code class="language-html">&lt;nexa-viewer id=&quot;viewer&quot; minimal&gt;&lt;/nexa-viewer&gt;
911
911
 
912
912
  &lt;script&gt;
913
- fetch(&#39;https://data.jsdelivr.com/v1/packages/npm/nexabase-report/resolved?specifier=latest&#39;)
914
- .then(r =&gt; r.json())
915
- .then(({ version }) =&gt; {
916
- const css = document.createElement(&#39;link&#39;);
917
- css.rel = &#39;stylesheet&#39;;
918
- css.href = \`https://cdn.jsdelivr.net/npm/nexabase-report@\${version}/dist/style.css\`;
919
- const cssReady = new Promise(resolve =&gt; { css.onload = resolve; css.onerror = resolve; });
920
- document.head.appendChild(css);
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);
921
924
 
922
- const js = document.createElement(&#39;script&#39;);
923
- js.src = \`https://cdn.jsdelivr.net/npm/nexabase-report@\${version}/dist/nexabase-report.umd.js\`;
924
- const jsReady = new Promise(resolve =&gt; { js.onload = resolve; });
925
- document.head.appendChild(js);
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
+ }
926
930
 
927
- // Esperar los DOS recursos, no solo el JS: si el visor arranca a medir alturas de
928
- // página antes de que el CSS esté aplicado, la paginación sale mal (páginas de
929
- // menos, scroll roto) sin que salte ningún error en consola.
930
- Promise.all([cssReady, jsReady]).then(() =&gt; {
931
- NexaReport.registerNexaReport();
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();
932
941
 
933
- const viewer = document.getElementById(&#39;viewer&#39;);
934
- viewer.definition = { /* JSON del reporte */ };
935
- viewer.data = [ /* datos */ ];
936
- });
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;\`;
937
949
  });
938
950
  &lt;/script&gt;
939
951
  </code></pre>
@@ -1,5 +1,5 @@
1
- import { g as Nl, c as ut, d as Vl } from "./index-CNxyint1.js";
2
- import { j as Xl } from "./jspdf.es.min-Cvx4ls2L.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];