@provoly/dashboard 0.25.0 → 0.25.2

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 (115) hide show
  1. package/assets/svgs/format_bold.svg +1 -0
  2. package/assets/svgs/format_details.svg +1 -0
  3. package/assets/svgs/format_italic.svg +1 -0
  4. package/assets/svgs/format_list_bulleted.svg +1 -0
  5. package/assets/svgs/format_list_numbered.svg +1 -0
  6. package/assets/svgs/format_quote.svg +1 -0
  7. package/assets/svgs/format_strikethrough.svg +1 -0
  8. package/assets/svgs/format_table.svg +1 -0
  9. package/assets/svgs/format_title.svg +1 -0
  10. package/assets/svgs/format_underlined.svg +1 -0
  11. package/components/text-editor/component/text-editor.component.d.ts +38 -0
  12. package/components/text-editor/i18n/en.translations.d.ts +22 -0
  13. package/components/text-editor/i18n/fr.translations.d.ts +22 -0
  14. package/components/text-editor/index.d.ts +5 -0
  15. package/components/text-editor/mdToHtml.pipe.d.ts +7 -0
  16. package/components/text-editor/public-api.d.ts +5 -0
  17. package/components/text-editor/service/text-editor.service.d.ts +40 -0
  18. package/components/text-editor/style/_o-text-editor.scss +120 -0
  19. package/components/text-editor/style/css.component.d.ts +5 -0
  20. package/components/text-editor/text-editor.module.d.ts +17 -0
  21. package/dataset/components/dataset-detail/dataset-detail.component.d.ts +11 -4
  22. package/dataset/components/dataset-version-form/dataset-version-form.component.d.ts +23 -0
  23. package/dataset/dataset.module.d.ts +7 -5
  24. package/dataset/i18n/en.translations.d.ts +6 -0
  25. package/dataset/i18n/fr.translations.d.ts +6 -0
  26. package/dataset/style/_o-pry-dataset-detail.scss +61 -25
  27. package/dataset/style/_o-pry-dataset-version-form.scss +7 -0
  28. package/esm2022/admin/components/admin-classes/admin-classes-customize/admin-classes-customize.component.mjs +1 -1
  29. package/esm2022/admin/components/admin-classes/admin-classes-select/admin-classes-select.component.mjs +1 -1
  30. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-select/admin-attributes-select.component.mjs +1 -1
  31. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +1 -1
  32. package/esm2022/admin/components/admin-environment/admin-environment-select/admin-environment-select.component.mjs +1 -1
  33. package/esm2022/admin/components/admin-fields/admin-fields-select/admin-fields-select.component.mjs +1 -1
  34. package/esm2022/admin/components/admin-metadata/admin-select-metadata/admin-select-metadata.component.mjs +1 -1
  35. package/esm2022/admin/components/admin-metadata-rules/admin-select-metadata-rules/admin-select-metadata-rules.component.mjs +1 -1
  36. package/esm2022/admin/components/admin-metadata-user/admin-user-select-metadata/admin-user-select-metadata.component.mjs +1 -1
  37. package/esm2022/admin/components/admin-predicates/admin-predicates-select/admin-predicates-select.component.mjs +1 -1
  38. package/esm2022/admin/components/admin-relation-types/admin-relation-types-select/admin-relation-types-select.component.mjs +1 -1
  39. package/esm2022/admin/components/admin-user/admin-user-select/admin-user-select.component.mjs +1 -1
  40. package/esm2022/components/text-editor/component/text-editor.component.mjs +126 -0
  41. package/esm2022/components/text-editor/i18n/en.translations.mjs +23 -0
  42. package/esm2022/components/text-editor/i18n/fr.translations.mjs +23 -0
  43. package/esm2022/components/text-editor/mdToHtml.pipe.mjs +17 -0
  44. package/esm2022/components/text-editor/provoly-dashboard-components-text-editor.mjs +5 -0
  45. package/esm2022/components/text-editor/public-api.mjs +6 -0
  46. package/esm2022/components/text-editor/service/text-editor.service.mjs +136 -0
  47. package/esm2022/components/text-editor/style/css.component.mjs +11 -0
  48. package/esm2022/components/text-editor/text-editor.module.mjs +32 -0
  49. package/esm2022/dataset/components/dataset-card/dataset-card.component.mjs +1 -1
  50. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +42 -9
  51. package/esm2022/dataset/components/dataset-version-form/dataset-version-form.component.mjs +58 -0
  52. package/esm2022/dataset/dataset.module.mjs +25 -8
  53. package/esm2022/dataset/i18n/en.translations.mjs +7 -1
  54. package/esm2022/dataset/i18n/fr.translations.mjs +7 -1
  55. package/esm2022/dataset/style/css.component.mjs +3 -3
  56. package/esm2022/filters/autocomplete/autocomplete.component.mjs +2 -2
  57. package/esm2022/import/components/import.component.mjs +39 -21
  58. package/esm2022/import/import.module.mjs +12 -5
  59. package/esm2022/import/store/import.actions.mjs +1 -1
  60. package/esm2022/import/store/import.effects.mjs +4 -2
  61. package/esm2022/import/store/import.service.mjs +3 -2
  62. package/esm2022/lib/core/components/share/group-share/group-share.component.mjs +3 -3
  63. package/esm2022/lib/core/components/tabs/tab-group.component.mjs +7 -3
  64. package/esm2022/lib/core/i18n/en.translations.mjs +4 -3
  65. package/esm2022/lib/core/i18n/fr.translations.mjs +2 -1
  66. package/esm2022/lib/core/store/data-source/data-source.actions.mjs +4 -2
  67. package/esm2022/lib/core/store/data-source/data-source.effects.mjs +2 -1
  68. package/esm2022/lib/core/store/data-source/data-source.model.mjs +1 -1
  69. package/esm2022/lib/core/store/data-source/data-source.reducer.mjs +4 -1
  70. package/esm2022/lib/core/store/data-source/data-source.service.mjs +13 -1
  71. package/esm2022/lib/core/store/search/filter-param-encoder.mjs +27 -0
  72. package/esm2022/lib/core/store/search/search.selectors.mjs +2 -2
  73. package/esm2022/lib/core/store/search/search.service.mjs +4 -3
  74. package/esm2022/restitution/style/css.component.mjs +2 -2
  75. package/esm2022/toolbox/components/share/share.component.mjs +47 -18
  76. package/esm2022/toolbox/style/css.component.mjs +2 -2
  77. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +3 -3
  78. package/fesm2022/provoly-dashboard-admin.mjs +12 -12
  79. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  80. package/fesm2022/provoly-dashboard-components-text-editor.mjs +356 -0
  81. package/fesm2022/provoly-dashboard-components-text-editor.mjs.map +1 -0
  82. package/fesm2022/provoly-dashboard-dataset.mjs +128 -18
  83. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  84. package/fesm2022/provoly-dashboard-filters-autocomplete.mjs +1 -1
  85. package/fesm2022/provoly-dashboard-filters-autocomplete.mjs.map +1 -1
  86. package/fesm2022/provoly-dashboard-import.mjs +53 -25
  87. package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
  88. package/fesm2022/provoly-dashboard-restitution.mjs +2 -2
  89. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  90. package/fesm2022/provoly-dashboard-toolbox.mjs +47 -19
  91. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  92. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +2 -2
  93. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  94. package/fesm2022/provoly-dashboard.mjs +72 -10
  95. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  96. package/import/components/import.component.d.ts +10 -5
  97. package/import/import.module.d.ts +2 -1
  98. package/import/store/import.actions.d.ts +2 -0
  99. package/import/store/import.service.d.ts +1 -1
  100. package/lib/core/components/tabs/tab-group.component.d.ts +3 -2
  101. package/lib/core/i18n/en.translations.d.ts +2 -1
  102. package/lib/core/i18n/fr.translations.d.ts +1 -0
  103. package/lib/core/store/data-source/data-source.actions.d.ts +10 -0
  104. package/lib/core/store/data-source/data-source.effects.d.ts +8 -5
  105. package/lib/core/store/data-source/data-source.model.d.ts +3 -0
  106. package/lib/core/store/data-source/data-source.service.d.ts +2 -0
  107. package/lib/core/store/search/filter-param-encoder.d.ts +5 -0
  108. package/package.json +36 -30
  109. package/restitution/style/_o-restitution.scss +0 -1
  110. package/styles/base/_utils.scss +4 -0
  111. package/styles/components/_o-text-panel.scss +64 -0
  112. package/styles/main.scss +1 -0
  113. package/styles-theme/components-theme/_a-form-field.theme.scss +2 -0
  114. package/toolbox/components/share/share.component.d.ts +13 -7
  115. package/toolbox/style/_o-dashboard-details.component.scss +3 -25
