@provoly/dashboard 1.2.4 → 1.2.6

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.
Files changed (110) hide show
  1. package/components/color-picker/color-picker.component.d.ts +1 -1
  2. package/dataset/components/dataset-detail/dataset-detail.component.d.ts +1 -1
  3. package/dataset/style/_o-pry-dataset-card.scss +7 -3
  4. package/esm2022/components/color-picker/color-picker.component.mjs +2 -2
  5. package/esm2022/components/scheme-picker/scheme-picker.component.mjs +2 -5
  6. package/esm2022/dataset/components/dataset-card/dataset-card.component.mjs +3 -3
  7. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +8 -6
  8. package/esm2022/dataset/style/css.component.mjs +2 -2
  9. package/esm2022/lib/core/components/share/access-rights-share-modal/access-rights-share-modal.component.mjs +9 -5
  10. package/esm2022/lib/core/components/snackbar/snackbar.service.mjs +3 -3
  11. package/esm2022/lib/core/i18n/en.translations.mjs +4 -2
  12. package/esm2022/lib/core/i18n/fr.translations.mjs +4 -2
  13. package/esm2022/lib/core/model/display-options.interface.mjs +7 -4
  14. package/esm2022/lib/dashboard/filter/components/filter-group/filter-group.component.mjs +3 -3
  15. package/esm2022/lib/dashboard/filter/style/css.component.mjs +2 -2
  16. package/esm2022/lib/dashboard/store/dashboard.selectors.mjs +3 -1
  17. package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +28 -57
  18. package/esm2022/presentation/components/presentation.component.mjs +15 -13
  19. package/esm2022/presentation/components/title-presentation/title-presentation.component.mjs +4 -7
  20. package/esm2022/presentation/presentation.module.mjs +10 -14
  21. package/esm2022/presentation/style/css.component.mjs +2 -2
  22. package/esm2022/restitution/style/css.component.mjs +2 -2
  23. package/esm2022/toolbox/components/automate-refresh/automate-refresh.component.mjs +2 -2
  24. package/esm2022/toolbox/components/clear-view/clear-view.component.mjs +2 -2
  25. package/esm2022/toolbox/components/dashboard-details/dashboard-details.component.mjs +4 -4
  26. package/esm2022/toolbox/components/delete/delete.component.mjs +2 -2
  27. package/esm2022/toolbox/components/drag-widgets/drag-widgets.component.mjs +2 -2
  28. package/esm2022/toolbox/components/edit-mode-action/edit-mode-action.component.mjs +2 -2
  29. package/esm2022/toolbox/components/edit-mode-toggle/edit-mode-toggle.component.mjs +2 -2
  30. package/esm2022/toolbox/components/edit-presentation/edit-presentation.component.mjs +64 -0
  31. package/esm2022/toolbox/components/filter-settings/filter-settings.component.mjs +2 -2
  32. package/esm2022/toolbox/components/launch-tab/launch-tab.component.mjs +2 -2
  33. package/esm2022/toolbox/components/refresh-datasets/refresh-datasets.component.mjs +2 -2
  34. package/esm2022/toolbox/components/save-view/save-view.component.mjs +7 -15
  35. package/esm2022/toolbox/components/select-grid-layout/select-grid-layout.component.mjs +2 -2
  36. package/esm2022/toolbox/components/share/share.component.mjs +2 -2
  37. package/esm2022/toolbox/components/switch-to-edit-content/switch-to-edit-content.component.mjs +2 -2
  38. package/esm2022/toolbox/components/toolbox.component.mjs +16 -13
  39. package/esm2022/toolbox/public-api.mjs +5 -3
  40. package/esm2022/toolbox/shared/presentation-form/presentation-form.component.mjs +97 -0
  41. package/esm2022/toolbox/shared/toolbox-action/toolbox-action.component.mjs +44 -0
  42. package/esm2022/toolbox/shared/toolbox-action-instanciator/toolbox-action-instanciator.component.mjs +58 -0
  43. package/esm2022/toolbox/style/css.component.mjs +2 -2
  44. package/esm2022/toolbox/toolbox.model.mjs +13 -5
  45. package/esm2022/toolbox/toolbox.module.mjs +21 -10
  46. package/esm2022/widgets/widget-analytic/component/widget-analytic.component.mjs +2 -2
  47. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +19 -14
  48. package/fesm2022/provoly-dashboard-components-color-picker.mjs +1 -1
  49. package/fesm2022/provoly-dashboard-components-color-picker.mjs.map +1 -1
  50. package/fesm2022/provoly-dashboard-components-scheme-picker.mjs +1 -4
  51. package/fesm2022/provoly-dashboard-components-scheme-picker.mjs.map +1 -1
  52. package/fesm2022/provoly-dashboard-dataset.mjs +11 -9
  53. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  54. package/fesm2022/provoly-dashboard-presentation.mjs +56 -87
  55. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  56. package/fesm2022/provoly-dashboard-restitution.mjs +2 -2
  57. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  58. package/fesm2022/provoly-dashboard-toolbox.mjs +205 -59
  59. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  60. package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs +1 -1
  61. package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs.map +1 -1
  62. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +18 -13
  63. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  64. package/fesm2022/provoly-dashboard.mjs +26 -14
  65. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  66. package/lib/core/i18n/en.translations.d.ts +2 -0
  67. package/lib/core/i18n/fr.translations.d.ts +2 -0
  68. package/lib/core/model/display-options.interface.d.ts +1 -0
  69. package/lib/dashboard/filter/style/_o-pry-filter-group.scss +0 -4
  70. package/lib/dashboard/store/dashboard.selectors.d.ts +1 -0
  71. package/package.json +7 -7
  72. package/presentation/components/add-edit-presentation/add-edit-presentation.component.d.ts +14 -20
  73. package/presentation/components/presentation.component.d.ts +8 -8
  74. package/presentation/style/_o-pry-new-presentation.scss +9 -10
  75. package/presentation/style/_o-pry-presentation.scss +1 -3
  76. package/styles/base/_utils.scss +3 -0
  77. package/styles/components/_a-btn.scss +4 -0
  78. package/styles/components/_m-actions-list.scss +5 -1
  79. package/styles/components/_m-presentation-title.scss +1 -5
  80. package/styles/components/_o-widget.scss +1 -0
  81. package/styles/layout/_o-workspace.scss +4 -21
  82. package/styles-theme/components-theme/_a-btn.theme.scss +16 -0
  83. package/styles-theme/main-theme.scss +0 -2
  84. package/toolbox/components/automate-refresh/automate-refresh.component.d.ts +1 -1
  85. package/toolbox/components/clear-view/clear-view.component.d.ts +1 -1
  86. package/toolbox/components/dashboard-details/dashboard-details.component.d.ts +1 -1
  87. package/toolbox/components/delete/delete.component.d.ts +1 -1
  88. package/toolbox/components/drag-widgets/drag-widgets.component.d.ts +1 -1
  89. package/toolbox/components/edit-mode-action/edit-mode-action.component.d.ts +1 -1
  90. package/toolbox/components/edit-mode-toggle/edit-mode-toggle.component.d.ts +1 -1
  91. package/toolbox/components/edit-presentation/edit-presentation.component.d.ts +22 -0
  92. package/toolbox/components/filter-settings/filter-settings.component.d.ts +1 -1
  93. package/toolbox/components/launch-tab/launch-tab.component.d.ts +1 -1
  94. package/toolbox/components/refresh-datasets/refresh-datasets.component.d.ts +1 -1
  95. package/toolbox/components/save-view/save-view.component.d.ts +5 -6
  96. package/toolbox/components/select-grid-layout/select-grid-layout.component.d.ts +1 -1
  97. package/toolbox/components/share/share.component.d.ts +1 -1
  98. package/toolbox/components/switch-to-edit-content/switch-to-edit-content.component.d.ts +1 -1
  99. package/toolbox/components/toolbox.component.d.ts +3 -2
  100. package/toolbox/public-api.d.ts +4 -2
  101. package/toolbox/shared/presentation-form/presentation-form.component.d.ts +42 -0
  102. package/toolbox/style/_o-dashboard-details.component.scss +0 -13
  103. package/toolbox/toolbox.model.d.ts +1 -1
  104. package/toolbox/toolbox.module.d.ts +14 -12
  105. package/widgets/widget-map/component/widget-map.component.d.ts +1 -3
  106. package/esm2022/toolbox/components/toolbox-action/toolbox-action.component.mjs +0 -46
  107. package/esm2022/toolbox/components/toolbox-action-instanciator/toolbox-action-instanciator.component.mjs +0 -58
  108. package/styles-theme/layout-theme/_o-workspace.theme.scss +0 -18
  109. /package/toolbox/{components → shared}/toolbox-action/toolbox-action.component.d.ts +0 -0
  110. /package/toolbox/{components → shared}/toolbox-action-instanciator/toolbox-action-instanciator.component.d.ts +0 -0
@@ -2,28 +2,29 @@ import * as i6 from '@angular/cdk/drag-drop';
2
2
  import { moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';
3
3
  import * as i2 from '@angular/cdk/overlay';
4
4
  import { OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
5
- import * as i3$1 from '@angular/common';
5
+ import * as i2$1 from '@angular/common';
6
6
  import { CommonModule } from '@angular/common';
7
7
  import * as i0 from '@angular/core';
8
8
  import { EventEmitter, Component, Optional, Inject, Input, Output, ViewEncapsulation, TemplateRef, ViewContainerRef, ViewChild, NgModule } from '@angular/core';
9
- import * as i4 from '@angular/forms';
10
- import { FormsModule } from '@angular/forms';
9
+ import * as i3$1 from '@angular/forms';
10
+ import { FormGroup, FormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
11
11
  import * as i3 from '@provoly/dashboard';
12
- import { SubscriptionnerDirective, DashboardSelectors, PRY_ACCESS_TOKEN, DashboardActions, ConfigActions, DataSourceSelectors, ClassSelectors, FieldSelectors, FieldType, NamedQueryTypes, DataSourceActions, MIME_TYPE_RESULTSET, LibraryTypes, ViewMode, DashboardGridLayout, WidgetPlacementUtils, SearchActions, PryAccessRightsShareModalComponent, PryOverlayModule, PryCoreModule, PryDashboardModule, PrySelectModule, PryIconModule, PryToggleModule, PryShareModule, PryI18nModule } from '@provoly/dashboard';
12
+ import { SubscriptionnerDirective, DashboardSelectors, PRY_ACCESS_TOKEN, DashboardActions, ConfigActions, DataSourceSelectors, ClassSelectors, FieldSelectors, FieldType, NamedQueryTypes, DataSourceActions, MIME_TYPE_RESULTSET, DEFAULT_DASHBOARD_ICON_URL, LibraryTypes, ViewMode, DashboardGridLayout, WidgetPlacementUtils, SearchActions, PryAccessRightsShareModalComponent, PryOverlayModule, PryCoreModule, PryDashboardModule, PrySelectModule, PryIconModule, PryToggleModule, PryShareModule, PryI18nModule } from '@provoly/dashboard';
13
13
  import * as i5 from '@provoly/dashboard/components/checkbox';
14
14
  import { PryCheckboxModule } from '@provoly/dashboard/components/checkbox';
15
15
  import * as i6$1 from '@provoly/dashboard/components/stepper';
16
16
  import { PryStepperModule } from '@provoly/dashboard/components/stepper';
17
- import { map, switchMap, of, BehaviorSubject, combineLatest, take } from 'rxjs';
17
+ import { switchMap, of, BehaviorSubject, combineLatest, map, take } from 'rxjs';
18
18
  import * as i1 from '@ngrx/store';
19
19
  import * as i3$2 from '@angular/cdk/bidi';
20
20
  import { TemplatePortal } from '@angular/cdk/portal';
21
21
  import { withLatestFrom, map as map$1 } from 'rxjs/operators';
22
22
  import { v4 } from 'uuid';
23
- import * as i5$1 from '@angular/cdk/a11y';
24
- import { A11yModule } from '@angular/cdk/a11y';
25
- import * as i5$2 from '@provoly/dashboard/components/text-editor';
23
+ import { MetadataActions, MetadataSelectors } from '@provoly/dashboard/components/metadata-editor';
24
+ import * as i5$1 from '@provoly/dashboard/components/text-editor';
26
25
  import { PryTextEditorModule } from '@provoly/dashboard/components/text-editor';
26
+ import * as i5$2 from '@angular/cdk/a11y';
27
+ import { A11yModule } from '@angular/cdk/a11y';
27
28
 
28
29
  class ToolboxActionComponent extends SubscriptionnerDirective {
29
30
  constructor(store, access) {
@@ -32,9 +33,7 @@ class ToolboxActionComponent extends SubscriptionnerDirective {
32
33
  this.access = access;
33
34
  this.displayLabels = true;
34
35
  this.closeOptions = new EventEmitter();
35
- this.currentManifest$ = this.store
36
- .select(DashboardSelectors.presentation)
37
- .pipe(map((manifest) => manifest?.current));
36
+ this.currentManifest$ = this.store.select(DashboardSelectors.currentManifest);
38
37
  this.canModify$ = this.currentManifest$.pipe(switchMap((manifest) => {
39
38
  return manifest ? this.access?.canModifyPresentation(manifest) : of(false);
40
39
  }));
@@ -112,7 +111,7 @@ class DragWidgetsComponent extends ToolboxActionComponent {
112
111
  $event.stopPropagation();
113
112
  }
114
113
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DragWidgetsComponent, deps: [{ token: i1.Store }, { token: PRY_ACCESS_TOKEN, optional: true }, { token: i3.ToolboxManifestService }, { token: i3.ToolboxMenuService }], target: i0.ɵɵFactoryTarget.Component }); }
115
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: DragWidgetsComponent, selector: "pry-drag-widgets", usesInheritance: true, ngImport: i0, template: "<div class=\"toolbox-draggable\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"openMenu($event)\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n id=\"widget_insert\"\n aria-haspopup=\"true\"\n aria-controls=\"IDpanel\"\n aria-expanded=\"false\"\n >\n @if (displayLabels) {\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.dragIndication' | i18n }}</span>\n {{ '@pry.toolbox.drag' | i18n }}\n }\n </button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"mainOpened\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayPositions]=\"[connectedPosition]\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"mainOpened = false\"\n>\n <div class=\"o-draggable-menu\" aria-label=\"Ins\u00E9rer un widget (par glisser/d\u00E9poser)\" aria-labelledby=\"widget_insert\">\n <ul class=\"o-draggable-menu__list\">\n @for (menu of menu$ | async; track menu.label) {\n <li class=\"o-draggable-menu__list__item\">\n <button class=\"a-btn\" aria-haspopup=\"true\" aria-expanded=\"false\">\n <pry-icon [iconSvg]=\"menu.icon\"></pry-icon>\n @if (displayLabels) {\n {{ menu.label | i18n }}\n }\n </button>\n\n <ul class=\"o-draggable-menu__list__submenu\">\n @for (sub of menu.sub; track sub.label) {\n <li class=\"o-draggable-menu__list__submenu__item\">\n <button class=\"a-btn\" (dragstart)=\"dragStart($event, sub.type)\" draggable=\"true\">\n <img [alt]=\"sub.label\" [height]=\"24\" [width]=\"24\" [src]=\"sub.icon | getSecuredImage | async\" />\n @if (displayLabels) {\n {{ sub.label | i18n }}\n }\n </button>\n </li>\n }\n </ul>\n </li>\n }\n </ul>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.GetSecuredImagePipe, name: "getSecuredImage" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
114
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: DragWidgetsComponent, selector: "pry-drag-widgets", usesInheritance: true, ngImport: i0, template: "<div class=\"toolbox-draggable\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"openMenu($event)\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n id=\"widget_insert\"\n aria-haspopup=\"true\"\n aria-controls=\"IDpanel\"\n aria-expanded=\"false\"\n >\n @if (displayLabels) {\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.dragIndication' | i18n }}</span>\n {{ '@pry.toolbox.drag' | i18n }}\n }\n </button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"mainOpened\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayPositions]=\"[connectedPosition]\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"mainOpened = false\"\n>\n <div class=\"o-draggable-menu\" aria-label=\"Ins\u00E9rer un widget (par glisser/d\u00E9poser)\" aria-labelledby=\"widget_insert\">\n <ul class=\"o-draggable-menu__list\">\n @for (menu of menu$ | async; track menu.label) {\n <li class=\"o-draggable-menu__list__item\">\n <button class=\"a-btn\" aria-haspopup=\"true\" aria-expanded=\"false\">\n <pry-icon [iconSvg]=\"menu.icon\"></pry-icon>\n @if (displayLabels) {\n {{ menu.label | i18n }}\n }\n </button>\n\n <ul class=\"o-draggable-menu__list__submenu\">\n @for (sub of menu.sub; track sub.label) {\n <li class=\"o-draggable-menu__list__submenu__item\">\n <button class=\"a-btn\" (dragstart)=\"dragStart($event, sub.type)\" draggable=\"true\">\n <img [alt]=\"sub.label\" [height]=\"24\" [width]=\"24\" [src]=\"sub.icon | getSecuredImage | async\" />\n @if (displayLabels) {\n {{ sub.label | i18n }}\n }\n </button>\n </li>\n }\n </ul>\n </li>\n }\n </ul>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.GetSecuredImagePipe, name: "getSecuredImage" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
116
115
  }
