@provoly/dashboard 0.12.9 → 0.13.1

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 (96) hide show
  1. package/admin/components/admin-classes/admin-classes-view/admin-attributes-select/admin-attributes-select.component.d.ts +3 -1
  2. package/components/sinceDate/sinceDate.pipe.d.ts +1 -1
  3. package/dataset/components/dataset-detail/dataset-detail.component.d.ts +7 -1
  4. package/dataset/i18n/en.translations.d.ts +2 -0
  5. package/dataset/i18n/fr.translations.d.ts +2 -1
  6. package/dataset/style/_o-pry-dataset-detail.scss +13 -11
  7. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-select/admin-attributes-select.component.mjs +8 -3
  8. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-classes-view.component.mjs +2 -1
  9. package/esm2022/components/sinceDate/sinceDate.pipe.mjs +7 -9
  10. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +26 -8
  11. package/esm2022/dataset/components/dataset.component.mjs +4 -2
  12. package/esm2022/dataset/i18n/en.translations.mjs +3 -1
  13. package/esm2022/dataset/i18n/fr.translations.mjs +4 -3
  14. package/esm2022/dataset/style/css.component.mjs +2 -2
  15. package/esm2022/filters/date/date-filter.component.mjs +3 -3
  16. package/esm2022/filters/number/number-filter.component.mjs +3 -3
  17. package/esm2022/filters/text/text-filter.component.mjs +3 -3
  18. package/esm2022/import/components/import.component.mjs +5 -16
  19. package/esm2022/import/store/import.actions.mjs +1 -1
  20. package/esm2022/import/store/import.effects.mjs +3 -3
  21. package/esm2022/import/store/import.reducer.mjs +5 -13
  22. package/esm2022/import/store/import.selectors.mjs +5 -7
  23. package/esm2022/import/store/import.service.mjs +1 -1
  24. package/esm2022/lib/core/components/accordion/accordion-item/accordion-item.component.mjs +42 -0
  25. package/esm2022/lib/core/components/accordion/accordion.component.mjs +13 -0
  26. package/esm2022/lib/core/components/select/select.component.mjs +3 -3
  27. package/esm2022/lib/core/core.module.mjs +26 -8
  28. package/esm2022/lib/core/i18n/en.translations.mjs +3 -2
  29. package/esm2022/lib/core/i18n/fr.translations.mjs +3 -2
  30. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +1 -2
  31. package/esm2022/lib/core/public-api.mjs +3 -1
  32. package/esm2022/lib/core/symbol/symbol.service.mjs +53 -15
  33. package/esm2022/lib/core/toolbox/toolbox-manifest.service.mjs +4 -4
  34. package/esm2022/lib/dashboard/components/widgets/base-widget.component.mjs +1 -1
  35. package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +3 -2
  36. package/esm2022/lib/dashboard/components/widgets/widget-instanciator/widget-instanciator.component.mjs +6 -4
  37. package/esm2022/pipeline/components/pipeline-editor/pipeline-editor.component.mjs +6 -11
  38. package/esm2022/pipeline/style/css.component.mjs +2 -2
  39. package/esm2022/restitution/components/restitution-list/restitution-list.component.mjs +3 -7
  40. package/esm2022/restitution/style/css.component.mjs +2 -2
  41. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +53 -194
  42. package/esm2022/widgets/widget-map/interaction/interaction-manager.class.mjs +146 -0
  43. package/esm2022/widgets/widget-map/public-api.mjs +3 -1
  44. package/fesm2022/provoly-dashboard-admin.mjs +7 -2
  45. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  46. package/fesm2022/provoly-dashboard-components-sinceDate.mjs +6 -8
  47. package/fesm2022/provoly-dashboard-components-sinceDate.mjs.map +1 -1
  48. package/fesm2022/provoly-dashboard-dataset.mjs +35 -12
  49. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  50. package/fesm2022/provoly-dashboard-filters-date.mjs +2 -2
  51. package/fesm2022/provoly-dashboard-filters-date.mjs.map +1 -1
  52. package/fesm2022/provoly-dashboard-filters-number.mjs +2 -2
  53. package/fesm2022/provoly-dashboard-filters-number.mjs.map +1 -1
  54. package/fesm2022/provoly-dashboard-filters-text.mjs +2 -2
  55. package/fesm2022/provoly-dashboard-filters-text.mjs.map +1 -1
  56. package/fesm2022/provoly-dashboard-import.mjs +14 -35
  57. package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
  58. package/fesm2022/provoly-dashboard-pipeline.mjs +15 -19
  59. package/fesm2022/provoly-dashboard-pipeline.mjs.map +1 -1
  60. package/fesm2022/provoly-dashboard-restitution.mjs +4 -8
  61. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  62. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +256 -257
  63. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  64. package/fesm2022/provoly-dashboard.mjs +143 -38
  65. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  66. package/import/components/import.component.d.ts +3 -9
  67. package/import/store/import.actions.d.ts +3 -16
  68. package/import/store/import.effects.d.ts +1 -1
  69. package/import/store/import.reducer.d.ts +2 -5
  70. package/import/store/import.selectors.d.ts +2 -7
  71. package/import/store/import.service.d.ts +2 -2
  72. package/lib/core/components/accordion/accordion-item/accordion-item.component.d.ts +17 -0
  73. package/lib/core/components/accordion/accordion.component.d.ts +6 -0
  74. package/lib/core/core.module.d.ts +15 -11
  75. package/lib/core/i18n/en.translations.d.ts +1 -0
  76. package/lib/core/i18n/fr.translations.d.ts +1 -0
  77. package/lib/core/model/widget-map-manifest.interface.d.ts +0 -1
  78. package/lib/core/public-api.d.ts +2 -0
  79. package/lib/core/symbol/symbol.service.d.ts +18 -2
  80. package/lib/dashboard/components/widgets/base-widget.component.d.ts +1 -1
  81. package/package.json +25 -25
  82. package/pipeline/components/pipeline-editor/pipeline-editor.component.d.ts +1 -3
  83. package/pipeline/style/_o-pipeline.scss +0 -108
  84. package/restitution/components/restitution-list/restitution-list.component.d.ts +0 -2
  85. package/restitution/style/_o-restitution-list.scss +2 -24
  86. package/schematics/ng-add/index.spec.js +9 -0
  87. package/schematics/ng-add/index.spec.js.map +1 -1
  88. package/styles/abstracts/_mixins.scss +14 -0
  89. package/styles/components/_m-filter.scss +0 -1
  90. package/styles/components/_o-accordion.scss +91 -0
  91. package/styles-theme/components-theme/_o-accordion.theme.scss +30 -0
  92. package/styles-theme/components-theme/_o-pipeline.theme.scss +0 -26
  93. package/styles-theme/main-theme.scss +1 -0
  94. package/widgets/widget-map/component/widget-map.component.d.ts +13 -24
  95. package/widgets/widget-map/interaction/interaction-manager.class.d.ts +27 -0
  96. package/widgets/widget-map/public-api.d.ts +2 -0
