@provoly/dashboard 1.2.9 → 1.2.11

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 (113) hide show
  1. package/admin/admin.module.d.ts +2 -3
  2. package/dataset/components/dataset.component.d.ts +3 -11
  3. package/dataset/dataset.module.d.ts +7 -9
  4. package/dataset/public-api.d.ts +0 -1
  5. package/dataset/style/_o-pry-dataset.scss +3 -72
  6. package/esm2022/admin/admin.module.mjs +1 -5
  7. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +3 -4
  8. package/esm2022/dataset/components/dataset.component.mjs +8 -33
  9. package/esm2022/dataset/dataset.module.mjs +9 -13
  10. package/esm2022/dataset/public-api.mjs +1 -2
  11. package/esm2022/dataset/style/css.component.mjs +3 -3
  12. package/esm2022/lib/core/components/chips-selector/chips-selector.component.mjs +7 -27
  13. package/esm2022/lib/core/components/chips-selector/chips-selector.module.mjs +21 -0
  14. package/esm2022/lib/core/components/select/select-a11y.service.mjs +5 -4
  15. package/esm2022/lib/core/components/select/select.component.mjs +8 -5
  16. package/esm2022/lib/core/components/select-image/select-image.component.mjs +1 -1
  17. package/esm2022/lib/core/components/share/group-share/group-share.component.mjs +3 -3
  18. package/esm2022/lib/core/components/share/share.module.mjs +8 -12
  19. package/esm2022/lib/core/components/share/share.utils.mjs +4 -4
  20. package/esm2022/lib/core/core.module.mjs +4 -8
  21. package/esm2022/lib/core/i18n/en.translations.mjs +10 -10
  22. package/esm2022/lib/core/i18n/fr.translations.mjs +10 -10
  23. package/esm2022/lib/core/pipes/get-secured-image/get-secured-image.pipe.mjs +21 -0
  24. package/esm2022/lib/core/pipes/since-date/since-date.module.mjs +18 -0
  25. package/esm2022/lib/core/pipes/since-date/since-date.pipe.mjs +55 -0
  26. package/esm2022/lib/core/pipes/translate-id/translate-id.pipe.mjs +108 -0
  27. package/esm2022/lib/core/pipes/translate-item-to-symbol/translate-item-to-symbol.pipe.mjs +21 -0
  28. package/esm2022/lib/core/public-api.mjs +7 -4
  29. package/esm2022/lib/core/store/data-source/datasource-utils.mjs +22 -1
  30. package/esm2022/lib/dashboard/components/widgets/data-widget.component.mjs +2 -2
  31. package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-card/datasource-card.component.mjs +60 -0
  32. package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-list/datasource-list.component.mjs +95 -0
  33. package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-selector.component.mjs +53 -48
  34. package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +6 -7
  35. package/esm2022/lib/dashboard/components/widgets/public-api.mjs +3 -1
  36. package/esm2022/lib/dashboard/dashboard.module.mjs +19 -7
  37. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +73 -3
  38. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +2 -45
  39. package/esm2022/lib/dashboard/tooltip/components/default/default.tooltip.component.mjs +2 -2
  40. package/esm2022/pipeline/components/pipeline-details/pipeline-details.component.mjs +2 -3
  41. package/esm2022/pipeline/components/pipeline-list/pipeline-list.component.mjs +2 -3
  42. package/esm2022/pipeline/pipeline.module.mjs +8 -9
  43. package/esm2022/presentation/components/presentation.component.mjs +2 -3
  44. package/esm2022/presentation/presentation.module.mjs +8 -9
  45. package/esm2022/restitution/components/restitution/restitution.component.mjs +4 -4
  46. package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +2 -3
  47. package/esm2022/restitution/restitution.module.mjs +2 -3
  48. package/esm2022/restitution/style/css.component.mjs +2 -2
  49. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +2 -2
  50. package/fesm2022/provoly-dashboard-admin.mjs +0 -4
  51. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  52. package/fesm2022/provoly-dashboard-dataset.mjs +30 -87
  53. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  54. package/fesm2022/provoly-dashboard-pipeline.mjs +17 -19
  55. package/fesm2022/provoly-dashboard-pipeline.mjs.map +1 -1
  56. package/fesm2022/provoly-dashboard-presentation.mjs +8 -10
  57. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  58. package/fesm2022/provoly-dashboard-restitution.mjs +7 -9
  59. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  60. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +1 -1
  61. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  62. package/fesm2022/provoly-dashboard.mjs +3535 -3296
  63. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  64. package/lib/core/components/chips-selector/chips-selector.component.d.ts +1 -6
  65. package/lib/core/components/chips-selector/chips-selector.module.d.ts +11 -0
  66. package/lib/core/components/select/select-a11y.service.d.ts +1 -1
  67. package/lib/core/components/select/select.component.d.ts +2 -1
  68. package/lib/core/components/share/share.module.d.ts +3 -4
  69. package/lib/core/core.module.d.ts +26 -27
  70. package/lib/core/i18n/en.translations.d.ts +9 -9
  71. package/lib/core/i18n/fr.translations.d.ts +9 -9
  72. package/{components/sinceDate/sinceDate.module.d.ts → lib/core/pipes/since-date/since-date.module.d.ts} +3 -2
  73. package/{components/sinceDate/sinceDate.pipe.d.ts → lib/core/pipes/since-date/since-date.pipe.d.ts} +4 -4
  74. package/lib/core/{components → pipes}/translate-id/translate-id.pipe.d.ts +0 -2
  75. package/lib/core/public-api.d.ts +6 -3
  76. package/lib/core/store/data-source/datasource-utils.d.ts +4 -1
  77. package/lib/dashboard/components/widgets/datasource-selector/datasource-card/datasource-card.component.d.ts +24 -0
  78. package/lib/dashboard/components/widgets/datasource-selector/datasource-list/datasource-list.component.d.ts +35 -0
  79. package/lib/dashboard/components/widgets/datasource-selector/datasource-selector.component.d.ts +19 -11
  80. package/lib/dashboard/components/widgets/header/widget-header.component.d.ts +1 -1
  81. package/lib/dashboard/components/widgets/public-api.d.ts +2 -0
  82. package/lib/dashboard/dashboard.module.d.ts +18 -15
  83. package/lib/dashboard/store/dashboard.effects.d.ts +8 -0
  84. package/package.json +37 -43
  85. package/pipeline/pipeline.module.d.ts +3 -4
  86. package/presentation/presentation.module.d.ts +7 -8
  87. package/restitution/components/restitution/restitution.component.d.ts +1 -1
  88. package/restitution/restitution.module.d.ts +1 -2
  89. package/restitution/style/_o-restitution.scss +4 -0
  90. package/styles/components/_a-chip.scss +44 -0
  91. package/styles/components/_o-datasource-selector.scss +192 -0
  92. package/styles/components/_o-widget.scss +1 -1
  93. package/styles/main.scss +1 -0
  94. package/styles-theme/main-theme.scss +0 -3
  95. package/components/sinceDate/index.d.ts +0 -5
  96. package/components/sinceDate/public-api.d.ts +0 -2
  97. package/dataset/components/dataset-card/dataset-card.component.d.ts +0 -18
  98. package/dataset/style/_o-pry-dataset-card.scss +0 -93
  99. package/esm2022/components/sinceDate/provoly-dashboard-components-sinceDate.mjs +0 -5
  100. package/esm2022/components/sinceDate/public-api.mjs +0 -3
  101. package/esm2022/components/sinceDate/sinceDate.module.mjs +0 -16
  102. package/esm2022/components/sinceDate/sinceDate.pipe.mjs +0 -55
  103. package/esm2022/dataset/components/dataset-card/dataset-card.component.mjs +0 -41
  104. package/esm2022/lib/core/components/get-secured-image/get-secured-image.pipe.mjs +0 -21
  105. package/esm2022/lib/core/components/translate-id/translate-id.pipe.mjs +0 -114
  106. package/esm2022/lib/core/components/translate-item-to-symbol/translate-item-to-symbol.pipe.mjs +0 -23
  107. package/fesm2022/provoly-dashboard-components-sinceDate.mjs +0 -75
  108. package/fesm2022/provoly-dashboard-components-sinceDate.mjs.map +0 -1
  109. package/styles-theme/components-theme/_a-chip.theme.scss +0 -32
  110. package/styles-theme/components-theme/_o-pry-dataset-card.theme.scss +0 -26
  111. package/styles-theme/components-theme/_o-pry-dataset.theme.scss +0 -4
  112. /package/lib/core/{components → pipes}/get-secured-image/get-secured-image.pipe.d.ts +0 -0
  113. /package/lib/core/{components → pipes}/translate-item-to-symbol/translate-item-to-symbol.pipe.d.ts +0 -0
@@ -1,11 +1,11 @@
1
1
  import { Component, Input } from '@angular/core';
2
2
  import equal from 'fast-deep-equal/es6';
3
3
  import { BehaviorSubject, combineLatest, distinctUntilChanged, filter, map, Subject } from 'rxjs';
4
- import { UNKNOWN_DATASOURCE } from '../../../core/components/translate-id/translate-id.pipe';
5
4
  import { DataSourceSelectors } from '../../../core/store/data-source/data-source.selectors';
6
5
  import { ResultsetUtils } from '../../resultset-utils';
7
6
  import { DashboardSelectors } from '../../store/dashboard.selectors';
8
7
  import { BaseWidgetComponent } from './base-widget.component';