@@ -3,7 +3,7 @@ import { OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
3
3
  import * as i1$1 from '@angular/common';
4
4
  import { CommonModule, AsyncPipe, DOCUMENT } from '@angular/common';
5
5
  import * as i1$2 from '@angular/common/http';
6
- import { HttpHeaders, HttpParams, HttpClientModule } from '@angular/common/http';
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, SecurityContext, NgModule, EventEmitter, Output, TemplateRef, ViewChild, Injector, ContentChildren, forwardRef, HostListener, ViewContainerRef, ViewChildren, ViewEncapsulation, createNgModule } from '@angular/core';
9
9
  import * as i3 from '@angular/router';
@@ -478,6 +478,7 @@ const enTranslations$1 = {
478
478
  restricted: 'Restricted',
479
479
  type: 'Visibility',
480
480
  users: 'Authorized users',
481
+ noGroups: 'No group available',
481
482
  conflict: {
482
483
  title: 'Warning',
483
484
  main: 'The following data sources are not accessible to the selected user groups:',
@@ -494,6 +495,7 @@ const enTranslations$1 = {
494
495
  view: 'View metadata'
495
496
  },
496
497
  components: {
498
+ searchData: 'Search',
497
499
  chipsSelector: {
498
500
  datasource: {
499
501
  select: 'Select one or more data source(s):',
@@ -513,8 +515,7 @@ const enTranslations$1 = {
513
515
  AUTHENTICATED: 'Connected users'
514
516
  }
515
517
  }
516
- },
517
- searchData: 'Search'
518
+ }
518
519
  },
519
520
  errors: {
520
521
  default: 'There is an error. Try again or contact your administrator',
@@ -877,6 +878,7 @@ const frTranslations$1 = {
877
878
  restricted: 'Restreint',
878
879
  type: 'Visibilité',
879
880
  users: 'Utilisateurs autorisés',
881
+ noGroups: 'Aucun groupe disponible',
880
882
  conflict: {
881
883
  title: 'Warning',
882
884
  main: 'Attention, les sources de données suivantes ne seront pas visible de toutes les personnes accédant à la présentation : ',
@@ -2179,9 +2181,11 @@ const enTranslations = {
2179
2181
  consult: 'View',
2180
2182
  title: 'Dataset catalog',
2181
2183
  search: 'Search',
2184
+ description: 'Description',
2182
2185
  date: 'Date',
2183
2186
  status: 'Status',
2184
2187
  versionHistory: 'Version history',
2188
+ information: 'Information',
2185
2189
  data: 'Data',
2186
2190
  table: 'Table',
2187
2191
  map: 'Map',
@@ -2193,6 +2197,10 @@ const enTranslations = {
2193
2197
  noActiveVersion: 'No active version',
2194
2198
  version: {
2195
2199
  title: 'Title',
2200
+ productionDate: 'Production date',
2201
+ producer: 'Data producer',
2202
+ additionalInformation: 'Version information',
2203
+ notProvided: 'Not provided',
2196
2204
  INDEXING: 'Loading',
2197
2205
  LOADING: 'Loading',
2198
2206
  INACTIVE: 'Invalid',
@@ -2250,9 +2258,11 @@ const frTranslations = {
2250
2258
  consult: 'Consulter',
2251
2259
  title: 'Catalogue de données',
2252
2260
  search: 'Rechercher',
2261
+ description: 'Description',
2253
2262
  date: 'Date',
2254
2263
  status: 'Statut',
2255
2264
  versionHistory: 'Historique de versions',
2265
+ information: 'Informations',
2256
2266
  data: 'Données',
2257
2267
  table: 'Tableau',
2258
2268
  map: 'Carte',
@@ -2264,6 +2274,10 @@ const frTranslations = {
2264
2274
  noActiveVersion: 'Aucune version active',
2265
2275
  version: {
2266
2276
  title: 'Intitulé',
2277
+ productionDate: 'Date de production',
2278
+ producer: 'Producteur de données',
2279
+ additionalInformation: 'Informations de la version',
2280
+ notProvided: 'Non renseigné',
2267
2281
  INDEXING: 'En chargement',
2268
2282
  LOADING: 'En chargement',
2269
2283
  INACTIVE: 'Invalide',
@@ -2381,7 +2395,9 @@ const DataSourceActions = {
2381
2395
  getById: createAction('[Dataset/Previews] get by id', props()),
2382
2396
  getByIdSuccess: createAction('[Dataset/Previews] get by id Success', props()),
2383
2397
  getByIdFailure: createAction('[Dataset/Previews] get by id Failure', props())
2384
- }
2398
+ },
2399
+ updateDatasetVersionInfo: createAction('[Dataset] Update Dataset version info', props()),
2400
+ updateDatasetVersionInfoSuccess: createAction('[Dataset] Update Dataset version info success', props()),
2385
2401
  }
2386
2402
  };
2387
2403
 
@@ -2499,6 +2515,9 @@ const dataSourceReducer = createReducer(initialDataSourceState, on(DataSourceAct
2499
2515
  error: action.error,
2500
2516
  previews: [],
2501
2517
  loading: false
2518
+ })), on(DataSourceActions.dataset.updateDatasetVersionInfoSuccess, (state, action) => ({
2519
+ ...state,
2520
+ datasetVersions: state.datasetVersions.map((version) => (version.id === action.version.id ? { ...version, ...action.version } : version))
2502
2521
  })));
2503
2522
 
2504
2523
  var NamedQueryTypes;
@@ -4125,6 +4144,32 @@ const SearchActions = {
4125
4144
  setPossibleFilterValues: createAction('[Dashboard] (bus) set possible filter values', props())
4126
4145
  };
4127
4146
 
4147
+ const operators = [
4148
+ 'EQUALS',
4149
+ 'CONTAINS',
4150
+ 'I_CONTAINS',
4151
+ 'GREATER_THAN',
4152
+ 'START_WITH',
4153
+ 'END_WITH',
4154
+ 'LOWER_THAN',
4155
+ 'INSIDE',
4156
+ 'OUTSIDE'
4157
+ ];
4158
+ class FilterParamEncoder extends HttpUrlEncodingCodec {
4159
+ constructor() {
4160
+ super();
4161
+ }
4162
+ encodeValue(v) {
4163
+ const hasOperator = operators.includes(v.split(',')?.[1]);
4164
+ if (hasOperator) {
4165
+ const fragments = v.split(',');
4166
+ fragments[2] = encodeURIComponent(fragments.splice(2).join('\\,'));
4167
+ return fragments.slice(0, 3).join(',');
4168
+ }
4169
+ return encodeURIComponent(v);
4170
+ }
4171
+ }
4172
+
4128
4173
  class SearchService {
4129
4174
  constructor(httpClient, store) {
4130
4175
  this.httpClient = httpClient;
@@ -4151,7 +4196,7 @@ class SearchService {
4151
4196
  return '|' + this.getItemsFilter(id, this.getOrder(quickOrder[id])).toString() + '|';
4152
4197
  }
4153
4198
  getItemsFilter(id, cumulative, includeLimit = true) {
4154
- let params = cumulative ?? new HttpParams();
4199
+ let params = cumulative ?? new HttpParams({ encoder: new FilterParamEncoder() });
4155
4200
  if (this.filters[id]) {
4156
4201
  this.filters[id]
4157
4202
  .filter((filter) => filter.value !== null && filter.value !== undefined)
@@ -4166,7 +4211,7 @@ class SearchService {
4166
4211
  return params;
4167
4212
  }
4168
4213
  getOrder(quickOrder, cumulative) {
4169
- let params = cumulative ?? new HttpParams();
4214
+ let params = cumulative ?? new HttpParams({ encoder: new FilterParamEncoder() });
4170
4215
  if (quickOrder) {
4171
4216
  params = params.append('order', `${quickOrder.attribute},${quickOrder.asc ?? ''}`);
4172
4217
  }
@@ -4334,6 +4379,18 @@ class DataSourceService {
4334
4379
  .select(ConfigSelectors.refUrl)
4335
4380
  .pipe(switchMap((url) => this.httpClient.post(encodeURI(`${url}/dataset-versions/id/${versionId}/activate`), null)));
4336
4381
  }
4382
+ getLastActiveDatasetVersion(datasetId) {
4383
+ return this.store
4384
+ .select(ConfigSelectors.refUrl)
4385
+ .pipe(switchMap((url) => this.httpClient.get(encodeURI(`${url}/datasets/${datasetId}/dataset-versions/latest`))));
4386
+ }
4387
+ updateDatasetVersionInfo(version) {
4388
+ return this.store.select(ConfigSelectors.refUrl).pipe(switchMap((url) => this.httpClient.put(encodeURI(`${url}/dataset-versions/id/${version.id}`), {
4389
+ additionalInformation: version.additionalInformation,
4390
+ producer: version.producer,
4391
+ productionDate: version.productionDate
4392
+ })));
4393
+ }
4337
4394
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DataSourceService, deps: [{ token: i1.Store }, { token: i1$2.HttpClient }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4338
4395
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DataSourceService, providedIn: 'root' }); }
4339
4396
  }
@@ -4464,6 +4521,7 @@ class DataSourceEffects {
4464
4521
  this.activateDatasetVersion$ = createEffect(() => this.actions$.pipe(ofType(DataSourceActions.dataset.activateDatasetVersion), switchMap((action) => this.dataSourceService.activateDatasetVersion(action.versionId).pipe(map((datasetVersion) => DataSourceActions.dataset.activateDatasetVersionSuccess({ datasetVersion })), catchError((error) => [DataSourceActions.dataset.activateDatasetVersionFailure({ error })])))));
4465
4522
  this.activateOrDeactivateDatasetVersionSuccess$ = createEffect(() => this.actions$.pipe(ofType(DataSourceActions.dataset.activateDatasetVersionSuccess, DataSourceActions.dataset.deactivateDatasetVersionSuccess), map((action) => DataSourceActions.dataset.listVersions())));
4466
4523
  this.previewsGetById$ = createEffect(() => this.actions$.pipe(ofType(DataSourceActions.dataset.previews.getById), switchMap((action) => this.dataSourceService.getPreviews(action.id).pipe(map((previews) => DataSourceActions.dataset.previews.getByIdSuccess({ previews })), catchError((error) => [DataSourceActions.dataset.previews.getByIdFailure({ error })])))));
4524
+ this.updateDatasetVersionInfo = createEffect(() => this.actions$.pipe(ofType(DataSourceActions.dataset.updateDatasetVersionInfo), switchMap((action) => this.dataSourceService.updateDatasetVersionInfo(action.version).pipe(map((previews) => DataSourceActions.dataset.updateDatasetVersionInfoSuccess({ version: action.version }))))));
4467
4525
  }
4468
4526
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", 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 }); }
4469
4527
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DataSourceEffects }); }
@@ -5032,6 +5090,7 @@ class TabGroupComponent {
5032
5090
  constructor() {
5033
5091
  this.translationStringBase = '';
5034
5092
  this.currentTabIndex = 0;
5093
+ this.clickedTabIdx = new EventEmitter();
5035
5094
  TabGroupComponent.instanceId++;
5036
5095
  }
5037
5096
  ngAfterContentInit() {
@@ -5041,9 +5100,10 @@ class TabGroupComponent {
5041
5100
  switch(tab, index) {
5042
5101
  this.currentTab = tab;
5043
5102
  this.currentTabIndex = index;
5103
+ this.clickedTabIdx.emit(index);
5044
5104
  }
5045
5105
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TabGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5046
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: TabGroupComponent, selector: "pry-tab-group", inputs: { translationStringBase: "translationStringBase" }, 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" }] }); }
5106
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", 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" }] }); }
5047
5107
  }
5048
5108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TabGroupComponent, decorators: [{
5049
5109
  type: Component,
@@ -5053,6 +5113,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
5053
5113
  }], tabs: [{
5054
5114
  type: ContentChildren,
5055
5115
  args: [TabComponent]
5116
+ }], clickedTabIdx: [{
5117
+ type: Output
5056
5118
  }] } });
