ngx-dsxlibrary 2.21.43 → 2.21.45

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
@@ -49,10 +49,13 @@ Notas:
49
49
 
50
50
  La librería expone un archivo CSS con `@font-face` para que cualquier proyecto consumidor lo importe una sola vez.
51
51
 
52
+ Tambien expone un archivo de personalizacion base para PrimeNG, para mantener estilos uniformes entre proyectos consumidores.
53
+
52
54
  En el `styles.css`/`styles.scss` del proyecto consumidor:
53
55
 
54
56
  ```css
55
57
  @import "ngx-dsxlibrary/assets/css/fonts.css";
58
+ @import "ngx-dsxlibrary/assets/css/primeng_dsx.css";
56
59
  ```
57
60
 
58
61
  Las rutas del CSS están definidas como `url("/fonts/...")`, por lo que el proyecto consumidor debe publicar esos archivos en `/fonts`.
@@ -822,6 +822,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
822
822
  class DocxPreviewComponent {
823
823
  view = viewChild('viewer', ...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
824
824
  visibleState = signal(false, ...(ngDevMode ? [{ debugName: "visibleState" }] : /* istanbul ignore next */ []));
825
+ loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
826
+ rendered = signal(false, ...(ngDevMode ? [{ debugName: "rendered" }] : /* istanbul ignore next */ []));
825
827
  renderToken = 0;
826
828
  set visible(value) {
827
829
  this.visibleState.set(!!value);
@@ -840,18 +842,19 @@ class DocxPreviewComponent {
840
842
  return;
841
843
  }
842
844
  if (!isVisible) {
843
- this.renderToken++;
844
- container.innerHTML = '';
845
+ this.resetViewer(container);
845
846
  return;
846
847
  }
848
+ this.loading.set(true);
849
+ this.rendered.set(false);
847
850
  if (!(fileBlob instanceof Blob)) {
848
- this.renderToken++;
851
+ this.finishWithFallback(container);
849
852
  container.innerHTML =
850
853
  '<p>No hay un archivo .docx válido para previsualizar.</p>';
851
854
  return;
852
855
  }
853
856
  if (!fileBlob.size) {
854
- this.renderToken++;
857
+ this.finishWithFallback(container);
855
858
  container.innerHTML = '<p>El archivo .docx está vacío.</p>';
856
859
  return;
857
860
  }
@@ -865,6 +868,18 @@ class DocxPreviewComponent {
865
868
  void this.renderDocx(fileBlob, container, options, token);
866
869
  });
867
870
  }
871
+ resetViewer(container) {
872
+ this.renderToken++;
873
+ this.loading.set(false);
874
+ this.rendered.set(false);
875
+ container.innerHTML = '';
876
+ }
877
+ finishWithFallback(container) {
878
+ this.renderToken++;
879
+ this.loading.set(false);
880
+ this.rendered.set(true);
881
+ container.innerHTML = '';
882
+ }
868
883
  async renderDocx(fileBlob, container, options, token) {
869
884
  try {
870
885
  const viteDocxModulePath = '/@id/docx-preview';
@@ -875,6 +890,10 @@ class DocxPreviewComponent {
875
890
  return;
876
891
  }
877
892
  await docxPreviewModule.renderAsync(fileBlob, container, undefined, options);
893
+ if (token === this.renderToken && this.visibleState()) {
894
+ this.loading.set(false);
895
+ this.rendered.set(true);
896
+ }
878
897
  }
879
898
  catch (error) {
880
899
  if (token !== this.renderToken || !this.visibleState()) {
@@ -883,6 +902,8 @@ class DocxPreviewComponent {
883
902
  console.error('[DocxPreview] Error al renderizar el archivo DOCX.', error);
884
903
  container.innerHTML =
885
904
  '<p>No se pudo renderizar la vista previa DOCX. Verifica la consola para más detalles.</p>';
905
+ this.loading.set(false);
906
+ this.rendered.set(true);
886
907
  }
887
908
  }
888
909
  onHide() {
@@ -894,11 +915,11 @@ class DocxPreviewComponent {
894
915
  this.visibleChange.emit(false);
895
916
  }
896
917
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: DocxPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
897
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.13", type: DocxPreviewComponent, isStandalone: true, selector: "app-docx-preview", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: false, isRequired: false, transformFunction: null }, blob: { classPropertyName: "blob", publicName: "blob", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "view", first: true, predicate: ["viewer"], descendants: true, isSignal: true }], ngImport: i0, template: "<p-dialog\r\n [visible]=\"visible\"\r\n (onHide)=\"onHide()\"\r\n [modal]=\"true\"\r\n [breakpoints]=\"{ '1199px': '75vw', '575px': '90vw' }\"\r\n [style]=\"{ width: '80vw' }\"\r\n [draggable]=\"false\"\r\n [resizable]=\"false\"\r\n [closable]=\"true\"\r\n [maximizable]=\"true\"\r\n>\r\n <ng-template #header>\r\n <div class=\"flex justify-content-center align-items-center gap-2 px-2\">\r\n <p-avatar image=\"icon2/word-2019.png\" />\r\n <span class=\"font-bold\">Vista preliminar del documento</span>\r\n </div>\r\n </ng-template>\r\n <div #viewer></div>\r\n</p-dialog>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: DialogModule }, { kind: "component", type: i1$3.Dialog, selector: "p-dialog", inputs: ["hostName", "header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "maskMotionOptions", "motionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i2$3.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }] });
918
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: DocxPreviewComponent, isStandalone: true, selector: "app-docx-preview", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: false, isRequired: false, transformFunction: null }, blob: { classPropertyName: "blob", publicName: "blob", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "view", first: true, predicate: ["viewer"], descendants: true, isSignal: true }], ngImport: i0, template: "<p-dialog\r\n [visible]=\"visible\"\r\n (onHide)=\"onHide()\"\r\n [modal]=\"true\"\r\n [breakpoints]=\"{ '1199px': '75vw', '575px': '90vw' }\"\r\n [style]=\"{ width: '80vw' }\"\r\n [draggable]=\"false\"\r\n [resizable]=\"false\"\r\n [closable]=\"true\"\r\n [maximizable]=\"true\"\r\n>\r\n <ng-template #header>\r\n <div class=\"flex justify-content-center align-items-center gap-2 px-2\">\r\n <p-avatar image=\"icon2/word-2019.png\" />\r\n <span class=\"font-bold\">Vista preliminar del documento</span>\r\n </div>\r\n </ng-template>\r\n <div class=\"docx-preview-shell\">\r\n @if (loading()) {\r\n <div class=\"docx-preview-loading\">\r\n <span class=\"docx-preview-spinner\"></span>\r\n <span>Cargando vista previa del documento...</span>\r\n </div>\r\n }\r\n\r\n <div\r\n #viewer\r\n class=\"docx-preview-viewer\"\r\n [class.is-hidden]=\"loading() && !rendered()\"\r\n ></div>\r\n </div>\r\n</p-dialog>\r\n", styles: [".docx-preview-shell{position:relative;min-height:60vh}.docx-preview-loading{align-items:center;color:#475569;display:flex;flex-direction:column;gap:.75rem;justify-content:center;min-height:60vh;text-align:center}.docx-preview-spinner{animation:docx-preview-spin .8s linear infinite;border:3px solid rgba(71,85,105,.15);border-top-color:#2563eb;border-radius:50%;display:inline-block;height:2.25rem;width:2.25rem}.docx-preview-viewer{min-height:60vh;transition:opacity .18s ease}.docx-preview-viewer.is-hidden{opacity:0;pointer-events:none;position:absolute;inset:0}@keyframes docx-preview-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: DialogModule }, { kind: "component", type: i1$3.Dialog, selector: "p-dialog", inputs: ["hostName", "header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "maskMotionOptions", "motionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i2$3.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }] });
898
919
  }
899
920
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: DocxPreviewComponent, decorators: [{
900
921
  type: Component,
901
- args: [{ selector: 'app-docx-preview', imports: [DialogModule, AvatarModule], template: "<p-dialog\r\n [visible]=\"visible\"\r\n (onHide)=\"onHide()\"\r\n [modal]=\"true\"\r\n [breakpoints]=\"{ '1199px': '75vw', '575px': '90vw' }\"\r\n [style]=\"{ width: '80vw' }\"\r\n [draggable]=\"false\"\r\n [resizable]=\"false\"\r\n [closable]=\"true\"\r\n [maximizable]=\"true\"\r\n>\r\n <ng-template #header>\r\n <div class=\"flex justify-content-center align-items-center gap-2 px-2\">\r\n <p-avatar image=\"icon2/word-2019.png\" />\r\n <span class=\"font-bold\">Vista preliminar del documento</span>\r\n </div>\r\n </ng-template>\r\n <div #viewer></div>\r\n</p-dialog>\r\n" }]
922
+ args: [{ selector: 'app-docx-preview', imports: [DialogModule, AvatarModule], template: "<p-dialog\r\n [visible]=\"visible\"\r\n (onHide)=\"onHide()\"\r\n [modal]=\"true\"\r\n [breakpoints]=\"{ '1199px': '75vw', '575px': '90vw' }\"\r\n [style]=\"{ width: '80vw' }\"\r\n [draggable]=\"false\"\r\n [resizable]=\"false\"\r\n [closable]=\"true\"\r\n [maximizable]=\"true\"\r\n>\r\n <ng-template #header>\r\n <div class=\"flex justify-content-center align-items-center gap-2 px-2\">\r\n <p-avatar image=\"icon2/word-2019.png\" />\r\n <span class=\"font-bold\">Vista preliminar del documento</span>\r\n </div>\r\n </ng-template>\r\n <div class=\"docx-preview-shell\">\r\n @if (loading()) {\r\n <div class=\"docx-preview-loading\">\r\n <span class=\"docx-preview-spinner\"></span>\r\n <span>Cargando vista previa del documento...</span>\r\n </div>\r\n }\r\n\r\n <div\r\n #viewer\r\n class=\"docx-preview-viewer\"\r\n [class.is-hidden]=\"loading() && !rendered()\"\r\n ></div>\r\n </div>\r\n</p-dialog>\r\n", styles: [".docx-preview-shell{position:relative;min-height:60vh}.docx-preview-loading{align-items:center;color:#475569;display:flex;flex-direction:column;gap:.75rem;justify-content:center;min-height:60vh;text-align:center}.docx-preview-spinner{animation:docx-preview-spin .8s linear infinite;border:3px solid rgba(71,85,105,.15);border-top-color:#2563eb;border-radius:50%;display:inline-block;height:2.25rem;width:2.25rem}.docx-preview-viewer{min-height:60vh;transition:opacity .18s ease}.docx-preview-viewer.is-hidden{opacity:0;pointer-events:none;position:absolute;inset:0}@keyframes docx-preview-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
902
923
  }], ctorParameters: () => [], propDecorators: { view: [{ type: i0.ViewChild, args: ['viewer', { isSignal: true }] }], visible: [{
903
924
  type: Input
904
925
  }], visibleChange: [{