8
+ import { UNKNOWN_DATASOURCE } from '../../../core/store/data-source/datasource-utils';
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "@ngrx/store";
11
11
  export class DataWidgetComponent extends BaseWidgetComponent {
@@ -58,4 +58,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
58
58
  }], staticResultSet: [{
59
59
  type: Input
60
60
  }] } });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS13aWRnZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2Rhc2hib2FyZC9jb21wb25lbnRzL3dpZGdldHMvZGF0YS13aWRnZXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sS0FBSyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBSTdGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBRzlELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxtQkFBbUI7SUFRMUQsSUFBYSxlQUFlLENBQUMsU0FBb0I7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsWUFBWSxLQUFpQixFQUFFLEVBQWM7UUFDM0MsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQVhuQixxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBbUIsSUFBSSxDQUFDLENBQUM7UUFLdEQsY0FBUyxHQUFxQyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBT3pFLElBQUks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Z0JBQ1QsU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNO2FBQzlCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxFQUNGLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUM1QyxDQUFDO0lBQ0osQ0FBQzs4R0FuRVUsbUJBQW1CO2tHQUFuQixtQkFBbUIsc0pBRG9CLEVBQUU7OzJGQUN6QyxtQkFBbUI7a0JBRC9CLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTttR0FRN0MsU0FBUztzQkFBakIsS0FBSztnQkFDTyxlQUFlO3NCQUEzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsL2VzNic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVU5LTk9XTl9EQVRBU09VUkNFIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9jb21wb25lbnRzL3RyYW5zbGF0ZS1pZC90cmFuc2xhdGUtaWQucGlwZSc7XG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC9pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXN1bHRTZXQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL3Jlc3VsdC1zZXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3N0b3JlL2RhdGEtc291cmNlL2RhdGEtc291cmNlLm1vZGVsJztcbmltcG9ydCB7IERhdGFTb3VyY2VTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3N0b3JlL2RhdGEtc291cmNlL2RhdGEtc291cmNlLnNlbGVjdG9ycyc7XG5pbXBvcnQgeyBSZXN1bHRzZXRVdGlscyB9IGZyb20gJy4uLy4uL3Jlc3VsdHNldC11dGlscyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9zdG9yZS9kYXNoYm9hcmQuc2VsZWN0b3JzJztcbmltcG9ydCB7IEJhc2VXaWRnZXRDb21wb25lbnQgfSBmcm9tICcuL2Jhc2Utd2lkZ2V0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoeyBzZWxlY3RvcjogJ3ByeS1kYXRhLXdpZGdldCcsIHRlbXBsYXRlOiAnJyB9KVxuZXhwb3J0IGNsYXNzIERhdGFXaWRnZXRDb21wb25lbnQgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29tcG9uZW50IHtcbiAgcmVzdWx0U2V0JDogT2JzZXJ2YWJsZTxSZXN1bHRTZXQ+O1xuICBzdGF0aWNSZXN1bHRTZXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZXN1bHRTZXQgfCBudWxsPihudWxsKTtcbiAgZGF0YXNvdXJjZUlkcyQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBhbGxJdGVtcyQ6IE9ic2VydmFibGU8SXRlbVtdPjtcbiAgdXNlZERhdGFzb3VyY2VzJDogT2JzZXJ2YWJsZTxEYXRhU291cmNlW10+O1xuXG4gIEBJbnB1dCgpIG9wZW5EYXRhJDogT2JzZXJ2YWJsZTx2b2lkPiB8IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBASW5wdXQoKSBzZXQgc3RhdGljUmVzdWx0U2V0KHJlc3VsdFNldDogUmVzdWx0U2V0KSB7XG4gICAgdGhpcy5zdGF0aWNSZXN1bHRTZXQkLm5leHQocmVzdWx0U2V0KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHN0b3JlOiBTdG9yZTxhbnk+LCBlbDogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKHN0b3JlLCBlbCk7XG4gICAgdGhpcy5kYXRhc291cmNlSWRzJCA9IHRoaXMubWFuaWZlc3QkLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChtYW5pZmVzdCkgPT5cbiAgICAgICAgICAoQXJyYXkuaXNBcnJheShtYW5pZmVzdC5kYXRhc291cmNlKSA/IG1hbmlmZXN0LmRhdGFzb3VyY2UgOiBbbWFuaWZlc3QuZGF0YXNvdXJjZV0pLmZpbHRlcihcbiAgICAgICAgICAgIChpZCkgPT4gISFpZFxuICAgICAgICAgICkgYXMgc3RyaW5nW11cbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMudXNlZERhdGFzb3VyY2VzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5kYXRhc291cmNlSWRzJCxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhdGFTb3VyY2VTZWxlY3RvcnMuZ2V0RGF0YVNvdXJjZXMpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFtpZHMsIGRhdGFzb3VyY2VzXSkgPT5cbiAgICAgICAgICBpZHNcbiAgICAgICAgICAgIC5tYXAoKGlkKSA9PiBkYXRhc291cmNlcy5maW5kKChkcykgPT4gZHMuaWQgPT09IGlkKSA/PyBpZClcbiAgICAgICAgICAgIC5tYXAoKG5xKSA9PiAodHlwZW9mIG5xICE9PSAnc3RyaW5nJyA/IG5xIDogVU5LTk9XTl9EQVRBU09VUkNFKG5xKSkpIGFzIERhdGFTb3VyY2VbXVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5yZXN1bHRTZXQkID0gdGhpcy5pbml0UmVzdWx0U2V0JCgpO1xuXG4gICAgdGhpcy5hbGxJdGVtcyQgPSB0aGlzLnJlc3VsdFNldCQucGlwZShcbiAgICAgIGZpbHRlcigocmVzdWx0U2V0KSA9PiAhIXJlc3VsdFNldCksXG4gICAgICBtYXAoXG4gICAgICAgIChyZXN1bHRTZXQpID0+XG4gICAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0U2V0Py5pdGVtcylcbiAgICAgICAgICAgIC5tYXAoKGNsYXNzSWQpID0+IHJlc3VsdFNldC5pdGVtc1tjbGFzc0lkXSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IFsuLi5wcmV2LCAuLi5jdXJyXSwgW10pIGFzIEl0ZW1bXVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpbml0UmVzdWx0U2V0JCgpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmVzdWx0U2V0cyksXG4gICAgICB0aGlzLmRhdGFzb3VyY2VJZHMkLFxuICAgICAgdGhpcy5zdGF0aWNSZXN1bHRTZXQkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3Jlc3VsdFNldHMsIHJlc3VsdFNldE5hbWVzQXJyYXksIHN0YXRpY1Jlc3VsdFNldF0pID0+IHtcbiAgICAgICAgaWYgKCEhc3RhdGljUmVzdWx0U2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRpY1Jlc3VsdFNldDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRTZXRBcnJheSA9IHJlc3VsdFNldE5hbWVzQXJyYXlcbiAgICAgICAgICAubWFwKChyc05hbWUpID0+IHJlc3VsdFNldHNbcnNOYW1lID8/ICcnXSlcbiAgICAgICAgICAuZmlsdGVyKChyc05hbWUpID0+ICEhcnNOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFNldEFycmF5LnJlZHVjZSgocnMxLCByczIpID0+IFJlc3VsdHNldFV0aWxzLm1lcmdlUmVzdWx0U2V0cyhyczEsIHJzMiksIHtcbiAgICAgICAgICBpdGVtczoge30sXG4gICAgICAgICAgcmVsYXRpb25zOiBbXSxcbiAgICAgICAgICBtZXJnZWQ6IHJlc3VsdFNldEFycmF5Lmxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIHYpID0+IGVxdWFsKHAsIHYpKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS13aWRnZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2Rhc2hib2FyZC9jb21wb25lbnRzL3dpZGdldHMvZGF0YS13aWRnZXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sS0FBSyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSTlHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7O0FBR3RGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxtQkFBbUI7SUFRMUQsSUFBYSxlQUFlLENBQUMsU0FBb0I7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsWUFBWSxLQUFpQixFQUFFLEVBQWM7UUFDM0MsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQVhuQixxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBbUIsSUFBSSxDQUFDLENBQUM7UUFLdEQsY0FBUyxHQUFxQyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBT3pFLElBQUks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Z0JBQ1QsU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNO2FBQzlCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxFQUNGLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUM1QyxDQUFDO0lBQ0osQ0FBQzs4R0FuRVUsbUJBQW1CO2tHQUFuQixtQkFBbUIsc0pBRG9CLEVBQUU7OzJGQUN6QyxtQkFBbUI7a0JBRC9CLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTttR0FRN0MsU0FBUztzQkFBakIsS0FBSztnQkFDTyxlQUFlO3NCQUEzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsL2VzNic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzdWx0U2V0IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC9yZXN1bHQtc2V0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhLXNvdXJjZS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhU291cmNlU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhLXNvdXJjZS5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgUmVzdWx0c2V0VXRpbHMgfSBmcm9tICcuLi8uLi9yZXN1bHRzZXQtdXRpbHMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vc3RvcmUvZGFzaGJvYXJkLnNlbGVjdG9ycyc7XG5pbXBvcnQgeyBCYXNlV2lkZ2V0Q29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLXdpZGdldC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVU5LTk9XTl9EQVRBU09VUkNFIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhc291cmNlLXV0aWxzJztcblxuQENvbXBvbmVudCh7IHNlbGVjdG9yOiAncHJ5LWRhdGEtd2lkZ2V0JywgdGVtcGxhdGU6ICcnIH0pXG5leHBvcnQgY2xhc3MgRGF0YVdpZGdldENvbXBvbmVudCBleHRlbmRzIEJhc2VXaWRnZXRDb21wb25lbnQge1xuICByZXN1bHRTZXQkOiBPYnNlcnZhYmxlPFJlc3VsdFNldD47XG4gIHN0YXRpY1Jlc3VsdFNldCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlc3VsdFNldCB8IG51bGw+KG51bGwpO1xuICBkYXRhc291cmNlSWRzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIGFsbEl0ZW1zJDogT2JzZXJ2YWJsZTxJdGVtW10+O1xuICB1c2VkRGF0YXNvdXJjZXMkOiBPYnNlcnZhYmxlPERhdGFTb3VyY2VbXT47XG5cbiAgQElucHV0KCkgb3BlbkRhdGEkOiBPYnNlcnZhYmxlPHZvaWQ+IHwgU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIEBJbnB1dCgpIHNldCBzdGF0aWNSZXN1bHRTZXQocmVzdWx0U2V0OiBSZXN1bHRTZXQpIHtcbiAgICB0aGlzLnN0YXRpY1Jlc3VsdFNldCQubmV4dChyZXN1bHRTZXQpO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc3RvcmU6IFN0b3JlPGFueT4sIGVsOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcbiAgICB0aGlzLmRhdGFzb3VyY2VJZHMkID0gdGhpcy5tYW5pZmVzdCQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG1hbmlmZXN0KSA9PlxuICAgICAgICAgIChBcnJheS5pc0FycmF5KG1hbmlmZXN0LmRhdGFzb3VyY2UpID8gbWFuaWZlc3QuZGF0YXNvdXJjZSA6IFttYW5pZmVzdC5kYXRhc291cmNlXSkuZmlsdGVyKFxuICAgICAgICAgICAgKGlkKSA9PiAhIWlkXG4gICAgICAgICAgKSBhcyBzdHJpbmdbXVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy51c2VkRGF0YXNvdXJjZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmRhdGFzb3VyY2VJZHMkLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGF0YVNvdXJjZVNlbGVjdG9ycy5nZXREYXRhU291cmNlcylcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICAoW2lkcywgZGF0YXNvdXJjZXNdKSA9PlxuICAgICAgICAgIGlkc1xuICAgICAgICAgICAgLm1hcCgoaWQpID0+IGRhdGFzb3VyY2VzLmZpbmQoKGRzKSA9PiBkcy5pZCA9PT0gaWQpID8/IGlkKVxuICAgICAgICAgICAgLm1hcCgobnEpID0+ICh0eXBlb2YgbnEgIT09ICdzdHJpbmcnID8gbnEgOiBVTktOT1dOX0RBVEFTT1VSQ0UobnEpKSkgYXMgRGF0YVNvdXJjZVtdXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnJlc3VsdFNldCQgPSB0aGlzLmluaXRSZXN1bHRTZXQkKCk7XG5cbiAgICB0aGlzLmFsbEl0ZW1zJCA9IHRoaXMucmVzdWx0U2V0JC5waXBlKFxuICAgICAgZmlsdGVyKChyZXN1bHRTZXQpID0+ICEhcmVzdWx0U2V0KSxcbiAgICAgIG1hcChcbiAgICAgICAgKHJlc3VsdFNldCkgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHRTZXQ/Lml0ZW1zKVxuICAgICAgICAgICAgLm1hcCgoY2xhc3NJZCkgPT4gcmVzdWx0U2V0Lml0ZW1zW2NsYXNzSWRdKVxuICAgICAgICAgICAgLnJlZHVjZSgocHJldiwgY3VycikgPT4gWy4uLnByZXYsIC4uLmN1cnJdLCBbXSkgYXMgSXRlbVtdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGluaXRSZXN1bHRTZXQkKCkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yZXN1bHRTZXRzKSxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZUlkcyQsXG4gICAgICB0aGlzLnN0YXRpY1Jlc3VsdFNldCRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbcmVzdWx0U2V0cywgcmVzdWx0U2V0TmFtZXNBcnJheSwgc3RhdGljUmVzdWx0U2V0XSkgPT4ge1xuICAgICAgICBpZiAoISFzdGF0aWNSZXN1bHRTZXQpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGljUmVzdWx0U2V0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdFNldEFycmF5ID0gcmVzdWx0U2V0TmFtZXNBcnJheVxuICAgICAgICAgIC5tYXAoKHJzTmFtZSkgPT4gcmVzdWx0U2V0c1tyc05hbWUgPz8gJyddKVxuICAgICAgICAgIC5maWx0ZXIoKHJzTmFtZSkgPT4gISFyc05hbWUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0U2V0QXJyYXkucmVkdWNlKChyczEsIHJzMikgPT4gUmVzdWx0c2V0VXRpbHMubWVyZ2VSZXN1bHRTZXRzKHJzMSwgcnMyKSwge1xuICAgICAgICAgIGl0ZW1zOiB7fSxcbiAgICAgICAgICByZWxhdGlvbnM6IFtdLFxuICAgICAgICAgIG1lcmdlZDogcmVzdWx0U2V0QXJyYXkubGVuZ3RoXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgdikgPT4gZXF1YWwocCwgdikpXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,60 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { DataSourceSelectors } from '../../../../../core/store/data-source/data-source.selectors';