5057
5119
 
5058
5120
  class PryGeoAuthService {
@@ -5380,7 +5442,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
5380
5442
 
5381
5443
  const feature$2 = createFeatureSelector(searchFeatureKey);
5382
5444
  const searchLoading = createSelector(feature$2, (state) => state.searchLoading);
5383
- const possibleFilterValues = (filterId) => createSelector(feature$2, (state) => (filterId ? state.possibleFilterValues[filterId] : []));
5445
+ const possibleFilterValues = (filterId) => createSelector(feature$2, (state) => filterId && state.possibleFilterValues[filterId] ? state.possibleFilterValues[filterId] : []);
5384
5446
  const SearchSelectors = {
5385
5447
  feature: feature$2,
5386
5448
  searchLoading,
@@ -7515,7 +7577,7 @@ class PryGroupShareComponent extends SubscriptionnerDirective {
7515
7577
  useExisting: forwardRef(() => PryGroupShareComponent),
7516
7578
  multi: true
7517
7579
  }
7518
- ], usesInheritance: true, ngImport: i0, template: "@if(templateData$ | async; as data) {\n <div class=\"m-form-radio-group\">\n <div *ngFor=\"let type of visibilityTypes\" class=\"m-form-radio-group__item\">\n <input\n type=\"radio\"\n name=\"visibility\"\n [id]=\"type.label\"\n [value]=\"type.value\"\n [ngModel]=\"radioValue\"\n (ngModelChange)=\"changeGroupsBasedOnRadioValue($event)\"\n [disabled]=\"data.disableRadios[type.value]\"\n />\n <label [for]=\"type.label\" class=\"a-label\" [class.a-label--disabled]=\"data.disableRadios[type.value]\">\n {{ '@pry.share.' + type.label | i18n }}\n </label>\n </div>\n </div>\n @if (radioValue === PryVisibilityType.RESTRICTED) {\n <pry-chips-selector\n bindLabel=\"name\"\n bindValue=\"name\"\n translationStringBase=\"@pry.components.chipsSelector.share.\"\n itemTranslationStringBase=\"@pry.components.chipsSelector.share.groups.\"\n [showActionButtons]=\"false\"\n [items]=\"data.groups\"\n (itemsChanged)=\"changeGroups($event)\"\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: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ChipsSelectorComponent, selector: "pry-chips-selector", inputs: ["bindValue", "bindLabel", "translationStringBase", "itemTranslationStringBase", "showActionButtons", "showSearchbar", "items", "usedItems"], outputs: ["cancel", "validated", "previousTab", "nextTab", "itemsChanged"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7580
+ ], usesInheritance: true, ngImport: i0, template: "@if (templateData$ | async; as data) {\n <div class=\"m-form-radio-group\">\n <div *ngFor=\"let type of visibilityTypes\" class=\"m-form-radio-group__item\">\n <input\n type=\"radio\"\n name=\"visibility\"\n [id]=\"type.label\"\n [value]=\"type.value\"\n [ngModel]=\"radioValue\"\n (ngModelChange)=\"changeGroupsBasedOnRadioValue($event)\"\n [disabled]=\"data.disableRadios[type.value]\"\n />\n <label [for]=\"type.label\" class=\"a-label\" [class.a-label--disabled]=\"data.disableRadios[type.value]\">\n {{ '@pry.share.' + type.label | i18n }}\n </label>\n </div>\n </div>\n @if (radioValue === PryVisibilityType.RESTRICTED) {\n @if (data.groups.length > 0) {\n <pry-chips-selector\n bindLabel=\"name\"\n bindValue=\"name\"\n translationStringBase=\"@pry.components.chipsSelector.share.\"\n itemTranslationStringBase=\"@pry.components.chipsSelector.share.groups.\"\n [showActionButtons]=\"false\"\n [items]=\"data.groups\"\n (itemsChanged)=\"changeGroups($event)\"\n [usedItems]=\"data.assignedGroups\"\n [showSearchbar]=\"data.groups.length > 6\"\n ></pry-chips-selector>\n } @else {\n <p class=\"m-text--center\">\n {{ '@pry.share.noGroups' | i18n }}\n </p>\n }\n }\n}\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ChipsSelectorComponent, selector: "pry-chips-selector", inputs: ["bindValue", "bindLabel", "translationStringBase", "itemTranslationStringBase", "showActionButtons", "showSearchbar", "items", "usedItems"], outputs: ["cancel", "validated", "previousTab", "nextTab", "itemsChanged"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7519
7581
  }
