@acorex/platform 20.7.10 → 20.7.12

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.
@@ -84,10 +84,9 @@ import { AXDataTableModule } from '@acorex/components/data-table';
84
84
  import { AXPCommandExecutor, provideCommandSetups } from '@acorex/platform/runtime';
85
85
  import { AXUploaderZoneDirective } from '@acorex/cdk/uploader';
86
86
  import { AXUploaderModule } from '@acorex/components/uploader';
87
+ import { AXLoadingDialogService } from '@acorex/components/loading-dialog';
87
88
  import * as i1$d from '@acorex/components/media-viewer';
88
89
  import { AXMediaViewerModule } from '@acorex/components/media-viewer';
89
- import * as i4$1 from '@acorex/components/menu';
90
- import { AXMenuModule } from '@acorex/components/menu';
91
90
  import * as i1$e from '@acorex/components/image';
92
91
  import { AXImageModule } from '@acorex/components/image';
93
92
  import * as i1$f from '@acorex/components/json-viewer';
@@ -11460,10 +11459,11 @@ class AXPGalleryWidgetEditComponent extends AXPValueWidgetComponent {
11460
11459
  constructor() {
11461
11460
  super(...arguments);
11462
11461
  this.thumbnail = computed(() => this.options()['thumbnail'], ...(ngDevMode ? [{ debugName: "thumbnail" }] : []));
11463
- this.height = computed(() => this.options()['height'], ...(ngDevMode ? [{ debugName: "height" }] : []));
11462
+ this.height = computed(() => this.options()['height'] ?? '30rem', ...(ngDevMode ? [{ debugName: "height" }] : []));
11464
11463
  this.header = computed(() => this.options()['header'], ...(ngDevMode ? [{ debugName: "header" }] : []));
11465
11464
  this.fileInfo = computed(() => this.options()['fileInfo'], ...(ngDevMode ? [{ debugName: "fileInfo" }] : []));
11466
- this.fullScreenButton = computed(() => this.options()['fullScreenButton'], ...(ngDevMode ? [{ debugName: "fullScreenButton" }] : []));
11465
+ this.fullScreenButton = computed(() => this.options()['fullScreenButton'] ?? true, ...(ngDevMode ? [{ debugName: "fullScreenButton" }] : []));
11466
+ this.downloadButton = computed(() => this.options()['downloadButton'] ?? true, ...(ngDevMode ? [{ debugName: "downloadButton" }] : []));
11467
11467
  this.allowUploadTypes = computed(() => this.options()['allowUploadTypes'] ?? [`image/*`], ...(ngDevMode ? [{ debugName: "allowUploadTypes" }] : []));
11468
11468
  this.allowUpload = computed(() => this.options()['allowUpload'] ?? true, ...(ngDevMode ? [{ debugName: "allowUpload" }] : []));
11469
11469
  this.plugins = computed(() => this.options()['plugins'] ?? [], ...(ngDevMode ? [{ debugName: "plugins" }] : []));
@@ -11472,6 +11472,8 @@ class AXPGalleryWidgetEditComponent extends AXPValueWidgetComponent {
11472
11472
  this.hooks = inject(AXPHookService);
11473
11473
  this.fileActionsService = inject(AXPFileActionsService);
11474
11474
  this.fileStorageService = inject(AXPFileStorageService);
11475
+ this.loadingDialog = inject(AXLoadingDialogService);
11476
+ this.translationService = inject(AXTranslationService);
11475
11477
  this.gallery = viewChild('c', ...(ngDevMode ? [{ debugName: "gallery" }] : []));
11476
11478
  /**
11477
11479
  * Convert AXPFileListItem[] to AXMediaViewerData[] for display in media viewer.
@@ -11545,6 +11547,41 @@ class AXPGalleryWidgetEditComponent extends AXPValueWidgetComponent {
11545
11547
  super.ngOnInit();
11546
11548
  this.loadActions();
11547
11549
  }
11550
+ /** Downloads the file at the current media viewer index. */
11551
+ async download() {
11552
+ const galleryRef = this.gallery();
11553
+ const files = this.getValue() ?? [];
11554
+ if (!galleryRef || files.length === 0) {
11555
+ return;
11556
+ }
11557
+ const index = galleryRef.getActiveIndex();
11558
+ const file = files[index];
11559
+ if (!file) {
11560
+ return;
11561
+ }
11562
+ const loadingDialogRef = this.loadingDialog.show({
11563
+ title: await this.translationService.translateAsync('@general:actions.download.processing'),
11564
+ mode: 'indeterminate',
11565
+ progressColor: 'primary',
11566
+ status: await this.translationService.translateAsync('@general:actions.download.processing'),
11567
+ });
11568
+ try {
11569
+ const url = await this.resolveFileUrl(file);
11570
+ if (!url) {
11571
+ return;
11572
+ }
11573
+ const link = document.createElement('a');
11574
+ link.href = url;
11575
+ link.download = file.name ?? 'download';
11576
+ link.target = '_blank';
11577
+ link.rel = 'noopener noreferrer';
11578
+ link.click();
11579
+ link.remove();
11580
+ }
11581
+ finally {
11582
+ loadingDialogRef.close();
11583
+ }
11584
+ }
11548
11585
  async loadActions() {
11549
11586
  const payload = {
11550
11587
  plugins: this.plugins() ?? [],
@@ -11673,29 +11710,27 @@ class AXPGalleryWidgetEditComponent extends AXPValueWidgetComponent {
11673
11710
  @if (allowUpload()) {
11674
11711
  <ax-prefix>
11675
11712
  <div *translate="let t">
11676
- <ax-menu
11677
- [openOn]="'click'"
11678
- [hasArrow]="true"
11679
- style="--ax-comp-menu-action-list-horizontal-min-width:auto"
11680
- >
11681
- <ax-menu-item>
11682
- <ax-prefix>
11683
- <ax-icon icon="fa-light fa-plus"></ax-icon>
11684
- </ax-prefix>
11685
- <ax-text>{{ (t('@general:actions.add-item.title') | async)! }}</ax-text>
11686
-
11687
- @for (action of fileActions(); track action.plugin) {
11688
- <ax-menu-item (onClick)="action.run(capabilities)">
11689
- @if (action.icon) {
11690
- <ax-prefix>
11691
- <ax-icon [icon]="action.icon"></ax-icon>
11692
- </ax-prefix>
11693
- }
11694
- <ax-text>{{ action.text ?? (action.textKey ? (t(action.textKey) | async)! : '') }}</ax-text>
11695
- </ax-menu-item>
11696
- }
11697
- </ax-menu-item>
11698
- </ax-menu>
11713
+ <ax-button class="ax-sm" [text]="(t('@general:actions.add-item.title') | async)!">
11714
+ <ax-prefix>
11715
+ <ax-icon icon="fa-light fa-plus"></ax-icon>
11716
+ </ax-prefix>
11717
+ <ax-dropdown-panel>
11718
+ <ax-button-item-list>
11719
+ @for (action of fileActions(); track action.plugin) {
11720
+ <ax-button-item
11721
+ (onClick)="action.run(capabilities)"
11722
+ [text]="action.text ?? (action.textKey ? (t(action.textKey) | async)! : '')"
11723
+ >
11724
+ @if (action.icon) {
11725
+ <ax-prefix>
11726
+ <ax-icon [icon]="action.icon"></ax-icon>
11727
+ </ax-prefix>
11728
+ }
11729
+ </ax-button-item>
11730
+ }
11731
+ </ax-button-item-list>
11732
+ </ax-dropdown-panel>
11733
+ </ax-button>
11699
11734
  </div>
11700
11735
  </ax-prefix>
11701
11736
  }
@@ -11705,6 +11740,11 @@ class AXPGalleryWidgetEditComponent extends AXPValueWidgetComponent {
11705
11740
  }
11706
11741
 
11707
11742
  <ax-suffix>
11743
+ @if (downloadButton()) {
11744
+ <ax-button class="ax-sm" look="blank" (click)="download()" [disabled]="mediaViewerData().length === 0">
11745
+ <ax-icon icon="fa-light fa-download"></ax-icon>
11746
+ </ax-button>
11747
+ }
11708
11748
  @if (fullScreenButton()) {
11709
11749
  <ax-fullscreen-button> </ax-fullscreen-button>
11710
11750
  }
@@ -11723,7 +11763,7 @@ class AXPGalleryWidgetEditComponent extends AXPValueWidgetComponent {
11723
11763
  <ax-icon class="rtl:ax-rotate-180 ax-icon ax-icon-chevron-left"> </ax-icon>
11724
11764
  </ax-button>
11725
11765
  </ax-suffix>
11726
- </ax-media-viewer-container>`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXMediaViewerModule }, { kind: "component", type: i1$d.AXMediaViewerContainerComponent, selector: "ax-media-viewer-container", inputs: ["dataArray", "thumbnail", "pagination"] }, { kind: "component", type: i1$d.AXFileInfoComponent, selector: "ax-file-info" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: i2.AXDecoratorFullScreenButtonComponent, selector: "ax-fullscreen-button", inputs: ["element", "isActive"], outputs: ["elementChange", "isActiveChange"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i4$1.AXMenuItemComponent, selector: "ax-menu-item", inputs: ["name", "data", "disabled", "color"], outputs: ["onClick"] }, { kind: "component", type: i4$1.AXMenuComponent, selector: "ax-menu", inputs: ["orientation", "openOn", "closeOn", "items", "hasArrow"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11766
+ </ax-media-viewer-container>`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXMediaViewerModule }, { kind: "component", type: i1$d.AXMediaViewerContainerComponent, selector: "ax-media-viewer-container", inputs: ["dataArray", "thumbnail", "pagination"] }, { kind: "component", type: i1$d.AXFileInfoComponent, selector: "ax-file-info" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: i2.AXDecoratorFullScreenButtonComponent, selector: "ax-fullscreen-button", inputs: ["element", "isActive"], outputs: ["elementChange", "isActiveChange"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i5$2.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11727
11767
  }
11728
11768
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPGalleryWidgetEditComponent, decorators: [{
11729
11769
  type: Component,
@@ -11735,29 +11775,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
11735
11775
  @if (allowUpload()) {
11736
11776
  <ax-prefix>
11737
11777
  <div *translate="let t">
11738
- <ax-menu
11739
- [openOn]="'click'"
11740
- [hasArrow]="true"
11741
- style="--ax-comp-menu-action-list-horizontal-min-width:auto"
11742
- >
11743
- <ax-menu-item>
11744
- <ax-prefix>
11745
- <ax-icon icon="fa-light fa-plus"></ax-icon>
11746
- </ax-prefix>
11747
- <ax-text>{{ (t('@general:actions.add-item.title') | async)! }}</ax-text>
11748
-
11749
- @for (action of fileActions(); track action.plugin) {
11750
- <ax-menu-item (onClick)="action.run(capabilities)">
11751
- @if (action.icon) {
11752
- <ax-prefix>
11753
- <ax-icon [icon]="action.icon"></ax-icon>
11754
- </ax-prefix>
11755
- }
11756
- <ax-text>{{ action.text ?? (action.textKey ? (t(action.textKey) | async)! : '') }}</ax-text>
11757
- </ax-menu-item>
11758
- }
11759
- </ax-menu-item>
11760
- </ax-menu>
11778
+ <ax-button class="ax-sm" [text]="(t('@general:actions.add-item.title') | async)!">
11779
+ <ax-prefix>
11780
+ <ax-icon icon="fa-light fa-plus"></ax-icon>
11781
+ </ax-prefix>
11782
+ <ax-dropdown-panel>
11783
+ <ax-button-item-list>
11784
+ @for (action of fileActions(); track action.plugin) {
11785
+ <ax-button-item
11786
+ (onClick)="action.run(capabilities)"
11787
+ [text]="action.text ?? (action.textKey ? (t(action.textKey) | async)! : '')"
11788
+ >
11789
+ @if (action.icon) {
11790
+ <ax-prefix>
11791
+ <ax-icon [icon]="action.icon"></ax-icon>
11792
+ </ax-prefix>
11793
+ }
11794
+ </ax-button-item>
11795
+ }
11796
+ </ax-button-item-list>
11797
+ </ax-dropdown-panel>
11798
+ </ax-button>
11761
11799
  </div>
11762
11800
  </ax-prefix>
11763
11801
  }
@@ -11767,6 +11805,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
11767
11805
  }
11768
11806
 
11769
11807
  <ax-suffix>
11808
+ @if (downloadButton()) {
11809
+ <ax-button class="ax-sm" look="blank" (click)="download()" [disabled]="mediaViewerData().length === 0">
11810
+ <ax-icon icon="fa-light fa-download"></ax-icon>
11811
+ </ax-button>
11812
+ }
11770
11813
  @if (fullScreenButton()) {
11771
11814
  <ax-fullscreen-button> </ax-fullscreen-button>
11772
11815
  }
@@ -11791,7 +11834,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
11791
11834
  '[style.height]': 'height()',
11792
11835
  },
11793
11836
  changeDetection: ChangeDetectionStrategy.OnPush,
11794
- imports: [AXMediaViewerModule, AXDecoratorModule, AXButtonModule, AXMenuModule, AXTranslationModule, AsyncPipe],
11837
+ imports: [AXMediaViewerModule, AXDecoratorModule, AXButtonModule, AXDropdownModule, AXTranslationModule, AsyncPipe],
11795
11838
  }]
11796
11839
  }], propDecorators: { gallery: [{ type: i0.ViewChild, args: ['c', { isSignal: true }] }] } });
11797
11840
 
@@ -11803,12 +11846,17 @@ var galleryWidgetEdit_component = /*#__PURE__*/Object.freeze({
11803
11846
  class AXPGalleryWidgetViewComponent extends AXPValueWidgetComponent {
11804
11847
  constructor() {
11805
11848
  super(...arguments);
11849
+ this.loadingDialog = inject(AXLoadingDialogService);
11850
+ this.translationService = inject(AXTranslationService);
11806
11851
  this.internalValue = computed(() => {
11807
11852
  const parsedValue = this.getValue() ? JSON.parse(this.getValue()) : [];
11808
11853
  return Array.isArray(parsedValue) ? parsedValue.map((c) => c) : [parsedValue];
11809
11854
  }, ...(ngDevMode ? [{ debugName: "internalValue" }] : []));
11810
11855
  this.multiple = computed(() => this.options()['multiple'], ...(ngDevMode ? [{ debugName: "multiple" }] : []));
11811
- this.height = computed(() => this.options()['height'], ...(ngDevMode ? [{ debugName: "height" }] : []));
11856
+ this.height = computed(() => this.options()['height'] ?? 30, ...(ngDevMode ? [{ debugName: "height" }] : []));
11857
+ this.header = computed(() => this.options()['header'] ?? true, ...(ngDevMode ? [{ debugName: "header" }] : []));
11858
+ this.fullScreenButton = computed(() => this.options()['fullScreenButton'] ?? true, ...(ngDevMode ? [{ debugName: "fullScreenButton" }] : []));
11859
+ this.downloadButton = computed(() => this.options()['downloadButton'] ?? true, ...(ngDevMode ? [{ debugName: "downloadButton" }] : []));
11812
11860
  this.thumbnails = computed(() => this.internalValue().filter((i) => i.id !== this.activeMedia()?.id), ...(ngDevMode ? [{ debugName: "thumbnails" }] : []));
11813
11861
  this.activeMedia = signal(undefined, ...(ngDevMode ? [{ debugName: "activeMedia" }] : []));
11814
11862
  }
@@ -11818,6 +11866,30 @@ class AXPGalleryWidgetViewComponent extends AXPValueWidgetComponent {
11818
11866
  changeMediaSelected(media) {
11819
11867
  this.activeMedia.set(media);
11820
11868
  }
11869
+ /** Downloads the currently active media file. */
11870
+ async download() {
11871
+ const media = this.activeMedia();
11872
+ if (!media?.url) {
11873
+ return;
11874
+ }
11875
+ const loadingDialogRef = this.loadingDialog.show({
11876
+ title: await this.translationService.translateAsync('@general:actions.download.processing'),
11877
+ mode: 'indeterminate',
11878
+ progressColor: 'primary',
11879
+ status: await this.translationService.translateAsync('@general:actions.download.processing'),
11880
+ });
11881
+ try {
11882
+ const link = document.createElement('a');
11883
+ link.href = media.url;
11884
+ link.download = media.name ?? 'download';
11885
+ link.target = '_blank';
11886
+ link.rel = 'noopener noreferrer';
11887
+ link.click();
11888
+ }
11889
+ finally {
11890
+ loadingDialogRef.close();
11891
+ }
11892
+ }
11821
11893
  getMediaInfo(mediaName) {
11822
11894
  const extension = mediaName.split('.').pop()?.toLowerCase();
11823
11895
  switch (extension) {
@@ -11844,6 +11916,18 @@ class AXPGalleryWidgetViewComponent extends AXPValueWidgetComponent {
11844
11916
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AXPGalleryWidgetViewComponent, isStandalone: true, selector: "axp-gallery-widget-view", host: { properties: { "style.height": "height()" }, classAttribute: "ax-block" }, usesInheritance: true, ngImport: i0, template: `
11845
11917
  <div class="ax-grid ax-grid-cols-12 ax-gap-2">
11846
11918
  @if (internalValue().length) {
11919
+ @if (header()) {
11920
+ <div class="ax-col-start-1 ax-col-end-13 ax-flex ax-justify-end ax-gap-2 ax-mb-2">
11921
+ @if (downloadButton()) {
11922
+ <ax-button class="ax-sm" look="blank" (click)="download()">
11923
+ <ax-icon icon="fa-light fa-download"></ax-icon>
11924
+ </ax-button>
11925
+ }
11926
+ @if (fullScreenButton()) {
11927
+ <ax-fullscreen-button></ax-fullscreen-button>
11928
+ }
11929
+ </div>
11930
+ }
11847
11931
  <div class="ax-flex ax-items-center ax-justify-between ax-rounded-lg ax-col-start-1 ax-col-end-13">
11848
11932
  <div class="ax-flex ax-items-center md:ax-justify-start ax-justify-center ax-w-full ax-gap-3">
11849
11933
  <div class="ax-flex ax-flex-col ax-items-center ax-gap-4">
@@ -11905,7 +11989,7 @@ class AXPGalleryWidgetViewComponent extends AXPValueWidgetComponent {
11905
11989
  </axp-state-message>
11906
11990
  }
11907
11991
  </div>
11908
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXImageModule }, { kind: "component", type: i1$e.AXImageComponent, selector: "ax-image", inputs: ["width", "height", "overlayMode", "src", "alt", "priority", "lazy"], outputs: ["onLoad", "onError"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i2$1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "variant"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11992
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXImageModule }, { kind: "component", type: i1$e.AXImageComponent, selector: "ax-image", inputs: ["width", "height", "overlayMode", "src", "alt", "priority", "lazy"], outputs: ["onLoad", "onError"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: i2.AXDecoratorFullScreenButtonComponent, selector: "ax-fullscreen-button", inputs: ["element", "isActive"], outputs: ["elementChange", "isActiveChange"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i2$1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "variant"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXMediaViewerModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11909
11993
  }
11910
11994
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPGalleryWidgetViewComponent, decorators: [{
11911
11995
  type: Component,
@@ -11914,6 +11998,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
11914
11998
  template: `
11915
11999
  <div class="ax-grid ax-grid-cols-12 ax-gap-2">
11916
12000
  @if (internalValue().length) {
12001
+ @if (header()) {
12002
+ <div class="ax-col-start-1 ax-col-end-13 ax-flex ax-justify-end ax-gap-2 ax-mb-2">
12003
+ @if (downloadButton()) {
12004
+ <ax-button class="ax-sm" look="blank" (click)="download()">
12005
+ <ax-icon icon="fa-light fa-download"></ax-icon>
12006
+ </ax-button>
12007
+ }
12008
+ @if (fullScreenButton()) {
12009
+ <ax-fullscreen-button></ax-fullscreen-button>
12010
+ }
12011
+ </div>
12012
+ }
11917
12013
  <div class="ax-flex ax-items-center ax-justify-between ax-rounded-lg ax-col-start-1 ax-col-end-13">
11918
12014
  <div class="ax-flex ax-items-center md:ax-justify-start ax-justify-center ax-w-full ax-gap-3">
11919
12015
  <div class="ax-flex ax-flex-col ax-items-center ax-gap-4">
@@ -11981,7 +12077,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
11981
12077
  '[style.height]': 'height()',
11982
12078
  },
11983
12079
  changeDetection: ChangeDetectionStrategy.OnPush,
11984
- imports: [AXImageModule, AXDecoratorModule, AXLoadingModule, AXPStateMessageComponent],
12080
+ imports: [
12081
+ AXImageModule,
12082
+ AXDecoratorModule,
12083
+ AXLoadingModule,
12084
+ AXPStateMessageComponent,
12085
+ AXButtonModule,
12086
+ AXMediaViewerModule,
12087
+ ],
11985
12088
  }]
11986
12089
  }] });
11987
12090