3
+ import { map } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@ngrx/store";
6
+ import * as i2 from "@angular/forms";
7
+ import * as i3 from "../../../../../core/components/icon/icon.component";
8
+ import * as i4 from "../../../../../core/components/ellipsis.directive";
9
+ import * as i5 from "@provoly/dashboard/components/checkbox";
10
+ import * as i6 from "@angular/common";
11
+ import * as i7 from "../../../../../core/pipes/translate-id/translate-id.pipe";
12
+ import * as i8 from "../../../../../core/i18n/i18n.pipe";
13
+ import * as i9 from "../../../../../core/pipes/since-date/since-date.pipe";
14
+ export class PryDatasourceCardComponent {
15
+ constructor(store) {
16
+ this.store = store;
17
+ this.showFooter = false;
18
+ this.isSelectable = false;
19
+ this.isSelected = false;
20
+ this.clicked = new EventEmitter();
21
+ }
22
+ ngAfterContentInit() {
23
+ this.datasetVersions$ = this.store
24
+ .select(DataSourceSelectors.matchingDatasetVersions(this.datasource.id))
25
+ .pipe(map((res) => [...res].sort((a, b) => b.version - a.version)));
26
+ this.activeVersion$ = this.datasetVersions$.pipe(map((versions) => versions.sort((v1, v2) => v2.version - v1.version).find((version) => version.state === 'ACTIVE')?.lastModified));
27
+ }
28
+ truncateDescription(description, maxLength) {
29
+ if (description && description.length > maxLength) {
30
+ return description.slice(0, maxLength) + '...';
31
+ }
32
+ return description;
33
+ }
34
+ onClick() {
35
+ if (this.isSelectable) {
36
+ this.isSelected = !this.isSelected;
37
+ this.clicked.emit({ isSelected: this.isSelected, datasource: this.datasource });
38
+ }
39
+ else {
40
+ this.clicked.emit({ isSelected: false, datasource: this.datasource });
41
+ }
42
+ }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryDatasourceCardComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
44
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", 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 <h4 class=\"a-h4\">{{ datasource.name }}</h4>\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 (activeVersion$ | async) {\n {{ '@pry.dataset.since_day' | i18n }} {{ (activeVersion$ | async)! | sinceDate }}\n } @else {\n <span class=\"-italic\">{{ '@pry.dataset.noActiveVersion' | i18n }}</span>\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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i4.EllipsisDirective, selector: "[ellipsis]", inputs: ["textElementSelector"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i8.I18nPipe, name: "i18n" }, { kind: "pipe", type: i9.SinceDatePipe, name: "sinceDate" }] }); }
45
+ }
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryDatasourceCardComponent, decorators: [{
47
+ type: Component,
48
+ args: [{ selector: 'pry-datasource-card', 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 <h4 class=\"a-h4\">{{ datasource.name }}</h4>\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 (activeVersion$ | async) {\n {{ '@pry.dataset.since_day' | i18n }} {{ (activeVersion$ | async)! | sinceDate }}\n } @else {\n <span class=\"-italic\">{{ '@pry.dataset.noActiveVersion' | i18n }}</span>\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" }]
49
+ }], ctorParameters: () => [{ type: i1.Store }], propDecorators: { datasource: [{
50
+ type: Input
51
+ }], showFooter: [{
52
+ type: Input
53
+ }], isSelectable: [{
54
+ type: Input
55
+ }], isSelected: [{
56
+ type: Input
57
+ }], clicked: [{
58
+ type: Output
59
+ }] } });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9kYXNoYm9hcmQvY29tcG9uZW50cy93aWRnZXRzL2RhdGFzb3VyY2Utc2VsZWN0b3IvZGF0YXNvdXJjZS1jYXJkL2RhdGFzb3VyY2UtY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvZGFzaGJvYXJkL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhc291cmNlLXNlbGVjdG9yL2RhdGFzb3VyY2UtY2FyZC9kYXRhc291cmNlLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFFbEcsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUFPdkMsTUFBTSxPQUFPLDBCQUEwQjtJQVdyQyxZQUFvQixLQUFZO1FBQVosVUFBSyxHQUFMLEtBQUssQ0FBTztRQVR2QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFM0IsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFvRCxDQUFDO0lBS3RELENBQUM7SUFFcEMsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSzthQUMvQixNQUFNLENBQUMsbUJBQW1CLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN2RSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDOUMsR0FBRyxDQUNELENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDWCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxFQUFFLFlBQVksQ0FDakgsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELG1CQUFtQixDQUFDLFdBQStCLEVBQUUsU0FBaUI7UUFDcEUsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxTQUFTLEVBQUUsQ0FBQztZQUNsRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNqRCxDQUFDO1FBQ0QsT0FBZSxXQUFXLENBQUM7SUFDN0IsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNsRixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQztJQUNILENBQUM7OEdBdkNVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLG9OQ1h2Qywwa0VBMERBOzsyRkQvQ2EsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNFLHFCQUFxQjswRUFJdEIsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFTb3VyY2UsIERhdGFzZXRWZXJzaW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhLXNvdXJjZS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhU291cmNlU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhLXNvdXJjZS5zZWxlY3RvcnMnO1xuXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktZGF0YXNvdXJjZS1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFzb3VyY2UtY2FyZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUHJ5RGF0YXNvdXJjZUNhcmRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgQElucHV0KCkgZGF0YXNvdXJjZSE6IERhdGFTb3VyY2U7XG4gIEBJbnB1dCgpIHNob3dGb290ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNTZWxlY3RhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgY2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBkYXRhc291cmNlOiBEYXRhU291cmNlOyBpc1NlbGVjdGVkOiBib29sZWFuOyB9PigpO1xuXG4gIGRhdGFzZXRWZXJzaW9ucyQhOiBPYnNlcnZhYmxlPERhdGFzZXRWZXJzaW9uW10+O1xuICBhY3RpdmVWZXJzaW9uJCE6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTdG9yZSkge31cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5kYXRhc2V0VmVyc2lvbnMkID0gdGhpcy5zdG9yZVxuICAgICAgLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLm1hdGNoaW5nRGF0YXNldFZlcnNpb25zKHRoaXMuZGF0YXNvdXJjZS5pZCkpXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gWy4uLnJlc10uc29ydCgoYSwgYikgPT4gYi52ZXJzaW9uIC0gYS52ZXJzaW9uKSkpO1xuICAgIHRoaXMuYWN0aXZlVmVyc2lvbiQgPSB0aGlzLmRhdGFzZXRWZXJzaW9ucyQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKHZlcnNpb25zKSA9PlxuICAgICAgICAgIHZlcnNpb25zLnNvcnQoKHYxLCB2MikgPT4gdjIudmVyc2lvbiAtIHYxLnZlcnNpb24pLmZpbmQoKHZlcnNpb24pID0+IHZlcnNpb24uc3RhdGUgPT09ICdBQ1RJVkUnKT8ubGFzdE1vZGlmaWVkXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHRydW5jYXRlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCwgbWF4TGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChkZXNjcmlwdGlvbiAmJiBkZXNjcmlwdGlvbi5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdGlvbi5zbGljZSgwLCBtYXhMZW5ndGgpICsgJy4uLic7XG4gICAgfVxuICAgIHJldHVybiA8c3RyaW5nPmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgb25DbGljaygpIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGFibGUpIHtcbiAgICAgIHRoaXMuaXNTZWxlY3RlZCA9ICF0aGlzLmlzU2VsZWN0ZWQ7XG4gICAgICB0aGlzLmNsaWNrZWQuZW1pdCh7IGlzU2VsZWN0ZWQ6IHRoaXMuaXNTZWxlY3RlZCwgZGF0YXNvdXJjZTogdGhpcy5kYXRhc291cmNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsaWNrZWQuZW1pdCh7IGlzU2VsZWN0ZWQ6IGZhbHNlLCBkYXRhc291cmNlOiB0aGlzLmRhdGFzb3VyY2UgfSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiby1kYXRhc291cmNlLWNhcmRcIlxuICBbY2xhc3MuLW5vLWZvb3Rlcl09XCIhc2hvd0Zvb3RlclwiXG4gIFtjbGFzcy4taXMtc2VsZWN0YWJsZV09XCJpc1NlbGVjdGFibGVcIlxuICAoY2xpY2spPVwib25DbGljaygpXCJcbj5cbiAgPGRpdiBjbGFzcz1cIm8tZGF0YXNvdXJjZS1jYXJkX19oZWFkZXJcIj5cbiAgICA8aW1nXG4gICAgICBhbHQ9XCJcIlxuICAgICAgW2hlaWdodF09XCIyNVwiXG4gICAgICBbd2lkdGhdPVwiMjVcIlxuICAgICAgW3NyY109XCJkYXRhc291cmNlLmlkIHwgdHJhbnNsYXRlSWQ6IHsgdHlwZTogJ2RhdGFzb3VyY2UnLCBvdXRwdXQ6ICdpY29uJyB9IHwgYXN5bmNcIlxuICAgIC8+XG4gICAgPGRpdiBjbGFzcz1cIm8tZGF0YXNvdXJjZS1jYXJkX190aXRsZVwiIGVsbGlwc2lzIHRleHRFbGVtZW50U2VsZWN0b3I9XCIuYS1oNFwiPlxuICAgICAgPGg0IGNsYXNzPVwiYS1oNFwiPnt7IGRhdGFzb3VyY2UubmFtZSB9fTwvaDQ+XG4gICAgPC9kaXY+XG4gICAgQGlmIChpc1NlbGVjdGFibGUpIHtcbiAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgY2xhc3M9XCJvLWRhdGFzb3VyY2UtY2FyZF9fY2hlY2tib3hcIlxuICAgICAgICBbbmdNb2RlbF09XCJpc1NlbGVjdGVkXCJcbiAgICAgID48L3ByeS1jaGVja2JveD5cbiAgICB9XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiby1kYXRhc291cmNlLWNhcmRfX2NvbnRlbnQgdS1kaXNwbGF5LWZsZXggLWNvbHVtbiAtZ2FwLTEwXCI+XG4gICAgQGlmIChkYXRhc291cmNlLmRlc2NyaXB0aW9uKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiby1kYXRhc291cmNlLWNhcmRfX2Rlc2NyaXB0aW9uXCIgZWxsaXBzaXMgdGV4dEVsZW1lbnRTZWxlY3Rvcj1cIi5kZXNjcmlwdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj57eyB0cnVuY2F0ZURlc2NyaXB0aW9uKGRhdGFzb3VyY2UuZGVzY3JpcHRpb24sIDEwMCkgfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGRpdiBjbGFzcz1cIm8tZGF0YXNvdXJjZS1jYXJkX19kZXNjcmlwdGlvbiAtaXRhbGljXCI+e3sgJ0BwcnkuZGF0YXNldC5ub0Rlc2NyaXB0aW9uJyB8IGkxOG4gfX08L2Rpdj5cbiAgICB9XG5cbiAgICA8c3BhbiBjbGFzcz1cIm8tZGF0YXNvdXJjZS1jYXJkX19kYXRlXCI+XG4gICAgICBAaWYgKGFjdGl2ZVZlcnNpb24kIHwgYXN5bmMpIHtcbiAgICAgICAge3sgJ0BwcnkuZGF0YXNldC5zaW5jZV9kYXknIHwgaTE4biB9fSB7eyAoYWN0aXZlVmVyc2lvbiQgfCBhc3luYykhIHwgc2luY2VEYXRlIH19XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCItaXRhbGljXCI+e3sgJ0BwcnkuZGF0YXNldC5ub0FjdGl2ZVZlcnNpb24nIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L3NwYW4+XG4gICAgQGlmIChkYXRhc291cmNlLnNvdXJjZVR5cGUgPT09ICdkYXRhc2V0JyAmJiBkYXRhc291cmNlLmNhdGVnb3JpZXMgJiYgZGF0YXNvdXJjZS5jYXRlZ29yaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJvLWRhdGFzb3VyY2UtY2FyZF9fY2F0ZWdvcmllcyB1LWRpc3BsYXktZmxleCAtd3JhcFwiPlxuICAgICAgICBAZm9yIChjYXRlZ29yeSBvZiBkYXRhc291cmNlLmNhdGVnb3JpZXM7IHRyYWNrIGNhdGVnb3J5LmlkKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhLWNoaXAgLW1kXCI+e3sgY2F0ZWdvcnkubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuICBAaWYgKHNob3dGb290ZXIpIHtcbiAgICA8ZGl2IGNsYXNzPVwiby1kYXRhc291cmNlLWNhcmRfX2Zvb3RlclwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuXCI+XG4gICAgICAgIHt7ICdAcHJ5LmRhdGFzZXQuY29uc3VsdCcgfCBpMThuIH19XG4gICAgICAgIDxwcnktaWNvbiBbd2lkdGhdPVwiMjBcIiBbaGVpZ2h0XT1cIjIwXCIgaWNvblN2Zz1cImFycm93X3JpZ2h0XCI+PC9wcnktaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,95 @@
1
+ import { BehaviorSubject, combineLatest, map } from 'rxjs';
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { DataSourceActions } from '../../../../../core/store/data-source/data-source.actions';
4
+ import { DataSourceSelectors } from '../../../../../core/store/data-source/data-source.selectors';
5
+ import { DashboardActions } from '../../../../store/dashboard.actions';
6
+ import { SubscriptionnerDirective } from '../../../subscriptionner.directive';
7
+ import { DatasourceUtils } from '../../../../../core/store/data-source/datasource-utils';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@ngrx/store";
10
+ import * as i2 from "@angular/forms";
11
+ import * as i3 from "../../../../../core/components/select/select.component";
12
+ import * as i4 from "../../../../../core/components/icon/icon.component";
13
+ import * as i5 from "../datasource-card/datasource-card.component";
14
+ import * as i6 from "@angular/common";
15
+ import * as i7 from "../../../../../core/i18n/i18n.pipe";
16
+ export class PryDatasourceListComponent extends SubscriptionnerDirective {
17
+ set mode(mode) {
18
+ this._mode$.next(mode);
19
+ }
20
+ ;
21
+ set selectedDatasources(datasourceIds) {
22
+ this.selectedDatasources$.next(datasourceIds);
23
+ }
24
+ constructor(store) {
25
+ super();
26
+ this.store = store;
27
+ this.search$ = new BehaviorSubject('');
28
+ this.selectedCategories = [];
29
+ this.selectedCategories$ = new BehaviorSubject([]);
30
+ this.selectedDatasources$ = new BehaviorSubject([]);
31
+ this._mode$ = new BehaviorSubject('list');
32
+ this.consultedDataset = new EventEmitter();
33
+ this.datasourceSelected = new EventEmitter();
34
+ this.store.dispatch(DataSourceActions.load());
35
+ this.datasources$ = combineLatest([
36
+ this.store.select(DataSourceSelectors.getDataSourcesSorted),
37
+ this.selectedDatasources$
38
+ ]).pipe(map(([datasources, selectedDatasources]) => DatasourceUtils.getAllDatasourcesWithUnknowns(datasources, selectedDatasources)));
39
+ this.datasets$ = this.store.select(DataSourceSelectors.datasets);
40
+ this.store.dispatch(DashboardActions.fetchManifestsList());
41
+ this.store.dispatch(DataSourceActions.dataset.getCategories());
42
+ this.categories$ = this.store.select(DataSourceSelectors.categories);
43
+ this.store.dispatch(DataSourceActions.dataset.listVersions());
44
+ }
45
+ ngOnInit() {
46
+ this.filteredDatasources$ = combineLatest([
47
+ this._mode$,
48
+ this.search$,
49
+ this.selectedCategories$,
50
+ this.selectedDatasources$,
51
+ this.datasources$,
52
+ this.datasets$
53
+ ]).pipe(map(([mode, query, selectedCategories, selectedDs, datasources, datasets]) => mode === 'list' ? this.search(datasets, query, selectedCategories)
54
+ : this.search(datasources, query, selectedCategories)
55
+ .map((dataset) => ({ ...dataset, isSelected: selectedDs.includes(dataset.id) }))
56
+ .sort((a, b) => Number(b.isSelected) - Number(a.isSelected))));
57
+ }
58
+ search(datasets, search, categories) {
59
+ return datasets
60
+ .filter((dataset) => (search.length === 0 || dataset.name.toLowerCase().includes(search.toLowerCase())) &&
61
+ (categories.length === 0 || this.doesDatasourceMatchCategoryFilter(dataset, categories)))
62
+ .sort((a, b) => a.name.localeCompare(b.name));
63
+ }
64
+ doesDatasourceMatchCategoryFilter(datasource, selectedCategories) {
65
+ return datasource.sourceType === 'dataset' && datasource.categories
66
+ ? selectedCategories.reduce((acc, selectedCat) => acc && datasource.categories.map((cat) => cat.id).includes(selectedCat.id), true)
67
+ : false;
68
+ }
69
+ onDatasourceClick({ isSelected, datasource }) {
70
+ if (this._mode$.value === 'list') {
71
+ this.consultedDataset.emit(datasource);
72
+ }
73
+ else {
74
+ this.selectedDatasources$.next(isSelected
75
+ ? [...this.selectedDatasources$.value, datasource.id]
76
+ : this.selectedDatasources$.value.filter((id) => id !== datasource.id));
77
+ this.datasourceSelected.emit(this.selectedDatasources$.value);
78
+ }
79
+ }
80
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryDatasourceListComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
81
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryDatasourceListComponent, selector: "pry-datasource-list", inputs: { mode: "mode", selectedDatasources: "selectedDatasources" }, outputs: { consultedDataset: "consultedDataset", datasourceSelected: "datasourceSelected" }, 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.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryDatasourceCardComponent, selector: "pry-datasource-card", inputs: ["datasource", "showFooter", "isSelectable", "isSelected"], outputs: ["clicked"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.I18nPipe, name: "i18n" }] }); }
82
+ }
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryDatasourceListComponent, decorators: [{
84
+ type: Component,
85
+ args: [{ selector: 'pry-datasource-list', 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" }]
86
+ }], ctorParameters: () => [{ type: i1.Store }], propDecorators: { mode: [{
87
+ type: Input
88
+ }], selectedDatasources: [{
89
+ type: Input
90
+ }], consultedDataset: [{
91
+ type: Output
92
+ }], datasourceSelected: [{
93
+ type: Output
94
+ }] } });
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9kYXNoYm9hcmQvY29tcG9uZW50cy93aWRnZXRzL2RhdGFzb3VyY2Utc2VsZWN0b3IvZGF0YXNvdXJjZS1saXN0L2RhdGFzb3VyY2UtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvZGFzaGJvYXJkL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhc291cmNlLXNlbGVjdG9yL2RhdGFzb3VyY2UtbGlzdC9kYXRhc291cmNlLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFrQyxNQUFNLE1BQU0sQ0FBQztBQUMzRixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBRWxHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7Ozs7Ozs7O0FBTXpGLE1BQU0sT0FBTywwQkFBMkIsU0FBUSx3QkFBd0I7SUFXdEUsSUFBYSxJQUFJLENBQUMsSUFBeUI7UUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIs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RUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFtRDtRQUMzRixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBcUIsQ0FBQyxDQUFDO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FDNUIsVUFBVTtnQkFDUixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDckQsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUN6RSxDQUFDO1lBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7OEdBeEZVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLHFQQ2Z2QyxzK0RBa0RBOzsyRkRuQ2EsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNFLHFCQUFxQjswRUFjbEIsSUFBSTtzQkFBaEIsS0FBSztnQkFHTyxtQkFBbUI7c0JBQS9CLEtBQUs7Z0JBSUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgRGF0YXNldCwgRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc3RvcmUvZGF0YS1zb3VyY2UvZGF0YS1zb3VyY2UubW9kZWwnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZUFjdGlvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL3N0b3JlL2RhdGEtc291cmNlL2RhdGEtc291cmNlLmFjdGlvbnMnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZVNlbGVjdG9ycyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc3RvcmUvZGF0YS1zb3VyY2UvZGF0YS1zb3VyY2Uuc2VsZWN0b3JzJztcbmltcG9ydCB7IENhdGVnb3J5IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zdG9yZS9jYXRlZ29yeS9jYXRlZ29yeS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQWN0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlL2Rhc2hib2FyZC5hY3Rpb25zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL3N1YnNjcmlwdGlvbm5lci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0YXNvdXJjZVV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhc291cmNlLXV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LWRhdGFzb3VyY2UtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhc291cmNlLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByeURhdGFzb3VyY2VMaXN0Q29tcG9uZW50IGV4dGVuZHMgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGF0YXNvdXJjZXMkOiBPYnNlcnZhYmxlPERhdGFTb3VyY2VbXT47XG4gIGRhdGFzZXRzJDogT2JzZXJ2YWJsZTxEYXRhc2V0W10+O1xuICBzZWFyY2gkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gIGNhdGVnb3JpZXMkOiBPYnNlcnZhYmxlPENhdGVnb3J5W10+O1xuICBzZWxlY3RlZENhdGVnb3JpZXMgPSBbXTtcbiAgc2VsZWN0ZWRDYXRlZ29yaWVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2F0ZWdvcnlbXT4oW10pO1xuICBmaWx0ZXJlZERhdGFzb3VyY2VzJCE6IE9ic2VydmFibGU8KERhdGFTb3VyY2UgJiB7IGlzU2VsZWN0ZWQ/OiBib29sZWFuIH0pW10+O1xuICBzZWxlY3RlZERhdGFzb3VyY2VzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcbiAgX21vZGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCdsaXN0Jyk7XG5cbiAgQElucHV0KCkgc2V0IG1vZGUobW9kZTogJ2xpc3QnIHwgJ3NlbGVjdG9yJykge1xuICAgIHRoaXMuX21vZGUkLm5leHQobW9kZSk7XG4gIH07XG4gIEBJbnB1dCgpIHNldCBzZWxlY3RlZERhdGFzb3VyY2VzKGRhdGFzb3VyY2VJZHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5zZWxlY3RlZERhdGFzb3VyY2VzJC5uZXh0KGRhdGFzb3VyY2VJZHMpO1xuICB9XG5cbiAgQE91dHB1dCgpIGNvbnN1bHRlZERhdGFzZXQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFzZXQ+KCk7XG4gIEBPdXRwdXQoKSBkYXRhc291cmNlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzdG9yZTogU3RvcmU8YW55Pikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXRhU291cmNlQWN0aW9ucy5sb2FkKCkpO1xuICAgIHRoaXMuZGF0YXNvdXJjZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmdldERhdGFTb3VyY2VzU29ydGVkKSxcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhc291cmNlcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbZGF0YXNvdXJjZXMsIHNlbGVjdGVkRGF0YXNvdXJjZXNdKSA9PlxuICAgICAgICBEYXRhc291cmNlVXRpbHMuZ2V0QWxsRGF0YXNvdXJjZXNXaXRoVW5rbm93bnMoZGF0YXNvdXJjZXMsIHNlbGVjdGVkRGF0YXNvdXJjZXMpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLmRhdGFzZXRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhdGFTb3VyY2VTZWxlY3RvcnMuZGF0YXNldHMpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5mZXRjaE1hbmlmZXN0c0xpc3QoKSk7XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhdGFTb3VyY2VBY3Rpb25zLmRhdGFzZXQuZ2V0Q2F0ZWdvcmllcygpKTtcbiAgICB0aGlzLmNhdGVnb3JpZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRGF0YVNvdXJjZVNlbGVjdG9ycy5jYXRlZ29yaWVzKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhdGFTb3VyY2VBY3Rpb25zLmRhdGFzZXQubGlzdFZlcnNpb25zKCkpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5maWx0ZXJlZERhdGFzb3VyY2VzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5fbW9kZSQsXG4gICAgICB0aGlzLnNlYXJjaCQsXG4gICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcyQsXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YXNvdXJjZXMkLFxuICAgICAgdGhpcy5kYXRhc291cmNlcyQsXG4gICAgICB0aGlzLmRhdGFzZXRzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFttb2RlLCBxdWVyeSwgc2VsZWN0ZWRDYXRlZ29yaWVzLCBzZWxlY3RlZERzLCBkYXRhc291cmNlcywgZGF0YXNldHNdKSA9PlxuICAgICAgICBtb2RlID09PSAnbGlzdCcgPyB0aGlzLnNlYXJjaChkYXRhc2V0cywgcXVlcnksIHNlbGVjdGVkQ2F0ZWdvcmllcylcbiAgICAgICAgOiB0aGlzLnNlYXJjaChkYXRhc291cmNlcywgcXVlcnksIHNlbGVjdGVkQ2F0ZWdvcmllcylcbiAgICAgICAgICAubWFwKChkYXRhc2V0KSA9PiAoeyAuLi5kYXRhc2V0LCBpc1NlbGVjdGVkOiBzZWxlY3RlZERzLmluY2x1ZGVzKGRhdGFzZXQuaWQpIH0pKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBOdW1iZXIoYi5pc1NlbGVjdGVkKSAtIE51bWJlcihhLmlzU2VsZWN0ZWQpKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHNlYXJjaChkYXRhc2V0czogRGF0YVNvdXJjZVtdLCBzZWFyY2g6IHN0cmluZywgY2F0ZWdvcmllczogQ2F0ZWdvcnlbXSk6IERhdGFTb3VyY2VbXSB7XG4gICAgcmV0dXJuIGRhdGFzZXRzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoZGF0YXNldCkgPT5cbiAgICAgICAgICAoc2VhcmNoLmxlbmd0aCA9PT0gMCB8fCBkYXRhc2V0Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpICYmXG4gICAgICAgICAgKGNhdGVnb3JpZXMubGVuZ3RoID09PSAwIHx8IHRoaXMuZG9lc0RhdGFzb3VyY2VNYXRjaENhdGVnb3J5RmlsdGVyKGRhdGFzZXQsIGNhdGVnb3JpZXMpKVxuICAgICAgKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgZG9lc0RhdGFzb3VyY2VNYXRjaENhdGVnb3J5RmlsdGVyKGRhdGFzb3VyY2U6IERhdGFTb3VyY2UsIHNlbGVjdGVkQ2F0ZWdvcmllczogQ2F0ZWdvcnlbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkYXRhc291cmNlLnNvdXJjZVR5cGUgPT09ICdkYXRhc2V0JyAmJiBkYXRhc291cmNlLmNhdGVnb3JpZXNcbiAgICAgID8gc2VsZWN0ZWRDYXRlZ29yaWVzLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBzZWxlY3RlZENhdCkgPT4gYWNjICYmIGRhdGFzb3VyY2UuY2F0ZWdvcmllcyEubWFwKChjYXQpID0+IGNhdC5pZCkuaW5jbHVkZXMoc2VsZWN0ZWRDYXQuaWQpLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKVxuICAgICAgOiBmYWxzZTtcbiAgfVxuXG4gIG9uRGF0YXNvdXJjZUNsaWNrKHsgaXNTZWxlY3RlZCwgZGF0YXNvdXJjZSB9OiB7IGlzU2VsZWN0ZWQ6IGJvb2xlYW47IGRhdGFzb3VyY2U6IERhdGFTb3VyY2UgfSkge1xuICAgIGlmICh0aGlzLl9tb2RlJC52YWx1ZSA9PT0gJ2xpc3QnKSB7XG4gICAgICB0aGlzLmNvbnN1bHRlZERhdGFzZXQuZW1pdChkYXRhc291cmNlIGFzIERhdGFzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YXNvdXJjZXMkLm5leHQoXG4gICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICA/IFsuLi50aGlzLnNlbGVjdGVkRGF0YXNvdXJjZXMkLnZhbHVlLCBkYXRhc291cmNlLmlkXVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RlZERhdGFzb3VyY2VzJC52YWx1ZS5maWx0ZXIoKGlkKSA9PiBpZCAhPT0gZGF0YXNvdXJjZS5pZClcbiAgICAgICk7XG4gICAgICB0aGlzLmRhdGFzb3VyY2VTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWREYXRhc291cmNlcyQudmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm8tZGF0YXNvdXJjZS1saXN0X19oZWFkZXIgdS1kaXNwbGF5LWZsZXhcIj5cbiAgPGRpdiBjbGFzcz1cIm8tZGF0YXNvdXJjZS1saXN0X19zZWFyY2ggbS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGlkPVwiY2F0YWxvZy1zZWFyY2gtbGFiZWxcIiBmb3I9XCJjYXRhbG9nLXNlYXJjaFwiPnt7ICdAcHJ5LmRhdGFzZXQuc2VhcmNoJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgIDxpbnB1dFxuICAgICAgaWQ9XCJjYXRhbG9nLXNlYXJjaFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ0BwcnkuZGF0YXNldC5zZWFyY2hQbGFjZWhvbGRlcicgfCBpMThuXCJcbiAgICAgIFtuZ01vZGVsXT1cInNlYXJjaCQgfCBhc3luY1wiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJ0aGlzLnNlYXJjaCQubmV4dCgkZXZlbnQpXCJcbiAgICAvPlxuICAgIDxwcnktaWNvbiBjbGFzcz1cInNlYXJjaC1pY29uXCIgaWNvblN2Zz1cInNlYXJjaFwiIFt3aWR0aF09XCIyMFwiIFtoZWlnaHRdPVwiMjBcIj48L3ByeS1pY29uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm8tZGF0YXNvdXJjZS1saXN0X19jYXRlZ29yaWVzIG0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBpZD1cInRhZ3MtbGFiZWxcIiBmb3I9XCJjYXRhbG9nLWNhdGVnb3J5LXNlYXJjaFwiPnt7ICdAcHJ5LmRhdGFzZXQuZmlsdGVyJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgIDxwcnktc2VsZWN0XG4gICAgICBpZD1cImNhdGFsb2ctY2F0ZWdvcnktc2VhcmNoXCJcbiAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkQ2F0ZWdvcmllc1wiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJ0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcyQubmV4dCgkZXZlbnQpXCJcbiAgICAgIFtpdGVtc109XCJjYXRlZ29yaWVzJCB8IGFzeW5jXCJcbiAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwidGFncy1sYWJlbFwiXG4gICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICBbY2xvc2VPblNlbGVjdF09XCJmYWxzZVwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ0BwcnkuZGF0YXNldC5maWx0ZXJQbGFjZWhvbGRlcicgfCBpMThuXCJcbiAgICA+PC9wcnktc2VsZWN0PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIm8tZGF0YXNvdXJjZS1saXN0X19jb250ZW50XCI+XG4gIEBpZiAoKF9tb2RlJCB8IGFzeW5jKSA9PT0gJ2xpc3QnKSB7XG4gICAgQGZvciAoZGF0YXNvdXJjZSBvZiBmaWx0ZXJlZERhdGFzb3VyY2VzJCB8IGFzeW5jOyB0cmFjayBkYXRhc291cmNlLmlkKSB7XG4gICAgICA8cHJ5LWRhdGFzb3VyY2UtY2FyZFxuICAgICAgICBbZGF0YXNvdXJjZV09XCJkYXRhc291cmNlXCJcbiAgICAgICAgW2lzU2VsZWN0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93Rm9vdGVyXT1cInRydWVcIlxuICAgICAgICAoY2xpY2tlZCk9XCJvbkRhdGFzb3VyY2VDbGljaygkZXZlbnQpXCJcbiAgICAgID48L3ByeS1kYXRhc291cmNlLWNhcmQ+XG4gICAgfVxuICB9IEBlbHNlIGlmICgoX21vZGUkIHwgYXN5bmMpID09PSAnc2VsZWN0b3InKSB7XG4gICAgQGZvciAoZGF0YXNvdXJjZSBvZiBmaWx0ZXJlZERhdGFzb3VyY2VzJCB8IGFzeW5jOyB0cmFjayBkYXRhc291cmNlLmlkKSB7XG4gICAgICA8cHJ5LWRhdGFzb3VyY2UtY2FyZFxuICAgICAgICBbZGF0YXNvdXJjZV09XCJkYXRhc291cmNlXCJcbiAgICAgICAgW2lzU2VsZWN0YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgW3Nob3dGb290ZXJdPVwiZmFsc2VcIlxuICAgICAgICAoY2xpY2tlZCk9XCJvbkRhdGFzb3VyY2VDbGljaygkZXZlbnQpXCJcbiAgICAgICAgW2lzU2VsZWN0ZWRdPVwiZGF0YXNvdXJjZS5pc1NlbGVjdGVkID8/IGZhbHNlXCJcbiAgICAgID48L3ByeS1kYXRhc291cmNlLWNhcmQ+XG4gICAgfVxuICB9XG48L2Rpdj5cbiJdfQ==
@@ -1,65 +1,70 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { BehaviorSubject, combineLatest, map } from 'rxjs';
3
- import { UNKNOWN_DATASOURCE } from '../../../../core/components/translate-id/translate-id.pipe';
3
+ import { SubscriptionnerDirective } from '../../subscriptionner.directive';
4
+ import { DatasourceUtils } from '../../../../core/store/data-source/datasource-utils';
4
5
  import { DataSourceSelectors } from '../../../../core/store/data-source/data-source.selectors';