@@ -0,0 +1,146 @@
1
+ import { ContextMenuActions, TooltipMode } from '@provoly/dashboard';
2
+ import { Overlay } from 'ol';
3
+ import LayerSwitcher from 'ol-layerswitcher';
4
+ import { ScaleLine } from 'ol/control';
5
+ import { toLonLat } from 'ol/proj';
6
+ import { SearchBarControl } from '../search-bar/search-bar.control';
7
+ import { SelectionInteraction } from './selection-interaction.class';
8
+ export class InteractionManager {
9
+ constructor() {
10
+ this.selectionInteraction = new SelectionInteraction();
11
+ this.listeners = {
12
+ contextMenu: (e) => {
13
+ if (this.component.manifest.contextMenu !== false) {
14
+ const mapCoordinates = this.component.map.getEventPixel(e);
15
+ const itemId = this.component.map.forEachFeatureAtPixel(mapCoordinates, (feature) => feature.get('id'));
16
+ this.component.store.dispatch(ContextMenuActions.open({
17
+ itemId,
18
+ clientX: e.clientX,
19
+ clientY: e.clientY,
20
+ resultSet: Array.isArray(this.component.manifest.datasource)
21
+ ? this.component.manifest.datasource[0]
22
+ : this.component.manifest.datasource,
23
+ from: 'map',
24
+ coordinates: toLonLat(this.component.map.getCoordinateFromPixel(mapCoordinates), this.component.map.getView().getProjection()).reverse()
25
+ }));
26
+ e.preventDefault();
27
+ }
28
+ },
29
+ drop: (e) => {
30
+ this.component.import(e);
31
+ e.preventDefault();
32
+ },
33
+ popup: (event) => {
34
+ const values = this.component.map.getFeaturesAtPixel(event.pixel, { hitTolerance: 5 });
35
+ const valuesToDisplay = [
36
+ ...new Set(values
37
+ .map((value) => value.get('id'))
38
+ .filter((id) => !!id)
39
+ .map((id) => values.find((value) => value.get('id') === id))
40
+ .map((value) => ({
41
+ oClass: value?.get('oClass'),
42
+ coordinates: event.coordinate,
43
+ values: value?.getKeys().reduce((p, c) => ({ ...p, [c]: value.get(c) }), {})
44
+ })))
45
+ ];
46
+ this.component.classicFeatures$.next(valuesToDisplay);
47
+ const wmsLayers = this.component.getWMSLayers();
48
+ if (wmsLayers) {
49
+ this.component.getFeatureFromServer(wmsLayers, event.coordinate);
50
+ }
51
+ }
52
+ };
53
+ }
54
+ init(component) {
55
+ this.component = component;
56
+ this.addContextMenuInteraction();
57
+ this.addDropInteraction();
58
+ this.addOverlayOnInteraction();
59
+ this.addSearchBarControl();
60
+ this.addLayerSwitcher();
61
+ this.addScaleControl();
62
+ this.addUpdateZoomAndCenter();
63
+ this.component.map.addInteraction(this.selectionInteraction.init(this.component.store));
64
+ return this;
65
+ }
66
+ addContextMenuInteraction() {
67
+ this.component.map.getViewport().addEventListener('contextmenu', this.listeners.contextMenu);
68
+ }
69
+ addDropInteraction() {
70
+ this.component.map.getViewport().addEventListener('drop', this.listeners.drop);
71
+ }
72
+ addOverlayOnInteraction() {
73
+ if (!this.interactionPopupOverlay) {
74
+ this.interactionPopupOverlay = new Overlay({
75
+ element: this.component.popup.nativeElement,
76
+ offset: [9, 9]
77
+ });
78
+ this.component.map.addOverlay(this.interactionPopupOverlay);
79
+ }
80
+ if (this.component.optionsCopy.tooltipMode !== TooltipMode.NONE) {
81
+ this.component.map.un('singleclick', this.listeners.popup);
82
+ this.component.map.on('singleclick', this.listeners.popup);
83
+ }
84
+ }
85
+ addScaleControl() {
86
+ if (!this.scaleControl) {
87
+ this.scaleControl = new ScaleLine({
88
+ units: 'metric',
89
+ bar: true,
90
+ steps: 4,
91
+ text: true,
92
+ minWidth: 140
93
+ });
94
+ this.component.map.addControl(this.scaleControl);
95
+ }
96
+ }
97
+ addSearchBarControl() {
98
+ this.searchBarControl = new SearchBarControl({}).withGeocodingService(this.component.geocodingService);
99
+ this.component.map.addControl(this.searchBarControl);
100
+ const addressOverlay = new Overlay({
101
+ element: this.component.address.nativeElement,
102
+ offset: [9, 9]
103
+ });
104
+ this.component.map.addOverlay(addressOverlay);
105
+ // @ts-ignore
106
+ this.component.map.on('searched-address', (evt) => {
107
+ this.component.address.nativeElement.innerHTML = `<div>
108
+ <div>${this.component.translateService.instant('@pry.widget.map.address')}: ${evt.address}</div>
109
+ <div>${this.component.translateService.instant('@pry.widget.map.addressCoords')}: ${evt.latLon}</div>
110
+ </div>`;
111
+ this.component.address.nativeElement.style.display = '';
112
+ addressOverlay.setPosition(evt.coordinates);
113
+ this.component.map.getView().setCenter(evt.coordinates);
114
+ this.component.map.getView().setZoom(this.component.map.getView().getMaxZoom());
115
+ });
116
+ }
117
+ addLayerSwitcher() {
118
+ this.layerSwitchControl = new LayerSwitcher({
119
+ activationMode: 'click',
120
+ reverse: false
121
+ });
122
+ this.component.map.addControl(this.layerSwitchControl);
123
+ // @ts-ignore
124
+ this.layerSwitchControl.on('show', () => {
125
+ this.component.legendTabOpen = false;
126
+ });
127
+ }
128
+ addUpdateZoomAndCenter() {
129
+ this.component.map.on('moveend', () => {
130
+ this.component.optionsCopy.zoom = {
131
+ start: this.component.map.getView().getZoom() ??
132
+ this.component.optionsCopy.zoom?.start ??
133
+ this.component.map.getView().getMinZoom(),
134
+ min: this.component.map.getView().getMinZoom(),
135
+ max: this.component.map.getView().getMaxZoom()
136
+ };
137
+ this.component.optionsCopy.center =
138
+ toLonLat(this.component.map.getView().getCenter() ?? [0, 0]) ?? this.component.optionsCopy.center;
139
+ this.component.zoomAndCenter$.next({
140
+ zoom: this.component.optionsCopy.zoom,
141
+ center: this.component.optionsCopy.center
142
+ });
143
+ });
144
+ }
145
+ }
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb24tbWFuYWdlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LW1hcC9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbi1tYW5hZ2VyLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRSxPQUFPLEVBQTRCLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUN2RCxPQUFPLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFbkMsT0FBTyxFQUF3QixnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXJFLE1BQU0sT0FBTyxrQkFBa0I7SUFBL0I7UUFNRSx5QkFBb0IsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFlbEQsY0FBUyxHQUFHO1lBQ1YsV0FBVyxFQUFFLENBQUMsQ0FBYSxFQUFFLEVBQUU7Z0JBQzdCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRTtvQkFDakQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFD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Q0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQ3BHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDakMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQ3JDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNO2FBQzFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGV4dE1lbnVBY3Rpb25zLCBUb29sdGlwTW9kZSB9IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBGZWF0dXJlLCBNYXBCcm93c2VyRXZlbnQsIE92ZXJsYXkgfSBmcm9tICdvbCc7XG5pbXBvcnQgTGF5ZXJTd2l0Y2hlciBmcm9tICdvbC1sYXllcnN3aXRjaGVyJztcbmltcG9ydCB7IFNjYWxlTGluZSB9IGZyb20gJ29sL2NvbnRyb2wnO1xuaW1wb3J0IHsgQ2lyY2xlLCBQb2ludCB9IGZyb20gJ29sL2dlb20nO1xuaW1wb3J0IHsgdG9Mb25MYXQgfSBmcm9tICdvbC9wcm9qJztcbmltcG9ydCB7IFdpZGdldE1hcENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudC93aWRnZXQtbWFwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZGRyZXNzU2VhcmNoZWRFdmVudCwgU2VhcmNoQmFyQ29udHJvbCB9IGZyb20gJy4uL3NlYXJjaC1iYXIvc2VhcmNoLWJhci5jb250cm9sJztcbmltcG9ydCB7IFNlbGVjdGlvbkludGVyYWN0aW9uIH0gZnJvbSAnLi9zZWxlY3Rpb24taW50ZXJhY3Rpb24uY2xhc3MnO1xuXG5leHBvcnQgY2xhc3MgSW50ZXJhY3Rpb25NYW5hZ2VyIHtcbiAgaW50ZXJhY3Rpb25Qb3B1cE92ZXJsYXk/OiBPdmVybGF5O1xuICBwcml2YXRlIGNvbXBvbmVudCE6IFdpZGdldE1hcENvbXBvbmVudDtcbiAgc2VhcmNoQmFyQ29udHJvbD86IFNlYXJjaEJhckNvbnRyb2w7XG4gIGxheWVyU3dpdGNoQ29udHJvbD86IExheWVyU3dpdGNoZXI7XG4gIHNjYWxlQ29udHJvbD86IFNjYWxlTGluZTtcbiAgc2VsZWN0aW9uSW50ZXJhY3Rpb24gPSBuZXcgU2VsZWN0aW9uSW50ZXJhY3Rpb24oKTtcblxuICBpbml0KGNvbXBvbmVudDogV2lkZ2V0TWFwQ29tcG9uZW50KSB7XG4gICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgdGhpcy5hZGRDb250ZXh0TWVudUludGVyYWN0aW9uKCk7XG4gICAgdGhpcy5hZGREcm9wSW50ZXJhY3Rpb24oKTtcbiAgICB0aGlzLmFkZE92ZXJsYXlPbkludGVyYWN0aW9uKCk7XG4gICAgdGhpcy5hZGRTZWFyY2hCYXJDb250cm9sKCk7XG4gICAgdGhpcy5hZGRMYXllclN3aXRjaGVyKCk7XG4gICAgdGhpcy5hZGRTY2FsZUNvbnRyb2woKTtcbiAgICB0aGlzLmFkZFVwZGF0ZVpvb21BbmRDZW50ZXIoKTtcbiAgICB0aGlzLmNvbXBvbmVudC5tYXAuYWRkSW50ZXJhY3Rpb24odGhpcy5zZWxlY3Rpb25JbnRlcmFjdGlvbi5pbml0KHRoaXMuY29tcG9uZW50LnN0b3JlKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsaXN0ZW5lcnMgPSB7XG4gICAgY29udGV4dE1lbnU6IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5jb21wb25lbnQubWFuaWZlc3QuY29udGV4dE1lbnUgIT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IG1hcENvb3JkaW5hdGVzID0gdGhpcy5jb21wb25lbnQubWFwLmdldEV2ZW50UGl4ZWwoZSk7XG4gICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuY29tcG9uZW50Lm1hcC5mb3JFYWNoRmVhdHVyZUF0UGl4ZWwobWFwQ29vcmRpbmF0ZXMsIChmZWF0dXJlOiBhbnkpID0+IGZlYXR1cmUuZ2V0KCdpZCcpKTtcbiAgICAgICAgdGhpcy5jb21wb25lbnQuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgQ29udGV4dE1lbnVBY3Rpb25zLm9wZW4oe1xuICAgICAgICAgICAgaXRlbUlkLFxuICAgICAgICAgICAgY2xpZW50WDogZS5jbGllbnRYLFxuICAgICAgICAgICAgY2xpZW50WTogZS5jbGllbnRZLFxuICAgICAgICAgICAgcmVzdWx0U2V0OiBBcnJheS5pc0FycmF5KHRoaXMuY29tcG9uZW50Lm1hbmlmZXN0LmRhdGFzb3VyY2UpXG4gICAgICAgICAgICAgID8gdGhpcy5jb21wb25lbnQubWFuaWZlc3QuZGF0YXNvdXJjZVswXVxuICAgICAgICAgICAgICA6IHRoaXMuY29tcG9uZW50Lm1hbmlmZXN0LmRhdGFzb3VyY2UsXG4gICAgICAgICAgICBmcm9tOiAnbWFwJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiB0b0xvbkxhdChcbiAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnQubWFwLmdldENvb3JkaW5hdGVGcm9tUGl4ZWwobWFwQ29vcmRpbmF0ZXMpLFxuICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5tYXAuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKVxuICAgICAgICAgICAgKS5yZXZlcnNlKClcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkcm9wOiAoZTogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICB0aGlzLmNvbXBvbmVudC5pbXBvcnQoZSk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSxcbiAgICBwb3B1cDogKGV2ZW50OiBNYXBCcm93c2VyRXZlbnQ8TW91c2VFdmVudD4pID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuY29tcG9uZW50Lm1hcC5nZXRGZWF0dXJlc0F0UGl4ZWwoZXZlbnQucGl4ZWwsIHsgaGl0VG9sZXJhbmNlOiA1IH0pIGFzIChcbiAgICAgICAgfCBGZWF0dXJlPENpcmNsZT5cbiAgICAgICAgfCBGZWF0dXJlPFBvaW50PlxuICAgICAgKVtdO1xuICAgICAgY29uc3QgdmFsdWVzVG9EaXNwbGF5ID0gW1xuICAgICAgICAuLi5uZXcgU2V0KFxuICAgICAgICAgIHZhbHVlc1xuICAgICAgICAgICAgLm1hcCgodmFsdWUpID0+IHZhbHVlLmdldCgnaWQnKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGlkKSA9PiAhIWlkKVxuICAgICAgICAgICAgLm1hcCgoaWQpID0+IHZhbHVlcy5maW5kKCh2YWx1ZSkgPT4gdmFsdWUuZ2V0KCdpZCcpID09PSBpZCkpXG4gICAgICAgICAgICAubWFwKCh2YWx1ZSkgPT4gKHtcbiAgICAgICAgICAgICAgb0NsYXNzOiB2YWx1ZT8uZ2V0KCdvQ2xhc3MnKSxcbiAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IGV2ZW50LmNvb3JkaW5hdGUsXG4gICAgICAgICAgICAgIHZhbHVlczogdmFsdWU/LmdldEtleXMoKS5yZWR1Y2UoKHAsIGMpID0+ICh7IC4uLnAsIFtjXTogdmFsdWUuZ2V0KGMpIH0pLCB7fSlcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgICBdO1xuICAgICAgdGhpcy5jb21wb25lbnQuY2xhc3NpY0ZlYXR1cmVzJC5uZXh0KHZhbHVlc1RvRGlzcGxheSk7XG4gICAgICBjb25zdCB3bXNMYXllcnMgPSB0aGlzLmNvbXBvbmVudC5nZXRXTVNMYXllcnMoKTtcbiAgICAgIGlmICh3bXNMYXllcnMpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnQuZ2V0RmVhdHVyZUZyb21TZXJ2ZXIod21zTGF5ZXJzLCBldmVudC5jb29yZGluYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBhZGRDb250ZXh0TWVudUludGVyYWN0aW9uKCkge1xuICAgIHRoaXMuY29tcG9uZW50Lm1hcC5nZXRWaWV3cG9ydCgpLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgdGhpcy5saXN0ZW5lcnMuY29udGV4dE1lbnUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREcm9wSW50ZXJhY3Rpb24oKSB7XG4gICAgdGhpcy5jb21wb25lbnQubWFwLmdldFZpZXdwb3J0KCkuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMubGlzdGVuZXJzLmRyb3ApO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRPdmVybGF5T25JbnRlcmFjdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25Qb3B1cE92ZXJsYXkpIHtcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25Qb3B1cE92ZXJsYXkgPSBuZXcgT3ZlcmxheSh7XG4gICAgICAgIGVsZW1lbnQ6IHRoaXMuY29tcG9uZW50LnBvcHVwLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIG9mZnNldDogWzksIDldXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm1hcC5hZGRPdmVybGF5KHRoaXMuaW50ZXJhY3Rpb25Qb3B1cE92ZXJsYXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb21wb25lbnQub3B0aW9uc0NvcHkudG9vbHRpcE1vZGUgIT09IFRvb2x0aXBNb2RlLk5PTkUpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm1hcC51bignc2luZ2xlY2xpY2snLCB0aGlzLmxpc3RlbmVycy5wb3B1cCk7XG4gICAgICB0aGlzLmNvbXBvbmVudC5tYXAub24oJ3NpbmdsZWNsaWNrJywgdGhpcy5saXN0ZW5lcnMucG9wdXApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkU2NhbGVDb250cm9sKCkge1xuICAgIGlmICghdGhpcy5zY2FsZUNvbnRyb2wpIHtcbiAgICAgIHRoaXMuc2NhbGVDb250cm9sID0gbmV3IFNjYWxlTGluZSh7XG4gICAgICAgIHVuaXRzOiAnbWV0cmljJyxcbiAgICAgICAgYmFyOiB0cnVlLFxuICAgICAgICBzdGVwczogNCxcbiAgICAgICAgdGV4dDogdHJ1ZSxcbiAgICAgICAgbWluV2lkdGg6IDE0MFxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbXBvbmVudC5tYXAuYWRkQ29udHJvbCh0aGlzLnNjYWxlQ29udHJvbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRTZWFyY2hCYXJDb250cm9sKCkge1xuICAgIHRoaXMuc2VhcmNoQmFyQ29udHJvbCA9IG5ldyBTZWFyY2hCYXJDb250cm9sKHt9KS53aXRoR2VvY29kaW5nU2VydmljZSh0aGlzLmNvbXBvbmVudC5nZW9jb2RpbmdTZXJ2aWNlKTtcbiAgICB0aGlzLmNvbXBvbmVudC5tYXAuYWRkQ29udHJvbCh0aGlzLnNlYXJjaEJhckNvbnRyb2wpO1xuXG4gICAgY29uc3QgYWRkcmVzc092ZXJsYXkgPSBuZXcgT3ZlcmxheSh7XG4gICAgICBlbGVtZW50OiB0aGlzLmNvbXBvbmVudC5hZGRyZXNzLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBvZmZzZXQ6IFs5LCA5XVxuICAgIH0pO1xuICAgIHRoaXMuY29tcG9uZW50Lm1hcC5hZGRPdmVybGF5KGFkZHJlc3NPdmVybGF5KTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLmNvbXBvbmVudC5tYXAub24oJ3NlYXJjaGVkLWFkZHJlc3MnLCAoZXZ0OiBBZGRyZXNzU2VhcmNoZWRFdmVudCkgPT4ge1xuICAgICAgdGhpcy5jb21wb25lbnQuYWRkcmVzcy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGA8ZGl2PlxuICAgICAgICA8ZGl2PiR7dGhpcy5jb21wb25lbnQudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAuYWRkcmVzcycpfTogJHtldnQuYWRkcmVzc308L2Rpdj5cbiAgICAgICAgPGRpdj4ke3RoaXMuY29tcG9uZW50LnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLmFkZHJlc3NDb29yZHMnKX06ICR7ZXZ0LmxhdExvbn08L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbiAgICAgIHRoaXMuY29tcG9uZW50LmFkZHJlc3MubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICBhZGRyZXNzT3ZlcmxheS5zZXRQb3NpdGlvbihldnQuY29vcmRpbmF0ZXMpO1xuICAgICAgdGhpcy5jb21wb25lbnQubWFwLmdldFZpZXcoKS5zZXRDZW50ZXIoZXZ0LmNvb3JkaW5hdGVzKTtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm1hcC5nZXRWaWV3KCkuc2V0Wm9vbSh0aGlzLmNvbXBvbmVudC5tYXAuZ2V0VmlldygpLmdldE1heFpvb20oKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZExheWVyU3dpdGNoZXIoKSB7XG4gICAgdGhpcy5sYXllclN3aXRjaENvbnRyb2wgPSBuZXcgTGF5ZXJTd2l0Y2hlcih7XG4gICAgICBhY3RpdmF0aW9uTW9kZTogJ2NsaWNrJyxcbiAgICAgIHJldmVyc2U6IGZhbHNlXG4gICAgfSk7XG4gICAgdGhpcy5jb21wb25lbnQubWFwLmFkZENvbnRyb2wodGhpcy5sYXllclN3aXRjaENvbnRyb2wpO1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMubGF5ZXJTd2l0Y2hDb250cm9sLm9uKCdzaG93JywgKCkgPT4ge1xuICAgICAgdGhpcy5jb21wb25lbnQubGVnZW5kVGFiT3BlbiA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRVcGRhdGVab29tQW5kQ2VudGVyKCkge1xuICAgIHRoaXMuY29tcG9uZW50Lm1hcC5vbignbW92ZWVuZCcsICgpID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm9wdGlvbnNDb3B5Lnpvb20gPSB7XG4gICAgICAgIHN0YXJ0OlxuICAgICAgICAgIHRoaXMuY29tcG9uZW50Lm1hcC5nZXRWaWV3KCkuZ2V0Wm9vbSgpID8/XG4gICAgICAgICAgdGhpcy5jb21wb25lbnQub3B0aW9uc0NvcHkuem9vbT8uc3RhcnQgPz9cbiAgICAgICAgICB0aGlzLmNvbXBvbmVudC5tYXAuZ2V0VmlldygpLmdldE1pblpvb20oKSxcbiAgICAgICAgbWluOiB0aGlzLmNvbXBvbmVudC5tYXAuZ2V0VmlldygpLmdldE1pblpvb20oKSxcbiAgICAgICAgbWF4OiB0aGlzLmNvbXBvbmVudC5tYXAuZ2V0VmlldygpLmdldE1heFpvb20oKVxuICAgICAgfTtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm9wdGlvbnNDb3B5LmNlbnRlciA9XG4gICAgICAgIHRvTG9uTGF0KHRoaXMuY29tcG9uZW50Lm1hcC5nZXRWaWV3KCkuZ2V0Q2VudGVyKCkgPz8gWzAsIDBdKSA/PyB0aGlzLmNvbXBvbmVudC5vcHRpb25zQ29weS5jZW50ZXI7XG4gICAgICB0aGlzLmNvbXBvbmVudC56b29tQW5kQ2VudGVyJC5uZXh0KHtcbiAgICAgICAgem9vbTogdGhpcy5jb21wb25lbnQub3B0aW9uc0NvcHkuem9vbSxcbiAgICAgICAgY2VudGVyOiB0aGlzLmNvbXBvbmVudC5vcHRpb25zQ29weS5jZW50ZXJcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -3,5 +3,7 @@ export * from './component/widget-map.component';
3
3
  export * from './component/widget-map-layer.service';