7520
7582
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryGroupShareComponent, decorators: [{
7521
7583
  type: Component,
@@ -7525,7 +7587,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
7525
7587
  useExisting: forwardRef(() => PryGroupShareComponent),
7526
7588
  multi: true
7527
7589
  }
7528
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if(templateData$ | async; as data) {\n <div class=\"m-form-radio-group\">\n <div *ngFor=\"let type of visibilityTypes\" class=\"m-form-radio-group__item\">\n <input\n type=\"radio\"\n name=\"visibility\"\n [id]=\"type.label\"\n [value]=\"type.value\"\n [ngModel]=\"radioValue\"\n (ngModelChange)=\"changeGroupsBasedOnRadioValue($event)\"\n [disabled]=\"data.disableRadios[type.value]\"\n />\n <label [for]=\"type.label\" class=\"a-label\" [class.a-label--disabled]=\"data.disableRadios[type.value]\">\n {{ '@pry.share.' + type.label | i18n }}\n </label>\n </div>\n </div>\n @if (radioValue === PryVisibilityType.RESTRICTED) {\n <pry-chips-selector\n bindLabel=\"name\"\n bindValue=\"name\"\n translationStringBase=\"@pry.components.chipsSelector.share.\"\n itemTranslationStringBase=\"@pry.components.chipsSelector.share.groups.\"\n [showActionButtons]=\"false\"\n [items]=\"data.groups\"\n (itemsChanged)=\"changeGroups($event)\"\n [usedItems]=\"data.assignedGroups\"\n [showSearchbar]=\"data.groups.length > 6\"\n ></pry-chips-selector>\n }\n}\n" }]
7590
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (templateData$ | async; as data) {\n <div class=\"m-form-radio-group\">\n <div *ngFor=\"let type of visibilityTypes\" class=\"m-form-radio-group__item\">\n <input\n type=\"radio\"\n name=\"visibility\"\n [id]=\"type.label\"\n [value]=\"type.value\"\n [ngModel]=\"radioValue\"\n (ngModelChange)=\"changeGroupsBasedOnRadioValue($event)\"\n [disabled]=\"data.disableRadios[type.value]\"\n />\n <label [for]=\"type.label\" class=\"a-label\" [class.a-label--disabled]=\"data.disableRadios[type.value]\">\n {{ '@pry.share.' + type.label | i18n }}\n </label>\n </div>\n </div>\n @if (radioValue === PryVisibilityType.RESTRICTED) {\n @if (data.groups.length > 0) {\n <pry-chips-selector\n bindLabel=\"name\"\n bindValue=\"name\"\n translationStringBase=\"@pry.components.chipsSelector.share.\"\n itemTranslationStringBase=\"@pry.components.chipsSelector.share.groups.\"\n [showActionButtons]=\"false\"\n [items]=\"data.groups\"\n (itemsChanged)=\"changeGroups($event)\"\n [usedItems]=\"data.assignedGroups\"\n [showSearchbar]=\"data.groups.length > 6\"\n ></pry-chips-selector>\n } @else {\n <p class=\"m-text--center\">\n {{ '@pry.share.noGroups' | i18n }}\n </p>\n }\n }\n}\n" }]
7529
7591
  }], ctorParameters: () => [{ type: i1.Store }, { type: i0.ChangeDetectorRef }], propDecorators: { disableRadios: [{
7530
7592
  type: Input
7531
7593
  }], allowedGroups: [{