5
- import { ChipsSelectorComponent } from '../../../../core/components/chips-selector/chips-selector.component';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@ngrx/store";
8
- import * as i2 from "../../../../core/i18n/i18n.service";
9
- import * as i3 from "@angular/common";
10
- import * as i4 from "@angular/forms";
11
- import * as i5 from "../../../../core/components/icon/icon.component";
12
- import * as i6 from "../../../../core/i18n/i18n.pipe";
13
- export class DatasourceSelectorComponent extends ChipsSelectorComponent {
14
- set usedItems(items) {
15
- this._usedItems$.next(items);
16
- }
8
+ import * as i2 from "@angular/common";
9
+ import * as i3 from "../../../../core/components/icon/icon.component";
10
+ import * as i4 from "./datasource-list/datasource-list.component";
11
+ import * as i5 from "../../../../core/i18n/i18n.pipe";
12
+ export class DatasourceSelectorComponent extends SubscriptionnerDirective {
17
13
  set manifest(manifest) {
18
14
  this.manifest$.next(manifest);
15
+ this.selectedIds$.next(DatasourceUtils.getDatasourceArray(manifest?.datasource));
19
16
  }
20
- constructor(store, cdr, i18n) {
21
- super(cdr, i18n);
17
+ constructor(store) {
18
+ super();
22
19
  this.store = store;
23
- this._usedItems$ = new BehaviorSubject([]);
24
20
  this.manifest$ = new BehaviorSubject(null);
25
- this.subscriptions.add(combineLatest([this.manifest$, this.store.select(DataSourceSelectors.getDataSourcesSorted)])
26
- .pipe(map(([manifest, allNamedQueries]) => {
27
- let dss = [...allNamedQueries];
28
- if (!!manifest) {
29
- const manifestNamedQueries = Array.isArray(manifest.datasource)
30
- ? manifest.datasource
31
- : [manifest.datasource];
32
- manifestNamedQueries.forEach((manifestNamedQuery) => {
33
- const alreadyPresent = !!allNamedQueries.find((nq) => nq.id === manifestNamedQuery);
34
- if (!alreadyPresent) {
35
- dss.push(UNKNOWN_DATASOURCE(manifestNamedQuery ?? ''));
36
- }
37
- });
38
- }
39
- return dss;
40
- }))
41
- .subscribe((datasources) => {
42
- this.items$.next(datasources);
43
- }));
44
- this.usedDatasources$ = combineLatest([
45
- this._usedItems$,
46
- this.store.select(DataSourceSelectors.getDataSources)
47
- ]).pipe(map(([usedDatasources, datasources]) => usedDatasources
48
- .map((usedDatasource) => datasources.find((ds) => ds.id === usedDatasource.id) ?? usedDatasource)
49
- .map((nq) => (typeof nq !== 'string' ? nq : UNKNOWN_DATASOURCE(nq)))));
50
- this.subscriptions.add(this.usedDatasources$.subscribe((usedDatasources) => {
51
- this.usedItems$.next(usedDatasources);
52
- }));
21
+ this.selectedIds$ = new BehaviorSubject([]);
22
+ this.showButtons = true;
23
+ this.showTitle = true;
24
+ this.previousTab = new EventEmitter();
25
+ this.nextTab = new EventEmitter();
26
+ this.cancel = new EventEmitter();
27
+ this.validated = new EventEmitter();
28
+ this.itemsChanged = new EventEmitter();
29
+ this.datasources$ = combineLatest([
30
+ this.store.select(DataSourceSelectors.getDataSourcesSorted),
31
+ this.selectedIds$
32
+ ]).pipe(map(([datasources, selectedIds]) => DatasourceUtils.getAllDatasourcesWithUnknowns(datasources, selectedIds)));
33
+ this.selectedDatasources$ = combineLatest([this.datasources$, this.selectedIds$]).pipe(map(([datasources, selected]) => datasources.filter((ds) => selected.includes(ds.id))));
34
+ }
35
+ isGeo(item) {
36
+ return DatasourceUtils.isGeo(item);
37
+ }
38
+ toggleSelection(id) {
39
+ this.selectedIds$.next(this.selectedIds$.value.includes(id)
40
+ ? this.selectedIds$.value.filter((i) => i !== id)
41
+ : [...this.selectedIds$.value, id]);
53
42
  }
54
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DatasourceSelectorComponent, deps: [{ token: i1.Store }, { token: i0.ChangeDetectorRef }, { token: i2.PryI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
55
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: DatasourceSelectorComponent, selector: "pry-datasource-selector", inputs: { usedItems: "usedItems", manifest: "manifest" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-chips-selector\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"dialog_namedqueries\">\n <div *ngIf=\"showSearchbar\" class=\"o-widget__search\">\n <input\n id=\"catalog-search\"\n (keydown.shift.tab)=\"previousTab.emit()\"\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 <div class=\"o-chips-selector__items\">\n <div *ngIf=\"((usedItems$ | async) ?? []).length > 0; else noItems\" class=\"o-chips-selector__used-items\">\n <h4 class=\"a-h4\">{{ translationStringBase + 'selection' | i18n }}</h4>\n <ul class=\"o-chips-selector__list\">\n <li *ngFor=\"let item of usedItems$ | async\" class=\"o-chips-selector__item\">\n <button class=\"a-chip -md o-chips-selector__chip\" (click)=\"toggleItemSelection(item)\" type=\"button\">\n <p>\n {{ getItemLabel(item) }}\n </p>\n <pry-icon *ngIf=\"isGeo(item)\" iconSvg=\"globe\" [width]=\"22\" [height]=\"22\"></pry-icon>\n <pry-icon [iconSvg]=\"'close'\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </button>\n </li>\n </ul>\n </div>\n <ng-template #noItems>\n <span class=\"-no-items\">{{ translationStringBase + 'noItemSelected' | i18n }}</span>\n </ng-template>\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 <li *ngFor=\"let item of unusedItems$ | async\" 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 <pry-icon *ngIf=\"isGeo(item)\" iconSvg=\"globe\" [width]=\"22\" [height]=\"22\"></pry-icon>\n </button>\n </li>\n </ul>\n </div>\n </div>\n <div *ngIf=\"showActionButtons\" class=\"m-btn-group o-chips-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</div>\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: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.I18nPipe, name: "i18n" }] }); }
43
+ updateDatasourceList(ids) {
44
+ this.selectedIds$.next(ids);
45
+ this.itemsChanged.emit(ids);
46
+ }
47
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DatasourceSelectorComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", 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 ></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: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i4.PryDatasourceListComponent, selector: "pry-datasource-list", inputs: ["mode", "selectedDatasources"], outputs: ["consultedDataset", "datasourceSelected"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.I18nPipe, name: "i18n" }] }); }
56
49
  }
57
50
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DatasourceSelectorComponent, decorators: [{
58
51
  type: Component,
59
- args: [{ selector: 'pry-datasource-selector', template: "<div class=\"o-chips-selector\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"dialog_namedqueries\">\n <div *ngIf=\"showSearchbar\" class=\"o-widget__search\">\n <input\n id=\"catalog-search\"\n (keydown.shift.tab)=\"previousTab.emit()\"\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 <div class=\"o-chips-selector__items\">\n <div *ngIf=\"((usedItems$ | async) ?? []).length > 0; else noItems\" class=\"o-chips-selector__used-items\">\n <h4 class=\"a-h4\">{{ translationStringBase + 'selection' | i18n }}</h4>\n <ul class=\"o-chips-selector__list\">\n <li *ngFor=\"let item of usedItems$ | async\" class=\"o-chips-selector__item\">\n <button class=\"a-chip -md o-chips-selector__chip\" (click)=\"toggleItemSelection(item)\" type=\"button\">\n <p>\n {{ getItemLabel(item) }}\n </p>\n <pry-icon *ngIf=\"isGeo(item)\" iconSvg=\"globe\" [width]=\"22\" [height]=\"22\"></pry-icon>\n <pry-icon [iconSvg]=\"'close'\" [width]=\"17\" [height]=\"17\"></pry-icon>\n </button>\n </li>\n </ul>\n </div>\n <ng-template #noItems>\n <span class=\"-no-items\">{{ translationStringBase + 'noItemSelected' | i18n }}</span>\n </ng-template>\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 <li *ngFor=\"let item of unusedItems$ | async\" 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 <pry-icon *ngIf=\"isGeo(item)\" iconSvg=\"globe\" [width]=\"22\" [height]=\"22\"></pry-icon>\n </button>\n </li>\n </ul>\n </div>\n </div>\n <div *ngIf=\"showActionButtons\" class=\"m-btn-group o-chips-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</div>\n" }]
60
- }], ctorParameters: () => [{ type: i1.Store }, { type: i0.ChangeDetectorRef }, { type: i2.PryI18nService }], propDecorators: { usedItems: [{
52
+ 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 ></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" }]
53
+ }], ctorParameters: () => [{ type: i1.Store }], propDecorators: { showButtons: [{
54
+ type: Input
55
+ }], showTitle: [{
61
56
  type: Input
62
57
  }], manifest: [{
63
58
  type: Input
59
+ }], previousTab: [{
60
+ type: Output
61
+ }], nextTab: [{
62
+ type: Output
63
+ }], cancel: [{
64
+ type: Output
65
+ }], validated: [{
66
+ type: Output
67
+ }], itemsChanged: [{
68
+ type: Output
64
69
  }] } });
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvZGFzaGJvYXJkL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhc291cmNlLXNlbGVjdG9yL2RhdGFzb3VyY2Utc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2NvcmUvY29tcG9uZW50cy9jaGlwcy1zZWxlY3Rvci9jaGlwcy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBRWhHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDOzs7Ozs7OztBQVM3RyxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsc0JBQXNCO0lBSXJFLElBQXNCLFNBQVMsQ0FBQyxLQUFZO1FBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFhLFFBQVEsQ0FBQyxRQUErQjtRQUNuRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBSUQsWUFBb0IsS0FBWSxFQUFFLEdBQXNCLEVBQUUsSUFBb0I7UUFDNUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxJ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TyxRQUFRO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFVOS05PV05fREFUQVNPVVJDRSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvY29tcG9uZW50cy90cmFuc2xhdGUtaWQvdHJhbnNsYXRlLWlkLnBpcGUnO1xuaW1wb3J0IHsgTmFtZWRRdWVyeSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc3RvcmUvZGF0YS1zb3VyY2UvZGF0YS1zb3VyY2UubW9kZWwnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZVNlbGVjdG9ycyB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc3RvcmUvZGF0YS1zb3VyY2UvZGF0YS1zb3VyY2Uuc2VsZWN0b3JzJztcbmltcG9ydCB7IENoaXBzU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2NvbXBvbmVudHMvY2hpcHMtc2VsZWN0b3IvY2hpcHMtc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFdpZGdldE1hbmlmZXN0IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tb2RlbC9tYW5pZmVzdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vc3Vic2NyaXB0aW9ubmVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBQcnlJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvaTE4bi9pMThuLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktZGF0YXNvdXJjZS1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi4vLi4vLi4vLi4vY29yZS9jb21wb25lbnRzL2NoaXBzLXNlbGVjdG9yL2NoaXBzLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEYXRhc291cmNlU2VsZWN0b3JDb21wb25lbnQgZXh0ZW5kcyBDaGlwc1NlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlIHtcbiAgX3VzZWRJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdIGFzIGFueVtdKTtcbiAgdXNlZERhdGFzb3VyY2VzJDogT2JzZXJ2YWJsZTxOYW1lZFF1ZXJ5W10+O1xuXG4gIEBJbnB1dCgpIG92ZXJyaWRlIHNldCB1c2VkSXRlbXMoaXRlbXM6IGFueVtdKSB7XG4gICAgdGhpcy5fdXNlZEl0ZW1zJC5uZXh0KGl0ZW1zKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBtYW5pZmVzdChtYW5pZmVzdDogV2lkZ2V0TWFuaWZlc3QgfCBudWxsKSB7XG4gICAgdGhpcy5tYW5pZmVzdCQubmV4dChtYW5pZmVzdCk7XG4gIH1cblxuICBtYW5pZmVzdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFdpZGdldE1hbmlmZXN0IHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmUsIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIGkxOG46IFByeUkxOG5TZXJ2aWNlKSB7XG4gICAgc3VwZXIoY2RyLCBpMThuKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5tYW5pZmVzdCQsIHRoaXMuc3RvcmUuc2VsZWN0KERhdGFTb3VyY2VTZWxlY3RvcnMuZ2V0RGF0YVNvdXJjZXNTb3J0ZWQpXSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChbbWFuaWZlc3QsIGFsbE5hbWVkUXVlcmllc10pID0+IHtcbiAgICAgICAgICAgIGxldCBkc3MgPSBbLi4uYWxsTmFtZWRRdWVyaWVzXTtcbiAgICAgICAgICAgIGlmICghIW1hbmlmZXN0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hbmlmZXN0TmFtZWRRdWVyaWVzID0gQXJyYXkuaXNBcnJheShtYW5pZmVzdC5kYXRhc291cmNlKVxuICAgICAgICAgICAgICAgID8gbWFuaWZlc3QuZGF0YXNvdXJjZVxuICAgICAgICAgICAgICAgIDogW21hbmlmZXN0LmRhdGFzb3VyY2VdO1xuICAgICAgICAgICAgICBtYW5pZmVzdE5hbWVkUXVlcmllcy5mb3JFYWNoKChtYW5pZmVzdE5hbWVkUXVlcnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbHJlYWR5UHJlc2VudCA9ICEhYWxsTmFtZWRRdWVyaWVzLmZpbmQoKG5xKSA9PiBucS5pZCA9PT0gbWFuaWZlc3ROYW1lZFF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlQcmVzZW50KSB7XG4gICAgICAgICAgICAgICAgICBkc3MucHVzaChVTktOT1dOX0RBVEFTT1VSQ0UobWFuaWZlc3ROYW1lZFF1ZXJ5ID8/ICcnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkc3M7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChkYXRhc291cmNlcykgPT4ge1xuICAgICAgICAgIHRoaXMuaXRlbXMkLm5leHQoZGF0YXNvdXJjZXMpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnVzZWREYXRhc291cmNlcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuX3VzZWRJdGVtcyQsXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmdldERhdGFTb3VyY2VzKVxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbdXNlZERhdGFzb3VyY2VzLCBkYXRhc291cmNlc10pID0+XG4gICAgICAgICAgdXNlZERhdGFzb3VyY2VzXG4gICAgICAgICAgICAubWFwKCh1c2VkRGF0YXNvdXJjZSkgPT4gZGF0YXNvdXJjZXMuZmluZCgoZHMpID0+IGRzLmlkID09PSB1c2VkRGF0YXNvdXJjZS5pZCkgPz8gdXNlZERhdGFzb3VyY2UpXG4gICAgICAgICAgICAubWFwKChucSkgPT4gKHR5cGVvZiBucSAhPT0gJ3N0cmluZycgPyBucSA6IFVOS05PV05fREFUQVNPVVJDRShucSkpKSBhcyBOYW1lZFF1ZXJ5W11cbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudXNlZERhdGFzb3VyY2VzJC5zdWJzY3JpYmUoKHVzZWREYXRhc291cmNlcykgPT4ge1xuICAgICAgICB0aGlzLnVzZWRJdGVtcyQubmV4dCh1c2VkRGF0YXNvdXJjZXMpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiby1jaGlwcy1zZWxlY3RvclwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiIGFyaWEtbGFiZWxsZWRieT1cImRpYWxvZ19uYW1lZHF1ZXJpZXNcIj5cbiAgPGRpdiAqbmdJZj1cInNob3dTZWFyY2hiYXJcIiBjbGFzcz1cIm8td2lkZ2V0X19zZWFyY2hcIj5cbiAgICA8aW5wdXRcbiAgICAgIGlkPVwiY2F0YWxvZy1zZWFyY2hcIlxuICAgICAgKGtleWRvd24uc2hpZnQudGFiKT1cInByZXZpb3VzVGFiLmVtaXQoKVwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ0BwcnkuY29tcG9uZW50cy5zZWFyY2hEYXRhJyB8IGkxOG5cIlxuICAgICAgW25nTW9kZWxdPVwic2VhcmNoJCB8IGFzeW5jXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAvPlxuICAgIDxwcnktaWNvbiBpY29uU3ZnPVwic2VhcmNoXCIgW3dpZHRoXT1cIjE3XCIgW2hlaWdodF09XCIxN1wiPjwvcHJ5LWljb24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiby1jaGlwcy1zZWxlY3Rvcl9faXRlbXNcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiKCh1c2VkSXRlbXMkIHwgYXN5bmMpID8/IFtdKS5sZW5ndGggPiAwOyBlbHNlIG5vSXRlbXNcIiBjbGFzcz1cIm8tY2hpcHMtc2VsZWN0b3JfX3VzZWQtaXRlbXNcIj5cbiAgICAgIDxoNCBjbGFzcz1cImEtaDRcIj57eyB0cmFuc2xhdGlvblN0cmluZ0Jhc2UgKyAnc2VsZWN0aW9uJyB8IGkxOG4gfX08L2g0PlxuICAgICAgPHVsIGNsYXNzPVwiby1jaGlwcy1zZWxlY3Rvcl9fbGlzdFwiPlxuICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdXNlZEl0ZW1zJCB8IGFzeW5jXCIgY2xhc3M9XCJvLWNoaXBzLXNlbGVjdG9yX19pdGVtXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtY2hpcCAtbWQgby1jaGlwcy1zZWxlY3Rvcl9fY2hpcFwiIChjbGljayk9XCJ0b2dnbGVJdGVtU2VsZWN0aW9uKGl0ZW0pXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIHt7IGdldEl0ZW1MYWJlbChpdGVtKSB9fVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPHByeS1pY29uICpuZ0lmPVwiaXNHZW8oaXRlbSlcIiBpY29uU3ZnPVwiZ2xvYmVcIiBbd2lkdGhdPVwiMjJcIiBbaGVpZ2h0XT1cIjIyXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgIDxwcnktaWNvbiBbaWNvblN2Z109XCInY2xvc2UnXCIgW3dpZHRoXT1cIjE3XCIgW2hlaWdodF09XCIxN1wiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjbm9JdGVtcz5cbiAgICAgIDxzcGFuIGNsYXNzPVwiLW5vLWl0ZW1zXCI+e3sgdHJhbnNsYXRpb25TdHJpbmdCYXNlICsgJ25vSXRlbVNlbGVjdGVkJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiby1jaGlwcy1zZWxlY3Rvcl9fdW51c2VkLWl0ZW1zXCI+XG4gICAgICA8aDQgY2xhc3M9XCJhLWg0XCI+e3sgdHJhbnNsYXRpb25TdHJpbmdCYXNlICsgJ3NlbGVjdCcgfCBpMThuIH19PC9oND5cbiAgICAgIDx1bCBjbGFzcz1cIm8tY2hpcHMtc2VsZWN0b3JfX2xpc3RcIj5cbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIHVudXNlZEl0ZW1zJCB8IGFzeW5jXCIgY2xhc3M9XCJvLWNoaXBzLXNlbGVjdG9yX19pdGVtXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtY2hpcCBhLWNoaXAtLWxpZ2h0IC1tZCBvLWNoaXBzLXNlbGVjdG9yX19jaGlwXCIgKGNsaWNrKT1cInRvZ2dsZUl0ZW1TZWxlY3Rpb24oaXRlbSlcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyB0cmFuc2xhdGlvblN0cmluZ0Jhc2UgKyAnc2VsZWN0SXRlbScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJhLXBcIj57eyBnZXRJdGVtTGFiZWwoaXRlbSkgfX08L3A+XG4gICAgICAgICAgICA8cHJ5LWljb24gKm5nSWY9XCJpc0dlbyhpdGVtKVwiIGljb25Tdmc9XCJnbG9iZVwiIFt3aWR0aF09XCIyMlwiIFtoZWlnaHRdPVwiMjJcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJzaG93QWN0aW9uQnV0dG9uc1wiIGNsYXNzPVwibS1idG4tZ3JvdXAgby1jaGlwcy1zZWxlY3Rvcl9fZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbC5lbWl0KClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIj5cbiAgICAgIHt7ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QuY2xvc2UnIHwgaTE4biB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cInZhbGlkYXRlZC5lbWl0KClcIlxuICAgICAgI3ZhbGlkYXRlXG4gICAgICAoa2V5ZG93bi50YWIpPVwibmV4dFRhYi5lbWl0KClcIlxuICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiXG4gICAgPlxuICAgICAge3sgJ0BwcnkudG9vbGJveC5tYW5pZmVzdC52YWxpZGF0ZWQnIHwgaTE4biB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvZGFzaGJvYXJkL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhc291cmNlLXNlbGVjdG9yL2RhdGFzb3VyY2Utc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2Rhc2hib2FyZC9jb21wb25lbnRzL3dpZGdldHMvZGF0YXNvdXJjZS1zZWxlY3Rvci9kYXRhc291cmNlLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBR3ZFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7Ozs7OztBQU0vRixNQUFNLE9BQU8sMkJBQTRCLFNBQVEsd0JBQXdCO0lBU3ZFLElBQWEsUUFBUSxDQUFDLFFBQStCO1FBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBUUQsWUFBb0IsS0FBWTtRQUM5QixLQUFLLEVBQUUsQ0FBQztRQURVLFVBQUssR0FBTCxLQUFLLENBQU87UUFsQmhDLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsSUFBSSxDQUFDLENBQUM7UUFHN0QsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVyxFQUFFLENBQUMsQ0FBQztRQUV4QyxnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBTWhCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3QixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1QixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMvQixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFLcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUM7WUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLENBQUM7WUFDM0QsSUFBSSxDQUFDLFlBQVk7U0FDbEIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUM3RyxDQUFDO1FBRUYsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNwRixHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUN2RixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFnQjtRQUNwQixPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGVBQWUsQ0FBQyxFQUFVO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDckMsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFhO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7OEdBbERVLDJCQUEyQjtrR0FBM0IsMkJBQTJCLGlUQ2J4Qyx1N0RBaURBOzsyRkRwQ2EsMkJBQTJCO2tCQUp2QyxTQUFTOytCQUNFLHlCQUF5QjswRUFVMUIsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBS0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc3RvcmUvZGF0YS1zb3VyY2UvZGF0YS1zb3VyY2UubW9kZWwnO1xuaW1wb3J0IHsgV2lkZ2V0TWFuaWZlc3QgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL21vZGVsL21hbmlmZXN0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9zdWJzY3JpcHRpb25uZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGFzb3VyY2VVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc3RvcmUvZGF0YS1zb3VyY2UvZGF0YXNvdXJjZS11dGlscyc7XG5pbXBvcnQgeyBEYXRhU291cmNlU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhLXNvdXJjZS5zZWxlY3RvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktZGF0YXNvdXJjZS1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnZGF0YXNvdXJjZS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YXNvdXJjZVNlbGVjdG9yQ29tcG9uZW50IGV4dGVuZHMgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlIHtcbiAgZGF0YXNvdXJjZXMkOiBPYnNlcnZhYmxlPERhdGFTb3VyY2VbXT47XG4gIG1hbmlmZXN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8V2lkZ2V0TWFuaWZlc3QgfCBudWxsPihudWxsKTtcbiAgc2VsZWN0ZWREYXRhc291cmNlcyQ6IE9ic2VydmFibGU8RGF0YVNvdXJjZVtdPjtcblxuICBzZWxlY3RlZElkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG5cbiAgQElucHV0KCkgc2hvd0J1dHRvbnMgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93VGl0bGUgPSB0cnVlO1xuICBASW5wdXQoKSBzZXQgbWFuaWZlc3QobWFuaWZlc3Q6IFdpZGdldE1hbmlmZXN0IHwgbnVsbCkge1xuICAgIHRoaXMubWFuaWZlc3QkLm5leHQobWFuaWZlc3QpO1xuICAgIHRoaXMuc2VsZWN0ZWRJZHMkLm5leHQoRGF0YXNvdXJjZVV0aWxzLmdldERhdGFzb3VyY2VBcnJheShtYW5pZmVzdD8uZGF0YXNvdXJjZSkpO1xuICB9XG5cbiAgQE91dHB1dCgpIHByZXZpb3VzVGFiID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgbmV4dFRhYiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHZhbGlkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmUpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5kYXRhc291cmNlcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhdGFTb3VyY2VTZWxlY3RvcnMuZ2V0RGF0YVNvdXJjZXNTb3J0ZWQpLFxuICAgICAgdGhpcy5zZWxlY3RlZElkcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbZGF0YXNvdXJjZXMsIHNlbGVjdGVkSWRzXSkgPT4gRGF0YXNvdXJjZVV0aWxzLmdldEFsbERhdGFzb3VyY2VzV2l0aFVua25vd25zKGRhdGFzb3VyY2VzLCBzZWxlY3RlZElkcykpXG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWREYXRhc291cmNlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRhdGFzb3VyY2VzJCwgdGhpcy5zZWxlY3RlZElkcyRdKS5waXBlKFxuICAgICAgbWFwKChbZGF0YXNvdXJjZXMsIHNlbGVjdGVkXSkgPT4gZGF0YXNvdXJjZXMuZmlsdGVyKChkcykgPT4gc2VsZWN0ZWQuaW5jbHVkZXMoZHMuaWQpKSlcbiAgICApO1xuICB9XG5cbiAgaXNHZW8oaXRlbTogRGF0YVNvdXJjZSkge1xuICAgIHJldHVybiBEYXRhc291cmNlVXRpbHMuaXNHZW8oaXRlbSk7XG4gIH1cblxuICB0b2dnbGVTZWxlY3Rpb24oaWQ6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRJZHMkLm5leHQoXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzJC52YWx1ZS5pbmNsdWRlcyhpZClcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkSWRzJC52YWx1ZS5maWx0ZXIoKGkpID0+IGkgIT09IGlkKVxuICAgICAgICA6IFsuLi50aGlzLnNlbGVjdGVkSWRzJC52YWx1ZSwgaWRdXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZURhdGFzb3VyY2VMaXN0KGlkczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnNlbGVjdGVkSWRzJC5uZXh0KGlkcyk7XG4gICAgdGhpcy5pdGVtc0NoYW5nZWQuZW1pdChpZHMpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiby1kYXRhc291cmNlLXNlbGVjdG9yIHUtZGlzcGxheS1mbGV4IC1jb2x1bW5cIj5cbiAgQGlmIChzaG93VGl0bGUpIHtcbiAgICA8aDIgY2xhc3M9XCJ1LXNlbGYtY2VudGVyXCI+e3sgJ0BwcnkuY29tcG9uZW50cy5kYXRhc291cmNlU2VsZWN0b3Iuc2VsZWN0JyB8IGkxOG4gfX08L2gyPlxuICB9XG4gIDxkaXY+XG4gICAgPGgzPlxuICAgICAge3sgJ0BwcnkuY29tcG9uZW50cy5kYXRhc291cmNlU2VsZWN0b3Iuc2VsZWN0aW9uJyB8IGkxOG4gfX0gKHt7ICgoc2VsZWN0ZWREYXRhc291cmNlcyQgfCBhc3luYykgPz8gW10pLmxlbmd0aCB9fSlcbiAgICA8L2gzPlxuICAgIDxkaXYgY2xhc3M9XCJvLWRhdGFzb3VyY2Utc2VsZWN0b3JfX2NoaXBzIHUtZGlzcGxheS1mbGV4IC13cmFwIC1nYXAtMTBcIj5cbiAgICAgIEBpZiAoKHNlbGVjdGVkRGF0YXNvdXJjZXMkIHwgYXN5bmMpPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJhLWxhYmVsIC1pdGFsaWNcIj57eyAnQHByeS5jb21wb25lbnRzLmRhdGFzb3VyY2VTZWxlY3Rvci5ub0l0ZW1TZWxlY3RlZCcgfCBpMThuIH19PC9zcGFuPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBmb3IgKGRhdGFzb3VyY2Ugb2Ygc2VsZWN0ZWREYXRhc291cmNlcyQgfCBhc3luYzsgdHJhY2sgZGF0YXNvdXJjZS5pZCkge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYS1jaGlwIGEtY2hpcC0tZ2hvc3QgLWxnIGEtdG9vbHRpcFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0BwcnkuY29tcG9uZW50cy5kYXRhc291cmNlU2VsZWN0b3IudW5zZWxlY3RJdGVtJyB8IGkxOG5cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VsZWN0aW9uKGRhdGFzb3VyY2UuaWQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImNsb3NlXCIgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICB7eyBkYXRhc291cmNlLm5hbWUgfX1cbiAgICAgICAgICAgIDxwcnktaWNvbiAqbmdJZj1cImlzR2VvKGRhdGFzb3VyY2UpXCIgaWNvblN2Zz1cImdsb2JlXCIgW3dpZHRoXT1cIjE4XCIgW2hlaWdodF09XCIxOFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxwcnktZGF0YXNvdXJjZS1saXN0XG4gICAgbW9kZT1cInNlbGVjdG9yXCJcbiAgICBbc2VsZWN0ZWREYXRhc291cmNlc109XCIoc2VsZWN0ZWRJZHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAoZGF0YXNvdXJjZVNlbGVjdGVkKT1cInVwZGF0ZURhdGFzb3VyY2VMaXN0KCRldmVudClcIlxuICA+PC9wcnktZGF0YXNvdXJjZS1saXN0PlxuICBAaWYgKHNob3dCdXR0b25zKSB7XG4gICAgPGRpdiBjbGFzcz1cIm0tYnRuLWdyb3VwIG8tZGF0YXNvdXJjZS1zZWxlY3Rvcl9fZm9vdGVyXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2FuY2VsLmVtaXQoKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeVwiPlxuICAgICAgICB7eyAnQHByeS50b29sYm94Lm1hbmlmZXN0LmNsb3NlJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cInZhbGlkYXRlZC5lbWl0KClcIlxuICAgICAgICAjdmFsaWRhdGVcbiAgICAgICAgKGtleWRvd24udGFiKT1cIm5leHRUYWIuZW1pdCgpXCJcbiAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QudmFsaWRhdGVkJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==