4
4
  export * from './pipe/widget-map-geometry-fields-for.pipe';
5
5
  export * from './pipe/widget-map-legend-url.pipe';
6
+ export * from './interaction/interaction-manager.class';
7
+ export * from './interaction/selection-interaction.class';
6
8
  export * from './utils/widget-map.utils';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LW1hcC9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi93aWRnZXQtbWFwLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudC93aWRnZXQtbWFwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudC93aWRnZXQtbWFwLWxheWVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlL3dpZGdldC1tYXAtZ2VvbWV0cnktZmllbGRzLWZvci5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZS93aWRnZXQtbWFwLWxlZ2VuZC11cmwucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL3dpZGdldC1tYXAudXRpbHMnO1xuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LW1hcC9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vd2lkZ2V0LW1hcC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnQvd2lkZ2V0LW1hcC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnQvd2lkZ2V0LW1hcC1sYXllci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZS93aWRnZXQtbWFwLWdlb21ldHJ5LWZpZWxkcy1mb3IucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGUvd2lkZ2V0LW1hcC1sZWdlbmQtdXJsLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbi1tYW5hZ2VyLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJhY3Rpb24vc2VsZWN0aW9uLWludGVyYWN0aW9uLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvd2lkZ2V0LW1hcC51dGlscyc7XG4iXX0=