117
116
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DragWidgetsComponent, decorators: [{
118
117
  type: Component,
@@ -133,7 +132,7 @@ class EditModeToggleComponent extends ToolboxActionComponent {
133
132
  this.store.dispatch(DashboardActions.toggleEditionMode({}));
134
133
  }
135
134
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EditModeToggleComponent, deps: [{ token: i1.Store }, { token: PRY_ACCESS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
136
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: EditModeToggleComponent, selector: "pry-edit-mode-toggle", usesInheritance: true, ngImport: i0, template: "<pry-toggle\n [ngModel]=\"modeEdition$ | async\"\n (ngModelChange)=\"toggleEditionMode()\"\n [alwaysActive]=\"true\"\n mode=\"action\"\n dir=\"ltr\"\n>\n {{ ((modeEdition$ | async) ? '@pry.toolbox.editOff' : '@pry.toolbox.edit') | i18n }}\n</pry-toggle>\n", dependencies: [{ kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3$2.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i3.PryToggleComponent, selector: "pry-toggle", inputs: ["alwaysActive", "disabled", "mode", "size", "dir", "leftword", "rightword"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
135
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: EditModeToggleComponent, selector: "pry-edit-mode-toggle", usesInheritance: true, ngImport: i0, template: "<pry-toggle\n [ngModel]=\"modeEdition$ | async\"\n (ngModelChange)=\"toggleEditionMode()\"\n [alwaysActive]=\"true\"\n mode=\"action\"\n dir=\"ltr\"\n>\n {{ ((modeEdition$ | async) ? '@pry.toolbox.editOff' : '@pry.toolbox.edit') | i18n }}\n</pry-toggle>\n", dependencies: [{ kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3$2.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i3.PryToggleComponent, selector: "pry-toggle", inputs: ["alwaysActive", "disabled", "mode", "size", "dir", "leftword", "rightword"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
137
136
  }
138
137
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EditModeToggleComponent, decorators: [{
139
138
  type: Component,
@@ -147,11 +146,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
147
146
 
148
147
  class PrySelectGridLayoutCssComponent {
149
148
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PrySelectGridLayoutCssComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
150
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PrySelectGridLayoutCssComponent, selector: "pry-toolbox-css", ngImport: i0, template: '', isInline: true, styles: [".o-select-grid-layout{margin:0;padding:0}.o-select-grid-layout li{list-style:none}.o-select-grid-layout-wrapper{overflow-y:auto;max-height:80%}.o-select-grid-layout-modal-wrapper{max-width:80%}.o-select-grid-layout{overflow-y:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,auto));grid-gap:1.875rem;padding:.25rem .25rem 1.875rem}.o-select-grid-layout__item .a-btn{display:flex;flex-direction:column;align-items:center;justify-content:space-around;width:100%;height:18.75rem;padding:.9375rem;border-radius:0;text-align:left}.o-select-grid-layout__item .a-btn:focus{outline:2px solid #35b99f}.o-select-grid-layout__item .a-btn:focus:not(:focus-visible){outline:0}.o-select-grid-layout__item .a-btn:focus-visible{outline:0;border-radius:.125rem;box-shadow:0 0 0 2px #fff,0 0 0 4px #35b99f}.o-select-grid-layout__item .a-btn strong{display:block}.o-select-grid-layout__item .a-btn .a-p{margin-bottom:0;font-size:13px}.o-select-grid-layout__item__preview{height:6.25rem;width:100%}\n", ".o-select-grid-layout-wrapper{overflow-y:auto;max-height:80%}.o-select-grid-layout-modal-wrapper{max-width:60%;padding:1.875rem 2.5rem}.o-filters{width:100%}.o-filters__header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1.875rem;border-bottom:1px solid #dfe5ec}.o-filters__header h2{padding:0}.o-filters__header .back-button{transform:rotate(180deg)}.o-filters__content{display:flex;flex-direction:column;padding-top:1.25rem}.o-filters__content>.a-btn{margin-top:1.25rem;align-self:center}.o-filters__filter td:first-child{min-width:20%;max-width:30%}.o-filters__filter td:nth-child(2){min-width:50%;max-width:60%}.o-filters__filter td:nth-child(3){width:8%}.o-filters__filter td:nth-child(4){width:8%}.o-filters__filter td:last-child{width:4%}.o-filters__filter.cdk-drag-preview{background-color:#fff}.o-filters__filter.cdk-drag-preview td{padding:.75rem .5rem}.o-filters__filter .cdk-drag-handle{pointer-events:auto}.o-filters__filter .cdk-drag-handle:hover{cursor:grab}.o-filters tr.o-filters__filter{cursor:default}.o-filters__no-filters{padding-bottom:1.875rem}\n", ".o-draggable-menu{width:fit-content}.o-draggable-menu__list{display:flex;flex-direction:column;padding:.25rem 0;align-items:flex-end}\n", ".refresh-rs>div{padding-left:0;padding-right:0}.refresh-rs button.refresh-line{border-radius:0;padding:0 .9375rem}.refresh-rs button.refresh-line:hover{font-weight:400;background-color:#0000001a}.refresh-rs button.refresh-line.-selected{background-color:#00000026}\n", "#dashboard-details-panel h1,#dashboard-details-panel h2,#dashboard-details-panel h3,#dashboard-details-panel h4,#dashboard-details-panel h5,#dashboard-details-panel h6{padding:0;margin:0;color:#253043}#dashboard-details-panel h5{font-size:.875rem}#dashboard-details-panel span,#dashboard-details-panel p{font-size:.875rem;color:#263340;white-space:pre-wrap}#dashboard-details-panel div{padding-bottom:10px}#dashboard-details-panel ul,#dashboard-details-panel ol{margin:0;line-height:1rem}#dashboard-details-panel li{color:#253043;font-size:.875rem}#dashboard-details-panel table{border-collapse:collapse}#dashboard-details-panel table thead tr{border-bottom-width:.0625rem;border-bottom-style:solid}#dashboard-details-panel table thead tr th{padding-top:.75rem;padding-bottom:.75rem;text-align:left}#dashboard-details-panel table tbody tr{border-bottom-width:.0625rem;border-bottom-style:solid}#dashboard-details-panel table tbody tr td{padding:.75rem .5rem;text-align:left}.o-dashboard-details.a-btn{gap:.5rem}.o-dashboard-details.a-btn:hover{transition:background-color .3s ease,color .3s ease;background-color:#d8e7f7}#dashboard-details-panel{background-color:#fff;box-shadow:0 2px 7px #00000017;width:100%;max-width:31.25rem;overflow-x:hidden;overflow-y:auto;max-height:25rem;padding:.5rem .9375rem .9375rem .625rem}#dashboard-details-panel .o-modal__top{margin:0;padding:0}#dashboard-details-panel .o-modal__top__title{font-size:1.125rem;color:#253043;padding-bottom:.3125rem}#dashboard-details-panel .o-modal__content{padding:0}\n"], encapsulation: i0.ViewEncapsulation.None }); }
149
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PrySelectGridLayoutCssComponent, selector: "pry-toolbox-css", ngImport: i0, template: '', isInline: true, styles: [".o-select-grid-layout{margin:0;padding:0}.o-select-grid-layout li{list-style:none}.o-select-grid-layout-wrapper{overflow-y:auto;max-height:80%}.o-select-grid-layout-modal-wrapper{max-width:80%}.o-select-grid-layout{overflow-y:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,auto));grid-gap:1.875rem;padding:.25rem .25rem 1.875rem}.o-select-grid-layout__item .a-btn{display:flex;flex-direction:column;align-items:center;justify-content:space-around;width:100%;height:18.75rem;padding:.9375rem;border-radius:0;text-align:left}.o-select-grid-layout__item .a-btn:focus{outline:2px solid #35b99f}.o-select-grid-layout__item .a-btn:focus:not(:focus-visible){outline:0}.o-select-grid-layout__item .a-btn:focus-visible{outline:0;border-radius:.125rem;box-shadow:0 0 0 2px #fff,0 0 0 4px #35b99f}.o-select-grid-layout__item .a-btn strong{display:block}.o-select-grid-layout__item .a-btn .a-p{margin-bottom:0;font-size:13px}.o-select-grid-layout__item__preview{height:6.25rem;width:100%}\n", ".o-select-grid-layout-wrapper{overflow-y:auto;max-height:80%}.o-select-grid-layout-modal-wrapper{max-width:60%;padding:1.875rem 2.5rem}.o-filters{width:100%}.o-filters__header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1.875rem;border-bottom:1px solid #dfe5ec}.o-filters__header h2{padding:0}.o-filters__header .back-button{transform:rotate(180deg)}.o-filters__content{display:flex;flex-direction:column;padding-top:1.25rem}.o-filters__content>.a-btn{margin-top:1.25rem;align-self:center}.o-filters__filter td:first-child{min-width:20%;max-width:30%}.o-filters__filter td:nth-child(2){min-width:50%;max-width:60%}.o-filters__filter td:nth-child(3){width:8%}.o-filters__filter td:nth-child(4){width:8%}.o-filters__filter td:last-child{width:4%}.o-filters__filter.cdk-drag-preview{background-color:#fff}.o-filters__filter.cdk-drag-preview td{padding:.75rem .5rem}.o-filters__filter .cdk-drag-handle{pointer-events:auto}.o-filters__filter .cdk-drag-handle:hover{cursor:grab}.o-filters tr.o-filters__filter{cursor:default}.o-filters__no-filters{padding-bottom:1.875rem}\n", ".o-draggable-menu{width:fit-content}.o-draggable-menu__list{display:flex;flex-direction:column;padding:.25rem 0;align-items:flex-end}\n", ".refresh-rs>div{padding-left:0;padding-right:0}.refresh-rs button.refresh-line{border-radius:0;padding:0 .9375rem}.refresh-rs button.refresh-line:hover{font-weight:400;background-color:#0000001a}.refresh-rs button.refresh-line.-selected{background-color:#00000026}\n", "#dashboard-details-panel h1,#dashboard-details-panel h2,#dashboard-details-panel h3,#dashboard-details-panel h4,#dashboard-details-panel h5,#dashboard-details-panel h6{padding:0;margin:0;color:#253043}#dashboard-details-panel h5{font-size:.875rem}#dashboard-details-panel span,#dashboard-details-panel p{font-size:.875rem;color:#263340;white-space:pre-wrap}#dashboard-details-panel div{padding-bottom:10px}#dashboard-details-panel ul,#dashboard-details-panel ol{margin:0;line-height:1rem}#dashboard-details-panel li{color:#253043;font-size:.875rem}#dashboard-details-panel table{border-collapse:collapse}#dashboard-details-panel table thead tr{border-bottom-width:.0625rem;border-bottom-style:solid}#dashboard-details-panel table thead tr th{padding-top:.75rem;padding-bottom:.75rem;text-align:left}#dashboard-details-panel table tbody tr{border-bottom-width:.0625rem;border-bottom-style:solid}#dashboard-details-panel table tbody tr td{padding:.75rem .5rem;text-align:left}#dashboard-details-panel{background-color:#fff;box-shadow:0 2px 7px #00000017;width:100%;max-width:31.25rem;overflow-x:hidden;overflow-y:auto;max-height:25rem;padding:.5rem .9375rem .9375rem .625rem}#dashboard-details-panel .o-modal__top{margin:0;padding:0}#dashboard-details-panel .o-modal__top__title{font-size:1.125rem;color:#253043;padding-bottom:.3125rem}#dashboard-details-panel .o-modal__content{padding:0}\n"], encapsulation: i0.ViewEncapsulation.None }); }
151
150
  }
152
151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PrySelectGridLayoutCssComponent, decorators: [{
153
152
  type: Component,
154
- args: [{ selector: 'pry-toolbox-css', template: '', encapsulation: ViewEncapsulation.None, styles: [".o-select-grid-layout{margin:0;padding:0}.o-select-grid-layout li{list-style:none}.o-select-grid-layout-wrapper{overflow-y:auto;max-height:80%}.o-select-grid-layout-modal-wrapper{max-width:80%}.o-select-grid-layout{overflow-y:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,auto));grid-gap:1.875rem;padding:.25rem .25rem 1.875rem}.o-select-grid-layout__item .a-btn{display:flex;flex-direction:column;align-items:center;justify-content:space-around;width:100%;height:18.75rem;padding:.9375rem;border-radius:0;text-align:left}.o-select-grid-layout__item .a-btn:focus{outline:2px solid #35b99f}.o-select-grid-layout__item .a-btn:focus:not(:focus-visible){outline:0}.o-select-grid-layout__item .a-btn:focus-visible{outline:0;border-radius:.125rem;box-shadow:0 0 0 2px #fff,0 0 0 4px #35b99f}.o-select-grid-layout__item .a-btn strong{display:block}.o-select-grid-layout__item .a-btn .a-p{margin-bottom:0;font-size:13px}.o-select-grid-layout__item__preview{height:6.25rem;width:100%}\n", ".o-select-grid-layout-wrapper{overflow-y:auto;max-height:80%}.o-select-grid-layout-modal-wrapper{max-width:60%;padding:1.875rem 2.5rem}.o-filters{width:100%}.o-filters__header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1.875rem;border-bottom:1px solid #dfe5ec}.o-filters__header h2{padding:0}.o-filters__header .back-button{transform:rotate(180deg)}.o-filters__content{display:flex;flex-direction:column;padding-top:1.25rem}.o-filters__content>.a-btn{margin-top:1.25rem;align-self:center}.o-filters__filter td:first-child{min-width:20%;max-width:30%}.o-filters__filter td:nth-child(2){min-width:50%;max-width:60%}.o-filters__filter td:nth-child(3){width:8%}.o-filters__filter td:nth-child(4){width:8%}.o-filters__filter td:last-child{width:4%}.o-filters__filter.cdk-drag-preview{background-color:#fff}.o-filters__filter.cdk-drag-preview td{padding:.75rem .5rem}.o-filters__filter .cdk-drag-handle{pointer-events:auto}.o-filters__filter .cdk-drag-handle:hover{cursor:grab}.o-filters tr.o-filters__filter{cursor:default}.o-filters__no-filters{padding-bottom:1.875rem}\n", ".o-draggable-menu{width:fit-content}.o-draggable-menu__list{display:flex;flex-direction:column;padding:.25rem 0;align-items:flex-end}\n", ".refresh-rs>div{padding-left:0;padding-right:0}.refresh-rs button.refresh-line{border-radius:0;padding:0 .9375rem}.refresh-rs button.refresh-line:hover{font-weight:400;background-color:#0000001a}.refresh-rs button.refresh-line.-selected{background-color:#00000026}\n", "#dashboard-details-panel h1,#dashboard-details-panel h2,#dashboard-details-panel h3,#dashboard-details-panel h4,#dashboard-details-panel h5,#dashboard-details-panel h6{padding:0;margin:0;color:#253043}#dashboard-details-panel h5{font-size:.875rem}#dashboard-details-panel span,#dashboard-details-panel p{font-size:.875rem;color:#263340;white-space:pre-wrap}#dashboard-details-panel div{padding-bottom:10px}#dashboard-details-panel ul,#dashboard-details-panel ol{margin:0;line-height:1rem}#dashboard-details-panel li{color:#253043;font-size:.875rem}#dashboard-details-panel table{border-collapse:collapse}#dashboard-details-panel table thead tr{border-bottom-width:.0625rem;border-bottom-style:solid}#dashboard-details-panel table thead tr th{padding-top:.75rem;padding-bottom:.75rem;text-align:left}#dashboard-details-panel table tbody tr{border-bottom-width:.0625rem;border-bottom-style:solid}#dashboard-details-panel table tbody tr td{padding:.75rem .5rem;text-align:left}.o-dashboard-details.a-btn{gap:.5rem}.o-dashboard-details.a-btn:hover{transition:background-color .3s ease,color .3s ease;background-color:#d8e7f7}#dashboard-details-panel{background-color:#fff;box-shadow:0 2px 7px #00000017;width:100%;max-width:31.25rem;overflow-x:hidden;overflow-y:auto;max-height:25rem;padding:.5rem .9375rem .9375rem .625rem}#dashboard-details-panel .o-modal__top{margin:0;padding:0}#dashboard-details-panel .o-modal__top__title{font-size:1.125rem;color:#253043;padding-bottom:.3125rem}#dashboard-details-panel .o-modal__content{padding:0}\n"] }]
153
+ args: [{ selector: 'pry-toolbox-css', template: '', encapsulation: ViewEncapsulation.None, styles: [".o-select-grid-layout{margin:0;padding:0}.o-select-grid-layout li{list-style:none}.o-select-grid-layout-wrapper{overflow-y:auto;max-height:80%}.o-select-grid-layout-modal-wrapper{max-width:80%}.o-select-grid-layout{overflow-y:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,auto));grid-gap:1.875rem;padding:.25rem .25rem 1.875rem}.o-select-grid-layout__item .a-btn{display:flex;flex-direction:column;align-items:center;justify-content:space-around;width:100%;height:18.75rem;padding:.9375rem;border-radius:0;text-align:left}.o-select-grid-layout__item .a-btn:focus{outline:2px solid #35b99f}.o-select-grid-layout__item .a-btn:focus:not(:focus-visible){outline:0}.o-select-grid-layout__item .a-btn:focus-visible{outline:0;border-radius:.125rem;box-shadow:0 0 0 2px #fff,0 0 0 4px #35b99f}.o-select-grid-layout__item .a-btn strong{display:block}.o-select-grid-layout__item .a-btn .a-p{margin-bottom:0;font-size:13px}.o-select-grid-layout__item__preview{height:6.25rem;width:100%}\n", ".o-select-grid-layout-wrapper{overflow-y:auto;max-height:80%}.o-select-grid-layout-modal-wrapper{max-width:60%;padding:1.875rem 2.5rem}.o-filters{width:100%}.o-filters__header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1.875rem;border-bottom:1px solid #dfe5ec}.o-filters__header h2{padding:0}.o-filters__header .back-button{transform:rotate(180deg)}.o-filters__content{display:flex;flex-direction:column;padding-top:1.25rem}.o-filters__content>.a-btn{margin-top:1.25rem;align-self:center}.o-filters__filter td:first-child{min-width:20%;max-width:30%}.o-filters__filter td:nth-child(2){min-width:50%;max-width:60%}.o-filters__filter td:nth-child(3){width:8%}.o-filters__filter td:nth-child(4){width:8%}.o-filters__filter td:last-child{width:4%}.o-filters__filter.cdk-drag-preview{background-color:#fff}.o-filters__filter.cdk-drag-preview td{padding:.75rem .5rem}.o-filters__filter .cdk-drag-handle{pointer-events:auto}.o-filters__filter .cdk-drag-handle:hover{cursor:grab}.o-filters tr.o-filters__filter{cursor:default}.o-filters__no-filters{padding-bottom:1.875rem}\n", ".o-draggable-menu{width:fit-content}.o-draggable-menu__list{display:flex;flex-direction:column;padding:.25rem 0;align-items:flex-end}\n", ".refresh-rs>div{padding-left:0;padding-right:0}.refresh-rs button.refresh-line{border-radius:0;padding:0 .9375rem}.refresh-rs button.refresh-line:hover{font-weight:400;background-color:#0000001a}.refresh-rs button.refresh-line.-selected{background-color:#00000026}\n", "#dashboard-details-panel h1,#dashboard-details-panel h2,#dashboard-details-panel h3,#dashboard-details-panel h4,#dashboard-details-panel h5,#dashboard-details-panel h6{padding:0;margin:0;color:#253043}#dashboard-details-panel h5{font-size:.875rem}#dashboard-details-panel span,#dashboard-details-panel p{font-size:.875rem;color:#263340;white-space:pre-wrap}#dashboard-details-panel div{padding-bottom:10px}#dashboard-details-panel ul,#dashboard-details-panel ol{margin:0;line-height:1rem}#dashboard-details-panel li{color:#253043;font-size:.875rem}#dashboard-details-panel table{border-collapse:collapse}#dashboard-details-panel table thead tr{border-bottom-width:.0625rem;border-bottom-style:solid}#dashboard-details-panel table thead tr th{padding-top:.75rem;padding-bottom:.75rem;text-align:left}#dashboard-details-panel table tbody tr{border-bottom-width:.0625rem;border-bottom-style:solid}#dashboard-details-panel table tbody tr td{padding:.75rem .5rem;text-align:left}#dashboard-details-panel{background-color:#fff;box-shadow:0 2px 7px #00000017;width:100%;max-width:31.25rem;overflow-x:hidden;overflow-y:auto;max-height:25rem;padding:.5rem .9375rem .9375rem .625rem}#dashboard-details-panel .o-modal__top{margin:0;padding:0}#dashboard-details-panel .o-modal__top__title{font-size:1.125rem;color:#253043;padding-bottom:.3125rem}#dashboard-details-panel .o-modal__content{padding:0}\n"] }]
155
154
  }] });
156
155
 
157
156
  var FilterSteps;
@@ -389,7 +388,7 @@ class PryFilterSettingsComponent extends ToolboxActionComponent {
389
388
  return `${attributeId}@${datasetId}`;
390
389
  }
391
390
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryFilterSettingsComponent, deps: [{ token: i1.Store }, { token: PRY_ACCESS_TOKEN, optional: true }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i3.FilterFactoryService }, { token: i0.Injector }, { token: i3.PryI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
392
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryFilterSettingsComponent, selector: "pry-filter-settings", inputs: { label: "label" }, viewQueries: [{ propertyName: "templateSettings", first: true, predicate: ["settings"], descendants: true, read: TemplateRef }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: "<pry-toolbox-css></pry-toolbox-css>\n<div class=\"save-manifest-container\">\n <div style=\"display: none\">\n <ng-template #container></ng-template>\n </div>\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n [disabled]=\"(attributes$ | async)?.length === 0\"\n (click)=\"toggleSettings()\"\n aria-haspopup=\"dialog\"\n >\n @if (label) {\n {{ '@pry.filters.label' | i18n }}\n }\n </button>\n</div>\n\n<ng-template #settings>\n <div class=\"o-filters\">\n <div class=\"o-filters__header\">\n @if (currentStep === FilterSteps.LIST) {\n <h2>{{ '@pry.filters.label' | i18n }}</h2>\n }\n @if (currentStep === FilterSteps.CREATION || currentStep === FilterSteps.EDITION) {\n <div class=\"u-display-flex -row -align-center\">\n <button (click)=\"goBack()\" type=\"button\" class=\"back-button\">\n <pry-icon iconSvg=\"chevron_right\"></pry-icon>\n </button>\n <h2>\n {{\n (currentStep === FilterSteps.CREATION ? '@pry.filters.creation.create' : '@pry.filters.creation.update')\n | i18n\n }}\n </h2>\n </div>\n }\n <button (click)=\"toggleSettings()\" type=\"button\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n @if (currentStep === FilterSteps.LIST) {\n <div class=\"o-filters__content\">\n @if ((attributes$ | async)?.length === 0) {\n <div class=\"a-table-wrapper\"></div>\n } @else {\n @if (filters.length > 0) {\n <table class=\"a-table\" role=\"presentation\">\n <tbody cdkDropList [cdkDropListData]=\"filters\" (cdkDropListDropped)=\"drop($event)\">\n @for (filter of filters; track filter.id) {\n <tr class=\"o-filters__filter\" cdkDrag>\n <td>\n <span>{{ filter.name }}</span>\n </td>\n <td>\n <span>{{ getFilterAttributes(filter, 3) }}</span>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"deleteFilter(filter.id)\">\n {{ '@pry.action.delete' | i18n }}\n </button>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"goToEdition(filter)\">\n {{ '@pry.filters.list.modify' | i18n }}\n </button>\n </td>\n <td cdkDragHandle>\n <pry-icon iconSvg=\"drag_indicator\"></pry-icon>\n </td>\n </tr>\n }\n </tbody>\n </table>\n } @else {\n <span class=\"o-filters__no-filters\">{{ '@pry.filters.noFilters' | i18n }}</span>\n }\n <button (click)=\"goToCreation()\" class=\"a-btn a-btn--primary\">{{ '@pry.filters.list.add' | i18n }}</button>\n }\n </div>\n }\n @if (currentStep === FilterSteps.CREATION || currentStep === FilterSteps.EDITION) {\n <div class=\"o-filters__content\">\n <div class=\"m-form-label-field\">\n <label for=\"filterName\" class=\"a-label\">{{ '@pry.filters.creation.name' | i18n }}</label>\n <input id=\"filterName\" class=\"a-form-field\" type=\"text\" [(ngModel)]=\"filter.name\" />\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"filterType\" class=\"a-label\">{{ '@pry.filters.creation.type' | i18n }}</label>\n <pry-select\n id=\"filterType\"\n [placeholder]=\"'@pry.filters.creation.type' | i18n\"\n [items]=\"types$ | async\"\n bindLabel=\"label\"\n bindValue=\"value\"\n [(ngModel)]=\"filter.type\"\n (ngModelChange)=\"updateFilterType($event)\"\n >\n </pry-select>\n </div>\n @if ((currentFilterComponentType$ | async) === 'date') {\n <div class=\"m-form-label-field u-display-flex -row\">\n <label for=\"date-range\" class=\"a-label\">{{ '@pry.filters.creation.dateRange' | i18n }}</label>\n <pry-checkbox\n id=\"date-range\"\n [(ngModel)]=\"filter.hasDateRange\"\n (ngModelChange)=\"this.currentOperators$.next(getOperators())\"\n />\n </div>\n }\n @if ((currentFilterComponentType$ | async) === 'list') {\n <div class=\"m-form-label-field\">\n <label for=\"possibleValues\" class=\"a-label\">{{ '@pry.filters.creation.values' | i18n }}</label>\n <input\n id=\"possibleValues\"\n class=\"a-form-field\"\n type=\"text\"\n [(ngModel)]=\"filter.possibleValues\"\n placeholder=\"valeur1, valeur2, valeur3\"\n />\n </div>\n }\n @if ((currentFilterComponentType$ | async) === 'autocomplete') {\n <div class=\"m-form-label-field\">\n <label for=\"limit\" class=\"a-label\">{{ '@pry.filters.creation.limit' | i18n }}</label>\n <input id=\"limit\" class=\"a-form-field\" type=\"number\" min=\"0\" max=\"50\" [(ngModel)]=\"filter.limit\" />\n </div>\n }\n <div class=\"m-form-label-field\">\n <label for=\"attributes\" class=\"a-label\">{{ '@pry.filters.creation.attributes' | i18n }}</label>\n <pry-select\n id=\"attributes\"\n [multiple]=\"true\"\n [clearable]=\"true\"\n [closeOnSelect]=\"false\"\n [items]=\"attributes$ | async\"\n [ngModel]=\"filter.attributes\"\n (ngModelChange)=\"selectAttribute($event)\"\n [placeholder]=\"'@pry.filters.creation.attributes' | i18n\"\n bindLabel=\"label\"\n bindValue=\"customId\"\n bindClasses=\"classes\"\n >\n </pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"operations\" class=\"a-label\">{{ '@pry.filters.attributes.operator' | i18n }}</label>\n <pry-select\n id=\"operations\"\n [items]=\"currentOperators$ | async\"\n [(ngModel)]=\"filter.operator\"\n [placeholder]=\"'@pry.filters.attributes.operator' | i18n\"\n bindLabel=\"label\"\n bindValue=\"value\"\n [disabled]=\"\n (currentFilterComponentType$ | async) === 'list' ||\n (currentFilterComponentType$ | async) === 'autocomplete'\n \"\n >\n </pry-select>\n </div>\n <button\n class=\"a-btn a-btn--primary\"\n (click)=\"submitFilter()\"\n [disabled]=\"!(filter.name && filter.type && filter.attributes.length !== 0 && filter.operator)\"\n type=\"submit\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "directive", type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i6.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: PrySelectGridLayoutCssComponent, selector: "pry-toolbox-css" }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
391
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryFilterSettingsComponent, selector: "pry-filter-settings", inputs: { label: "label" }, viewQueries: [{ propertyName: "templateSettings", first: true, predicate: ["settings"], descendants: true, read: TemplateRef }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: "<pry-toolbox-css></pry-toolbox-css>\n<div class=\"save-manifest-container\">\n <div style=\"display: none\">\n <ng-template #container></ng-template>\n </div>\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n [disabled]=\"(attributes$ | async)?.length === 0\"\n (click)=\"toggleSettings()\"\n aria-haspopup=\"dialog\"\n >\n @if (label) {\n {{ '@pry.filters.label' | i18n }}\n }\n </button>\n</div>\n\n<ng-template #settings>\n <div class=\"o-filters\">\n <div class=\"o-filters__header\">\n @if (currentStep === FilterSteps.LIST) {\n <h2>{{ '@pry.filters.label' | i18n }}</h2>\n }\n @if (currentStep === FilterSteps.CREATION || currentStep === FilterSteps.EDITION) {\n <div class=\"u-display-flex -row -align-center\">\n <button (click)=\"goBack()\" type=\"button\" class=\"back-button\">\n <pry-icon iconSvg=\"chevron_right\"></pry-icon>\n </button>\n <h2>\n {{\n (currentStep === FilterSteps.CREATION ? '@pry.filters.creation.create' : '@pry.filters.creation.update')\n | i18n\n }}\n </h2>\n </div>\n }\n <button (click)=\"toggleSettings()\" type=\"button\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n @if (currentStep === FilterSteps.LIST) {\n <div class=\"o-filters__content\">\n @if ((attributes$ | async)?.length === 0) {\n <div class=\"a-table-wrapper\"></div>\n } @else {\n @if (filters.length > 0) {\n <table class=\"a-table\" role=\"presentation\">\n <tbody cdkDropList [cdkDropListData]=\"filters\" (cdkDropListDropped)=\"drop($event)\">\n @for (filter of filters; track filter.id) {\n <tr class=\"o-filters__filter\" cdkDrag>\n <td>\n <span>{{ filter.name }}</span>\n </td>\n <td>\n <span>{{ getFilterAttributes(filter, 3) }}</span>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"deleteFilter(filter.id)\">\n {{ '@pry.action.delete' | i18n }}\n </button>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"goToEdition(filter)\">\n {{ '@pry.filters.list.modify' | i18n }}\n </button>\n </td>\n <td cdkDragHandle>\n <pry-icon iconSvg=\"drag_indicator\"></pry-icon>\n </td>\n </tr>\n }\n </tbody>\n </table>\n } @else {\n <span class=\"o-filters__no-filters\">{{ '@pry.filters.noFilters' | i18n }}</span>\n }\n <button (click)=\"goToCreation()\" class=\"a-btn a-btn--primary\">{{ '@pry.filters.list.add' | i18n }}</button>\n }\n </div>\n }\n @if (currentStep === FilterSteps.CREATION || currentStep === FilterSteps.EDITION) {\n <div class=\"o-filters__content\">\n <div class=\"m-form-label-field\">\n <label for=\"filterName\" class=\"a-label\">{{ '@pry.filters.creation.name' | i18n }}</label>\n <input id=\"filterName\" class=\"a-form-field\" type=\"text\" [(ngModel)]=\"filter.name\" />\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"filterType\" class=\"a-label\">{{ '@pry.filters.creation.type' | i18n }}</label>\n <pry-select\n id=\"filterType\"\n [placeholder]=\"'@pry.filters.creation.type' | i18n\"\n [items]=\"types$ | async\"\n bindLabel=\"label\"\n bindValue=\"value\"\n [(ngModel)]=\"filter.type\"\n (ngModelChange)=\"updateFilterType($event)\"\n >\n </pry-select>\n </div>\n @if ((currentFilterComponentType$ | async) === 'date') {\n <div class=\"m-form-label-field u-display-flex -row\">\n <label for=\"date-range\" class=\"a-label\">{{ '@pry.filters.creation.dateRange' | i18n }}</label>\n <pry-checkbox\n id=\"date-range\"\n [(ngModel)]=\"filter.hasDateRange\"\n (ngModelChange)=\"this.currentOperators$.next(getOperators())\"\n />\n </div>\n }\n @if ((currentFilterComponentType$ | async) === 'list') {\n <div class=\"m-form-label-field\">\n <label for=\"possibleValues\" class=\"a-label\">{{ '@pry.filters.creation.values' | i18n }}</label>\n <input\n id=\"possibleValues\"\n class=\"a-form-field\"\n type=\"text\"\n [(ngModel)]=\"filter.possibleValues\"\n placeholder=\"valeur1, valeur2, valeur3\"\n />\n </div>\n }\n @if ((currentFilterComponentType$ | async) === 'autocomplete') {\n <div class=\"m-form-label-field\">\n <label for=\"limit\" class=\"a-label\">{{ '@pry.filters.creation.limit' | i18n }}</label>\n <input id=\"limit\" class=\"a-form-field\" type=\"number\" min=\"0\" max=\"50\" [(ngModel)]=\"filter.limit\" />\n </div>\n }\n <div class=\"m-form-label-field\">\n <label for=\"attributes\" class=\"a-label\">{{ '@pry.filters.creation.attributes' | i18n }}</label>\n <pry-select\n id=\"attributes\"\n [multiple]=\"true\"\n [clearable]=\"true\"\n [closeOnSelect]=\"false\"\n [items]=\"attributes$ | async\"\n [ngModel]=\"filter.attributes\"\n (ngModelChange)=\"selectAttribute($event)\"\n [placeholder]=\"'@pry.filters.creation.attributes' | i18n\"\n bindLabel=\"label\"\n bindValue=\"customId\"\n bindClasses=\"classes\"\n >\n </pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"operations\" class=\"a-label\">{{ '@pry.filters.attributes.operator' | i18n }}</label>\n <pry-select\n id=\"operations\"\n [items]=\"currentOperators$ | async\"\n [(ngModel)]=\"filter.operator\"\n [placeholder]=\"'@pry.filters.attributes.operator' | i18n\"\n bindLabel=\"label\"\n bindValue=\"value\"\n [disabled]=\"\n (currentFilterComponentType$ | async) === 'list' ||\n (currentFilterComponentType$ | async) === 'autocomplete'\n \"\n >\n </pry-select>\n </div>\n <button\n class=\"a-btn a-btn--primary\"\n (click)=\"submitFilter()\"\n [disabled]=\"!(filter.name && filter.type && filter.attributes.length !== 0 && filter.operator)\"\n type=\"submit\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3$1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "directive", type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i6.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: PrySelectGridLayoutCssComponent, selector: "pry-toolbox-css" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
393
392
  }
394
393
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryFilterSettingsComponent, decorators: [{
395
394
  type: Component,
@@ -450,7 +449,7 @@ class NamedQueryComponent {
450
449
  this.toggle();
451
450
  }
452
451
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NamedQueryComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
453
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: NamedQueryComponent, selector: "pry-named-query", inputs: { label: "label" }, ngImport: i0, template: "<div class=\"o-named-query\">\n <div class=\"combobox-container\" (dragleave)=\"dragLeave($event)\">\n <button type=\"button\" class=\"a-btn a-btn--action\" (click)=\"toggle()\">\n <pry-icon iconSvg=\"data_usage\"></pry-icon>\n @if (label) {\n {{ '@pry.toolbox.resultSet' | i18n }}\n }\n </button>\n\n <div class=\"combobox\" *ngIf=\"displayCombo\" (mouseleave)=\"toggle()\">\n @for (rs of namedQueries$ | async; track rs) {\n <div draggable=\"true\" (dragstart)=\"dragStart($event, rs)\">\n {{ rs | translateId: { type: 'datasource', output: 'name' } | async }}\n </div>\n }\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
452
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: NamedQueryComponent, selector: "pry-named-query", inputs: { label: "label" }, ngImport: i0, template: "<div class=\"o-named-query\">\n <div class=\"combobox-container\" (dragleave)=\"dragLeave($event)\">\n <button type=\"button\" class=\"a-btn a-btn--action\" (click)=\"toggle()\">\n <pry-icon iconSvg=\"data_usage\"></pry-icon>\n @if (label) {\n {{ '@pry.toolbox.resultSet' | i18n }}\n }\n </button>\n\n <div class=\"combobox\" *ngIf=\"displayCombo\" (mouseleave)=\"toggle()\">\n @for (rs of namedQueries$ | async; track rs) {\n <div draggable=\"true\" (dragstart)=\"dragStart($event, rs)\">\n {{ rs | translateId: { type: 'datasource', output: 'name' } | async }}\n </div>\n }\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
454
453
  }
455
454
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NamedQueryComponent, decorators: [{
456
455
  type: Component,
@@ -459,6 +458,92 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
459
458
  type: Input
460
459
  }] } });
461
460
 
461
+ class PresentationFormComponent extends SubscriptionnerDirective {
462
+ set selectedPresentation(presentation) {
463
+ this.selectedPresentation$.next(presentation);
464
+ }
465
+ constructor(store) {
466
+ super();
467
+ this.store = store;
468
+ this.form = new FormGroup({
469
+ name: new FormControl(undefined, {
470
+ validators: [Validators.required, Validators.maxLength(50)],
471
+ nonNullable: true
472
+ }),
473
+ description: new FormControl(undefined, [Validators.maxLength(200)]),
474
+ theme: new FormControl(undefined),
475
+ additionalInformation: new FormControl(undefined)
476
+ });
477
+ this.image = DEFAULT_DASHBOARD_ICON_URL;
478
+ this.type = LibraryTypes.ILLUSTRATION;
479
+ this.possibleThemes = [];
480
+ this.mode = 'meta';
481
+ this.themePrefix = null;
482
+ this.selectedPresentation$ = new BehaviorSubject(undefined);
483
+ this.formValue = new BehaviorSubject(undefined);
484
+ this.isFormValid = new BehaviorSubject(false);
485
+ this.store.dispatch(MetadataActions.loadMetadata());
486
+ this.subscriptions.add(this.store.select(MetadataSelectors.metadata).subscribe((metadata) => {
487
+ this.possibleThemes = metadata?.find((meta) => meta.name === '_theme')?.allowedValues ?? [];
488
+ }));
489
+ this.subscriptions.add(this.form.valueChanges.subscribe(() => {
490
+ this.isFormValid.next(this.form.valid);
491
+ this.formValue.next(this.getFormValue());
492
+ }));
493
+ }
494
+ ngOnInit() {
495
+ this.image = this.selectedPresentation$.value?.image ?? DEFAULT_DASHBOARD_ICON_URL;
496
+ this.subscriptions.add(this.selectedPresentation$.subscribe((presentation) => {
497
+ const theme = presentation?.metadata?.find((metadata) => metadata.metadataDef.name === '_theme')?.value;
498
+ if (!!theme)
499
+ this.form.patchValue({ theme });
500
+ }));
501
+ }
502
+ ngAfterViewInit() {
503
+ setTimeout(() => {
504
+ if (this.selectedPresentation$.value)
505
+ this.form.patchValue(this.selectedPresentation$.value);
506
+ });
507
+ }
508
+ get name() {
509
+ return this.form.controls['name'];
510
+ }
511
+ get description() {
512
+ return this.form.controls['description'];
513
+ }
514
+ get theme() {
515
+ return this.form.controls['theme'];
516
+ }
517
+ get additionalInformation() {
518
+ return this.form.controls['additionalInformation'];
519
+ }
520
+ getFormValue() {
521
+ return {
522
+ name: this.name.value,
523
+ description: this.description.value === null ? undefined : this.description.value,
524
+ theme: this.theme.value === null ? undefined : this.theme.value,
525
+ additionalInformation: this.additionalInformation.value === null ? undefined : this.additionalInformation.value,
526
+ image: this.image
527
+ };
528
+ }
529
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PresentationFormComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
530
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PresentationFormComponent, selector: "pry-presentation-form", inputs: { mode: "mode", themePrefix: "themePrefix", selectedPresentation: "selectedPresentation" }, outputs: { formValue: "formValue", isFormValid: "isFormValid" }, usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" class=\"o-presentation-form\">\n <div class=\"m-form-label-field -width-full\">\n <label class=\"a-label\" for=\"presentation_name\">{{ '@pry.presentation.form.name' | i18n }}</label>\n <input\n type=\"text\"\n id=\"presentation_name\"\n formControlName=\"name\"\n placeholder=\"{{ '@pry.presentation.form.name' | i18n }}\"\n class=\"a-form-field\"\n maxlength=\"50\"\n required\n />\n @if (name.touched && name.errors?.['required']) {\n <label for=\"presentation_name\" class=\"a-label a-label--help -error\">\n {{ '@pry.presentation.required' | i18n }}\n </label>\n }\n @if (name.touched && name.errors?.['maxlength']) {\n <label for=\"presentation_name\" class=\"a-label a-label--help -error\">\n {{ '@pry.presentation.maxLength' | i18n: { len: '50' } }}\n </label>\n }\n </div>\n <div class=\"m-form-label-field -width-full\">\n <label class=\"a-label\" for=\"presentation_description\">{{ '@pry.presentation.form.description' | i18n }}</label>\n <textarea\n formControlName=\"description\"\n id=\"presentation_description\"\n name=\"description\"\n cols=\"30\"\n rows=\"5\"\n maxlength=\"200\"\n placeholder=\"{{ '@pry.presentation.form.description' | i18n }}\"\n class=\"a-form-field\"\n ></textarea>\n @if (description.touched && description.errors?.['maxlength']) {\n <label for=\"presentation_description\" class=\"a-label a-label--help -error\">\n {{ '@pry.presentation.maxLength' | i18n: { len: '200' } }}\n </label>\n }\n </div>\n <div class=\"m-form-label-field -width-full\" *ngIf=\"mode === 'theme'\">\n <label class=\"a-label\" for=\"presentation_theme\">{{ '@pry.presentation.form.theme' | i18n }}</label>\n <pry-select\n id=\"presentation_theme\"\n [items]=\"possibleThemes\"\n formControlName=\"theme\"\n [clearable]=\"true\"\n [i18nPrefix]=\"themePrefix\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field -width-full\">\n <label class=\"a-label\" for=\"presentation_image\">{{ '@pry.presentation.form.image' | i18n }}</label>\n <div class=\"o-file-input\">\n <pry-select-image\n id=\"presentation_image\"\n (changed)=\"image = $event\"\n [iconUrl]=\"image\"\n [mode]=\"type\"\n ></pry-select-image>\n </div>\n </div>\n <div class=\"m-form-label-field -width-full\">\n <pry-text-editor formControlName=\"additionalInformation\"></pry-text-editor>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "component", type: i3.PrySelectImageComponent, selector: "pry-select-image", inputs: ["iconUrl", "size", "mode"], outputs: ["toggled", "changed"] }, { kind: "component", type: i3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i5$1.PryTextEditorComponent, selector: "pry-text-editor", inputs: ["tabView"] }, { kind: "directive", type: i3$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
531
+ }
532
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PresentationFormComponent, decorators: [{
533
+ type: Component,
534
+ args: [{ selector: 'pry-presentation-form', template: "<form [formGroup]=\"form\" class=\"o-presentation-form\">\n <div class=\"m-form-label-field -width-full\">\n <label class=\"a-label\" for=\"presentation_name\">{{ '@pry.presentation.form.name' | i18n }}</label>\n <input\n type=\"text\"\n id=\"presentation_name\"\n formControlName=\"name\"\n placeholder=\"{{ '@pry.presentation.form.name' | i18n }}\"\n class=\"a-form-field\"\n maxlength=\"50\"\n required\n />\n @if (name.touched && name.errors?.['required']) {\n <label for=\"presentation_name\" class=\"a-label a-label--help -error\">\n {{ '@pry.presentation.required' | i18n }}\n </label>\n }\n @if (name.touched && name.errors?.['maxlength']) {\n <label for=\"presentation_name\" class=\"a-label a-label--help -error\">\n {{ '@pry.presentation.maxLength' | i18n: { len: '50' } }}\n </label>\n }\n </div>\n <div class=\"m-form-label-field -width-full\">\n <label class=\"a-label\" for=\"presentation_description\">{{ '@pry.presentation.form.description' | i18n }}</label>\n <textarea\n formControlName=\"description\"\n id=\"presentation_description\"\n name=\"description\"\n cols=\"30\"\n rows=\"5\"\n maxlength=\"200\"\n placeholder=\"{{ '@pry.presentation.form.description' | i18n }}\"\n class=\"a-form-field\"\n ></textarea>\n @if (description.touched && description.errors?.['maxlength']) {\n <label for=\"presentation_description\" class=\"a-label a-label--help -error\">\n {{ '@pry.presentation.maxLength' | i18n: { len: '200' } }}\n </label>\n }\n </div>\n <div class=\"m-form-label-field -width-full\" *ngIf=\"mode === 'theme'\">\n <label class=\"a-label\" for=\"presentation_theme\">{{ '@pry.presentation.form.theme' | i18n }}</label>\n <pry-select\n id=\"presentation_theme\"\n [items]=\"possibleThemes\"\n formControlName=\"theme\"\n [clearable]=\"true\"\n [i18nPrefix]=\"themePrefix\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field -width-full\">\n <label class=\"a-label\" for=\"presentation_image\">{{ '@pry.presentation.form.image' | i18n }}</label>\n <div class=\"o-file-input\">\n <pry-select-image\n id=\"presentation_image\"\n (changed)=\"image = $event\"\n [iconUrl]=\"image\"\n [mode]=\"type\"\n ></pry-select-image>\n </div>\n </div>\n <div class=\"m-form-label-field -width-full\">\n <pry-text-editor formControlName=\"additionalInformation\"></pry-text-editor>\n </div>\n</form>\n" }]
535
+ }], ctorParameters: () => [{ type: i1.Store }], propDecorators: { mode: [{
536
+ type: Input
537
+ }], themePrefix: [{
538
+ type: Input
539
+ }], selectedPresentation: [{
540
+ type: Input
541
+ }], formValue: [{
542
+ type: Output
543
+ }], isFormValid: [{
544
+ type: Output
545
+ }] } });
546
+
462
547
  class SaveViewComponent extends ToolboxActionComponent {
463
548
  constructor(store, access, overlay, viewContainerRef) {
464
549
  super(store, access);
@@ -467,12 +552,12 @@ class SaveViewComponent extends ToolboxActionComponent {
467
552
  this.mode = 'saveAs';
468
553
  this.saveAsOpened = false;
469
554
  this.accessRightsByGroup = {};
470
- this.type = LibraryTypes.ILLUSTRATION;
471
555
  this.saveTypeOpened = false;
472
556
  this.nbPages = 0;
473
557
  this.initialNbPages = 0;
474
558
  this.hasInitial = false;
475
559
  this.ViewMode = ViewMode;
560
+ this.isFormValid = false;
476
561
  this.subscriptions.add(this.store.select(DashboardSelectors.presentation).subscribe((presentation) => {
477
562
  this.currentManifest = presentation.current
478
563
  ? JSON.parse(JSON.stringify(presentation.current))
@@ -542,12 +627,6 @@ class SaveViewComponent extends ToolboxActionComponent {
542
627
  changeAccessRights($event) {
543
628
  this.currentManifest.accessRightsByGroup = $event;
544
629
  }
545
- changeValue($event) {
546
- this.currentManifest.name = $event;
547
- }
548
- changeDescr($event) {
549
- this.currentManifest.description = $event;
550
- }
551
630
  openSaveAs() {
552
631
  this.overlayRefSaveAs = this.overlay.create(new OverlayConfig({
553
632
  hasBackdrop: true,
@@ -559,9 +638,6 @@ class SaveViewComponent extends ToolboxActionComponent {
559
638
  this.overlayRefSaveAs.backdropClick().subscribe((_) => this.toggleSaveAs());
560
639
  this.overlayRefSaveAs.attach(new TemplatePortal(this.templateSaveAs, this.viewContainerRef));
561
640
  }
562
- isValid() {
563
- return (this.currentManifest?.name && 0 < this.currentManifest?.name.length && this.currentManifest?.name.length <= 50);
564
- }
565
641
  toggleDirectSaveType() {
566
642
  this.saveTypeOpened = !this.saveTypeOpened;
567
643
  if (this.saveTypeOpened) {
@@ -618,11 +694,11 @@ class SaveViewComponent extends ToolboxActionComponent {
618
694
  }
619
695
  }
620
696
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SaveViewComponent, deps: [{ token: i1.Store }, { token: PRY_ACCESS_TOKEN, optional: true }, { token: i2.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
621
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: SaveViewComponent, selector: "pry-save-view", inputs: { mode: "mode" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "saveAs", first: true, predicate: ["saveAs"], descendants: true }, { propertyName: "directiveSave", first: true, predicate: ["directiveSave"], descendants: true }, { propertyName: "firstFocusdirective", first: true, predicate: ["firstFocusdirective"], descendants: true }, { propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "confirm", first: true, predicate: ["confirm"], descendants: true }, { propertyName: "cancel", first: true, predicate: ["cancel"], descendants: true }, { propertyName: "templateSaveAs", first: true, predicate: ["templateSaveAs"], descendants: true, read: TemplateRef }, { propertyName: "templateDirectSaveType", first: true, predicate: ["templateDirectSaveType"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<ng-container *pryAccess=\"{ module: 'dashboard', page: 'toolbox', action: 'save' }\">\n <ng-container *ngIf=\"mode === 'directSave'\">\n <div [attr.aria-expanded]=\"saveTypeOpened\" aria-controls=\"directiveSave\" aria-describedby=\"infoTooltip_directSave\">\n @if (canModify$ | async) {\n <button\n type=\"button\"\n #directiveSave\n class=\"a-btn a-btn--primary\"\n (click)=\"directSave()\"\n [disabled]=\"!(isCurrentPresentationModified$ | async)\"\n >\n <ng-container *ngIf=\"displayLabels\">{{ '@pry.toolbox.save' | i18n }} ({{ nbPages }})</ng-container>\n </button>\n }\n </div>\n </ng-container>\n <ng-container *ngIf=\"mode === 'saveAs'\">\n <div\n class=\"save-manifest-container\"\n [attr.aria-expanded]=\"saveAsOpened\"\n aria-controls=\"saveModal\"\n aria-describedby=\"infoTooltip_saveAs\"\n >\n <button type=\"button\" #saveAs class=\"a-btn a-btn--secondary\" (click)=\"toggleSaveAs()\" aria-haspopup=\"dialog\">\n <ng-container *ngIf=\"displayLabels\">{{ '@pry.toolbox.rename' | i18n }} ({{ nbPages }})</ng-container>\n </button>\n </div>\n </ng-container>\n</ng-container>\n<ng-template #templateSaveAs>\n <div\n class=\"o-modal\"\n (click)=\"$event.stopPropagation()\"\n id=\"saveModal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_saveModal\"\n (keydown.escape)=\"closeModals()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">{{ '@pry.toolbox.rename' | i18n }}</h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #cross (keydown.shift.tab)=\"focusValidation()\" (click)=\"toggleSaveAs()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <pry-stepper #stepper>\n <pry-step>\n <h4 class=\"m-stepper-item__title\" *stepTitle>{{ '@pry.presentation.add.info' | i18n }}</h4>\n <form>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" id=\"label-name\" for=\"input-name\">{{ '@pry.toolbox.manifest.name' | i18n }}</label>\n <input\n type=\"text\"\n id=\"input-name\"\n name=\"input-name\"\n class=\"a-form-field\"\n placeholder=\"{{ '@pry.toolbox.manifest.name' | i18n }}\"\n [ngModel]=\"currentManifest!.name\"\n (ngModelChange)=\"changeValue($event)\"\n aria-labelledby=\"label-name\"\n maxlength=\"50\"\n #input\n />\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" id=\"label-descr\" for=\"input-descr\">{{\n '@pry.toolbox.manifest.description' | i18n\n }}</label>\n <input\n type=\"text\"\n id=\"input-descr\"\n name=\"input-descr\"\n class=\"a-form-field\"\n placeholder=\"{{ '@pry.toolbox.manifest.description' | i18n }}\"\n [ngModel]=\"currentManifest!.description\"\n (ngModelChange)=\"changeDescr($event)\"\n aria-labelledby=\"label-name\"\n maxlength=\"200\"\n />\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"presentation_image\">{{ '@pry.presentation.form.image' | i18n }}</label>\n <div class=\"o-file-input\">\n <pry-select-image\n id=\"presentation_image\"\n (changed)=\"currentManifest!.image = $event\"\n [iconUrl]=\"currentManifest!.image\"\n [mode]=\"type\"\n ></pry-select-image>\n </div>\n </div>\n\n <div class=\"m-btn-group\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n #cancel\n (click)=\"toggleSaveAs()\"\n (keydown.tab)=\"disableNextStep()\"\n >\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n (click)=\"stepper.next()\"\n [disabled]=\"!isValid()\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.action.next' | i18n }}\n </button>\n </div>\n </form>\n </pry-step>\n <pry-step>\n <h4 class=\"m-stepper-item__title\" *stepTitle>{{ '@pry.restitution.share' | i18n }}</h4>\n <pry-access-rights-share\n [(ngModel)]=\"accessRightsByGroup\"\n (ngModelChange)=\"changeAccessRights($event)\"\n [manifestDescription]=\"currentManifest\"\n ></pry-access-rights-share>\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"stepper.prev()\">\n {{ '@pry.action.back' | i18n }}\n </button>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n #confirm\n (click)=\"save()\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.restitution.share' | i18n }}\n </button>\n </div>\n </pry-step>\n </pry-stepper>\n </div>\n</ng-template>\n\n<ng-template #templateDirectSaveType>\n <div\n class=\"o-modal\"\n (click)=\"$event.stopPropagation()\"\n id=\"directiveSave\"\n role=\"dialog\"\n aria-labelledby=\"dialog_title\"\n (keydown.escape)=\"closeModals()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title_\">{{ '@pry.toolbox.save' | i18n }}</h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #firstFocusdirective (click)=\"toggleDirectSaveType()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div>\n <h3>{{ '@pry.snack.pagesChanged' | i18n }}</h3>\n </div>\n <div class=\"m-btn-group\">\n <button class=\"a-btn a-btn--primary\" (click)=\"save()\">\n {{ '@pry.toolbox.save' | i18n }}\n </button>\n <button class=\"a-btn a-btn--primary\" (click)=\"rename()\">\n {{ '@pry.toolbox.rename' | i18n }}\n </button>\n <button class=\"a-btn a-btn--primary\" (click)=\"restore()\" (keydown.tab)=\"closeModals()\">\n {{ '@pry.toolbox.restore' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: i3.PrySelectImageComponent, selector: "pry-select-image", inputs: ["iconUrl", "size", "mode"], outputs: ["toggled", "changed"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i6$1.PryStepperComponent, selector: "pry-stepper", inputs: ["isConsultMode"], outputs: ["lastStepCompleted", "activeIndexChange"] }, { kind: "component", type: i6$1.PryStepComponent, selector: "pry-step", inputs: ["setActiveState"] }, { kind: "directive", type: i6$1.PryStepTitleDirective, selector: "[stepTitle]" }, { kind: "component", type: i3.PryAccessRightsShareComponent, selector: "pry-access-rights-share", inputs: ["manifestDescription", "allowedGroups"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
697
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: SaveViewComponent, selector: "pry-save-view", inputs: { mode: "mode" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "saveAs", first: true, predicate: ["saveAs"], descendants: true }, { propertyName: "directiveSave", first: true, predicate: ["directiveSave"], descendants: true }, { propertyName: "firstFocusdirective", first: true, predicate: ["firstFocusdirective"], descendants: true }, { propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "confirm", first: true, predicate: ["confirm"], descendants: true }, { propertyName: "cancel", first: true, predicate: ["cancel"], descendants: true }, { propertyName: "templateSaveAs", first: true, predicate: ["templateSaveAs"], descendants: true, read: TemplateRef }, { propertyName: "templateDirectSaveType", first: true, predicate: ["templateDirectSaveType"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<ng-container *pryAccess=\"{ module: 'dashboard', page: 'toolbox', action: 'save' }\">\n <ng-container *ngIf=\"mode === 'directSave'\">\n <div [attr.aria-expanded]=\"saveTypeOpened\" aria-controls=\"directiveSave\" aria-describedby=\"infoTooltip_directSave\">\n @if (canModify$ | async) {\n <button\n type=\"button\"\n #directiveSave\n class=\"a-btn a-btn--primary\"\n (click)=\"directSave()\"\n [disabled]=\"!(isCurrentPresentationModified$ | async)\"\n >\n <ng-container *ngIf=\"displayLabels\">{{ '@pry.toolbox.save' | i18n }} ({{ nbPages }})</ng-container>\n </button>\n }\n </div>\n </ng-container>\n <ng-container *ngIf=\"mode === 'saveAs'\">\n <div\n class=\"save-manifest-container\"\n [attr.aria-expanded]=\"saveAsOpened\"\n aria-controls=\"saveModal\"\n aria-describedby=\"infoTooltip_saveAs\"\n >\n <button type=\"button\" #saveAs class=\"a-btn a-btn--secondary\" (click)=\"toggleSaveAs()\" aria-haspopup=\"dialog\">\n <ng-container *ngIf=\"displayLabels\">{{ '@pry.toolbox.rename' | i18n }} ({{ nbPages }})</ng-container>\n </button>\n </div>\n </ng-container>\n</ng-container>\n<ng-template #templateSaveAs>\n <div\n class=\"o-modal\"\n (click)=\"$event.stopPropagation()\"\n id=\"saveModal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_saveModal\"\n (keydown.escape)=\"closeModals()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">{{ '@pry.toolbox.rename' | i18n }}</h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #cross (keydown.shift.tab)=\"focusValidation()\" (click)=\"toggleSaveAs()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <pry-stepper #stepper>\n <pry-step>\n <h4 class=\"m-stepper-item__title\" *stepTitle>{{ '@pry.presentation.add.info' | i18n }}</h4>\n <pry-presentation-form\n [selectedPresentation]=\"currentManifest\"\n (formValue)=\"formValue = $event\"\n (isFormValid)=\"isFormValid = $event\"\n ></pry-presentation-form>\n <div class=\"m-btn-group\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n #cancel\n (click)=\"toggleSaveAs()\"\n (keydown.tab)=\"disableNextStep()\"\n >\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n (click)=\"stepper.next()\"\n [disabled]=\"!isFormValid\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.action.next' | i18n }}\n </button>\n </div>\n </pry-step>\n <pry-step>\n <h4 class=\"m-stepper-item__title\" *stepTitle>{{ '@pry.restitution.share' | i18n }}</h4>\n <pry-access-rights-share\n [(ngModel)]=\"accessRightsByGroup\"\n (ngModelChange)=\"changeAccessRights($event)\"\n [manifestDescription]=\"currentManifest\"\n ></pry-access-rights-share>\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"stepper.prev()\">\n {{ '@pry.action.back' | i18n }}\n </button>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n #confirm\n (click)=\"save()\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.restitution.share' | i18n }}\n </button>\n </div>\n </pry-step>\n </pry-stepper>\n </div>\n</ng-template>\n\n<ng-template #templateDirectSaveType>\n <div\n class=\"o-modal\"\n (click)=\"$event.stopPropagation()\"\n id=\"directiveSave\"\n role=\"dialog\"\n aria-labelledby=\"dialog_title\"\n (keydown.escape)=\"closeModals()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title_\">{{ '@pry.toolbox.save' | i18n }}</h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #firstFocusdirective (click)=\"toggleDirectSaveType()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div>\n <h3>{{ '@pry.snack.pagesChanged' | i18n }}</h3>\n </div>\n <div class=\"m-btn-group\">\n <button class=\"a-btn a-btn--primary\" (click)=\"save()\">\n {{ '@pry.toolbox.save' | i18n }}\n </button>\n <button class=\"a-btn a-btn--primary\" (click)=\"rename()\">\n {{ '@pry.toolbox.rename' | i18n }}\n </button>\n <button class=\"a-btn a-btn--primary\" (click)=\"restore()\" (keydown.tab)=\"closeModals()\">\n {{ '@pry.toolbox.restore' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i6$1.PryStepperComponent, selector: "pry-stepper", inputs: ["isConsultMode"], outputs: ["lastStepCompleted", "activeIndexChange"] }, { kind: "component", type: i6$1.PryStepComponent, selector: "pry-step", inputs: ["setActiveState"] }, { kind: "directive", type: i6$1.PryStepTitleDirective, selector: "[stepTitle]" }, { kind: "component", type: i3.PryAccessRightsShareComponent, selector: "pry-access-rights-share", inputs: ["manifestDescription", "allowedGroups"] }, { kind: "component", type: PresentationFormComponent, selector: "pry-presentation-form", inputs: ["mode", "themePrefix", "selectedPresentation"], outputs: ["formValue", "isFormValid"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
622
698
  }
623
699
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SaveViewComponent, decorators: [{
624
700
  type: Component,
625
- args: [{ selector: 'pry-save-view', template: "<ng-container *pryAccess=\"{ module: 'dashboard', page: 'toolbox', action: 'save' }\">\n <ng-container *ngIf=\"mode === 'directSave'\">\n <div [attr.aria-expanded]=\"saveTypeOpened\" aria-controls=\"directiveSave\" aria-describedby=\"infoTooltip_directSave\">\n @if (canModify$ | async) {\n <button\n type=\"button\"\n #directiveSave\n class=\"a-btn a-btn--primary\"\n (click)=\"directSave()\"\n [disabled]=\"!(isCurrentPresentationModified$ | async)\"\n >\n <ng-container *ngIf=\"displayLabels\">{{ '@pry.toolbox.save' | i18n }} ({{ nbPages }})</ng-container>\n </button>\n }\n </div>\n </ng-container>\n <ng-container *ngIf=\"mode === 'saveAs'\">\n <div\n class=\"save-manifest-container\"\n [attr.aria-expanded]=\"saveAsOpened\"\n aria-controls=\"saveModal\"\n aria-describedby=\"infoTooltip_saveAs\"\n >\n <button type=\"button\" #saveAs class=\"a-btn a-btn--secondary\" (click)=\"toggleSaveAs()\" aria-haspopup=\"dialog\">\n <ng-container *ngIf=\"displayLabels\">{{ '@pry.toolbox.rename' | i18n }} ({{ nbPages }})</ng-container>\n </button>\n </div>\n </ng-container>\n</ng-container>\n<ng-template #templateSaveAs>\n <div\n class=\"o-modal\"\n (click)=\"$event.stopPropagation()\"\n id=\"saveModal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_saveModal\"\n (keydown.escape)=\"closeModals()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">{{ '@pry.toolbox.rename' | i18n }}</h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #cross (keydown.shift.tab)=\"focusValidation()\" (click)=\"toggleSaveAs()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <pry-stepper #stepper>\n <pry-step>\n <h4 class=\"m-stepper-item__title\" *stepTitle>{{ '@pry.presentation.add.info' | i18n }}</h4>\n <form>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" id=\"label-name\" for=\"input-name\">{{ '@pry.toolbox.manifest.name' | i18n }}</label>\n <input\n type=\"text\"\n id=\"input-name\"\n name=\"input-name\"\n class=\"a-form-field\"\n placeholder=\"{{ '@pry.toolbox.manifest.name' | i18n }}\"\n [ngModel]=\"currentManifest!.name\"\n (ngModelChange)=\"changeValue($event)\"\n aria-labelledby=\"label-name\"\n maxlength=\"50\"\n #input\n />\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" id=\"label-descr\" for=\"input-descr\">{{\n '@pry.toolbox.manifest.description' | i18n\n }}</label>\n <input\n type=\"text\"\n id=\"input-descr\"\n name=\"input-descr\"\n class=\"a-form-field\"\n placeholder=\"{{ '@pry.toolbox.manifest.description' | i18n }}\"\n [ngModel]=\"currentManifest!.description\"\n (ngModelChange)=\"changeDescr($event)\"\n aria-labelledby=\"label-name\"\n maxlength=\"200\"\n />\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"presentation_image\">{{ '@pry.presentation.form.image' | i18n }}</label>\n <div class=\"o-file-input\">\n <pry-select-image\n id=\"presentation_image\"\n (changed)=\"currentManifest!.image = $event\"\n [iconUrl]=\"currentManifest!.image\"\n [mode]=\"type\"\n ></pry-select-image>\n </div>\n </div>\n\n <div class=\"m-btn-group\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n #cancel\n (click)=\"toggleSaveAs()\"\n (keydown.tab)=\"disableNextStep()\"\n >\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n (click)=\"stepper.next()\"\n [disabled]=\"!isValid()\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.action.next' | i18n }}\n </button>\n </div>\n </form>\n </pry-step>\n <pry-step>\n <h4 class=\"m-stepper-item__title\" *stepTitle>{{ '@pry.restitution.share' | i18n }}</h4>\n <pry-access-rights-share\n [(ngModel)]=\"accessRightsByGroup\"\n (ngModelChange)=\"changeAccessRights($event)\"\n [manifestDescription]=\"currentManifest\"\n ></pry-access-rights-share>\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"stepper.prev()\">\n {{ '@pry.action.back' | i18n }}\n </button>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n #confirm\n (click)=\"save()\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.restitution.share' | i18n }}\n </button>\n </div>\n </pry-step>\n </pry-stepper>\n </div>\n</ng-template>\n\n<ng-template #templateDirectSaveType>\n <div\n class=\"o-modal\"\n (click)=\"$event.stopPropagation()\"\n id=\"directiveSave\"\n role=\"dialog\"\n aria-labelledby=\"dialog_title\"\n (keydown.escape)=\"closeModals()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title_\">{{ '@pry.toolbox.save' | i18n }}</h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #firstFocusdirective (click)=\"toggleDirectSaveType()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div>\n <h3>{{ '@pry.snack.pagesChanged' | i18n }}</h3>\n </div>\n <div class=\"m-btn-group\">\n <button class=\"a-btn a-btn--primary\" (click)=\"save()\">\n {{ '@pry.toolbox.save' | i18n }}\n </button>\n <button class=\"a-btn a-btn--primary\" (click)=\"rename()\">\n {{ '@pry.toolbox.rename' | i18n }}\n </button>\n <button class=\"a-btn a-btn--primary\" (click)=\"restore()\" (keydown.tab)=\"closeModals()\">\n {{ '@pry.toolbox.restore' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n" }]
701
+ args: [{ selector: 'pry-save-view', template: "<ng-container *pryAccess=\"{ module: 'dashboard', page: 'toolbox', action: 'save' }\">\n <ng-container *ngIf=\"mode === 'directSave'\">\n <div [attr.aria-expanded]=\"saveTypeOpened\" aria-controls=\"directiveSave\" aria-describedby=\"infoTooltip_directSave\">\n @if (canModify$ | async) {\n <button\n type=\"button\"\n #directiveSave\n class=\"a-btn a-btn--primary\"\n (click)=\"directSave()\"\n [disabled]=\"!(isCurrentPresentationModified$ | async)\"\n >\n <ng-container *ngIf=\"displayLabels\">{{ '@pry.toolbox.save' | i18n }} ({{ nbPages }})</ng-container>\n </button>\n }\n </div>\n </ng-container>\n <ng-container *ngIf=\"mode === 'saveAs'\">\n <div\n class=\"save-manifest-container\"\n [attr.aria-expanded]=\"saveAsOpened\"\n aria-controls=\"saveModal\"\n aria-describedby=\"infoTooltip_saveAs\"\n >\n <button type=\"button\" #saveAs class=\"a-btn a-btn--secondary\" (click)=\"toggleSaveAs()\" aria-haspopup=\"dialog\">\n <ng-container *ngIf=\"displayLabels\">{{ '@pry.toolbox.rename' | i18n }} ({{ nbPages }})</ng-container>\n </button>\n </div>\n </ng-container>\n</ng-container>\n<ng-template #templateSaveAs>\n <div\n class=\"o-modal\"\n (click)=\"$event.stopPropagation()\"\n id=\"saveModal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_saveModal\"\n (keydown.escape)=\"closeModals()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">{{ '@pry.toolbox.rename' | i18n }}</h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #cross (keydown.shift.tab)=\"focusValidation()\" (click)=\"toggleSaveAs()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <pry-stepper #stepper>\n <pry-step>\n <h4 class=\"m-stepper-item__title\" *stepTitle>{{ '@pry.presentation.add.info' | i18n }}</h4>\n <pry-presentation-form\n [selectedPresentation]=\"currentManifest\"\n (formValue)=\"formValue = $event\"\n (isFormValid)=\"isFormValid = $event\"\n ></pry-presentation-form>\n <div class=\"m-btn-group\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n #cancel\n (click)=\"toggleSaveAs()\"\n (keydown.tab)=\"disableNextStep()\"\n >\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n (click)=\"stepper.next()\"\n [disabled]=\"!isFormValid\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.action.next' | i18n }}\n </button>\n </div>\n </pry-step>\n <pry-step>\n <h4 class=\"m-stepper-item__title\" *stepTitle>{{ '@pry.restitution.share' | i18n }}</h4>\n <pry-access-rights-share\n [(ngModel)]=\"accessRightsByGroup\"\n (ngModelChange)=\"changeAccessRights($event)\"\n [manifestDescription]=\"currentManifest\"\n ></pry-access-rights-share>\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"stepper.prev()\">\n {{ '@pry.action.back' | i18n }}\n </button>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n #confirm\n (click)=\"save()\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.restitution.share' | i18n }}\n </button>\n </div>\n </pry-step>\n </pry-stepper>\n </div>\n</ng-template>\n\n<ng-template #templateDirectSaveType>\n <div\n class=\"o-modal\"\n (click)=\"$event.stopPropagation()\"\n id=\"directiveSave\"\n role=\"dialog\"\n aria-labelledby=\"dialog_title\"\n (keydown.escape)=\"closeModals()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title_\">{{ '@pry.toolbox.save' | i18n }}</h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #firstFocusdirective (click)=\"toggleDirectSaveType()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div>\n <h3>{{ '@pry.snack.pagesChanged' | i18n }}</h3>\n </div>\n <div class=\"m-btn-group\">\n <button class=\"a-btn a-btn--primary\" (click)=\"save()\">\n {{ '@pry.toolbox.save' | i18n }}\n </button>\n <button class=\"a-btn a-btn--primary\" (click)=\"rename()\">\n {{ '@pry.toolbox.rename' | i18n }}\n </button>\n <button class=\"a-btn a-btn--primary\" (click)=\"restore()\" (keydown.tab)=\"closeModals()\">\n {{ '@pry.toolbox.restore' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n" }]
626
702
  }], ctorParameters: () => [{ type: i1.Store }, { type: i3.PryBaseAccess, decorators: [{
627
703
  type: Optional
628
704
  }, {
@@ -720,7 +796,7 @@ class SelectGridLayoutComponent extends ToolboxActionComponent {
720
796
  this.toggleGridChoiceModal();
721
797
  }
722
798
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SelectGridLayoutComponent, deps: [{ token: i1.Store }, { token: PRY_ACCESS_TOKEN, optional: true }, { token: i2.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
723
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: SelectGridLayoutComponent, selector: "pry-select-grid-layout", viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }, { propertyName: "firstButton", first: true, predicate: ["firstButton"], descendants: true }, { propertyName: "openModal", first: true, predicate: ["openModal"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-toolbox-css></pry-toolbox-css>\n<div [attr.aria-expanded]=\"modalOpened\" aria-controls=\"grid-layout\">\n <button type=\"button\" #openModal class=\"a-btn a-btn--secondary\" (click)=\"toggleGridChoiceModal()\">\n @if (displayLabels) {\n {{ '@pry.toolbox.chooseGrid' | i18n }}\n }\n </button>\n</div>\n<ng-template #template>\n <div\n class=\"o-modal\"\n (click)=\"$event.stopPropagation()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_title\"\n id=\"grid-layout\"\n (keydown.escape)=\"toggleGridChoiceModal()\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">{{ '@pry.toolbox.chooseGrid' | i18n }}</h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"toggleGridChoiceModal()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"o-select-grid-layout-wrapper\">\n <ul class=\"o-select-grid-layout\">\n <li *ngFor=\"let layout of availableLayouts$ | async\" class=\"o-select-grid-layout__item\">\n <button\n type=\"button\"\n #firstButton\n class=\"a-btn\"\n [attr.aria-pressed]=\"chosenLayout === layout.type\"\n [class.selected]=\"chosenLayout === layout.type\"\n (click)=\"changeLayout(layout.type)\"\n >\n <div class=\"o-select-grid-layout__item__preview\">\n <pry-dashboard\n [staticDashboard]=\"{\n widgets: [],\n grid: { layout: layout.type, rows: layout.rows, columns: layout.columns, gap: 3 }\n }\"\n [breakpoint]=\"10\"\n [noBackground]=\"true\"\n [forceModeEdition]=\"false\"\n ></pry-dashboard>\n </div>\n <p class=\"a-p\">\n <strong>{{ layout.label ?? '' | i18n }}</strong>\n </p>\n <p class=\"a-p\">\n {{ layout.description ?? '' | i18n }}\n </p>\n </button>\n </li>\n </ul>\n </div>\n <div class=\"m-btn-group -space-evenly\">\n <button (click)=\"toggleGridChoiceModal()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button (click)=\"validate()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.toolbox.manifest.validated' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.DashboardComponent, selector: "pry-dashboard", inputs: ["staticDashboard", "forceModeEdition", "CloseOnDragOut", "displayOptions", "noBackground", "breakpoint"], outputs: ["rowHeight", "rows"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i5$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: PrySelectGridLayoutCssComponent, selector: "pry-toolbox-css" }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
799
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: SelectGridLayoutComponent, selector: "pry-select-grid-layout", viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }, { propertyName: "firstButton", first: true, predicate: ["firstButton"], descendants: true }, { propertyName: "openModal", first: true, predicate: ["openModal"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-toolbox-css></pry-toolbox-css>\n<div [attr.aria-expanded]=\"modalOpened\" aria-controls=\"grid-layout\">\n <button type=\"button\" #openModal class=\"a-btn a-btn--secondary\" (click)=\"toggleGridChoiceModal()\">\n @if (displayLabels) {\n {{ '@pry.toolbox.chooseGrid' | i18n }}\n }\n </button>\n</div>\n<ng-template #template>\n <div\n class=\"o-modal\"\n (click)=\"$event.stopPropagation()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_title\"\n id=\"grid-layout\"\n (keydown.escape)=\"toggleGridChoiceModal()\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">{{ '@pry.toolbox.chooseGrid' | i18n }}</h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"toggleGridChoiceModal()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"o-select-grid-layout-wrapper\">\n <ul class=\"o-select-grid-layout\">\n <li *ngFor=\"let layout of availableLayouts$ | async\" class=\"o-select-grid-layout__item\">\n <button\n type=\"button\"\n #firstButton\n class=\"a-btn\"\n [attr.aria-pressed]=\"chosenLayout === layout.type\"\n [class.selected]=\"chosenLayout === layout.type\"\n (click)=\"changeLayout(layout.type)\"\n >\n <div class=\"o-select-grid-layout__item__preview\">\n <pry-dashboard\n [staticDashboard]=\"{\n widgets: [],\n grid: { layout: layout.type, rows: layout.rows, columns: layout.columns, gap: 3 }\n }\"\n [breakpoint]=\"10\"\n [noBackground]=\"true\"\n [forceModeEdition]=\"false\"\n ></pry-dashboard>\n </div>\n <p class=\"a-p\">\n <strong>{{ layout.label ?? '' | i18n }}</strong>\n </p>\n <p class=\"a-p\">\n {{ layout.description ?? '' | i18n }}\n </p>\n </button>\n </li>\n </ul>\n </div>\n <div class=\"m-btn-group -space-evenly\">\n <button (click)=\"toggleGridChoiceModal()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button (click)=\"validate()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.toolbox.manifest.validated' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.DashboardComponent, selector: "pry-dashboard", inputs: ["staticDashboard", "forceModeEdition", "CloseOnDragOut", "displayOptions", "noBackground", "breakpoint"], outputs: ["rowHeight", "rows"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i5$2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: PrySelectGridLayoutCssComponent, selector: "pry-toolbox-css" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
724
800
  }
725
801
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SelectGridLayoutComponent, decorators: [{
726
802
  type: Component,
@@ -824,7 +900,7 @@ class AutomateRefreshComponent extends ToolboxActionComponent {
824
900
  }, 100);
825
901
  }
826
902
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AutomateRefreshComponent, deps: [{ token: i1.Store }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i3.WidgetFactoryService }, { token: PRY_ACCESS_TOKEN }], target: i0.ɵɵFactoryTarget.Component }); }
827
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: AutomateRefreshComponent, selector: "pry-automate-refresh", viewQueries: [{ propertyName: "datasourceList", first: true, predicate: ["datasourceList"], descendants: true, read: TemplateRef }, { propertyName: "refreshRateList", first: true, predicate: ["refreshRateList"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<pry-toolbox-css></pry-toolbox-css>\n<button\n type=\"button\"\n class=\"a-btn a-btn--secondary automate-btn\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"toggleDatasourceList()\"\n [disabled]=\"((datasources$ | async)?.length ?? 0) < 1\"\n>\n @if (displayLabels) {\n {{ '@pry.toolbox.automateRefresh' | i18n }}\n }\n</button>\n\n<ng-template #datasourceList>\n @if (datasources$ | async; as datasources) {\n <div>\n @if (datasources.length > 0) {\n <button\n class=\"refresh-line a-btn a-btn--icon-text -size-sm ds-0\"\n (click)=\"toggleRefreshRateList('all', 0)\"\n [class.-selected]=\"selectedDatasourceId === 'all'\"\n >\n {{ '@pry.toolbox.all' | i18n }}\n </button>\n }\n @for (datasourceId of datasources; track datasourceId; let i = $index) {\n <button\n class=\"refresh-line a-btn a-btn--icon-text -size-sm ds-{{ i + 1 }}\"\n (click)=\"toggleRefreshRateList(datasourceId, i + 1)\"\n [class.-selected]=\"selectedDatasourceId === datasourceId\"\n >\n {{ datasourceId | translateId: { type: 'datasource', output: 'name' } | async }}\n </button>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #refreshRateList>\n <div>\n @for (rate of refreshRates; track rate) {\n <button class=\"refresh-line a-btn a-btn--icon-text -size-sm\" (click)=\"toggleRefreshRate(rate)\">\n @if (\n (selectedDatasourceId === 'all'\n ? (allRefreshRate$ | async)\n : ((refreshRates$ | async) ?? {})[selectedDatasourceId]) === rate\n ) {\n <pry-icon [width]=\"20\" [height]=\"20\" iconSvg=\"check\"></pry-icon>\n }\n {{ '@pry.search.namedQuery.refresh.' + rate | i18n }}\n </button>\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PrySelectGridLayoutCssComponent, selector: "pry-toolbox-css" }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
903
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: AutomateRefreshComponent, selector: "pry-automate-refresh", viewQueries: [{ propertyName: "datasourceList", first: true, predicate: ["datasourceList"], descendants: true, read: TemplateRef }, { propertyName: "refreshRateList", first: true, predicate: ["refreshRateList"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<pry-toolbox-css></pry-toolbox-css>\n<button\n type=\"button\"\n class=\"a-btn a-btn--secondary automate-btn\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"toggleDatasourceList()\"\n [disabled]=\"((datasources$ | async)?.length ?? 0) < 1\"\n>\n @if (displayLabels) {\n {{ '@pry.toolbox.automateRefresh' | i18n }}\n }\n</button>\n\n<ng-template #datasourceList>\n @if (datasources$ | async; as datasources) {\n <div>\n @if (datasources.length > 0) {\n <button\n class=\"refresh-line a-btn a-btn--icon-text -size-sm ds-0\"\n (click)=\"toggleRefreshRateList('all', 0)\"\n [class.-selected]=\"selectedDatasourceId === 'all'\"\n >\n {{ '@pry.toolbox.all' | i18n }}\n </button>\n }\n @for (datasourceId of datasources; track datasourceId; let i = $index) {\n <button\n class=\"refresh-line a-btn a-btn--icon-text -size-sm ds-{{ i + 1 }}\"\n (click)=\"toggleRefreshRateList(datasourceId, i + 1)\"\n [class.-selected]=\"selectedDatasourceId === datasourceId\"\n >\n {{ datasourceId | translateId: { type: 'datasource', output: 'name' } | async }}\n </button>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #refreshRateList>\n <div>\n @for (rate of refreshRates; track rate) {\n <button class=\"refresh-line a-btn a-btn--icon-text -size-sm\" (click)=\"toggleRefreshRate(rate)\">\n @if (\n (selectedDatasourceId === 'all'\n ? (allRefreshRate$ | async)\n : ((refreshRates$ | async) ?? {})[selectedDatasourceId]) === rate\n ) {\n <pry-icon [width]=\"20\" [height]=\"20\" iconSvg=\"check\"></pry-icon>\n }\n {{ '@pry.search.namedQuery.refresh.' + rate | i18n }}\n </button>\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PrySelectGridLayoutCssComponent, selector: "pry-toolbox-css" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
828
904
  }
829
905
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AutomateRefreshComponent, decorators: [{
830
906
  type: Component,
@@ -892,7 +968,7 @@ class SwitchToEditContentComponent extends ToolboxActionComponent {
892
968
  this.close();
893
969
  }
894
970
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SwitchToEditContentComponent, deps: [{ token: i1.Store }, { token: PRY_ACCESS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
895
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: SwitchToEditContentComponent, selector: "pry-switch-to-edit", usesInheritance: true, ngImport: i0, template: "@if (canModify$ | async) {\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"trigger()\">\n @if (displayLabels) {\n {{ '@pry.toolbox.switchEditContent' | i18n }}\n }\n </button>\n}\n", dependencies: [{ kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
971
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: SwitchToEditContentComponent, selector: "pry-switch-to-edit", usesInheritance: true, ngImport: i0, template: "@if (canModify$ | async) {\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"trigger()\">\n @if (displayLabels) {\n {{ '@pry.toolbox.switchEditContent' | i18n }}\n }\n </button>\n}\n", dependencies: [{ kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
896
972
  }
897
973
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SwitchToEditContentComponent, decorators: [{
898
974
  type: Component,
@@ -918,7 +994,7 @@ class ShareComponent extends ToolboxActionComponent {
918
994
  });
919
995
  }
920
996
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ShareComponent, deps: [{ token: i1.Store }, { token: PRY_ACCESS_TOKEN, optional: true }, { token: i3.PryDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
921
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: ShareComponent, selector: "pry-share-pres", usesInheritance: true, ngImport: i0, template: "@if (canModify$ | async) {\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"trigger()\">\n @if (displayLabels) {\n {{ '@pry.toolbox.share' | i18n }}\n }\n </button>\n}\n", dependencies: [{ kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
997
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: ShareComponent, selector: "pry-share-pres", usesInheritance: true, ngImport: i0, template: "@if (canModify$ | async) {\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"trigger()\">\n @if (displayLabels) {\n {{ '@pry.toolbox.share' | i18n }}\n }\n </button>\n}\n", dependencies: [{ kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
922
998
  }
923
999
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ShareComponent, decorators: [{
924
1000
  type: Component,
@@ -939,7 +1015,7 @@ class DeleteComponent extends ToolboxActionComponent {
939
1015
  this.close();
940
1016
  }
941
1017
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DeleteComponent, deps: [{ token: i1.Store }, { token: PRY_ACCESS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
942
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: DeleteComponent, selector: "pry-delete-pres", usesInheritance: true, ngImport: i0, template: "@if (canModify$ | async) {\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"trigger()\">\n @if (displayLabels) {\n {{ '@pry.toolbox.delete' | i18n }}\n }\n </button>\n}\n", dependencies: [{ kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
1018
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: DeleteComponent, selector: "pry-delete-pres", usesInheritance: true, ngImport: i0, template: "@if (canModify$ | async) {\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"trigger()\">\n @if (displayLabels) {\n {{ '@pry.toolbox.delete' | i18n }}\n }\n </button>\n}\n", dependencies: [{ kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
943
1019
  }
944
1020
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DeleteComponent, decorators: [{
945
1021
  type: Component,
@@ -982,11 +1058,11 @@ class DashboardDetailsComponent extends ToolboxActionComponent {
982
1058
  $event.stopPropagation();
983
1059
  }
984
1060
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DashboardDetailsComponent, deps: [{ token: i1.Store }, { token: PRY_ACCESS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
985
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: DashboardDetailsComponent, selector: "pry-dashboard-details", usesInheritance: true, ngImport: i0, template: "<pry-toolbox-css></pry-toolbox-css>\n@if (currentManifest) {\n @if (currentManifest.additionalInformation) {\n <button\n class=\"a-btn o-dashboard-details\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n id=\"dashboard-details\"\n aria-controls=\"dashboard-details-panel\"\n aria-expanded=\"false\"\n (click)=\"openPanel($event)\"\n >\n <pry-icon iconSvg=\"dashboard-about\"></pry-icon>\n {{ '@pry.toolbox.about' | i18n }}\n </button>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isPanelOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPositions]=\"panelPosition\"\n (backdropClick)=\"isPanelOpen = false\"\n >\n <div class=\"o-modal\" id=\"dashboard-details-panel\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.toolbox.about' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closePanel($event)\">\n <pry-icon iconSvg=\"close\" [height]=\"20\" [width]=\"20\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"o-modal__content\" [innerHTML]=\"currentManifest.additionalInformation | mdToHtml\"></div>\n </div>\n </ng-template>\n }\n}\n", dependencies: [{ kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PrySelectGridLayoutCssComponent, selector: "pry-toolbox-css" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }, { kind: "pipe", type: i5$2.MdToHtmlPipe, name: "mdToHtml" }] }); }
1061
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: DashboardDetailsComponent, selector: "pry-dashboard-details", usesInheritance: true, ngImport: i0, template: "<pry-toolbox-css></pry-toolbox-css>\n@if (currentManifest?.additionalInformation) {\n <button\n class=\"a-btn a-btn--ghost -pad-5\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n id=\"dashboard-details\"\n aria-controls=\"dashboard-details-panel\"\n aria-expanded=\"false\"\n (click)=\"openPanel($event)\"\n >\n <pry-icon iconSvg=\"dashboard-about\"></pry-icon>\n {{ '@pry.toolbox.about' | i18n }}\n </button>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isPanelOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPositions]=\"panelPosition\"\n (backdropClick)=\"isPanelOpen = false\"\n >\n <div class=\"o-modal\" id=\"dashboard-details-panel\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.toolbox.about' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closePanel($event)\">\n <pry-icon iconSvg=\"close\" [height]=\"20\" [width]=\"20\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"o-modal__content\" [innerHTML]=\"currentManifest?.additionalInformation | mdToHtml\"></div>\n </div>\n </ng-template>\n}\n", dependencies: [{ kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PrySelectGridLayoutCssComponent, selector: "pry-toolbox-css" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }, { kind: "pipe", type: i5$1.MdToHtmlPipe, name: "mdToHtml" }] }); }
986
1062
  }
987
1063
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DashboardDetailsComponent, decorators: [{
988
1064
  type: Component,
989
- args: [{ selector: 'pry-dashboard-details', template: "<pry-toolbox-css></pry-toolbox-css>\n@if (currentManifest) {\n @if (currentManifest.additionalInformation) {\n <button\n class=\"a-btn o-dashboard-details\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n id=\"dashboard-details\"\n aria-controls=\"dashboard-details-panel\"\n aria-expanded=\"false\"\n (click)=\"openPanel($event)\"\n >\n <pry-icon iconSvg=\"dashboard-about\"></pry-icon>\n {{ '@pry.toolbox.about' | i18n }}\n </button>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isPanelOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPositions]=\"panelPosition\"\n (backdropClick)=\"isPanelOpen = false\"\n >\n <div class=\"o-modal\" id=\"dashboard-details-panel\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.toolbox.about' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closePanel($event)\">\n <pry-icon iconSvg=\"close\" [height]=\"20\" [width]=\"20\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"o-modal__content\" [innerHTML]=\"currentManifest.additionalInformation | mdToHtml\"></div>\n </div>\n </ng-template>\n }\n}\n" }]
1065
+ args: [{ selector: 'pry-dashboard-details', template: "<pry-toolbox-css></pry-toolbox-css>\n@if (currentManifest?.additionalInformation) {\n <button\n class=\"a-btn a-btn--ghost -pad-5\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n id=\"dashboard-details\"\n aria-controls=\"dashboard-details-panel\"\n aria-expanded=\"false\"\n (click)=\"openPanel($event)\"\n >\n <pry-icon iconSvg=\"dashboard-about\"></pry-icon>\n {{ '@pry.toolbox.about' | i18n }}\n </button>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isPanelOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPositions]=\"panelPosition\"\n (backdropClick)=\"isPanelOpen = false\"\n >\n <div class=\"o-modal\" id=\"dashboard-details-panel\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.toolbox.about' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closePanel($event)\">\n <pry-icon iconSvg=\"close\" [height]=\"20\" [width]=\"20\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"o-modal__content\" [innerHTML]=\"currentManifest?.additionalInformation | mdToHtml\"></div>\n </div>\n </ng-template>\n}\n" }]
990
1066
  }], ctorParameters: () => [{ type: i1.Store }, { type: i3.PryBaseAccess, decorators: [{
991
1067
  type: Optional
992
1068
  }, {
@@ -1003,7 +1079,7 @@ class EditModeActionComponent extends ToolboxActionComponent {
1003
1079
  this.store.dispatch(DashboardActions.toggleEditionMode({}));
1004
1080
  }
1005
1081
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EditModeActionComponent, deps: [{ token: i1.Store }, { token: PRY_ACCESS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
1006
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: EditModeActionComponent, selector: "pry-edit-mode-action", usesInheritance: true, ngImport: i0, template: "@if (this.canModify$ | async) {\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"toggleEditionMode()\">\n @if (displayLabels) {\n {{ ((modeEdition$ | async) ? '@pry.toolbox.editOff' : '@pry.toolbox.edit') | i18n }}\n }\n </button>\n}\n", dependencies: [{ kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
1082
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: EditModeActionComponent, selector: "pry-edit-mode-action", usesInheritance: true, ngImport: i0, template: "@if (this.canModify$ | async) {\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"toggleEditionMode()\">\n @if (displayLabels) {\n {{ ((modeEdition$ | async) ? '@pry.toolbox.editOff' : '@pry.toolbox.edit') | i18n }}\n }\n </button>\n}\n", dependencies: [{ kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
1007
1083
  }
1008
1084
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EditModeActionComponent, decorators: [{
1009
1085
  type: Component,
@@ -1015,7 +1091,66 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
1015
1091
  args: [PRY_ACCESS_TOKEN]
1016
1092
  }] }] });
1017
1093
 
1094
+ class EditPresentationComponent extends ToolboxActionComponent {
1095
+ constructor(store, access, overlay, viewContainerRef) {
1096
+ super(store, access);
1097
+ this.overlay = overlay;
1098
+ this.viewContainerRef = viewContainerRef;
1099
+ this.isModalOpen = false;
1100
+ this.isFormValid = false;
1101
+ }
1102
+ openModal() {
1103
+ if (!this.overlayRef) {
1104
+ this.isModalOpen = !this.isModalOpen;
1105
+ this.overlayRef = this.overlay.create(new OverlayConfig({
1106
+ hasBackdrop: true,
1107
+ panelClass: ['o-modal-wrapper'],
1108
+ backdropClass: 'backdrop'
1109
+ }));
1110
+ this.store.dispatch(ConfigActions.addingOverlay({ id: this.constructor.name }));
1111
+ this.overlayRef.backdropClick().subscribe((_) => this.closeModal());
1112
+ this.overlayRef.attach(new TemplatePortal(this.template, this.viewContainerRef));
1113
+ }
1114
+ else {
1115
+ this.closeModal();
1116
+ }
1117
+ }
1118
+ closeModal() {
1119
+ this.isModalOpen = false;
1120
+ this.overlayRef?.dispose();
1121
+ this.store.dispatch(ConfigActions.closeOverlay({ id: this.constructor.name }));
1122
+ this.close();
1123
+ }
1124
+ save() {
1125
+ this.store.dispatch(DashboardActions.saveManifest({
1126
+ id: this.currentManifest.id,
1127
+ ...this.formValue
1128
+ }));
1129
+ }
1130
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EditPresentationComponent, deps: [{ token: i1.Store }, { token: PRY_ACCESS_TOKEN, optional: true }, { token: i2.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
1131
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: EditPresentationComponent, selector: "pry-edit-details", viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "@if (canModify$ | async) {\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"openModal()\">\n @if (displayLabels) {\n {{ '@pry.toolbox.editPresentation' | i18n }}\n }\n </button>\n}\n\n<ng-template #template>\n <div\n class=\"o-modal\"\n (click)=\"$event.stopPropagation()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_title\"\n id=\"grid-layout\"\n (keydown.escape)=\"closeModal()\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">{{ '@pry.toolbox.editPresentation' | i18n }}</h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closeModal()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <pry-presentation-form\n [selectedPresentation]=\"(currentManifest$ | async) ?? undefined\"\n (formValue)=\"formValue = $event\"\n (isFormValid)=\"isFormValid = $event\"\n ></pry-presentation-form>\n <div class=\"m-btn-group -space-evenly\">\n <button (click)=\"closeModal()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button (click)=\"save()\" [disabled]=\"!isFormValid\" class=\"a-btn a-btn--primary\">\n {{ '@pry.toolbox.manifest.validated' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i5$2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: PresentationFormComponent, selector: "pry-presentation-form", inputs: ["mode", "themePrefix", "selectedPresentation"], outputs: ["formValue", "isFormValid"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
1132
+ }
1133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EditPresentationComponent, decorators: [{
1134
+ type: Component,
1135
+ args: [{ selector: 'pry-edit-details', template: "@if (canModify$ | async) {\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"openModal()\">\n @if (displayLabels) {\n {{ '@pry.toolbox.editPresentation' | i18n }}\n }\n </button>\n}\n\n<ng-template #template>\n <div\n class=\"o-modal\"\n (click)=\"$event.stopPropagation()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_title\"\n id=\"grid-layout\"\n (keydown.escape)=\"closeModal()\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">{{ '@pry.toolbox.editPresentation' | i18n }}</h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closeModal()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <pry-presentation-form\n [selectedPresentation]=\"(currentManifest$ | async) ?? undefined\"\n (formValue)=\"formValue = $event\"\n (isFormValid)=\"isFormValid = $event\"\n ></pry-presentation-form>\n <div class=\"m-btn-group -space-evenly\">\n <button (click)=\"closeModal()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button (click)=\"save()\" [disabled]=\"!isFormValid\" class=\"a-btn a-btn--primary\">\n {{ '@pry.toolbox.manifest.validated' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n" }]
1136
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i3.PryBaseAccess, decorators: [{
1137
+ type: Optional
1138
+ }, {
1139
+ type: Inject,
1140
+ args: [PRY_ACCESS_TOKEN]
1141
+ }] }, { type: i2.Overlay }, { type: i0.ViewContainerRef }], propDecorators: { template: [{
1142
+ type: ViewChild,
1143
+ args: ['template', { read: TemplateRef }]
1144
+ }] } });
1145
+
1018
1146
  const ACTIONS = [
1147
+ {
1148
+ name: 'dashboard_details',
1149
+ component: DashboardDetailsComponent,
1150
+ visible: true,
1151
+ access: { module: 'dashboard', page: 'toolbox', action: 'details' },
1152
+ needsOwner: false
1153
+ },
1019
1154
  {
1020
1155
  name: 'edit_action',
1021
1156
  component: EditModeActionComponent,
@@ -1101,11 +1236,11 @@ const ACTIONS = [
1101
1236
  needsOwner: true
1102
1237
  },
1103
1238
  {
1104
- name: 'dashboard_details',
1105
- component: DashboardDetailsComponent,
1239
+ name: 'edit_presentation',
1240
+ component: EditPresentationComponent,
1106
1241
  visible: true,
1107
- access: { module: 'dashboard', page: 'toolbox', action: 'delete' },
1108
- needsOwner: false
1242
+ access: { module: 'dashboard', page: 'toolbox', action: 'edit_details' },
1243
+ needsOwner: true
1109
1244
  }
1110
1245
  ];
1111
1246
 
@@ -1184,7 +1319,9 @@ class ToolboxComponent {
1184
1319
  }
1185
1320
  ];
1186
1321
  this.isDropdownOpen = false;
1187
- this.presentation$ = store.select(DashboardSelectors.presentation);
1322
+ this.currentManifest$ = store
1323
+ .select(DashboardSelectors.presentation)
1324
+ .pipe(map((presentation) => presentation?.current));
1188
1325
  this.isManualMode$ = combineLatest([
1189
1326
  store.select(DashboardSelectors.staticManifest),
1190
1327
  store.select(DashboardSelectors.gridLayout)
@@ -1193,18 +1330,15 @@ class ToolboxComponent {
1193
1330
  : gridLayout) === DashboardGridLayout.MANUAL));
1194
1331
  this.actionsAvailable$ = store.select(DashboardSelectors.displayOptions);
1195
1332
  this.showEditToggle$ = this.actionsAvailable$.pipe(map((actions) => !!actions?.edit_toggle));
1196
- this.canModify$ = this.presentation$.pipe(switchMap((presentation) => {
1197
- return presentation?.current ? this.access?.canModifyPresentation(presentation.current) : of(false);
1333
+ this.canModify$ = this.currentManifest$.pipe(switchMap((manifest) => {
1334
+ return manifest ? this.access?.canModifyPresentation(manifest) : of(false);
1198
1335
  }));
1199
1336
  }
1200
1337
  ngOnInit() {
1201
- this.allActions$ = combineLatest([
1202
- this.actions$,
1203
- this.actionsAvailable$,
1204
- this.canModify$
1205
- ]).pipe(switchMap(([actions, displayOptions, _canModify]) => combineLatest(actions.map((action) => {
1338
+ this.allActions$ = combineLatest([this.actions$, this.actionsAvailable$, this.canModify$]).pipe(withLatestFrom(this.currentManifest$), switchMap(([[actions, displayOptions, _canModify], currentManifest]) => combineLatest(actions.map((action) => {
1206
1339
  // @ts-ignore
1207
- const actionAvailable = action.visible && displayOptions.toolbox[action.name];
1340
+ const actionAvailable = this.isActionVisible(action, currentManifest) &&
1341
+ displayOptions?.toolbox[action.name];
1208
1342
  const canModify = !action.needsOwner || _canModify;
1209
1343
  return this.access
1210
1344
  ? this.access.hasRole(null, action.access.module, action.access.page, action.access.action).pipe(map((hasRole) => ({
@@ -1232,12 +1366,15 @@ class ToolboxComponent {
1232
1366
  getOrder(actionName) {
1233
1367
  return this._dropdownActions$.getValue().find((action) => actionName === action.name)?.order;
1234
1368
  }
1369
+ isActionVisible(action, manifest) {
1370
+ return manifest && action.name === 'dashboard_details' ? !!manifest.additionalInformation : action.visible;
1371
+ }
1235
1372
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ToolboxComponent, deps: [{ token: i1.Store }, { token: PRY_ACCESS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
1236
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: ToolboxComponent, selector: "pry-toolbox", inputs: { displayLabels: "displayLabels", dropdownPosition: "dropdownPosition", actions: "actions", dropdownActions: "dropdownActions" }, ngImport: i0, template: "<ul class=\"m-actions-list\" #input>\n @for (action of mainActions$ | async; track action.name) {\n @if (action.visible) {\n <li class=\"m-actions-list__item -{{ action.name }}\" *pryAccess=\"action.access\">\n <pry-toolbox-action-instanciator\n [action]=\"action\"\n [displayLabels]=\"displayLabels\"\n ></pry-toolbox-action-instanciator>\n </li>\n }\n }\n @if (showDropdownButton$ | async) {\n @if (((dropdownActions$ | async)?.length ?? 0) > 0) {\n <li class=\"m-actions-list__item\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--primary\"\n cdkOverlayOrigin\n id=\"options\"\n aria-controls=\"IDpanel\"\n aria-expanded=\"false\"\n (click)=\"openDropdown($event)\"\n #trigger=\"cdkOverlayOrigin\"\n >\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.options' | i18n }}</span>\n <pry-icon [width]=\"10\" [height]=\"13\" iconSvg=\"chevron_bottom\"></pry-icon>\n @if (displayLabels) {\n <span>{{ '@pry.toolbox.options' | i18n }}</span>\n }\n </button>\n </li>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isDropdownOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPositions]=\"dropdownPosition\"\n [cdkConnectedOverlayOffsetY]=\"5\"\n (backdropClick)=\"isDropdownOpen = false\"\n >\n <div class=\"o-draggable-menu -dropdown\" aria-labelledby=\"\">\n <ul class=\"o-draggable-menu__list\">\n @for (action of dropdownActions$ | async; track action.name) {\n @if (action.visible) {\n <li class=\"o-draggable-menu__list__item\" [style.order]=\"getOrder(action.name)\">\n <pry-toolbox-action-instanciator\n [action]=\"action\"\n [displayLabels]=\"displayLabels\"\n (closeOptions)=\"closeDropdown($event)\"\n ></pry-toolbox-action-instanciator>\n </li>\n }\n }\n </ul>\n </div>\n </ng-template>\n }\n }\n\n @if (showEditToggle$ | async) {\n @if (isManualMode$ | async) {\n <li class=\"m-actions-list__item\">\n <pry-edit-mode-toggle\n *pryAccess=\"{ module: 'dashboard', page: 'toolbox', action: 'edit_dashboard' }\"\n [displayLabels]=\"displayLabels\"\n ></pry-edit-mode-toggle>\n </li>\n }\n }\n</ul>\n", dependencies: [{ kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: i3.PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: ToolboxActionInstanciatorComponent, selector: "pry-toolbox-action-instanciator", inputs: ["displayLabels", "action"], outputs: ["closeOptions"] }, { kind: "component", type: EditModeToggleComponent, selector: "pry-edit-mode-toggle" }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
1373
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: ToolboxComponent, selector: "pry-toolbox", inputs: { displayLabels: "displayLabels", dropdownPosition: "dropdownPosition", actions: "actions", dropdownActions: "dropdownActions" }, ngImport: i0, template: "<ul class=\"m-actions-list\" #input>\n @if (showEditToggle$ | async) {\n @if (isManualMode$ | async) {\n <li class=\"m-actions-list__item\">\n <pry-edit-mode-toggle\n *pryAccess=\"{ module: 'dashboard', page: 'toolbox', action: 'edit_dashboard' }\"\n [displayLabels]=\"displayLabels\"\n ></pry-edit-mode-toggle>\n </li>\n }\n }\n\n @if (showDropdownButton$ | async) {\n @if (((dropdownActions$ | async)?.length ?? 0) > 0) {\n <li class=\"m-actions-list__item\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--ghost -pad-5\"\n cdkOverlayOrigin\n id=\"options\"\n aria-controls=\"IDpanel\"\n aria-expanded=\"false\"\n (click)=\"openDropdown($event)\"\n #trigger=\"cdkOverlayOrigin\"\n >\n <span [class.u-visually-hidden]=\"!displayLabels\">{{ '@pry.toolbox.options' | i18n }}</span>\n <pry-icon [width]=\"10\" [height]=\"13\" iconSvg=\"chevron_bottom\"></pry-icon>\n </button>\n </li>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isDropdownOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPositions]=\"dropdownPosition\"\n [cdkConnectedOverlayOffsetY]=\"5\"\n (backdropClick)=\"isDropdownOpen = false\"\n >\n <div class=\"o-draggable-menu -dropdown\" aria-labelledby=\"\">\n <ul class=\"o-draggable-menu__list\">\n @for (action of dropdownActions$ | async; track action.name) {\n @if (action.visible) {\n <li class=\"o-draggable-menu__list__item\" [style.order]=\"getOrder(action.name)\">\n <pry-toolbox-action-instanciator\n [action]=\"action\"\n [displayLabels]=\"displayLabels\"\n (closeOptions)=\"closeDropdown($event)\"\n ></pry-toolbox-action-instanciator>\n </li>\n }\n }\n </ul>\n </div>\n </ng-template>\n }\n }\n\n @for (action of mainActions$ | async; track action.name) {\n @if (action.visible) {\n <li class=\"m-actions-list__item -{{ action.name }}\" *pryAccess=\"action.access\">\n <pry-toolbox-action-instanciator\n [action]=\"action\"\n [displayLabels]=\"displayLabels\"\n ></pry-toolbox-action-instanciator>\n </li>\n }\n }\n</ul>\n", dependencies: [{ kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: i3.PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: ToolboxActionInstanciatorComponent, selector: "pry-toolbox-action-instanciator", inputs: ["displayLabels", "action"], outputs: ["closeOptions"] }, { kind: "component", type: EditModeToggleComponent, selector: "pry-edit-mode-toggle" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
1237
1374
  }
1238
1375
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ToolboxComponent, decorators: [{
1239
1376
  type: Component,
1240
- args: [{ selector: 'pry-toolbox', template: "<ul class=\"m-actions-list\" #input>\n @for (action of mainActions$ | async; track action.name) {\n @if (action.visible) {\n <li class=\"m-actions-list__item -{{ action.name }}\" *pryAccess=\"action.access\">\n <pry-toolbox-action-instanciator\n [action]=\"action\"\n [displayLabels]=\"displayLabels\"\n ></pry-toolbox-action-instanciator>\n </li>\n }\n }\n @if (showDropdownButton$ | async) {\n @if (((dropdownActions$ | async)?.length ?? 0) > 0) {\n <li class=\"m-actions-list__item\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--primary\"\n cdkOverlayOrigin\n id=\"options\"\n aria-controls=\"IDpanel\"\n aria-expanded=\"false\"\n (click)=\"openDropdown($event)\"\n #trigger=\"cdkOverlayOrigin\"\n >\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.options' | i18n }}</span>\n <pry-icon [width]=\"10\" [height]=\"13\" iconSvg=\"chevron_bottom\"></pry-icon>\n @if (displayLabels) {\n <span>{{ '@pry.toolbox.options' | i18n }}</span>\n }\n </button>\n </li>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isDropdownOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPositions]=\"dropdownPosition\"\n [cdkConnectedOverlayOffsetY]=\"5\"\n (backdropClick)=\"isDropdownOpen = false\"\n >\n <div class=\"o-draggable-menu -dropdown\" aria-labelledby=\"\">\n <ul class=\"o-draggable-menu__list\">\n @for (action of dropdownActions$ | async; track action.name) {\n @if (action.visible) {\n <li class=\"o-draggable-menu__list__item\" [style.order]=\"getOrder(action.name)\">\n <pry-toolbox-action-instanciator\n [action]=\"action\"\n [displayLabels]=\"displayLabels\"\n (closeOptions)=\"closeDropdown($event)\"\n ></pry-toolbox-action-instanciator>\n </li>\n }\n }\n </ul>\n </div>\n </ng-template>\n }\n }\n\n @if (showEditToggle$ | async) {\n @if (isManualMode$ | async) {\n <li class=\"m-actions-list__item\">\n <pry-edit-mode-toggle\n *pryAccess=\"{ module: 'dashboard', page: 'toolbox', action: 'edit_dashboard' }\"\n [displayLabels]=\"displayLabels\"\n ></pry-edit-mode-toggle>\n </li>\n }\n }\n</ul>\n" }]
1377
+ args: [{ selector: 'pry-toolbox', template: "<ul class=\"m-actions-list\" #input>\n @if (showEditToggle$ | async) {\n @if (isManualMode$ | async) {\n <li class=\"m-actions-list__item\">\n <pry-edit-mode-toggle\n *pryAccess=\"{ module: 'dashboard', page: 'toolbox', action: 'edit_dashboard' }\"\n [displayLabels]=\"displayLabels\"\n ></pry-edit-mode-toggle>\n </li>\n }\n }\n\n @if (showDropdownButton$ | async) {\n @if (((dropdownActions$ | async)?.length ?? 0) > 0) {\n <li class=\"m-actions-list__item\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--ghost -pad-5\"\n cdkOverlayOrigin\n id=\"options\"\n aria-controls=\"IDpanel\"\n aria-expanded=\"false\"\n (click)=\"openDropdown($event)\"\n #trigger=\"cdkOverlayOrigin\"\n >\n <span [class.u-visually-hidden]=\"!displayLabels\">{{ '@pry.toolbox.options' | i18n }}</span>\n <pry-icon [width]=\"10\" [height]=\"13\" iconSvg=\"chevron_bottom\"></pry-icon>\n </button>\n </li>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isDropdownOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPositions]=\"dropdownPosition\"\n [cdkConnectedOverlayOffsetY]=\"5\"\n (backdropClick)=\"isDropdownOpen = false\"\n >\n <div class=\"o-draggable-menu -dropdown\" aria-labelledby=\"\">\n <ul class=\"o-draggable-menu__list\">\n @for (action of dropdownActions$ | async; track action.name) {\n @if (action.visible) {\n <li class=\"o-draggable-menu__list__item\" [style.order]=\"getOrder(action.name)\">\n <pry-toolbox-action-instanciator\n [action]=\"action\"\n [displayLabels]=\"displayLabels\"\n (closeOptions)=\"closeDropdown($event)\"\n ></pry-toolbox-action-instanciator>\n </li>\n }\n }\n </ul>\n </div>\n </ng-template>\n }\n }\n\n @for (action of mainActions$ | async; track action.name) {\n @if (action.visible) {\n <li class=\"m-actions-list__item -{{ action.name }}\" *pryAccess=\"action.access\">\n <pry-toolbox-action-instanciator\n [action]=\"action\"\n [displayLabels]=\"displayLabels\"\n ></pry-toolbox-action-instanciator>\n </li>\n }\n }\n</ul>\n" }]
1241
1378
  }], ctorParameters: () => [{ type: i1.Store }, { type: i3.PryBaseAccess, decorators: [{
1242
1379
  type: Optional
1243
1380
  }, {
@@ -1272,7 +1409,9 @@ const components = [
1272
1409
  ShareComponent,
1273
1410
  DeleteComponent,
1274
1411
  DashboardDetailsComponent,
1275
- EditModeActionComponent
1412
+ EditModeActionComponent,
1413
+ EditPresentationComponent,
1414
+ PresentationFormComponent
1276
1415
  ];
1277
1416
  class PryToolboxModule {
1278
1417
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryToolboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -1294,7 +1433,9 @@ class PryToolboxModule {
1294
1433
  ShareComponent,
1295
1434
  DeleteComponent,
1296
1435
  DashboardDetailsComponent,
1297
- EditModeActionComponent], imports: [CommonModule,
1436
+ EditModeActionComponent,
1437
+ EditPresentationComponent,
1438
+ PresentationFormComponent], imports: [CommonModule,
1298
1439
  FormsModule,
1299
1440
  OverlayModule,
1300
1441
  PryOverlayModule,
@@ -1311,7 +1452,8 @@ class PryToolboxModule {
1311
1452
  CdkDrag,
1312
1453
  CdkDragHandle,
1313
1454
  A11yModule,
1314
- PryTextEditorModule], exports: [ToolboxActionComponent,
1455
+ PryTextEditorModule,
1456
+ ReactiveFormsModule], exports: [ToolboxActionComponent,
1315
1457
  ToolboxActionInstanciatorComponent,
1316
1458
  ClearViewComponent,
1317
1459
  DragWidgetsComponent,
@@ -1329,7 +1471,9 @@ class PryToolboxModule {
1329
1471
  ShareComponent,
1330
1472
  DeleteComponent,
1331
1473
  DashboardDetailsComponent,
1332
- EditModeActionComponent] }); }
1474
+ EditModeActionComponent,
1475
+ EditPresentationComponent,
1476
+ PresentationFormComponent] }); }
1333
1477
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryToolboxModule, imports: [CommonModule,
1334
1478
  FormsModule,
1335
1479
  OverlayModule,
@@ -1344,7 +1488,8 @@ class PryToolboxModule {
1344
1488
  PryShareModule,
1345
1489
  PryI18nModule,
1346
1490
  A11yModule,
1347
- PryTextEditorModule] }); }
1491
+ PryTextEditorModule,
1492
+ ReactiveFormsModule] }); }
1348
1493
  }
1349
1494
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryToolboxModule, decorators: [{
1350
1495
  type: NgModule,
@@ -1368,7 +1513,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
1368
1513
  CdkDrag,
1369
1514
  CdkDragHandle,
1370
1515
  A11yModule,
1371
- PryTextEditorModule
1516
+ PryTextEditorModule,
1517
+ ReactiveFormsModule
1372
1518
  ],
1373
1519
  exports: [...components]
1374
1520
  }]
@@ -1378,5 +1524,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
1378
1524
  * Generated bundle index. Do not edit.
1379
1525
  */
1380
1526
 
1381
- export { ACTIONS, AutomateRefreshComponent, ClearViewComponent, DashboardDetailsComponent, DeleteComponent, DragWidgetsComponent, EditModeActionComponent, EditModeToggleComponent, FilterSteps, LaunchTabComponent, NamedQueryComponent, PryFilterSettingsComponent, PrySelectGridLayoutCssComponent, PryToolboxModule, RefreshDatasetsComponent, SaveViewComponent, SelectGridLayoutComponent, ShareComponent, SwitchToEditContentComponent, ToolboxActionComponent, ToolboxActionInstanciatorComponent, ToolboxComponent };
1527
+ export { ACTIONS, AutomateRefreshComponent, ClearViewComponent, DashboardDetailsComponent, DeleteComponent, DragWidgetsComponent, EditModeActionComponent, EditModeToggleComponent, EditPresentationComponent, FilterSteps, LaunchTabComponent, NamedQueryComponent, PresentationFormComponent, PryFilterSettingsComponent, PrySelectGridLayoutCssComponent, PryToolboxModule, RefreshDatasetsComponent, SaveViewComponent, SelectGridLayoutComponent, ShareComponent, SwitchToEditContentComponent, ToolboxActionComponent, ToolboxActionInstanciatorComponent, ToolboxComponent };
1382
1528
  //# sourceMappingURL=provoly-dashboard-toolbox.mjs.map