@provoly/dashboard 1.4.13 → 1.4.15

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 (226) hide show
  1. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-form/admin-abac-rules-form.component.mjs +7 -7
  2. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules.component.mjs +3 -3
  3. package/esm2022/admin/components/admin-abac-rules/components/attribute-condition/attribute-condition.component.mjs +7 -7
  4. package/esm2022/admin/components/admin-abac-rules/components/composed-condition/composed-condition.component.mjs +10 -10
  5. package/esm2022/admin/components/admin-abac-rules/components/metadata-condition/metadata-condition.component.mjs +6 -6
  6. package/esm2022/admin/components/admin-abac-rules/components/select-attribute/select-attribute.component.mjs +3 -3
  7. package/esm2022/admin/components/admin-abac-rules/components/select-metadata/select-metadata.component.mjs +3 -3
  8. package/esm2022/admin/components/admin-classes/admin-classes-customize/admin-classes-customize.component.mjs +10 -10
  9. package/esm2022/admin/components/admin-classes/admin-classes-customize/symbol/admin-classes-customize-symbol.component.mjs +10 -15
  10. package/esm2022/admin/components/admin-classes/admin-classes-customize/tooltip/admin-classes-customize-tooltip.component.mjs +8 -8
  11. package/esm2022/admin/components/admin-classes/admin-classes-edit/admin-classes-edit.component.mjs +5 -5
  12. package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +5 -5
  13. package/esm2022/admin/components/admin-classes/admin-classes-select/admin-classes-select.component.mjs +6 -6
  14. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-edit/admin-attributes-edit.component.mjs +5 -5
  15. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +3 -3
  16. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-new/admin-attributes-new.component.mjs +5 -5
  17. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-select/admin-attributes-select.component.mjs +6 -6
  18. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-classes-view.component.mjs +3 -3
  19. package/esm2022/admin/components/admin-classes/admin-classes.component.mjs +5 -5
  20. package/esm2022/admin/components/admin-dataset/admin-dataset.component.mjs +6 -6
  21. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +7 -7
  22. package/esm2022/admin/components/admin-environment/admin-environment-form/admin-environment-form.component.mjs +3 -3
  23. package/esm2022/admin/components/admin-environment/admin-environment-select/admin-environment-select.component.mjs +5 -5
  24. package/esm2022/admin/components/admin-environment/admin-environment-update/admin-environment-update.component.mjs +5 -5
  25. package/esm2022/admin/components/admin-environment/admin-environment.component.mjs +5 -5
  26. package/esm2022/admin/components/admin-fields/admin-fields-edit/admin-fields-edit.component.mjs +5 -5
  27. package/esm2022/admin/components/admin-fields/admin-fields-select/admin-fields-select.component.mjs +3 -3
  28. package/esm2022/admin/components/admin-layout/admin-layout.component.mjs +3 -3
  29. package/esm2022/admin/components/admin-links/admin-links-new/admin-links-new.component.mjs +5 -5
  30. package/esm2022/admin/components/admin-links/admin-links.component.mjs +5 -5
  31. package/esm2022/admin/components/admin-menu/admin-menu.component.mjs +5 -5
  32. package/esm2022/admin/components/admin-metadata/admin-edit-metadata/admin-edit-metadata.component.mjs +5 -5
  33. package/esm2022/admin/components/admin-metadata/admin-select-metadata/admin-select-metadata.component.mjs +5 -5
  34. package/esm2022/admin/components/admin-metadata/shared/form-metadata/form-metadata.component.mjs +4 -5
  35. package/esm2022/admin/components/admin-metadata/shared/list-metadata/pry-list-metadata.component.mjs +5 -6
  36. package/esm2022/admin/components/admin-metadata-rules/admin-metadata-rules.component.mjs +5 -5
  37. package/esm2022/admin/components/admin-metadata-rules/admin-select-metadata-rules/admin-select-metadata-rules.component.mjs +5 -5
  38. package/esm2022/admin/components/admin-metadata-rules/shared/admin-form-metadata-rules/admin-form-metadata-rules.component.mjs +4 -5
  39. package/esm2022/admin/components/admin-metadata-user/admin-user-edit-metadata/admin-user-edit-metadata.component.mjs +5 -5
  40. package/esm2022/admin/components/admin-metadata-user/admin-user-select-metadata/admin-user-select-metadata.component.mjs +5 -5
  41. package/esm2022/admin/components/admin-predicates/admin-predicates-form/admin-predicates-form.component.mjs +5 -5
  42. package/esm2022/admin/components/admin-predicates/admin-predicates-select/admin-predicates-select.component.mjs +5 -5
  43. package/esm2022/admin/components/admin-predicates/admin-predicates-update/admin-predicates-update.component.mjs +5 -5
  44. package/esm2022/admin/components/admin-predicates/admin-predicates.component.mjs +5 -5
  45. package/esm2022/admin/components/admin-relation-types/admin-relation-types-modal/admin-relation-types-modal.component.mjs +4 -5
  46. package/esm2022/admin/components/admin-relation-types/admin-relation-types-select/admin-relation-types-select.component.mjs +5 -5
  47. package/esm2022/admin/components/admin-relation-types/admin-relation-types.component.mjs +6 -6
  48. package/esm2022/admin/components/admin-user/admin-user-select/admin-user-select.component.mjs +6 -6
  49. package/esm2022/admin/components/admin-user/admin-user.component.mjs +5 -5
  50. package/esm2022/admin/components/association/association.component.mjs +4 -5
  51. package/esm2022/components/card/card.component.mjs +5 -6
  52. package/esm2022/components/metadata-editor/metadata-editor.component.mjs +6 -6
  53. package/esm2022/components/scheme-picker/scheme-picker.component.mjs +7 -7
  54. package/esm2022/components/stepper/stepper.component.mjs +3 -4
  55. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +5 -5
  56. package/esm2022/dataset/components/dataset-version-form/dataset-version-form.component.mjs +6 -7
  57. package/esm2022/filters/date/date-filter.component.mjs +5 -6
  58. package/esm2022/filters/list/list-filter.component.mjs +6 -7
  59. package/esm2022/filters/number/number-filter.component.mjs +5 -6
  60. package/esm2022/filters/text/text-filter.component.mjs +5 -6
  61. package/esm2022/lib/core/components/about/about.component.mjs +3 -3
  62. package/esm2022/lib/core/components/accordion/accordion-item/accordion-item.component.mjs +7 -7
  63. package/esm2022/lib/core/components/base-menu/base-menu.component.mjs +6 -6
  64. package/esm2022/lib/core/components/base-toolbox/base-toolbox.component.mjs +6 -6
  65. package/esm2022/lib/core/components/base-toolbox-action/base-toolbox-action.component.mjs +6 -7
  66. package/esm2022/lib/core/components/date-picker/date-picker.component.mjs +4 -4
  67. package/esm2022/lib/core/components/date-picker/time-picker/loop-scroll-column/loop-scroll-column.component.mjs +3 -4
  68. package/esm2022/lib/core/components/date-picker/time-picker/time-picker.component.mjs +6 -6
  69. package/esm2022/lib/core/components/edit-input/edit-input.component.mjs +7 -8
  70. package/esm2022/lib/core/components/icon/icon.component.mjs +3 -3
  71. package/esm2022/lib/core/components/modal/modal.component.mjs +5 -6
  72. package/esm2022/lib/core/components/nq-color-selector/nq-color-selector.component.mjs +5 -5
  73. package/esm2022/lib/core/components/overlay/dialog-confirm.component.mjs +3 -3
  74. package/esm2022/lib/core/components/range/range.component.mjs +5 -6
  75. package/esm2022/lib/core/components/select/select.component.mjs +3 -3
  76. package/esm2022/lib/core/components/select-image/select-image.component.mjs +5 -5
  77. package/esm2022/lib/core/components/share/group-share/group-share.component.mjs +6 -6
  78. package/esm2022/lib/core/components/snackbar/snackbar/snackbar.component.mjs +3 -3
  79. package/esm2022/lib/core/components/status-modal/status-modal.component.mjs +5 -5
  80. package/esm2022/lib/core/components/tabs/tab-group.component.mjs +3 -3
  81. package/esm2022/lib/core/components/toggle/toggle.component.mjs +4 -4
  82. package/esm2022/lib/core/model/result-set.interface.mjs +1 -1
  83. package/esm2022/lib/core/model/search-mono-class.model.mjs +1 -1
  84. package/esm2022/lib/core/store/data-source/data-source.effects.mjs +9 -9
  85. package/esm2022/lib/core/store/relation-types/relation-types.actions.mjs +2 -1
  86. package/esm2022/lib/core/store/relation-types/relation-types.effects.mjs +2 -1
  87. package/esm2022/lib/core/store/relation-types/relation-types.service.mjs +5 -1
  88. package/esm2022/lib/core/store/search/search.actions.mjs +1 -1
  89. package/esm2022/lib/core/store/search/search.effects.mjs +5 -3
  90. package/esm2022/lib/core/store/search/search.service.mjs +19 -13
  91. package/esm2022/lib/core/toolbox/toolbox-manifest.service.mjs +3 -3
  92. package/esm2022/lib/dashboard/action-bus/service/bus.service.mjs +2 -2
  93. package/esm2022/lib/dashboard/components/context-menu/context-menu.component.mjs +8 -8
  94. package/esm2022/lib/dashboard/components/dashboard.component.mjs +12 -12
  95. package/esm2022/lib/dashboard/components/manifests/manifests.component.mjs +5 -5
  96. package/esm2022/lib/dashboard/components/metadata/metadata.component.mjs +5 -6
  97. package/esm2022/lib/dashboard/components/vizualize-raw/vizualize-raw.component.mjs +3 -3
  98. package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-selector.component.mjs +6 -6
  99. package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +10 -10
  100. package/esm2022/lib/dashboard/components/widgets/widget-filler/widget-filler.component.mjs +2 -2
  101. package/esm2022/lib/dashboard/components/widgets/widget-placement/widget-placement.utils.mjs +2 -2
  102. package/esm2022/lib/dashboard/filter/components/filter-group/filter-group.component.mjs +7 -7
  103. package/esm2022/lib/dashboard/resultset-utils.mjs +7 -8
  104. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +2 -1
  105. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +3 -3
  106. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +31 -23
  107. package/esm2022/lib/dashboard/tooltip/components/default/default.tooltip.component.mjs +3 -3
  108. package/esm2022/notification/components/notification/content/notification-content.component.mjs +3 -3
  109. package/esm2022/notification/components/notification/notification.component.mjs +5 -5
  110. package/esm2022/pipeline/components/pipeline-details/pipeline-details.component.mjs +7 -7
  111. package/esm2022/pipeline/components/pipeline-editor/graph-serializer.utils.mjs +2 -2
  112. package/esm2022/pipeline/components/pipeline-editor/pipeline-editor.component.mjs +5 -5
  113. package/esm2022/pipeline/components/pipeline-list/pipeline-list.component.mjs +9 -9
  114. package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +6 -6
  115. package/esm2022/presentation/components/presentation.component.mjs +6 -6
  116. package/esm2022/presentation/components/title-presentation/title-presentation.component.mjs +5 -5
  117. package/esm2022/restitution/components/restitution/restitution.component.mjs +3 -3
  118. package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +9 -9
  119. package/esm2022/restitution/components/restitution-list-item/restitution-list-item.component.mjs +3 -3
  120. package/esm2022/search/components/choose-widget/choose-widget.component.mjs +5 -5
  121. package/esm2022/search/components/edit-named-query/edit-named-query.component.mjs +9 -9
  122. package/esm2022/search/search-fulltext/search-fulltext/search-fulltext.component.mjs +3 -3
  123. package/esm2022/search/search-home/search-home.component.mjs +3 -3
  124. package/esm2022/search/search-mono-class/components/search-composed/search-composed.component.mjs +3 -3
  125. package/esm2022/search/search-mono-class/components/search-condition/search-condition.component.mjs +3 -3
  126. package/esm2022/search/search-mono-class/components/search-mono-class/search-mono-class.component.mjs +8 -8
  127. package/esm2022/search/search-mono-class/components/search-order/search-order.component.mjs +6 -6
  128. package/esm2022/search/search-mono-class/components/search-select-attribute/search-select-attribute.component.mjs +3 -3
  129. package/esm2022/search/search-mono-class/store/search-mono-class.service.mjs +4 -4
  130. package/esm2022/search/search-multi-class/components/multi-class-condition/multi-class-condition.component.mjs +7 -7
  131. package/esm2022/search/search-multi-class/components/multi-class-field-selection/multi-class-field-selection.component.mjs +6 -6
  132. package/esm2022/search/search-multi-class/components/search-multi-class/search-multi-class.component.mjs +7 -7
  133. package/esm2022/search/search-tools/search-tools.component.mjs +13 -13
  134. package/esm2022/toolbox/components/named-query/named-query.component.mjs +5 -5
  135. package/esm2022/toolbox/components/save-view/save-view.component.mjs +10 -10
  136. package/esm2022/toolbox/components/select-grid-layout/select-grid-layout.component.mjs +8 -8
  137. package/esm2022/toolbox/shared/presentation-form/presentation-form.component.mjs +9 -6
  138. package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +3 -3
  139. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +4 -4
  140. package/esm2022/widgets/widget-analytic/component/widget-analytic.component.mjs +2 -2
  141. package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +12 -12
  142. package/esm2022/widgets/widget-detail/component/widget-detail.component.mjs +13 -7
  143. package/esm2022/widgets/widget-graph/component/widget-graph.component.mjs +7 -7
  144. package/esm2022/widgets/widget-iframe/component/widget-iframe.component.mjs +7 -7
  145. package/esm2022/widgets/widget-iframe/messaging/iframe-messaging.service.mjs +2 -2
  146. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +10 -10
  147. package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +2 -2
  148. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +2 -2
  149. package/esm2022/widgets/widget-table/expand-value/expand-value.component.mjs +4 -5
  150. package/esm2022/widgets/widget-template/component/widget-template.component.mjs +7 -7
  151. package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +10 -10
  152. package/esm2022/widgets/widget-vega/component/widget-vega.component.mjs +9 -9
  153. package/fesm2022/provoly-dashboard-admin.mjs +171 -175
  154. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  155. package/fesm2022/provoly-dashboard-components-card.mjs +4 -5
  156. package/fesm2022/provoly-dashboard-components-card.mjs.map +1 -1
  157. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs +4 -4
  158. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs.map +1 -1
  159. package/fesm2022/provoly-dashboard-components-scheme-picker.mjs +6 -6
  160. package/fesm2022/provoly-dashboard-components-scheme-picker.mjs.map +1 -1
  161. package/fesm2022/provoly-dashboard-components-stepper.mjs +2 -3
  162. package/fesm2022/provoly-dashboard-components-stepper.mjs.map +1 -1
  163. package/fesm2022/provoly-dashboard-dataset.mjs +14 -14
  164. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  165. package/fesm2022/provoly-dashboard-filters-date.mjs +4 -5
  166. package/fesm2022/provoly-dashboard-filters-date.mjs.map +1 -1
  167. package/fesm2022/provoly-dashboard-filters-list.mjs +4 -5
  168. package/fesm2022/provoly-dashboard-filters-list.mjs.map +1 -1
  169. package/fesm2022/provoly-dashboard-filters-number.mjs +4 -5
  170. package/fesm2022/provoly-dashboard-filters-number.mjs.map +1 -1
  171. package/fesm2022/provoly-dashboard-filters-text.mjs +4 -5
  172. package/fesm2022/provoly-dashboard-filters-text.mjs.map +1 -1
  173. package/fesm2022/provoly-dashboard-notification.mjs +4 -4
  174. package/fesm2022/provoly-dashboard-notification.mjs.map +1 -1
  175. package/fesm2022/provoly-dashboard-pipeline.mjs +21 -21
  176. package/fesm2022/provoly-dashboard-pipeline.mjs.map +1 -1
  177. package/fesm2022/provoly-dashboard-presentation.mjs +14 -14
  178. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  179. package/fesm2022/provoly-dashboard-restitution.mjs +6 -6
  180. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  181. package/fesm2022/provoly-dashboard-search.mjs +38 -38
  182. package/fesm2022/provoly-dashboard-search.mjs.map +1 -1
  183. package/fesm2022/provoly-dashboard-toolbox.mjs +29 -25
  184. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  185. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +2 -2
  186. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -1
  187. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +3 -3
  188. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  189. package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs +1 -1
  190. package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs.map +1 -1
  191. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +10 -10
  192. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
  193. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs +11 -5
  194. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs.map +1 -1
  195. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs +5 -5
  196. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs.map +1 -1
  197. package/fesm2022/provoly-dashboard-widgets-widget-iframe.mjs +8 -8
  198. package/fesm2022/provoly-dashboard-widgets-widget-iframe.mjs.map +1 -1
  199. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +9 -9
  200. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  201. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +6 -6
  202. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  203. package/fesm2022/provoly-dashboard-widgets-widget-template.mjs +7 -7
  204. package/fesm2022/provoly-dashboard-widgets-widget-template.mjs.map +1 -1
  205. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +11 -11
  206. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
  207. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs +7 -7
  208. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs.map +1 -1
  209. package/fesm2022/provoly-dashboard.mjs +245 -224
  210. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  211. package/lib/core/model/result-set.interface.d.ts +6 -0
  212. package/lib/core/model/search-mono-class.model.d.ts +9 -2
  213. package/lib/core/store/relation-types/relation-types.actions.d.ts +9 -0
  214. package/lib/core/store/relation-types/relation-types.effects.d.ts +5 -0
  215. package/lib/core/store/relation-types/relation-types.service.d.ts +1 -0
  216. package/lib/core/store/search/search.actions.d.ts +4 -0
  217. package/lib/core/store/search/search.effects.d.ts +1 -0
  218. package/lib/core/store/search/search.service.d.ts +2 -2
  219. package/lib/dashboard/store/dashboard.actions.d.ts +5 -0
  220. package/lib/dashboard/store/dashboard.effects.d.ts +2 -0
  221. package/package.json +37 -37
  222. package/search/search-fulltext/store/search-fulltext.effects.d.ts +1 -0
  223. package/search/search-mono-class/store/search-mono-class.effects.d.ts +1 -0
  224. package/search/search-mono-class/store/search-mono-class.service.d.ts +1 -1
  225. package/search/search-multi-class/store/search-multi-class.effects.d.ts +1 -0
  226. package/toolbox/shared/presentation-form/presentation-form.component.d.ts +1 -0
@@ -1,18 +1,18 @@
1
- import * as i2 from '@angular/cdk/overlay';
1
+ import * as i2$1 from '@angular/cdk/overlay';
2
2
  import { OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
3
- import * as i1$1 from '@angular/common';
3
+ import * as i3 from '@angular/common';
4
4
  import { CommonModule, AsyncPipe, DOCUMENT } from '@angular/common';
5
- import * as i1$2 from '@angular/common/http';
5
+ import * as i1$1 from '@angular/common/http';
6
6
  import { HttpHeaders, HttpUrlEncodingCodec, HttpParams, HttpClientModule } from '@angular/common/http';
7
7
  import * as i0 from '@angular/core';
8
8
  import { InjectionToken, Injectable, Directive, Optional, Inject, Input, Component, Pipe, ChangeDetectionStrategy, HostBinding, NgModule, Injector, EventEmitter, Output, TemplateRef, ViewChild, SecurityContext, ContentChildren, forwardRef, HostListener, ViewContainerRef, ViewChildren, ViewEncapsulation, createNgModule } from '@angular/core';
9
- import * as i3 from '@angular/router';
9
+ import * as i2 from '@angular/router';
10
10
  import { NavigationEnd, RouterModule } from '@angular/router';
11
- import * as i1$3 from '@ngrx/effects';
11
+ import * as i1$2 from '@ngrx/effects';
12
12
  import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
13
13
  import * as i1 from '@ngrx/store';
14
14
  import { createAction, props, createReducer, on, createFeatureSelector, createSelector, StoreModule } from '@ngrx/store';
15
- import { of, Subscription, filter, combineLatest, debounceTime, BehaviorSubject, map, Subject, windowTime, switchMap, mergeMap, from as from$1, forkJoin, catchError as catchError$1, startWith, throwError, tap as tap$1, combineLatestWith, merge, distinctUntilChanged as distinctUntilChanged$1, withLatestFrom as withLatestFrom$1, groupBy, EMPTY, share, ReplaySubject, delay, fromEvent, auditTime, interval } from 'rxjs';
15
+ import { of, Subscription, filter, combineLatest, debounceTime, BehaviorSubject, map, Subject, windowTime, switchMap, mergeMap, from as from$1, forkJoin, catchError as catchError$1, startWith, throwError, take, withLatestFrom as withLatestFrom$1, tap as tap$1, combineLatestWith, merge, distinctUntilChanged as distinctUntilChanged$1, groupBy, EMPTY, share, ReplaySubject, delay, fromEvent, auditTime, interval } from 'rxjs';
16
16
  import * as i3$1 from '@angular/platform-browser';
17
17
  import { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';
18
18
  import * as i3$2 from '@angular/cdk/a11y';
@@ -22,9 +22,9 @@ import { distinctUntilChanged, filter as filter$1, debounceTime as debounceTime$
22
22
  import { animation, style, animate, trigger, transition, useAnimation } from '@angular/animations';
23
23
  import { Style, Icon } from 'ol/style';
24
24
  import { createEntityAdapter } from '@ngrx/entity';
25
- import * as i1$4 from '@angular/cdk/accordion';
25
+ import * as i1$3 from '@angular/cdk/accordion';
26
26
  import { CdkAccordionModule } from '@angular/cdk/accordion';
27
- import * as i3$3 from '@angular/forms';
27
+ import * as i2$2 from '@angular/forms';
28
28
  import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
29
29
  import * as i7 from '@provoly/dashboard/components/checkbox';
30
30
  import { PryCheckboxModule } from '@provoly/dashboard/components/checkbox';
@@ -163,13 +163,13 @@ class BaseLayoutComponent extends SubscriptionnerDirective {
163
163
  highlightMenu(menu) {
164
164
  console.error('Must override highLightMenu function');
165
165
  }
166
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: BaseLayoutComponent, deps: [{ token: i1.Store }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
166
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: BaseLayoutComponent, deps: [{ token: i1.Store }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
167
167
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: BaseLayoutComponent, selector: "pry-base-layout", usesInheritance: true, ngImport: i0, template: "<div>\n <ng-container #componentRef></ng-container>\n</div>\n" }); }
168
168
  }
169
169
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: BaseLayoutComponent, decorators: [{
170
170
  type: Component,
171
171
  args: [{ selector: 'pry-base-layout', template: "<div>\n <ng-container #componentRef></ng-container>\n</div>\n" }]
172
- }], ctorParameters: () => [{ type: i1.Store }, { type: i3.Router }] });
172
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i2.Router }] });
173
173
 
174
174
  function deepMerge(target, source) {
175
175
  const isObject = (obj) => obj && typeof obj === 'object';
@@ -1253,11 +1253,11 @@ class BaseMenuComponent extends SubscriptionnerDirective {
1253
1253
  console.error('Must override init function');
1254
1254
  }
1255
1255
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: BaseMenuComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
1256
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: BaseMenuComponent, selector: "pry-base-menu", usesInheritance: true, ngImport: i0, template: "<nav class=\"m-nav-links\">\n <ng-container *ngFor=\"let sub of subMenu$ | async\">\n <ul class=\"m-nav-links__list\">\n <ng-container *ngFor=\"let menu of sub.subMenus\">\n <li\n *pryAccess=\"{ module: menu.module, page: menu.page, subMenu: menu.subMenu }\"\n class=\"m-nav-links__list__item\"\n >\n <a [routerLink]=\"menu.menu\" class=\"a-btn -width-full\" [routerLinkActive]=\"'is-active'\">\n {{ baseMenuTranslation + menu.menu | i18n }}\n </a>\n </li>\n </ng-container>\n </ul>\n </ng-container>\n</nav>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
1256
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: BaseMenuComponent, selector: "pry-base-menu", usesInheritance: true, ngImport: i0, template: "<nav class=\"m-nav-links\">\n @for (sub of subMenu$ | async; track sub) {\n <ul class=\"m-nav-links__list\">\n @for (menu of sub.subMenus; track menu) {\n <li\n *pryAccess=\"{ module: menu.module, page: menu.page, subMenu: menu.subMenu }\"\n class=\"m-nav-links__list__item\"\n >\n <a [routerLink]=\"menu.menu\" class=\"a-btn -width-full\" [routerLinkActive]=\"'is-active'\">\n {{ baseMenuTranslation + menu.menu | i18n }}\n </a>\n </li>\n }\n </ul>\n }\n</nav>\n", dependencies: [{ kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
1257
1257
  }
1258
1258
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: BaseMenuComponent, decorators: [{
1259
1259
  type: Component,
1260
- args: [{ selector: 'pry-base-menu', template: "<nav class=\"m-nav-links\">\n <ng-container *ngFor=\"let sub of subMenu$ | async\">\n <ul class=\"m-nav-links__list\">\n <ng-container *ngFor=\"let menu of sub.subMenus\">\n <li\n *pryAccess=\"{ module: menu.module, page: menu.page, subMenu: menu.subMenu }\"\n class=\"m-nav-links__list__item\"\n >\n <a [routerLink]=\"menu.menu\" class=\"a-btn -width-full\" [routerLinkActive]=\"'is-active'\">\n {{ baseMenuTranslation + menu.menu | i18n }}\n </a>\n </li>\n </ng-container>\n </ul>\n </ng-container>\n</nav>\n" }]
1260
+ args: [{ selector: 'pry-base-menu', template: "<nav class=\"m-nav-links\">\n @for (sub of subMenu$ | async; track sub) {\n <ul class=\"m-nav-links__list\">\n @for (menu of sub.subMenus; track menu) {\n <li\n *pryAccess=\"{ module: menu.module, page: menu.page, subMenu: menu.subMenu }\"\n class=\"m-nav-links__list__item\"\n >\n <a [routerLink]=\"menu.menu\" class=\"a-btn -width-full\" [routerLinkActive]=\"'is-active'\">\n {{ baseMenuTranslation + menu.menu | i18n }}\n </a>\n </li>\n }\n </ul>\n }\n</nav>\n" }]
1261
1261
  }], ctorParameters: () => [{ type: i1.Store }] });
1262
1262
 
1263
1263
  const DEFAULT_ICON_URL = '/assets/svgs/default.svg';
@@ -1345,11 +1345,11 @@ class PryIconComponent {
1345
1345
  this.baseStyle = this.sanitizer.bypassSecurityTrustStyle(safeStyle);
1346
1346
  }
1347
1347
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryIconComponent, deps: [{ token: i3$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
1348
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryIconComponent, selector: "pry-icon", inputs: { color: "color", iconSvg: "iconSvg", animation: "animation", iconImage: "iconImage", alt: "alt", width: "width", height: "height", classes: "classes" }, host: { properties: { "style": "this.baseStyle" } }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"iconSvgUrl\">\n <span\n class=\"a-icon\"\n [ngClass]=\"color!\"\n [ngClass]=\"classes\"\n [ngStyle]=\"{\n 'width.px': width,\n 'height.px': height,\n 'mask-image': 'url(' + iconSvgUrl + ')',\n '-webkit-mask-image': 'url(' + iconSvgUrl + ')'\n }\"\n aria-hidden=\"true\"\n focusable=\"false\"\n ></span>\n</ng-container>\n<ng-container *ngIf=\"iconImageUrl\">\n <img class=\"a-icon-img\" [src]=\"iconImageUrl\" [style.height.px]=\"height\" [style.width.px]=\"width\" [alt]=\"alt\" />\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1348
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryIconComponent, selector: "pry-icon", inputs: { color: "color", iconSvg: "iconSvg", animation: "animation", iconImage: "iconImage", alt: "alt", width: "width", height: "height", classes: "classes" }, host: { properties: { "style": "this.baseStyle" } }, usesOnChanges: true, ngImport: i0, template: "@if (iconSvgUrl) {\n <span\n class=\"a-icon\"\n [ngClass]=\"color!\"\n [ngClass]=\"classes\"\n [ngStyle]=\"{\n 'width.px': width,\n 'height.px': height,\n 'mask-image': 'url(' + iconSvgUrl + ')',\n '-webkit-mask-image': 'url(' + iconSvgUrl + ')'\n }\"\n aria-hidden=\"true\"\n focusable=\"false\"\n ></span>\n}\n@if (iconImageUrl) {\n <img class=\"a-icon-img\" [src]=\"iconImageUrl\" [style.height.px]=\"height\" [style.width.px]=\"width\" [alt]=\"alt\" />\n}\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1349
1349
  }
1350
1350
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryIconComponent, decorators: [{
1351
1351
  type: Component,
1352
- args: [{ selector: 'pry-icon', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"iconSvgUrl\">\n <span\n class=\"a-icon\"\n [ngClass]=\"color!\"\n [ngClass]=\"classes\"\n [ngStyle]=\"{\n 'width.px': width,\n 'height.px': height,\n 'mask-image': 'url(' + iconSvgUrl + ')',\n '-webkit-mask-image': 'url(' + iconSvgUrl + ')'\n }\"\n aria-hidden=\"true\"\n focusable=\"false\"\n ></span>\n</ng-container>\n<ng-container *ngIf=\"iconImageUrl\">\n <img class=\"a-icon-img\" [src]=\"iconImageUrl\" [style.height.px]=\"height\" [style.width.px]=\"width\" [alt]=\"alt\" />\n</ng-container>\n" }]
1352
+ args: [{ selector: 'pry-icon', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (iconSvgUrl) {\n <span\n class=\"a-icon\"\n [ngClass]=\"color!\"\n [ngClass]=\"classes\"\n [ngStyle]=\"{\n 'width.px': width,\n 'height.px': height,\n 'mask-image': 'url(' + iconSvgUrl + ')',\n '-webkit-mask-image': 'url(' + iconSvgUrl + ')'\n }\"\n aria-hidden=\"true\"\n focusable=\"false\"\n ></span>\n}\n@if (iconImageUrl) {\n <img class=\"a-icon-img\" [src]=\"iconImageUrl\" [style.height.px]=\"height\" [style.width.px]=\"width\" [alt]=\"alt\" />\n}\n" }]
1353
1353
  }], ctorParameters: () => [{ type: i3$1.DomSanitizer }], propDecorators: { baseStyle: [{
1354
1354
  type: HostBinding,
1355
1355
  args: ['style']
@@ -1415,11 +1415,11 @@ class BaseToolboxActionComponent {
1415
1415
  this._cd.markForCheck();
1416
1416
  }
1417
1417
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: BaseToolboxActionComponent, deps: [{ token: i1.Store }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1418
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: BaseToolboxActionComponent, selector: "pry-base-toolbox-action", inputs: { baseToolboxTranslation: "baseToolboxTranslation", action: "action", iconAction: "iconAction" }, ngImport: i0, template: "<ng-container *ngIf=\"action\">\n <ul>\n <li class=\"m-actions-list__item\">\n <button\n class=\"a-btn a-btn--secondary\"\n [class.is-active]=\"panelOpen\"\n (click)=\"select(action)\"\n [disabled]=\"action.disabled\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n >\n <ng-container *ngIf=\"!iconAction; else iconActionTpl\">\n <pry-icon *ngIf=\"action.icon\" [iconSvg]=\"action.icon\" [height]=\"20\" [width]=\"20\"></pry-icon>\n {{ baseToolboxTranslation + action.label | i18n }}\n <pry-icon *ngIf=\"action.actions\" iconSvg=\"fleche_bas\"></pry-icon>\n </ng-container>\n <ng-template #iconActionTpl>\n <pry-icon\n *ngIf=\"action.icon\"\n [iconSvg]=\"action.icon\"\n [title]=\"baseToolboxTranslation + action.label | i18n\"\n ></pry-icon>\n </ng-template>\n </button>\n </li>\n </ul>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayLockPosition\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayPositions]=\"connectedPositions\"\n (backdropClick)=\"onClosePanel()\"\n >\n <div class=\"m-pry-overlay-panel-wrapper\">\n <div class=\"m-pry-overlay-panel\">\n <ng-container *ngFor=\"let act of action.actions\">\n <button class=\"m-pry-overlay-panel-item\" (click)=\"select(act)\">\n {{ baseToolboxTranslation + act.label | i18n }}\n </button>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { 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: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1418
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: BaseToolboxActionComponent, selector: "pry-base-toolbox-action", inputs: { baseToolboxTranslation: "baseToolboxTranslation", action: "action", iconAction: "iconAction" }, ngImport: i0, template: "@if (action) {\n <ul>\n <li class=\"m-actions-list__item\">\n <button\n class=\"a-btn a-btn--secondary\"\n [class.is-active]=\"panelOpen\"\n (click)=\"select(action)\"\n [disabled]=\"action.disabled\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n >\n @if (!iconAction) {\n @if (action.icon) {\n <pry-icon [iconSvg]=\"action.icon\" [height]=\"20\" [width]=\"20\"></pry-icon>\n }\n {{ baseToolboxTranslation + action.label | i18n }}\n @if (action.actions) {\n <pry-icon iconSvg=\"fleche_bas\"></pry-icon>\n }\n } @else {\n @if (action.icon) {\n <pry-icon\n [iconSvg]=\"action.icon\"\n [title]=\"baseToolboxTranslation + action.label | i18n\"\n ></pry-icon>\n }\n }\n </button>\n </li>\n </ul>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayLockPosition\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayPositions]=\"connectedPositions\"\n (backdropClick)=\"onClosePanel()\"\n >\n <div class=\"m-pry-overlay-panel-wrapper\">\n <div class=\"m-pry-overlay-panel\">\n @for (act of action.actions; track act) {\n <button class=\"m-pry-overlay-panel-item\" (click)=\"select(act)\">\n {{ baseToolboxTranslation + act.label | i18n }}\n </button>\n }\n </div>\n </div>\n </ng-template>\n}\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i2$1.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$1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1419
1419
  }
1420
1420
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: BaseToolboxActionComponent, decorators: [{
1421
1421
  type: Component,
1422
- args: [{ selector: 'pry-base-toolbox-action', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"action\">\n <ul>\n <li class=\"m-actions-list__item\">\n <button\n class=\"a-btn a-btn--secondary\"\n [class.is-active]=\"panelOpen\"\n (click)=\"select(action)\"\n [disabled]=\"action.disabled\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n >\n <ng-container *ngIf=\"!iconAction; else iconActionTpl\">\n <pry-icon *ngIf=\"action.icon\" [iconSvg]=\"action.icon\" [height]=\"20\" [width]=\"20\"></pry-icon>\n {{ baseToolboxTranslation + action.label | i18n }}\n <pry-icon *ngIf=\"action.actions\" iconSvg=\"fleche_bas\"></pry-icon>\n </ng-container>\n <ng-template #iconActionTpl>\n <pry-icon\n *ngIf=\"action.icon\"\n [iconSvg]=\"action.icon\"\n [title]=\"baseToolboxTranslation + action.label | i18n\"\n ></pry-icon>\n </ng-template>\n </button>\n </li>\n </ul>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayLockPosition\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayPositions]=\"connectedPositions\"\n (backdropClick)=\"onClosePanel()\"\n >\n <div class=\"m-pry-overlay-panel-wrapper\">\n <div class=\"m-pry-overlay-panel\">\n <ng-container *ngFor=\"let act of action.actions\">\n <button class=\"m-pry-overlay-panel-item\" (click)=\"select(act)\">\n {{ baseToolboxTranslation + act.label | i18n }}\n </button>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</ng-container>\n" }]
1422
+ args: [{ selector: 'pry-base-toolbox-action', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (action) {\n <ul>\n <li class=\"m-actions-list__item\">\n <button\n class=\"a-btn a-btn--secondary\"\n [class.is-active]=\"panelOpen\"\n (click)=\"select(action)\"\n [disabled]=\"action.disabled\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n >\n @if (!iconAction) {\n @if (action.icon) {\n <pry-icon [iconSvg]=\"action.icon\" [height]=\"20\" [width]=\"20\"></pry-icon>\n }\n {{ baseToolboxTranslation + action.label | i18n }}\n @if (action.actions) {\n <pry-icon iconSvg=\"fleche_bas\"></pry-icon>\n }\n } @else {\n @if (action.icon) {\n <pry-icon\n [iconSvg]=\"action.icon\"\n [title]=\"baseToolboxTranslation + action.label | i18n\"\n ></pry-icon>\n }\n }\n </button>\n </li>\n </ul>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayLockPosition\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayPositions]=\"connectedPositions\"\n (backdropClick)=\"onClosePanel()\"\n >\n <div class=\"m-pry-overlay-panel-wrapper\">\n <div class=\"m-pry-overlay-panel\">\n @for (act of action.actions; track act) {\n <button class=\"m-pry-overlay-panel-item\" (click)=\"select(act)\">\n {{ baseToolboxTranslation + act.label | i18n }}\n </button>\n }\n </div>\n </div>\n </ng-template>\n}\n" }]
1423
1423
  }], ctorParameters: () => [{ type: i1.Store }, { type: i0.ChangeDetectorRef }], propDecorators: { baseToolboxTranslation: [{
1424
1424
  type: Input
1425
1425
  }], action: [{
@@ -1433,11 +1433,11 @@ class BaseToolboxComponent {
1433
1433
  this.baseToolboxTranslation = '';
1434
1434
  }
1435
1435
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: BaseToolboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1436
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: BaseToolboxComponent, selector: "pry-base-toolbox", inputs: { baseToolboxTranslation: "baseToolboxTranslation", actions$: "actions$", subActions$: "subActions$" }, ngImport: i0, template: "<div class=\"o-base-layout__toolbox__actions\">\n <ul class=\"m-actions-list\">\n <ng-container *ngFor=\"let action of actions$ | async\">\n <pry-base-toolbox-action\n *pryAccess=\"{ module: action.moduleAccess, page: action.pageAccess, action: action.actionAccess }\"\n [action]=\"action\"\n [baseToolboxTranslation]=\"baseToolboxTranslation\"\n >\n </pry-base-toolbox-action>\n </ng-container>\n </ul>\n\n <ul class=\"m-actions-list\">\n <ng-container *ngFor=\"let action of subActions$ | async\">\n <pry-base-toolbox-action\n *pryAccess=\"{ module: action.moduleAccess, page: action.pageAccess, action: action.actionAccess }\"\n [action]=\"action\"\n [baseToolboxTranslation]=\"baseToolboxTranslation\"\n [iconAction]=\"true\"\n >\n </pry-base-toolbox-action>\n </ng-container>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: BaseToolboxActionComponent, selector: "pry-base-toolbox-action", inputs: ["baseToolboxTranslation", "action", "iconAction"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] }); }
1436
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: BaseToolboxComponent, selector: "pry-base-toolbox", inputs: { baseToolboxTranslation: "baseToolboxTranslation", actions$: "actions$", subActions$: "subActions$" }, ngImport: i0, template: "<div class=\"o-base-layout__toolbox__actions\">\n <ul class=\"m-actions-list\">\n @for (action of actions$ | async; track action) {\n <pry-base-toolbox-action\n *pryAccess=\"{ module: action.moduleAccess, page: action.pageAccess, action: action.actionAccess }\"\n [action]=\"action\"\n [baseToolboxTranslation]=\"baseToolboxTranslation\"\n >\n </pry-base-toolbox-action>\n }\n </ul>\n\n <ul class=\"m-actions-list\">\n @for (action of subActions$ | async; track action) {\n <pry-base-toolbox-action\n *pryAccess=\"{ module: action.moduleAccess, page: action.pageAccess, action: action.actionAccess }\"\n [action]=\"action\"\n [baseToolboxTranslation]=\"baseToolboxTranslation\"\n [iconAction]=\"true\"\n >\n </pry-base-toolbox-action>\n }\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: BaseToolboxActionComponent, selector: "pry-base-toolbox-action", inputs: ["baseToolboxTranslation", "action", "iconAction"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
1437
1437
  }
1438
1438
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: BaseToolboxComponent, decorators: [{
1439
1439
  type: Component,
1440
- args: [{ selector: 'pry-base-toolbox', template: "<div class=\"o-base-layout__toolbox__actions\">\n <ul class=\"m-actions-list\">\n <ng-container *ngFor=\"let action of actions$ | async\">\n <pry-base-toolbox-action\n *pryAccess=\"{ module: action.moduleAccess, page: action.pageAccess, action: action.actionAccess }\"\n [action]=\"action\"\n [baseToolboxTranslation]=\"baseToolboxTranslation\"\n >\n </pry-base-toolbox-action>\n </ng-container>\n </ul>\n\n <ul class=\"m-actions-list\">\n <ng-container *ngFor=\"let action of subActions$ | async\">\n <pry-base-toolbox-action\n *pryAccess=\"{ module: action.moduleAccess, page: action.pageAccess, action: action.actionAccess }\"\n [action]=\"action\"\n [baseToolboxTranslation]=\"baseToolboxTranslation\"\n [iconAction]=\"true\"\n >\n </pry-base-toolbox-action>\n </ng-container>\n </ul>\n</div>\n" }]
1440
+ args: [{ selector: 'pry-base-toolbox', template: "<div class=\"o-base-layout__toolbox__actions\">\n <ul class=\"m-actions-list\">\n @for (action of actions$ | async; track action) {\n <pry-base-toolbox-action\n *pryAccess=\"{ module: action.moduleAccess, page: action.pageAccess, action: action.actionAccess }\"\n [action]=\"action\"\n [baseToolboxTranslation]=\"baseToolboxTranslation\"\n >\n </pry-base-toolbox-action>\n }\n </ul>\n\n <ul class=\"m-actions-list\">\n @for (action of subActions$ | async; track action) {\n <pry-base-toolbox-action\n *pryAccess=\"{ module: action.moduleAccess, page: action.pageAccess, action: action.actionAccess }\"\n [action]=\"action\"\n [baseToolboxTranslation]=\"baseToolboxTranslation\"\n [iconAction]=\"true\"\n >\n </pry-base-toolbox-action>\n }\n </ul>\n</div>\n" }]
1441
1441
  }], propDecorators: { baseToolboxTranslation: [{
1442
1442
  type: Input
1443
1443
  }], actions$: [{
@@ -2011,13 +2011,13 @@ class PryDialogService {
2011
2011
  });
2012
2012
  return overlay;
2013
2013
  }
2014
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDialogService, deps: [{ token: i0.Injector }, { token: i2.Overlay }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
2014
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDialogService, deps: [{ token: i0.Injector }, { token: i2$1.Overlay }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
2015
2015
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDialogService, providedIn: 'root' }); }
2016
2016
  }
2017
2017
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDialogService, decorators: [{
2018
2018
  type: Injectable,
2019
2019
  args: [{ providedIn: 'root' }]
2020
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i2.Overlay }, { type: i1.Store }] });
2020
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i2$1.Overlay }, { type: i1.Store }] });
2021
2021
 
2022
2022
  class PryStatusModalComponent {
2023
2023
  constructor(store, dialogRef, data) {
@@ -2044,11 +2044,11 @@ class PryStatusModalComponent {
2044
2044
  this.dialogRef.close();
2045
2045
  }
2046
2046
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryStatusModalComponent, deps: [{ token: i1.Store }, { token: PryDialogRef }, { token: PRY_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
2047
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryStatusModalComponent, selector: "pry-status-modal", outputs: { gotoConsult: "gotoConsult" }, ngImport: i0, template: "<div class=\"o-modal-wrapper__backdrop\" (click)=\"close()\">\n <div class=\"o-modal-wrapper -extra-large\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{\n '@pry.dataset.error.modalTitle.' +\n (_version?.state !== 'ERROR' && _version?.hasWarnings ? 'WARNING' : 'ERROR') | i18n\n }}\n ({{ messageCount$ | async }})\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"close()\">\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 <table class=\"a-table\" [attr.aria-describedby]=\"'@pry.a11y.modalStatusTableDescr' | i18n\">\n <thead>\n <tr>\n <th>{{ '@pry.dataset.error.type' | i18n }}</th>\n <th>{{ '@pry.dataset.error.elements' | i18n }}</th>\n <th>{{ '@pry.dataset.error.message' | i18n }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let preview of datasetPreviews$ | async | slice : 0 : 5\">\n <td>\n {{ '@pry.dataset.error.level.' + preview.level | i18n }}\n </td>\n <td>\n {{ preview.recordId }}\n </td>\n <td>\n {{\n '@pry.dataset.error.code.' + preview.extractMessageCode\n | i18n\n : { plural: preview.name.includes(',') ? 's' : '', name: preview.name, recordId: preview.recordId }\n }}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.SlicePipe, name: "slice" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
2047
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryStatusModalComponent, selector: "pry-status-modal", outputs: { gotoConsult: "gotoConsult" }, ngImport: i0, template: "<div class=\"o-modal-wrapper__backdrop\" (click)=\"close()\">\n <div class=\"o-modal-wrapper -extra-large\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{\n '@pry.dataset.error.modalTitle.' +\n (_version?.state !== 'ERROR' && _version?.hasWarnings ? 'WARNING' : 'ERROR') | i18n\n }}\n ({{ messageCount$ | async }})\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"close()\">\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 <table class=\"a-table\" [attr.aria-describedby]=\"'@pry.a11y.modalStatusTableDescr' | i18n\">\n <thead>\n <tr>\n <th>{{ '@pry.dataset.error.type' | i18n }}</th>\n <th>{{ '@pry.dataset.error.elements' | i18n }}</th>\n <th>{{ '@pry.dataset.error.message' | i18n }}</th>\n </tr>\n </thead>\n <tbody>\n @for (preview of datasetPreviews$ | async | slice : 0 : 5; track preview) {\n <tr>\n <td>\n {{ '@pry.dataset.error.level.' + preview.level | i18n }}\n </td>\n <td>\n {{ preview.recordId }}\n </td>\n <td>\n {{\n '@pry.dataset.error.code.' + preview.extractMessageCode\n | i18n\n : { plural: preview.name.includes(',') ? 's' : '', name: preview.name, recordId: preview.recordId }\n }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
2048
2048
  }
2049
2049
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryStatusModalComponent, decorators: [{
2050
2050
  type: Component,
2051
- args: [{ selector: 'pry-status-modal', template: "<div class=\"o-modal-wrapper__backdrop\" (click)=\"close()\">\n <div class=\"o-modal-wrapper -extra-large\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{\n '@pry.dataset.error.modalTitle.' +\n (_version?.state !== 'ERROR' && _version?.hasWarnings ? 'WARNING' : 'ERROR') | i18n\n }}\n ({{ messageCount$ | async }})\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"close()\">\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 <table class=\"a-table\" [attr.aria-describedby]=\"'@pry.a11y.modalStatusTableDescr' | i18n\">\n <thead>\n <tr>\n <th>{{ '@pry.dataset.error.type' | i18n }}</th>\n <th>{{ '@pry.dataset.error.elements' | i18n }}</th>\n <th>{{ '@pry.dataset.error.message' | i18n }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let preview of datasetPreviews$ | async | slice : 0 : 5\">\n <td>\n {{ '@pry.dataset.error.level.' + preview.level | i18n }}\n </td>\n <td>\n {{ preview.recordId }}\n </td>\n <td>\n {{\n '@pry.dataset.error.code.' + preview.extractMessageCode\n | i18n\n : { plural: preview.name.includes(',') ? 's' : '', name: preview.name, recordId: preview.recordId }\n }}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>\n" }]
2051
+ args: [{ selector: 'pry-status-modal', template: "<div class=\"o-modal-wrapper__backdrop\" (click)=\"close()\">\n <div class=\"o-modal-wrapper -extra-large\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{\n '@pry.dataset.error.modalTitle.' +\n (_version?.state !== 'ERROR' && _version?.hasWarnings ? 'WARNING' : 'ERROR') | i18n\n }}\n ({{ messageCount$ | async }})\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"close()\">\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 <table class=\"a-table\" [attr.aria-describedby]=\"'@pry.a11y.modalStatusTableDescr' | i18n\">\n <thead>\n <tr>\n <th>{{ '@pry.dataset.error.type' | i18n }}</th>\n <th>{{ '@pry.dataset.error.elements' | i18n }}</th>\n <th>{{ '@pry.dataset.error.message' | i18n }}</th>\n </tr>\n </thead>\n <tbody>\n @for (preview of datasetPreviews$ | async | slice : 0 : 5; track preview) {\n <tr>\n <td>\n {{ '@pry.dataset.error.level.' + preview.level | i18n }}\n </td>\n <td>\n {{ preview.recordId }}\n </td>\n <td>\n {{\n '@pry.dataset.error.code.' + preview.extractMessageCode\n | i18n\n : { plural: preview.name.includes(',') ? 's' : '', name: preview.name, recordId: preview.recordId }\n }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n" }]
2052
2052
  }], ctorParameters: () => [{ type: i1.Store }, { type: PryDialogRef }, { type: undefined, decorators: [{
2053
2053
  type: Inject,
2054
2054
  args: [PRY_DIALOG_DATA]
@@ -2452,13 +2452,13 @@ class PryNqColorSelectorComponent {
2452
2452
  }
2453
2453
  this.toggleColorChoice();
2454
2454
  }
2455
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryNqColorSelectorComponent, deps: [{ token: i1.Store }, { token: i2.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
2456
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryNqColorSelectorComponent, selector: "pry-nq-color-selector", inputs: { disabled: "disabled", datasource: "datasource" }, outputs: { colorChanged: "colorChanged" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<button (click)=\"toggleColorChoice($event)\" class=\"a-btn a-btn--icon-text o-pry-card-menu__nav__item\" role=\"button\">\n <div\n aria-hidden=\"true\"\n [style.background-color]=\"dsColor ?? '#FFFFFF'\"\n [class]=\"disabled ? 'm-color-selector__point__disabled' : 'm-color-selector__point'\"\n ></div>\n <ng-container *ngIf=\"!disabled\">\n <span>{{ '@pry.search.namedQuery.color' | i18n }}</span>\n <pry-icon class=\"container__point__icon\" iconSvg=\"chevron_right\"></pry-icon>\n </ng-container>\n</button>\n\n<ng-template #template>\n <div class=\"m-color-selector-overlay\">\n <div\n *ngFor=\"let color of possibleColors$ | async\"\n [style.background-color]=\"color\"\n class=\"m-color-selector-overlay__point\"\n (click)=\"changeForColor(color)\"\n >\n <pry-icon *ngIf=\"dsColor === color\" class=\"m-color-selector-overlay__point__check\" iconSvg=\"check\"></pry-icon>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
2455
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryNqColorSelectorComponent, deps: [{ token: i1.Store }, { token: i2$1.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
2456
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryNqColorSelectorComponent, selector: "pry-nq-color-selector", inputs: { disabled: "disabled", datasource: "datasource" }, outputs: { colorChanged: "colorChanged" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<button (click)=\"toggleColorChoice($event)\" class=\"a-btn a-btn--icon-text o-pry-card-menu__nav__item\" role=\"button\">\n <div\n aria-hidden=\"true\"\n [style.background-color]=\"dsColor ?? '#FFFFFF'\"\n [class]=\"disabled ? 'm-color-selector__point__disabled' : 'm-color-selector__point'\"\n ></div>\n @if (!disabled) {\n <span>{{ '@pry.search.namedQuery.color' | i18n }}</span>\n <pry-icon class=\"container__point__icon\" iconSvg=\"chevron_right\"></pry-icon>\n }\n</button>\n\n<ng-template #template>\n <div class=\"m-color-selector-overlay\">\n @for (color of possibleColors$ | async; track color) {\n <div\n [style.background-color]=\"color\"\n class=\"m-color-selector-overlay__point\"\n (click)=\"changeForColor(color)\"\n >\n @if (dsColor === color) {\n <pry-icon class=\"m-color-selector-overlay__point__check\" iconSvg=\"check\"></pry-icon>\n }\n </div>\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
2457
2457
  }
2458
2458
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryNqColorSelectorComponent, decorators: [{
2459
2459
  type: Component,
2460
- args: [{ selector: 'pry-nq-color-selector', template: "<button (click)=\"toggleColorChoice($event)\" class=\"a-btn a-btn--icon-text o-pry-card-menu__nav__item\" role=\"button\">\n <div\n aria-hidden=\"true\"\n [style.background-color]=\"dsColor ?? '#FFFFFF'\"\n [class]=\"disabled ? 'm-color-selector__point__disabled' : 'm-color-selector__point'\"\n ></div>\n <ng-container *ngIf=\"!disabled\">\n <span>{{ '@pry.search.namedQuery.color' | i18n }}</span>\n <pry-icon class=\"container__point__icon\" iconSvg=\"chevron_right\"></pry-icon>\n </ng-container>\n</button>\n\n<ng-template #template>\n <div class=\"m-color-selector-overlay\">\n <div\n *ngFor=\"let color of possibleColors$ | async\"\n [style.background-color]=\"color\"\n class=\"m-color-selector-overlay__point\"\n (click)=\"changeForColor(color)\"\n >\n <pry-icon *ngIf=\"dsColor === color\" class=\"m-color-selector-overlay__point__check\" iconSvg=\"check\"></pry-icon>\n </div>\n </div>\n</ng-template>\n" }]
2461
- }], ctorParameters: () => [{ type: i1.Store }, { type: i2.Overlay }, { type: i0.ViewContainerRef }], propDecorators: { disabled: [{
2460
+ args: [{ selector: 'pry-nq-color-selector', template: "<button (click)=\"toggleColorChoice($event)\" class=\"a-btn a-btn--icon-text o-pry-card-menu__nav__item\" role=\"button\">\n <div\n aria-hidden=\"true\"\n [style.background-color]=\"dsColor ?? '#FFFFFF'\"\n [class]=\"disabled ? 'm-color-selector__point__disabled' : 'm-color-selector__point'\"\n ></div>\n @if (!disabled) {\n <span>{{ '@pry.search.namedQuery.color' | i18n }}</span>\n <pry-icon class=\"container__point__icon\" iconSvg=\"chevron_right\"></pry-icon>\n }\n</button>\n\n<ng-template #template>\n <div class=\"m-color-selector-overlay\">\n @for (color of possibleColors$ | async; track color) {\n <div\n [style.background-color]=\"color\"\n class=\"m-color-selector-overlay__point\"\n (click)=\"changeForColor(color)\"\n >\n @if (dsColor === color) {\n <pry-icon class=\"m-color-selector-overlay__point__check\" iconSvg=\"check\"></pry-icon>\n }\n </div>\n }\n </div>\n</ng-template>\n" }]
2461
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i2$1.Overlay }, { type: i0.ViewContainerRef }], propDecorators: { disabled: [{
2462
2462
  type: Input
2463
2463
  }], datasource: [{
2464
2464
  type: Input
@@ -2493,11 +2493,11 @@ class PryDialogConfirmComponent {
2493
2493
  this.cross.nativeElement.focus();
2494
2494
  }
2495
2495
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDialogConfirmComponent, deps: [{ token: PryDialogRef }, { token: PRY_DIALOG_DATA }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
2496
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryDialogConfirmComponent, selector: "pry-dialog-confirm", viewQueries: [{ propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "buttonAction", first: true, predicate: ["buttonAction"], descendants: true }], ngImport: i0, template: "<div\n class=\"o-modal-wrapper\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_confirmDelete\"\n (keydown.escape)=\"onClick()\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ data.title | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closeDialog()\" #cross>\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 <p *ngIf=\"data?.message as message\" class=\"a-p\">{{ message | i18n }}</p>\n </div>\n <div class=\"m-btn-group\">\n <ng-container *ngFor=\"let action of data.actions\" #buttonAction>\n <button\n (click)=\"onClick(action)\"\n class=\"a-btn\"\n type=\"button\"\n [class.a-btn--primary]=\"action.color === 'primary' || action.color === undefined\"\n [class.a-btn--secondary]=\"action.color === 'secondary'\"\n [ngClass]=\"{ 'a-btn--icon-text': action.icon }\"\n >\n <pry-icon *ngIf=\"action.icon\" [iconSvg]=\"action.icon\"></pry-icon>\n {{ action.label | i18n }}\n </button>\n </ng-container>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3$2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
2496
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryDialogConfirmComponent, selector: "pry-dialog-confirm", viewQueries: [{ propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "buttonAction", first: true, predicate: ["buttonAction"], descendants: true }], ngImport: i0, template: "<div\n class=\"o-modal-wrapper\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_confirmDelete\"\n (keydown.escape)=\"onClick()\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n >\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ data.title | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closeDialog()\" #cross>\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 @if (data?.message; as message) {\n <p class=\"a-p\">{{ message | i18n }}</p>\n }\n </div>\n <div class=\"m-btn-group\">\n @for (action of data.actions; track action) {\n <ng-container #buttonAction>\n <button\n (click)=\"onClick(action)\"\n class=\"a-btn\"\n type=\"button\"\n [class.a-btn--primary]=\"action.color === 'primary' || action.color === undefined\"\n [class.a-btn--secondary]=\"action.color === 'secondary'\"\n [ngClass]=\"{ 'a-btn--icon-text': action.icon }\"\n >\n @if (action.icon) {\n <pry-icon [iconSvg]=\"action.icon\"></pry-icon>\n }\n {{ action.label | i18n }}\n </button>\n </ng-container>\n }\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3$2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
2497
2497
  }
2498
2498
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDialogConfirmComponent, decorators: [{
2499
2499
  type: Component,
2500
- args: [{ selector: 'pry-dialog-confirm', template: "<div\n class=\"o-modal-wrapper\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_confirmDelete\"\n (keydown.escape)=\"onClick()\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ data.title | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closeDialog()\" #cross>\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 <p *ngIf=\"data?.message as message\" class=\"a-p\">{{ message | i18n }}</p>\n </div>\n <div class=\"m-btn-group\">\n <ng-container *ngFor=\"let action of data.actions\" #buttonAction>\n <button\n (click)=\"onClick(action)\"\n class=\"a-btn\"\n type=\"button\"\n [class.a-btn--primary]=\"action.color === 'primary' || action.color === undefined\"\n [class.a-btn--secondary]=\"action.color === 'secondary'\"\n [ngClass]=\"{ 'a-btn--icon-text': action.icon }\"\n >\n <pry-icon *ngIf=\"action.icon\" [iconSvg]=\"action.icon\"></pry-icon>\n {{ action.label | i18n }}\n </button>\n </ng-container>\n </div>\n </div>\n</div>\n" }]
2500
+ args: [{ selector: 'pry-dialog-confirm', template: "<div\n class=\"o-modal-wrapper\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_confirmDelete\"\n (keydown.escape)=\"onClick()\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n >\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ data.title | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"closeDialog()\" #cross>\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 @if (data?.message; as message) {\n <p class=\"a-p\">{{ message | i18n }}</p>\n }\n </div>\n <div class=\"m-btn-group\">\n @for (action of data.actions; track action) {\n <ng-container #buttonAction>\n <button\n (click)=\"onClick(action)\"\n class=\"a-btn\"\n type=\"button\"\n [class.a-btn--primary]=\"action.color === 'primary' || action.color === undefined\"\n [class.a-btn--secondary]=\"action.color === 'secondary'\"\n [ngClass]=\"{ 'a-btn--icon-text': action.icon }\"\n >\n @if (action.icon) {\n <pry-icon [iconSvg]=\"action.icon\"></pry-icon>\n }\n {{ action.label | i18n }}\n </button>\n </ng-container>\n }\n </div>\n </div>\n</div>\n" }]
2501
2501
  }], ctorParameters: () => [{ type: PryDialogRef }, { type: undefined, decorators: [{
2502
2502
  type: Inject,
2503
2503
  args: [PRY_DIALOG_DATA]
@@ -2614,13 +2614,13 @@ class PryOverlayDirective {
2614
2614
  break;
2615
2615
  }
2616
2616
  }
2617
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryOverlayDirective, deps: [{ token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
2617
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryOverlayDirective, deps: [{ token: i2$1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
2618
2618
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: PryOverlayDirective, selector: "[pryOverlay]", inputs: { pryOverlay: "pryOverlay", styleReversed: "styleReversed", pryOverlaySticky: "pryOverlaySticky", pryOverlayNoPadding: "pryOverlayNoPadding", pryOverlayPosition: "pryOverlayPosition", overlayOpen: "overlayOpen", hasBackdrop: "hasBackdrop" }, outputs: { overlayOpenChange: "overlayOpenChange" }, ngImport: i0 }); }
2619
2619
  }
2620
2620
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryOverlayDirective, decorators: [{
2621
2621
  type: Directive,
2622
2622
  args: [{ selector: '[pryOverlay]' }]
2623
- }], ctorParameters: () => [{ type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }], propDecorators: { pryOverlay: [{
2623
+ }], ctorParameters: () => [{ type: i2$1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }], propDecorators: { pryOverlay: [{
2624
2624
  type: Input
2625
2625
  }], styleReversed: [{
2626
2626
  type: Input
@@ -2736,7 +2736,7 @@ class PrySnackbarComponent {
2736
2736
  this.hiddenFromAction = true;
2737
2737
  }
2738
2738
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PrySnackbarComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
2739
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PrySnackbarComponent, selector: "pry-snackbar", inputs: { data: "data", listIndex: "listIndex", actionClicked: "actionClicked" }, ngImport: i0, template: "<div\n class=\"m-snackbar -bottom\"\n [ngClass]=\"typeClass\"\n [@panelState]=\"{ value: 'visible', params: { transform: transformOptions, transition: transitionOptions } }\"\n *ngIf=\"!hiddenFromAction\"\n [style.bottom.px]=\"listIndex * 60\"\n>\n <div class=\"m-snackbar__content\">\n <pry-icon [iconSvg]=\"icon\"></pry-icon>\n <p class=\"a-p\">{{ data.message }}</p>\n <button class=\"m-snackbar__action\" *ngIf=\"!!data.action\" (click)=\"actionClick()\">{{ data.action }}</button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }], animations: [
2739
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PrySnackbarComponent, selector: "pry-snackbar", inputs: { data: "data", listIndex: "listIndex", actionClicked: "actionClicked" }, ngImport: i0, template: "@if (!hiddenFromAction) {\n <div\n class=\"m-snackbar -bottom\"\n [ngClass]=\"typeClass\"\n [@panelState]=\"{ value: 'visible', params: { transform: transformOptions, transition: transitionOptions } }\"\n [style.bottom.px]=\"listIndex * 60\"\n >\n <div class=\"m-snackbar__content\">\n <pry-icon [iconSvg]=\"icon\"></pry-icon>\n <p class=\"a-p\">{{ data.message }}</p>\n @if (!!data.action) {\n <button class=\"m-snackbar__action\" (click)=\"actionClick()\">{{ data.action }}</button>\n }\n </div>\n </div>\n}\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }], animations: [
2740
2740
  trigger('panelState', [
2741
2741
  transition('void => visible', [useAnimation(showAnimation)]),
2742
2742
  transition('visible => void', [useAnimation(hideAnimation)])
@@ -2750,7 +2750,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
2750
2750
  transition('void => visible', [useAnimation(showAnimation)]),
2751
2751
  transition('visible => void', [useAnimation(hideAnimation)])
2752
2752
  ])
2753
- ], template: "<div\n class=\"m-snackbar -bottom\"\n [ngClass]=\"typeClass\"\n [@panelState]=\"{ value: 'visible', params: { transform: transformOptions, transition: transitionOptions } }\"\n *ngIf=\"!hiddenFromAction\"\n [style.bottom.px]=\"listIndex * 60\"\n>\n <div class=\"m-snackbar__content\">\n <pry-icon [iconSvg]=\"icon\"></pry-icon>\n <p class=\"a-p\">{{ data.message }}</p>\n <button class=\"m-snackbar__action\" *ngIf=\"!!data.action\" (click)=\"actionClick()\">{{ data.action }}</button>\n </div>\n</div>\n" }]
2753
+ ], template: "@if (!hiddenFromAction) {\n <div\n class=\"m-snackbar -bottom\"\n [ngClass]=\"typeClass\"\n [@panelState]=\"{ value: 'visible', params: { transform: transformOptions, transition: transitionOptions } }\"\n [style.bottom.px]=\"listIndex * 60\"\n >\n <div class=\"m-snackbar__content\">\n <pry-icon [iconSvg]=\"icon\"></pry-icon>\n <p class=\"a-p\">{{ data.message }}</p>\n @if (!!data.action) {\n <button class=\"m-snackbar__action\" (click)=\"actionClick()\">{{ data.action }}</button>\n }\n </div>\n </div>\n}\n" }]
2754
2754
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { data: [{
2755
2755
  type: Input
2756
2756
  }], listIndex: [{
@@ -2810,7 +2810,7 @@ class PrySnackbarService {
2810
2810
  open(message) {
2811
2811
  this.messageEvents$.next(message);
2812
2812
  }
2813
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PrySnackbarService, deps: [{ token: i2.Overlay }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2813
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PrySnackbarService, deps: [{ token: i2$1.Overlay }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2814
2814
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PrySnackbarService, providedIn: 'root' }); }
2815
2815
  }
2816
2816
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PrySnackbarService, decorators: [{
@@ -2818,7 +2818,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
2818
2818
  args: [{
2819
2819
  providedIn: 'root'
2820
2820
  }]
2821
- }], ctorParameters: () => [{ type: i2.Overlay }, { type: PryI18nService }] });
2821
+ }], ctorParameters: () => [{ type: i2$1.Overlay }, { type: PryI18nService }] });
2822
2822
 
2823
2823
  const INTERNALLY_STORED_IMAGE_PREFIX = 'internal:';
2824
2824
  var LibraryTypes;
@@ -2873,7 +2873,7 @@ class ImageService {
2873
2873
  });
2874
2874
  }));
2875
2875
  }
2876
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ImageService, deps: [{ token: i1$2.HttpClient }, { token: i1.Store }, { token: i3$1.DomSanitizer }, { token: PrySnackbarService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2876
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ImageService, deps: [{ token: i1$1.HttpClient }, { token: i1.Store }, { token: i3$1.DomSanitizer }, { token: PrySnackbarService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2877
2877
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ImageService, providedIn: 'root' }); }
2878
2878
  }
2879
2879
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ImageService, decorators: [{
@@ -2881,7 +2881,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
2881
2881
  args: [{
2882
2882
  providedIn: 'root'
2883
2883
  }]
2884
- }], ctorParameters: () => [{ type: i1$2.HttpClient }, { type: i1.Store }, { type: i3$1.DomSanitizer }, { type: PrySnackbarService }, { type: PryI18nService }] });
2884
+ }], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i1.Store }, { type: i3$1.DomSanitizer }, { type: PrySnackbarService }, { type: PryI18nService }] });
2885
2885
 
2886
2886
  class RawService {
2887
2887
  constructor(httpClient, store, domSanitizer) {
@@ -2915,7 +2915,7 @@ class RawService {
2915
2915
  headers: new HttpHeaders({ 'File-Content-Type': mimeType })
2916
2916
  })));
2917
2917
  }
2918
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RawService, deps: [{ token: i1$2.HttpClient }, { token: i1.Store }, { token: i3$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Injectable }); }
2918
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RawService, deps: [{ token: i1$1.HttpClient }, { token: i1.Store }, { token: i3$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Injectable }); }
2919
2919
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RawService, providedIn: 'root' }); }
2920
2920
  }
2921
2921
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RawService, decorators: [{
@@ -2923,7 +2923,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
2923
2923
  args: [{
2924
2924
  providedIn: 'root'
2925
2925
  }]
2926
- }], ctorParameters: () => [{ type: i1$2.HttpClient }, { type: i1.Store }, { type: i3$1.DomSanitizer }] });
2926
+ }], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i1.Store }, { type: i3$1.DomSanitizer }] });
2927
2927
 
2928
2928
  class PryUploadComponent {
2929
2929
  constructor(store, rawService) {
@@ -3355,13 +3355,13 @@ class PrySelectImageComponent {
3355
3355
  this.toggleImageChoice();
3356
3356
  }
3357
3357
  }
3358
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PrySelectImageComponent, deps: [{ token: i1.Store }, { token: i2.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
3359
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PrySelectImageComponent, selector: "pry-select-image", inputs: { iconUrl: "iconUrl", size: "size", mode: "mode" }, outputs: { toggled: "toggled", changed: "changed" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<div class=\"select-image\">\n <div class=\"select-image__select\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" id=\"button-{{ id }}\" (click)=\"toggleImageChoice($event)\">\n <img alt=\"\" [height]=\"size\" [width]=\"size\" [src]=\"iconUrl | getSecuredImage | async\" />\n <span class=\"u-visually-hidden\">{{ '@pry.action.selectPicture' | i18n }}</span>\n </button>\n </div>\n\n <div class=\"select-image__add\">\n <div class=\"m-file-upload\">\n <pry-upload (uploaded)=\"changeForImage($event)\" [mode]=\"mode\"></pry-upload>\n </div>\n </div>\n</div>\n\n<ng-template #template>\n <ul class=\"overlay overlay--icons\" *ngIf=\"images$ | async as images\">\n <ng-container *ngIf=\"!(loading$ | async)?.loading\">\n <li class=\"overlay__point\" *ngFor=\"let image of images\">\n <button class=\"a-btn a-btn--icon-only\" type=\"button\" (click)=\"changeForImage(image.image)\">\n <img [alt]=\"image.image\" [height]=\"size\" [width]=\"size\" [src]=\"image.image | getSecuredImage | async\" />\n </button>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PryUploadComponent, selector: "pry-upload", inputs: ["mode", "accept", "labelTranslate"], outputs: ["uploaded", "uploadedFile"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: GetSecuredImagePipe, name: "getSecuredImage" }] }); }
3358
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PrySelectImageComponent, deps: [{ token: i1.Store }, { token: i2$1.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
3359
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PrySelectImageComponent, selector: "pry-select-image", inputs: { iconUrl: "iconUrl", size: "size", mode: "mode" }, outputs: { toggled: "toggled", changed: "changed" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<div class=\"select-image\">\n <div class=\"select-image__select\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" id=\"button-{{ id }}\" (click)=\"toggleImageChoice($event)\">\n <img alt=\"\" [height]=\"size\" [width]=\"size\" [src]=\"iconUrl | getSecuredImage | async\" />\n <span class=\"u-visually-hidden\">{{ '@pry.action.selectPicture' | i18n }}</span>\n </button>\n </div>\n\n <div class=\"select-image__add\">\n <div class=\"m-file-upload\">\n <pry-upload (uploaded)=\"changeForImage($event)\" [mode]=\"mode\"></pry-upload>\n </div>\n </div>\n</div>\n\n<ng-template #template>\n @if (images$ | async; as images) {\n <ul class=\"overlay overlay--icons\">\n @if (!(loading$ | async)?.loading) {\n @for (image of images; track image) {\n <li class=\"overlay__point\">\n <button class=\"a-btn a-btn--icon-only\" type=\"button\" (click)=\"changeForImage(image.image)\">\n <img [alt]=\"image.image\" [height]=\"size\" [width]=\"size\" [src]=\"image.image | getSecuredImage | async\" />\n </button>\n </li>\n }\n }\n </ul>\n }\n</ng-template>\n", dependencies: [{ kind: "component", type: PryUploadComponent, selector: "pry-upload", inputs: ["mode", "accept", "labelTranslate"], outputs: ["uploaded", "uploadedFile"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: GetSecuredImagePipe, name: "getSecuredImage" }] }); }
3360
3360
  }
3361
3361
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PrySelectImageComponent, decorators: [{
3362
3362
  type: Component,
3363
- args: [{ selector: 'pry-select-image', template: "<div class=\"select-image\">\n <div class=\"select-image__select\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" id=\"button-{{ id }}\" (click)=\"toggleImageChoice($event)\">\n <img alt=\"\" [height]=\"size\" [width]=\"size\" [src]=\"iconUrl | getSecuredImage | async\" />\n <span class=\"u-visually-hidden\">{{ '@pry.action.selectPicture' | i18n }}</span>\n </button>\n </div>\n\n <div class=\"select-image__add\">\n <div class=\"m-file-upload\">\n <pry-upload (uploaded)=\"changeForImage($event)\" [mode]=\"mode\"></pry-upload>\n </div>\n </div>\n</div>\n\n<ng-template #template>\n <ul class=\"overlay overlay--icons\" *ngIf=\"images$ | async as images\">\n <ng-container *ngIf=\"!(loading$ | async)?.loading\">\n <li class=\"overlay__point\" *ngFor=\"let image of images\">\n <button class=\"a-btn a-btn--icon-only\" type=\"button\" (click)=\"changeForImage(image.image)\">\n <img [alt]=\"image.image\" [height]=\"size\" [width]=\"size\" [src]=\"image.image | getSecuredImage | async\" />\n </button>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n" }]
3364
- }], ctorParameters: () => [{ type: i1.Store }, { type: i2.Overlay }, { type: i0.ViewContainerRef }], propDecorators: { template: [{
3363
+ args: [{ selector: 'pry-select-image', template: "<div class=\"select-image\">\n <div class=\"select-image__select\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" id=\"button-{{ id }}\" (click)=\"toggleImageChoice($event)\">\n <img alt=\"\" [height]=\"size\" [width]=\"size\" [src]=\"iconUrl | getSecuredImage | async\" />\n <span class=\"u-visually-hidden\">{{ '@pry.action.selectPicture' | i18n }}</span>\n </button>\n </div>\n\n <div class=\"select-image__add\">\n <div class=\"m-file-upload\">\n <pry-upload (uploaded)=\"changeForImage($event)\" [mode]=\"mode\"></pry-upload>\n </div>\n </div>\n</div>\n\n<ng-template #template>\n @if (images$ | async; as images) {\n <ul class=\"overlay overlay--icons\">\n @if (!(loading$ | async)?.loading) {\n @for (image of images; track image) {\n <li class=\"overlay__point\">\n <button class=\"a-btn a-btn--icon-only\" type=\"button\" (click)=\"changeForImage(image.image)\">\n <img [alt]=\"image.image\" [height]=\"size\" [width]=\"size\" [src]=\"image.image | getSecuredImage | async\" />\n </button>\n </li>\n }\n }\n </ul>\n }\n</ng-template>\n" }]
3364
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i2$1.Overlay }, { type: i0.ViewContainerRef }], propDecorators: { template: [{
3365
3365
  type: ViewChild,
3366
3366
  args: ['template', { read: TemplateRef }]
3367
3367
  }], toggled: [{
@@ -3392,7 +3392,7 @@ class CategoryService {
3392
3392
  .select(ConfigSelectors.refUrl)
3393
3393
  .pipe(mergeMap((url) => this.httpClient.get(encodeURI(`${url}/model/categories`))));
3394
3394
  }
3395
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CategoryService, deps: [{ token: i1$2.HttpClient }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
3395
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CategoryService, deps: [{ token: i1$1.HttpClient }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
3396
3396
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CategoryService, providedIn: 'root' }); }
3397
3397
  }
3398
3398
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CategoryService, decorators: [{
@@ -3400,7 +3400,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
3400
3400
  args: [{
3401
3401
  providedIn: 'root'
3402
3402
  }]
3403
- }], ctorParameters: () => [{ type: i1$2.HttpClient }, { type: i1.Store }] });
3403
+ }], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i1.Store }] });
3404
3404
 
3405
3405
  class CategoryEffects {
3406
3406
  constructor(actions$, categoryService) {
@@ -3408,12 +3408,12 @@ class CategoryEffects {
3408
3408
  this.categoryService = categoryService;
3409
3409
  this.loadCategories$ = createEffect(() => this.actions$.pipe(ofType(CategoryActions.load), debounceTime$1(200), mergeMap$1((action) => this.categoryService.getCategories().pipe(map$1((categories) => CategoryActions.loadSuccess({ categories })), catchError((error) => [CategoryActions.loadFailure({ error: error })])))));
3410
3410
  }
3411
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CategoryEffects, deps: [{ token: i1$3.Actions }, { token: CategoryService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3411
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CategoryEffects, deps: [{ token: i1$2.Actions }, { token: CategoryService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3412
3412
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CategoryEffects }); }
3413
3413
  }
3414
3414
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CategoryEffects, decorators: [{
3415
3415
  type: Injectable
3416
- }], ctorParameters: () => [{ type: i1$3.Actions }, { type: CategoryService }] });
3416
+ }], ctorParameters: () => [{ type: i1$2.Actions }, { type: CategoryService }] });
3417
3417
 
3418
3418
  const categoriesFeatureKey = '@pry/model/categories';
3419
3419
  function sortByName$1(a, b) {
@@ -3449,7 +3449,7 @@ class ClassService {
3449
3449
  .select(ConfigSelectors.refUrl)
3450
3450
  .pipe(mergeMap((url) => this.httpClient.get(encodeURI(`${url}/model/class/datasets/count`))));
3451
3451
  }
3452
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClassService, deps: [{ token: i1$2.HttpClient }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
3452
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClassService, deps: [{ token: i1$1.HttpClient }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
3453
3453
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClassService, providedIn: 'root' }); }
3454
3454
  }
3455
3455
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClassService, decorators: [{
@@ -3457,7 +3457,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
3457
3457
  args: [{
3458
3458
  providedIn: 'root'
3459
3459
  }]
3460
- }], ctorParameters: () => [{ type: i1$2.HttpClient }, { type: i1.Store }] });
3460
+ }], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i1.Store }] });
3461
3461
 
3462
3462
  class ClassEffects {
3463
3463
  constructor(actions$, classService) {
@@ -3468,12 +3468,12 @@ class ClassEffects {
3468
3468
  return ClassActions.loadDatasetCountSuccess({ datasetCounts: datasetCounts });
3469
3469
  }), catchError((error) => [ClassActions.loadDatasetCountFailure({ error: error })])))));
3470
3470
  }
3471
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClassEffects, deps: [{ token: i1$3.Actions }, { token: ClassService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3471
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClassEffects, deps: [{ token: i1$2.Actions }, { token: ClassService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3472
3472
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClassEffects }); }
3473
3473
  }
3474
3474
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClassEffects, decorators: [{
3475
3475
  type: Injectable
3476
- }], ctorParameters: () => [{ type: i1$3.Actions }, { type: ClassService }] });
3476
+ }], ctorParameters: () => [{ type: i1$2.Actions }, { type: ClassService }] });
3477
3477
 
3478
3478
  const SYMBOL_DOMAIN = 'symbol';
3479
3479
  const TABLE_ATTR_DOMAIN = 'tableAttr';
@@ -3606,12 +3606,12 @@ class ConfigService {
3606
3606
  .select(ConfigSelectors.refUrl)
3607
3607
  .pipe(mergeMap((url) => this.httpClient.get(encodeURI(`${url}/groups`))));
3608
3608
  }
3609
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ConfigService, deps: [{ token: i1$2.HttpClient }, { token: i1.Store }, { token: PrySnackbarService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3609
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ConfigService, deps: [{ token: i1$1.HttpClient }, { token: i1.Store }, { token: PrySnackbarService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3610
3610
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ConfigService }); }
3611
3611
  }
3612
3612
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ConfigService, decorators: [{
3613
3613
  type: Injectable
3614
- }], ctorParameters: () => [{ type: i1$2.HttpClient }, { type: i1.Store }, { type: PrySnackbarService }, { type: PryI18nService }] });
3614
+ }], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i1.Store }, { type: PrySnackbarService }, { type: PryI18nService }] });
3615
3615
 
3616
3616
  class OpenMapTilesService {
3617
3617
  constructor(httpClient, store) {
@@ -3633,7 +3633,7 @@ class OpenMapTilesService {
3633
3633
  })) ?? []).sort((a, b) => a.label.localeCompare(b.label));
3634
3634
  }));
3635
3635
  }
3636
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OpenMapTilesService, deps: [{ token: i1$2.HttpClient }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
3636
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OpenMapTilesService, deps: [{ token: i1$1.HttpClient }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
3637
3637
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OpenMapTilesService, providedIn: 'root' }); }
3638
3638
  }
3639
3639
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OpenMapTilesService, decorators: [{
@@ -3641,7 +3641,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
3641
3641
  args: [{
3642
3642
  providedIn: 'root'
3643
3643
  }]
3644
- }], ctorParameters: () => [{ type: i1$2.HttpClient }, { type: i1.Store }] });
3644
+ }], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i1.Store }] });
3645
3645
 
3646
3646
  class ConfigEffects {
3647
3647
  constructor(actions$, openMapTilesService, store, configService, snackBar, translateService, pryDialog) {
@@ -3750,23 +3750,23 @@ class ConfigEffects {
3750
3750
  return throwError(() => error);
3751
3751
  })))));
3752
3752
  }
3753
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ConfigEffects, deps: [{ token: i1$3.Actions }, { token: OpenMapTilesService }, { token: i1.Store }, { token: ConfigService }, { token: PrySnackbarService }, { token: PryI18nService }, { token: PryDialogService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3753
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ConfigEffects, deps: [{ token: i1$2.Actions }, { token: OpenMapTilesService }, { token: i1.Store }, { token: ConfigService }, { token: PrySnackbarService }, { token: PryI18nService }, { token: PryDialogService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3754
3754
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ConfigEffects }); }
3755
3755
  }
3756
3756
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ConfigEffects, decorators: [{
3757
3757
  type: Injectable
3758
- }], ctorParameters: () => [{ type: i1$3.Actions }, { type: OpenMapTilesService }, { type: i1.Store }, { type: ConfigService }, { type: PrySnackbarService }, { type: PryI18nService }, { type: PryDialogService }] });
3758
+ }], ctorParameters: () => [{ type: i1$2.Actions }, { type: OpenMapTilesService }, { type: i1.Store }, { type: ConfigService }, { type: PrySnackbarService }, { type: PryI18nService }, { type: PryDialogService }] });
3759
3759
 
3760
3760
  class ContextMenuEffects {
3761
3761
  constructor(actions$) {
3762
3762
  this.actions$ = actions$;
3763
3763
  }
3764
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ContextMenuEffects, deps: [{ token: i1$3.Actions }], target: i0.ɵɵFactoryTarget.Injectable }); }
3764
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ContextMenuEffects, deps: [{ token: i1$2.Actions }], target: i0.ɵɵFactoryTarget.Injectable }); }
3765
3765
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ContextMenuEffects }); }
3766
3766
  }
3767
3767
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ContextMenuEffects, decorators: [{
3768
3768
  type: Injectable
3769
- }], ctorParameters: () => [{ type: i1$3.Actions }] });
3769
+ }], ctorParameters: () => [{ type: i1$2.Actions }] });
3770
3770
 
3771
3771
  const ContextMenuActions = {
3772
3772
  open: createAction('[ContextMenu] open', props()),
@@ -3851,6 +3851,7 @@ const DashboardActions = {
3851
3851
  assertResultSets: createAction('[Dashboard] assert resultSet', props()),
3852
3852
  updateResultSet: createAction('[Dashboard] (bus) received named resultSet (not-active-action)', props()),
3853
3853
  addRelationsToResultSets: createAction('[Dashboard] (bus) add relations to resultSet', props()),
3854
+ removeRelationsFromResultSets: createAction('[Dashboard] (bus) remove relations from resultSet', props()),
3854
3855
  addItemToResultSets: createAction('[Dashboard] (bus) add item to resultSet', props()),
3855
3856
  startingMissingViews: createAction('[Dashboard] opening missing views for manifest'),
3856
3857
  setAvailableNamedQueries: createAction('[Dashboard] (bus) set available rs names', props()),
@@ -4212,7 +4213,7 @@ class SearchService {
4212
4213
  this.datasources = datasources;
4213
4214
  });
4214
4215
  }
4215
- getItems(id, quickOrder, excludeGeo, searchAfter) {
4216
+ getItems(id, quickOrder, excludeGeo, searchAfter, linkedItems = []) {
4216
4217
  const params = this.getItemsFilter(id, this.getOrder(quickOrder));
4217
4218
  if (!id) {
4218
4219
  console.warn('Not sending items request with no datasource attached.');
@@ -4223,9 +4224,10 @@ class SearchService {
4223
4224
  return this.httpClient.post(encodeURI(`${url}/data-sources/id/${id}/items`), {
4224
4225
  type: ds?.sourceType === 'namedQuery' ? ds.request.type : NamedQueryTypes.MONO_CLASS,
4225
4226
  excludeGeo: excludeGeo ?? false,
4226
- searchAfter: searchAfter ?? undefined
4227
+ searchAfter: searchAfter ?? undefined,
4228
+ linkedItems
4227
4229
  }, { params });
4228
- }), map((rs) => this.applyTransformations('current', rs)));
4230
+ }), map((rs) => this.applyTransformations(id, rs)));
4229
4231
  }
4230
4232
  getItemsSerializedParams(id, quickOrder = {}) {
4231
4233
  return '|' + this.getItemsFilter(id, this.getOrder(quickOrder[id])).toString() + '|';
@@ -4277,19 +4279,24 @@ class SearchService {
4277
4279
  * Launch a search request (and saves it as current search)
4278
4280
  * @param condition
4279
4281
  */
4280
- search(condition) {
4281
- return combineLatest([
4282
- this.store.select(ConfigSelectors.dataUrl),
4283
- this.store.select(DashboardSelectors.quickOrder),
4284
- this.store.select(ConfigSelectors.limits)
4285
- ]).pipe(mergeMap(([url, quickOrder, limits]) => {
4282
+ search(condition, id, withLinkedItems = []) {
4283
+ return this.store.select(ConfigSelectors.dataUrl).pipe(filter((url) => !!url), take(1), withLatestFrom$1(this.store.select(DashboardSelectors.quickOrder), this.store.select(ConfigSelectors.limits)), mergeMap(([url, quickOrder, limits]) => {
4286
4284
  const params = {};
4287
4285
  if (quickOrder[DEFAULT_NAMED_QUERY_ID]) {
4288
4286
  params['order'] = `${quickOrder[DEFAULT_NAMED_QUERY_ID]?.attribute},${quickOrder[DEFAULT_NAMED_QUERY_ID]?.asc ?? ''}`;
4289
4287
  }
4290
- const _condition = { ...condition, limit: limits[DEFAULT_NAMED_QUERY_ID] ?? limits['default'] };
4288
+ const otherParams = {};
4289
+ if (withLinkedItems.length > 0) {
4290
+ if (withLinkedItems.includes('destination')) {
4291
+ otherParams['withDestinationItems'] = 'true';
4292
+ }
4293
+ if (withLinkedItems.includes('source')) {
4294
+ otherParams['withSourceItems'] = 'true';
4295
+ }
4296
+ }
4297
+ const _condition = { ...condition, limit: limits[DEFAULT_NAMED_QUERY_ID] ?? limits['default'], ...otherParams };
4291
4298
  return this.httpClient.post(encodeURI(`${url}/items/search`), _condition, { params });
4292
- }), map((rs) => this.applyTransformations(DEFAULT_NAMED_QUERY_ID, rs)));
4299
+ }), map((rs) => this.applyTransformations(id ?? DEFAULT_NAMED_QUERY_ID, rs)));
4293
4300
  }
4294
4301
  /**
4295
4302
  * Allows to add a transformation function when getting results from backend
@@ -4315,7 +4322,7 @@ class SearchService {
4315
4322
  limit
4316
4323
  })));
4317
4324
  }
4318
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SearchService, deps: [{ token: i1$2.HttpClient }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
4325
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SearchService, deps: [{ token: i1$1.HttpClient }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
4319
4326
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SearchService, providedIn: 'root' }); }
4320
4327
  }
4321
4328
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SearchService, decorators: [{
@@ -4323,7 +4330,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4323
4330
  args: [{
4324
4331
  providedIn: 'root'
4325
4332
  }]
4326
- }], ctorParameters: () => [{ type: i1$2.HttpClient }, { type: i1.Store }] });
4333
+ }], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i1.Store }] });
4327
4334
 
4328
4335
  class DataSourceService {
4329
4336
  constructor(store, httpClient, translateService) {
@@ -4439,7 +4446,7 @@ class DataSourceService {
4439
4446
  .select(ConfigSelectors.refUrl)
4440
4447
  .pipe(mergeMap((url) => this.httpClient.get(encodeURI(`${url}/datasets/categories`))));
4441
4448
  }
4442
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DataSourceService, deps: [{ token: i1.Store }, { token: i1$2.HttpClient }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4449
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DataSourceService, deps: [{ token: i1.Store }, { token: i1$1.HttpClient }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4443
4450
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DataSourceService, providedIn: 'root' }); }
4444
4451
  }
4445
4452
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DataSourceService, decorators: [{
@@ -4447,7 +4454,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4447
4454
  args: [{
4448
4455
  providedIn: 'root'
4449
4456
  }]
4450
- }], ctorParameters: () => [{ type: i1.Store }, { type: i1$2.HttpClient }, { type: PryI18nService }] });
4457
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i1$1.HttpClient }, { type: PryI18nService }] });
4451
4458
 
4452
4459
  class DataSourceEffects {
4453
4460
  constructor(actions$, searchService, dataSourceService, snackBar, translate, store, pryDialog) {
@@ -4503,22 +4510,22 @@ class DataSourceEffects {
4503
4510
  this.updateWidgetAfterSave$ = createEffect(() => this.actions$.pipe(
4504
4511
  // Using strings to prevent having core module depending on search module
4505
4512
  ofType('[SearchMonoClass] save', '[SearchMultiClass] launch save', '[Search Fulltext] save'), withLatestFrom(this.store.select(DataSourceSelectors.editFromWidget), this.store.select(DataSourceSelectors.currentEdit), this.store.select(DashboardSelectors.windowManifest)), filter(([action, fromWidget, currentEdit, windowManifest]) => fromWidget !== undefined), map(([action, fromWidget, currentEdit, windowManifest]) => {
4506
- const widgetManifestCopy = JSON.parse(JSON.stringify(windowManifest.widgets[fromWidget?.widgetIndex ?? 0]));
4513
+ const widgetManifestCopy = structuredClone(windowManifest.widgets[fromWidget?.widgetIndex ?? 0]);
4507
4514
  // Replacing updated query id by new query id
4508
- const arrayOfNamedQuery = Array.isArray(widgetManifestCopy.namedQuery)
4509
- ? widgetManifestCopy.namedQuery
4510
- : [widgetManifestCopy.namedQuery];
4515
+ const arrayOfdatasource = Array.isArray(widgetManifestCopy.datasource)
4516
+ ? widgetManifestCopy.datasource
4517
+ : [widgetManifestCopy.datasource].filter((d) => d);
4511
4518
  // @ts-ignore : we don't want to make core depending on search
4512
4519
  const newQueryId = action.id;
4513
- const previousNqIndex = arrayOfNamedQuery.indexOf(fromWidget?.editedQuery);
4520
+ const previousNqIndex = arrayOfdatasource.indexOf(fromWidget?.editedQuery ?? '');
4514
4521
  if (previousNqIndex >= 0) {
4515
- arrayOfNamedQuery[previousNqIndex] = newQueryId;
4522
+ arrayOfdatasource[previousNqIndex] = newQueryId;
4516
4523
  }
4517
4524
  else {
4518
4525
  // Editing a request that's not in the widget. Adding it
4519
- arrayOfNamedQuery.push(newQueryId);
4526
+ arrayOfdatasource.push(newQueryId);
4520
4527
  }
4521
- widgetManifestCopy.namedQuery = arrayOfNamedQuery;
4528
+ widgetManifestCopy.datasource = arrayOfdatasource;
4522
4529
  return DashboardActions.updateWidgetManifest({
4523
4530
  index: fromWidget?.widgetIndex ?? 0,
4524
4531
  manifest: widgetManifestCopy
@@ -4567,12 +4574,12 @@ class DataSourceEffects {
4567
4574
  .getCategories()
4568
4575
  .pipe(map((categories) => DataSourceActions.dataset.getCategoriesSuccess({ categories }))))));
4569
4576
  }
4570
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DataSourceEffects, deps: [{ token: i1$3.Actions }, { token: SearchService }, { token: DataSourceService }, { token: PrySnackbarService }, { token: PryI18nService }, { token: i1.Store }, { token: PryDialogService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4577
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DataSourceEffects, deps: [{ token: i1$2.Actions }, { token: SearchService }, { token: DataSourceService }, { token: PrySnackbarService }, { token: PryI18nService }, { token: i1.Store }, { token: PryDialogService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4571
4578
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DataSourceEffects }); }
4572
4579
  }
4573
4580
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DataSourceEffects, decorators: [{
4574
4581
  type: Injectable
4575
- }], ctorParameters: () => [{ type: i1$3.Actions }, { type: SearchService }, { type: DataSourceService }, { type: PrySnackbarService }, { type: PryI18nService }, { type: i1.Store }, { type: PryDialogService }] });
4582
+ }], ctorParameters: () => [{ type: i1$2.Actions }, { type: SearchService }, { type: DataSourceService }, { type: PrySnackbarService }, { type: PryI18nService }, { type: i1.Store }, { type: PryDialogService }] });
4576
4583
 
4577
4584
  const FieldActions = {
4578
4585
  load: createAction('[Field] Load Fields'),
@@ -4605,7 +4612,7 @@ class FieldService {
4605
4612
  .select(ConfigSelectors.refUrl)
4606
4613
  .pipe(mergeMap((url) => this.httpClient.delete(encodeURI(`${url}/model/fields/${id}`))));
4607
4614
  }
4608
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FieldService, deps: [{ token: i1$2.HttpClient }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
4615
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FieldService, deps: [{ token: i1$1.HttpClient }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
4609
4616
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FieldService, providedIn: 'root' }); }
4610
4617
  }
4611
4618
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FieldService, decorators: [{
@@ -4613,7 +4620,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4613
4620
  args: [{
4614
4621
  providedIn: 'root'
4615
4622
  }]
4616
- }], ctorParameters: () => [{ type: i1$2.HttpClient }, { type: i1.Store }] });
4623
+ }], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i1.Store }] });
4617
4624
 
4618
4625
  class FieldEffects {
4619
4626
  constructor(actions$, fieldService) {
@@ -4621,12 +4628,12 @@ class FieldEffects {
4621
4628
  this.fieldService = fieldService;
4622
4629
  this.loadFields$ = createEffect(() => this.actions$.pipe(ofType(FieldActions.load), debounceTime$1(200), mergeMap$1((action) => this.fieldService.getFields().pipe(map$1((fields) => FieldActions.loadSuccess({ fields })), catchError((error) => [FieldActions.loadFailure({ error: error })])))));
4623
4630
  }
4624
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FieldEffects, deps: [{ token: i1$3.Actions }, { token: FieldService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4631
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FieldEffects, deps: [{ token: i1$2.Actions }, { token: FieldService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4625
4632
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FieldEffects }); }
4626
4633
  }
4627
4634
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FieldEffects, decorators: [{
4628
4635
  type: Injectable
4629
- }], ctorParameters: () => [{ type: i1$3.Actions }, { type: FieldService }] });
4636
+ }], ctorParameters: () => [{ type: i1$2.Actions }, { type: FieldService }] });
4630
4637
 
4631
4638
  const fieldsFeatureKey = '@pry/model/fields';
4632
4639
  function sortByName(a, b) {
@@ -4651,12 +4658,12 @@ class ImageEffects {
4651
4658
  this.loadImages$ = createEffect(() => this.actions$.pipe(ofType(ImageActions.load), debounceTime$1(50), mergeMap$1(() => this.imageService.getImages().pipe(map$1((images) => ImageActions.loadSuccess({ images })), catchError((error) => [ImageActions.loadFailure({ error })])))));
4652
4659
  this.addImages$ = createEffect(() => this.actions$.pipe(ofType(ImageActions.add), mergeMap$1((action) => this.imageService.upload(action.file, action.mediaType, action.imageType).pipe(mergeMap$1((name) => [ImageActions.load(), ImageActions.added({ name })]), catchError((error) => [ImageActions.loadFailure({ error })])))));
4653
4660
  }
4654
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ImageEffects, deps: [{ token: i1$3.Actions }, { token: ImageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4661
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ImageEffects, deps: [{ token: i1$2.Actions }, { token: ImageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4655
4662
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ImageEffects }); }
4656
4663
  }
4657
4664
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ImageEffects, decorators: [{
4658
4665
  type: Injectable
4659
- }], ctorParameters: () => [{ type: i1$3.Actions }, { type: ImageService }] });
4666
+ }], ctorParameters: () => [{ type: i1$2.Actions }, { type: ImageService }] });
4660
4667
 
4661
4668
  const feature$4 = createFeatureSelector(contextMenuFeatureKey);
4662
4669
  const opened = createSelector(feature$4, (state) => state?.opened);
@@ -4853,7 +4860,7 @@ class ItemService {
4853
4860
  .select(ConfigSelectors.dataUrl)
4854
4861
  .pipe(mergeMap((url) => this.httpClient.post(`${url}/items`, [toSendItem])));
4855
4862
  }
4856
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ItemService, deps: [{ token: i1.Store }, { token: i1$2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
4863
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ItemService, deps: [{ token: i1.Store }, { token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
4857
4864
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ItemService, providedIn: 'root' }); }
4858
4865
  }
4859
4866
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ItemService, decorators: [{
@@ -4861,7 +4868,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4861
4868
  args: [{
4862
4869
  providedIn: 'root'
4863
4870
  }]
4864
- }], ctorParameters: () => [{ type: i1.Store }, { type: i1$2.HttpClient }] });
4871
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i1$1.HttpClient }] });
4865
4872
 
4866
4873
  class ItemEffects {
4867
4874
  constructor(actions$, service, store, snackBar, translateService) {
@@ -4888,12 +4895,12 @@ class ItemEffects {
4888
4895
  });
4889
4896
  })), { dispatch: false });
4890
4897
  }
4891
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ItemEffects, deps: [{ token: i1$3.Actions }, { token: ItemService }, { token: i1.Store }, { token: PrySnackbarService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4898
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ItemEffects, deps: [{ token: i1$2.Actions }, { token: ItemService }, { token: i1.Store }, { token: PrySnackbarService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4892
4899
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ItemEffects }); }
4893
4900
  }
4894
4901
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ItemEffects, decorators: [{
4895
4902
  type: Injectable
4896
- }], ctorParameters: () => [{ type: i1$3.Actions }, { type: ItemService }, { type: i1.Store }, { type: PrySnackbarService }, { type: PryI18nService }] });
4903
+ }], ctorParameters: () => [{ type: i1$2.Actions }, { type: ItemService }, { type: i1.Store }, { type: PrySnackbarService }, { type: PryI18nService }] });
4897
4904
 
4898
4905
  const RelationTypesActions = {
4899
4906
  load: createAction('[Relation Types] Load Relation Types'),
@@ -4908,6 +4915,7 @@ const RelationTypesActions = {
4908
4915
  deleteRelationTypeSuccess: createAction('[Relation Types Api] Delete Relation Types Success'),
4909
4916
  deleteRelationTypeFailure: createAction('[Relation Types Api] Delete Relation Types Failure', props()),
4910
4917
  createRelation: createAction('[Relation Types Api] Create Relation', props()),
4918
+ deleteRelation: createAction('[Relation Types Api] Delete Relation', props()),
4911
4919
  createRelationSuccess: createAction('[Relation Types Api] Create Relation success'),
4912
4920
  createRelationFailure: createAction('[Relation Types Api] Create Relation failure', props()),
4913
4921
  openModal: createAction('[Relation Types] Open modal'),
@@ -4946,7 +4954,11 @@ class RelationTypesService {
4946
4954
  }
4947
4955
  return this.store.select(ConfigSelectors.dataUrl).pipe(mergeMap((url) => this.httpClient.post(`${url}/relations`, relations)), map(() => relations));
4948
4956
  }
4949
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RelationTypesService, deps: [{ token: i1.Store }, { token: i1$2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
4957
+ deleteRelation(source, destination, relationType) {
4958
+ const relation = { source, destination, relationType };
4959
+ return this.store.select(ConfigSelectors.dataUrl).pipe(mergeMap((url) => this.httpClient.delete(`${url}/relations`, { body: relation })), map(() => relation));
4960
+ }
4961
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RelationTypesService, deps: [{ token: i1.Store }, { token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
4950
4962
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RelationTypesService, providedIn: 'root' }); }
4951
4963
  }
4952
4964
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RelationTypesService, decorators: [{
@@ -4954,7 +4966,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4954
4966
  args: [{
4955
4967
  providedIn: 'root'
4956
4968
  }]
4957
- }], ctorParameters: () => [{ type: i1.Store }, { type: i1$2.HttpClient }] });
4969
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i1$1.HttpClient }] });
4958
4970
 
4959
4971
  class RelationTypesEffects {
4960
4972
  constructor(actions$, service, router, pryDialog) {
@@ -4985,13 +4997,14 @@ class RelationTypesEffects {
4985
4997
  RelationTypesActions.createRelationSuccess(),
4986
4998
  DashboardActions.addRelationsToResultSets({ relations })
4987
4999
  ]), catchError((error) => [RelationTypesActions.createRelationFailure({ error })])))));
5000
+ this.deleteRelation$ = createEffect(() => this.actions$.pipe(ofType(RelationTypesActions.deleteRelation), mergeMap$1((action) => this.service.deleteRelation(action.from, action.to, action.typeId).pipe(map$1((relation) => DashboardActions.removeRelationsFromResultSets({ relation })), catchError((error) => [RelationTypesActions.createRelationFailure({ error })])))));
4988
5001
  }
4989
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RelationTypesEffects, deps: [{ token: i1$3.Actions }, { token: RelationTypesService }, { token: i3.Router }, { token: PryDialogService }], target: i0.ɵɵFactoryTarget.Injectable }); }
5002
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RelationTypesEffects, deps: [{ token: i1$2.Actions }, { token: RelationTypesService }, { token: i2.Router }, { token: PryDialogService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4990
5003
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RelationTypesEffects }); }
4991
5004
  }
4992
5005
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RelationTypesEffects, decorators: [{
4993
5006
  type: Injectable
4994
- }], ctorParameters: () => [{ type: i1$3.Actions }, { type: RelationTypesService }, { type: i3.Router }, { type: PryDialogService }] });
5007
+ }], ctorParameters: () => [{ type: i1$2.Actions }, { type: RelationTypesService }, { type: i2.Router }, { type: PryDialogService }] });
4995
5008
 
4996
5009
  const relationTypesFeatureKey = '@pry/relation-types';
4997
5010
  const initialRelationTypeState = {
@@ -5104,7 +5117,7 @@ class WidgetFillerComponent extends BaseWidgetComponent {
5104
5117
  // @ts-ignore
5105
5118
  if (startLayout && targetLayout && this.manifest.options?.windowManifest && this.index !== '-') {
5106
5119
  // @ts-ignore
5107
- const newWindowManifest = JSON.parse(JSON.stringify(this.manifest.options?.windowManifest));
5120
+ const newWindowManifest = structuredClone(this.manifest.options?.windowManifest);
5108
5121
  const targetWidgetIndex = newWindowManifest.widgets.findIndex((w) => w.layout.x === targetLayout.x &&
5109
5122
  w.layout.y === targetLayout.y &&
5110
5123
  w.layout.width === targetLayout.width &&
@@ -5264,7 +5277,7 @@ class SearchEffects {
5264
5277
  this.store = store;
5265
5278
  this.widgetFactoryService = widgetFactoryService;
5266
5279
  this.searchNamed$ = createEffect(() => this.actions$.pipe(ofType(SearchActions.getDatasourceItems), withLatestFrom$1(this.store.select(DashboardSelectors.rank), this.store.select(DashboardSelectors.quickOrder), this.store.select(DashboardSelectors.resultSets)), filter(([_, rank]) => rank === 0), filter(([props, rank]) => props.id !== DEFAULT_NAMED_QUERY_ID && props.id !== EXPLORE_NAMED_QUERY_ID), groupBy(([props, rank, quickOrder, rs]) => props.id), mergeMap((group$) => group$.pipe(debounceTime(100), switchMap(([props, rank, quickOrder, rs]) => this.searchService
5267
- .getItems(props.id, quickOrder[props.id], props.excludeGeo, props.next ? rs[props.id].searchAfter : undefined)
5280
+ .getItems(props.id, quickOrder[props.id], props.excludeGeo, props.next ? rs[props.id].searchAfter : undefined, props.linkedItems)
5268
5281
  .pipe(map((resultSet) => SearchActions.searchSuccess({
5269
5282
  resultSet,
5270
5283
  id: props.id,
@@ -5288,7 +5301,9 @@ class SearchEffects {
5288
5301
  return EMPTY;
5289
5302
  }
5290
5303
  })));
5291
- this.search$ = createEffect(() => this.actions$.pipe(ofType(SearchActions.search), mergeMap((props) => this.searchService.search(props.payload).pipe(map((resultSet) => SearchActions.searchSuccess({ resultSet, id: props.id })), catchError$1((error) => [SearchActions.searchFailure({ error, id: props.id })])))));
5304
+ this.search$ = createEffect(() => this.actions$.pipe(ofType(SearchActions.search), mergeMap((props) => this.searchService.search(props.payload, props.id, props.linkedItems).pipe(map((resultSet) => {
5305
+ return SearchActions.searchSuccess({ resultSet, id: props.id });
5306
+ }), catchError$1((error) => [SearchActions.searchFailure({ error, id: props.id })])))));
5292
5307
  this.searchSuccess$ = createEffect(() => this.actions$.pipe(ofType(SearchActions.searchSuccess), map((action) => DashboardActions.updateResultSet({
5293
5308
  id: action.id ?? DEFAULT_NAMED_QUERY_ID,
5294
5309
  resultSet: action.resultSet,
@@ -5299,12 +5314,12 @@ class SearchEffects {
5299
5314
  .autocomplete(action.attributes, '', action.limit)
5300
5315
  .pipe(map((values) => SearchActions.setPossibleFilterValues({ filterId: action.filterId, values }))))));
5301
5316
  }
5302
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SearchEffects, deps: [{ token: i1$3.Actions }, { token: SearchService }, { token: i1.Store }, { token: WidgetFactoryService }], target: i0.ɵɵFactoryTarget.Injectable }); }
5317
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SearchEffects, deps: [{ token: i1$2.Actions }, { token: SearchService }, { token: i1.Store }, { token: WidgetFactoryService }], target: i0.ɵɵFactoryTarget.Injectable }); }
5303
5318
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SearchEffects }); }
5304
5319
  }
5305
5320
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SearchEffects, decorators: [{
5306
5321
  type: Injectable
5307
- }], ctorParameters: () => [{ type: i1$3.Actions }, { type: SearchService }, { type: i1.Store }, { type: WidgetFactoryService }] });
5322
+ }], ctorParameters: () => [{ type: i1$2.Actions }, { type: SearchService }, { type: i1.Store }, { type: WidgetFactoryService }] });
5308
5323
 
5309
5324
  const searchFeatureKey = '@pry/search';
5310
5325
  const initialSearchState = {
@@ -5343,7 +5358,7 @@ const searchReducer = createReducer(initialSearchState, on(SearchActions.search,
5343
5358
  class AccordionComponent {
5344
5359
  constructor() { }
5345
5360
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5346
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: AccordionComponent, selector: "pry-accordion", ngImport: i0, template: "<cdk-accordion class=\"o-accordion\">\n <ng-content></ng-content>\n</cdk-accordion>\n", dependencies: [{ kind: "directive", type: i1$4.CdkAccordion, selector: "cdk-accordion, [cdkAccordion]", inputs: ["multi"], exportAs: ["cdkAccordion"] }] }); }
5361
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: AccordionComponent, selector: "pry-accordion", ngImport: i0, template: "<cdk-accordion class=\"o-accordion\">\n <ng-content></ng-content>\n</cdk-accordion>\n", dependencies: [{ kind: "directive", type: i1$3.CdkAccordion, selector: "cdk-accordion, [cdkAccordion]", inputs: ["multi"], exportAs: ["cdkAccordion"] }] }); }
5347
5362
  }
5348
5363
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AccordionComponent, decorators: [{
5349
5364
  type: Component,
@@ -5362,11 +5377,11 @@ class AccordionItemComponent {
5362
5377
  this.search.emit({ ...this.search$.getValue(), [item]: $event });
5363
5378
  }
5364
5379
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AccordionItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5365
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: AccordionItemComponent, selector: "pry-accordion-item", inputs: { item: "item", borderColor: "borderColor", index: "index", translationStringBase: "translationStringBase", length: "length", showSearchBar: "showSearchBar", search$: "search$" }, outputs: { search: "search" }, ngImport: i0, template: "<cdk-accordion-item\n #accordionItem=\"cdkAccordionItem\"\n [id]=\"'button_' + item\"\n role=\"tab\"\n [attr.aria-controls]=\"'panel_' + item\"\n [attr.aria-selected]=\"accordionItem.expanded\"\n [attr.aria-expanded]=\"accordionItem.expanded\"\n>\n <div class=\"o-accordion__title\" [class.is-active]=\"accordionItem.expanded\" [style.--border-color]=\"borderColor\">\n <button type=\"button\" class=\"o-accordion__title__btn\" (click)=\"accordionItem.toggle()\">\n <span>\n {{ translationStringBase + item | i18n }}\n <ng-container *ngIf=\"length\">&nbsp;({{ length }}) </ng-container>\n </span>\n <pry-icon\n [width]=\"15\"\n [height]=\"15\"\n [iconSvg]=\"accordionItem.expanded ? 'chevron_top_rounded' : 'chevron_bottom_rounded'\"\n ></pry-icon>\n </button>\n </div>\n <div\n *ngIf=\"accordionItem.expanded\"\n class=\"o-accordion__panel\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'button_' + item\"\n [id]=\"'panel_' + item\"\n [attr.aria-hidden]=\"!accordionItem.expanded\"\n [style.--border-color]=\"borderColor\"\n >\n <div *ngIf=\"showSearchBar\" class=\"o-accordion__panel__head\">\n <input\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.toolbox.catalog.filter.name' | i18n\"\n [ngModel]=\"(search$ | async)[item]\"\n (ngModelChange)=\"onSearch(item, $event)\"\n />\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </div>\n <ng-content></ng-content>\n </div>\n</cdk-accordion-item>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i1$4.CdkAccordionItem, selector: "cdk-accordion-item, [cdkAccordionItem]", inputs: ["expanded", "disabled"], outputs: ["closed", "opened", "destroyed", "expandedChange"], exportAs: ["cdkAccordionItem"] }, { kind: "directive", type: i3$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
5380
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: AccordionItemComponent, selector: "pry-accordion-item", inputs: { item: "item", borderColor: "borderColor", index: "index", translationStringBase: "translationStringBase", length: "length", showSearchBar: "showSearchBar", search$: "search$" }, outputs: { search: "search" }, ngImport: i0, template: "<cdk-accordion-item\n #accordionItem=\"cdkAccordionItem\"\n [id]=\"'button_' + item\"\n role=\"tab\"\n [attr.aria-controls]=\"'panel_' + item\"\n [attr.aria-selected]=\"accordionItem.expanded\"\n [attr.aria-expanded]=\"accordionItem.expanded\"\n >\n <div class=\"o-accordion__title\" [class.is-active]=\"accordionItem.expanded\" [style.--border-color]=\"borderColor\">\n <button type=\"button\" class=\"o-accordion__title__btn\" (click)=\"accordionItem.toggle()\">\n <span>\n {{ translationStringBase + item | i18n }}\n @if (length) {\n &nbsp;({{ length }})\n }\n </span>\n <pry-icon\n [width]=\"15\"\n [height]=\"15\"\n [iconSvg]=\"accordionItem.expanded ? 'chevron_top_rounded' : 'chevron_bottom_rounded'\"\n ></pry-icon>\n </button>\n </div>\n @if (accordionItem.expanded) {\n <div\n class=\"o-accordion__panel\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'button_' + item\"\n [id]=\"'panel_' + item\"\n [attr.aria-hidden]=\"!accordionItem.expanded\"\n [style.--border-color]=\"borderColor\"\n >\n @if (showSearchBar) {\n <div class=\"o-accordion__panel__head\">\n <input\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.toolbox.catalog.filter.name' | i18n\"\n [ngModel]=\"(search$ | async)[item]\"\n (ngModelChange)=\"onSearch(item, $event)\"\n />\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </div>\n }\n <ng-content></ng-content>\n </div>\n }\n</cdk-accordion-item>\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i1$3.CdkAccordionItem, selector: "cdk-accordion-item, [cdkAccordionItem]", inputs: ["expanded", "disabled"], outputs: ["closed", "opened", "destroyed", "expandedChange"], exportAs: ["cdkAccordionItem"] }, { kind: "directive", type: i2$2.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: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
5366
5381
  }
5367
5382
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AccordionItemComponent, decorators: [{
5368
5383
  type: Component,
5369
- args: [{ selector: 'pry-accordion-item', template: "<cdk-accordion-item\n #accordionItem=\"cdkAccordionItem\"\n [id]=\"'button_' + item\"\n role=\"tab\"\n [attr.aria-controls]=\"'panel_' + item\"\n [attr.aria-selected]=\"accordionItem.expanded\"\n [attr.aria-expanded]=\"accordionItem.expanded\"\n>\n <div class=\"o-accordion__title\" [class.is-active]=\"accordionItem.expanded\" [style.--border-color]=\"borderColor\">\n <button type=\"button\" class=\"o-accordion__title__btn\" (click)=\"accordionItem.toggle()\">\n <span>\n {{ translationStringBase + item | i18n }}\n <ng-container *ngIf=\"length\">&nbsp;({{ length }}) </ng-container>\n </span>\n <pry-icon\n [width]=\"15\"\n [height]=\"15\"\n [iconSvg]=\"accordionItem.expanded ? 'chevron_top_rounded' : 'chevron_bottom_rounded'\"\n ></pry-icon>\n </button>\n </div>\n <div\n *ngIf=\"accordionItem.expanded\"\n class=\"o-accordion__panel\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'button_' + item\"\n [id]=\"'panel_' + item\"\n [attr.aria-hidden]=\"!accordionItem.expanded\"\n [style.--border-color]=\"borderColor\"\n >\n <div *ngIf=\"showSearchBar\" class=\"o-accordion__panel__head\">\n <input\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.toolbox.catalog.filter.name' | i18n\"\n [ngModel]=\"(search$ | async)[item]\"\n (ngModelChange)=\"onSearch(item, $event)\"\n />\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </div>\n <ng-content></ng-content>\n </div>\n</cdk-accordion-item>\n" }]
5384
+ args: [{ selector: 'pry-accordion-item', template: "<cdk-accordion-item\n #accordionItem=\"cdkAccordionItem\"\n [id]=\"'button_' + item\"\n role=\"tab\"\n [attr.aria-controls]=\"'panel_' + item\"\n [attr.aria-selected]=\"accordionItem.expanded\"\n [attr.aria-expanded]=\"accordionItem.expanded\"\n >\n <div class=\"o-accordion__title\" [class.is-active]=\"accordionItem.expanded\" [style.--border-color]=\"borderColor\">\n <button type=\"button\" class=\"o-accordion__title__btn\" (click)=\"accordionItem.toggle()\">\n <span>\n {{ translationStringBase + item | i18n }}\n @if (length) {\n &nbsp;({{ length }})\n }\n </span>\n <pry-icon\n [width]=\"15\"\n [height]=\"15\"\n [iconSvg]=\"accordionItem.expanded ? 'chevron_top_rounded' : 'chevron_bottom_rounded'\"\n ></pry-icon>\n </button>\n </div>\n @if (accordionItem.expanded) {\n <div\n class=\"o-accordion__panel\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'button_' + item\"\n [id]=\"'panel_' + item\"\n [attr.aria-hidden]=\"!accordionItem.expanded\"\n [style.--border-color]=\"borderColor\"\n >\n @if (showSearchBar) {\n <div class=\"o-accordion__panel__head\">\n <input\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.toolbox.catalog.filter.name' | i18n\"\n [ngModel]=\"(search$ | async)[item]\"\n (ngModelChange)=\"onSearch(item, $event)\"\n />\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </div>\n }\n <ng-content></ng-content>\n </div>\n }\n</cdk-accordion-item>\n" }]
5370
5385
  }], ctorParameters: () => [], propDecorators: { item: [{
5371
5386
  type: Input
5372
5387
  }], borderColor: [{
@@ -5427,11 +5442,11 @@ class TabGroupComponent {
5427
5442
  this.clickedTabIdx.emit(index);
5428
5443
  }
5429
5444
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TabGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5430
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: TabGroupComponent, selector: "pry-tab-group", inputs: { translationStringBase: "translationStringBase" }, outputs: { clickedTabIdx: "clickedTabIdx" }, queries: [{ propertyName: "tabs", predicate: TabComponent }], ngImport: i0, template: "<div class=\"o-tabs\">\n <div class=\"o-tabs__list\" role=\"tablist\" [attr.aria-label]=\"'tab-panel-' + instanceId\">\n <button\n *ngFor=\"let tab of tabs; let index = index\"\n type=\"button\"\n class=\"o-tabs__list__btn\"\n role=\"tab\"\n [id]=\"'tab-' + instanceId + '-' + index\"\n [attr.aria-selected]=\"index === currentTabIndex\"\n [attr.tabindex]=\"index === currentTabIndex ? 0 : -1\"\n [attr.aria-controls]=\"'tabpanel-' + instanceId + '-' + index\"\n (click)=\"switch(tab, index)\"\n >\n {{ translationStringBase + tab.name | i18n }}\n </button>\n </div>\n <div\n class=\"o-tabs__panel\"\n [id]=\"'tabpanel-' + instanceId + '-' + currentTabIndex\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'tab-' + instanceId + '-' + currentTabIndex\"\n >\n <div class=\"o-tabs__panel__content\">\n <ng-template [ngTemplateOutlet]=\"currentTab.templateRef\"></ng-template>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
5445
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: TabGroupComponent, selector: "pry-tab-group", inputs: { translationStringBase: "translationStringBase" }, outputs: { clickedTabIdx: "clickedTabIdx" }, queries: [{ propertyName: "tabs", predicate: TabComponent }], ngImport: i0, template: "<div class=\"o-tabs\">\n <div class=\"o-tabs__list\" role=\"tablist\" [attr.aria-label]=\"'tab-panel-' + instanceId\">\n @for (tab of tabs; track tab; let index = $index) {\n <button\n type=\"button\"\n class=\"o-tabs__list__btn\"\n role=\"tab\"\n [id]=\"'tab-' + instanceId + '-' + index\"\n [attr.aria-selected]=\"index === currentTabIndex\"\n [attr.tabindex]=\"index === currentTabIndex ? 0 : -1\"\n [attr.aria-controls]=\"'tabpanel-' + instanceId + '-' + index\"\n (click)=\"switch(tab, index)\"\n >\n {{ translationStringBase + tab.name | i18n }}\n </button>\n }\n </div>\n <div\n class=\"o-tabs__panel\"\n [id]=\"'tabpanel-' + instanceId + '-' + currentTabIndex\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'tab-' + instanceId + '-' + currentTabIndex\"\n >\n <div class=\"o-tabs__panel__content\">\n <ng-template [ngTemplateOutlet]=\"currentTab.templateRef\"></ng-template>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
5431
5446
  }
5432
5447
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TabGroupComponent, decorators: [{
5433
5448
  type: Component,
5434
- args: [{ selector: 'pry-tab-group', template: "<div class=\"o-tabs\">\n <div class=\"o-tabs__list\" role=\"tablist\" [attr.aria-label]=\"'tab-panel-' + instanceId\">\n <button\n *ngFor=\"let tab of tabs; let index = index\"\n type=\"button\"\n class=\"o-tabs__list__btn\"\n role=\"tab\"\n [id]=\"'tab-' + instanceId + '-' + index\"\n [attr.aria-selected]=\"index === currentTabIndex\"\n [attr.tabindex]=\"index === currentTabIndex ? 0 : -1\"\n [attr.aria-controls]=\"'tabpanel-' + instanceId + '-' + index\"\n (click)=\"switch(tab, index)\"\n >\n {{ translationStringBase + tab.name | i18n }}\n </button>\n </div>\n <div\n class=\"o-tabs__panel\"\n [id]=\"'tabpanel-' + instanceId + '-' + currentTabIndex\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'tab-' + instanceId + '-' + currentTabIndex\"\n >\n <div class=\"o-tabs__panel__content\">\n <ng-template [ngTemplateOutlet]=\"currentTab.templateRef\"></ng-template>\n </div>\n </div>\n</div>\n" }]
5449
+ args: [{ selector: 'pry-tab-group', template: "<div class=\"o-tabs\">\n <div class=\"o-tabs__list\" role=\"tablist\" [attr.aria-label]=\"'tab-panel-' + instanceId\">\n @for (tab of tabs; track tab; let index = $index) {\n <button\n type=\"button\"\n class=\"o-tabs__list__btn\"\n role=\"tab\"\n [id]=\"'tab-' + instanceId + '-' + index\"\n [attr.aria-selected]=\"index === currentTabIndex\"\n [attr.tabindex]=\"index === currentTabIndex ? 0 : -1\"\n [attr.aria-controls]=\"'tabpanel-' + instanceId + '-' + index\"\n (click)=\"switch(tab, index)\"\n >\n {{ translationStringBase + tab.name | i18n }}\n </button>\n }\n </div>\n <div\n class=\"o-tabs__panel\"\n [id]=\"'tabpanel-' + instanceId + '-' + currentTabIndex\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'tab-' + instanceId + '-' + currentTabIndex\"\n >\n <div class=\"o-tabs__panel__content\">\n <ng-template [ngTemplateOutlet]=\"currentTab.templateRef\"></ng-template>\n </div>\n </div>\n</div>\n" }]
5435
5450
  }], ctorParameters: () => [], propDecorators: { translationStringBase: [{
5436
5451
  type: Input
5437
5452
  }], tabs: [{
@@ -5476,12 +5491,12 @@ class PryDefaultGeoAuthService extends PryGeoAuthService {
5476
5491
  }
5477
5492
  });
5478
5493
  }
5479
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDefaultGeoAuthService, deps: [{ token: i1$2.HttpClient }, { token: PrySnackbarService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
5494
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDefaultGeoAuthService, deps: [{ token: i1$1.HttpClient }, { token: PrySnackbarService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
5480
5495
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDefaultGeoAuthService }); }
5481
5496
  }
5482
5497
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDefaultGeoAuthService, decorators: [{
5483
5498
  type: Injectable
5484
- }], ctorParameters: () => [{ type: i1$2.HttpClient }, { type: PrySnackbarService }, { type: PryI18nService }] });
5499
+ }], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: PrySnackbarService }, { type: PryI18nService }] });
5485
5500
 
5486
5501
  class EllipsisDirective {
5487
5502
  constructor(elementRef, renderer) {
@@ -5693,7 +5708,7 @@ class PryCoreModule {
5693
5708
  TabComponent,
5694
5709
  EllipsisDirective, BaseToolboxActionComponent], imports: [CommonModule,
5695
5710
  RouterModule,
5696
- HttpClientModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1$3.EffectsFeatureModule, i1$3.EffectsFeatureModule, i1$3.EffectsFeatureModule, i1$3.EffectsFeatureModule, i1$3.EffectsFeatureModule, i1$3.EffectsFeatureModule, i1$3.EffectsFeatureModule, i1$3.EffectsFeatureModule, i1$3.EffectsFeatureModule, PryIconModule,
5711
+ HttpClientModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1.StoreFeatureModule, i1$2.EffectsFeatureModule, i1$2.EffectsFeatureModule, i1$2.EffectsFeatureModule, i1$2.EffectsFeatureModule, i1$2.EffectsFeatureModule, i1$2.EffectsFeatureModule, i1$2.EffectsFeatureModule, i1$2.EffectsFeatureModule, i1$2.EffectsFeatureModule, PryIconModule,
5697
5712
  OverlayModule,
5698
5713
  PryOverlayModule,
5699
5714
  PryI18nModule,
@@ -5988,7 +6003,7 @@ class PryBackendAggregationService extends PryAggregationService {
5988
6003
  }
5989
6004
  return this.cache[key].response;
5990
6005
  }
5991
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryBackendAggregationService, deps: [{ token: i1.Store }, { token: PrySnackbarService }, { token: PryI18nService }, { token: i1$2.HttpClient }, { token: SearchService }], target: i0.ɵɵFactoryTarget.Injectable }); }
6006
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryBackendAggregationService, deps: [{ token: i1.Store }, { token: PrySnackbarService }, { token: PryI18nService }, { token: i1$1.HttpClient }, { token: SearchService }], target: i0.ɵɵFactoryTarget.Injectable }); }
5992
6007
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryBackendAggregationService, providedIn: 'root' }); }
5993
6008
  }
5994
6009
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryBackendAggregationService, decorators: [{
@@ -5996,7 +6011,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
5996
6011
  args: [{
5997
6012
  providedIn: 'root'
5998
6013
  }]
5999
- }], ctorParameters: () => [{ type: i1.Store }, { type: PrySnackbarService }, { type: PryI18nService }, { type: i1$2.HttpClient }, { type: SearchService }] });
6014
+ }], ctorParameters: () => [{ type: i1.Store }, { type: PrySnackbarService }, { type: PryI18nService }, { type: i1$1.HttpClient }, { type: SearchService }] });
6000
6015
 
6001
6016
  class ResultsetUtils {
6002
6017
  static mergeResultSets(rs1, rs2) {
@@ -6004,28 +6019,26 @@ class ResultsetUtils {
6004
6019
  return rs2;
6005
6020
  if (!rs2)
6006
6021
  return rs1;
6007
- const rs1Copy = JSON.parse(JSON.stringify(rs1));
6022
+ const rs1Copy = structuredClone(rs1);
6008
6023
  Object.keys(rs2.items ?? {}).forEach((key) => {
6009
6024
  if (!rs1Copy.items[key]) {
6010
6025
  rs1Copy.items[key] = [];
6011
6026
  }
6012
6027
  rs1Copy.items[key].push(...rs2.items[key]);
6013
6028
  });
6014
- rs1Copy.relations = [...(rs1Copy.relations ?? []), ...(rs2.relations ?? [])];
6015
6029
  /* Make items and relations unique in resulted dataset */
6016
6030
  Object.keys(rs1Copy.items).forEach((key) => {
6017
6031
  const uniqueList = [...new Set(rs1Copy.items[key].map((it) => it.id))];
6018
6032
  rs1Copy.items[key] = uniqueList.map((id) => rs1Copy.items[key].find((it) => it.id === id));
6019
6033
  });
6020
- const uniqueRelations = [
6034
+ rs1Copy.relations = [
6021
6035
  ...new Set([
6022
- ...(rs1Copy.relations ?? []).map((rel) => `${rel.relationType}|${rel.source}|${rel.destination}`),
6036
+ ...([...(rs1Copy.relations ?? []), ...(rs2.relations ?? [])] ?? []).map((rel) => `${rel.relationType}|${rel.source}|${rel.destination}`),
6023
6037
  ...(rs2.relations ?? []).map((rel) => `${rel.relationType}|${rel.source}|${rel.destination}`)
6024
6038
  ])
6025
- ];
6026
- rs1Copy.relations = uniqueRelations.map((key) => {
6039
+ ].map((key) => {
6027
6040
  const splittedKey = key.split('|');
6028
- return rs1Copy.relations.find((rel) => rel.relationType === splittedKey[0] && rel.source === splittedKey[1] && rel.destination === splittedKey[2]);
6041
+ return { relationType: splittedKey[0], source: splittedKey[1], destination: splittedKey[2] };
6029
6042
  });
6030
6043
  if (!rs1Copy.count) {
6031
6044
  rs1Copy.count = {};
@@ -6039,6 +6052,7 @@ class ResultsetUtils {
6039
6052
  accurate: rs1Copy.count[key].accurate && rs2.count[key].accurate
6040
6053
  };
6041
6054
  });
6055
+ rs1Copy.searchAfter = rs2.searchAfter ?? rs1Copy.searchAfter;
6042
6056
  return rs1Copy;
6043
6057
  }
6044
6058
  }
@@ -6444,11 +6458,11 @@ class LoopScrollColumnComponent {
6444
6458
  }
6445
6459
  }
6446
6460
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: LoopScrollColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6447
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: LoopScrollColumnComponent, selector: "loop-scroll-column", inputs: { list: "list", selectedItem: "selectedItem" }, outputs: { selection: "selection" }, viewQueries: [{ propertyName: "column", first: true, predicate: ["column"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ul class=\"m-time-picker__list\" (scroll)=\"onScroll()\" [class.disable-scroll]=\"disableScroll\" #column>\n <ng-container *ngFor=\"let index of LOOP_COUNTER\">\n <li *ngFor=\"let item of list\" class=\"m-time-picker__list__item\" [class.is-clone]=\"index === 0\">\n <button (click)=\"select(item)\" [class.-selected]=\"selectedItem === item\">{{ item }}</button>\n </li>\n </ng-container>\n</ul>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
6461
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: LoopScrollColumnComponent, selector: "loop-scroll-column", inputs: { list: "list", selectedItem: "selectedItem" }, outputs: { selection: "selection" }, viewQueries: [{ propertyName: "column", first: true, predicate: ["column"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ul class=\"m-time-picker__list\" (scroll)=\"onScroll()\" [class.disable-scroll]=\"disableScroll\" #column>\n @for (index of LOOP_COUNTER; track index) {\n @for (item of list; track item) {\n <li class=\"m-time-picker__list__item\" [class.is-clone]=\"index === 0\">\n <button (click)=\"select(item)\" [class.-selected]=\"selectedItem === item\">{{ item }}</button>\n </li>\n }\n }\n</ul>\n" }); }
6448
6462
  }
6449
6463
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: LoopScrollColumnComponent, decorators: [{
6450
6464
  type: Component,
6451
- args: [{ selector: 'loop-scroll-column', template: "<ul class=\"m-time-picker__list\" (scroll)=\"onScroll()\" [class.disable-scroll]=\"disableScroll\" #column>\n <ng-container *ngFor=\"let index of LOOP_COUNTER\">\n <li *ngFor=\"let item of list\" class=\"m-time-picker__list__item\" [class.is-clone]=\"index === 0\">\n <button (click)=\"select(item)\" [class.-selected]=\"selectedItem === item\">{{ item }}</button>\n </li>\n </ng-container>\n</ul>\n" }]
6465
+ args: [{ selector: 'loop-scroll-column', template: "<ul class=\"m-time-picker__list\" (scroll)=\"onScroll()\" [class.disable-scroll]=\"disableScroll\" #column>\n @for (index of LOOP_COUNTER; track index) {\n @for (item of list; track item) {\n <li class=\"m-time-picker__list__item\" [class.is-clone]=\"index === 0\">\n <button (click)=\"select(item)\" [class.-selected]=\"selectedItem === item\">{{ item }}</button>\n </li>\n }\n }\n</ul>\n" }]
6452
6466
  }], ctorParameters: () => [], propDecorators: { column: [{
6453
6467
  type: ViewChild,
6454
6468
  args: ['column']
@@ -6508,13 +6522,13 @@ class PryTimePickerComponent {
6508
6522
  }
6509
6523
  }
6510
6524
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryTimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6511
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryTimePickerComponent, selector: "pry-time-picker", inputs: { AMPMFormat: "AMPMFormat" }, providers: [
6525
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryTimePickerComponent, selector: "pry-time-picker", inputs: { AMPMFormat: "AMPMFormat" }, providers: [
6512
6526
  {
6513
6527
  provide: NG_VALUE_ACCESSOR,
6514
6528
  useExisting: forwardRef(() => PryTimePickerComponent),
6515
6529
  multi: true
6516
6530
  }
6517
- ], viewQueries: [{ propertyName: "hourInput", first: true, predicate: ["hourInput"], descendants: true }, { propertyName: "minuteInput", first: true, predicate: ["minuteInput"], descendants: true }], ngImport: i0, template: "<div class=\"m-time-picker\" *ngIf=\"{ hour: selectedHour | async, minute: selectedMinute | async } as time\">\n <loop-scroll-column\n [list]=\"HOURS\"\n [selectedItem]=\"time.hour\"\n (selection)=\"selectHour($event)\"\n #hourInput\n ></loop-scroll-column>\n <loop-scroll-column\n [list]=\"MINUTES\"\n [selectedItem]=\"time.minute\"\n (selection)=\"selectMinute($event)\"\n #minuteInput\n ></loop-scroll-column>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoopScrollColumnComponent, selector: "loop-scroll-column", inputs: ["list", "selectedItem"], outputs: ["selection"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] }); }
6531
+ ], viewQueries: [{ propertyName: "hourInput", first: true, predicate: ["hourInput"], descendants: true }, { propertyName: "minuteInput", first: true, predicate: ["minuteInput"], descendants: true }], ngImport: i0, template: "@if ({ hour: selectedHour | async, minute: selectedMinute | async }; as time) {\n <div class=\"m-time-picker\">\n <loop-scroll-column\n [list]=\"HOURS\"\n [selectedItem]=\"time.hour\"\n (selection)=\"selectHour($event)\"\n #hourInput\n ></loop-scroll-column>\n <loop-scroll-column\n [list]=\"MINUTES\"\n [selectedItem]=\"time.minute\"\n (selection)=\"selectMinute($event)\"\n #minuteInput\n ></loop-scroll-column>\n </div>\n}\n", dependencies: [{ kind: "component", type: LoopScrollColumnComponent, selector: "loop-scroll-column", inputs: ["list", "selectedItem"], outputs: ["selection"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
6518
6532
  }
6519
6533
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryTimePickerComponent, decorators: [{
6520
6534
  type: Component,
@@ -6524,7 +6538,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
6524
6538
  useExisting: forwardRef(() => PryTimePickerComponent),
6525
6539
  multi: true
6526
6540
  }
6527
- ], template: "<div class=\"m-time-picker\" *ngIf=\"{ hour: selectedHour | async, minute: selectedMinute | async } as time\">\n <loop-scroll-column\n [list]=\"HOURS\"\n [selectedItem]=\"time.hour\"\n (selection)=\"selectHour($event)\"\n #hourInput\n ></loop-scroll-column>\n <loop-scroll-column\n [list]=\"MINUTES\"\n [selectedItem]=\"time.minute\"\n (selection)=\"selectMinute($event)\"\n #minuteInput\n ></loop-scroll-column>\n</div>\n" }]
6541
+ ], template: "@if ({ hour: selectedHour | async, minute: selectedMinute | async }; as time) {\n <div class=\"m-time-picker\">\n <loop-scroll-column\n [list]=\"HOURS\"\n [selectedItem]=\"time.hour\"\n (selection)=\"selectHour($event)\"\n #hourInput\n ></loop-scroll-column>\n <loop-scroll-column\n [list]=\"MINUTES\"\n [selectedItem]=\"time.minute\"\n (selection)=\"selectMinute($event)\"\n #minuteInput\n ></loop-scroll-column>\n </div>\n}\n" }]
6528
6542
  }], propDecorators: { AMPMFormat: [{
6529
6543
  type: Input
6530
6544
  }], hourInput: [{
@@ -6742,13 +6756,13 @@ class PryDatePickerComponent {
6742
6756
  }
6743
6757
  }
6744
6758
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6745
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryDatePickerComponent, selector: "pry-date-picker", inputs: { rangePicker: "rangePicker", timePicker: "timePicker", maxYear: "maxYear", minYear: "minYear", roundSelection: "roundSelection" }, providers: [
6759
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryDatePickerComponent, selector: "pry-date-picker", inputs: { rangePicker: "rangePicker", timePicker: "timePicker", maxYear: "maxYear", minYear: "minYear", roundSelection: "roundSelection" }, providers: [
6746
6760
  {
6747
6761
  provide: NG_VALUE_ACCESSOR,
6748
6762
  useExisting: forwardRef(() => PryDatePickerComponent),
6749
6763
  multi: true
6750
6764
  }
6751
- ], ngImport: i0, template: "<div class=\"o-date-picker-wrapper\">\n <div\n class=\"o-date-picker\"\n *ngIf=\"{\n month: currentMonth | async,\n year: currentYear | async,\n firstDay: firstDay | async,\n count: dayCount | async\n } as data\"\n >\n <div class=\"o-date-picker__header\">\n <div>\n <select\n class=\"o-date-picker__header__dropdown\"\n name=\"months\"\n id=\"months\"\n [ngModel]=\"data.month\"\n (ngModelChange)=\"changeMonth($event)\"\n >\n <option *ngFor=\"let month of MONTHS\" [ngValue]=\"month\" [selected]=\"month === data.month\">\n {{ '@pry.theme.months.' + month | i18n }}\n </option>\n </select>\n <select\n class=\"o-date-picker__header__dropdown\"\n name=\"year\"\n id=\"year\"\n [ngModel]=\"data.year\"\n (ngModelChange)=\"changeYear($event)\"\n >\n <option *ngFor=\"let year of YEARS\" [ngValue]=\"year\" [selected]=\"data.year === year\">\n {{ year }}\n </option>\n </select>\n </div>\n <div>\n <button\n type=\"button\"\n class=\"a-arrow a-arrow--left\"\n (click)=\"goBack()\"\n [disabled]=\"data.year === minYear && data.month === 0\"\n [class.disabled]=\"disabled\"\n >\n <pry-icon iconSvg=\"fleche_bas\" [width]=\"15\" [height]=\"15\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.theme.previousMonth' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-arrow a-arrow--right\"\n (click)=\"goForward()\"\n [disabled]=\"data.year === maxYear && data.month === 11\"\n [class.disabled]=\"disabled\"\n >\n <pry-icon iconSvg=\"fleche_bas\" [width]=\"15\" [height]=\"15\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.theme.nextMonth' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <ul class=\"o-date-picker__weekdays\">\n <li *ngFor=\"let weekday of WEEKDAYS\" class=\"o-date-picker__weekdays__item\">\n <span>{{ '@pry.theme.shortWeekdays.' + weekday | i18n }}</span>\n </li>\n </ul>\n\n <div class=\"o-date-picker__days-grid\" *ngIf=\"data.month !== null && data.year !== null\">\n <button\n *ngFor=\"let day of DAY$ | async; first as first\"\n (click)=\"setDateRange(day + 1); onClick()\"\n class=\"o-date-picker__days-grid__item\"\n [ngClass]=\"[\n roundSelection ? 'round' : '',\n first ? 'start-' + data.firstDay : '',\n day | dateRangeHighlight: data.month : data.year : dateRangeStart : dateRangeEnd\n ]\"\n >\n <time class=\"a-time\" [dateTime]=\"data.year + '-' + addLeadingZero(data.year) + '-' + addLeadingZero(day)\">{{\n day + 1\n }}</time>\n </button>\n </div>\n </div>\n\n <div class=\"m-time-picker-wrapper\" *ngIf=\"timePicker && !rangePicker\">\n <pry-time-picker (click)=\"onClick()\" [ngModel]=\"time | async\" (ngModelChange)=\"setTime($event)\"></pry-time-picker>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3$3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3$3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryTimePickerComponent, selector: "pry-time-picker", inputs: ["AMPMFormat"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: DateRangeHighlightPipe, name: "dateRangeHighlight" }] }); }
6765
+ ], ngImport: i0, template: "<div class=\"o-date-picker-wrapper\">\n @if ({\n month: currentMonth | async,\n year: currentYear | async,\n firstDay: firstDay | async,\n count: dayCount | async\n }; as data) {\n <div\n class=\"o-date-picker\"\n >\n <div class=\"o-date-picker__header\">\n <div>\n <select\n class=\"o-date-picker__header__dropdown\"\n name=\"months\"\n id=\"months\"\n [ngModel]=\"data.month\"\n (ngModelChange)=\"changeMonth($event)\"\n >\n @for (month of MONTHS; track month) {\n <option [ngValue]=\"month\" [selected]=\"month === data.month\">\n {{ '@pry.theme.months.' + month | i18n }}\n </option>\n }\n </select>\n <select\n class=\"o-date-picker__header__dropdown\"\n name=\"year\"\n id=\"year\"\n [ngModel]=\"data.year\"\n (ngModelChange)=\"changeYear($event)\"\n >\n @for (year of YEARS; track year) {\n <option [ngValue]=\"year\" [selected]=\"data.year === year\">\n {{ year }}\n </option>\n }\n </select>\n </div>\n <div>\n <button\n type=\"button\"\n class=\"a-arrow a-arrow--left\"\n (click)=\"goBack()\"\n [disabled]=\"data.year === minYear && data.month === 0\"\n [class.disabled]=\"disabled\"\n >\n <pry-icon iconSvg=\"fleche_bas\" [width]=\"15\" [height]=\"15\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.theme.previousMonth' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-arrow a-arrow--right\"\n (click)=\"goForward()\"\n [disabled]=\"data.year === maxYear && data.month === 11\"\n [class.disabled]=\"disabled\"\n >\n <pry-icon iconSvg=\"fleche_bas\" [width]=\"15\" [height]=\"15\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.theme.nextMonth' | i18n }}</span>\n </button>\n </div>\n </div>\n <ul class=\"o-date-picker__weekdays\">\n @for (weekday of WEEKDAYS; track weekday) {\n <li class=\"o-date-picker__weekdays__item\">\n <span>{{ '@pry.theme.shortWeekdays.' + weekday | i18n }}</span>\n </li>\n }\n </ul>\n @if (data.month !== null && data.year !== null) {\n <div class=\"o-date-picker__days-grid\">\n @for (day of DAY$ | async; track day; let first = $first) {\n <button\n (click)=\"setDateRange(day + 1); onClick()\"\n class=\"o-date-picker__days-grid__item\"\n [ngClass]=\"[\n roundSelection ? 'round' : '',\n first ? 'start-' + data.firstDay : '',\n day | dateRangeHighlight: data.month : data.year : dateRangeStart : dateRangeEnd\n ]\"\n >\n <time class=\"a-time\" [dateTime]=\"data.year + '-' + addLeadingZero(data.year) + '-' + addLeadingZero(day)\">{{\n day + 1\n }}</time>\n </button>\n }\n </div>\n }\n </div>\n }\n\n @if (timePicker && !rangePicker) {\n <div class=\"m-time-picker-wrapper\">\n <pry-time-picker (click)=\"onClick()\" [ngModel]=\"time | async\" (ngModelChange)=\"setTime($event)\"></pry-time-picker>\n </div>\n }\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryTimePickerComponent, selector: "pry-time-picker", inputs: ["AMPMFormat"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: DateRangeHighlightPipe, name: "dateRangeHighlight" }] }); }
6752
6766
  }
6753
6767
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDatePickerComponent, decorators: [{
6754
6768
  type: Component,
@@ -6758,7 +6772,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
6758
6772
  useExisting: forwardRef(() => PryDatePickerComponent),
6759
6773
  multi: true
6760
6774
  }
6761
- ], template: "<div class=\"o-date-picker-wrapper\">\n <div\n class=\"o-date-picker\"\n *ngIf=\"{\n month: currentMonth | async,\n year: currentYear | async,\n firstDay: firstDay | async,\n count: dayCount | async\n } as data\"\n >\n <div class=\"o-date-picker__header\">\n <div>\n <select\n class=\"o-date-picker__header__dropdown\"\n name=\"months\"\n id=\"months\"\n [ngModel]=\"data.month\"\n (ngModelChange)=\"changeMonth($event)\"\n >\n <option *ngFor=\"let month of MONTHS\" [ngValue]=\"month\" [selected]=\"month === data.month\">\n {{ '@pry.theme.months.' + month | i18n }}\n </option>\n </select>\n <select\n class=\"o-date-picker__header__dropdown\"\n name=\"year\"\n id=\"year\"\n [ngModel]=\"data.year\"\n (ngModelChange)=\"changeYear($event)\"\n >\n <option *ngFor=\"let year of YEARS\" [ngValue]=\"year\" [selected]=\"data.year === year\">\n {{ year }}\n </option>\n </select>\n </div>\n <div>\n <button\n type=\"button\"\n class=\"a-arrow a-arrow--left\"\n (click)=\"goBack()\"\n [disabled]=\"data.year === minYear && data.month === 0\"\n [class.disabled]=\"disabled\"\n >\n <pry-icon iconSvg=\"fleche_bas\" [width]=\"15\" [height]=\"15\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.theme.previousMonth' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-arrow a-arrow--right\"\n (click)=\"goForward()\"\n [disabled]=\"data.year === maxYear && data.month === 11\"\n [class.disabled]=\"disabled\"\n >\n <pry-icon iconSvg=\"fleche_bas\" [width]=\"15\" [height]=\"15\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.theme.nextMonth' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <ul class=\"o-date-picker__weekdays\">\n <li *ngFor=\"let weekday of WEEKDAYS\" class=\"o-date-picker__weekdays__item\">\n <span>{{ '@pry.theme.shortWeekdays.' + weekday | i18n }}</span>\n </li>\n </ul>\n\n <div class=\"o-date-picker__days-grid\" *ngIf=\"data.month !== null && data.year !== null\">\n <button\n *ngFor=\"let day of DAY$ | async; first as first\"\n (click)=\"setDateRange(day + 1); onClick()\"\n class=\"o-date-picker__days-grid__item\"\n [ngClass]=\"[\n roundSelection ? 'round' : '',\n first ? 'start-' + data.firstDay : '',\n day | dateRangeHighlight: data.month : data.year : dateRangeStart : dateRangeEnd\n ]\"\n >\n <time class=\"a-time\" [dateTime]=\"data.year + '-' + addLeadingZero(data.year) + '-' + addLeadingZero(day)\">{{\n day + 1\n }}</time>\n </button>\n </div>\n </div>\n\n <div class=\"m-time-picker-wrapper\" *ngIf=\"timePicker && !rangePicker\">\n <pry-time-picker (click)=\"onClick()\" [ngModel]=\"time | async\" (ngModelChange)=\"setTime($event)\"></pry-time-picker>\n </div>\n</div>\n" }]
6775
+ ], template: "<div class=\"o-date-picker-wrapper\">\n @if ({\n month: currentMonth | async,\n year: currentYear | async,\n firstDay: firstDay | async,\n count: dayCount | async\n }; as data) {\n <div\n class=\"o-date-picker\"\n >\n <div class=\"o-date-picker__header\">\n <div>\n <select\n class=\"o-date-picker__header__dropdown\"\n name=\"months\"\n id=\"months\"\n [ngModel]=\"data.month\"\n (ngModelChange)=\"changeMonth($event)\"\n >\n @for (month of MONTHS; track month) {\n <option [ngValue]=\"month\" [selected]=\"month === data.month\">\n {{ '@pry.theme.months.' + month | i18n }}\n </option>\n }\n </select>\n <select\n class=\"o-date-picker__header__dropdown\"\n name=\"year\"\n id=\"year\"\n [ngModel]=\"data.year\"\n (ngModelChange)=\"changeYear($event)\"\n >\n @for (year of YEARS; track year) {\n <option [ngValue]=\"year\" [selected]=\"data.year === year\">\n {{ year }}\n </option>\n }\n </select>\n </div>\n <div>\n <button\n type=\"button\"\n class=\"a-arrow a-arrow--left\"\n (click)=\"goBack()\"\n [disabled]=\"data.year === minYear && data.month === 0\"\n [class.disabled]=\"disabled\"\n >\n <pry-icon iconSvg=\"fleche_bas\" [width]=\"15\" [height]=\"15\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.theme.previousMonth' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-arrow a-arrow--right\"\n (click)=\"goForward()\"\n [disabled]=\"data.year === maxYear && data.month === 11\"\n [class.disabled]=\"disabled\"\n >\n <pry-icon iconSvg=\"fleche_bas\" [width]=\"15\" [height]=\"15\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.theme.nextMonth' | i18n }}</span>\n </button>\n </div>\n </div>\n <ul class=\"o-date-picker__weekdays\">\n @for (weekday of WEEKDAYS; track weekday) {\n <li class=\"o-date-picker__weekdays__item\">\n <span>{{ '@pry.theme.shortWeekdays.' + weekday | i18n }}</span>\n </li>\n }\n </ul>\n @if (data.month !== null && data.year !== null) {\n <div class=\"o-date-picker__days-grid\">\n @for (day of DAY$ | async; track day; let first = $first) {\n <button\n (click)=\"setDateRange(day + 1); onClick()\"\n class=\"o-date-picker__days-grid__item\"\n [ngClass]=\"[\n roundSelection ? 'round' : '',\n first ? 'start-' + data.firstDay : '',\n day | dateRangeHighlight: data.month : data.year : dateRangeStart : dateRangeEnd\n ]\"\n >\n <time class=\"a-time\" [dateTime]=\"data.year + '-' + addLeadingZero(data.year) + '-' + addLeadingZero(day)\">{{\n day + 1\n }}</time>\n </button>\n }\n </div>\n }\n </div>\n }\n\n @if (timePicker && !rangePicker) {\n <div class=\"m-time-picker-wrapper\">\n <pry-time-picker (click)=\"onClick()\" [ngModel]=\"time | async\" (ngModelChange)=\"setTime($event)\"></pry-time-picker>\n </div>\n }\n</div>\n" }]
6762
6776
  }], propDecorators: { rangePicker: [{
6763
6777
  type: Input
6764
6778
  }], timePicker: [{
@@ -6841,13 +6855,13 @@ class PryEditInputComponent {
6841
6855
  }
6842
6856
  }
6843
6857
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryEditInputComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
6844
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryEditInputComponent, selector: "pry-edit-input", inputs: { label: "label", editButtonTooltip: "editButtonTooltip", confirmButtonTooltip: "confirmButtonTooltip" }, outputs: { validated: "validated" }, providers: [
6858
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryEditInputComponent, selector: "pry-edit-input", inputs: { label: "label", editButtonTooltip: "editButtonTooltip", confirmButtonTooltip: "confirmButtonTooltip" }, outputs: { validated: "validated" }, providers: [
6845
6859
  {
6846
6860
  provide: NG_VALUE_ACCESSOR,
6847
6861
  useExisting: forwardRef(() => PryEditInputComponent),
6848
6862
  multi: true
6849
6863
  }
6850
- ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"o-pry-edit\" [class.-edit]=\"editMode\">\n <label id=\"edit-input-label-{{ id }}\" for=\"edit-input-{{ id }}\" class=\"a-label\">\n {{ label | i18n }}\n <span class=\"u-visually-hidden\">({{ label | i18n }})</span>\n </label>\n <div class=\"o-pry-edit__wrapper\" (mouseenter)=\"showButton = true\" (mouseleave)=\"showButton = false\">\n <div class=\"o-pry-edit__value u-display-flex -align-center\" *ngIf=\"!editMode\">\n {{ value }}\n </div>\n <input\n *ngIf=\"editMode\"\n id=\"edit-input-{{ id }}\"\n type=\"text\"\n class=\"a-form-field o-pry-edit__input\"\n [ngModel]=\"value\"\n (ngModelChange)=\"writeValue($event)\"\n #input\n />\n <button\n [class.-button-visible]=\"showButton || editMode\"\n type=\"button\"\n class=\"a-btn a-btn--icon-only -size-xs a-tooltip\"\n (click)=\"toggle()\"\n [attr.data-tooltip]=\"(editMode ? confirmButtonTooltip : editButtonTooltip) | i18n\"\n data-tooltip-position=\"left\"\n >\n <pry-icon [width]=\"16\" [height]=\"16\" [iconSvg]=\"editMode ? 'check' : 'edit'\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.theme.editInput.toggle' | i18n }}</span>\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6864
+ ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"o-pry-edit\" [class.-edit]=\"editMode\">\n <label id=\"edit-input-label-{{ id }}\" for=\"edit-input-{{ id }}\" class=\"a-label\">\n {{ label | i18n }}\n <span class=\"u-visually-hidden\">({{ label | i18n }})</span>\n </label>\n <div class=\"o-pry-edit__wrapper\" (mouseenter)=\"showButton = true\" (mouseleave)=\"showButton = false\">\n @if (!editMode) {\n <div class=\"o-pry-edit__value u-display-flex -align-center\">\n {{ value }}\n </div>\n }\n @if (editMode) {\n <input\n id=\"edit-input-{{ id }}\"\n type=\"text\"\n class=\"a-form-field o-pry-edit__input\"\n [ngModel]=\"value\"\n (ngModelChange)=\"writeValue($event)\"\n #input\n />\n }\n <button\n [class.-button-visible]=\"showButton || editMode\"\n type=\"button\"\n class=\"a-btn a-btn--icon-only -size-xs a-tooltip\"\n (click)=\"toggle()\"\n [attr.data-tooltip]=\"(editMode ? confirmButtonTooltip : editButtonTooltip) | i18n\"\n data-tooltip-position=\"left\"\n >\n <pry-icon [width]=\"16\" [height]=\"16\" [iconSvg]=\"editMode ? 'check' : 'edit'\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.theme.editInput.toggle' | i18n }}</span>\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i2$2.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: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6851
6865
  }
6852
6866
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryEditInputComponent, decorators: [{
6853
6867
  type: Component,
@@ -6857,7 +6871,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
6857
6871
  useExisting: forwardRef(() => PryEditInputComponent),
6858
6872
  multi: true
6859
6873
  }
6860
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"o-pry-edit\" [class.-edit]=\"editMode\">\n <label id=\"edit-input-label-{{ id }}\" for=\"edit-input-{{ id }}\" class=\"a-label\">\n {{ label | i18n }}\n <span class=\"u-visually-hidden\">({{ label | i18n }})</span>\n </label>\n <div class=\"o-pry-edit__wrapper\" (mouseenter)=\"showButton = true\" (mouseleave)=\"showButton = false\">\n <div class=\"o-pry-edit__value u-display-flex -align-center\" *ngIf=\"!editMode\">\n {{ value }}\n </div>\n <input\n *ngIf=\"editMode\"\n id=\"edit-input-{{ id }}\"\n type=\"text\"\n class=\"a-form-field o-pry-edit__input\"\n [ngModel]=\"value\"\n (ngModelChange)=\"writeValue($event)\"\n #input\n />\n <button\n [class.-button-visible]=\"showButton || editMode\"\n type=\"button\"\n class=\"a-btn a-btn--icon-only -size-xs a-tooltip\"\n (click)=\"toggle()\"\n [attr.data-tooltip]=\"(editMode ? confirmButtonTooltip : editButtonTooltip) | i18n\"\n data-tooltip-position=\"left\"\n >\n <pry-icon [width]=\"16\" [height]=\"16\" [iconSvg]=\"editMode ? 'check' : 'edit'\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.theme.editInput.toggle' | i18n }}</span>\n </button>\n </div>\n</div>\n" }]
6874
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"o-pry-edit\" [class.-edit]=\"editMode\">\n <label id=\"edit-input-label-{{ id }}\" for=\"edit-input-{{ id }}\" class=\"a-label\">\n {{ label | i18n }}\n <span class=\"u-visually-hidden\">({{ label | i18n }})</span>\n </label>\n <div class=\"o-pry-edit__wrapper\" (mouseenter)=\"showButton = true\" (mouseleave)=\"showButton = false\">\n @if (!editMode) {\n <div class=\"o-pry-edit__value u-display-flex -align-center\">\n {{ value }}\n </div>\n }\n @if (editMode) {\n <input\n id=\"edit-input-{{ id }}\"\n type=\"text\"\n class=\"a-form-field o-pry-edit__input\"\n [ngModel]=\"value\"\n (ngModelChange)=\"writeValue($event)\"\n #input\n />\n }\n <button\n [class.-button-visible]=\"showButton || editMode\"\n type=\"button\"\n class=\"a-btn a-btn--icon-only -size-xs a-tooltip\"\n (click)=\"toggle()\"\n [attr.data-tooltip]=\"(editMode ? confirmButtonTooltip : editButtonTooltip) | i18n\"\n data-tooltip-position=\"left\"\n >\n <pry-icon [width]=\"16\" [height]=\"16\" [iconSvg]=\"editMode ? 'check' : 'edit'\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.theme.editInput.toggle' | i18n }}</span>\n </button>\n </div>\n</div>\n" }]
6861
6875
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { label: [{
6862
6876
  type: Input
6863
6877
  }], editButtonTooltip: [{
@@ -6936,11 +6950,11 @@ class PryModalComponent {
6936
6950
  this.cancelAction = () => { };
6937
6951
  }
6938
6952
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6939
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryModalComponent, selector: "pry-modal", inputs: { titleModal: "titleModal", opened: "opened", validateLabel: "validateLabel", validateAction: "validateAction", cancelLabel: "cancelLabel", cancelAction: "cancelAction" }, ngImport: i0, template: "<div class=\"o-modal-wrapper\" *ngIf=\"opened\">\n <div class=\"o-modal backdrop\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ titleModal }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelAction()\">\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\n <ng-content></ng-content>\n\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"cancelAction()\">\n {{ cancelLabel }}\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"validateAction()\">\n {{ validateLabel }}\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
6953
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryModalComponent, selector: "pry-modal", inputs: { titleModal: "titleModal", opened: "opened", validateLabel: "validateLabel", validateAction: "validateAction", cancelLabel: "cancelLabel", cancelAction: "cancelAction" }, ngImport: i0, template: "@if (opened) {\n <div class=\"o-modal-wrapper\">\n <div class=\"o-modal backdrop\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ titleModal }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelAction()\">\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 <ng-content></ng-content>\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"cancelAction()\">\n {{ cancelLabel }}\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"validateAction()\">\n {{ validateLabel }}\n </button>\n </div>\n </div>\n </div>\n}\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
6940
6954
  }
6941
6955
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryModalComponent, decorators: [{
6942
6956
  type: Component,
6943
- args: [{ selector: 'pry-modal', template: "<div class=\"o-modal-wrapper\" *ngIf=\"opened\">\n <div class=\"o-modal backdrop\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ titleModal }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelAction()\">\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\n <ng-content></ng-content>\n\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"cancelAction()\">\n {{ cancelLabel }}\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"validateAction()\">\n {{ validateLabel }}\n </button>\n </div>\n </div>\n</div>\n" }]
6957
+ args: [{ selector: 'pry-modal', template: "@if (opened) {\n <div class=\"o-modal-wrapper\">\n <div class=\"o-modal backdrop\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ titleModal }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelAction()\">\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 <ng-content></ng-content>\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"cancelAction()\">\n {{ cancelLabel }}\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"validateAction()\">\n {{ validateLabel }}\n </button>\n </div>\n </div>\n </div>\n}\n" }]
6944
6958
  }], propDecorators: { titleModal: [{
6945
6959
  type: Input
6946
6960
  }], opened: [{
@@ -7025,13 +7039,13 @@ class PryToggleComponent {
7025
7039
  return !!this.leftword || !!this.rightword;
7026
7040
  }
7027
7041
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryToggleComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
7028
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryToggleComponent, selector: "pry-toggle", inputs: { alwaysActive: "alwaysActive", disabled: "disabled", mode: "mode", size: "size", dir: "dir", leftword: "leftword", rightword: "rightword" }, host: { properties: { "class": "this.class" } }, providers: [
7042
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryToggleComponent, selector: "pry-toggle", inputs: { alwaysActive: "alwaysActive", disabled: "disabled", mode: "mode", size: "size", dir: "dir", leftword: "leftword", rightword: "rightword" }, host: { properties: { "class": "this.class" } }, providers: [
7029
7043
  {
7030
7044
  provide: NG_VALUE_ACCESSOR,
7031
7045
  useExisting: forwardRef(() => PryToggleComponent),
7032
7046
  multi: true
7033
7047
  }
7034
- ], viewQueries: [{ propertyName: "_inputElement", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"mode !== 'action'\">\n <label\n class=\"a-toggle a-tooltip\"\n [for]=\"'toggle-' + _id\"\n [dir]=\"dir\"\n [ngClass]=\"{\n '-disabled': disabled,\n '-always-active': alwaysActive,\n '-size-sm': size === 'sm',\n '-txt-inside': hasTextInside\n }\"\n [attr.data-tooltip]=\"'@pry.toolbox.edit' | i18n\"\n data-tooltip-position=\"bottom\"\n >\n <input\n #input\n type=\"checkbox\"\n name=\"toggle\"\n [id]=\"'toggle-' + _id\"\n class=\"a-toggle__input\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n (change)=\"onChangeValue($event)\"\n (click)=\"onInputClick($event)\"\n />\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </label>\n</ng-container>\n<ng-container *ngIf=\"mode === 'action'\">\n <button\n type=\"button\"\n class=\"a-toggle\"\n [dir]=\"dir\"\n [ngClass]=\"{\n '-disabled': disabled,\n '-always-active': alwaysActive,\n '-size-sm': size === 'sm',\n '-txt-inside': hasTextInside\n }\"\n [attr.aria-pressed]=\"checked\"\n [disabled]=\"disabled\"\n (change)=\"onChangeValue($event)\"\n (click)=\"onInputClick($event)\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </button>\n</ng-container>\n\n<ng-template #contentTpl>\n <span class=\"a-toggle__display\" aria-hidden=\"true\">\n <span class=\"a-toggle__display__txtleft\">{{ leftword }}</span>\n <span class=\"a-toggle__display__txtright\">{{ rightword }}</span>\n </span>\n <span class=\"a-toggle__wording\">\n <ng-content></ng-content>\n </span>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7048
+ ], viewQueries: [{ propertyName: "_inputElement", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "@if (mode !== 'action') {\n <label\n class=\"a-toggle a-tooltip\"\n [for]=\"'toggle-' + _id\"\n [dir]=\"dir\"\n [ngClass]=\"{\n '-disabled': disabled,\n '-always-active': alwaysActive,\n '-size-sm': size === 'sm',\n '-txt-inside': hasTextInside\n }\"\n [attr.data-tooltip]=\"'@pry.toolbox.edit' | i18n\"\n data-tooltip-position=\"bottom\"\n >\n <input\n #input\n type=\"checkbox\"\n name=\"toggle\"\n [id]=\"'toggle-' + _id\"\n class=\"a-toggle__input\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n (change)=\"onChangeValue($event)\"\n (click)=\"onInputClick($event)\"\n />\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </label>\n}\n@if (mode === 'action') {\n <button\n type=\"button\"\n class=\"a-toggle\"\n [dir]=\"dir\"\n [ngClass]=\"{\n '-disabled': disabled,\n '-always-active': alwaysActive,\n '-size-sm': size === 'sm',\n '-txt-inside': hasTextInside\n }\"\n [attr.aria-pressed]=\"checked\"\n [disabled]=\"disabled\"\n (change)=\"onChangeValue($event)\"\n (click)=\"onInputClick($event)\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </button>\n}\n\n<ng-template #contentTpl>\n <span class=\"a-toggle__display\" aria-hidden=\"true\">\n <span class=\"a-toggle__display__txtleft\">{{ leftword }}</span>\n <span class=\"a-toggle__display__txtright\">{{ rightword }}</span>\n </span>\n <span class=\"a-toggle__wording\">\n <ng-content></ng-content>\n </span>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7035
7049
  }
7036
7050
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryToggleComponent, decorators: [{
7037
7051
  type: Component,
@@ -7041,7 +7055,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
7041
7055
  useExisting: forwardRef(() => PryToggleComponent),
7042
7056
  multi: true
7043
7057
  }
7044
- ], template: "<ng-container *ngIf=\"mode !== 'action'\">\n <label\n class=\"a-toggle a-tooltip\"\n [for]=\"'toggle-' + _id\"\n [dir]=\"dir\"\n [ngClass]=\"{\n '-disabled': disabled,\n '-always-active': alwaysActive,\n '-size-sm': size === 'sm',\n '-txt-inside': hasTextInside\n }\"\n [attr.data-tooltip]=\"'@pry.toolbox.edit' | i18n\"\n data-tooltip-position=\"bottom\"\n >\n <input\n #input\n type=\"checkbox\"\n name=\"toggle\"\n [id]=\"'toggle-' + _id\"\n class=\"a-toggle__input\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n (change)=\"onChangeValue($event)\"\n (click)=\"onInputClick($event)\"\n />\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </label>\n</ng-container>\n<ng-container *ngIf=\"mode === 'action'\">\n <button\n type=\"button\"\n class=\"a-toggle\"\n [dir]=\"dir\"\n [ngClass]=\"{\n '-disabled': disabled,\n '-always-active': alwaysActive,\n '-size-sm': size === 'sm',\n '-txt-inside': hasTextInside\n }\"\n [attr.aria-pressed]=\"checked\"\n [disabled]=\"disabled\"\n (change)=\"onChangeValue($event)\"\n (click)=\"onInputClick($event)\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </button>\n</ng-container>\n\n<ng-template #contentTpl>\n <span class=\"a-toggle__display\" aria-hidden=\"true\">\n <span class=\"a-toggle__display__txtleft\">{{ leftword }}</span>\n <span class=\"a-toggle__display__txtright\">{{ rightword }}</span>\n </span>\n <span class=\"a-toggle__wording\">\n <ng-content></ng-content>\n </span>\n</ng-template>\n" }]
7058
+ ], template: "@if (mode !== 'action') {\n <label\n class=\"a-toggle a-tooltip\"\n [for]=\"'toggle-' + _id\"\n [dir]=\"dir\"\n [ngClass]=\"{\n '-disabled': disabled,\n '-always-active': alwaysActive,\n '-size-sm': size === 'sm',\n '-txt-inside': hasTextInside\n }\"\n [attr.data-tooltip]=\"'@pry.toolbox.edit' | i18n\"\n data-tooltip-position=\"bottom\"\n >\n <input\n #input\n type=\"checkbox\"\n name=\"toggle\"\n [id]=\"'toggle-' + _id\"\n class=\"a-toggle__input\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n (change)=\"onChangeValue($event)\"\n (click)=\"onInputClick($event)\"\n />\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </label>\n}\n@if (mode === 'action') {\n <button\n type=\"button\"\n class=\"a-toggle\"\n [dir]=\"dir\"\n [ngClass]=\"{\n '-disabled': disabled,\n '-always-active': alwaysActive,\n '-size-sm': size === 'sm',\n '-txt-inside': hasTextInside\n }\"\n [attr.aria-pressed]=\"checked\"\n [disabled]=\"disabled\"\n (change)=\"onChangeValue($event)\"\n (click)=\"onInputClick($event)\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </button>\n}\n\n<ng-template #contentTpl>\n <span class=\"a-toggle__display\" aria-hidden=\"true\">\n <span class=\"a-toggle__display__txtleft\">{{ leftword }}</span>\n <span class=\"a-toggle__display__txtright\">{{ rightword }}</span>\n </span>\n <span class=\"a-toggle__wording\">\n <ng-content></ng-content>\n </span>\n</ng-template>\n" }]
7045
7059
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { class: [{
7046
7060
  type: HostBinding,
7047
7061
  args: ['class']
@@ -7626,7 +7640,7 @@ class PrySelectComponent extends SubscriptionnerDirective {
7626
7640
  enterPressed($event) {
7627
7641
  this.pressedEnter.next();
7628
7642
  }
7629
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PrySelectComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: SelectA11yService }], target: i0.ɵɵFactoryTarget.Component }); }
7643
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PrySelectComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i2$1.Overlay }, { token: i0.ViewContainerRef }, { token: SelectA11yService }], target: i0.ɵɵFactoryTarget.Component }); }
7630
7644
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PrySelectComponent, selector: "pry-select", inputs: { items: "items", clearable: "clearable", multiple: "multiple", closeOnSelect: "closeOnSelect", placeholder: "placeholder", isForm: "isForm", required: "required", name: "name", autocomplete: "autocomplete", alwaysShowAutosuggestedValues: "alwaysShowAutosuggestedValues", externalAutocompleteService: "externalAutocompleteService", bindValue: "bindValue", bindLabel: "bindLabel", iconSize: "iconSize", bindIcon: "bindIcon", template: "template", i18nPrefix: "i18nPrefix", bindClasses: "bindClasses", loading: "loading", elementRef: "elementRef" }, outputs: { searched: "searched", cleared: "cleared", clicked: "clicked", pressedEnter: "pressedEnter" }, providers: [
7631
7645
  {
7632
7646
  provide: NG_VALUE_ACCESSOR,
@@ -7634,7 +7648,7 @@ class PrySelectComponent extends SubscriptionnerDirective {
7634
7648
  multi: true
7635
7649
  },
7636
7650
  SelectA11yService
7637
- ], viewQueries: [{ propertyName: "optionsModal", first: true, predicate: ["optionsModal"], descendants: true, read: TemplateRef }, { propertyName: "selectElement", first: true, predicate: ["selectElement"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n>\n <div class=\"a-pry-select__content\">\n @if (autocomplete) {\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n [placeholder]=\"placeholder ?? ''\"\n (keydown.enter)=\"enterPressed($event)\"\n #input\n />\n } @else if ((valueItems$ | async).length === 0) {\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n <div class=\"a-pry-select__filler\"></div>\n } @else {\n @for (item of valueItems$ | async; track !!item && !!item.id ? item.id : item) {\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ?? '') + value | i18n: { warn: false } }}\n <span\n *ngIf=\"multiple && clearable\"\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n }\n }\n </div>\n }\n <div class=\"a-pry-select__filler\"></div>\n }\n </div>\n <div class=\"a-pry-select__actions\">\n <div class=\"a-pry-select__actions__clear-button\">\n @if (clearable && (search$ | async)) {\n <span class=\"a-pry-select__clear\" (click)=\"clearAll($event)\" aria-hidden=\"true\">\u00D7</span>\n }\n </div>\n <pry-icon\n class=\"a-pry-select__toggle\"\n [iconSvg]=\"open ? 'chevron_top' : 'chevron_bottom'\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n </div>\n</div>\n<ng-template #optionsModal>\n <div\n role=\"listbox\"\n [attr.aria-label]=\"'@pry.select.label' | i18n\"\n [id]=\"modalId\"\n [attr.aria-activedescendant]=\"'select-option-' + activeDescendant\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.required]=\"required\"\n [attr.aria-readonly]=\"disabled\"\n cdkTrapFocus=\"!autocomplete\"\n [cdkTrapFocusAutoCapture]=\"!autocomplete\"\n >\n @if (loading) {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <div class=\"no-widget no-widget__loader\">\n <pry-page-loader></pry-page-loader>\n </div>\n <p>{{ '@pry.select.loading' | i18n }}...</p>\n </div>\n } @else {\n @for (\n item of matchingItems$ | async;\n track !!item && !!item.id ? item.id : item;\n let index = $index;\n let first = $first;\n let last = $last\n ) {\n <div\n class=\"a-pry-select__options__option\"\n [attr.aria-selected]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-checked]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"select($event, item, index)\"\n (keydown)=\"onKeydownOption($event, item, index, optionDivRef, first, last)\"\n [style.width.px]=\"modalWidth\"\n role=\"option\"\n [id]=\"'select-option-' + index\"\n tabindex=\"0\"\n #optionDivRef\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n @if (multiple) {\n <pry-checkbox\n (click)=\"$event.preventDefault()\"\n [ngModel]=\"(valueItems$ | async).includes(item)\"\n ></pry-checkbox>\n }\n @if (bindIcon) {\n <pry-icon [iconSvg]=\"item[bindIcon]\" [width]=\"iconSize[0]\" [height]=\"iconSize[1]\"></pry-icon>\n }\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ? i18nPrefix : '') + value | i18n: { warn: false } }}\n }\n }\n </div>\n } @empty {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <p>{{ '@pry.select.empty' | i18n }}</p>\n </div>\n }\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3$2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i3$2.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i7.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { kind: "component", type: i8.PryPageLoaderComponent, selector: "pry-page-loader", inputs: ["image", "imageAltText"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
7651
+ ], viewQueries: [{ propertyName: "optionsModal", first: true, predicate: ["optionsModal"], descendants: true, read: TemplateRef }, { propertyName: "selectElement", first: true, predicate: ["selectElement"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n >\n <div class=\"a-pry-select__content\">\n @if (autocomplete) {\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n [placeholder]=\"placeholder ?? ''\"\n (keydown.enter)=\"enterPressed($event)\"\n #input\n />\n } @else if ((valueItems$ | async).length === 0) {\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n <div class=\"a-pry-select__filler\"></div>\n } @else {\n @for (item of valueItems$ | async; track !!item && !!item.id ? item.id : item) {\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n @if (bindIcon) {\n <pry-icon\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n }\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ?? '') + value | i18n: { warn: false } }}\n @if (multiple && clearable) {\n <span\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n }\n }\n }\n </div>\n }\n <div class=\"a-pry-select__filler\"></div>\n }\n </div>\n <div class=\"a-pry-select__actions\">\n <div class=\"a-pry-select__actions__clear-button\">\n @if (clearable && (search$ | async)) {\n <span class=\"a-pry-select__clear\" (click)=\"clearAll($event)\" aria-hidden=\"true\">\u00D7</span>\n }\n </div>\n <pry-icon\n class=\"a-pry-select__toggle\"\n [iconSvg]=\"open ? 'chevron_top' : 'chevron_bottom'\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n </div>\n </div>\n <ng-template #optionsModal>\n <div\n role=\"listbox\"\n [attr.aria-label]=\"'@pry.select.label' | i18n\"\n [id]=\"modalId\"\n [attr.aria-activedescendant]=\"'select-option-' + activeDescendant\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.required]=\"required\"\n [attr.aria-readonly]=\"disabled\"\n cdkTrapFocus=\"!autocomplete\"\n [cdkTrapFocusAutoCapture]=\"!autocomplete\"\n >\n @if (loading) {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <div class=\"no-widget no-widget__loader\">\n <pry-page-loader></pry-page-loader>\n </div>\n <p>{{ '@pry.select.loading' | i18n }}...</p>\n </div>\n } @else {\n @for (\n item of matchingItems$ | async;\n track !!item && !!item.id ? item.id : item;\n let index = $index;\n let first = $first;\n let last = $last\n ) {\n <div\n class=\"a-pry-select__options__option\"\n [attr.aria-selected]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-checked]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"select($event, item, index)\"\n (keydown)=\"onKeydownOption($event, item, index, optionDivRef, first, last)\"\n [style.width.px]=\"modalWidth\"\n role=\"option\"\n [id]=\"'select-option-' + index\"\n tabindex=\"0\"\n #optionDivRef\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n @if (multiple) {\n <pry-checkbox\n (click)=\"$event.preventDefault()\"\n [ngModel]=\"(valueItems$ | async).includes(item)\"\n ></pry-checkbox>\n }\n @if (bindIcon) {\n <pry-icon [iconSvg]=\"item[bindIcon]\" [width]=\"iconSize[0]\" [height]=\"iconSize[1]\"></pry-icon>\n }\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ? i18nPrefix : '') + value | i18n: { warn: false } }}\n }\n }\n </div>\n } @empty {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <p>{{ '@pry.select.empty' | i18n }}</p>\n </div>\n }\n }\n </div>\n </ng-template>\n", dependencies: [{ kind: "directive", type: i3$2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i3$2.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$2.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: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i7.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { kind: "component", type: i8.PryPageLoaderComponent, selector: "pry-page-loader", inputs: ["image", "imageAltText"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
7638
7652
  }
7639
7653
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PrySelectComponent, decorators: [{
7640
7654
  type: Component,
@@ -7645,8 +7659,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
7645
7659
  multi: true
7646
7660
  },
7647
7661
  SelectA11yService
7648
- ], template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n>\n <div class=\"a-pry-select__content\">\n @if (autocomplete) {\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n [placeholder]=\"placeholder ?? ''\"\n (keydown.enter)=\"enterPressed($event)\"\n #input\n />\n } @else if ((valueItems$ | async).length === 0) {\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n <div class=\"a-pry-select__filler\"></div>\n } @else {\n @for (item of valueItems$ | async; track !!item && !!item.id ? item.id : item) {\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ?? '') + value | i18n: { warn: false } }}\n <span\n *ngIf=\"multiple && clearable\"\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n }\n }\n </div>\n }\n <div class=\"a-pry-select__filler\"></div>\n }\n </div>\n <div class=\"a-pry-select__actions\">\n <div class=\"a-pry-select__actions__clear-button\">\n @if (clearable && (search$ | async)) {\n <span class=\"a-pry-select__clear\" (click)=\"clearAll($event)\" aria-hidden=\"true\">\u00D7</span>\n }\n </div>\n <pry-icon\n class=\"a-pry-select__toggle\"\n [iconSvg]=\"open ? 'chevron_top' : 'chevron_bottom'\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n </div>\n</div>\n<ng-template #optionsModal>\n <div\n role=\"listbox\"\n [attr.aria-label]=\"'@pry.select.label' | i18n\"\n [id]=\"modalId\"\n [attr.aria-activedescendant]=\"'select-option-' + activeDescendant\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.required]=\"required\"\n [attr.aria-readonly]=\"disabled\"\n cdkTrapFocus=\"!autocomplete\"\n [cdkTrapFocusAutoCapture]=\"!autocomplete\"\n >\n @if (loading) {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <div class=\"no-widget no-widget__loader\">\n <pry-page-loader></pry-page-loader>\n </div>\n <p>{{ '@pry.select.loading' | i18n }}...</p>\n </div>\n } @else {\n @for (\n item of matchingItems$ | async;\n track !!item && !!item.id ? item.id : item;\n let index = $index;\n let first = $first;\n let last = $last\n ) {\n <div\n class=\"a-pry-select__options__option\"\n [attr.aria-selected]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-checked]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"select($event, item, index)\"\n (keydown)=\"onKeydownOption($event, item, index, optionDivRef, first, last)\"\n [style.width.px]=\"modalWidth\"\n role=\"option\"\n [id]=\"'select-option-' + index\"\n tabindex=\"0\"\n #optionDivRef\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n @if (multiple) {\n <pry-checkbox\n (click)=\"$event.preventDefault()\"\n [ngModel]=\"(valueItems$ | async).includes(item)\"\n ></pry-checkbox>\n }\n @if (bindIcon) {\n <pry-icon [iconSvg]=\"item[bindIcon]\" [width]=\"iconSize[0]\" [height]=\"iconSize[1]\"></pry-icon>\n }\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ? i18nPrefix : '') + value | i18n: { warn: false } }}\n }\n }\n </div>\n } @empty {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <p>{{ '@pry.select.empty' | i18n }}</p>\n </div>\n }\n }\n </div>\n</ng-template>\n" }]
7649
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: SelectA11yService }], propDecorators: { items: [{
7662
+ ], template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n >\n <div class=\"a-pry-select__content\">\n @if (autocomplete) {\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n [placeholder]=\"placeholder ?? ''\"\n (keydown.enter)=\"enterPressed($event)\"\n #input\n />\n } @else if ((valueItems$ | async).length === 0) {\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n <div class=\"a-pry-select__filler\"></div>\n } @else {\n @for (item of valueItems$ | async; track !!item && !!item.id ? item.id : item) {\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n @if (bindIcon) {\n <pry-icon\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n }\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ?? '') + value | i18n: { warn: false } }}\n @if (multiple && clearable) {\n <span\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n }\n }\n }\n </div>\n }\n <div class=\"a-pry-select__filler\"></div>\n }\n </div>\n <div class=\"a-pry-select__actions\">\n <div class=\"a-pry-select__actions__clear-button\">\n @if (clearable && (search$ | async)) {\n <span class=\"a-pry-select__clear\" (click)=\"clearAll($event)\" aria-hidden=\"true\">\u00D7</span>\n }\n </div>\n <pry-icon\n class=\"a-pry-select__toggle\"\n [iconSvg]=\"open ? 'chevron_top' : 'chevron_bottom'\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n </div>\n </div>\n <ng-template #optionsModal>\n <div\n role=\"listbox\"\n [attr.aria-label]=\"'@pry.select.label' | i18n\"\n [id]=\"modalId\"\n [attr.aria-activedescendant]=\"'select-option-' + activeDescendant\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.required]=\"required\"\n [attr.aria-readonly]=\"disabled\"\n cdkTrapFocus=\"!autocomplete\"\n [cdkTrapFocusAutoCapture]=\"!autocomplete\"\n >\n @if (loading) {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <div class=\"no-widget no-widget__loader\">\n <pry-page-loader></pry-page-loader>\n </div>\n <p>{{ '@pry.select.loading' | i18n }}...</p>\n </div>\n } @else {\n @for (\n item of matchingItems$ | async;\n track !!item && !!item.id ? item.id : item;\n let index = $index;\n let first = $first;\n let last = $last\n ) {\n <div\n class=\"a-pry-select__options__option\"\n [attr.aria-selected]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-checked]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"select($event, item, index)\"\n (keydown)=\"onKeydownOption($event, item, index, optionDivRef, first, last)\"\n [style.width.px]=\"modalWidth\"\n role=\"option\"\n [id]=\"'select-option-' + index\"\n tabindex=\"0\"\n #optionDivRef\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n @if (multiple) {\n <pry-checkbox\n (click)=\"$event.preventDefault()\"\n [ngModel]=\"(valueItems$ | async).includes(item)\"\n ></pry-checkbox>\n }\n @if (bindIcon) {\n <pry-icon [iconSvg]=\"item[bindIcon]\" [width]=\"iconSize[0]\" [height]=\"iconSize[1]\"></pry-icon>\n }\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ? i18nPrefix : '') + value | i18n: { warn: false } }}\n }\n }\n </div>\n } @empty {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <p>{{ '@pry.select.empty' | i18n }}</p>\n </div>\n }\n }\n </div>\n </ng-template>\n" }]
7663
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i2$1.Overlay }, { type: i0.ViewContainerRef }, { type: SelectA11yService }], propDecorators: { items: [{
7650
7664
  type: Input
7651
7665
  }], clearable: [{
7652
7666
  type: Input
@@ -7805,13 +7819,13 @@ class PryRangeComponent {
7805
7819
  this.updateView();
7806
7820
  }
7807
7821
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryRangeComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
7808
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryRangeComponent, selector: "pry-range", inputs: { min: "min", max: "max", step: "step", disabled: "disabled", labelTranslate: "labelTranslate" }, host: { listeners: { "window:resize": "ngDoCheck()" } }, providers: [
7822
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryRangeComponent, selector: "pry-range", inputs: { min: "min", max: "max", step: "step", disabled: "disabled", labelTranslate: "labelTranslate" }, host: { listeners: { "window:resize": "ngDoCheck()" } }, providers: [
7809
7823
  {
7810
7824
  provide: NG_VALUE_ACCESSOR,
7811
7825
  useExisting: forwardRef(() => PryRangeComponent),
7812
7826
  multi: true
7813
7827
  }
7814
- ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"range-{{ id }}\" *ngIf=\"labelTranslate\">{{ labelTranslate | i18n }}</label>\n <div class=\"a-range-slider-wrapper\">\n <span aria-hidden=\"true\" class=\"a-range-slider__min\">{{ min }}</span>\n <input\n (input)=\"writeValueEvent($event)\"\n [value]=\"value\"\n class=\"a-range-slider\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [disabled]=\"disabled\"\n type=\"range\"\n id=\"range-{{ id }}\"\n [style.background-size]=\"info.backgroundSize + '% 100%'\"\n #input\n />\n <output\n aria-hidden=\"true\"\n for=\"range-{{ id }}\"\n class=\"a-range-slider__selected-value\"\n [style.left.px]=\"info.left\"\n >{{ info.text }}</output\n >\n <span aria-hidden=\"true\" class=\"a-range-slider__max\">{{ max }}</span>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
7828
+ ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"m-form-label-field\">\n @if (labelTranslate) {\n <label class=\"a-label\" for=\"range-{{ id }}\">{{ labelTranslate | i18n }}</label>\n }\n <div class=\"a-range-slider-wrapper\">\n <span aria-hidden=\"true\" class=\"a-range-slider__min\">{{ min }}</span>\n <input\n (input)=\"writeValueEvent($event)\"\n [value]=\"value\"\n class=\"a-range-slider\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [disabled]=\"disabled\"\n type=\"range\"\n id=\"range-{{ id }}\"\n [style.background-size]=\"info.backgroundSize + '% 100%'\"\n #input\n />\n <output\n aria-hidden=\"true\"\n for=\"range-{{ id }}\"\n class=\"a-range-slider__selected-value\"\n [style.left.px]=\"info.left\"\n >{{ info.text }}</output\n >\n <span aria-hidden=\"true\" class=\"a-range-slider__max\">{{ max }}</span>\n </div>\n </div>\n", dependencies: [{ kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
7815
7829
  }
7816
7830
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryRangeComponent, decorators: [{
7817
7831
  type: Component,
@@ -7821,7 +7835,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
7821
7835
  useExisting: forwardRef(() => PryRangeComponent),
7822
7836
  multi: true
7823
7837
  }
7824
- ], template: "<div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"range-{{ id }}\" *ngIf=\"labelTranslate\">{{ labelTranslate | i18n }}</label>\n <div class=\"a-range-slider-wrapper\">\n <span aria-hidden=\"true\" class=\"a-range-slider__min\">{{ min }}</span>\n <input\n (input)=\"writeValueEvent($event)\"\n [value]=\"value\"\n class=\"a-range-slider\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [disabled]=\"disabled\"\n type=\"range\"\n id=\"range-{{ id }}\"\n [style.background-size]=\"info.backgroundSize + '% 100%'\"\n #input\n />\n <output\n aria-hidden=\"true\"\n for=\"range-{{ id }}\"\n class=\"a-range-slider__selected-value\"\n [style.left.px]=\"info.left\"\n >{{ info.text }}</output\n >\n <span aria-hidden=\"true\" class=\"a-range-slider__max\">{{ max }}</span>\n </div>\n</div>\n" }]
7838
+ ], template: "<div class=\"m-form-label-field\">\n @if (labelTranslate) {\n <label class=\"a-label\" for=\"range-{{ id }}\">{{ labelTranslate | i18n }}</label>\n }\n <div class=\"a-range-slider-wrapper\">\n <span aria-hidden=\"true\" class=\"a-range-slider__min\">{{ min }}</span>\n <input\n (input)=\"writeValueEvent($event)\"\n [value]=\"value\"\n class=\"a-range-slider\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [disabled]=\"disabled\"\n type=\"range\"\n id=\"range-{{ id }}\"\n [style.background-size]=\"info.backgroundSize + '% 100%'\"\n #input\n />\n <output\n aria-hidden=\"true\"\n for=\"range-{{ id }}\"\n class=\"a-range-slider__selected-value\"\n [style.left.px]=\"info.left\"\n >{{ info.text }}</output\n >\n <span aria-hidden=\"true\" class=\"a-range-slider__max\">{{ max }}</span>\n </div>\n </div>\n" }]
7825
7839
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { min: [{
7826
7840
  type: Input
7827
7841
  }], max: [{
@@ -7918,7 +7932,7 @@ class ChipsSelectorComponent extends SubscriptionnerDirective {
7918
7932
  : (this.usedItems$.getValue() ?? []).find((usedItem) => this.areItemsEqual(usedItem, item));
7919
7933
  }
7920
7934
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ChipsSelectorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
7921
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ChipsSelectorComponent, selector: "pry-chips-selector", inputs: { bindValue: "bindValue", bindLabel: "bindLabel", translationStringBase: "translationStringBase", itemTranslationStringBase: "itemTranslationStringBase", showActionButtons: "showActionButtons", showSearchbar: "showSearchbar", items: "items", usedItems: "usedItems" }, outputs: { itemsChanged: "itemsChanged" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-chips-selector\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"dialog_namedqueries\">\n @if (showSearchbar) {\n <div class=\"o-widget__search\">\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.components.searchData' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"search($event)\"\n />\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </div>\n }\n\n <div class=\"o-chips-selector__items\">\n @if (((usedItems$ | async) ?? []).length > 0) {\n <div class=\"o-chips-selector__used-items\">\n <h4 class=\"a-h4\">{{ translationStringBase + 'selection' | i18n }}</h4>\n <ul class=\"o-chips-selector__list\">\n @for (item of usedItems$ | async; track item) {\n <li class=\"o-chips-selector__item\">\n <button class=\"a-chip -md o-chips-selector__chip\" (click)=\"toggleItemSelection(item)\" type=\"button\">\n <p>{{ getItemLabel(item) }}</p>\n <pry-icon [iconSvg]=\"'close'\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </button>\n </li>\n }\n </ul>\n </div>\n } @else {\n <span class=\"-no-items\">{{ translationStringBase + 'noItemSelected' | i18n }}</span>\n }\n\n <div class=\"o-chips-selector__unused-items\">\n <h4 class=\"a-h4\">{{ translationStringBase + 'select' | i18n }}</h4>\n <ul class=\"o-chips-selector__list\">\n @for (item of unusedItems$ | async; track item) {\n <li class=\"o-chips-selector__item\">\n <button class=\"a-chip a-chip--light -md o-chips-selector__chip\" (click)=\"toggleItemSelection(item)\">\n <span class=\"u-visually-hidden\">{{ translationStringBase + 'selectItem' | i18n }}</span>\n <p class=\"a-p\">{{ getItemLabel(item) }}</p>\n </button>\n </li>\n }\n </ul>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] }); }
7935
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ChipsSelectorComponent, selector: "pry-chips-selector", inputs: { bindValue: "bindValue", bindLabel: "bindLabel", translationStringBase: "translationStringBase", itemTranslationStringBase: "itemTranslationStringBase", showActionButtons: "showActionButtons", showSearchbar: "showSearchbar", items: "items", usedItems: "usedItems" }, outputs: { itemsChanged: "itemsChanged" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-chips-selector\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"dialog_namedqueries\">\n @if (showSearchbar) {\n <div class=\"o-widget__search\">\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.components.searchData' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"search($event)\"\n />\n <pry-icon iconSvg=\"search\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </div>\n }\n\n <div class=\"o-chips-selector__items\">\n @if (((usedItems$ | async) ?? []).length > 0) {\n <div class=\"o-chips-selector__used-items\">\n <h4 class=\"a-h4\">{{ translationStringBase + 'selection' | i18n }}</h4>\n <ul class=\"o-chips-selector__list\">\n @for (item of usedItems$ | async; track item) {\n <li class=\"o-chips-selector__item\">\n <button class=\"a-chip -md o-chips-selector__chip\" (click)=\"toggleItemSelection(item)\" type=\"button\">\n <p>{{ getItemLabel(item) }}</p>\n <pry-icon [iconSvg]=\"'close'\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </button>\n </li>\n }\n </ul>\n </div>\n } @else {\n <span class=\"-no-items\">{{ translationStringBase + 'noItemSelected' | i18n }}</span>\n }\n\n <div class=\"o-chips-selector__unused-items\">\n <h4 class=\"a-h4\">{{ translationStringBase + 'select' | i18n }}</h4>\n <ul class=\"o-chips-selector__list\">\n @for (item of unusedItems$ | async; track item) {\n <li class=\"o-chips-selector__item\">\n <button class=\"a-chip a-chip--light -md o-chips-selector__chip\" (click)=\"toggleItemSelection(item)\">\n <span class=\"u-visually-hidden\">{{ translationStringBase + 'selectItem' | i18n }}</span>\n <p class=\"a-p\">{{ getItemLabel(item) }}</p>\n </button>\n </li>\n }\n </ul>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i2$2.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: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
7922
7936
  }
7923
7937
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ChipsSelectorComponent, decorators: [{
7924
7938
  type: Component,
@@ -8040,7 +8054,7 @@ class PryGroupShareComponent extends SubscriptionnerDirective {
8040
8054
  useExisting: forwardRef(() => PryGroupShareComponent),
8041
8055
  multi: true
8042
8056
  }
8043
- ], usesInheritance: true, ngImport: i0, template: "@if (templateData$ | async; as data) {\n <div class=\"m-form-radio-group\">\n <div *ngFor=\"let shareMode of shareModes\" class=\"m-form-radio-group__item\">\n <input\n type=\"radio\"\n name=\"visibility\"\n [id]=\"'radio_share_' + shareMode\"\n [value]=\"shareMode\"\n [ngModel]=\"radioValue\"\n (ngModelChange)=\"onRadioValueChange($event)\"\n [disabled]=\"data.disableRadios[shareMode]\"\n />\n <label [for]=\"'radio_share_' + shareMode\" class=\"a-label\" [class.a-label--disabled]=\"data.disableRadios[shareMode]\">\n {{ '@pry.share.radioLabel.' + shareMode | i18n }}\n </label>\n </div>\n </div>\n @if (radioValue === PryShareMode.GROUPS) {\n <pry-chips-selector\n bindLabel=\"name\"\n bindValue=\"name\"\n translationStringBase=\"@pry.components.chipsSelector.share.\"\n itemTranslationStringBase=\"@pry.components.chipsSelector.share.groups.\"\n [items]=\"data.groups\"\n (itemsChanged)=\"changeGroups($event, 'groupSelectionChange')\"\n [usedItems]=\"data.assignedGroups\"\n [showSearchbar]=\"data.groups.length > 6\"\n ></pry-chips-selector>\n }\n}\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$3.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$3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ChipsSelectorComponent, selector: "pry-chips-selector", inputs: ["bindValue", "bindLabel", "translationStringBase", "itemTranslationStringBase", "showActionButtons", "showSearchbar", "items", "usedItems"], outputs: ["itemsChanged"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8057
+ ], usesInheritance: true, ngImport: i0, template: "@if (templateData$ | async; as data) {\n <div class=\"m-form-radio-group\">\n @for (shareMode of shareModes; track shareMode) {\n <div class=\"m-form-radio-group__item\">\n <input\n type=\"radio\"\n name=\"visibility\"\n [id]=\"'radio_share_' + shareMode\"\n [value]=\"shareMode\"\n [ngModel]=\"radioValue\"\n (ngModelChange)=\"onRadioValueChange($event)\"\n [disabled]=\"data.disableRadios[shareMode]\"\n />\n <label [for]=\"'radio_share_' + shareMode\" class=\"a-label\" [class.a-label--disabled]=\"data.disableRadios[shareMode]\">\n {{ '@pry.share.radioLabel.' + shareMode | i18n }}\n </label>\n </div>\n }\n </div>\n @if (radioValue === PryShareMode.GROUPS) {\n <pry-chips-selector\n bindLabel=\"name\"\n bindValue=\"name\"\n translationStringBase=\"@pry.components.chipsSelector.share.\"\n itemTranslationStringBase=\"@pry.components.chipsSelector.share.groups.\"\n [items]=\"data.groups\"\n (itemsChanged)=\"changeGroups($event, 'groupSelectionChange')\"\n [usedItems]=\"data.assignedGroups\"\n [showSearchbar]=\"data.groups.length > 6\"\n ></pry-chips-selector>\n }\n}\n", dependencies: [{ kind: "directive", type: i2$2.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: i2$2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ChipsSelectorComponent, selector: "pry-chips-selector", inputs: ["bindValue", "bindLabel", "translationStringBase", "itemTranslationStringBase", "showActionButtons", "showSearchbar", "items", "usedItems"], outputs: ["itemsChanged"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8044
8058
  }
8045
8059
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryGroupShareComponent, decorators: [{
8046
8060
  type: Component,
@@ -8050,7 +8064,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
8050
8064
  useExisting: forwardRef(() => PryGroupShareComponent),
8051
8065
  multi: true
8052
8066
  }
8053
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (templateData$ | async; as data) {\n <div class=\"m-form-radio-group\">\n <div *ngFor=\"let shareMode of shareModes\" class=\"m-form-radio-group__item\">\n <input\n type=\"radio\"\n name=\"visibility\"\n [id]=\"'radio_share_' + shareMode\"\n [value]=\"shareMode\"\n [ngModel]=\"radioValue\"\n (ngModelChange)=\"onRadioValueChange($event)\"\n [disabled]=\"data.disableRadios[shareMode]\"\n />\n <label [for]=\"'radio_share_' + shareMode\" class=\"a-label\" [class.a-label--disabled]=\"data.disableRadios[shareMode]\">\n {{ '@pry.share.radioLabel.' + shareMode | i18n }}\n </label>\n </div>\n </div>\n @if (radioValue === PryShareMode.GROUPS) {\n <pry-chips-selector\n bindLabel=\"name\"\n bindValue=\"name\"\n translationStringBase=\"@pry.components.chipsSelector.share.\"\n itemTranslationStringBase=\"@pry.components.chipsSelector.share.groups.\"\n [items]=\"data.groups\"\n (itemsChanged)=\"changeGroups($event, 'groupSelectionChange')\"\n [usedItems]=\"data.assignedGroups\"\n [showSearchbar]=\"data.groups.length > 6\"\n ></pry-chips-selector>\n }\n}\n" }]
8067
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (templateData$ | async; as data) {\n <div class=\"m-form-radio-group\">\n @for (shareMode of shareModes; track shareMode) {\n <div class=\"m-form-radio-group__item\">\n <input\n type=\"radio\"\n name=\"visibility\"\n [id]=\"'radio_share_' + shareMode\"\n [value]=\"shareMode\"\n [ngModel]=\"radioValue\"\n (ngModelChange)=\"onRadioValueChange($event)\"\n [disabled]=\"data.disableRadios[shareMode]\"\n />\n <label [for]=\"'radio_share_' + shareMode\" class=\"a-label\" [class.a-label--disabled]=\"data.disableRadios[shareMode]\">\n {{ '@pry.share.radioLabel.' + shareMode | i18n }}\n </label>\n </div>\n }\n </div>\n @if (radioValue === PryShareMode.GROUPS) {\n <pry-chips-selector\n bindLabel=\"name\"\n bindValue=\"name\"\n translationStringBase=\"@pry.components.chipsSelector.share.\"\n itemTranslationStringBase=\"@pry.components.chipsSelector.share.groups.\"\n [items]=\"data.groups\"\n (itemsChanged)=\"changeGroups($event, 'groupSelectionChange')\"\n [usedItems]=\"data.assignedGroups\"\n [showSearchbar]=\"data.groups.length > 6\"\n ></pry-chips-selector>\n }\n}\n" }]
8054
8068
  }], ctorParameters: () => [{ type: i1.Store }, { type: i0.ChangeDetectorRef }], propDecorators: { disableRadios: [{
8055
8069
  type: Input
8056
8070
  }], allowedGroups: [{
@@ -8193,7 +8207,7 @@ class PryShareComponent {
8193
8207
  useExisting: forwardRef(() => PryShareComponent),
8194
8208
  multi: true
8195
8209
  }
8196
- ], ngImport: i0, template: "<div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"share_type\">{{ '@pry.share.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"onChange($event)\"\n [items]=\"visibilityTypes\"\n [ngModel]=\"stringValue\"\n [disabled]=\"_disabled\"\n i18nPrefix=\"@pry.share.radioLabel.\"\n bindValue=\"name\"\n bindLabel=\"name\"\n bindIcon=\"icon\"\n id=\"share_type\"\n [iconSize]=\"[21, 18]\"\n ></pry-select>\n</div>\n", dependencies: [{ kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked", "pressedEnter"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8210
+ ], ngImport: i0, template: "<div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"share_type\">{{ '@pry.share.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"onChange($event)\"\n [items]=\"visibilityTypes\"\n [ngModel]=\"stringValue\"\n [disabled]=\"_disabled\"\n i18nPrefix=\"@pry.share.radioLabel.\"\n bindValue=\"name\"\n bindLabel=\"name\"\n bindIcon=\"icon\"\n id=\"share_type\"\n [iconSize]=\"[21, 18]\"\n ></pry-select>\n</div>\n", dependencies: [{ kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked", "pressedEnter"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8197
8211
  }
8198
8212
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryShareComponent, decorators: [{
8199
8213
  type: Component,
@@ -8320,7 +8334,7 @@ class PryAccessRightsShareComponent extends SubscriptionnerDirective {
8320
8334
  useExisting: forwardRef(() => PryAccessRightsShareComponent),
8321
8335
  multi: true
8322
8336
  }
8323
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"o-access-rights-share\">\n <label for=\"share-group-select\" class=\"a-h4\">{{ '@pry.share.dashboardAccess' | i18n }}</label>\n <form class=\"u-display-flex\">\n <fieldset class=\"m-grouped-select u-display-flex\" name=\"add-access-rights\">\n <legend class=\"u-visually-hidden\">{{ '@pry.share.shareAccessRights' | i18n }}</legend>\n <pry-select\n id=\"share-group-select\"\n class=\"o-access-rights-share__group-select\"\n name=\"share-group-select\"\n [(ngModel)]=\"selectedGroups\"\n (ngModelChange)=\"filterAvailableAccessRights()\"\n [items]=\"groups$ | async\"\n bindLabel=\"label\"\n placeholder=\"{{ ((groups$ | async)?.length === 0 ? '@pry.share.noGroups' : '@pry.share.placeholder') | i18n }}\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n ></pry-select>\n <pry-select\n id=\"share-access-rights-select\"\n class=\"o-access-rights-share__access-rights-select\"\n name=\"share-access-rights-select\"\n [(ngModel)]=\"selectedAccessRight\"\n [items]=\"accessRights\"\n bindValue=\"value\"\n bindLabel=\"label\"\n ></pry-select>\n </fieldset>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"addAccess()\" [disabled]=\"isAddingDisabled()\">\n {{ '@pry.action.add' | i18n }}\n </button>\n </form>\n <label for=\"share-access-rights-select\" class=\"a-label\">{{ '@pry.share.accessDescription' | i18n }}</label>\n <div class=\"o-access-rights-share__groups\">\n @if (manifestDescription?.owner) {\n <div class=\"o-access-rights-share__group u-display-flex -justify-space-between -align-center\">\n <span class=\"o-access-rights-share__group-name a-h4\">{{ '@pry.share.me' | i18n }}</span>\n <span class=\"o-access-rights-share__owner\">{{ '@pry.share.owner' | i18n }}</span>\n </div>\n }\n @for (group of value | keyvalue; track group.key) {\n <div class=\"o-access-rights-share__group u-display-flex -justify-space-between -align-center\">\n <label class=\"o-access-rights-share__group-name a-h4\" for=\"modify-{{ group.key }}-access-rights-select\">\n {{ getGroupLabelByName(group.key, i18n) }}\n {{\n (userBelongsToGroup(group.key) | async) && group.key !== PUBLIC_GROUP\n ? ' (' + ('@pry.share.me' | i18n) + ')'\n : ''\n }}\n </label>\n <div class=\"u-display-flex -align-center\">\n @if (group.key === PUBLIC_GROUP || group.key === AUTHENTICATED_USERS_GROUP) {\n <span class=\"o-access-rights-share__access-rights\">{{ '@pry.share.read' | i18n }}</span>\n } @else {\n <pry-select\n id=\"modify-{{ group.key }}-access-rights-select\"\n class=\"o-access-rights-share__modify-access-rights\"\n name=\"modify-group-access-rights-select\"\n [(ngModel)]=\"group.value\"\n (ngModelChange)=\"modifyGroupAccess(group.key, group.value)\"\n [items]=\"accessRights\"\n bindValue=\"value\"\n bindLabel=\"label\"\n ></pry-select>\n }\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only a-tooltip\"\n [attr.data-tooltip]=\"'@pry.action.delete' | i18n\"\n (click)=\"removeGroupAccess(group.key)\"\n (keydown.enter)=\"removeGroupAccess(group.key)\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"15\" [width]=\"15\"></pry-icon>\n </button>\n </div>\n </div>\n }\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3$3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked", "pressedEnter"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8337
+ ], usesInheritance: true, ngImport: i0, template: "<div class=\"o-access-rights-share\">\n <label for=\"share-group-select\" class=\"a-h4\">{{ '@pry.share.dashboardAccess' | i18n }}</label>\n <form class=\"u-display-flex\">\n <fieldset class=\"m-grouped-select u-display-flex\" name=\"add-access-rights\">\n <legend class=\"u-visually-hidden\">{{ '@pry.share.shareAccessRights' | i18n }}</legend>\n <pry-select\n id=\"share-group-select\"\n class=\"o-access-rights-share__group-select\"\n name=\"share-group-select\"\n [(ngModel)]=\"selectedGroups\"\n (ngModelChange)=\"filterAvailableAccessRights()\"\n [items]=\"groups$ | async\"\n bindLabel=\"label\"\n placeholder=\"{{ ((groups$ | async)?.length === 0 ? '@pry.share.noGroups' : '@pry.share.placeholder') | i18n }}\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n ></pry-select>\n <pry-select\n id=\"share-access-rights-select\"\n class=\"o-access-rights-share__access-rights-select\"\n name=\"share-access-rights-select\"\n [(ngModel)]=\"selectedAccessRight\"\n [items]=\"accessRights\"\n bindValue=\"value\"\n bindLabel=\"label\"\n ></pry-select>\n </fieldset>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"addAccess()\" [disabled]=\"isAddingDisabled()\">\n {{ '@pry.action.add' | i18n }}\n </button>\n </form>\n <label for=\"share-access-rights-select\" class=\"a-label\">{{ '@pry.share.accessDescription' | i18n }}</label>\n <div class=\"o-access-rights-share__groups\">\n @if (manifestDescription?.owner) {\n <div class=\"o-access-rights-share__group u-display-flex -justify-space-between -align-center\">\n <span class=\"o-access-rights-share__group-name a-h4\">{{ '@pry.share.me' | i18n }}</span>\n <span class=\"o-access-rights-share__owner\">{{ '@pry.share.owner' | i18n }}</span>\n </div>\n }\n @for (group of value | keyvalue; track group.key) {\n <div class=\"o-access-rights-share__group u-display-flex -justify-space-between -align-center\">\n <label class=\"o-access-rights-share__group-name a-h4\" for=\"modify-{{ group.key }}-access-rights-select\">\n {{ getGroupLabelByName(group.key, i18n) }}\n {{\n (userBelongsToGroup(group.key) | async) && group.key !== PUBLIC_GROUP\n ? ' (' + ('@pry.share.me' | i18n) + ')'\n : ''\n }}\n </label>\n <div class=\"u-display-flex -align-center\">\n @if (group.key === PUBLIC_GROUP || group.key === AUTHENTICATED_USERS_GROUP) {\n <span class=\"o-access-rights-share__access-rights\">{{ '@pry.share.read' | i18n }}</span>\n } @else {\n <pry-select\n id=\"modify-{{ group.key }}-access-rights-select\"\n class=\"o-access-rights-share__modify-access-rights\"\n name=\"modify-group-access-rights-select\"\n [(ngModel)]=\"group.value\"\n (ngModelChange)=\"modifyGroupAccess(group.key, group.value)\"\n [items]=\"accessRights\"\n bindValue=\"value\"\n bindLabel=\"label\"\n ></pry-select>\n }\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only a-tooltip\"\n [attr.data-tooltip]=\"'@pry.action.delete' | i18n\"\n (click)=\"removeGroupAccess(group.key)\"\n (keydown.enter)=\"removeGroupAccess(group.key)\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"15\" [width]=\"15\"></pry-icon>\n </button>\n </div>\n </div>\n }\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked", "pressedEnter"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8324
8338
  }
8325
8339
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryAccessRightsShareComponent, decorators: [{
8326
8340
  type: Component,
@@ -8402,7 +8416,7 @@ class PryAccessRightsShareModalComponent {
8402
8416
  this.submit.nativeElement.focus();
8403
8417
  }
8404
8418
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryAccessRightsShareModalComponent, deps: [{ token: i1.Store }, { token: PryDialogRef }, { token: PRY_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
8405
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryAccessRightsShareModalComponent, selector: "pry-access-rights-share-modal", viewQueries: [{ propertyName: "confirm", first: true, predicate: ["confirm"], descendants: true }, { propertyName: "submit", first: true, predicate: ["submit"], descendants: true }, { propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "crossVisibility", first: true, predicate: ["crossVisibility"], descendants: true }], ngImport: i0, template: "<div class=\"o-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"dialog share access rights\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">{{ '@pry.toolbox.shareAccessRights' | i18n }}</h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n (click)=\"toggleModal()\"\n #crossVisibility\n (keydown.shift.tab)=\"focusValidation()\"\n >\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-access-rights-share\n [(ngModel)]=\"accessRightsByGroup\"\n (ngModelChange)=\"updateAccessRights($event)\"\n [manifestDescription]=\"manifest\"\n [allowedGroups]=\"allowedShareGroups$ | async\"\n ></pry-access-rights-share>\n <div class=\"u-display-flex m-btn-group -justify-center\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"toggleModal()\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n #submit\n (keydown.tab)=\"focusCrossElement()\"\n (click)=\"validate()\"\n [disabled]=\"this.disableShareButton$ | async\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryAccessRightsShareComponent, selector: "pry-access-rights-share", inputs: ["manifestDescription", "allowedGroups"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
8419
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryAccessRightsShareModalComponent, selector: "pry-access-rights-share-modal", viewQueries: [{ propertyName: "confirm", first: true, predicate: ["confirm"], descendants: true }, { propertyName: "submit", first: true, predicate: ["submit"], descendants: true }, { propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "crossVisibility", first: true, predicate: ["crossVisibility"], descendants: true }], ngImport: i0, template: "<div class=\"o-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"dialog share access rights\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">{{ '@pry.toolbox.shareAccessRights' | i18n }}</h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n (click)=\"toggleModal()\"\n #crossVisibility\n (keydown.shift.tab)=\"focusValidation()\"\n >\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-access-rights-share\n [(ngModel)]=\"accessRightsByGroup\"\n (ngModelChange)=\"updateAccessRights($event)\"\n [manifestDescription]=\"manifest\"\n [allowedGroups]=\"allowedShareGroups$ | async\"\n ></pry-access-rights-share>\n <div class=\"u-display-flex m-btn-group -justify-center\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"toggleModal()\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n class=\"a-btn a-btn--primary\"\n #submit\n (keydown.tab)=\"focusCrossElement()\"\n (click)=\"validate()\"\n [disabled]=\"this.disableShareButton$ | async\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryAccessRightsShareComponent, selector: "pry-access-rights-share", inputs: ["manifestDescription", "allowedGroups"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
8406
8420
  }
8407
8421
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryAccessRightsShareModalComponent, decorators: [{
8408
8422
  type: Component,
@@ -8670,7 +8684,7 @@ const arrayOf = (item, num) => {
8670
8684
  return [...new Array(num)].map(() => item);
8671
8685
  };
8672
8686
  const createPlacedWidgetCopy = (widget, position) => {
8673
- const tmp = JSON.parse(JSON.stringify(widget));
8687
+ const tmp = structuredClone(widget);
8674
8688
  if (!tmp.layout) {
8675
8689
  tmp.layout = {};
8676
8690
  }
@@ -9189,13 +9203,13 @@ class PryObjectEditionComponent extends SubscriptionnerDirective {
9189
9203
  toggleInversion() {
9190
9204
  this.inversion = !this.inversion;
9191
9205
  }
9192
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryObjectEditionComponent, deps: [{ token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
9193
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryObjectEditionComponent, selector: "pry-object-creation", inputs: { link: "link", object: "object", menu: "menu" }, outputs: { closed: "closed" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<button type=\"button\" class=\"a-btn -link-like\" (click)=\"openCreateObjectPanel($event)\" *ngIf=\"menu\">\n {{ '@pry.context.createObject.title.' + (link && object ? 'linkedObject' : link ? 'link' : 'object') | i18n }}\n</button>\n<button\n id=\"object_creator_link\"\n type=\"button\"\n (click)=\"openCreateObjectPanel($event)\"\n *ngIf=\"!menu\"\n class=\"a-btn a-btn--secondary -circle u-floating u-floating--bottom-right\"\n [title]=\"'@pry.context.createObject.title.object' | i18n\"\n>\n <span class=\"u-visually-hidden\">{{ '@pry.context.createObject.title.object' | i18n }}</span>\n <pry-icon iconSvg=\"add_column\" [width]=\"24\" [height]=\"24\" aria-hidden=\"true\"></pry-icon>\n</button>\n\n<ng-template #template>\n <div class=\"o-settings__popup\">\n <div class=\"o-settings__popup__content\">\n <ng-container *ngIf=\"link\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"createobject_link\">{{ '@pry.context.createObject.title.link' | i18n }}</label>\n <pry-select\n [(ngModel)]=\"relation.typeId\"\n [items]=\"relations$ | async\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"createobject_link\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"createobject_inversion\">{{\n '@pry.context.createObject.title.inversion' | i18n\n }}</label>\n <pry-checkbox\n id=\"createobject_inversion\"\n [ngModel]=\"inversion\"\n (ngModelChange)=\"toggleInversion()\"\n ></pry-checkbox>\n </div>\n </ng-container>\n\n <div class=\"o-object-panel\" *ngIf=\"object\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"createobject_class\">{{ '@pry.context.createObject.class' | i18n }}</label>\n <pry-select\n [ngModel]=\"tmpObject.oClass\"\n (ngModelChange)=\"changeClass($event)\"\n [items]=\"classes\"\n bindValue=\"id\"\n bindLabel=\"name\"\n id=\"createobject_class\"\n ></pry-select>\n </div>\n\n <ng-container *ngFor=\"let attribute of attributes\" [class.multi-value]=\"attribute.multiValued\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\">{{ attribute.name }}</label>\n <ng-container *ngIf=\"!attribute.multiValued\">\n <ng-container [ngSwitch]=\"fieldType(attribute)\">\n <ng-container *ngSwitchCase=\"FieldType.INSTANT\">\n <div class=\"a-date-input\" tabindex=\"-1\" (blur)=\"closeDatePicker($event)\">\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n />\n <div class=\"a-open-date-picker\" (mousedown)=\"toggleDatePicker($event, attribute.id)\"></div>\n <div class=\"date-picker-container\" *ngIf=\"selectedDatePicker === attribute.id\">\n <pry-date-picker\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n [roundSelection]=\"true\"\n [timePicker]=\"true\"\n ></pry-date-picker>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.DECIMAL\">\n <input\n type=\"number\"\n step=\"any\"\n class=\"a-form-field\"\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n />\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.INTEGER\">\n <input\n type=\"number\"\n class=\"a-form-field\"\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n />\n </ng-container>\n <ng-container *ngSwitchDefault>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n />\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.RAW\">\n <pry-select\n [ngModel]=\"method\"\n (ngModelChange)=\"setRawMethod(attribute, $event)\"\n [items]=\"rawMethods\"\n bindValue=\"id\"\n bindLabel=\"name\"\n ></pry-select>\n <input\n type=\"text\"\n class=\"a-form-field\"\n *ngIf=\"method === HTTP_ORIGIN_METHOD\"\n [ngModel]=\"valueMetadata(attribute, HTTP_ORIGIN_METADATA)\"\n (ngModelChange)=\"assignMetadata(attribute, $event, HTTP_ORIGIN_METADATA)\"\n />\n <ng-container *ngIf=\"method === UPLOAD_METHOD\">\n <pry-upload\n mode=\"doc\"\n accept=\"image/*,video/*\"\n (uploaded)=\"assignValue(attribute, $event)\"\n ></pry-upload>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"multi-value-container\" *ngIf=\"attribute.multiValued\">\n <button\n class=\"button-add a-btn a-btn--secondary a-btn--icon-text -size-sm\"\n (click)=\"addMultiValued(attribute)\"\n >\n <pry-icon iconSvg=\"add\"></pry-icon>\n <span>{{ '@pry.context.createObject.addMultiField' | i18n : { name: attribute.name } }}</span>\n </button>\n <div class=\"multi-value\" *ngFor=\"let multiValue of multiValues(attribute); let i = index\">\n <ng-container [ngSwitch]=\"fieldType(attribute)\">\n <ng-container *ngSwitchCase=\"FieldType.INSTANT\">\n <input\n type=\"datetime-local\"\n [ngModel]=\"valueMulti(attribute, i)\"\n (focusout)=\"assignValueMulti(attribute, $event, i)\"\n />\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.DECIMAL\">\n <input\n type=\"number\"\n step=\"any\"\n [ngModel]=\"valueMulti(attribute, i)\"\n (ngModelChange)=\"assignValueMulti(attribute, $event, i)\"\n />\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.INTEGER\">\n <input\n type=\"number\"\n [ngModel]=\"valueMulti(attribute, i)\"\n (ngModelChange)=\"assignValueMulti(attribute, $event, i)\"\n />\n </ng-container>\n <ng-container *ngSwitchDefault>\n <input\n type=\"text\"\n [ngModel]=\"valueMulti(attribute, i)\"\n (ngModelChange)=\"assignValueMulti(attribute, $event, i)\"\n />\n </ng-container>\n <button (click)=\"removeMultiValued(attribute, i)\">\n <pry-icon iconSvg=\"delete\"></pry-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"hide()\">\n {{ '@pry.context.cancel' | i18n }}\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"createObjects()\" [disabled]=\"!valid\">\n {{ '@pry.context.create' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3$3.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$3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked", "pressedEnter"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryUploadComponent, selector: "pry-upload", inputs: ["mode", "accept", "labelTranslate"], outputs: ["uploaded", "uploadedFile"] }, { kind: "component", type: i7.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { kind: "component", type: PryDatePickerComponent, selector: "pry-date-picker", inputs: ["rangePicker", "timePicker", "maxYear", "minYear", "roundSelection"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
9206
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryObjectEditionComponent, deps: [{ token: i2$1.Overlay }, { token: i0.ViewContainerRef }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
9207
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryObjectEditionComponent, selector: "pry-object-creation", inputs: { link: "link", object: "object", menu: "menu" }, outputs: { closed: "closed" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<button type=\"button\" class=\"a-btn -link-like\" (click)=\"openCreateObjectPanel($event)\" *ngIf=\"menu\">\n {{ '@pry.context.createObject.title.' + (link && object ? 'linkedObject' : link ? 'link' : 'object') | i18n }}\n</button>\n<button\n id=\"object_creator_link\"\n type=\"button\"\n (click)=\"openCreateObjectPanel($event)\"\n *ngIf=\"!menu\"\n class=\"a-btn a-btn--secondary -circle u-floating u-floating--bottom-right\"\n [title]=\"'@pry.context.createObject.title.object' | i18n\"\n>\n <span class=\"u-visually-hidden\">{{ '@pry.context.createObject.title.object' | i18n }}</span>\n <pry-icon iconSvg=\"add_column\" [width]=\"24\" [height]=\"24\" aria-hidden=\"true\"></pry-icon>\n</button>\n\n<ng-template #template>\n <div class=\"o-settings__popup\">\n <div class=\"o-settings__popup__content\">\n <ng-container *ngIf=\"link\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"createobject_link\">{{ '@pry.context.createObject.title.link' | i18n }}</label>\n <pry-select\n [(ngModel)]=\"relation.typeId\"\n [items]=\"relations$ | async\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"createobject_link\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"createobject_inversion\">{{\n '@pry.context.createObject.title.inversion' | i18n\n }}</label>\n <pry-checkbox\n id=\"createobject_inversion\"\n [ngModel]=\"inversion\"\n (ngModelChange)=\"toggleInversion()\"\n ></pry-checkbox>\n </div>\n </ng-container>\n\n <div class=\"o-object-panel\" *ngIf=\"object\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"createobject_class\">{{ '@pry.context.createObject.class' | i18n }}</label>\n <pry-select\n [ngModel]=\"tmpObject.oClass\"\n (ngModelChange)=\"changeClass($event)\"\n [items]=\"classes\"\n bindValue=\"id\"\n bindLabel=\"name\"\n id=\"createobject_class\"\n ></pry-select>\n </div>\n\n <ng-container *ngFor=\"let attribute of attributes\" [class.multi-value]=\"attribute.multiValued\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\">{{ attribute.name }}</label>\n <ng-container *ngIf=\"!attribute.multiValued\">\n <ng-container [ngSwitch]=\"fieldType(attribute)\">\n <ng-container *ngSwitchCase=\"FieldType.INSTANT\">\n <div class=\"a-date-input\" tabindex=\"-1\" (blur)=\"closeDatePicker($event)\">\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n />\n <div class=\"a-open-date-picker\" (mousedown)=\"toggleDatePicker($event, attribute.id)\"></div>\n <div class=\"date-picker-container\" *ngIf=\"selectedDatePicker === attribute.id\">\n <pry-date-picker\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n [roundSelection]=\"true\"\n [timePicker]=\"true\"\n ></pry-date-picker>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.DECIMAL\">\n <input\n type=\"number\"\n step=\"any\"\n class=\"a-form-field\"\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n />\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.INTEGER\">\n <input\n type=\"number\"\n class=\"a-form-field\"\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n />\n </ng-container>\n <ng-container *ngSwitchDefault>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n />\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.RAW\">\n <pry-select\n [ngModel]=\"method\"\n (ngModelChange)=\"setRawMethod(attribute, $event)\"\n [items]=\"rawMethods\"\n bindValue=\"id\"\n bindLabel=\"name\"\n ></pry-select>\n <input\n type=\"text\"\n class=\"a-form-field\"\n *ngIf=\"method === HTTP_ORIGIN_METHOD\"\n [ngModel]=\"valueMetadata(attribute, HTTP_ORIGIN_METADATA)\"\n (ngModelChange)=\"assignMetadata(attribute, $event, HTTP_ORIGIN_METADATA)\"\n />\n <ng-container *ngIf=\"method === UPLOAD_METHOD\">\n <pry-upload\n mode=\"doc\"\n accept=\"image/*,video/*\"\n (uploaded)=\"assignValue(attribute, $event)\"\n ></pry-upload>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"multi-value-container\" *ngIf=\"attribute.multiValued\">\n <button\n class=\"button-add a-btn a-btn--secondary a-btn--icon-text -size-sm\"\n (click)=\"addMultiValued(attribute)\"\n >\n <pry-icon iconSvg=\"add\"></pry-icon>\n <span>{{ '@pry.context.createObject.addMultiField' | i18n : { name: attribute.name } }}</span>\n </button>\n <div class=\"multi-value\" *ngFor=\"let multiValue of multiValues(attribute); let i = index\">\n <ng-container [ngSwitch]=\"fieldType(attribute)\">\n <ng-container *ngSwitchCase=\"FieldType.INSTANT\">\n <input\n type=\"datetime-local\"\n [ngModel]=\"valueMulti(attribute, i)\"\n (focusout)=\"assignValueMulti(attribute, $event, i)\"\n />\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.DECIMAL\">\n <input\n type=\"number\"\n step=\"any\"\n [ngModel]=\"valueMulti(attribute, i)\"\n (ngModelChange)=\"assignValueMulti(attribute, $event, i)\"\n />\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.INTEGER\">\n <input\n type=\"number\"\n [ngModel]=\"valueMulti(attribute, i)\"\n (ngModelChange)=\"assignValueMulti(attribute, $event, i)\"\n />\n </ng-container>\n <ng-container *ngSwitchDefault>\n <input\n type=\"text\"\n [ngModel]=\"valueMulti(attribute, i)\"\n (ngModelChange)=\"assignValueMulti(attribute, $event, i)\"\n />\n </ng-container>\n <button (click)=\"removeMultiValued(attribute, i)\">\n <pry-icon iconSvg=\"delete\"></pry-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"hide()\">\n {{ '@pry.context.cancel' | i18n }}\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"createObjects()\" [disabled]=\"!valid\">\n {{ '@pry.context.create' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i2$2.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: i2$2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked", "pressedEnter"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryUploadComponent, selector: "pry-upload", inputs: ["mode", "accept", "labelTranslate"], outputs: ["uploaded", "uploadedFile"] }, { kind: "component", type: i7.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { kind: "component", type: PryDatePickerComponent, selector: "pry-date-picker", inputs: ["rangePicker", "timePicker", "maxYear", "minYear", "roundSelection"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
9194
9208
  }
9195
9209
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryObjectEditionComponent, decorators: [{
9196
9210
  type: Component,
9197
9211
  args: [{ selector: 'pry-object-creation', template: "<button type=\"button\" class=\"a-btn -link-like\" (click)=\"openCreateObjectPanel($event)\" *ngIf=\"menu\">\n {{ '@pry.context.createObject.title.' + (link && object ? 'linkedObject' : link ? 'link' : 'object') | i18n }}\n</button>\n<button\n id=\"object_creator_link\"\n type=\"button\"\n (click)=\"openCreateObjectPanel($event)\"\n *ngIf=\"!menu\"\n class=\"a-btn a-btn--secondary -circle u-floating u-floating--bottom-right\"\n [title]=\"'@pry.context.createObject.title.object' | i18n\"\n>\n <span class=\"u-visually-hidden\">{{ '@pry.context.createObject.title.object' | i18n }}</span>\n <pry-icon iconSvg=\"add_column\" [width]=\"24\" [height]=\"24\" aria-hidden=\"true\"></pry-icon>\n</button>\n\n<ng-template #template>\n <div class=\"o-settings__popup\">\n <div class=\"o-settings__popup__content\">\n <ng-container *ngIf=\"link\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"createobject_link\">{{ '@pry.context.createObject.title.link' | i18n }}</label>\n <pry-select\n [(ngModel)]=\"relation.typeId\"\n [items]=\"relations$ | async\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"createobject_link\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"createobject_inversion\">{{\n '@pry.context.createObject.title.inversion' | i18n\n }}</label>\n <pry-checkbox\n id=\"createobject_inversion\"\n [ngModel]=\"inversion\"\n (ngModelChange)=\"toggleInversion()\"\n ></pry-checkbox>\n </div>\n </ng-container>\n\n <div class=\"o-object-panel\" *ngIf=\"object\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"createobject_class\">{{ '@pry.context.createObject.class' | i18n }}</label>\n <pry-select\n [ngModel]=\"tmpObject.oClass\"\n (ngModelChange)=\"changeClass($event)\"\n [items]=\"classes\"\n bindValue=\"id\"\n bindLabel=\"name\"\n id=\"createobject_class\"\n ></pry-select>\n </div>\n\n <ng-container *ngFor=\"let attribute of attributes\" [class.multi-value]=\"attribute.multiValued\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\">{{ attribute.name }}</label>\n <ng-container *ngIf=\"!attribute.multiValued\">\n <ng-container [ngSwitch]=\"fieldType(attribute)\">\n <ng-container *ngSwitchCase=\"FieldType.INSTANT\">\n <div class=\"a-date-input\" tabindex=\"-1\" (blur)=\"closeDatePicker($event)\">\n <input\n type=\"datetime-local\"\n class=\"a-form-field\"\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n />\n <div class=\"a-open-date-picker\" (mousedown)=\"toggleDatePicker($event, attribute.id)\"></div>\n <div class=\"date-picker-container\" *ngIf=\"selectedDatePicker === attribute.id\">\n <pry-date-picker\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n [roundSelection]=\"true\"\n [timePicker]=\"true\"\n ></pry-date-picker>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.DECIMAL\">\n <input\n type=\"number\"\n step=\"any\"\n class=\"a-form-field\"\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n />\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.INTEGER\">\n <input\n type=\"number\"\n class=\"a-form-field\"\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n />\n </ng-container>\n <ng-container *ngSwitchDefault>\n <input\n type=\"text\"\n class=\"a-form-field\"\n [ngModel]=\"value(attribute)\"\n (ngModelChange)=\"assignValue(attribute, $event)\"\n />\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.RAW\">\n <pry-select\n [ngModel]=\"method\"\n (ngModelChange)=\"setRawMethod(attribute, $event)\"\n [items]=\"rawMethods\"\n bindValue=\"id\"\n bindLabel=\"name\"\n ></pry-select>\n <input\n type=\"text\"\n class=\"a-form-field\"\n *ngIf=\"method === HTTP_ORIGIN_METHOD\"\n [ngModel]=\"valueMetadata(attribute, HTTP_ORIGIN_METADATA)\"\n (ngModelChange)=\"assignMetadata(attribute, $event, HTTP_ORIGIN_METADATA)\"\n />\n <ng-container *ngIf=\"method === UPLOAD_METHOD\">\n <pry-upload\n mode=\"doc\"\n accept=\"image/*,video/*\"\n (uploaded)=\"assignValue(attribute, $event)\"\n ></pry-upload>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"multi-value-container\" *ngIf=\"attribute.multiValued\">\n <button\n class=\"button-add a-btn a-btn--secondary a-btn--icon-text -size-sm\"\n (click)=\"addMultiValued(attribute)\"\n >\n <pry-icon iconSvg=\"add\"></pry-icon>\n <span>{{ '@pry.context.createObject.addMultiField' | i18n : { name: attribute.name } }}</span>\n </button>\n <div class=\"multi-value\" *ngFor=\"let multiValue of multiValues(attribute); let i = index\">\n <ng-container [ngSwitch]=\"fieldType(attribute)\">\n <ng-container *ngSwitchCase=\"FieldType.INSTANT\">\n <input\n type=\"datetime-local\"\n [ngModel]=\"valueMulti(attribute, i)\"\n (focusout)=\"assignValueMulti(attribute, $event, i)\"\n />\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.DECIMAL\">\n <input\n type=\"number\"\n step=\"any\"\n [ngModel]=\"valueMulti(attribute, i)\"\n (ngModelChange)=\"assignValueMulti(attribute, $event, i)\"\n />\n </ng-container>\n <ng-container *ngSwitchCase=\"FieldType.INTEGER\">\n <input\n type=\"number\"\n [ngModel]=\"valueMulti(attribute, i)\"\n (ngModelChange)=\"assignValueMulti(attribute, $event, i)\"\n />\n </ng-container>\n <ng-container *ngSwitchDefault>\n <input\n type=\"text\"\n [ngModel]=\"valueMulti(attribute, i)\"\n (ngModelChange)=\"assignValueMulti(attribute, $event, i)\"\n />\n </ng-container>\n <button (click)=\"removeMultiValued(attribute, i)\">\n <pry-icon iconSvg=\"delete\"></pry-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--secondary\" (click)=\"hide()\">\n {{ '@pry.context.cancel' | i18n }}\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"createObjects()\" [disabled]=\"!valid\">\n {{ '@pry.context.create' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n" }]
9198
- }], ctorParameters: () => [{ type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i1.Store }], propDecorators: { link: [{
9212
+ }], ctorParameters: () => [{ type: i2$1.Overlay }, { type: i0.ViewContainerRef }, { type: i1.Store }], propDecorators: { link: [{
9199
9213
  type: Input
9200
9214
  }], object: [{
9201
9215
  type: Input
@@ -9306,13 +9320,13 @@ class ContextMenuComponent extends SubscriptionnerDirective {
9306
9320
  this.overlayDetailRef?.dispose();
9307
9321
  this.store.dispatch(ConfigActions.closeOverlay({ id: this.constructor.name + '-detail' }));
9308
9322
  }
9309
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ContextMenuComponent, deps: [{ token: i1.Store }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: WidgetFactoryService }], target: i0.ɵɵFactoryTarget.Component }); }
9310
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ContextMenuComponent, selector: "pry-context-menu", viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }, { propertyName: "detailTemplate", first: true, predicate: ["detailTemplate"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <ul class=\"m-context-menu__list\">\n <ng-container *ngIf=\"!!itemId\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionAddOrRemove()\">\n {{ ((isSelected$ | async) ? '@pry.context.remove' : '@pry.context.add') | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionInvert()\">\n {{ '@pry.context.invert' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" *ngIf=\"!!resultSet\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"proximity()\" *ngIf=\"!!resultSet\">\n {{ '@pry.context.proximity' | i18n }}\n </button>\n </li>\n <ng-container *ngIf=\"isModuleLoaded['graph']\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"explore()\">\n {{ '@pry.context.explore' | i18n }}\n </button>\n </li>\n </ng-container>\n <ng-container *ngIf=\"isModuleLoaded['detail']\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"detail()\">\n {{ '@pry.context.detail' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"flyingDetail()\">\n {{ '@pry.context.flyingDetail' | i18n }}\n </button>\n </li>\n </ng-container>\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n <li class=\"m-context-menu__list__item\">\n <pry-object-creation\n (closed)=\"hide()\"\n [link]=\"true\"\n [object]=\"false\"\n [menu]=\"true\"\n *ngIf=\"(selectedItemsIds?.length ?? 0) > 0\"\n ></pry-object-creation>\n <ng-container *ngIf=\"allowObjectCreation$ | async\">\n <pry-object-creation (closed)=\"hide()\" [link]=\"true\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n </ng-container>\n </li>\n </ng-container>\n </ng-container>\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n <li *ngIf=\"allowObjectCreation$| async\" class=\"m-context-menu__list__item\">\n <pry-object-creation (closed)=\"hide()\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n<ng-template #detailTemplate>\n <div class=\"o-settings__popup__header\">\n <h2 class=\"a-h2\">{{ '@pry.context.flyingDetail' | i18n }}</h2>\n <button type=\"button\" (click)=\"hideDetail()\" class=\"a-btn a-btn--icon-only -close\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.close' | i18n }}</span>\n </button>\n </div>\n <div class=\"o-settings__popup__content\">\n <pry-widget-instanciator [staticManifest]=\"detailManifest\"></pry-widget-instanciator>\n </div>\n <div class=\"o-settings__popup__footer\">\n <button (click)=\"hideDetail()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.action.close' | i18n }}\n </button>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: WidgetInstanciatorComponent, selector: "pry-widget-instanciator", inputs: ["widgetIndex", "staticManifest", "standalone", "open$"], outputs: ["manifestModified"] }, { kind: "component", type: PryObjectEditionComponent, selector: "pry-object-creation", inputs: ["link", "object", "menu"], outputs: ["closed"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
9323
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ContextMenuComponent, deps: [{ token: i1.Store }, { token: i2$1.Overlay }, { token: i0.ViewContainerRef }, { token: WidgetFactoryService }], target: i0.ɵɵFactoryTarget.Component }); }
9324
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ContextMenuComponent, selector: "pry-context-menu", viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }, { propertyName: "detailTemplate", first: true, predicate: ["detailTemplate"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <ul class=\"m-context-menu__list\">\n @if (!!itemId) {\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionAddOrRemove()\">\n {{ ((isSelected$ | async) ? '@pry.context.remove' : '@pry.context.add') | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionInvert()\">\n {{ '@pry.context.invert' | i18n }}\n </button>\n </li>\n @if (!!resultSet) {\n <li class=\"m-context-menu__list__item\">\n @if (!!resultSet) {\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"proximity()\">\n {{ '@pry.context.proximity' | i18n }}\n </button>\n }\n </li>\n }\n @if (isModuleLoaded['graph']) {\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"explore()\">\n {{ '@pry.context.explore' | i18n }}\n </button>\n </li>\n }\n @if (isModuleLoaded['detail']) {\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"detail()\">\n {{ '@pry.context.detail' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"flyingDetail()\">\n {{ '@pry.context.flyingDetail' | i18n }}\n </button>\n </li>\n }\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n <li class=\"m-context-menu__list__item\">\n @if ((selectedItemsIds?.length ?? 0) > 0) {\n <pry-object-creation\n (closed)=\"hide()\"\n [link]=\"true\"\n [object]=\"false\"\n [menu]=\"true\"\n ></pry-object-creation>\n }\n @if (allowObjectCreation$ | async) {\n <pry-object-creation (closed)=\"hide()\" [link]=\"true\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n }\n </li>\n </ng-container>\n }\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n @if (allowObjectCreation$| async) {\n <li class=\"m-context-menu__list__item\">\n <pry-object-creation (closed)=\"hide()\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n </li>\n }\n </ng-container>\n </ul>\n</ng-template>\n<ng-template #detailTemplate>\n <div class=\"o-settings__popup__header\">\n <h2 class=\"a-h2\">{{ '@pry.context.flyingDetail' | i18n }}</h2>\n <button type=\"button\" (click)=\"hideDetail()\" class=\"a-btn a-btn--icon-only -close\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.close' | i18n }}</span>\n </button>\n </div>\n <div class=\"o-settings__popup__content\">\n <pry-widget-instanciator [staticManifest]=\"detailManifest\"></pry-widget-instanciator>\n </div>\n <div class=\"o-settings__popup__footer\">\n <button (click)=\"hideDetail()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.action.close' | i18n }}\n </button>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: WidgetInstanciatorComponent, selector: "pry-widget-instanciator", inputs: ["widgetIndex", "staticManifest", "standalone", "open$"], outputs: ["manifestModified"] }, { kind: "component", type: PryObjectEditionComponent, selector: "pry-object-creation", inputs: ["link", "object", "menu"], outputs: ["closed"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
9311
9325
  }
9312
9326
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ContextMenuComponent, decorators: [{
9313
9327
  type: Component,
9314
- args: [{ selector: 'pry-context-menu', template: "<ng-template #template>\n <ul class=\"m-context-menu__list\">\n <ng-container *ngIf=\"!!itemId\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionAddOrRemove()\">\n {{ ((isSelected$ | async) ? '@pry.context.remove' : '@pry.context.add') | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionInvert()\">\n {{ '@pry.context.invert' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" *ngIf=\"!!resultSet\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"proximity()\" *ngIf=\"!!resultSet\">\n {{ '@pry.context.proximity' | i18n }}\n </button>\n </li>\n <ng-container *ngIf=\"isModuleLoaded['graph']\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"explore()\">\n {{ '@pry.context.explore' | i18n }}\n </button>\n </li>\n </ng-container>\n <ng-container *ngIf=\"isModuleLoaded['detail']\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"detail()\">\n {{ '@pry.context.detail' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"flyingDetail()\">\n {{ '@pry.context.flyingDetail' | i18n }}\n </button>\n </li>\n </ng-container>\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n <li class=\"m-context-menu__list__item\">\n <pry-object-creation\n (closed)=\"hide()\"\n [link]=\"true\"\n [object]=\"false\"\n [menu]=\"true\"\n *ngIf=\"(selectedItemsIds?.length ?? 0) > 0\"\n ></pry-object-creation>\n <ng-container *ngIf=\"allowObjectCreation$ | async\">\n <pry-object-creation (closed)=\"hide()\" [link]=\"true\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n </ng-container>\n </li>\n </ng-container>\n </ng-container>\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n <li *ngIf=\"allowObjectCreation$| async\" class=\"m-context-menu__list__item\">\n <pry-object-creation (closed)=\"hide()\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n<ng-template #detailTemplate>\n <div class=\"o-settings__popup__header\">\n <h2 class=\"a-h2\">{{ '@pry.context.flyingDetail' | i18n }}</h2>\n <button type=\"button\" (click)=\"hideDetail()\" class=\"a-btn a-btn--icon-only -close\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.close' | i18n }}</span>\n </button>\n </div>\n <div class=\"o-settings__popup__content\">\n <pry-widget-instanciator [staticManifest]=\"detailManifest\"></pry-widget-instanciator>\n </div>\n <div class=\"o-settings__popup__footer\">\n <button (click)=\"hideDetail()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.action.close' | i18n }}\n </button>\n </div>\n</ng-template>\n" }]
9315
- }], ctorParameters: () => [{ type: i1.Store }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: WidgetFactoryService }], propDecorators: { template: [{
9328
+ args: [{ selector: 'pry-context-menu', template: "<ng-template #template>\n <ul class=\"m-context-menu__list\">\n @if (!!itemId) {\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionAddOrRemove()\">\n {{ ((isSelected$ | async) ? '@pry.context.remove' : '@pry.context.add') | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionInvert()\">\n {{ '@pry.context.invert' | i18n }}\n </button>\n </li>\n @if (!!resultSet) {\n <li class=\"m-context-menu__list__item\">\n @if (!!resultSet) {\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"proximity()\">\n {{ '@pry.context.proximity' | i18n }}\n </button>\n }\n </li>\n }\n @if (isModuleLoaded['graph']) {\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"explore()\">\n {{ '@pry.context.explore' | i18n }}\n </button>\n </li>\n }\n @if (isModuleLoaded['detail']) {\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"detail()\">\n {{ '@pry.context.detail' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"flyingDetail()\">\n {{ '@pry.context.flyingDetail' | i18n }}\n </button>\n </li>\n }\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n <li class=\"m-context-menu__list__item\">\n @if ((selectedItemsIds?.length ?? 0) > 0) {\n <pry-object-creation\n (closed)=\"hide()\"\n [link]=\"true\"\n [object]=\"false\"\n [menu]=\"true\"\n ></pry-object-creation>\n }\n @if (allowObjectCreation$ | async) {\n <pry-object-creation (closed)=\"hide()\" [link]=\"true\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n }\n </li>\n </ng-container>\n }\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n @if (allowObjectCreation$| async) {\n <li class=\"m-context-menu__list__item\">\n <pry-object-creation (closed)=\"hide()\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n </li>\n }\n </ng-container>\n </ul>\n</ng-template>\n<ng-template #detailTemplate>\n <div class=\"o-settings__popup__header\">\n <h2 class=\"a-h2\">{{ '@pry.context.flyingDetail' | i18n }}</h2>\n <button type=\"button\" (click)=\"hideDetail()\" class=\"a-btn a-btn--icon-only -close\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.close' | i18n }}</span>\n </button>\n </div>\n <div class=\"o-settings__popup__content\">\n <pry-widget-instanciator [staticManifest]=\"detailManifest\"></pry-widget-instanciator>\n </div>\n <div class=\"o-settings__popup__footer\">\n <button (click)=\"hideDetail()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.action.close' | i18n }}\n </button>\n </div>\n</ng-template>\n" }]
9329
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i2$1.Overlay }, { type: i0.ViewContainerRef }, { type: WidgetFactoryService }], propDecorators: { template: [{
9316
9330
  type: ViewChild,
9317
9331
  args: ['template', { read: TemplateRef }]
9318
9332
  }], detailTemplate: [{
@@ -9389,7 +9403,7 @@ class DashboardComponent extends SubscriptionnerDirective {
9389
9403
  this.targetIndexes$ = this.store.select(DashboardSelectors.targetTenantsIndexes);
9390
9404
  this.subscriptions.add(this.store.select(DashboardSelectors.dashboardCellParams).subscribe((params) => (this.dashboardParams = params)));
9391
9405
  this.windowManifest$ = this.store.select(DashboardSelectors.windowManifest).pipe(combineLatestWith(this.staticDashboard$), switchMap(([windowManifest, staticDashboard]) => (!staticDashboard ? of(windowManifest) : of(staticDashboard))), map$1((_wManifest) => {
9392
- const wManifest = JSON.parse(JSON.stringify(_wManifest));
9406
+ const wManifest = structuredClone(_wManifest);
9393
9407
  if (wManifest.grid?.layout && wManifest.grid.layout !== DashboardGridLayout.MANUAL) {
9394
9408
  // Complete with placeholders
9395
9409
  const size = WidgetPlacementUtils.getLayout(wManifest.grid.layout)?.places.length ?? 0;
@@ -9579,7 +9593,7 @@ class DashboardComponent extends SubscriptionnerDirective {
9579
9593
  prepareModification($event, indexManifest) {
9580
9594
  this.move.initialX = $event.clientX;
9581
9595
  this.move.initialY = $event.clientY;
9582
- this.initialWidgetManifestList = JSON.parse(JSON.stringify((this.manifest || { widgets: [] }).widgets));
9596
+ this.initialWidgetManifestList = structuredClone((this.manifest || { widgets: [] }).widgets);
9583
9597
  this.currentlyModifiedManifest = this.initialWidgetManifestList.splice(indexManifest, 1)[0];
9584
9598
  // console.log('prepare', this.currentlyModifiedManifest, this.initialWidgetManifestList);
9585
9599
  }
@@ -9627,7 +9641,7 @@ class DashboardComponent extends SubscriptionnerDirective {
9627
9641
  type: 'placeholder',
9628
9642
  layout: { x: target?.x ?? 0, y: target?.y ?? 0, width: 1, height: 1 }
9629
9643
  };
9630
- this.initialWidgetManifestList = JSON.parse(JSON.stringify((this.manifest || { widgets: [] }).widgets));
9644
+ this.initialWidgetManifestList = structuredClone((this.manifest || { widgets: [] }).widgets);
9631
9645
  // console.log('create placeholder', this.currentlyModifiedManifest, this.initialWidgetManifestList);
9632
9646
  // We passed widget size as a mimetype so that we can still read it without security issues
9633
9647
  const widgetSizeMimeType = types.find((type) => type.includes(MIME_TYPE_WIDGET_SIZE));
@@ -9682,7 +9696,7 @@ class DashboardComponent extends SubscriptionnerDirective {
9682
9696
  const target = this.getTarget($event, optimize);
9683
9697
  if (target !== null) {
9684
9698
  this.checkForDragEnter($event);
9685
- const candidateWidget = JSON.parse(JSON.stringify(this.currentlyModifiedManifest));
9699
+ const candidateWidget = structuredClone(this.currentlyModifiedManifest);
9686
9700
  switch (this.actionType) {
9687
9701
  case 'resize-nw':
9688
9702
  if (candidateWidget.layout.x + target.x > 0 && candidateWidget.layout.height - target.y > 0) {
@@ -9863,13 +9877,13 @@ class DashboardComponent extends SubscriptionnerDirective {
9863
9877
  }
9864
9878
  }));
9865
9879
  }
9866
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.Store }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: WidgetFactoryService }], target: i0.ɵɵFactoryTarget.Component }); }
9867
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: DashboardComponent, selector: "pry-dashboard", inputs: { staticDashboard: "staticDashboard", forceModeEdition: "forceModeEdition", CloseOnDragOut: "CloseOnDragOut", displayOptions: "displayOptions", noBackground: "noBackground", breakpoint: "breakpoint" }, outputs: { rowHeight: "rowHeight", rows: "rows" }, viewQueries: [{ propertyName: "templateModal", first: true, predicate: ["templateModal"], descendants: true, read: TemplateRef }, { propertyName: "gridRef", first: true, predicate: ["grid"], descendants: true }, { propertyName: "instanciators", predicate: WidgetInstanciatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"o-dashboard-edit\" [class.-edit]=\"modeEdition$ | async\">\n <div class=\"o-dashboard-add -rows\">\n <button (click)=\"changeSize('rows', -1)\">\n <pry-icon iconSvg=\"remove\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <button (click)=\"changeSize('rows', +1)\">\n <pry-icon iconSvg=\"add\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <p>{{ '@pry.grid.rows' | i18n }}</p>\n </div>\n <div class=\"o-dashboard-add -cols\">\n <p>{{ '@pry.grid.columns' | i18n }}</p>\n <button (click)=\"changeSize('columns', -1)\">\n <pry-icon iconSvg=\"remove\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <button (click)=\"changeSize('columns', +1)\">\n <pry-icon iconSvg=\"add\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n </div>\n <div\n class=\"o-dashboard-grid\"\n [style.gridTemplateColumns]=\"gridTemplateColumns$ | async\"\n [style.gridTemplateRows]=\"gridTemplateRows$ | async\"\n [style.gridGap]=\"dashboardParams.gridGap + 'px'\"\n #grid\n (mousemove)=\"movingMouse($event)\"\n (drop)=\"dropping($event)\"\n (dragover)=\"dragMove($event)\"\n (dragleave)=\"dragLeave($event)\"\n (dragenter)=\"dragEnter($event)\"\n >\n <ng-container\n *ngFor=\"\n let widgetManifest of (windowManifest$ | async)?.widgets || [];\n let widgetIndex = index;\n trackBy: trackWidgets\n \"\n >\n <div\n class=\"o-dashboard-widget\"\n [class.-edited]=\"modeEdition\"\n [style.gridColumn]=\"gridColumn(widgetManifest.layout)\"\n [style.gridRow]=\"gridRow(widgetManifest.layout)\"\n (drop)=\"droppingInWidget($event, widgetIndex)\"\n >\n <ng-container *ngIf=\"modeEdition\">\n <div class=\"resize nw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-nw')\">\n <pry-icon iconSvg=\"north_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize sw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-sw')\">\n <pry-icon iconSvg=\"south_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize ne-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-ne')\">\n <pry-icon iconSvg=\"north_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize se-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-se')\">\n <pry-icon iconSvg=\"south_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize delete\" (mousedown)=\"toggleRemoveConfirm($event, widgetIndex)\">\n <pry-icon iconSvg=\"close\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"move\" draggable=\"true\" (dragstart)=\"dragStart($event, widgetIndex)\">\n <div class=\"move-inside move-{{ widgetManifest.type }}\">\n <span>{{ widgetManifest.title ?? ('@pry.toolbox.' + widgetManifest.type | i18n) }}</span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!modeEdition\">\n <pry-widget-instanciator\n [staticManifest]=\"widgetManifest\"\n [widgetIndex]=\"widgetIndex\"\n ></pry-widget-instanciator>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!noBackground\">\n <ng-container\n *ngIf=\"{\n noWidgets: (nonFillerWidgets$ | async) === 0,\n globalLoading: loading$ | async,\n fetchLoading: (dataFetching$ | async)?.length ?? 1 > 0\n } as data\"\n >\n <ng-container *ngIf=\"data.noWidgets\">\n <div\n *ngIf=\"data.globalLoading; else notLoading\"\n class=\"no-widget\"\n [style.grid-area]=\"backgroundArea$ | async\"\n >\n <pry-page-loader></pry-page-loader>\n <span class=\"no-widget__text\">{{ '@pry.widget.target.loading' | i18n }}...</span>\n </div>\n <ng-template #notLoading>\n <div class=\"no-widget\" [style.grid-area]=\"backgroundArea$ | async\">\n <img\n class=\"no-widget__search\"\n src=\"../../../assets/svgs/pry_recherche.svg\"\n alt=\"{{\n (layout === DashboardGridLayout.MANUAL\n ? '@pry.widget.target.none_manual'\n : '@pry.widget.target.none_auto'\n ) | i18n\n }}\"\n />\n <span class=\"no-widget__text\">{{\n (layout === DashboardGridLayout.MANUAL\n ? '@pry.widget.target.none_manual'\n : '@pry.widget.target.none_auto'\n ) | i18n\n }}</span>\n </div>\n </ng-template>\n </ng-container>\n <div\n class=\"a-page-loader backdrop\"\n [style.display]=\"data.fetchLoading && !data.globalLoading ? 'flex' : 'none'\"\n [style.width.px]=\"params.gridWidth\"\n [style.height.px]=\"params.gridHeight\"\n >\n <pry-page-loader></pry-page-loader>\n <p>{{ '@pry.widget.target.loading' | i18n }}...</p>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</div>\n<pry-context-menu></pry-context-menu>\n\n<ng-template #templateModal>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelRemoveConfirm()\">\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=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i8.PryPageLoaderComponent, selector: "pry-page-loader", inputs: ["image", "imageAltText"] }, { kind: "component", type: WidgetInstanciatorComponent, selector: "pry-widget-instanciator", inputs: ["widgetIndex", "staticManifest", "standalone", "open$"], outputs: ["manifestModified"] }, { kind: "component", type: ContextMenuComponent, selector: "pry-context-menu" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
9880
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.Store }, { token: i2$1.Overlay }, { token: i0.ViewContainerRef }, { token: WidgetFactoryService }], target: i0.ɵɵFactoryTarget.Component }); }
9881
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: DashboardComponent, selector: "pry-dashboard", inputs: { staticDashboard: "staticDashboard", forceModeEdition: "forceModeEdition", CloseOnDragOut: "CloseOnDragOut", displayOptions: "displayOptions", noBackground: "noBackground", breakpoint: "breakpoint" }, outputs: { rowHeight: "rowHeight", rows: "rows" }, viewQueries: [{ propertyName: "templateModal", first: true, predicate: ["templateModal"], descendants: true, read: TemplateRef }, { propertyName: "gridRef", first: true, predicate: ["grid"], descendants: true }, { propertyName: "instanciators", predicate: WidgetInstanciatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"o-dashboard-edit\" [class.-edit]=\"modeEdition$ | async\">\n <div class=\"o-dashboard-add -rows\">\n <button (click)=\"changeSize('rows', -1)\">\n <pry-icon iconSvg=\"remove\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <button (click)=\"changeSize('rows', +1)\">\n <pry-icon iconSvg=\"add\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <p>{{ '@pry.grid.rows' | i18n }}</p>\n </div>\n <div class=\"o-dashboard-add -cols\">\n <p>{{ '@pry.grid.columns' | i18n }}</p>\n <button (click)=\"changeSize('columns', -1)\">\n <pry-icon iconSvg=\"remove\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <button (click)=\"changeSize('columns', +1)\">\n <pry-icon iconSvg=\"add\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n </div>\n <div\n class=\"o-dashboard-grid\"\n [style.gridTemplateColumns]=\"gridTemplateColumns$ | async\"\n [style.gridTemplateRows]=\"gridTemplateRows$ | async\"\n [style.gridGap]=\"dashboardParams.gridGap + 'px'\"\n #grid\n (mousemove)=\"movingMouse($event)\"\n (drop)=\"dropping($event)\"\n (dragover)=\"dragMove($event)\"\n (dragleave)=\"dragLeave($event)\"\n (dragenter)=\"dragEnter($event)\"\n >\n @for (\n widgetManifest of (windowManifest$ | async)?.widgets || []; track trackWidgets(widgetIndex,\n widgetManifest); let widgetIndex = $index) {\n <div\n class=\"o-dashboard-widget\"\n [class.-edited]=\"modeEdition\"\n [style.gridColumn]=\"gridColumn(widgetManifest.layout)\"\n [style.gridRow]=\"gridRow(widgetManifest.layout)\"\n (drop)=\"droppingInWidget($event, widgetIndex)\"\n >\n @if (modeEdition) {\n <div class=\"resize nw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-nw')\">\n <pry-icon iconSvg=\"north_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize sw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-sw')\">\n <pry-icon iconSvg=\"south_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize ne-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-ne')\">\n <pry-icon iconSvg=\"north_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize se-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-se')\">\n <pry-icon iconSvg=\"south_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize delete\" (mousedown)=\"toggleRemoveConfirm($event, widgetIndex)\">\n <pry-icon iconSvg=\"close\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"move\" draggable=\"true\" (dragstart)=\"dragStart($event, widgetIndex)\">\n <div class=\"move-inside move-{{ widgetManifest.type }}\">\n <span>{{ widgetManifest.title ?? ('@pry.toolbox.' + widgetManifest.type | i18n) }}</span>\n </div>\n </div>\n }\n @if (!modeEdition) {\n <pry-widget-instanciator\n [staticManifest]=\"widgetManifest\"\n [widgetIndex]=\"widgetIndex\"\n ></pry-widget-instanciator>\n }\n </div>\n }\n\n @if (!noBackground) {\n @if ({\n noWidgets: (nonFillerWidgets$ | async) === 0,\n globalLoading: loading$ | async,\n fetchLoading: (dataFetching$ | async)?.length ?? 1 > 0\n }; as data) {\n @if (data.noWidgets) {\n @if (data.globalLoading) {\n <div\n class=\"no-widget\"\n [style.grid-area]=\"backgroundArea$ | async\"\n >\n <pry-page-loader></pry-page-loader>\n <span class=\"no-widget__text\">{{ '@pry.widget.target.loading' | i18n }}...</span>\n </div>\n } @else {\n <div class=\"no-widget\" [style.grid-area]=\"backgroundArea$ | async\">\n <img\n class=\"no-widget__search\"\n src=\"../../../assets/svgs/pry_recherche.svg\"\n alt=\"{{\n (layout === DashboardGridLayout.MANUAL\n ? '@pry.widget.target.none_manual'\n : '@pry.widget.target.none_auto'\n ) | i18n\n }}\"\n />\n <span class=\"no-widget__text\">{{\n (layout === DashboardGridLayout.MANUAL\n ? '@pry.widget.target.none_manual'\n : '@pry.widget.target.none_auto'\n ) | i18n\n }}</span>\n </div>\n }\n }\n <div\n class=\"a-page-loader backdrop\"\n [style.display]=\"data.fetchLoading && !data.globalLoading ? 'flex' : 'none'\"\n [style.width.px]=\"params.gridWidth\"\n [style.height.px]=\"params.gridHeight\"\n >\n <pry-page-loader></pry-page-loader>\n <p>{{ '@pry.widget.target.loading' | i18n }}...</p>\n </div>\n }\n }\n </div>\n</div>\n<pry-context-menu></pry-context-menu>\n\n<ng-template #templateModal>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelRemoveConfirm()\">\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=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i8.PryPageLoaderComponent, selector: "pry-page-loader", inputs: ["image", "imageAltText"] }, { kind: "component", type: WidgetInstanciatorComponent, selector: "pry-widget-instanciator", inputs: ["widgetIndex", "staticManifest", "standalone", "open$"], outputs: ["manifestModified"] }, { kind: "component", type: ContextMenuComponent, selector: "pry-context-menu" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
9868
9882
  }
9869
9883
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DashboardComponent, decorators: [{
9870
9884
  type: Component,
9871
- args: [{ selector: 'pry-dashboard', template: "<div class=\"o-dashboard-edit\" [class.-edit]=\"modeEdition$ | async\">\n <div class=\"o-dashboard-add -rows\">\n <button (click)=\"changeSize('rows', -1)\">\n <pry-icon iconSvg=\"remove\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <button (click)=\"changeSize('rows', +1)\">\n <pry-icon iconSvg=\"add\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <p>{{ '@pry.grid.rows' | i18n }}</p>\n </div>\n <div class=\"o-dashboard-add -cols\">\n <p>{{ '@pry.grid.columns' | i18n }}</p>\n <button (click)=\"changeSize('columns', -1)\">\n <pry-icon iconSvg=\"remove\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <button (click)=\"changeSize('columns', +1)\">\n <pry-icon iconSvg=\"add\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n </div>\n <div\n class=\"o-dashboard-grid\"\n [style.gridTemplateColumns]=\"gridTemplateColumns$ | async\"\n [style.gridTemplateRows]=\"gridTemplateRows$ | async\"\n [style.gridGap]=\"dashboardParams.gridGap + 'px'\"\n #grid\n (mousemove)=\"movingMouse($event)\"\n (drop)=\"dropping($event)\"\n (dragover)=\"dragMove($event)\"\n (dragleave)=\"dragLeave($event)\"\n (dragenter)=\"dragEnter($event)\"\n >\n <ng-container\n *ngFor=\"\n let widgetManifest of (windowManifest$ | async)?.widgets || [];\n let widgetIndex = index;\n trackBy: trackWidgets\n \"\n >\n <div\n class=\"o-dashboard-widget\"\n [class.-edited]=\"modeEdition\"\n [style.gridColumn]=\"gridColumn(widgetManifest.layout)\"\n [style.gridRow]=\"gridRow(widgetManifest.layout)\"\n (drop)=\"droppingInWidget($event, widgetIndex)\"\n >\n <ng-container *ngIf=\"modeEdition\">\n <div class=\"resize nw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-nw')\">\n <pry-icon iconSvg=\"north_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize sw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-sw')\">\n <pry-icon iconSvg=\"south_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize ne-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-ne')\">\n <pry-icon iconSvg=\"north_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize se-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-se')\">\n <pry-icon iconSvg=\"south_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize delete\" (mousedown)=\"toggleRemoveConfirm($event, widgetIndex)\">\n <pry-icon iconSvg=\"close\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"move\" draggable=\"true\" (dragstart)=\"dragStart($event, widgetIndex)\">\n <div class=\"move-inside move-{{ widgetManifest.type }}\">\n <span>{{ widgetManifest.title ?? ('@pry.toolbox.' + widgetManifest.type | i18n) }}</span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!modeEdition\">\n <pry-widget-instanciator\n [staticManifest]=\"widgetManifest\"\n [widgetIndex]=\"widgetIndex\"\n ></pry-widget-instanciator>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!noBackground\">\n <ng-container\n *ngIf=\"{\n noWidgets: (nonFillerWidgets$ | async) === 0,\n globalLoading: loading$ | async,\n fetchLoading: (dataFetching$ | async)?.length ?? 1 > 0\n } as data\"\n >\n <ng-container *ngIf=\"data.noWidgets\">\n <div\n *ngIf=\"data.globalLoading; else notLoading\"\n class=\"no-widget\"\n [style.grid-area]=\"backgroundArea$ | async\"\n >\n <pry-page-loader></pry-page-loader>\n <span class=\"no-widget__text\">{{ '@pry.widget.target.loading' | i18n }}...</span>\n </div>\n <ng-template #notLoading>\n <div class=\"no-widget\" [style.grid-area]=\"backgroundArea$ | async\">\n <img\n class=\"no-widget__search\"\n src=\"../../../assets/svgs/pry_recherche.svg\"\n alt=\"{{\n (layout === DashboardGridLayout.MANUAL\n ? '@pry.widget.target.none_manual'\n : '@pry.widget.target.none_auto'\n ) | i18n\n }}\"\n />\n <span class=\"no-widget__text\">{{\n (layout === DashboardGridLayout.MANUAL\n ? '@pry.widget.target.none_manual'\n : '@pry.widget.target.none_auto'\n ) | i18n\n }}</span>\n </div>\n </ng-template>\n </ng-container>\n <div\n class=\"a-page-loader backdrop\"\n [style.display]=\"data.fetchLoading && !data.globalLoading ? 'flex' : 'none'\"\n [style.width.px]=\"params.gridWidth\"\n [style.height.px]=\"params.gridHeight\"\n >\n <pry-page-loader></pry-page-loader>\n <p>{{ '@pry.widget.target.loading' | i18n }}...</p>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</div>\n<pry-context-menu></pry-context-menu>\n\n<ng-template #templateModal>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelRemoveConfirm()\">\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=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n" }]
9872
- }], ctorParameters: () => [{ type: i1.Store }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: WidgetFactoryService }], propDecorators: { templateModal: [{
9885
+ args: [{ selector: 'pry-dashboard', template: "<div class=\"o-dashboard-edit\" [class.-edit]=\"modeEdition$ | async\">\n <div class=\"o-dashboard-add -rows\">\n <button (click)=\"changeSize('rows', -1)\">\n <pry-icon iconSvg=\"remove\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <button (click)=\"changeSize('rows', +1)\">\n <pry-icon iconSvg=\"add\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <p>{{ '@pry.grid.rows' | i18n }}</p>\n </div>\n <div class=\"o-dashboard-add -cols\">\n <p>{{ '@pry.grid.columns' | i18n }}</p>\n <button (click)=\"changeSize('columns', -1)\">\n <pry-icon iconSvg=\"remove\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n <button (click)=\"changeSize('columns', +1)\">\n <pry-icon iconSvg=\"add\" [width]=\"12\" [height]=\"12\"></pry-icon>\n </button>\n </div>\n <div\n class=\"o-dashboard-grid\"\n [style.gridTemplateColumns]=\"gridTemplateColumns$ | async\"\n [style.gridTemplateRows]=\"gridTemplateRows$ | async\"\n [style.gridGap]=\"dashboardParams.gridGap + 'px'\"\n #grid\n (mousemove)=\"movingMouse($event)\"\n (drop)=\"dropping($event)\"\n (dragover)=\"dragMove($event)\"\n (dragleave)=\"dragLeave($event)\"\n (dragenter)=\"dragEnter($event)\"\n >\n @for (\n widgetManifest of (windowManifest$ | async)?.widgets || []; track trackWidgets(widgetIndex,\n widgetManifest); let widgetIndex = $index) {\n <div\n class=\"o-dashboard-widget\"\n [class.-edited]=\"modeEdition\"\n [style.gridColumn]=\"gridColumn(widgetManifest.layout)\"\n [style.gridRow]=\"gridRow(widgetManifest.layout)\"\n (drop)=\"droppingInWidget($event, widgetIndex)\"\n >\n @if (modeEdition) {\n <div class=\"resize nw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-nw')\">\n <pry-icon iconSvg=\"north_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize sw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-sw')\">\n <pry-icon iconSvg=\"south_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize ne-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-ne')\">\n <pry-icon iconSvg=\"north_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize se-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-se')\">\n <pry-icon iconSvg=\"south_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize delete\" (mousedown)=\"toggleRemoveConfirm($event, widgetIndex)\">\n <pry-icon iconSvg=\"close\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"move\" draggable=\"true\" (dragstart)=\"dragStart($event, widgetIndex)\">\n <div class=\"move-inside move-{{ widgetManifest.type }}\">\n <span>{{ widgetManifest.title ?? ('@pry.toolbox.' + widgetManifest.type | i18n) }}</span>\n </div>\n </div>\n }\n @if (!modeEdition) {\n <pry-widget-instanciator\n [staticManifest]=\"widgetManifest\"\n [widgetIndex]=\"widgetIndex\"\n ></pry-widget-instanciator>\n }\n </div>\n }\n\n @if (!noBackground) {\n @if ({\n noWidgets: (nonFillerWidgets$ | async) === 0,\n globalLoading: loading$ | async,\n fetchLoading: (dataFetching$ | async)?.length ?? 1 > 0\n }; as data) {\n @if (data.noWidgets) {\n @if (data.globalLoading) {\n <div\n class=\"no-widget\"\n [style.grid-area]=\"backgroundArea$ | async\"\n >\n <pry-page-loader></pry-page-loader>\n <span class=\"no-widget__text\">{{ '@pry.widget.target.loading' | i18n }}...</span>\n </div>\n } @else {\n <div class=\"no-widget\" [style.grid-area]=\"backgroundArea$ | async\">\n <img\n class=\"no-widget__search\"\n src=\"../../../assets/svgs/pry_recherche.svg\"\n alt=\"{{\n (layout === DashboardGridLayout.MANUAL\n ? '@pry.widget.target.none_manual'\n : '@pry.widget.target.none_auto'\n ) | i18n\n }}\"\n />\n <span class=\"no-widget__text\">{{\n (layout === DashboardGridLayout.MANUAL\n ? '@pry.widget.target.none_manual'\n : '@pry.widget.target.none_auto'\n ) | i18n\n }}</span>\n </div>\n }\n }\n <div\n class=\"a-page-loader backdrop\"\n [style.display]=\"data.fetchLoading && !data.globalLoading ? 'flex' : 'none'\"\n [style.width.px]=\"params.gridWidth\"\n [style.height.px]=\"params.gridHeight\"\n >\n <pry-page-loader></pry-page-loader>\n <p>{{ '@pry.widget.target.loading' | i18n }}...</p>\n </div>\n }\n }\n </div>\n</div>\n<pry-context-menu></pry-context-menu>\n\n<ng-template #templateModal>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelRemoveConfirm()\">\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=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n" }]
9886
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i2$1.Overlay }, { type: i0.ViewContainerRef }, { type: WidgetFactoryService }], propDecorators: { templateModal: [{
9873
9887
  type: ViewChild,
9874
9888
  args: ['templateModal', { read: TemplateRef }]
9875
9889
  }], instanciators: [{
@@ -10164,7 +10178,7 @@ class ToolboxManifestService extends SubscriptionnerDirective {
10164
10178
  if (!manifest) {
10165
10179
  return manifest;
10166
10180
  }
10167
- const copy = JSON.parse(JSON.stringify(manifest));
10181
+ const copy = structuredClone(manifest);
10168
10182
  if (instanciate && !!copy && copy.datasource === USE_CURRENT_RESULTSET) {
10169
10183
  copy.datasource = [];
10170
10184
  }
@@ -10174,7 +10188,7 @@ class ToolboxManifestService extends SubscriptionnerDirective {
10174
10188
  this.initialManifests$.next({ ...this.initialManifests$.getValue(), [id]: manifest });
10175
10189
  }
10176
10190
  setAllLayouts(layout) {
10177
- Object.keys(this.initialManifests$.getValue()).forEach((key) => (this.initialManifests$.getValue()[key].layout = JSON.parse(JSON.stringify(layout))));
10191
+ Object.keys(this.initialManifests$.getValue()).forEach((key) => (this.initialManifests$.getValue()[key].layout = structuredClone(layout)));
10178
10192
  }
10179
10193
  isModel(id) {
10180
10194
  const manifest = this.get(id, false);
@@ -10480,11 +10494,11 @@ class PryAboutComponent {
10480
10494
  return !!value && (!!backVersion.chartVersion || !!frontVersion.libVersion);
10481
10495
  }
10482
10496
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryAboutComponent, deps: [{ token: i1.Store }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
10483
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryAboutComponent, selector: "pry-about", inputs: { tooltipPosition: "tooltipPosition" }, ngImport: i0, template: "<div class=\"o-about\">\n <div class=\"m-info-icon\">\n <span>i</span>\n </div>\n <div class=\"o-about__tooltip -position-{{ tooltipPosition }}\">\n <ng-container *ngFor=\"let version of (version$ | async) ?? {} | keyvalue\">\n <div class=\"o-about__line\">\n {{ '@pry.about.' + version.key | i18n }}\n <p class=\"a-chip -md -no-wrap\" [class.-not-found]=\"!hasVersion(version.value)\">\n {{ displayVersion(version.value) }}\n </p>\n </div>\n </ng-container>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
10497
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryAboutComponent, selector: "pry-about", inputs: { tooltipPosition: "tooltipPosition" }, ngImport: i0, template: "<div class=\"o-about\">\n <div class=\"m-info-icon\">\n <span>i</span>\n </div>\n <div class=\"o-about__tooltip -position-{{ tooltipPosition }}\">\n @for (version of (version$ | async) ?? {} | keyvalue; track version) {\n <div class=\"o-about__line\">\n {{ '@pry.about.' + version.key | i18n }}\n <p class=\"a-chip -md -no-wrap\" [class.-not-found]=\"!hasVersion(version.value)\">\n {{ displayVersion(version.value) }}\n </p>\n </div>\n }\n </div>\n</div>\n", dependencies: [{ kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
10484
10498
  }
10485
10499
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryAboutComponent, decorators: [{
10486
10500
  type: Component,
10487
- args: [{ selector: 'pry-about', template: "<div class=\"o-about\">\n <div class=\"m-info-icon\">\n <span>i</span>\n </div>\n <div class=\"o-about__tooltip -position-{{ tooltipPosition }}\">\n <ng-container *ngFor=\"let version of (version$ | async) ?? {} | keyvalue\">\n <div class=\"o-about__line\">\n {{ '@pry.about.' + version.key | i18n }}\n <p class=\"a-chip -md -no-wrap\" [class.-not-found]=\"!hasVersion(version.value)\">\n {{ displayVersion(version.value) }}\n </p>\n </div>\n </ng-container>\n </div>\n</div>\n" }]
10501
+ args: [{ selector: 'pry-about', template: "<div class=\"o-about\">\n <div class=\"m-info-icon\">\n <span>i</span>\n </div>\n <div class=\"o-about__tooltip -position-{{ tooltipPosition }}\">\n @for (version of (version$ | async) ?? {} | keyvalue; track version) {\n <div class=\"o-about__line\">\n {{ '@pry.about.' + version.key | i18n }}\n <p class=\"a-chip -md -no-wrap\" [class.-not-found]=\"!hasVersion(version.value)\">\n {{ displayVersion(version.value) }}\n </p>\n </div>\n }\n </div>\n</div>\n" }]
10488
10502
  }], ctorParameters: () => [{ type: i1.Store }, { type: PryI18nService }], propDecorators: { tooltipPosition: [{
10489
10503
  type: Input
10490
10504
  }] } });
@@ -10542,7 +10556,7 @@ class BusService {
10542
10556
  if (!action.sender) {
10543
10557
  // Send only non bus-received messages
10544
10558
  this.dataChannel.postMessage({
10545
- ...JSON.parse(JSON.stringify(action)),
10559
+ ...structuredClone(action),
10546
10560
  sender: this.sender,
10547
10561
  target
10548
10562
  });
@@ -10594,12 +10608,12 @@ class ActionBusEffects {
10594
10608
  // For actions with type containing "(bus)", automatically transfer it on the data-bus to propagate to other windows
10595
10609
  filter$1((action) => action.type.includes('(bus)')), tap((action) => this.busService.postData(action))), { dispatch: false });
10596
10610
  }
10597
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActionBusEffects, deps: [{ token: i1$3.Actions }, { token: i1.Store }, { token: BusService }], target: i0.ɵɵFactoryTarget.Injectable }); }
10611
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActionBusEffects, deps: [{ token: i1$2.Actions }, { token: i1.Store }, { token: BusService }], target: i0.ɵɵFactoryTarget.Injectable }); }
10598
10612
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActionBusEffects }); }
10599
10613
  }
10600
10614
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActionBusEffects, decorators: [{
10601
10615
  type: Injectable
10602
- }], ctorParameters: () => [{ type: i1$3.Actions }, { type: i1.Store }, { type: BusService }] });
10616
+ }], ctorParameters: () => [{ type: i1$2.Actions }, { type: i1.Store }, { type: BusService }] });
10603
10617
 
10604
10618
  class ManifestsComponent {
10605
10619
  constructor(store) {
@@ -10640,11 +10654,11 @@ class ManifestsComponent {
10640
10654
  this.fileInput.nativeElement.click();
10641
10655
  }
10642
10656
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ManifestsComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
10643
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ManifestsComponent, selector: "pry-manifests", viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div class=\"o-manifest-layout\">\n <div class=\"o-manifest-layout__toolbox\">\n <button\n class=\"a-btn a-btn--action\"\n type=\"button\"\n (click)=\"triggerFileInput()\"\n title=\"{{ '@pry.manifest.importAlt' | i18n }}\"\n >\n <pry-icon iconSvg=\"upload\"></pry-icon>\n {{ '@pry.manifest.import' | i18n }}\n </button>\n <input\n type=\"file\"\n id=\"file\"\n (change)=\"handleFileInput($event)\"\n #fileInput\n multiple=\"true\"\n class=\"u-visually-hidden\"\n />\n </div>\n\n <div class=\"o-manifest-layout__content\">\n <h1 class=\"a-h1\">{{ '@pry.manifest.title' | i18n }}</h1>\n\n <div class=\"o-card-manifest\" *ngFor=\"let manifest of manifests$ | async\">\n <div class=\"o-card-manifest__content\">\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.name' | i18n }}</span>\n {{ manifest.name }}\n </p>\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.description' | i18n }}</span>\n {{ manifest.description }}\n </p>\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.modification' | i18n }}</span>\n {{ manifest.modificationDate | date: ('@pry.format.datetime' | i18n) }}\n </p>\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.creation' | i18n }}</span>\n {{ manifest.creationDate | date: ('@pry.format.datetime' | i18n) }}\n </p>\n </div>\n\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"download(manifest.id, manifest.name)\">\n <pry-icon iconSvg=\"download\"></pry-icon>\n <span class=\"u-visually-hidden\">TODO</span>\n </button>\n\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"fetch(manifest.id)\">\n <pry-icon iconSvg=\"eye\"></pry-icon>\n <span class=\"u-visually-hidden\">TODO</span>\n </button>\n\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"delete(manifest.id)\">\n <pry-icon iconSvg=\"delete\"></pry-icon>\n <span class=\"u-visually-hidden\">TODO</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
10657
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ManifestsComponent, selector: "pry-manifests", viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div class=\"o-manifest-layout\">\n <div class=\"o-manifest-layout__toolbox\">\n <button\n class=\"a-btn a-btn--action\"\n type=\"button\"\n (click)=\"triggerFileInput()\"\n title=\"{{ '@pry.manifest.importAlt' | i18n }}\"\n >\n <pry-icon iconSvg=\"upload\"></pry-icon>\n {{ '@pry.manifest.import' | i18n }}\n </button>\n <input\n type=\"file\"\n id=\"file\"\n (change)=\"handleFileInput($event)\"\n #fileInput\n multiple=\"true\"\n class=\"u-visually-hidden\"\n />\n </div>\n\n <div class=\"o-manifest-layout__content\">\n <h1 class=\"a-h1\">{{ '@pry.manifest.title' | i18n }}</h1>\n\n @for (manifest of manifests$ | async; track manifest) {\n <div class=\"o-card-manifest\">\n <div class=\"o-card-manifest__content\">\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.name' | i18n }}</span>\n {{ manifest.name }}\n </p>\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.description' | i18n }}</span>\n {{ manifest.description }}\n </p>\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.modification' | i18n }}</span>\n {{ manifest.modificationDate | date: ('@pry.format.datetime' | i18n) }}\n </p>\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.creation' | i18n }}</span>\n {{ manifest.creationDate | date: ('@pry.format.datetime' | i18n) }}\n </p>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"download(manifest.id, manifest.name)\">\n <pry-icon iconSvg=\"download\"></pry-icon>\n <span class=\"u-visually-hidden\">TODO</span>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"fetch(manifest.id)\">\n <pry-icon iconSvg=\"eye\"></pry-icon>\n <span class=\"u-visually-hidden\">TODO</span>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"delete(manifest.id)\">\n <pry-icon iconSvg=\"delete\"></pry-icon>\n <span class=\"u-visually-hidden\">TODO</span>\n </button>\n </div>\n </div>\n }\n </div>\n</div>\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
10644
10658
  }
10645
10659
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ManifestsComponent, decorators: [{
10646
10660
  type: Component,
10647
- args: [{ selector: 'pry-manifests', template: "<div class=\"o-manifest-layout\">\n <div class=\"o-manifest-layout__toolbox\">\n <button\n class=\"a-btn a-btn--action\"\n type=\"button\"\n (click)=\"triggerFileInput()\"\n title=\"{{ '@pry.manifest.importAlt' | i18n }}\"\n >\n <pry-icon iconSvg=\"upload\"></pry-icon>\n {{ '@pry.manifest.import' | i18n }}\n </button>\n <input\n type=\"file\"\n id=\"file\"\n (change)=\"handleFileInput($event)\"\n #fileInput\n multiple=\"true\"\n class=\"u-visually-hidden\"\n />\n </div>\n\n <div class=\"o-manifest-layout__content\">\n <h1 class=\"a-h1\">{{ '@pry.manifest.title' | i18n }}</h1>\n\n <div class=\"o-card-manifest\" *ngFor=\"let manifest of manifests$ | async\">\n <div class=\"o-card-manifest__content\">\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.name' | i18n }}</span>\n {{ manifest.name }}\n </p>\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.description' | i18n }}</span>\n {{ manifest.description }}\n </p>\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.modification' | i18n }}</span>\n {{ manifest.modificationDate | date: ('@pry.format.datetime' | i18n) }}\n </p>\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.creation' | i18n }}</span>\n {{ manifest.creationDate | date: ('@pry.format.datetime' | i18n) }}\n </p>\n </div>\n\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"download(manifest.id, manifest.name)\">\n <pry-icon iconSvg=\"download\"></pry-icon>\n <span class=\"u-visually-hidden\">TODO</span>\n </button>\n\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"fetch(manifest.id)\">\n <pry-icon iconSvg=\"eye\"></pry-icon>\n <span class=\"u-visually-hidden\">TODO</span>\n </button>\n\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"delete(manifest.id)\">\n <pry-icon iconSvg=\"delete\"></pry-icon>\n <span class=\"u-visually-hidden\">TODO</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n" }]
10661
+ args: [{ selector: 'pry-manifests', template: "<div class=\"o-manifest-layout\">\n <div class=\"o-manifest-layout__toolbox\">\n <button\n class=\"a-btn a-btn--action\"\n type=\"button\"\n (click)=\"triggerFileInput()\"\n title=\"{{ '@pry.manifest.importAlt' | i18n }}\"\n >\n <pry-icon iconSvg=\"upload\"></pry-icon>\n {{ '@pry.manifest.import' | i18n }}\n </button>\n <input\n type=\"file\"\n id=\"file\"\n (change)=\"handleFileInput($event)\"\n #fileInput\n multiple=\"true\"\n class=\"u-visually-hidden\"\n />\n </div>\n\n <div class=\"o-manifest-layout__content\">\n <h1 class=\"a-h1\">{{ '@pry.manifest.title' | i18n }}</h1>\n\n @for (manifest of manifests$ | async; track manifest) {\n <div class=\"o-card-manifest\">\n <div class=\"o-card-manifest__content\">\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.name' | i18n }}</span>\n {{ manifest.name }}\n </p>\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.description' | i18n }}</span>\n {{ manifest.description }}\n </p>\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.modification' | i18n }}</span>\n {{ manifest.modificationDate | date: ('@pry.format.datetime' | i18n) }}\n </p>\n <p class=\"a-p\">\n <span class=\"a-p__title\">{{ '@pry.manifest.creation' | i18n }}</span>\n {{ manifest.creationDate | date: ('@pry.format.datetime' | i18n) }}\n </p>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"download(manifest.id, manifest.name)\">\n <pry-icon iconSvg=\"download\"></pry-icon>\n <span class=\"u-visually-hidden\">TODO</span>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"fetch(manifest.id)\">\n <pry-icon iconSvg=\"eye\"></pry-icon>\n <span class=\"u-visually-hidden\">TODO</span>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"delete(manifest.id)\">\n <pry-icon iconSvg=\"delete\"></pry-icon>\n <span class=\"u-visually-hidden\">TODO</span>\n </button>\n </div>\n </div>\n }\n </div>\n</div>\n" }]
10648
10662
  }], ctorParameters: () => [{ type: i1.Store }], propDecorators: { fileInput: [{
10649
10663
  type: ViewChild,
10650
10664
  args: ['fileInput']
@@ -10669,11 +10683,11 @@ class MetadataComponent {
10669
10683
  this.opened = !this.opened;
10670
10684
  }
10671
10685
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MetadataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10672
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: MetadataComponent, selector: "pry-metadata", inputs: { item: "item" }, ngImport: i0, template: "<div class=\"m-metadata-tag\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n [attr.aria-expanded]=\"opened\"\n [attr.aria-controls]=\"'metadata_' + id\"\n (click)=\"toggle()\"\n >\n <pry-icon [width]=\"18\" [height]=\"18\" iconSvg=\"tags\"></pry-icon>\n {{ '@pry.metadata.view' | i18n }}\n </button>\n\n <ul [id]=\"'metadata_' + id\" class=\"m-metadata-tag__list\">\n <li *ngFor=\"let meta of metadata\" class=\"m-metadata-tag__list__item\">\n <p class=\"m-metadata-tag__chip\" [title]=\"meta.name + ': ' + meta.value\">\n <span class=\"m-metadata-tag__chip__label\">{{ meta.name }}: </span>\n {{ meta.value }}\n </p>\n </li>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
10686
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: MetadataComponent, selector: "pry-metadata", inputs: { item: "item" }, ngImport: i0, template: "<div class=\"m-metadata-tag\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n [attr.aria-expanded]=\"opened\"\n [attr.aria-controls]=\"'metadata_' + id\"\n (click)=\"toggle()\"\n >\n <pry-icon [width]=\"18\" [height]=\"18\" iconSvg=\"tags\"></pry-icon>\n {{ '@pry.metadata.view' | i18n }}\n </button>\n\n <ul [id]=\"'metadata_' + id\" class=\"m-metadata-tag__list\">\n @for (meta of metadata; track meta) {\n <li class=\"m-metadata-tag__list__item\">\n <p class=\"m-metadata-tag__chip\" [title]=\"meta.name + ': ' + meta.value\">\n <span class=\"m-metadata-tag__chip__label\">{{ meta.name }}: </span>\n {{ meta.value }}\n </p>\n </li>\n }\n </ul>\n</div>\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
10673
10687
  }
10674
10688
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MetadataComponent, decorators: [{
10675
10689
  type: Component,
10676
- args: [{ selector: 'pry-metadata', template: "<div class=\"m-metadata-tag\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n [attr.aria-expanded]=\"opened\"\n [attr.aria-controls]=\"'metadata_' + id\"\n (click)=\"toggle()\"\n >\n <pry-icon [width]=\"18\" [height]=\"18\" iconSvg=\"tags\"></pry-icon>\n {{ '@pry.metadata.view' | i18n }}\n </button>\n\n <ul [id]=\"'metadata_' + id\" class=\"m-metadata-tag__list\">\n <li *ngFor=\"let meta of metadata\" class=\"m-metadata-tag__list__item\">\n <p class=\"m-metadata-tag__chip\" [title]=\"meta.name + ': ' + meta.value\">\n <span class=\"m-metadata-tag__chip__label\">{{ meta.name }}: </span>\n {{ meta.value }}\n </p>\n </li>\n </ul>\n</div>\n" }]
10690
+ args: [{ selector: 'pry-metadata', template: "<div class=\"m-metadata-tag\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n [attr.aria-expanded]=\"opened\"\n [attr.aria-controls]=\"'metadata_' + id\"\n (click)=\"toggle()\"\n >\n <pry-icon [width]=\"18\" [height]=\"18\" iconSvg=\"tags\"></pry-icon>\n {{ '@pry.metadata.view' | i18n }}\n </button>\n\n <ul [id]=\"'metadata_' + id\" class=\"m-metadata-tag__list\">\n @for (meta of metadata; track meta) {\n <li class=\"m-metadata-tag__list__item\">\n <p class=\"m-metadata-tag__chip\" [title]=\"meta.name + ': ' + meta.value\">\n <span class=\"m-metadata-tag__chip__label\">{{ meta.name }}: </span>\n {{ meta.value }}\n </p>\n </li>\n }\n </ul>\n</div>\n" }]
10677
10691
  }], ctorParameters: () => [], propDecorators: { item: [{
10678
10692
  type: Input
10679
10693
  }] } });
@@ -10705,11 +10719,11 @@ class VizualizeRawComponent {
10705
10719
  }));
10706
10720
  }
10707
10721
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VizualizeRawComponent, deps: [{ token: RawService }], target: i0.ɵɵFactoryTarget.Component }); }
10708
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: VizualizeRawComponent, selector: "pry-vizualize-raw", inputs: { item: "item", propertyName: "propertyName", alt: "alt" }, ngImport: i0, template: "<ng-container *ngIf=\"rawDatas[item?.id + '@' + propertyName] as rawData\">\n <ng-container *ngIf=\"rawData.type.includes('image')\">\n <img [src]=\"rawData.url\" [alt]=\"altValue\" />\n </ng-container>\n <ng-container *ngIf=\"rawData.type.includes('video')\">\n <video [preload]=\"true\" class=\"preview\" controls>\n <source [src]=\"rawData.url\" [type]=\"rawData.type\" />\n </video>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"!rawDatas[item?.id + '@' + propertyName]\">\n <ng-container *ngIf=\"getRawData(item?.id ?? '', propertyName) | async\"> Downloading...</ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] }); }
10722
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: VizualizeRawComponent, selector: "pry-vizualize-raw", inputs: { item: "item", propertyName: "propertyName", alt: "alt" }, ngImport: i0, template: "@if (rawDatas[item?.id + '@' + propertyName]; as rawData) {\n @if (rawData.type.includes('image')) {\n <img [src]=\"rawData.url\" [alt]=\"altValue\" />\n }\n @if (rawData.type.includes('video')) {\n <video [preload]=\"true\" class=\"preview\" controls>\n <source [src]=\"rawData.url\" [type]=\"rawData.type\" />\n </video>\n }\n}\n@if (!rawDatas[item?.id + '@' + propertyName]) {\n @if (getRawData(item?.id ?? '', propertyName) | async) {\n Downloading...\n }\n}\n", dependencies: [{ kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
10709
10723
  }
10710
10724
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VizualizeRawComponent, decorators: [{
10711
10725
  type: Component,
10712
- args: [{ selector: 'pry-vizualize-raw', template: "<ng-container *ngIf=\"rawDatas[item?.id + '@' + propertyName] as rawData\">\n <ng-container *ngIf=\"rawData.type.includes('image')\">\n <img [src]=\"rawData.url\" [alt]=\"altValue\" />\n </ng-container>\n <ng-container *ngIf=\"rawData.type.includes('video')\">\n <video [preload]=\"true\" class=\"preview\" controls>\n <source [src]=\"rawData.url\" [type]=\"rawData.type\" />\n </video>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"!rawDatas[item?.id + '@' + propertyName]\">\n <ng-container *ngIf=\"getRawData(item?.id ?? '', propertyName) | async\"> Downloading...</ng-container>\n</ng-container>\n" }]
10726
+ args: [{ selector: 'pry-vizualize-raw', template: "@if (rawDatas[item?.id + '@' + propertyName]; as rawData) {\n @if (rawData.type.includes('image')) {\n <img [src]=\"rawData.url\" [alt]=\"altValue\" />\n }\n @if (rawData.type.includes('video')) {\n <video [preload]=\"true\" class=\"preview\" controls>\n <source [src]=\"rawData.url\" [type]=\"rawData.type\" />\n </video>\n }\n}\n@if (!rawDatas[item?.id + '@' + propertyName]) {\n @if (getRawData(item?.id ?? '', propertyName) | async) {\n Downloading...\n }\n}\n" }]
10713
10727
  }], ctorParameters: () => [{ type: RawService }], propDecorators: { item: [{
10714
10728
  type: Input
10715
10729
  }], propertyName: [{
@@ -10793,7 +10807,7 @@ class PryDatasourceCardComponent {
10793
10807
  }
10794
10808
  }
10795
10809
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDatasourceCardComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
10796
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryDatasourceCardComponent, selector: "pry-datasource-card", inputs: { datasource: "datasource", showFooter: "showFooter", isSelectable: "isSelectable", isSelected: "isSelected" }, outputs: { clicked: "clicked" }, ngImport: i0, template: "<div\n class=\"o-datasource-card\"\n [class.-no-footer]=\"!showFooter\"\n [class.-is-selectable]=\"isSelectable\"\n (click)=\"onClick()\"\n>\n <div class=\"o-datasource-card__header\">\n <img\n alt=\"\"\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"datasource.id | translateId: { type: 'datasource', output: 'icon' } | async\"\n />\n <div class=\"o-datasource-card__title\" ellipsis textElementSelector=\".a-h4\">\n <p class=\"a-h4\">{{ datasource.name }}</p>\n </div>\n @if (isSelectable) {\n <pry-checkbox\n (click)=\"$event.preventDefault()\"\n class=\"o-datasource-card__checkbox\"\n [ngModel]=\"isSelected\"\n ></pry-checkbox>\n }\n </div>\n <div class=\"o-datasource-card__content u-display-flex -column -gap-10\">\n @if (datasource.description) {\n <div class=\"o-datasource-card__description\" ellipsis textElementSelector=\".description\">\n <div class=\"description\">{{ truncateDescription(datasource.description, 100) }}</div>\n </div>\n } @else {\n <div class=\"o-datasource-card__description -italic\">{{ '@pry.dataset.noDescription' | i18n }}</div>\n }\n\n <span class=\"o-datasource-card__date\">\n @if (datasource.sourceType === 'dataset') {\n @if (datasource.activeVersion) {\n {{ '@pry.dataset.since_day' | i18n }} {{ datasource.activeVersion.lastModified! | sinceDate }}\n } @else {\n <span class=\"-italic\">{{ '@pry.dataset.noActiveVersion' | i18n }}</span>\n }\n }\n </span>\n @if (datasource.sourceType === 'dataset' && datasource.categories && datasource.categories.length > 0) {\n <div class=\"o-datasource-card__categories u-display-flex -wrap\">\n @for (category of datasource.categories; track category.id) {\n <span class=\"a-chip -md\">{{ category.name }}</span>\n }\n </div>\n }\n </div>\n\n @if (showFooter) {\n <div class=\"o-datasource-card__footer\">\n <button class=\"a-btn\">\n {{ '@pry.dataset.consult' | i18n }}\n <pry-icon [width]=\"20\" [height]=\"20\" iconSvg=\"arrow_right\"></pry-icon>\n </button>\n </div>\n }\n</div>\n", dependencies: [{ kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: EllipsisDirective, selector: "[ellipsis]", inputs: ["textElementSelector"] }, { kind: "component", type: i7.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: SinceDatePipe, name: "sinceDate" }] }); }
10810
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryDatasourceCardComponent, selector: "pry-datasource-card", inputs: { datasource: "datasource", showFooter: "showFooter", isSelectable: "isSelectable", isSelected: "isSelected" }, outputs: { clicked: "clicked" }, ngImport: i0, template: "<div\n class=\"o-datasource-card\"\n [class.-no-footer]=\"!showFooter\"\n [class.-is-selectable]=\"isSelectable\"\n (click)=\"onClick()\"\n>\n <div class=\"o-datasource-card__header\">\n <img\n alt=\"\"\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"datasource.id | translateId: { type: 'datasource', output: 'icon' } | async\"\n />\n <div class=\"o-datasource-card__title\" ellipsis textElementSelector=\".a-h4\">\n <p class=\"a-h4\">{{ datasource.name }}</p>\n </div>\n @if (isSelectable) {\n <pry-checkbox\n (click)=\"$event.preventDefault()\"\n class=\"o-datasource-card__checkbox\"\n [ngModel]=\"isSelected\"\n ></pry-checkbox>\n }\n </div>\n <div class=\"o-datasource-card__content u-display-flex -column -gap-10\">\n @if (datasource.description) {\n <div class=\"o-datasource-card__description\" ellipsis textElementSelector=\".description\">\n <div class=\"description\">{{ truncateDescription(datasource.description, 100) }}</div>\n </div>\n } @else {\n <div class=\"o-datasource-card__description -italic\">{{ '@pry.dataset.noDescription' | i18n }}</div>\n }\n\n <span class=\"o-datasource-card__date\">\n @if (datasource.sourceType === 'dataset') {\n @if (datasource.activeVersion) {\n {{ '@pry.dataset.since_day' | i18n }} {{ datasource.activeVersion.lastModified! | sinceDate }}\n } @else {\n <span class=\"-italic\">{{ '@pry.dataset.noActiveVersion' | i18n }}</span>\n }\n }\n </span>\n @if (datasource.sourceType === 'dataset' && datasource.categories && datasource.categories.length > 0) {\n <div class=\"o-datasource-card__categories u-display-flex -wrap\">\n @for (category of datasource.categories; track category.id) {\n <span class=\"a-chip -md\">{{ category.name }}</span>\n }\n </div>\n }\n </div>\n\n @if (showFooter) {\n <div class=\"o-datasource-card__footer\">\n <button class=\"a-btn\">\n {{ '@pry.dataset.consult' | i18n }}\n <pry-icon [width]=\"20\" [height]=\"20\" iconSvg=\"arrow_right\"></pry-icon>\n </button>\n </div>\n }\n</div>\n", dependencies: [{ kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: EllipsisDirective, selector: "[ellipsis]", inputs: ["textElementSelector"] }, { kind: "component", type: i7.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: SinceDatePipe, name: "sinceDate" }] }); }
10797
10811
  }
10798
10812
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDatasourceCardComponent, decorators: [{
10799
10813
  type: Component,
@@ -10882,7 +10896,7 @@ class PryDatasourceListComponent extends SubscriptionnerDirective {
10882
10896
  }
10883
10897
  }
10884
10898
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDatasourceListComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
10885
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryDatasourceListComponent, selector: "pry-datasource-list", inputs: { mode: "mode", selectedDatasources: "selectedDatasources" }, outputs: { consultedDataset: "consultedDataset", datasourceSelected: "datasourceSelected", searchOrCategoryChanged: "searchOrCategoryChanged" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-datasource-list__header u-display-flex\">\n <div class=\"o-datasource-list__search m-form-label-field\">\n <label class=\"a-label\" id=\"catalog-search-label\" for=\"catalog-search\">{{ '@pry.dataset.search' | i18n }}</label>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.dataset.searchPlaceholder' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n <pry-icon class=\"search-icon\" iconSvg=\"search\" [width]=\"20\" [height]=\"20\"></pry-icon>\n </div>\n <div class=\"o-datasource-list__categories m-form-label-field\">\n <label class=\"a-label\" id=\"tags-label\" for=\"catalog-category-search\">{{ '@pry.dataset.filter' | i18n }}</label>\n <pry-select\n id=\"catalog-category-search\"\n [ngModel]=\"selectedCategories\"\n (ngModelChange)=\"this.selectedCategories$.next($event)\"\n [items]=\"categories$ | async\"\n bindLabel=\"name\"\n aria-labelledby=\"tags-label\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n [placeholder]=\"'@pry.dataset.filterPlaceholder' | i18n\"\n ></pry-select>\n </div>\n</div>\n<div class=\"o-datasource-list__content\">\n @if ((_mode$ | async) === 'list') {\n @for (datasource of filteredDatasources$ | async; track datasource.id) {\n <pry-datasource-card\n [datasource]=\"datasource\"\n [isSelectable]=\"false\"\n [showFooter]=\"true\"\n (clicked)=\"onDatasourceClick($event)\"\n ></pry-datasource-card>\n }\n } @else if ((_mode$ | async) === 'selector') {\n @for (datasource of filteredDatasources$ | async; track datasource.id) {\n <pry-datasource-card\n [datasource]=\"datasource\"\n [isSelectable]=\"true\"\n [showFooter]=\"false\"\n (clicked)=\"onDatasourceClick($event)\"\n [isSelected]=\"datasource.isSelected ?? false\"\n ></pry-datasource-card>\n }\n }\n</div>\n", dependencies: [{ kind: "directive", type: i3$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked", "pressedEnter"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryDatasourceCardComponent, selector: "pry-datasource-card", inputs: ["datasource", "showFooter", "isSelectable", "isSelected"], outputs: ["clicked"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
10899
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryDatasourceListComponent, selector: "pry-datasource-list", inputs: { mode: "mode", selectedDatasources: "selectedDatasources" }, outputs: { consultedDataset: "consultedDataset", datasourceSelected: "datasourceSelected", searchOrCategoryChanged: "searchOrCategoryChanged" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-datasource-list__header u-display-flex\">\n <div class=\"o-datasource-list__search m-form-label-field\">\n <label class=\"a-label\" id=\"catalog-search-label\" for=\"catalog-search\">{{ '@pry.dataset.search' | i18n }}</label>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.dataset.searchPlaceholder' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n <pry-icon class=\"search-icon\" iconSvg=\"search\" [width]=\"20\" [height]=\"20\"></pry-icon>\n </div>\n <div class=\"o-datasource-list__categories m-form-label-field\">\n <label class=\"a-label\" id=\"tags-label\" for=\"catalog-category-search\">{{ '@pry.dataset.filter' | i18n }}</label>\n <pry-select\n id=\"catalog-category-search\"\n [ngModel]=\"selectedCategories\"\n (ngModelChange)=\"this.selectedCategories$.next($event)\"\n [items]=\"categories$ | async\"\n bindLabel=\"name\"\n aria-labelledby=\"tags-label\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n [placeholder]=\"'@pry.dataset.filterPlaceholder' | i18n\"\n ></pry-select>\n </div>\n</div>\n<div class=\"o-datasource-list__content\">\n @if ((_mode$ | async) === 'list') {\n @for (datasource of filteredDatasources$ | async; track datasource.id) {\n <pry-datasource-card\n [datasource]=\"datasource\"\n [isSelectable]=\"false\"\n [showFooter]=\"true\"\n (clicked)=\"onDatasourceClick($event)\"\n ></pry-datasource-card>\n }\n } @else if ((_mode$ | async) === 'selector') {\n @for (datasource of filteredDatasources$ | async; track datasource.id) {\n <pry-datasource-card\n [datasource]=\"datasource\"\n [isSelectable]=\"true\"\n [showFooter]=\"false\"\n (clicked)=\"onDatasourceClick($event)\"\n [isSelected]=\"datasource.isSelected ?? false\"\n ></pry-datasource-card>\n }\n }\n</div>\n", dependencies: [{ kind: "directive", type: i2$2.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: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked", "pressedEnter"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryDatasourceCardComponent, selector: "pry-datasource-card", inputs: ["datasource", "showFooter", "isSelectable", "isSelected"], outputs: ["clicked"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
10886
10900
  }
10887
10901
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryDatasourceListComponent, decorators: [{
10888
10902
  type: Component,
@@ -10949,11 +10963,11 @@ class DatasourceSelectorComponent extends SubscriptionnerDirective {
10949
10963
  this.cdr.detectChanges();
10950
10964
  }
10951
10965
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DatasourceSelectorComponent, deps: [{ token: i1.Store }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
10952
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: DatasourceSelectorComponent, selector: "pry-datasource-selector", inputs: { showButtons: "showButtons", showTitle: "showTitle", manifest: "manifest" }, outputs: { previousTab: "previousTab", nextTab: "nextTab", cancel: "cancel", validated: "validated", itemsChanged: "itemsChanged" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-datasource-selector u-display-flex -column\">\n @if (showTitle) {\n <h2 class=\"u-self-center\">{{ '@pry.components.datasourceSelector.select' | i18n }}</h2>\n }\n <div>\n <h3>\n {{ '@pry.components.datasourceSelector.selection' | i18n }} ({{ ((selectedDatasources$ | async) ?? []).length }})\n </h3>\n <div class=\"o-datasource-selector__chips u-display-flex -wrap -gap-10\">\n @if ((selectedDatasources$ | async)?.length === 0) {\n <span class=\"a-label -italic\">{{ '@pry.components.datasourceSelector.noItemSelected' | i18n }}</span>\n } @else {\n @for (datasource of selectedDatasources$ | async; track datasource.id) {\n <button\n class=\"a-chip a-chip--ghost -lg a-tooltip\"\n [attr.data-tooltip]=\"'@pry.components.datasourceSelector.unselectItem' | i18n\"\n type=\"button\"\n (click)=\"toggleSelection(datasource.id)\"\n >\n <pry-icon iconSvg=\"close\" [width]=\"15\" [height]=\"15\"></pry-icon>\n {{ datasource.name }}\n <pry-icon *ngIf=\"isGeo(datasource)\" iconSvg=\"globe\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n }\n }\n </div>\n </div>\n <pry-datasource-list\n mode=\"selector\"\n [selectedDatasources]=\"(selectedIds$ | async) ?? []\"\n (datasourceSelected)=\"updateDatasourceList($event)\"\n (searchOrCategoryChanged)=\"searchOrCategoryChanged$.next()\"\n ></pry-datasource-list>\n @if (showButtons) {\n <div class=\"m-btn-group o-datasource-selector__footer\">\n <button type=\"button\" (click)=\"cancel.emit()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"button\"\n (click)=\"validated.emit()\"\n #validate\n (keydown.tab)=\"nextTab.emit()\"\n class=\"a-btn a-btn--primary\"\n >\n {{ '@pry.toolbox.manifest.validated' | i18n }}\n </button>\n </div>\n }\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryDatasourceListComponent, selector: "pry-datasource-list", inputs: ["mode", "selectedDatasources"], outputs: ["consultedDataset", "datasourceSelected", "searchOrCategoryChanged"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
10966
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: DatasourceSelectorComponent, selector: "pry-datasource-selector", inputs: { showButtons: "showButtons", showTitle: "showTitle", manifest: "manifest" }, outputs: { previousTab: "previousTab", nextTab: "nextTab", cancel: "cancel", validated: "validated", itemsChanged: "itemsChanged" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-datasource-selector u-display-flex -column\">\n @if (showTitle) {\n <h2 class=\"u-self-center\">{{ '@pry.components.datasourceSelector.select' | i18n }}</h2>\n }\n <div>\n <h3>\n {{ '@pry.components.datasourceSelector.selection' | i18n }} ({{ ((selectedDatasources$ | async) ?? []).length }})\n </h3>\n <div class=\"o-datasource-selector__chips u-display-flex -wrap -gap-10\">\n @if ((selectedDatasources$ | async)?.length === 0) {\n <span class=\"a-label -italic\">{{ '@pry.components.datasourceSelector.noItemSelected' | i18n }}</span>\n } @else {\n @for (datasource of selectedDatasources$ | async; track datasource.id) {\n <button\n class=\"a-chip a-chip--ghost -lg a-tooltip\"\n [attr.data-tooltip]=\"'@pry.components.datasourceSelector.unselectItem' | i18n\"\n type=\"button\"\n (click)=\"toggleSelection(datasource.id)\"\n >\n <pry-icon iconSvg=\"close\" [width]=\"15\" [height]=\"15\"></pry-icon>\n {{ datasource.name }}\n @if (isGeo(datasource)) {\n <pry-icon iconSvg=\"globe\" [width]=\"18\" [height]=\"18\"></pry-icon>\n }\n </button>\n }\n }\n </div>\n </div>\n <pry-datasource-list\n mode=\"selector\"\n [selectedDatasources]=\"(selectedIds$ | async) ?? []\"\n (datasourceSelected)=\"updateDatasourceList($event)\"\n (searchOrCategoryChanged)=\"searchOrCategoryChanged$.next()\"\n ></pry-datasource-list>\n @if (showButtons) {\n <div class=\"m-btn-group o-datasource-selector__footer\">\n <button type=\"button\" (click)=\"cancel.emit()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"button\"\n (click)=\"validated.emit()\"\n #validate\n (keydown.tab)=\"nextTab.emit()\"\n class=\"a-btn a-btn--primary\"\n >\n {{ '@pry.toolbox.manifest.validated' | i18n }}\n </button>\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryDatasourceListComponent, selector: "pry-datasource-list", inputs: ["mode", "selectedDatasources"], outputs: ["consultedDataset", "datasourceSelected", "searchOrCategoryChanged"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
10953
10967
  }
10954
10968
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DatasourceSelectorComponent, decorators: [{
10955
10969
  type: Component,
10956
- args: [{ selector: 'pry-datasource-selector', template: "<div class=\"o-datasource-selector u-display-flex -column\">\n @if (showTitle) {\n <h2 class=\"u-self-center\">{{ '@pry.components.datasourceSelector.select' | i18n }}</h2>\n }\n <div>\n <h3>\n {{ '@pry.components.datasourceSelector.selection' | i18n }} ({{ ((selectedDatasources$ | async) ?? []).length }})\n </h3>\n <div class=\"o-datasource-selector__chips u-display-flex -wrap -gap-10\">\n @if ((selectedDatasources$ | async)?.length === 0) {\n <span class=\"a-label -italic\">{{ '@pry.components.datasourceSelector.noItemSelected' | i18n }}</span>\n } @else {\n @for (datasource of selectedDatasources$ | async; track datasource.id) {\n <button\n class=\"a-chip a-chip--ghost -lg a-tooltip\"\n [attr.data-tooltip]=\"'@pry.components.datasourceSelector.unselectItem' | i18n\"\n type=\"button\"\n (click)=\"toggleSelection(datasource.id)\"\n >\n <pry-icon iconSvg=\"close\" [width]=\"15\" [height]=\"15\"></pry-icon>\n {{ datasource.name }}\n <pry-icon *ngIf=\"isGeo(datasource)\" iconSvg=\"globe\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n }\n }\n </div>\n </div>\n <pry-datasource-list\n mode=\"selector\"\n [selectedDatasources]=\"(selectedIds$ | async) ?? []\"\n (datasourceSelected)=\"updateDatasourceList($event)\"\n (searchOrCategoryChanged)=\"searchOrCategoryChanged$.next()\"\n ></pry-datasource-list>\n @if (showButtons) {\n <div class=\"m-btn-group o-datasource-selector__footer\">\n <button type=\"button\" (click)=\"cancel.emit()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"button\"\n (click)=\"validated.emit()\"\n #validate\n (keydown.tab)=\"nextTab.emit()\"\n class=\"a-btn a-btn--primary\"\n >\n {{ '@pry.toolbox.manifest.validated' | i18n }}\n </button>\n </div>\n }\n</div>\n" }]
10970
+ args: [{ selector: 'pry-datasource-selector', template: "<div class=\"o-datasource-selector u-display-flex -column\">\n @if (showTitle) {\n <h2 class=\"u-self-center\">{{ '@pry.components.datasourceSelector.select' | i18n }}</h2>\n }\n <div>\n <h3>\n {{ '@pry.components.datasourceSelector.selection' | i18n }} ({{ ((selectedDatasources$ | async) ?? []).length }})\n </h3>\n <div class=\"o-datasource-selector__chips u-display-flex -wrap -gap-10\">\n @if ((selectedDatasources$ | async)?.length === 0) {\n <span class=\"a-label -italic\">{{ '@pry.components.datasourceSelector.noItemSelected' | i18n }}</span>\n } @else {\n @for (datasource of selectedDatasources$ | async; track datasource.id) {\n <button\n class=\"a-chip a-chip--ghost -lg a-tooltip\"\n [attr.data-tooltip]=\"'@pry.components.datasourceSelector.unselectItem' | i18n\"\n type=\"button\"\n (click)=\"toggleSelection(datasource.id)\"\n >\n <pry-icon iconSvg=\"close\" [width]=\"15\" [height]=\"15\"></pry-icon>\n {{ datasource.name }}\n @if (isGeo(datasource)) {\n <pry-icon iconSvg=\"globe\" [width]=\"18\" [height]=\"18\"></pry-icon>\n }\n </button>\n }\n }\n </div>\n </div>\n <pry-datasource-list\n mode=\"selector\"\n [selectedDatasources]=\"(selectedIds$ | async) ?? []\"\n (datasourceSelected)=\"updateDatasourceList($event)\"\n (searchOrCategoryChanged)=\"searchOrCategoryChanged$.next()\"\n ></pry-datasource-list>\n @if (showButtons) {\n <div class=\"m-btn-group o-datasource-selector__footer\">\n <button type=\"button\" (click)=\"cancel.emit()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"button\"\n (click)=\"validated.emit()\"\n #validate\n (keydown.tab)=\"nextTab.emit()\"\n class=\"a-btn a-btn--primary\"\n >\n {{ '@pry.toolbox.manifest.validated' | i18n }}\n </button>\n </div>\n }\n</div>\n" }]
10957
10971
  }], ctorParameters: () => [{ type: i1.Store }, { type: i0.ChangeDetectorRef }], propDecorators: { showButtons: [{
10958
10972
  type: Input
10959
10973
  }], showTitle: [{
@@ -11372,13 +11386,13 @@ class PryWidgetHeaderComponent extends SubscriptionnerDirective {
11372
11386
  this.subscription?.unsubscribe();
11373
11387
  this.openSub?.unsubscribe();
11374
11388
  }
11375
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryWidgetHeaderComponent, deps: [{ token: i1.Store }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: ToolboxMenuService }], target: i0.ɵɵFactoryTarget.Component }); }
11376
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: { manifest: "manifest", openData$: "openData$", additionalOptions: "additionalOptions", headerOptions: "headerOptions", displayCount: "displayCount", datasourceIds: "datasourceIds", widgetIndex: "widgetIndex" }, outputs: { manifestModified: "manifestModified" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }, { propertyName: "templateModal", first: true, predicate: ["templateModal"], descendants: true, read: TemplateRef }, { propertyName: "toggle", first: true, predicate: ["toggle"], descendants: true, read: TemplateRef }, { propertyName: "overlayMenu", first: true, predicate: ["overlayMenu"], descendants: true, read: TemplateRef }, { propertyName: "overlayCatalog", first: true, predicate: ["overlayCatalog"], descendants: true, read: TemplateRef }, { propertyName: "overlaySpot", first: true, predicate: ["overlaySpot"], descendants: true, read: TemplateRef }, { propertyName: "togglePanel", first: true, predicate: ["togglePanel"], descendants: true }, { propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "validate", first: true, predicate: ["validate"], descendants: true }, { propertyName: "validateCatalog", first: true, predicate: ["validateCatalog"], descendants: true }, { propertyName: "cancel", first: true, predicate: ["cancel"], descendants: true }, { propertyName: "crossCatalog", first: true, predicate: ["crossCatalog"], descendants: true }, { propertyName: "inputCatalog", first: true, predicate: ["inputCatalog"], descendants: true }, { propertyName: "menuList", first: true, predicate: ["menuList"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"o-widget__header\">\n <div class=\"o-widget__header__content\">\n <h2 class=\"o-widget__header__content__title\" *ngIf=\"(manifest$ | async)?.title; else querySelector\">\n {{ (manifest$ | async)?.title }}\n </h2>\n <ng-template #querySelector>\n <div *ngFor=\"let ds of usedDatasources$ | async\" class=\"o-widget__header__content__query\">\n <ng-container\n *ngIf=\"ds.id | translateId: { type: 'datasource', output: 'icon', noDefault: true } | async as url\"\n >\n <img [height]=\"20\" [src]=\"url\" [width]=\"20\" alt=\"\" class=\"o-widget__header__content__query__icon\" />\n </ng-container>\n <h3 class=\"o-widget__header__content__query__name\">{{ ds.name }}</h3>\n <h3 class=\"o-widget__header__content__query__name\" *ngIf=\"displayCount && !isGeo(ds)\">\n ({{ [ds.id] | resultSetSize | async }})\n </h3>\n </div>\n <div *ngIf=\"((usedDatasources$ | async) ?? []).length === 0\" class=\"o-widget__header__content__no-data\">\n <h2 class=\"o-widget__header__content__title\">{{ '@pry.widget.noData' | i18n }}</h2>\n </div>\n </ng-template>\n </div>\n <div class=\"m-btn-group\" *ngIf=\"displayContextMenu$ | async as options\">\n <button\n type=\"button\"\n id=\"dialog_Menu\"\n aria-controls=\"menu\"\n [attr.aria-expanded]=\"this.menu\"\n #togglePanel\n class=\"a-btn a-btn--more\"\n (click)=\"menuOpen($event)\"\n >\n <pry-icon [height]=\"25\" [width]=\"25\" iconSvg=\"more_horiz\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.openMenuWidget' | i18n }}</span>\n </button>\n </div>\n</div>\n\n<ng-template #overlayMenu>\n <div class=\"m-context-menu\" *ngIf=\"displayContextMenu$ | async as options\">\n <ul\n class=\"m-context-menu__list\"\n #menuList\n id=\"menu\"\n role=\"menu\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Menu\"\n (keydown.arrowDown)=\"onArrowDown()\"\n (keydown.arrowUp)=\"onArrowUp()\"\n (keydown.escape)=\"menuOpen()\"\n >\n <li\n class=\"m-context-menu__list__item\"\n role=\"none\"\n *ngIf=\"options === true || options['datasourceSelection'] === true\"\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n id=\"toggleActions\"\n (click)=\"toggleDatasourceSelection()\"\n *pryAccess=\"{ module: 'dashboard', page: 'widget', action: 'select_named_query' }\"\n class=\"a-btn\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"stack-fill\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"options === true || options!['parameters'] === true\">\n <ng-content></ng-content>\n </li>\n <ng-container *ngIf=\"options === true || options!['window'] === true\">\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngFor=\"let targetIndex of targetIndexes$ | async\">\n <button\n type=\"button\"\n (click)=\"moveInNewWindow(_widgetIndex, targetIndex)\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"launch\"></pry-icon>\n {{\n (targetIndex !== -1 ? '@pry.widget.target.existing' : '@pry.widget.target.new')\n | i18n: { targetIndex: this.targetIndex + 1 }\n }}\n </button>\n </li>\n </ng-container>\n <li\n class=\"m-context-menu__list__item\"\n role=\"none\"\n *ngIf=\"hasGrid && (options === true || options!['changeSpot'] === true)\"\n >\n <button type=\"button\" role=\"menuitem\" (click)=\"toggleChangeSpot()\" class=\"a-btn\" tabindex=\"-1\">\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"move\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.changeSpot' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"options === true || options!['maximize'] === true\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"maximize(_widgetIndex)\"\n class=\"a-btn\"\n (keydown.escape)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"fullscreen\"></pry-icon>\n {{ '@pry.widget.target.maximize' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"options === true || options!['addToCatalog'] === true\">\n <button type=\"button\" role=\"menuitem\" tabindex=\"-1\" (click)=\"toggleCatalog()\" class=\"a-btn\">\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"library_add\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.catalogWidget' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"options === true || options!['delete'] === true\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"toggleRemoveConfirm($event)\"\n class=\"a-btn\"\n (keydown.tab)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"delete\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.deleteWidget' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngFor=\"let option of additionalOptions\">\n <button\n type=\"button\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"executeAction(option)\"\n [disabled]=\"isActionDisabled(option)\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" [iconSvg]=\"option.icon\"></pry-icon>\n {{ option.label | i18n }}\n </button>\n </li>\n </ul>\n </div>\n</ng-template>\n\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n (keydown.escape)=\"cancelRemoveConfirm()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #cross (click)=\"cancelRemoveConfirm()\">\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=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\" (keydown.tab)=\"focusCrossElement()\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #template>\n <pry-datasource-selector\n [manifest]=\"manifest$ | async\"\n (cancel)=\"toggleDatasourceSelection()\"\n (validated)=\"emitManifest()\"\n (nextTab)=\"focusInputCatalog()\"\n (previousTab)=\"focusValidation()\"\n (itemsChanged)=\"datasourcesChanged($event)\"\n ></pry-datasource-selector>\n</ng-template>\n\n<ng-template #overlayCatalog>\n <div\n class=\"o-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Catalog\"\n (keydown.escape)=\"toggleCatalog()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.defineCatalog' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n (keydown.shift.tab)=\"focusValidation()\"\n #crossCatalog\n (click)=\"toggleCatalog()\"\n >\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=\"m-form-label-field\">\n <label class=\"a-label\" for=\"name\">{{ '@pry.toolbox.catalog.label' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.name\" id=\"name\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"description\">{{ '@pry.toolbox.catalog.description' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.description\" id=\"description\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <pry-select-image\n [iconUrl]=\"catalogInfo.image\"\n (changed)=\"catalogInfo.image = $event\"\n [mode]=\"type\"\n ></pry-select-image>\n </div>\n <div class=\"m-btn-group\">\n <button\n type=\"button\"\n (click)=\"toggleCatalog()\"\n #cancel\n (keydown.tab)=\"disableValidation()\"\n class=\"a-btn a-btn--secondary\"\n >\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n #validateCatalog\n (click)=\"confirmCatalog()\"\n [disabled]=\"!toolboxMenuService.isValidForCatalog(catalogInfo.name)\"\n class=\"a-btn a-btn--primary\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #overlaySpot>\n <div class=\"o-modal -place\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.tooltip.changeSpot' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"toggleChangeSpot()\">\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-dashboard\n [staticDashboard]=\"targetManifest!\"\n [breakpoint]=\"10\"\n [noBackground]=\"true\"\n [forceModeEdition]=\"false\"\n ></pry-dashboard>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: PrySelectImageComponent, selector: "pry-select-image", inputs: ["iconUrl", "size", "mode"], outputs: ["toggled", "changed"] }, { kind: "component", type: DashboardComponent, selector: "pry-dashboard", inputs: ["staticDashboard", "forceModeEdition", "CloseOnDragOut", "displayOptions", "noBackground", "breakpoint"], outputs: ["rowHeight", "rows"] }, { kind: "component", type: DatasourceSelectorComponent, selector: "pry-datasource-selector", inputs: ["showButtons", "showTitle", "manifest"], outputs: ["previousTab", "nextTab", "cancel", "validated", "itemsChanged"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: ResultSetSizePipe, name: "resultSetSize" }] }); }
11389
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryWidgetHeaderComponent, deps: [{ token: i1.Store }, { token: i2$1.Overlay }, { token: i0.ViewContainerRef }, { token: ToolboxMenuService }], target: i0.ɵɵFactoryTarget.Component }); }
11390
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: { manifest: "manifest", openData$: "openData$", additionalOptions: "additionalOptions", headerOptions: "headerOptions", displayCount: "displayCount", datasourceIds: "datasourceIds", widgetIndex: "widgetIndex" }, outputs: { manifestModified: "manifestModified" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }, { propertyName: "templateModal", first: true, predicate: ["templateModal"], descendants: true, read: TemplateRef }, { propertyName: "toggle", first: true, predicate: ["toggle"], descendants: true, read: TemplateRef }, { propertyName: "overlayMenu", first: true, predicate: ["overlayMenu"], descendants: true, read: TemplateRef }, { propertyName: "overlayCatalog", first: true, predicate: ["overlayCatalog"], descendants: true, read: TemplateRef }, { propertyName: "overlaySpot", first: true, predicate: ["overlaySpot"], descendants: true, read: TemplateRef }, { propertyName: "togglePanel", first: true, predicate: ["togglePanel"], descendants: true }, { propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "validate", first: true, predicate: ["validate"], descendants: true }, { propertyName: "validateCatalog", first: true, predicate: ["validateCatalog"], descendants: true }, { propertyName: "cancel", first: true, predicate: ["cancel"], descendants: true }, { propertyName: "crossCatalog", first: true, predicate: ["crossCatalog"], descendants: true }, { propertyName: "inputCatalog", first: true, predicate: ["inputCatalog"], descendants: true }, { propertyName: "menuList", first: true, predicate: ["menuList"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"o-widget__header\">\n <div class=\"o-widget__header__content\">\n @if ((manifest$ | async)?.title) {\n <h2 class=\"o-widget__header__content__title\">\n {{ (manifest$ | async)?.title }}\n </h2>\n } @else {\n @for (ds of usedDatasources$ | async; track ds) {\n <div class=\"o-widget__header__content__query\">\n @if (ds.id | translateId: { type: 'datasource', output: 'icon', noDefault: true } | async; as url) {\n <img [height]=\"20\" [src]=\"url\" [width]=\"20\" alt=\"\" class=\"o-widget__header__content__query__icon\" />\n }\n <h3 class=\"o-widget__header__content__query__name\">{{ ds.name }}</h3>\n @if (displayCount && !isGeo(ds)) {\n <h3 class=\"o-widget__header__content__query__name\">\n ({{ [ds.id] | resultSetSize | async }})\n </h3>\n }\n </div>\n }\n @if (((usedDatasources$ | async) ?? []).length === 0) {\n <div class=\"o-widget__header__content__no-data\">\n <h2 class=\"o-widget__header__content__title\">{{ '@pry.widget.noData' | i18n }}</h2>\n </div>\n }\n }\n </div>\n @if (displayContextMenu$ | async; as options) {\n <div class=\"m-btn-group\">\n <button\n type=\"button\"\n id=\"dialog_Menu\"\n aria-controls=\"menu\"\n [attr.aria-expanded]=\"this.menu\"\n #togglePanel\n class=\"a-btn a-btn--more\"\n (click)=\"menuOpen($event)\"\n >\n <pry-icon [height]=\"25\" [width]=\"25\" iconSvg=\"more_horiz\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.openMenuWidget' | i18n }}</span>\n </button>\n </div>\n }\n</div>\n\n<ng-template #overlayMenu>\n @if (displayContextMenu$ | async; as options) {\n <div class=\"m-context-menu\">\n <ul\n class=\"m-context-menu__list\"\n #menuList\n id=\"menu\"\n role=\"menu\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Menu\"\n (keydown.arrowDown)=\"onArrowDown()\"\n (keydown.arrowUp)=\"onArrowUp()\"\n (keydown.escape)=\"menuOpen()\"\n >\n @if (options === true || options['datasourceSelection'] === true) {\n <li\n class=\"m-context-menu__list__item\"\n role=\"none\"\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n id=\"toggleActions\"\n (click)=\"toggleDatasourceSelection()\"\n *pryAccess=\"{ module: 'dashboard', page: 'widget', action: 'select_named_query' }\"\n class=\"a-btn\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"stack-fill\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </li>\n }\n @if (options === true || options!['parameters'] === true) {\n <li class=\"m-context-menu__list__item\" role=\"none\">\n <ng-content></ng-content>\n </li>\n }\n @if (options === true || options!['window'] === true) {\n @for (targetIndex of targetIndexes$ | async; track targetIndex) {\n <li class=\"m-context-menu__list__item\" role=\"none\">\n <button\n type=\"button\"\n (click)=\"moveInNewWindow(_widgetIndex, targetIndex)\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"launch\"></pry-icon>\n {{\n (targetIndex !== -1 ? '@pry.widget.target.existing' : '@pry.widget.target.new')\n | i18n: { targetIndex: this.targetIndex + 1 }\n }}\n </button>\n </li>\n }\n }\n @if (hasGrid && (options === true || options!['changeSpot'] === true)) {\n <li\n class=\"m-context-menu__list__item\"\n role=\"none\"\n >\n <button type=\"button\" role=\"menuitem\" (click)=\"toggleChangeSpot()\" class=\"a-btn\" tabindex=\"-1\">\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"move\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.changeSpot' | i18n }}</span>\n </button>\n </li>\n }\n @if (options === true || options!['maximize'] === true) {\n <li class=\"m-context-menu__list__item\" role=\"none\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"maximize(_widgetIndex)\"\n class=\"a-btn\"\n (keydown.escape)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"fullscreen\"></pry-icon>\n {{ '@pry.widget.target.maximize' | i18n }}\n </button>\n </li>\n }\n @if (options === true || options!['addToCatalog'] === true) {\n <li class=\"m-context-menu__list__item\" role=\"none\">\n <button type=\"button\" role=\"menuitem\" tabindex=\"-1\" (click)=\"toggleCatalog()\" class=\"a-btn\">\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"library_add\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.catalogWidget' | i18n }}</span>\n </button>\n </li>\n }\n @if (options === true || options!['delete'] === true) {\n <li class=\"m-context-menu__list__item\" role=\"none\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"toggleRemoveConfirm($event)\"\n class=\"a-btn\"\n (keydown.tab)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"delete\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.deleteWidget' | i18n }}</span>\n </button>\n </li>\n }\n @for (option of additionalOptions; track option) {\n <li class=\"m-context-menu__list__item\" role=\"none\">\n <button\n type=\"button\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"executeAction(option)\"\n [disabled]=\"isActionDisabled(option)\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" [iconSvg]=\"option.icon\"></pry-icon>\n {{ option.label | i18n }}\n </button>\n </li>\n }\n </ul>\n </div>\n }\n</ng-template>\n\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n (keydown.escape)=\"cancelRemoveConfirm()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #cross (click)=\"cancelRemoveConfirm()\">\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=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\" (keydown.tab)=\"focusCrossElement()\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #template>\n <pry-datasource-selector\n [manifest]=\"manifest$ | async\"\n (cancel)=\"toggleDatasourceSelection()\"\n (validated)=\"emitManifest()\"\n (nextTab)=\"focusInputCatalog()\"\n (previousTab)=\"focusValidation()\"\n (itemsChanged)=\"datasourcesChanged($event)\"\n ></pry-datasource-selector>\n</ng-template>\n\n<ng-template #overlayCatalog>\n <div\n class=\"o-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Catalog\"\n (keydown.escape)=\"toggleCatalog()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.defineCatalog' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n (keydown.shift.tab)=\"focusValidation()\"\n #crossCatalog\n (click)=\"toggleCatalog()\"\n >\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=\"m-form-label-field\">\n <label class=\"a-label\" for=\"name\">{{ '@pry.toolbox.catalog.label' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.name\" id=\"name\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"description\">{{ '@pry.toolbox.catalog.description' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.description\" id=\"description\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <pry-select-image\n [iconUrl]=\"catalogInfo.image\"\n (changed)=\"catalogInfo.image = $event\"\n [mode]=\"type\"\n ></pry-select-image>\n </div>\n <div class=\"m-btn-group\">\n <button\n type=\"button\"\n (click)=\"toggleCatalog()\"\n #cancel\n (keydown.tab)=\"disableValidation()\"\n class=\"a-btn a-btn--secondary\"\n >\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n #validateCatalog\n (click)=\"confirmCatalog()\"\n [disabled]=\"!toolboxMenuService.isValidForCatalog(catalogInfo.name)\"\n class=\"a-btn a-btn--primary\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #overlaySpot>\n <div class=\"o-modal -place\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.tooltip.changeSpot' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"toggleChangeSpot()\">\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-dashboard\n [staticDashboard]=\"targetManifest!\"\n [breakpoint]=\"10\"\n [noBackground]=\"true\"\n [forceModeEdition]=\"false\"\n ></pry-dashboard>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2$2.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: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: PrySelectImageComponent, selector: "pry-select-image", inputs: ["iconUrl", "size", "mode"], outputs: ["toggled", "changed"] }, { kind: "component", type: DashboardComponent, selector: "pry-dashboard", inputs: ["staticDashboard", "forceModeEdition", "CloseOnDragOut", "displayOptions", "noBackground", "breakpoint"], outputs: ["rowHeight", "rows"] }, { kind: "component", type: DatasourceSelectorComponent, selector: "pry-datasource-selector", inputs: ["showButtons", "showTitle", "manifest"], outputs: ["previousTab", "nextTab", "cancel", "validated", "itemsChanged"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: ResultSetSizePipe, name: "resultSetSize" }] }); }
11377
11391
  }
11378
11392
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PryWidgetHeaderComponent, decorators: [{
11379
11393
  type: Component,
11380
- args: [{ selector: 'pry-widget-header', template: "<div class=\"o-widget__header\">\n <div class=\"o-widget__header__content\">\n <h2 class=\"o-widget__header__content__title\" *ngIf=\"(manifest$ | async)?.title; else querySelector\">\n {{ (manifest$ | async)?.title }}\n </h2>\n <ng-template #querySelector>\n <div *ngFor=\"let ds of usedDatasources$ | async\" class=\"o-widget__header__content__query\">\n <ng-container\n *ngIf=\"ds.id | translateId: { type: 'datasource', output: 'icon', noDefault: true } | async as url\"\n >\n <img [height]=\"20\" [src]=\"url\" [width]=\"20\" alt=\"\" class=\"o-widget__header__content__query__icon\" />\n </ng-container>\n <h3 class=\"o-widget__header__content__query__name\">{{ ds.name }}</h3>\n <h3 class=\"o-widget__header__content__query__name\" *ngIf=\"displayCount && !isGeo(ds)\">\n ({{ [ds.id] | resultSetSize | async }})\n </h3>\n </div>\n <div *ngIf=\"((usedDatasources$ | async) ?? []).length === 0\" class=\"o-widget__header__content__no-data\">\n <h2 class=\"o-widget__header__content__title\">{{ '@pry.widget.noData' | i18n }}</h2>\n </div>\n </ng-template>\n </div>\n <div class=\"m-btn-group\" *ngIf=\"displayContextMenu$ | async as options\">\n <button\n type=\"button\"\n id=\"dialog_Menu\"\n aria-controls=\"menu\"\n [attr.aria-expanded]=\"this.menu\"\n #togglePanel\n class=\"a-btn a-btn--more\"\n (click)=\"menuOpen($event)\"\n >\n <pry-icon [height]=\"25\" [width]=\"25\" iconSvg=\"more_horiz\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.openMenuWidget' | i18n }}</span>\n </button>\n </div>\n</div>\n\n<ng-template #overlayMenu>\n <div class=\"m-context-menu\" *ngIf=\"displayContextMenu$ | async as options\">\n <ul\n class=\"m-context-menu__list\"\n #menuList\n id=\"menu\"\n role=\"menu\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Menu\"\n (keydown.arrowDown)=\"onArrowDown()\"\n (keydown.arrowUp)=\"onArrowUp()\"\n (keydown.escape)=\"menuOpen()\"\n >\n <li\n class=\"m-context-menu__list__item\"\n role=\"none\"\n *ngIf=\"options === true || options['datasourceSelection'] === true\"\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n id=\"toggleActions\"\n (click)=\"toggleDatasourceSelection()\"\n *pryAccess=\"{ module: 'dashboard', page: 'widget', action: 'select_named_query' }\"\n class=\"a-btn\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"stack-fill\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"options === true || options!['parameters'] === true\">\n <ng-content></ng-content>\n </li>\n <ng-container *ngIf=\"options === true || options!['window'] === true\">\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngFor=\"let targetIndex of targetIndexes$ | async\">\n <button\n type=\"button\"\n (click)=\"moveInNewWindow(_widgetIndex, targetIndex)\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"launch\"></pry-icon>\n {{\n (targetIndex !== -1 ? '@pry.widget.target.existing' : '@pry.widget.target.new')\n | i18n: { targetIndex: this.targetIndex + 1 }\n }}\n </button>\n </li>\n </ng-container>\n <li\n class=\"m-context-menu__list__item\"\n role=\"none\"\n *ngIf=\"hasGrid && (options === true || options!['changeSpot'] === true)\"\n >\n <button type=\"button\" role=\"menuitem\" (click)=\"toggleChangeSpot()\" class=\"a-btn\" tabindex=\"-1\">\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"move\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.changeSpot' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"options === true || options!['maximize'] === true\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"maximize(_widgetIndex)\"\n class=\"a-btn\"\n (keydown.escape)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"fullscreen\"></pry-icon>\n {{ '@pry.widget.target.maximize' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"options === true || options!['addToCatalog'] === true\">\n <button type=\"button\" role=\"menuitem\" tabindex=\"-1\" (click)=\"toggleCatalog()\" class=\"a-btn\">\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"library_add\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.catalogWidget' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"options === true || options!['delete'] === true\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"toggleRemoveConfirm($event)\"\n class=\"a-btn\"\n (keydown.tab)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"delete\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.deleteWidget' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngFor=\"let option of additionalOptions\">\n <button\n type=\"button\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"executeAction(option)\"\n [disabled]=\"isActionDisabled(option)\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" [iconSvg]=\"option.icon\"></pry-icon>\n {{ option.label | i18n }}\n </button>\n </li>\n </ul>\n </div>\n</ng-template>\n\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n (keydown.escape)=\"cancelRemoveConfirm()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #cross (click)=\"cancelRemoveConfirm()\">\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=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\" (keydown.tab)=\"focusCrossElement()\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #template>\n <pry-datasource-selector\n [manifest]=\"manifest$ | async\"\n (cancel)=\"toggleDatasourceSelection()\"\n (validated)=\"emitManifest()\"\n (nextTab)=\"focusInputCatalog()\"\n (previousTab)=\"focusValidation()\"\n (itemsChanged)=\"datasourcesChanged($event)\"\n ></pry-datasource-selector>\n</ng-template>\n\n<ng-template #overlayCatalog>\n <div\n class=\"o-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Catalog\"\n (keydown.escape)=\"toggleCatalog()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.defineCatalog' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n (keydown.shift.tab)=\"focusValidation()\"\n #crossCatalog\n (click)=\"toggleCatalog()\"\n >\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=\"m-form-label-field\">\n <label class=\"a-label\" for=\"name\">{{ '@pry.toolbox.catalog.label' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.name\" id=\"name\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"description\">{{ '@pry.toolbox.catalog.description' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.description\" id=\"description\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <pry-select-image\n [iconUrl]=\"catalogInfo.image\"\n (changed)=\"catalogInfo.image = $event\"\n [mode]=\"type\"\n ></pry-select-image>\n </div>\n <div class=\"m-btn-group\">\n <button\n type=\"button\"\n (click)=\"toggleCatalog()\"\n #cancel\n (keydown.tab)=\"disableValidation()\"\n class=\"a-btn a-btn--secondary\"\n >\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n #validateCatalog\n (click)=\"confirmCatalog()\"\n [disabled]=\"!toolboxMenuService.isValidForCatalog(catalogInfo.name)\"\n class=\"a-btn a-btn--primary\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #overlaySpot>\n <div class=\"o-modal -place\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.tooltip.changeSpot' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"toggleChangeSpot()\">\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-dashboard\n [staticDashboard]=\"targetManifest!\"\n [breakpoint]=\"10\"\n [noBackground]=\"true\"\n [forceModeEdition]=\"false\"\n ></pry-dashboard>\n </div>\n</ng-template>\n" }]
11381
- }], ctorParameters: () => [{ type: i1.Store }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: ToolboxMenuService }], propDecorators: { template: [{
11394
+ args: [{ selector: 'pry-widget-header', template: "<div class=\"o-widget__header\">\n <div class=\"o-widget__header__content\">\n @if ((manifest$ | async)?.title) {\n <h2 class=\"o-widget__header__content__title\">\n {{ (manifest$ | async)?.title }}\n </h2>\n } @else {\n @for (ds of usedDatasources$ | async; track ds) {\n <div class=\"o-widget__header__content__query\">\n @if (ds.id | translateId: { type: 'datasource', output: 'icon', noDefault: true } | async; as url) {\n <img [height]=\"20\" [src]=\"url\" [width]=\"20\" alt=\"\" class=\"o-widget__header__content__query__icon\" />\n }\n <h3 class=\"o-widget__header__content__query__name\">{{ ds.name }}</h3>\n @if (displayCount && !isGeo(ds)) {\n <h3 class=\"o-widget__header__content__query__name\">\n ({{ [ds.id] | resultSetSize | async }})\n </h3>\n }\n </div>\n }\n @if (((usedDatasources$ | async) ?? []).length === 0) {\n <div class=\"o-widget__header__content__no-data\">\n <h2 class=\"o-widget__header__content__title\">{{ '@pry.widget.noData' | i18n }}</h2>\n </div>\n }\n }\n </div>\n @if (displayContextMenu$ | async; as options) {\n <div class=\"m-btn-group\">\n <button\n type=\"button\"\n id=\"dialog_Menu\"\n aria-controls=\"menu\"\n [attr.aria-expanded]=\"this.menu\"\n #togglePanel\n class=\"a-btn a-btn--more\"\n (click)=\"menuOpen($event)\"\n >\n <pry-icon [height]=\"25\" [width]=\"25\" iconSvg=\"more_horiz\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.openMenuWidget' | i18n }}</span>\n </button>\n </div>\n }\n</div>\n\n<ng-template #overlayMenu>\n @if (displayContextMenu$ | async; as options) {\n <div class=\"m-context-menu\">\n <ul\n class=\"m-context-menu__list\"\n #menuList\n id=\"menu\"\n role=\"menu\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Menu\"\n (keydown.arrowDown)=\"onArrowDown()\"\n (keydown.arrowUp)=\"onArrowUp()\"\n (keydown.escape)=\"menuOpen()\"\n >\n @if (options === true || options['datasourceSelection'] === true) {\n <li\n class=\"m-context-menu__list__item\"\n role=\"none\"\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n id=\"toggleActions\"\n (click)=\"toggleDatasourceSelection()\"\n *pryAccess=\"{ module: 'dashboard', page: 'widget', action: 'select_named_query' }\"\n class=\"a-btn\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"stack-fill\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </li>\n }\n @if (options === true || options!['parameters'] === true) {\n <li class=\"m-context-menu__list__item\" role=\"none\">\n <ng-content></ng-content>\n </li>\n }\n @if (options === true || options!['window'] === true) {\n @for (targetIndex of targetIndexes$ | async; track targetIndex) {\n <li class=\"m-context-menu__list__item\" role=\"none\">\n <button\n type=\"button\"\n (click)=\"moveInNewWindow(_widgetIndex, targetIndex)\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"launch\"></pry-icon>\n {{\n (targetIndex !== -1 ? '@pry.widget.target.existing' : '@pry.widget.target.new')\n | i18n: { targetIndex: this.targetIndex + 1 }\n }}\n </button>\n </li>\n }\n }\n @if (hasGrid && (options === true || options!['changeSpot'] === true)) {\n <li\n class=\"m-context-menu__list__item\"\n role=\"none\"\n >\n <button type=\"button\" role=\"menuitem\" (click)=\"toggleChangeSpot()\" class=\"a-btn\" tabindex=\"-1\">\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"move\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.changeSpot' | i18n }}</span>\n </button>\n </li>\n }\n @if (options === true || options!['maximize'] === true) {\n <li class=\"m-context-menu__list__item\" role=\"none\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"maximize(_widgetIndex)\"\n class=\"a-btn\"\n (keydown.escape)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"fullscreen\"></pry-icon>\n {{ '@pry.widget.target.maximize' | i18n }}\n </button>\n </li>\n }\n @if (options === true || options!['addToCatalog'] === true) {\n <li class=\"m-context-menu__list__item\" role=\"none\">\n <button type=\"button\" role=\"menuitem\" tabindex=\"-1\" (click)=\"toggleCatalog()\" class=\"a-btn\">\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"library_add\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.catalogWidget' | i18n }}</span>\n </button>\n </li>\n }\n @if (options === true || options!['delete'] === true) {\n <li class=\"m-context-menu__list__item\" role=\"none\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"toggleRemoveConfirm($event)\"\n class=\"a-btn\"\n (keydown.tab)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"delete\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.deleteWidget' | i18n }}</span>\n </button>\n </li>\n }\n @for (option of additionalOptions; track option) {\n <li class=\"m-context-menu__list__item\" role=\"none\">\n <button\n type=\"button\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"executeAction(option)\"\n [disabled]=\"isActionDisabled(option)\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" [iconSvg]=\"option.icon\"></pry-icon>\n {{ option.label | i18n }}\n </button>\n </li>\n }\n </ul>\n </div>\n }\n</ng-template>\n\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n (keydown.escape)=\"cancelRemoveConfirm()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #cross (click)=\"cancelRemoveConfirm()\">\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=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\" (keydown.tab)=\"focusCrossElement()\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #template>\n <pry-datasource-selector\n [manifest]=\"manifest$ | async\"\n (cancel)=\"toggleDatasourceSelection()\"\n (validated)=\"emitManifest()\"\n (nextTab)=\"focusInputCatalog()\"\n (previousTab)=\"focusValidation()\"\n (itemsChanged)=\"datasourcesChanged($event)\"\n ></pry-datasource-selector>\n</ng-template>\n\n<ng-template #overlayCatalog>\n <div\n class=\"o-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Catalog\"\n (keydown.escape)=\"toggleCatalog()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.defineCatalog' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n (keydown.shift.tab)=\"focusValidation()\"\n #crossCatalog\n (click)=\"toggleCatalog()\"\n >\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=\"m-form-label-field\">\n <label class=\"a-label\" for=\"name\">{{ '@pry.toolbox.catalog.label' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.name\" id=\"name\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"description\">{{ '@pry.toolbox.catalog.description' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.description\" id=\"description\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <pry-select-image\n [iconUrl]=\"catalogInfo.image\"\n (changed)=\"catalogInfo.image = $event\"\n [mode]=\"type\"\n ></pry-select-image>\n </div>\n <div class=\"m-btn-group\">\n <button\n type=\"button\"\n (click)=\"toggleCatalog()\"\n #cancel\n (keydown.tab)=\"disableValidation()\"\n class=\"a-btn a-btn--secondary\"\n >\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n #validateCatalog\n (click)=\"confirmCatalog()\"\n [disabled]=\"!toolboxMenuService.isValidForCatalog(catalogInfo.name)\"\n class=\"a-btn a-btn--primary\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #overlaySpot>\n <div class=\"o-modal -place\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.tooltip.changeSpot' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"toggleChangeSpot()\">\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-dashboard\n [staticDashboard]=\"targetManifest!\"\n [breakpoint]=\"10\"\n [noBackground]=\"true\"\n [forceModeEdition]=\"false\"\n ></pry-dashboard>\n </div>\n</ng-template>\n" }]
11395
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i2$1.Overlay }, { type: i0.ViewContainerRef }, { type: ToolboxMenuService }], propDecorators: { template: [{
11382
11396
  type: ViewChild,
11383
11397
  args: ['template', { read: TemplateRef }]
11384
11398
  }], templateModal: [{
@@ -11510,13 +11524,13 @@ class SettingsComponent extends SubscriptionnerDirective {
11510
11524
  this.openSub?.unsubscribe();
11511
11525
  this.subscriptions.unsubscribe();
11512
11526
  }
11513
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SettingsComponent, deps: [{ token: i1.Store }, { token: i2.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
11527
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SettingsComponent, deps: [{ token: i1.Store }, { token: i2$1.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
11514
11528
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: SettingsComponent, selector: "pry-settings", inputs: { widgetIndex: "widgetIndex", isDisable: "isDisable", headerPresent: "headerPresent", open$: "open$", header: "header" }, outputs: { triggerClick: "triggerClick", saveTriggered: "saveTriggered", changeTitle: "changeTitle" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }, { propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "validate", first: true, predicate: ["validate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<button type=\"button\" (click)=\"toggle()\" class=\"a-btn a-btn--icon-text -settings\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n</button>\n\n<ng-template #template>\n <div class=\"o-settings__popup\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"dialog_setting\">\n <div class=\"o-settings__popup__header\">\n <h2 class=\"a-h2\">{{ '@pry.widget.settings.title' | i18n }}</h2>\n <button\n type=\"button\"\n #cross\n (keydown.shift.tab)=\"focusElement(this.validate)\"\n (click)=\"toggle()\"\n class=\"a-btn a-btn--icon-only -close\"\n >\n <pry-icon iconSvg=\"close\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.close' | i18n }}</span>\n </button>\n </div>\n\n <div class=\"o-settings__popup__content\" (click)=\"this.triggerClick.next()\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"widget_title\">{{ '@pry.widget.settings.changeTitle' | i18n }} :</label>\n <input\n class=\"a-form-field\"\n id=\"widget_title\"\n type=\"text\"\n [value]=\"manifest?.title ?? ''\"\n (input)=\"emitTitle($event)\"\n />\n </div>\n <ng-content></ng-content>\n </div>\n\n <div class=\"o-settings__popup__footer\">\n <button\n (click)=\"saveAndClose()\"\n [class.btn-primary__disable]=\"isDisable\"\n [disabled]=\"isDisable\"\n (keydown.tab)=\"focusElement(this.cross)\"\n class=\"a-btn a-btn--primary\"\n #validate\n >\n {{ '@pry.widget.settings.validateUpdating' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
11515
11529
  }
11516
11530
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SettingsComponent, decorators: [{
11517
11531
  type: Component,
11518
11532
  args: [{ selector: 'pry-settings', template: "<button type=\"button\" (click)=\"toggle()\" class=\"a-btn a-btn--icon-text -settings\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n</button>\n\n<ng-template #template>\n <div class=\"o-settings__popup\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"dialog_setting\">\n <div class=\"o-settings__popup__header\">\n <h2 class=\"a-h2\">{{ '@pry.widget.settings.title' | i18n }}</h2>\n <button\n type=\"button\"\n #cross\n (keydown.shift.tab)=\"focusElement(this.validate)\"\n (click)=\"toggle()\"\n class=\"a-btn a-btn--icon-only -close\"\n >\n <pry-icon iconSvg=\"close\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.close' | i18n }}</span>\n </button>\n </div>\n\n <div class=\"o-settings__popup__content\" (click)=\"this.triggerClick.next()\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"widget_title\">{{ '@pry.widget.settings.changeTitle' | i18n }} :</label>\n <input\n class=\"a-form-field\"\n id=\"widget_title\"\n type=\"text\"\n [value]=\"manifest?.title ?? ''\"\n (input)=\"emitTitle($event)\"\n />\n </div>\n <ng-content></ng-content>\n </div>\n\n <div class=\"o-settings__popup__footer\">\n <button\n (click)=\"saveAndClose()\"\n [class.btn-primary__disable]=\"isDisable\"\n [disabled]=\"isDisable\"\n (keydown.tab)=\"focusElement(this.cross)\"\n class=\"a-btn a-btn--primary\"\n #validate\n >\n {{ '@pry.widget.settings.validateUpdating' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n" }]
11519
- }], ctorParameters: () => [{ type: i1.Store }, { type: i2.Overlay }, { type: i0.ViewContainerRef }], propDecorators: { triggerClick: [{
11533
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i2$1.Overlay }, { type: i0.ViewContainerRef }], propDecorators: { triggerClick: [{
11520
11534
  type: Output
11521
11535
  }], widgetIndex: [{
11522
11536
  type: Input
@@ -11752,11 +11766,11 @@ class FilterGroupComponent {
11752
11766
  }
11753
11767
  }
11754
11768
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FilterGroupComponent, deps: [{ token: i1.Store }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
11755
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FilterGroupComponent, selector: "pry-filter-group", inputs: { enterTriggerFilter: "enterTriggerFilter", clearTriggerFilter: "clearTriggerFilter" }, ngImport: i0, template: "<pry-filter-group-css></pry-filter-group-css>\n<ng-container *ngIf=\"globalManifest$ | async as manifest\">\n <div class=\"o-container__filters\" *ngIf=\"manifest.filters && manifest.filters.length > 0\">\n <div class=\"o-container__filter-container\" (click)=\"openSelect()\">\n @for (filterDescription of manifest.filters; track filterDescription.id) {\n <pry-filter-instanciator\n [filter]=\"filterDescription\"\n [applyFilter$]=\"apply$\"\n (pressedEnter)=\"enterPressed()\"\n (cleared)=\"cleared()\"\n ></pry-filter-instanciator>\n }\n </div>\n <div class=\"o-container__filter-actions\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"clearFilters()\">\n <pry-icon iconSvg=\"clear_filter\" [width]=\"30\" [height]=\"30\"></pry-icon>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"filter()\">\n {{ '@pry.toolbox.apply' | i18n }}\n <pry-icon iconSvg=\"refresh_filter\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: FilterInstanciatorComponent, selector: "pry-filter-instanciator", inputs: ["filter", "applyFilter$"], outputs: ["pressedEnter", "cleared"] }, { kind: "component", type: PryFilterGroupCssComponent, selector: "pry-filter-group-css" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
11769
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FilterGroupComponent, selector: "pry-filter-group", inputs: { enterTriggerFilter: "enterTriggerFilter", clearTriggerFilter: "clearTriggerFilter" }, ngImport: i0, template: "<pry-filter-group-css></pry-filter-group-css>\n@if (globalManifest$ | async; as manifest) {\n @if (manifest.filters && manifest.filters.length > 0) {\n <div class=\"o-container__filters\">\n <div class=\"o-container__filter-container\" (click)=\"openSelect()\">\n @for (filterDescription of manifest.filters; track filterDescription.id) {\n <pry-filter-instanciator\n [filter]=\"filterDescription\"\n [applyFilter$]=\"apply$\"\n (pressedEnter)=\"enterPressed()\"\n (cleared)=\"cleared()\"\n ></pry-filter-instanciator>\n }\n </div>\n <div class=\"o-container__filter-actions\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"clearFilters()\">\n <pry-icon iconSvg=\"clear_filter\" [width]=\"30\" [height]=\"30\"></pry-icon>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"filter()\">\n {{ '@pry.toolbox.apply' | i18n }}\n <pry-icon iconSvg=\"refresh_filter\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n </div>\n </div>\n }\n}\n", dependencies: [{ kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: FilterInstanciatorComponent, selector: "pry-filter-instanciator", inputs: ["filter", "applyFilter$"], outputs: ["pressedEnter", "cleared"] }, { kind: "component", type: PryFilterGroupCssComponent, selector: "pry-filter-group-css" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
11756
11770
  }
11757
11771
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FilterGroupComponent, decorators: [{
11758
11772
  type: Component,
11759
- args: [{ selector: 'pry-filter-group', template: "<pry-filter-group-css></pry-filter-group-css>\n<ng-container *ngIf=\"globalManifest$ | async as manifest\">\n <div class=\"o-container__filters\" *ngIf=\"manifest.filters && manifest.filters.length > 0\">\n <div class=\"o-container__filter-container\" (click)=\"openSelect()\">\n @for (filterDescription of manifest.filters; track filterDescription.id) {\n <pry-filter-instanciator\n [filter]=\"filterDescription\"\n [applyFilter$]=\"apply$\"\n (pressedEnter)=\"enterPressed()\"\n (cleared)=\"cleared()\"\n ></pry-filter-instanciator>\n }\n </div>\n <div class=\"o-container__filter-actions\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"clearFilters()\">\n <pry-icon iconSvg=\"clear_filter\" [width]=\"30\" [height]=\"30\"></pry-icon>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"filter()\">\n {{ '@pry.toolbox.apply' | i18n }}\n <pry-icon iconSvg=\"refresh_filter\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n </div>\n </div>\n</ng-container>\n" }]
11773
+ args: [{ selector: 'pry-filter-group', template: "<pry-filter-group-css></pry-filter-group-css>\n@if (globalManifest$ | async; as manifest) {\n @if (manifest.filters && manifest.filters.length > 0) {\n <div class=\"o-container__filters\">\n <div class=\"o-container__filter-container\" (click)=\"openSelect()\">\n @for (filterDescription of manifest.filters; track filterDescription.id) {\n <pry-filter-instanciator\n [filter]=\"filterDescription\"\n [applyFilter$]=\"apply$\"\n (pressedEnter)=\"enterPressed()\"\n (cleared)=\"cleared()\"\n ></pry-filter-instanciator>\n }\n </div>\n <div class=\"o-container__filter-actions\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"clearFilters()\">\n <pry-icon iconSvg=\"clear_filter\" [width]=\"30\" [height]=\"30\"></pry-icon>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"filter()\">\n {{ '@pry.toolbox.apply' | i18n }}\n <pry-icon iconSvg=\"refresh_filter\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n </div>\n </div>\n }\n}\n" }]
11760
11774
  }], ctorParameters: () => [{ type: i1.Store }, { type: Document, decorators: [{
11761
11775
  type: Inject,
11762
11776
  args: [DOCUMENT]
@@ -11788,7 +11802,7 @@ class DashboardInitService {
11788
11802
  this.router.config.push({ path: this.baseConfig.path, component: DashboardComponent });
11789
11803
  }
11790
11804
  }
11791
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DashboardInitService, deps: [{ token: i1.Store }, { token: i3.Router }, { token: BASE_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
11805
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DashboardInitService, deps: [{ token: i1.Store }, { token: i2.Router }, { token: BASE_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
11792
11806
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DashboardInitService, providedIn: 'root' }); }
11793
11807
  }
11794
11808
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DashboardInitService, decorators: [{
@@ -11796,7 +11810,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
11796
11810
  args: [{
11797
11811
  providedIn: 'root'
11798
11812
  }]
11799
- }], ctorParameters: () => [{ type: i1.Store }, { type: i3.Router }, { type: undefined, decorators: [{
11813
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i2.Router }, { type: undefined, decorators: [{
11800
11814
  type: Inject,
11801
11815
  args: [BASE_CONFIG]
11802
11816
  }] }] });
@@ -11919,7 +11933,7 @@ class ManifestService {
11919
11933
  .select(ConfigSelectors.refUrl)
11920
11934
  .pipe(mergeMap((url) => this.httpClient.delete(encodeURI(`${url}/users/me/dashboards/id/${presentationId}/metadata/id/${metadataId}`))));
11921
11935
  }
11922
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ManifestService, deps: [{ token: i1$2.HttpClient }, { token: i1.Store }, { token: PrySnackbarService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
11936
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ManifestService, deps: [{ token: i1$1.HttpClient }, { token: i1.Store }, { token: PrySnackbarService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
11923
11937
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ManifestService, providedIn: 'root' }); }
11924
11938
  }
11925
11939
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ManifestService, decorators: [{
@@ -11927,7 +11941,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
11927
11941
  args: [{
11928
11942
  providedIn: 'root'
11929
11943
  }]
11930
- }], ctorParameters: () => [{ type: i1$2.HttpClient }, { type: i1.Store }, { type: PrySnackbarService }, { type: PryI18nService }] });
11944
+ }], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i1.Store }, { type: PrySnackbarService }, { type: PryI18nService }] });
11931
11945
 
11932
11946
  class PryTitleService {
11933
11947
  constructor(title, translateService, store) {
@@ -12044,7 +12058,7 @@ class WmsService {
12044
12058
  const url = wfsUrlBuilder(wmsUrl, bbox);
12045
12059
  return this.httpClient.get(url).pipe(map((json) => json));
12046
12060
  }
12047
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: WmsService, deps: [{ token: i1$2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
12061
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: WmsService, deps: [{ token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
12048
12062
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: WmsService, providedIn: 'root' }); }
12049
12063
  }
12050
12064
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: WmsService, decorators: [{
@@ -12052,7 +12066,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
12052
12066
  args: [{
12053
12067
  providedIn: 'root'
12054
12068
  }]
12055
- }], ctorParameters: () => [{ type: i1$2.HttpClient }] });
12069
+ }], ctorParameters: () => [{ type: i1$1.HttpClient }] });
12056
12070
  const BBOX_ENHANCE_DISTANCE = 0.0001;
12057
12071
  const wfsUrlBuilder = (wmsUrl, bbox, params) => {
12058
12072
  const enhancedBbox = [
@@ -12327,7 +12341,7 @@ class DashboardEffects {
12327
12341
  return result;
12328
12342
  })));
12329
12343
  this.addWidgetToPresentation$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.addWidgetToPresentation), withLatestFrom(this.store.select(DashboardSelectors.gridLayout), this.store.select(DashboardSelectors.globalManifest), this.store.select(DashboardSelectors.rank), this.store.select(DashboardSelectors.dashboardCellParams), this.store.select(DashboardSelectors.selectedItemIds)), map$1(([action, layout, _globalManifest, rank, params, selectedIds]) => {
12330
- const manifestGlobal = JSON.parse(JSON.stringify(_globalManifest));
12344
+ const manifestGlobal = structuredClone(_globalManifest);
12331
12345
  // Create new configuration
12332
12346
  const newOptions = this.toolboxManifestService.get(action.widgetType) ?? {
12333
12347
  options: {},
@@ -12398,7 +12412,7 @@ class DashboardEffects {
12398
12412
  return DashboardActions.updateManifest({ manifest: manifestGlobal, selectedIds });
12399
12413
  })));
12400
12414
  this.moveWidget$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.moveWidget), withLatestFrom(this.store.select(DashboardSelectors.gridLayout), this.store.select(DashboardSelectors.globalManifest), this.store.select(DashboardSelectors.rank), this.store.select(DashboardSelectors.dashboardCellParams), this.store.select(DashboardSelectors.selectedItemIds)), map$1(([action, layout, _globalManifest, rank, params, selectedIds]) => {
12401
- const manifestGlobal = JSON.parse(JSON.stringify(_globalManifest));
12415
+ const manifestGlobal = structuredClone(_globalManifest);
12402
12416
  const newWindows = [...manifestGlobal.windows];
12403
12417
  // Creating new current window manifest, without moved widget
12404
12418
  const myNewWindow = {
@@ -12554,12 +12568,12 @@ class DashboardEffects {
12554
12568
  dashboardInitService.init();
12555
12569
  refreshService.start();
12556
12570
  }
12557
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DashboardEffects, deps: [{ token: DashboardInitService }, { token: i1$3.Actions }, { token: i1.Store }, { token: ManifestService }, { token: ItemService }, { token: PryTitleService }, { token: PryI18nService }, { token: PrySnackbarService }, { token: i3.Router }, { token: RefreshService }, { token: ToolboxManifestService }, { token: BusService }, { token: SearchService }, { token: PryDialogService }, { token: WmsService }, { token: WidgetFactoryService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
12571
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DashboardEffects, deps: [{ token: DashboardInitService }, { token: i1$2.Actions }, { token: i1.Store }, { token: ManifestService }, { token: ItemService }, { token: PryTitleService }, { token: PryI18nService }, { token: PrySnackbarService }, { token: i2.Router }, { token: RefreshService }, { token: ToolboxManifestService }, { token: BusService }, { token: SearchService }, { token: PryDialogService }, { token: WmsService }, { token: WidgetFactoryService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
12558
12572
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DashboardEffects }); }
12559
12573
  }
12560
12574
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DashboardEffects, decorators: [{
12561
12575
  type: Injectable
12562
- }], ctorParameters: () => [{ type: DashboardInitService }, { type: i1$3.Actions }, { type: i1.Store }, { type: ManifestService }, { type: ItemService }, { type: PryTitleService }, { type: PryI18nService }, { type: PrySnackbarService }, { type: i3.Router }, { type: RefreshService }, { type: ToolboxManifestService }, { type: BusService }, { type: SearchService }, { type: PryDialogService }, { type: WmsService }, { type: WidgetFactoryService }, { type: PryI18nService }] });
12576
+ }], ctorParameters: () => [{ type: DashboardInitService }, { type: i1$2.Actions }, { type: i1.Store }, { type: ManifestService }, { type: ItemService }, { type: PryTitleService }, { type: PryI18nService }, { type: PrySnackbarService }, { type: i2.Router }, { type: RefreshService }, { type: ToolboxManifestService }, { type: BusService }, { type: SearchService }, { type: PryDialogService }, { type: WmsService }, { type: WidgetFactoryService }, { type: PryI18nService }] });
12563
12577
 
12564
12578
  const dashboardFeatureKey = '@pry/dashboard';
12565
12579
  const dashboardInitialState = {
@@ -12682,7 +12696,7 @@ const internalReducer = createReducer(dashboardInitialState, on(DashboardActions
12682
12696
  };
12683
12697
  }), on(DashboardActions.updateWidgetManifest, (state, action) => {
12684
12698
  const myRank = state.manifests.tenants.indexOf(state.manifests.sender);
12685
- const newWindows = JSON.parse(JSON.stringify(state.manifests.manifest.windows));
12699
+ const newWindows = structuredClone(state.manifests.manifest.windows);
12686
12700
  (newWindows[myRank] ?? { widgets: [] }).widgets[action.index] = action.manifest;
12687
12701
  return {
12688
12702
  ...state,
@@ -12702,19 +12716,7 @@ const internalReducer = createReducer(dashboardInitialState, on(DashboardActions
12702
12716
  ...state.results.resultSets,
12703
12717
  [action.id]: !action.next
12704
12718
  ? action.resultSet
12705
- : {
12706
- items: [
12707
- ...new Set(Object.keys(action.resultSet.items).concat(Object.keys(state.results.resultSets[action.id].items)))
12708
- ]
12709
- .map((key) => ({
12710
- [key]: [...action.resultSet.items[key], ...state.results.resultSets[action.id].items[key]]
12711
- }))
12712
- .reduce((p, c) => ({ ...p, ...c }), {}),
12713
- count: action.resultSet.count,
12714
- relations: [...state.results.resultSets[action.id].relations, ...action.resultSet.relations],
12715
- autoRefreshInterval: action.resultSet.autoRefreshInterval,
12716
- searchAfter: action.resultSet.searchAfter
12717
- }
12719
+ : ResultsetUtils.mergeResultSets(state.results.resultSets[action.id], action.resultSet)
12718
12720
  },
12719
12721
  resultSetsParams: {
12720
12722
  ...state.results.resultSetsParams,
@@ -12723,7 +12725,7 @@ const internalReducer = createReducer(dashboardInitialState, on(DashboardActions
12723
12725
  }
12724
12726
  })), on(DashboardActions.maximizeWidget, (state, action) => {
12725
12727
  const myRank = state.manifests.tenants.indexOf(state.manifests.sender);
12726
- const newWindows = JSON.parse(JSON.stringify(state.manifests.manifest.windows));
12728
+ const newWindows = structuredClone(state.manifests.manifest.windows);
12727
12729
  newWindows[myRank].widgets[action.widgetIndex].layout = {
12728
12730
  x: 1,
12729
12731
  y: 1,
@@ -12908,7 +12910,7 @@ const internalReducer = createReducer(dashboardInitialState, on(DashboardActions
12908
12910
  }
12909
12911
  };
12910
12912
  }), on(DashboardActions.addRelationsToResultSets, (state, action) => {
12911
- const updatedResultSets = JSON.parse(JSON.stringify(state.results.resultSets));
12913
+ const updatedResultSets = structuredClone(state.results.resultSets);
12912
12914
  action.relations.forEach((relation) => {
12913
12915
  Object.keys(updatedResultSets).forEach((rsId) => {
12914
12916
  const isConcerned = Object.keys(updatedResultSets[rsId].items).map((classId) => {
@@ -12926,8 +12928,27 @@ const internalReducer = createReducer(dashboardInitialState, on(DashboardActions
12926
12928
  resultSets: updatedResultSets
12927
12929
  }
12928
12930
  };
12931
+ }), on(DashboardActions.removeRelationsFromResultSets, (state, action) => {
12932
+ const updatedResultSets = structuredClone(state.results.resultSets);
12933
+ Object.keys(updatedResultSets).forEach((rsId) => {
12934
+ const isConcerned = Object.keys(updatedResultSets[rsId].items).map((classId) => {
12935
+ return updatedResultSets[rsId].items[classId].map((item) => item.id === action.relation.source || item.id === action.relation.destination);
12936
+ });
12937
+ if (isConcerned) {
12938
+ updatedResultSets[rsId].relations.filter((rel) => rel.relationType !== action.relation.relationType ||
12939
+ rel.source !== action.relation.source ||
12940
+ rel.destination !== action.relation.destination);
12941
+ }
12942
+ });
12943
+ return {
12944
+ ...state,
12945
+ results: {
12946
+ ...state.results,
12947
+ resultSets: updatedResultSets
12948
+ }
12949
+ };
12929
12950
  }), on(DashboardActions.addItemToResultSets, (state, action) => {
12930
- const updatedResultSets = JSON.parse(JSON.stringify(state.results.resultSets));
12951
+ const updatedResultSets = structuredClone(state.results.resultSets);
12931
12952
  if (!!action.resultSet) {
12932
12953
  if (!updatedResultSets[action.resultSet].items[action.item.oClass]) {
12933
12954
  updatedResultSets[action.resultSet].items[action.item.oClass] = [action.item];
@@ -12974,7 +12995,7 @@ const internalReducer = createReducer(dashboardInitialState, on(DashboardActions
12974
12995
  };
12975
12996
  }), on(DashboardActions.setGridLayout, (state, action) => {
12976
12997
  const myRank = state.manifests.tenants.indexOf(state.manifests.sender);
12977
- const newWindows = JSON.parse(JSON.stringify(state.manifests.manifest.windows ?? []));
12998
+ const newWindows = structuredClone(state.manifests.manifest.windows ?? []);
12978
12999
  if (!newWindows[myRank]) {
12979
13000
  newWindows[myRank] = { widgets: [] };
12980
13001
  }
@@ -13016,7 +13037,7 @@ const internalReducer = createReducer(dashboardInitialState, on(DashboardActions
13016
13037
  }), on(DashboardActions.createTab, (state, action) => {
13017
13038
  const myRank = state.manifests.tenants.indexOf(state.manifests.sender);
13018
13039
  const myLayout = state.manifests.manifest.windows[myRank].grid?.layout ?? DashboardGridLayout.MANUAL;
13019
- const newWindows = JSON.parse(JSON.stringify(state.manifests.manifest.windows));
13040
+ const newWindows = structuredClone(state.manifests.manifest.windows);
13020
13041
  newWindows.push({ grid: { layout: myLayout }, widgets: [] });
13021
13042
  return {
13022
13043
  ...state,
@@ -13033,11 +13054,11 @@ const internalReducer = createReducer(dashboardInitialState, on(DashboardActions
13033
13054
  ...state,
13034
13055
  manifests: {
13035
13056
  ...state.manifests,
13036
- manifest: JSON.parse(JSON.stringify(state.presentation.initial))
13057
+ manifest: structuredClone(state.presentation.initial)
13037
13058
  }
13038
13059
  };
13039
13060
  }), on(DashboardActions.propagateGridLayout, (state, action) => {
13040
- const newWindows = JSON.parse(JSON.stringify(state.manifests.manifest.windows));
13061
+ const newWindows = structuredClone(state.manifests.manifest.windows);
13041
13062
  newWindows[action.rank] = action.manifest;
13042
13063
  return {
13043
13064
  ...state,
@@ -13103,7 +13124,7 @@ const internalReducer = createReducer(dashboardInitialState, on(DashboardActions
13103
13124
  }
13104
13125
  }
13105
13126
  })), on(DashboardActions.updateFilterValue, (state, action) => {
13106
- const filters = JSON.parse(JSON.stringify(state.manifests.manifest.filters ?? []));
13127
+ const filters = structuredClone(state.manifests.manifest.filters ?? []);
13107
13128
  const filterToUpdate = filters.find((filter) => filter.id === action.id);
13108
13129
  if (filterToUpdate) {
13109
13130
  if (!action.value) {
@@ -13211,11 +13232,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
13211
13232
 
13212
13233
  class DefaultTooltipComponent extends BaseTooltipComponent {
13213
13234
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DefaultTooltipComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
13214
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: DefaultTooltipComponent, selector: "pry-default-tooltip", usesInheritance: true, ngImport: i0, template: "<div class=\"m-tooltip__item__content\">\n <ng-container *ngIf=\"data.item.properties; else defaultTooltip\">\n <p *ngFor=\"let property of data.item.properties\">\n <span>{{ property.key | titlecase }} :</span> {{ property.value }}\n </p>\n </ng-container>\n</div>\n<ng-template #defaultTooltip>\n <h3 class=\"a-h3 -attribute\">\n <img\n [src]=\"data.item | translateItemToSymbol | async\"\n [alt]=\"data.item.oClass | translateId: { type: 'class', output: 'name' } | async\"\n width=\"32\"\n aria-hidden=\"true\"\n />\n <span>{{ data.item.oClass | translateId: { type: 'class', output: 'name' } | async }}</span>\n </h3>\n <p>\n <span>{{ '@pry.widget.itemId' | i18n }} :</span> {{ data.item?.id }}\n </p>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: TranslateItemToSymbolPipe, name: "translateItemToSymbol" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
13235
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: DefaultTooltipComponent, selector: "pry-default-tooltip", usesInheritance: true, ngImport: i0, template: "<div class=\"m-tooltip__item__content\">\n @if (data.item.properties) {\n @for (property of data.item.properties; track property) {\n <p>\n <span>{{ property.key | titlecase }} :</span> {{ property.value }}\n </p>\n }\n } @else {\n <h3 class=\"a-h3 -attribute\">\n <img\n [src]=\"data.item | translateItemToSymbol | async\"\n [alt]=\"data.item.oClass | translateId: { type: 'class', output: 'name' } | async\"\n width=\"32\"\n aria-hidden=\"true\"\n />\n <span>{{ data.item.oClass | translateId: { type: 'class', output: 'name' } | async }}</span>\n </h3>\n <p>\n <span>{{ '@pry.widget.itemId' | i18n }} :</span> {{ data.item?.id }}\n </p>\n }\n</div>\n", dependencies: [{ kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: TranslateItemToSymbolPipe, name: "translateItemToSymbol" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
13215
13236
  }
13216
13237
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DefaultTooltipComponent, decorators: [{
13217
13238
  type: Component,
13218
- args: [{ selector: 'pry-default-tooltip', template: "<div class=\"m-tooltip__item__content\">\n <ng-container *ngIf=\"data.item.properties; else defaultTooltip\">\n <p *ngFor=\"let property of data.item.properties\">\n <span>{{ property.key | titlecase }} :</span> {{ property.value }}\n </p>\n </ng-container>\n</div>\n<ng-template #defaultTooltip>\n <h3 class=\"a-h3 -attribute\">\n <img\n [src]=\"data.item | translateItemToSymbol | async\"\n [alt]=\"data.item.oClass | translateId: { type: 'class', output: 'name' } | async\"\n width=\"32\"\n aria-hidden=\"true\"\n />\n <span>{{ data.item.oClass | translateId: { type: 'class', output: 'name' } | async }}</span>\n </h3>\n <p>\n <span>{{ '@pry.widget.itemId' | i18n }} :</span> {{ data.item?.id }}\n </p>\n</ng-template>\n" }]
13239
+ args: [{ selector: 'pry-default-tooltip', template: "<div class=\"m-tooltip__item__content\">\n @if (data.item.properties) {\n @for (property of data.item.properties; track property) {\n <p>\n <span>{{ property.key | titlecase }} :</span> {{ property.value }}\n </p>\n }\n } @else {\n <h3 class=\"a-h3 -attribute\">\n <img\n [src]=\"data.item | translateItemToSymbol | async\"\n [alt]=\"data.item.oClass | translateId: { type: 'class', output: 'name' } | async\"\n width=\"32\"\n aria-hidden=\"true\"\n />\n <span>{{ data.item.oClass | translateId: { type: 'class', output: 'name' } | async }}</span>\n </h3>\n <p>\n <span>{{ '@pry.widget.itemId' | i18n }} :</span> {{ data.item?.id }}\n </p>\n }\n</div>\n" }]
13219
13240
  }] });
13220
13241
 
13221
13242
  const TOOLTIP_DEFINITION = new InjectionToken('Tooltip definition');
@@ -13368,7 +13389,7 @@ class PryDashboardModule {
13368
13389
  PryCoreModule,
13369
13390
  PryCheckboxModule,
13370
13391
  PryToggleModule,
13371
- PryOverlayModule, i1.StoreFeatureModule, i1$3.EffectsFeatureModule, PryDatePickerModule,
13392
+ PryOverlayModule, i1.StoreFeatureModule, i1$2.EffectsFeatureModule, PryDatePickerModule,
13372
13393
  PryI18nModule,
13373
13394
  PrySinceDateModule,
13374
13395
  PryPageLoaderModule], exports: [DashboardComponent,