@@ -1859,6 +1859,7 @@ class AdminClassesViewComponent {
1859
1859
  this.store.dispatch(AdminClassActions.selectAttribute({ attrExtended: attr }));
1860
1860
  this.store.dispatch(AdminActions.selectComponentType({ componentType: 'AdminAttributesSelectComponent' }));
1861
1861
  this.setAttributeActions(attr.id);
1862
+ this.store.dispatch(AdminActions.fetchAttributeAssociations({ id: attr.id }));
1862
1863
  }
1863
1864
  dispatchCloseModal() {
1864
1865
  this.store.dispatch(AdminClassActions.closeModal());
@@ -2757,6 +2758,7 @@ class AdminAttributesSelectComponent {
2757
2758
  this.interClass$ = this.store.select(AdminClassSelectors.interClass);
2758
2759
  this.interClassId$ = this.store.select(AdminClassSelectors.interClassId);
2759
2760
  this.compId = nextCompId$9++;
2761
+ this.associations$ = this.store.select(AdminSelectors.selectedAssociation);
2760
2762
  }
2761
2763
  ngOnInit() {
2762
2764
  this.sub.add(this.interClass$.subscribe((interClass) => {
@@ -2806,12 +2808,15 @@ class AdminAttributesSelectComponent {
2806
2808
  }));
2807
2809
  }
2808
2810
  }
2811
+ switch(number) {
2812
+ this.tab = number;
2813
+ }
2809
2814
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminAttributesSelectComponent, deps: [{ token: i1.Store }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
2810
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AdminAttributesSelectComponent, selector: "pry-admin-attribute-select", ngImport: i0, template: "<div\n *ngIf=\"selectedAttribute$ | async as attribute\"\n [id]=\"'panel-attr-' + attribute.id\"\n [attr.aria-labelledby]=\"'button-attr-' + attribute.id\"\n class=\"o-panel\"\n>\n <div>\n <div class=\"o-panel__header\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"closePanel()\">\n <span class=\"u-visually-hidden\">{{ '@pry.action.closePanel' | i18n }}</span>\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n\n <h3 [id]=\"'tab-title-' + compId\" class=\"a-h3\">\n {{ '@pry.admin.classes.attributes.info' | i18n }}\n </h3>\n </div>\n\n <div class=\"o-tabs\">\n <div class=\"o-tabs__list\" role=\"tablist\" [attr.aria-labelledby]=\"'tab-title-' + compId\">\n <button\n type=\"button\"\n class=\"o-tabs__list__btn\"\n role=\"tab\"\n [id]=\"'tab-' + compId + '-0'\"\n [attr.aria-selected]=\"tab === 0\"\n [attr.tabindex]=\"tab === 0 ? 0 : -1\"\n [attr.aria-controls]=\"'tabpanel-' + compId + '-0'\"\n >\n {{ '@pry.admin.details' | i18n }}\n </button>\n </div>\n\n <div class=\"o-tabs__panels\">\n <div\n class=\"o-tabs__panels__item\"\n [class.is-hidden]=\"tab !== 0\"\n [id]=\"'tabpanel-' + compId + '-0'\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'tab-' + compId + '-0'\"\n tabindex=\"0\"\n >\n <div class=\"o-tabs__panels__item__content\">\n <h4 class=\"a-h4\">{{ '@pry.admin.properties' | i18n }}</h4>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.name' | i18n }} :\n <strong>{{ attribute.name }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.field' | i18n }} :\n <strong>{{ attribute.fieldName }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.category' | i18n }} :\n <strong>{{ attribute.categoryName }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.multiValued' | i18n }} :\n <strong>{{ attribute.multiValued }}</strong>\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
2815
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AdminAttributesSelectComponent, selector: "pry-admin-attribute-select", ngImport: i0, template: "<div\n *ngIf=\"selectedAttribute$ | async as attribute\"\n [id]=\"'panel-attr-' + attribute.id\"\n [attr.aria-labelledby]=\"'button-attr-' + attribute.id\"\n class=\"o-panel\"\n>\n <div>\n <div class=\"o-panel__header\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"closePanel()\">\n <span class=\"u-visually-hidden\">{{ '@pry.action.closePanel' | i18n }}</span>\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n\n <h3 [id]=\"'tab-title-' + compId\" class=\"a-h3\">\n {{ '@pry.admin.classes.attributes.info' | i18n }}\n </h3>\n </div>\n\n <div class=\"o-tabs\">\n <div class=\"o-tabs__list\" role=\"tablist\" [attr.aria-labelledby]=\"'tab-title-' + compId\">\n <button\n type=\"button\"\n class=\"o-tabs__list__btn\"\n role=\"tab\"\n [id]=\"'tab-' + compId + '-0'\"\n [attr.aria-selected]=\"tab === 0\"\n [attr.tabindex]=\"tab === 0 ? 0 : -1\"\n [attr.aria-controls]=\"'tabpanel-' + compId + '-0'\"\n (click)=\"switch(0)\"\n >\n {{ '@pry.admin.details' | i18n }}\n </button>\n <button\n type=\"button\"\n class=\"o-tabs__list__btn\"\n role=\"tab\"\n [id]=\"'tab-' + compId + '-1'\"\n [attr.aria-selected]=\"tab === 1\"\n [attr.tabindex]=\"tab === 1 ? 1 : -1\"\n [attr.aria-controls]=\"'tabpanel-' + compId + '-1'\"\n (click)=\"switch(1)\"\n >\n {{ '@pry.admin.classes.associations' | i18n }}\n </button>\n </div>\n\n <div class=\"o-tabs__panels\">\n <div\n class=\"o-tabs__panels__item\"\n [class.is-hidden]=\"tab !== 0\"\n [id]=\"'tabpanel-' + compId + '-0'\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'tab-' + compId + '-0'\"\n tabindex=\"0\"\n >\n <div class=\"o-tabs__panels__item__content\">\n <h4 class=\"a-h4\">{{ '@pry.admin.properties' | i18n }}</h4>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.name' | i18n }} :\n <strong>{{ attribute.name }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.field' | i18n }} :\n <strong>{{ attribute.fieldName }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.category' | i18n }} :\n <strong>{{ attribute.categoryName }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.multiValued' | i18n }} :\n <strong>{{ attribute.multiValued }}</strong>\n </p>\n </div>\n </div>\n </div>\n <div\n class=\"o-tabs__panels__item\"\n [class.is-hidden]=\"tab !== 1\"\n [id]=\"'tabpanel-' + compId + '-1'\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'tab-' + compId + '-1'\"\n tabindex=\"2\"\n >\n <div *ngIf=\"associations$ | async as associations\" class=\"o-tabs__panels__item__content\">\n <h4 class=\"a-h4\">{{ '@pry.admin.classes.associations' | i18n }}</h4>\n <div *ngFor=\"let association of associations.associations\">\n <p class=\"a-p\">\n {{ '@pry.admin.classes.name' | i18n }} :\n <strong>{{ association.name }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.type' | i18n }} :\n <strong>{{ association.type }}</strong>\n </p>\n </div>\n <p *ngIf=\"associations.usedElsewhere === true\" class=\"a-p\">\n <strong>{{ '@pry.admin.classes.usedElsewhere' | i18n }}</strong>\n </p>\n </div>\n </div>\n </div>\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: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
2811
2816
  }
2812
2817
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminAttributesSelectComponent, decorators: [{
2813
2818
  type: Component,
2814
- args: [{ selector: 'pry-admin-attribute-select', template: "<div\n *ngIf=\"selectedAttribute$ | async as attribute\"\n [id]=\"'panel-attr-' + attribute.id\"\n [attr.aria-labelledby]=\"'button-attr-' + attribute.id\"\n class=\"o-panel\"\n>\n <div>\n <div class=\"o-panel__header\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"closePanel()\">\n <span class=\"u-visually-hidden\">{{ '@pry.action.closePanel' | i18n }}</span>\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n\n <h3 [id]=\"'tab-title-' + compId\" class=\"a-h3\">\n {{ '@pry.admin.classes.attributes.info' | i18n }}\n </h3>\n </div>\n\n <div class=\"o-tabs\">\n <div class=\"o-tabs__list\" role=\"tablist\" [attr.aria-labelledby]=\"'tab-title-' + compId\">\n <button\n type=\"button\"\n class=\"o-tabs__list__btn\"\n role=\"tab\"\n [id]=\"'tab-' + compId + '-0'\"\n [attr.aria-selected]=\"tab === 0\"\n [attr.tabindex]=\"tab === 0 ? 0 : -1\"\n [attr.aria-controls]=\"'tabpanel-' + compId + '-0'\"\n >\n {{ '@pry.admin.details' | i18n }}\n </button>\n </div>\n\n <div class=\"o-tabs__panels\">\n <div\n class=\"o-tabs__panels__item\"\n [class.is-hidden]=\"tab !== 0\"\n [id]=\"'tabpanel-' + compId + '-0'\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'tab-' + compId + '-0'\"\n tabindex=\"0\"\n >\n <div class=\"o-tabs__panels__item__content\">\n <h4 class=\"a-h4\">{{ '@pry.admin.properties' | i18n }}</h4>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.name' | i18n }} :\n <strong>{{ attribute.name }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.field' | i18n }} :\n <strong>{{ attribute.fieldName }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.category' | i18n }} :\n <strong>{{ attribute.categoryName }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.multiValued' | i18n }} :\n <strong>{{ attribute.multiValued }}</strong>\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
2819
+ args: [{ selector: 'pry-admin-attribute-select', template: "<div\n *ngIf=\"selectedAttribute$ | async as attribute\"\n [id]=\"'panel-attr-' + attribute.id\"\n [attr.aria-labelledby]=\"'button-attr-' + attribute.id\"\n class=\"o-panel\"\n>\n <div>\n <div class=\"o-panel__header\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"closePanel()\">\n <span class=\"u-visually-hidden\">{{ '@pry.action.closePanel' | i18n }}</span>\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n\n <h3 [id]=\"'tab-title-' + compId\" class=\"a-h3\">\n {{ '@pry.admin.classes.attributes.info' | i18n }}\n </h3>\n </div>\n\n <div class=\"o-tabs\">\n <div class=\"o-tabs__list\" role=\"tablist\" [attr.aria-labelledby]=\"'tab-title-' + compId\">\n <button\n type=\"button\"\n class=\"o-tabs__list__btn\"\n role=\"tab\"\n [id]=\"'tab-' + compId + '-0'\"\n [attr.aria-selected]=\"tab === 0\"\n [attr.tabindex]=\"tab === 0 ? 0 : -1\"\n [attr.aria-controls]=\"'tabpanel-' + compId + '-0'\"\n (click)=\"switch(0)\"\n >\n {{ '@pry.admin.details' | i18n }}\n </button>\n <button\n type=\"button\"\n class=\"o-tabs__list__btn\"\n role=\"tab\"\n [id]=\"'tab-' + compId + '-1'\"\n [attr.aria-selected]=\"tab === 1\"\n [attr.tabindex]=\"tab === 1 ? 1 : -1\"\n [attr.aria-controls]=\"'tabpanel-' + compId + '-1'\"\n (click)=\"switch(1)\"\n >\n {{ '@pry.admin.classes.associations' | i18n }}\n </button>\n </div>\n\n <div class=\"o-tabs__panels\">\n <div\n class=\"o-tabs__panels__item\"\n [class.is-hidden]=\"tab !== 0\"\n [id]=\"'tabpanel-' + compId + '-0'\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'tab-' + compId + '-0'\"\n tabindex=\"0\"\n >\n <div class=\"o-tabs__panels__item__content\">\n <h4 class=\"a-h4\">{{ '@pry.admin.properties' | i18n }}</h4>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.name' | i18n }} :\n <strong>{{ attribute.name }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.field' | i18n }} :\n <strong>{{ attribute.fieldName }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.category' | i18n }} :\n <strong>{{ attribute.categoryName }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.attributes.multiValued' | i18n }} :\n <strong>{{ attribute.multiValued }}</strong>\n </p>\n </div>\n </div>\n </div>\n <div\n class=\"o-tabs__panels__item\"\n [class.is-hidden]=\"tab !== 1\"\n [id]=\"'tabpanel-' + compId + '-1'\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'tab-' + compId + '-1'\"\n tabindex=\"2\"\n >\n <div *ngIf=\"associations$ | async as associations\" class=\"o-tabs__panels__item__content\">\n <h4 class=\"a-h4\">{{ '@pry.admin.classes.associations' | i18n }}</h4>\n <div *ngFor=\"let association of associations.associations\">\n <p class=\"a-p\">\n {{ '@pry.admin.classes.name' | i18n }} :\n <strong>{{ association.name }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.classes.type' | i18n }} :\n <strong>{{ association.type }}</strong>\n </p>\n </div>\n <p *ngIf=\"associations.usedElsewhere === true\" class=\"a-p\">\n <strong>{{ '@pry.admin.classes.usedElsewhere' | i18n }}</strong>\n </p>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
2815
2820
  }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.Router }, { type: i2.ActivatedRoute }]; } });
2816
2821
 
2817
2822
  const AdminDatasetActions = {