geonetwork-ui 2.3.0-dev.139106e0 → 2.3.0-dev.22f4da74
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.
- package/esm2022/libs/api/repository/src/lib/gn4/auth/avatar.service.interface.mjs +1 -1
- package/esm2022/libs/api/repository/src/lib/gn4/auth/gravatar.service.mjs +12 -1
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +36 -3
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +19 -7
- package/esm2022/libs/common/domain/src/lib/model/record/index.mjs +2 -1
- package/esm2022/libs/common/domain/src/lib/model/record/user-feedbacks.model.mjs +2 -0
- package/esm2022/libs/common/domain/src/lib/model/user/index.mjs +2 -0
- package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
- package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +35 -2
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.mjs +64 -0
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.mjs +15 -0
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +20 -6
- package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +1 -1
- package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +16 -1
- package/esm2022/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.mjs +73 -20
- package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +1 -1
- package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +1 -1
- package/esm2022/libs/feature/map/src/lib/map-context/map-context.model.mjs +1 -1
- package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +29 -8
- package/esm2022/libs/feature/record/src/lib/feature-record.module.mjs +4 -4
- package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +3 -2
- package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +22 -4
- package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +37 -10
- package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +22 -7
- package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +52 -17
- package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +18 -3
- package/esm2022/libs/feature/router/src/lib/default/state/router.effects.mjs +2 -2
- package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -2
- package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +2 -2
- package/esm2022/libs/ui/elements/src/lib/link-card/link-card.component.mjs +16 -3
- package/esm2022/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.mjs +2 -2
- package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +77 -15
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +10 -7
- package/esm2022/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.mjs +59 -0
- package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +62 -0
- package/esm2022/libs/ui/inputs/src/index.mjs +16 -15
- package/esm2022/libs/ui/inputs/src/lib/date-picker/date-picker.component.mjs +22 -0
- package/esm2022/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.mjs +7 -5
- package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +17 -8
- package/esm2022/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.mjs +29 -0
- package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +27 -4
- package/esm2022/libs/ui/inputs/src/lib/text-input/text-input.component.mjs +21 -3
- package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +11 -9
- package/esm2022/libs/ui/layout/src/index.mjs +2 -1
- package/esm2022/libs/ui/layout/src/lib/block-list/block-list.component.mjs +76 -0
- package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +42 -18
- package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +3 -8
- package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +2 -2
- package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +22 -1
- package/esm2022/translations/de.json +21 -0
- package/esm2022/translations/en.json +21 -0
- package/esm2022/translations/es.json +21 -0
- package/esm2022/translations/fr.json +21 -0
- package/esm2022/translations/it.json +21 -0
- package/esm2022/translations/nl.json +21 -0
- package/esm2022/translations/pt.json +21 -0
- package/fesm2022/geonetwork-ui.mjs +1705 -808
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/repository/src/lib/gn4/auth/avatar.service.interface.d.ts +1 -0
- package/libs/api/repository/src/lib/gn4/auth/avatar.service.interface.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/auth/gravatar.service.d.ts +1 -0
- package/libs/api/repository/src/lib/gn4/auth/gravatar.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +6 -2
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -6
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/index.d.ts +1 -0
- package/libs/common/domain/src/lib/model/record/index.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/user-feedbacks.model.d.ts +15 -0
- package/libs/common/domain/src/lib/model/record/user-feedbacks.model.d.ts.map +1 -0
- package/libs/common/domain/src/lib/model/user/index.d.ts +2 -0
- package/libs/common/domain/src/lib/model/user/index.d.ts.map +1 -0
- package/libs/common/domain/src/lib/platform.service.interface.d.ts +3 -0
- package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts +3 -1
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts +39 -0
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.d.ts +8 -0
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +4 -1
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
- package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts +10 -5
- package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts.map +1 -1
- package/libs/feature/map/src/lib/map-context/map-context.model.d.ts +1 -0
- package/libs/feature/map/src/lib/map-context/map-context.model.d.ts.map +1 -1
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
- package/libs/feature/record/src/lib/feature-record.module.d.ts.map +1 -1
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.actions.d.ts +40 -6
- package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.effects.d.ts +24 -4
- package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts +14 -4
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +8 -5
- package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +12 -9
- package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/api-card/api-card.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
- package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts +3 -1
- package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +12 -3
- package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +16 -15
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts +11 -0
- package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.d.ts +22 -0
- package/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.d.ts.map +1 -0
- package/libs/ui/inputs/src/index.d.ts +15 -14
- package/libs/ui/inputs/src/index.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts +9 -0
- package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts.map +1 -0
- package/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts +12 -0
- package/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts.map +1 -0
- package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +7 -1
- package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/text-input/text-input.component.d.ts +5 -1
- package/libs/ui/inputs/src/lib/text-input/text-input.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +35 -35
- package/libs/ui/layout/src/index.d.ts +1 -0
- package/libs/ui/layout/src/index.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/block-list/block-list.component.d.ts +25 -0
- package/libs/ui/layout/src/lib/block-list/block-list.component.d.ts.map +1 -0
- package/libs/ui/layout/src/lib/carousel/carousel.component.d.ts +13 -6
- package/libs/ui/layout/src/lib/carousel/carousel.component.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/ui-layout.module.d.ts +4 -5
- package/libs/ui/layout/src/lib/ui-layout.module.d.ts.map +1 -1
- package/libs/util/shared/src/lib/links/link-utils.d.ts +18 -0
- package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/libs/api/repository/src/lib/gn4/auth/avatar.service.interface.ts +1 -0
- package/src/libs/api/repository/src/lib/gn4/auth/gravatar.service.ts +12 -1
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +51 -1
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +34 -7
- package/src/libs/common/domain/src/lib/model/record/index.ts +1 -0
- package/src/libs/common/domain/src/lib/model/record/user-feedbacks.model.ts +15 -0
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +3 -0
- package/src/libs/common/fixtures/src/index.ts +8 -6
- package/src/libs/common/fixtures/src/lib/link.fixtures.ts +8 -0
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +3 -3
- package/src/libs/common/fixtures/src/lib/user-feedbacks.fixtures.ts +83 -0
- package/src/libs/feature/dataviz/src/lib/service/data.service.ts +51 -1
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.css +0 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.html +8 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.ts +64 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.css +0 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.html +4 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.ts +15 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +33 -33
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +16 -0
- package/src/libs/feature/editor/src/lib/fields.config.ts +15 -0
- package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.css +7 -0
- package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.html +32 -18
- package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.ts +72 -17
- package/src/libs/feature/map/src/lib/map-context/map-context.model.ts +1 -0
- package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +26 -8
- package/src/libs/feature/record/src/lib/feature-record.module.ts +5 -2
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +2 -1
- package/src/libs/feature/record/src/lib/state/mdview.actions.ts +51 -6
- package/src/libs/feature/record/src/lib/state/mdview.effects.ts +82 -7
- package/src/libs/feature/record/src/lib/state/mdview.facade.ts +48 -8
- package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +81 -24
- package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +40 -10
- package/src/libs/feature/router/src/lib/default/state/router.effects.ts +2 -2
- package/src/libs/ui/elements/src/lib/api-card/api-card.component.ts +2 -1
- package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +1 -1
- package/src/libs/ui/elements/src/lib/link-card/link-card.component.html +38 -20
- package/src/libs/ui/elements/src/lib/link-card/link-card.component.ts +12 -0
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +26 -10
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +87 -8
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +5 -2
- package/src/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.ts +54 -0
- package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.css +0 -0
- package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.html +75 -0
- package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.ts +63 -0
- package/src/libs/ui/inputs/src/index.ts +15 -14
- package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.css +3 -0
- package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.html +11 -0
- package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.ts +16 -0
- package/src/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.ts +8 -1
- package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +13 -0
- package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.css +6 -0
- package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.html +26 -0
- package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.ts +32 -0
- package/src/libs/ui/inputs/src/lib/text-area/text-area.component.html +2 -1
- package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +29 -0
- package/src/libs/ui/inputs/src/lib/text-input/text-input.component.html +2 -1
- package/src/libs/ui/inputs/src/lib/text-input/text-input.component.ts +17 -1
- package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +2 -2
- package/src/libs/ui/layout/src/index.ts +1 -0
- package/src/libs/ui/layout/src/lib/block-list/block-list.component.css +23 -0
- package/src/libs/ui/layout/src/lib/block-list/block-list.component.html +20 -0
- package/src/libs/ui/layout/src/lib/block-list/block-list.component.ts +84 -0
- package/src/libs/ui/layout/src/lib/carousel/carousel.component.css +7 -4
- package/src/libs/ui/layout/src/lib/carousel/carousel.component.html +4 -4
- package/src/libs/ui/layout/src/lib/carousel/carousel.component.ts +45 -15
- package/src/libs/ui/layout/src/lib/ui-layout.module.ts +0 -2
- package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +1 -1
- package/src/libs/util/shared/src/lib/links/link-utils.ts +21 -0
- package/translations/de.json +21 -0
- package/translations/en.json +21 -0
- package/translations/es.json +21 -0
- package/translations/fr.json +21 -0
- package/translations/it.json +21 -0
- package/translations/nl.json +21 -0
- package/translations/pt.json +21 -0
- package/translations/sk.json +21 -0
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { parseXml, XmlDocument, XmlElement, XmlText } from '@rgrove/parse-xml';
|
|
2
2
|
import format from 'date-fns/format';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ElementRef, ViewChildren, ViewContainerRef, HostBinding, ContentChild, ContentChildren, TemplateRef, Host, inject } from '@angular/core';
|
|
4
|
+
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ElementRef, ViewChildren, ViewContainerRef, HostBinding, ContentChild, ContentChildren, TemplateRef, Host, Pipe, inject } from '@angular/core';
|
|
5
5
|
import * as i1 from '@angular/common/http';
|
|
6
6
|
import { HttpHeaders, HttpParams, HttpClient, HttpClientModule, HTTP_INTERCEPTORS, HttpClientXsrfModule } from '@angular/common/http';
|
|
7
7
|
import * as i1$1 from '@ngx-translate/core';
|
|
8
8
|
import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
9
9
|
import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler';
|
|
10
10
|
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
11
|
-
import { map as map$1, shareReplay, filter, tap as tap$1, startWith, withLatestFrom, switchMap as switchMap$1, catchError, take, delay,
|
|
11
|
+
import { map as map$1, shareReplay, filter, tap as tap$1, startWith, withLatestFrom, switchMap as switchMap$1, catchError, take, delay, debounceTime, distinctUntilChanged, finalize, first, throttleTime, share, pairwise, mergeMap } from 'rxjs/operators';
|
|
12
12
|
import { marker } from '@biesbjerg/ngx-translate-extract-marker';
|
|
13
13
|
import * as i1$3 from '@angular/common';
|
|
14
14
|
import { CommonModule, NgOptimizedImage, NgForOf } from '@angular/common';
|
|
15
|
-
import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, Subject, merge, throwError, BehaviorSubject,
|
|
15
|
+
import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, firstValueFrom, Subject, merge, throwError, BehaviorSubject, fromEvent, timer, Subscription, ReplaySubject, distinctUntilChanged as distinctUntilChanged$1, debounceTime as debounceTime$1, animationFrameScheduler, from, tap as tap$2, Observable, buffer, combineLatestWith, catchError as catchError$1, takeUntil, exhaustMap, mergeMap as mergeMap$1, EMPTY, withLatestFrom as withLatestFrom$1, filter as filter$1, startWith as startWith$1, pairwise as pairwise$1 } from 'rxjs';
|
|
16
16
|
import { valid, coerce, satisfies, ltr } from 'semver';
|
|
17
17
|
import * as i1$2 from '@ngrx/store';
|
|
18
18
|
import { createAction, props, createReducer, on, createFeatureSelector, createSelector, select, StoreModule, Store } from '@ngrx/store';
|
|
@@ -42,30 +42,33 @@ import TileLayer from 'ol/layer/Tile';
|
|
|
42
42
|
import XYZ from 'ol/source/XYZ';
|
|
43
43
|
import { bbox } from 'ol/loadingstrategy';
|
|
44
44
|
import WMTS from 'ol/source/WMTS';
|
|
45
|
-
import
|
|
45
|
+
import OGCVectorTile from 'ol/source/OGCVectorTile.js';
|
|
46
|
+
import { MVT, WFS, GeoJSON as GeoJSON$1 } from 'ol/format';
|
|
47
|
+
import VectorTileLayer from 'ol/layer/VectorTile';
|
|
48
|
+
import OGCMapTile from 'ol/source/OGCMapTile.js';
|
|
49
|
+
import * as i2$4 from '@angular/material/tabs';
|
|
46
50
|
import { MatTabsModule } from '@angular/material/tabs';
|
|
47
|
-
import * as i1$4 from '@angular/cdk/overlay';
|
|
48
|
-
import { CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';
|
|
49
51
|
import * as i2$1 from '@angular/forms';
|
|
50
52
|
import { UntypedFormControl, FormsModule, ReactiveFormsModule, FormControl } from '@angular/forms';
|
|
51
|
-
import * as i5 from 'ngx-chips';
|
|
52
|
-
import { TagInputModule } from 'ngx-chips';
|
|
53
53
|
import * as i4 from '@angular/material/autocomplete';
|
|
54
54
|
import { MatAutocompleteTrigger, MatAutocomplete, MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
55
|
-
import * as i5
|
|
55
|
+
import * as i5 from '@angular/material/core';
|
|
56
56
|
import { MatNativeDateModule, MAT_DATE_LOCALE, DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
|
|
57
|
+
import * as i1$4 from '@angular/material/checkbox';
|
|
58
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
59
|
+
import * as i5$1 from 'ngx-chips';
|
|
60
|
+
import { TagInputModule } from 'ngx-chips';
|
|
61
|
+
import * as i2$2 from '@angular/material/tooltip';
|
|
62
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
63
|
+
import * as i2$3 from '@angular/material/datepicker';
|
|
64
|
+
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
57
65
|
import * as i3 from 'ngx-dropzone';
|
|
58
66
|
import { NgxDropzoneModule } from 'ngx-dropzone';
|
|
59
|
-
import * as i1$5 from '@angular/
|
|
67
|
+
import * as i1$5 from '@angular/cdk/overlay';
|
|
68
|
+
import { CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';
|
|
69
|
+
import * as i1$6 from '@angular/material/progress-spinner';
|
|
60
70
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
61
|
-
import * as i1$6 from '@angular/material/checkbox';
|
|
62
|
-
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
63
|
-
import * as i3$1 from '@angular/material/tooltip';
|
|
64
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
65
|
-
import * as i2$2 from '@angular/material/form-field';
|
|
66
71
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
67
|
-
import * as i3$2 from '@angular/material/datepicker';
|
|
68
|
-
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
69
72
|
import { MatInputModule } from '@angular/material/input';
|
|
70
73
|
import * as i1$7 from '@angular/router';
|
|
71
74
|
import { RouterModule, RouterLink, RouteReuseStrategy } from '@angular/router';
|
|
@@ -73,6 +76,8 @@ import Duration from 'duration-relativetimeformat';
|
|
|
73
76
|
import * as basicLightbox from 'basiclightbox';
|
|
74
77
|
import { marked } from 'marked';
|
|
75
78
|
import EmblaCarousel from 'embla-carousel';
|
|
79
|
+
import { formatDistance } from 'date-fns';
|
|
80
|
+
import { enUS, sk, pt as pt$1, nl as nl$1, it as it$1, es as es$1, de as de$1, fr as fr$1 } from 'date-fns/locale';
|
|
76
81
|
import * as i1$8 from '@ngrx/effects';
|
|
77
82
|
import { createEffect, ofType, EffectsModule, Actions } from '@ngrx/effects';
|
|
78
83
|
import tippy from 'tippy.js';
|
|
@@ -83,18 +88,17 @@ import { trigger, transition, animate, keyframes, style } from '@angular/animati
|
|
|
83
88
|
import { Chart, BarController, BarElement, CategoryScale, LinearScale, LineController, LineElement, PointElement, PieController, ArcElement, ScatterController, Tooltip, Colors, Legend } from 'chart.js';
|
|
84
89
|
import * as i4$1 from '@angular/cdk/scrolling';
|
|
85
90
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
86
|
-
import * as i2$
|
|
91
|
+
import * as i2$5 from '@angular/material/sort';
|
|
87
92
|
import { MatSort, MatSortModule } from '@angular/material/sort';
|
|
88
93
|
import * as i1$9 from '@angular/material/table';
|
|
89
94
|
import { MatTableModule } from '@angular/material/table';
|
|
90
|
-
import * as i3$
|
|
95
|
+
import * as i3$1 from 'ng-table-virtual-scroll';
|
|
91
96
|
import { TableVirtualScrollDataSource, TableVirtualScrollModule } from 'ng-table-virtual-scroll';
|
|
92
97
|
import * as Papa from 'papaparse';
|
|
93
98
|
import parseDate from 'date-fns/parse';
|
|
94
99
|
import parseIsoDate from 'date-fns/parseISO';
|
|
95
|
-
import { WFS, GeoJSON as GeoJSON$1 } from 'ol/format';
|
|
96
100
|
import { MomentDateAdapter, MAT_MOMENT_DATE_ADAPTER_OPTIONS } from '@angular/material-moment-adapter';
|
|
97
|
-
import * as i3$
|
|
101
|
+
import * as i3$2 from '@ngrx/router-store';
|
|
98
102
|
import { getRouterSelectors, routerReducer, StoreRouterConnectingModule, FullRouterStateSerializer } from '@ngrx/router-store';
|
|
99
103
|
import { navigation } from '@ngrx/router-store/data-persistence';
|
|
100
104
|
|
|
@@ -17271,6 +17275,7 @@ var next$6 = "weiter";
|
|
|
17271
17275
|
var previous$6 = "zurück";
|
|
17272
17276
|
var records$6 = "Datensätze";
|
|
17273
17277
|
var de = {
|
|
17278
|
+
"button.login": "",
|
|
17274
17279
|
"catalog.figures.datasets": "{count, plural, =0{Datensätze} one{Datensatz} other{Datensätze}}",
|
|
17275
17280
|
"catalog.figures.organisations": "{count, plural, =0{Organisationen} one{Organisation} other{Organisationen}}",
|
|
17276
17281
|
"chart.aggregation.average": "Durchschnitt",
|
|
@@ -17416,6 +17421,17 @@ var de = {
|
|
|
17416
17421
|
"downloads.format.unknown": "unbekannt",
|
|
17417
17422
|
"downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
|
|
17418
17423
|
dropFile: dropFile$6,
|
|
17424
|
+
"editor.record.form.license": "Lizenz",
|
|
17425
|
+
"editor.record.form.license.cc-by": "",
|
|
17426
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
17427
|
+
"editor.record.form.license.cc-zero": "",
|
|
17428
|
+
"editor.record.form.license.etalab": "",
|
|
17429
|
+
"editor.record.form.license.etalab-v2": "",
|
|
17430
|
+
"editor.record.form.license.odbl": "",
|
|
17431
|
+
"editor.record.form.license.odc-by": "",
|
|
17432
|
+
"editor.record.form.license.pddl": "",
|
|
17433
|
+
"editor.record.form.license.unknown": "Unbekannt oder nicht vorhanden",
|
|
17434
|
+
"editor.record.form.resourceUpdated": "",
|
|
17419
17435
|
"editor.record.loadError.body": "",
|
|
17420
17436
|
"editor.record.loadError.closeMessage": "",
|
|
17421
17437
|
"editor.record.loadError.title": "",
|
|
@@ -17486,6 +17502,7 @@ var de = {
|
|
|
17486
17502
|
"multiselect.filter.placeholder": "Suche",
|
|
17487
17503
|
"nav.back": "Zurück",
|
|
17488
17504
|
next: next$6,
|
|
17505
|
+
"ogc.unreachable.unknown": "Der Dienst konnte nicht erreicht werden",
|
|
17489
17506
|
"organisation.filter.placeholder": "Ergebnisse filtern",
|
|
17490
17507
|
"organisation.sort.sortBy": "Sortieren nach:",
|
|
17491
17508
|
"organisations.hits.found": "{hits, plural, =0{Keine Organisation gefunden} other{{hits} von {total} Organisationen angezeigt}}",
|
|
@@ -17564,6 +17581,14 @@ var de = {
|
|
|
17564
17581
|
"record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
|
|
17565
17582
|
"record.metadata.updatedOn": "Letzte Aktualisierung der Dateninformationen",
|
|
17566
17583
|
"record.metadata.usage": "Nutzung und Einschränkungen",
|
|
17584
|
+
"record.metadata.userFeedbacks": "",
|
|
17585
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
17586
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
17587
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
17588
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
17589
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
17590
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
17591
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
17567
17592
|
"record.more.details": "Weitere Details",
|
|
17568
17593
|
"record.tab.chart": "Diagramm",
|
|
17569
17594
|
"record.tab.data": "Tabelle",
|
|
@@ -17641,6 +17666,7 @@ var next$5 = "next";
|
|
|
17641
17666
|
var previous$5 = "previous";
|
|
17642
17667
|
var records$5 = "records";
|
|
17643
17668
|
var en = {
|
|
17669
|
+
"button.login": "Log in",
|
|
17644
17670
|
"catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
|
|
17645
17671
|
"catalog.figures.organisations": "{count, plural, =0{organisations} one{organisation} other{organisations}}",
|
|
17646
17672
|
"chart.aggregation.average": "average",
|
|
@@ -17786,6 +17812,17 @@ var en = {
|
|
|
17786
17812
|
"downloads.format.unknown": "unknown",
|
|
17787
17813
|
"downloads.wfs.featuretype.not.found": "The layer was not found",
|
|
17788
17814
|
dropFile: dropFile$5,
|
|
17815
|
+
"editor.record.form.license": "License",
|
|
17816
|
+
"editor.record.form.license.cc-by": "Creative Commons CC-BY",
|
|
17817
|
+
"editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
17818
|
+
"editor.record.form.license.cc-zero": "Creative Commons CC-0",
|
|
17819
|
+
"editor.record.form.license.etalab": "Open Licence (Etalab)",
|
|
17820
|
+
"editor.record.form.license.etalab-v2": "Open Licence v2.0 (Etalab)",
|
|
17821
|
+
"editor.record.form.license.odbl": "Open Data Commons ODbL",
|
|
17822
|
+
"editor.record.form.license.odc-by": "Open Data Commons ODC-By",
|
|
17823
|
+
"editor.record.form.license.pddl": "Open Data Commons PDDL",
|
|
17824
|
+
"editor.record.form.license.unknown": "Unknown or absent",
|
|
17825
|
+
"editor.record.form.resourceUpdated": "Last update date",
|
|
17789
17826
|
"editor.record.loadError.body": "The record could not be loaded:",
|
|
17790
17827
|
"editor.record.loadError.closeMessage": "Understood",
|
|
17791
17828
|
"editor.record.loadError.title": "Error loading record",
|
|
@@ -17856,6 +17893,7 @@ var en = {
|
|
|
17856
17893
|
"multiselect.filter.placeholder": "Search",
|
|
17857
17894
|
"nav.back": "Back",
|
|
17858
17895
|
next: next$5,
|
|
17896
|
+
"ogc.unreachable.unknown": "The service could not be reached",
|
|
17859
17897
|
"organisation.filter.placeholder": "Filter results",
|
|
17860
17898
|
"organisation.sort.sortBy": "Sort by:",
|
|
17861
17899
|
"organisations.hits.found": "{hits, plural, =0{No organizations found} other{{hits} out of {total} organizations shown}}",
|
|
@@ -17934,6 +17972,14 @@ var en = {
|
|
|
17934
17972
|
"record.metadata.updateFrequency": "Data Update Frequency",
|
|
17935
17973
|
"record.metadata.updatedOn": "Last Data Information Update",
|
|
17936
17974
|
"record.metadata.usage": "License and Conditions",
|
|
17975
|
+
"record.metadata.userFeedbacks": "Questions / Answers",
|
|
17976
|
+
"record.metadata.userFeedbacks.anonymousUser": "In order to leave a comment, please log in.",
|
|
17977
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "Publish",
|
|
17978
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "Answer...",
|
|
17979
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "Write your comment here...",
|
|
17980
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Newest comments first",
|
|
17981
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Oldest comments first",
|
|
17982
|
+
"record.metadata.userFeedbacks.sortSelector.label": "Sort by ...",
|
|
17937
17983
|
"record.more.details": "Read more",
|
|
17938
17984
|
"record.tab.chart": "Chart",
|
|
17939
17985
|
"record.tab.data": "Table",
|
|
@@ -18011,6 +18057,7 @@ var next$4 = "";
|
|
|
18011
18057
|
var previous$4 = "";
|
|
18012
18058
|
var records$4 = "";
|
|
18013
18059
|
var es = {
|
|
18060
|
+
"button.login": "",
|
|
18014
18061
|
"catalog.figures.datasets": "conjuntos de datos",
|
|
18015
18062
|
"catalog.figures.organisations": "organizaciones",
|
|
18016
18063
|
"chart.aggregation.average": "promedio",
|
|
@@ -18156,6 +18203,17 @@ var es = {
|
|
|
18156
18203
|
"downloads.format.unknown": "",
|
|
18157
18204
|
"downloads.wfs.featuretype.not.found": "",
|
|
18158
18205
|
dropFile: dropFile$4,
|
|
18206
|
+
"editor.record.form.license": "",
|
|
18207
|
+
"editor.record.form.license.cc-by": "",
|
|
18208
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
18209
|
+
"editor.record.form.license.cc-zero": "",
|
|
18210
|
+
"editor.record.form.license.etalab": "",
|
|
18211
|
+
"editor.record.form.license.etalab-v2": "",
|
|
18212
|
+
"editor.record.form.license.odbl": "",
|
|
18213
|
+
"editor.record.form.license.odc-by": "",
|
|
18214
|
+
"editor.record.form.license.pddl": "",
|
|
18215
|
+
"editor.record.form.license.unknown": "",
|
|
18216
|
+
"editor.record.form.resourceUpdated": "",
|
|
18159
18217
|
"editor.record.loadError.body": "",
|
|
18160
18218
|
"editor.record.loadError.closeMessage": "",
|
|
18161
18219
|
"editor.record.loadError.title": "",
|
|
@@ -18226,6 +18284,7 @@ var es = {
|
|
|
18226
18284
|
"multiselect.filter.placeholder": "",
|
|
18227
18285
|
"nav.back": "",
|
|
18228
18286
|
next: next$4,
|
|
18287
|
+
"ogc.unreachable.unknown": "",
|
|
18229
18288
|
"organisation.filter.placeholder": "",
|
|
18230
18289
|
"organisation.sort.sortBy": "",
|
|
18231
18290
|
"organisations.hits.found": "",
|
|
@@ -18304,6 +18363,14 @@ var es = {
|
|
|
18304
18363
|
"record.metadata.updateFrequency": "",
|
|
18305
18364
|
"record.metadata.updatedOn": "",
|
|
18306
18365
|
"record.metadata.usage": "",
|
|
18366
|
+
"record.metadata.userFeedbacks": "",
|
|
18367
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
18368
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
18369
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
18370
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
18371
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
18372
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
18373
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
18307
18374
|
"record.more.details": "",
|
|
18308
18375
|
"record.tab.chart": "",
|
|
18309
18376
|
"record.tab.data": "",
|
|
@@ -18381,6 +18448,7 @@ var next$3 = "suivant";
|
|
|
18381
18448
|
var previous$3 = "précédent";
|
|
18382
18449
|
var records$3 = "enregistrements";
|
|
18383
18450
|
var fr = {
|
|
18451
|
+
"button.login": "Se connecter",
|
|
18384
18452
|
"catalog.figures.datasets": "{count, plural, =0{données} one{donnée} other{données}}",
|
|
18385
18453
|
"catalog.figures.organisations": "{count, plural, =0{organisations} one{organisation} other{organisations}}",
|
|
18386
18454
|
"chart.aggregation.average": "moyenne",
|
|
@@ -18526,6 +18594,17 @@ var fr = {
|
|
|
18526
18594
|
"downloads.format.unknown": "inconnu",
|
|
18527
18595
|
"downloads.wfs.featuretype.not.found": "La couche n'a pas été retrouvée",
|
|
18528
18596
|
dropFile: dropFile$3,
|
|
18597
|
+
"editor.record.form.license": "Licence",
|
|
18598
|
+
"editor.record.form.license.cc-by": "",
|
|
18599
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
18600
|
+
"editor.record.form.license.cc-zero": "",
|
|
18601
|
+
"editor.record.form.license.etalab": "Licence Ouverte (Etalab)",
|
|
18602
|
+
"editor.record.form.license.etalab-v2": "Licence Ouverte v2.0 (Etalab)",
|
|
18603
|
+
"editor.record.form.license.odbl": "",
|
|
18604
|
+
"editor.record.form.license.odc-by": "",
|
|
18605
|
+
"editor.record.form.license.pddl": "",
|
|
18606
|
+
"editor.record.form.license.unknown": "Non-reconnue ou absente",
|
|
18607
|
+
"editor.record.form.resourceUpdated": "Date de dernière révision",
|
|
18529
18608
|
"editor.record.loadError.body": "",
|
|
18530
18609
|
"editor.record.loadError.closeMessage": "",
|
|
18531
18610
|
"editor.record.loadError.title": "",
|
|
@@ -18596,6 +18675,7 @@ var fr = {
|
|
|
18596
18675
|
"multiselect.filter.placeholder": "Rechercher",
|
|
18597
18676
|
"nav.back": "Retour",
|
|
18598
18677
|
next: next$3,
|
|
18678
|
+
"ogc.unreachable.unknown": "Le service n'est pas accessible",
|
|
18599
18679
|
"organisation.filter.placeholder": "Filtrer les résultats",
|
|
18600
18680
|
"organisation.sort.sortBy": "Trier par :",
|
|
18601
18681
|
"organisations.hits.found": "{hits, plural, =0{Aucune organisation trouvé} one{1 organisation sur {total} affichée} other{{hits} organisations sur {total} affichées}}",
|
|
@@ -18674,6 +18754,14 @@ var fr = {
|
|
|
18674
18754
|
"record.metadata.updateFrequency": "Fréquence de mise à jour des données",
|
|
18675
18755
|
"record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
|
|
18676
18756
|
"record.metadata.usage": "Licences et conditions d'utilisation",
|
|
18757
|
+
"record.metadata.userFeedbacks": "Questions / Réponses",
|
|
18758
|
+
"record.metadata.userFeedbacks.anonymousUser": "Pour rédiger un commentaire, veuillez vous identifier.",
|
|
18759
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "Publier",
|
|
18760
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "Répondre...",
|
|
18761
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "Rédiger votre commentaire ici...",
|
|
18762
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Les plus récents en premier",
|
|
18763
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Les plus anciens en premier",
|
|
18764
|
+
"record.metadata.userFeedbacks.sortSelector.label": "Trier par ...",
|
|
18677
18765
|
"record.more.details": "Détails",
|
|
18678
18766
|
"record.tab.chart": "Graphique",
|
|
18679
18767
|
"record.tab.data": "Tableau",
|
|
@@ -18751,6 +18839,7 @@ var next$2 = "successivo";
|
|
|
18751
18839
|
var previous$2 = "precedente";
|
|
18752
18840
|
var records$2 = "record";
|
|
18753
18841
|
var it = {
|
|
18842
|
+
"button.login": "",
|
|
18754
18843
|
"catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
|
|
18755
18844
|
"catalog.figures.organisations": "{count, plural, =0{organizzazioni} one{organizzazione} other{organizzazioni}}",
|
|
18756
18845
|
"chart.aggregation.average": "media",
|
|
@@ -18896,6 +18985,17 @@ var it = {
|
|
|
18896
18985
|
"downloads.format.unknown": "sconosciuto",
|
|
18897
18986
|
"downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
|
|
18898
18987
|
dropFile: dropFile$2,
|
|
18988
|
+
"editor.record.form.license": "Licenza",
|
|
18989
|
+
"editor.record.form.license.cc-by": "",
|
|
18990
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
18991
|
+
"editor.record.form.license.cc-zero": "",
|
|
18992
|
+
"editor.record.form.license.etalab": "Licenza aperta (Etalab)",
|
|
18993
|
+
"editor.record.form.license.etalab-v2": "Licenza aperta v2.0 (Etalab)",
|
|
18994
|
+
"editor.record.form.license.odbl": "",
|
|
18995
|
+
"editor.record.form.license.odc-by": "",
|
|
18996
|
+
"editor.record.form.license.pddl": "",
|
|
18997
|
+
"editor.record.form.license.unknown": "Non riconosciuta o assente",
|
|
18998
|
+
"editor.record.form.resourceUpdated": "",
|
|
18899
18999
|
"editor.record.loadError.body": "",
|
|
18900
19000
|
"editor.record.loadError.closeMessage": "",
|
|
18901
19001
|
"editor.record.loadError.title": "",
|
|
@@ -18966,6 +19066,7 @@ var it = {
|
|
|
18966
19066
|
"multiselect.filter.placeholder": "Cerca",
|
|
18967
19067
|
"nav.back": "Indietro",
|
|
18968
19068
|
next: next$2,
|
|
19069
|
+
"ogc.unreachable.unknown": "Il servizio non è accessibile",
|
|
18969
19070
|
"organisation.filter.placeholder": "Filtra i risultati",
|
|
18970
19071
|
"organisation.sort.sortBy": "Ordina per:",
|
|
18971
19072
|
"organisations.hits.found": "{hits, plural, =0{Nessuna organizzazione trovata} one{1 organizzazione su {total} visualizzata} other{{hits} organizzazioni su {total} visualizzate}}",
|
|
@@ -19044,6 +19145,14 @@ var it = {
|
|
|
19044
19145
|
"record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
|
|
19045
19146
|
"record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
|
|
19046
19147
|
"record.metadata.usage": "Licenze e limiti di utilizzo",
|
|
19148
|
+
"record.metadata.userFeedbacks": "",
|
|
19149
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
19150
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
19151
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
19152
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
19153
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
19154
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
19155
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
19047
19156
|
"record.more.details": "Dettagli",
|
|
19048
19157
|
"record.tab.chart": "Grafico",
|
|
19049
19158
|
"record.tab.data": "Tabella",
|
|
@@ -19121,6 +19230,7 @@ var next$1 = "";
|
|
|
19121
19230
|
var previous$1 = "";
|
|
19122
19231
|
var records$1 = "";
|
|
19123
19232
|
var nl = {
|
|
19233
|
+
"button.login": "",
|
|
19124
19234
|
"catalog.figures.datasets": "datasets",
|
|
19125
19235
|
"catalog.figures.organisations": "organisaties",
|
|
19126
19236
|
"chart.aggregation.average": "gemiddelde",
|
|
@@ -19266,6 +19376,17 @@ var nl = {
|
|
|
19266
19376
|
"downloads.format.unknown": "",
|
|
19267
19377
|
"downloads.wfs.featuretype.not.found": "",
|
|
19268
19378
|
dropFile: dropFile$1,
|
|
19379
|
+
"editor.record.form.license": "",
|
|
19380
|
+
"editor.record.form.license.cc-by": "",
|
|
19381
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
19382
|
+
"editor.record.form.license.cc-zero": "",
|
|
19383
|
+
"editor.record.form.license.etalab": "",
|
|
19384
|
+
"editor.record.form.license.etalab-v2": "",
|
|
19385
|
+
"editor.record.form.license.odbl": "",
|
|
19386
|
+
"editor.record.form.license.odc-by": "",
|
|
19387
|
+
"editor.record.form.license.pddl": "",
|
|
19388
|
+
"editor.record.form.license.unknown": "",
|
|
19389
|
+
"editor.record.form.resourceUpdated": "",
|
|
19269
19390
|
"editor.record.loadError.body": "",
|
|
19270
19391
|
"editor.record.loadError.closeMessage": "",
|
|
19271
19392
|
"editor.record.loadError.title": "",
|
|
@@ -19336,6 +19457,7 @@ var nl = {
|
|
|
19336
19457
|
"multiselect.filter.placeholder": "",
|
|
19337
19458
|
"nav.back": "",
|
|
19338
19459
|
next: next$1,
|
|
19460
|
+
"ogc.unreachable.unknown": "",
|
|
19339
19461
|
"organisation.filter.placeholder": "",
|
|
19340
19462
|
"organisation.sort.sortBy": "",
|
|
19341
19463
|
"organisations.hits.found": "",
|
|
@@ -19414,6 +19536,14 @@ var nl = {
|
|
|
19414
19536
|
"record.metadata.updateFrequency": "",
|
|
19415
19537
|
"record.metadata.updatedOn": "",
|
|
19416
19538
|
"record.metadata.usage": "",
|
|
19539
|
+
"record.metadata.userFeedbacks": "",
|
|
19540
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
19541
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
19542
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
19543
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
19544
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
19545
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
19546
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
19417
19547
|
"record.more.details": "",
|
|
19418
19548
|
"record.tab.chart": "",
|
|
19419
19549
|
"record.tab.data": "",
|
|
@@ -19491,6 +19621,7 @@ var next = "";
|
|
|
19491
19621
|
var previous = "";
|
|
19492
19622
|
var records = "";
|
|
19493
19623
|
var pt = {
|
|
19624
|
+
"button.login": "",
|
|
19494
19625
|
"catalog.figures.datasets": "conjuntos de dados",
|
|
19495
19626
|
"catalog.figures.organisations": "organizações",
|
|
19496
19627
|
"chart.aggregation.average": "média",
|
|
@@ -19636,6 +19767,17 @@ var pt = {
|
|
|
19636
19767
|
"downloads.format.unknown": "",
|
|
19637
19768
|
"downloads.wfs.featuretype.not.found": "",
|
|
19638
19769
|
dropFile: dropFile,
|
|
19770
|
+
"editor.record.form.license": "",
|
|
19771
|
+
"editor.record.form.license.cc-by": "",
|
|
19772
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
19773
|
+
"editor.record.form.license.cc-zero": "",
|
|
19774
|
+
"editor.record.form.license.etalab": "",
|
|
19775
|
+
"editor.record.form.license.etalab-v2": "",
|
|
19776
|
+
"editor.record.form.license.odbl": "",
|
|
19777
|
+
"editor.record.form.license.odc-by": "",
|
|
19778
|
+
"editor.record.form.license.pddl": "",
|
|
19779
|
+
"editor.record.form.license.unknown": "",
|
|
19780
|
+
"editor.record.form.resourceUpdated": "",
|
|
19639
19781
|
"editor.record.loadError.body": "",
|
|
19640
19782
|
"editor.record.loadError.closeMessage": "",
|
|
19641
19783
|
"editor.record.loadError.title": "",
|
|
@@ -19706,6 +19848,7 @@ var pt = {
|
|
|
19706
19848
|
"multiselect.filter.placeholder": "",
|
|
19707
19849
|
"nav.back": "",
|
|
19708
19850
|
next: next,
|
|
19851
|
+
"ogc.unreachable.unknown": "",
|
|
19709
19852
|
"organisation.filter.placeholder": "",
|
|
19710
19853
|
"organisation.sort.sortBy": "",
|
|
19711
19854
|
"organisations.hits.found": "",
|
|
@@ -19784,6 +19927,14 @@ var pt = {
|
|
|
19784
19927
|
"record.metadata.updateFrequency": "",
|
|
19785
19928
|
"record.metadata.updatedOn": "",
|
|
19786
19929
|
"record.metadata.usage": "",
|
|
19930
|
+
"record.metadata.userFeedbacks": "",
|
|
19931
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
19932
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
19933
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
19934
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
19935
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
19936
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
19937
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
19787
19938
|
"record.more.details": "",
|
|
19788
19939
|
"record.tab.chart": "",
|
|
19789
19940
|
"record.tab.data": "",
|
|
@@ -21166,6 +21317,16 @@ class GravatarService {
|
|
|
21166
21317
|
getProfileIcon(hash) {
|
|
21167
21318
|
return this.identicon$.pipe(map$1((identicon) => identicon || this.GRAVATAR_IDENTICON), map$1((identicon) => `${this.GRAVATAR_URL}${hash}?d=${identicon}`));
|
|
21168
21319
|
}
|
|
21320
|
+
async getProfileIconUrl(userId) {
|
|
21321
|
+
let iconUrl = '';
|
|
21322
|
+
try {
|
|
21323
|
+
iconUrl = await firstValueFrom(this.getProfileIcon(userId));
|
|
21324
|
+
}
|
|
21325
|
+
catch (error) {
|
|
21326
|
+
return '';
|
|
21327
|
+
}
|
|
21328
|
+
return iconUrl;
|
|
21329
|
+
}
|
|
21169
21330
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GravatarService, deps: [{ token: Gn4SettingsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
21170
21331
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GravatarService, providedIn: 'root' }); }
|
|
21171
21332
|
}
|
|
@@ -21317,6 +21478,39 @@ class Gn4PlatformMapper {
|
|
|
21317
21478
|
};
|
|
21318
21479
|
});
|
|
21319
21480
|
}
|
|
21481
|
+
userFeedbacksFromApi(userFeedback) {
|
|
21482
|
+
return {
|
|
21483
|
+
uuid: userFeedback.uuid,
|
|
21484
|
+
metadataUUID: userFeedback.metadataUUID,
|
|
21485
|
+
comment: userFeedback.comment,
|
|
21486
|
+
authorUserId: userFeedback.authorUserId.toString(),
|
|
21487
|
+
authorName: userFeedback.authorName,
|
|
21488
|
+
authorEmail: userFeedback.authorEmail,
|
|
21489
|
+
published: userFeedback.published,
|
|
21490
|
+
parentUuid: userFeedback.parentUuid ?? undefined,
|
|
21491
|
+
date: new Date(userFeedback.date),
|
|
21492
|
+
};
|
|
21493
|
+
}
|
|
21494
|
+
userFeedbacksToApi(userFeedback) {
|
|
21495
|
+
return {
|
|
21496
|
+
uuid: userFeedback.uuid,
|
|
21497
|
+
metadataUUID: userFeedback.metadataUUID,
|
|
21498
|
+
comment: userFeedback.comment,
|
|
21499
|
+
authorUserId: Number.parseInt(userFeedback.authorUserId),
|
|
21500
|
+
authorName: userFeedback.authorName,
|
|
21501
|
+
authorEmail: userFeedback.authorEmail,
|
|
21502
|
+
published: userFeedback.published,
|
|
21503
|
+
parentUuid: userFeedback.parentUuid,
|
|
21504
|
+
date: userFeedback.date.getTime().toString(),
|
|
21505
|
+
};
|
|
21506
|
+
}
|
|
21507
|
+
async createUserFeedbackViewModel(baseUserFeedback) {
|
|
21508
|
+
const userAvatarUrl = await this.avatarService.getProfileIconUrl(baseUserFeedback.authorUserId?.toString());
|
|
21509
|
+
return {
|
|
21510
|
+
...baseUserFeedback,
|
|
21511
|
+
avatarUrl: userAvatarUrl,
|
|
21512
|
+
};
|
|
21513
|
+
}
|
|
21320
21514
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformMapper, deps: [{ token: AvatarServiceInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
21321
21515
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformMapper }); }
|
|
21322
21516
|
}
|
|
@@ -21326,7 +21520,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21326
21520
|
|
|
21327
21521
|
const minApiVersion = '4.2.2';
|
|
21328
21522
|
class Gn4PlatformService {
|
|
21329
|
-
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService) {
|
|
21523
|
+
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService, userfeedbackApiService) {
|
|
21330
21524
|
this.siteApiService = siteApiService;
|
|
21331
21525
|
this.meApi = meApi;
|
|
21332
21526
|
this.usersApi = usersApi;
|
|
@@ -21334,6 +21528,7 @@ class Gn4PlatformService {
|
|
|
21334
21528
|
this.toolsApiService = toolsApiService;
|
|
21335
21529
|
this.registriesApiService = registriesApiService;
|
|
21336
21530
|
this.langService = langService;
|
|
21531
|
+
this.userfeedbackApiService = userfeedbackApiService;
|
|
21337
21532
|
this.type = 'GeoNetwork';
|
|
21338
21533
|
this.keyTranslations$ = this.toolsApiService
|
|
21339
21534
|
.getTranslationsPackage1('gnui')
|
|
@@ -21353,7 +21548,7 @@ class Gn4PlatformService {
|
|
|
21353
21548
|
*/
|
|
21354
21549
|
this.thesauri = {};
|
|
21355
21550
|
this.me$ = this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
21356
|
-
this.
|
|
21551
|
+
this.isUserAnonymous$ = this.me$.pipe(map$1((user) => !user || !('id' in user)));
|
|
21357
21552
|
this.users$ = this.usersApi.getUsers().pipe(map$1((users) => users.map((user) => this.mapper.userFromApi(user))), shareReplay());
|
|
21358
21553
|
}
|
|
21359
21554
|
getType() {
|
|
@@ -21366,7 +21561,7 @@ class Gn4PlatformService {
|
|
|
21366
21561
|
return this.me$;
|
|
21367
21562
|
}
|
|
21368
21563
|
isAnonymous() {
|
|
21369
|
-
return this.
|
|
21564
|
+
return this.isUserAnonymous$;
|
|
21370
21565
|
}
|
|
21371
21566
|
getOrganizations() {
|
|
21372
21567
|
return undefined;
|
|
@@ -21402,12 +21597,23 @@ class Gn4PlatformService {
|
|
|
21402
21597
|
.pipe(map$1((thesaurus) => this.mapper.thesaurusFromApi(thesaurus, this.langService.iso3)), shareReplay(1));
|
|
21403
21598
|
return this.thesauri[uri];
|
|
21404
21599
|
}
|
|
21405
|
-
|
|
21600
|
+
getUserFeedbacks(uuid) {
|
|
21601
|
+
return this.userfeedbackApiService
|
|
21602
|
+
.getUserComments(uuid)
|
|
21603
|
+
.pipe(map$1((userFeedbacks) => userFeedbacks.map(this.mapper.userFeedbacksFromApi)));
|
|
21604
|
+
}
|
|
21605
|
+
postUserFeedbacks(userFeedback) {
|
|
21606
|
+
const mappedUserFeedBack = this.mapper.userFeedbacksToApi(userFeedback);
|
|
21607
|
+
return this.userfeedbackApiService
|
|
21608
|
+
.newUserFeedback(mappedUserFeedBack)
|
|
21609
|
+
.pipe(map$1(() => undefined));
|
|
21610
|
+
}
|
|
21611
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, deps: [{ token: SiteApiService }, { token: MeApiService }, { token: UsersApiService }, { token: Gn4PlatformMapper }, { token: ToolsApiService }, { token: RegistriesApiService }, { token: LangService }, { token: UserfeedbackApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
21406
21612
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService }); }
|
|
21407
21613
|
}
|
|
21408
21614
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, decorators: [{
|
|
21409
21615
|
type: Injectable
|
|
21410
|
-
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }, { type: LangService }]; } });
|
|
21616
|
+
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }, { type: LangService }, { type: UserfeedbackApiService }]; } });
|
|
21411
21617
|
|
|
21412
21618
|
function provideGn4() {
|
|
21413
21619
|
return [
|
|
@@ -22134,6 +22340,27 @@ const FORMATS = {
|
|
|
22134
22340
|
color: '#de630b',
|
|
22135
22341
|
mimeTypes: ['application/x-dxf', 'image/x-dxf'],
|
|
22136
22342
|
},
|
|
22343
|
+
html: {
|
|
22344
|
+
extensions: ['html', 'htm'],
|
|
22345
|
+
priority: 12,
|
|
22346
|
+
color: '#f2bb3a',
|
|
22347
|
+
mimeTypes: ['text/html'],
|
|
22348
|
+
},
|
|
22349
|
+
fgb: {
|
|
22350
|
+
extensions: ['fgb', 'flatgeobuf'],
|
|
22351
|
+
priority: 13,
|
|
22352
|
+
color: '#f2bb3a',
|
|
22353
|
+
mimeTypes: ['application/flatgeobuf'],
|
|
22354
|
+
},
|
|
22355
|
+
jsonfg: {
|
|
22356
|
+
extensions: ['jsonfg', 'jsonfgc'],
|
|
22357
|
+
priority: 14,
|
|
22358
|
+
color: '#f2bb3a',
|
|
22359
|
+
mimeTypes: [
|
|
22360
|
+
'application/vnd.ogc.fg+json',
|
|
22361
|
+
'application/vnd.ogc.fg+json;compatibility=geojson',
|
|
22362
|
+
],
|
|
22363
|
+
},
|
|
22137
22364
|
};
|
|
22138
22365
|
function getFormatPriority(linkFormat) {
|
|
22139
22366
|
for (const format in FORMATS) {
|
|
@@ -22265,7 +22492,7 @@ class LinkClassifierService {
|
|
|
22265
22492
|
case 'wmts':
|
|
22266
22493
|
return [LinkUsage.API, LinkUsage.MAP_API];
|
|
22267
22494
|
case 'ogcFeatures':
|
|
22268
|
-
return [LinkUsage.API];
|
|
22495
|
+
return [LinkUsage.API, LinkUsage.DOWNLOAD, LinkUsage.GEODATA];
|
|
22269
22496
|
default:
|
|
22270
22497
|
return [LinkUsage.UNKNOWN];
|
|
22271
22498
|
}
|
|
@@ -23566,13 +23793,30 @@ class MapContextService {
|
|
|
23566
23793
|
const style = this.styleService.styles.default;
|
|
23567
23794
|
switch (type) {
|
|
23568
23795
|
case MapContextLayerTypeEnum.OGCAPI:
|
|
23569
|
-
|
|
23570
|
-
|
|
23571
|
-
|
|
23572
|
-
|
|
23573
|
-
|
|
23574
|
-
|
|
23575
|
-
|
|
23796
|
+
if (layerModel.layerType === 'vectorTiles') {
|
|
23797
|
+
return new VectorTileLayer({
|
|
23798
|
+
source: new OGCVectorTile({
|
|
23799
|
+
url: layerModel.url,
|
|
23800
|
+
format: new MVT(),
|
|
23801
|
+
}),
|
|
23802
|
+
});
|
|
23803
|
+
}
|
|
23804
|
+
else if (layerModel.layerType === 'mapTiles') {
|
|
23805
|
+
return new TileLayer({
|
|
23806
|
+
source: new OGCMapTile({
|
|
23807
|
+
url: layerModel.url,
|
|
23808
|
+
}),
|
|
23809
|
+
});
|
|
23810
|
+
}
|
|
23811
|
+
else {
|
|
23812
|
+
return new VectorLayer({
|
|
23813
|
+
source: new VectorSource({
|
|
23814
|
+
format: new GeoJSON(),
|
|
23815
|
+
url: layerModel.url,
|
|
23816
|
+
}),
|
|
23817
|
+
style,
|
|
23818
|
+
});
|
|
23819
|
+
}
|
|
23576
23820
|
case MapContextLayerTypeEnum.XYZ:
|
|
23577
23821
|
return new TileLayer({
|
|
23578
23822
|
source: new XYZ({
|
|
@@ -23811,6 +24055,173 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23811
24055
|
type: Input
|
|
23812
24056
|
}] } });
|
|
23813
24057
|
|
|
24058
|
+
class PopupAlertComponent {
|
|
24059
|
+
constructor(changeDetector) {
|
|
24060
|
+
this.changeDetector = changeDetector;
|
|
24061
|
+
this.type = 'info';
|
|
24062
|
+
this.position = 'top';
|
|
24063
|
+
this.expanded = false;
|
|
24064
|
+
this.timeout = null;
|
|
24065
|
+
}
|
|
24066
|
+
get showDuration() {
|
|
24067
|
+
const chars = this.content.nativeElement.innerHTML.length;
|
|
24068
|
+
return Math.max(3000, chars * 20);
|
|
24069
|
+
}
|
|
24070
|
+
ngOnInit() {
|
|
24071
|
+
this.expandAndClose();
|
|
24072
|
+
}
|
|
24073
|
+
expand() {
|
|
24074
|
+
this.expanded = true;
|
|
24075
|
+
this.changeDetector.detectChanges();
|
|
24076
|
+
clearTimeout(this.timeout);
|
|
24077
|
+
}
|
|
24078
|
+
expandAndClose() {
|
|
24079
|
+
this.expanded = true;
|
|
24080
|
+
this.changeDetector.detectChanges();
|
|
24081
|
+
clearTimeout(this.timeout);
|
|
24082
|
+
this.timeout = setTimeout(() => {
|
|
24083
|
+
this.expanded = false;
|
|
24084
|
+
this.changeDetector.detectChanges();
|
|
24085
|
+
}, this.showDuration);
|
|
24086
|
+
}
|
|
24087
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PopupAlertComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24088
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: { icon: "icon", type: "type", position: "position" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: "<div class=\"h-full relative container\">\n <div\n class=\"pointer-events-auto absolute text-white flex flex-row p-2 rounded message\"\n role=\"alert\"\n [ngClass]=\"{\n 'position-bottom': position === 'bottom',\n 'position-top': position === 'top',\n expanded: this.expanded,\n 'bg-red-500': type === 'danger',\n 'bg-yellow-500': type === 'warning',\n 'bg-blue-500': type === 'info'\n }\"\n (mouseenter)=\"expand()\"\n (mouseleave)=\"expandAndClose()\"\n >\n <mat-icon class=\"material-symbols-outlined mr-2 shrink-0 select-none\">{{\n icon\n }}</mat-icon>\n <div class=\"grow\" #content [ngClass]=\"{ invisible: !expanded }\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [":host{pointer-events:none}.container{filter:drop-shadow(0px 4px 3px rgba(0,0,0,.2))}.message{transition:clip-path .3s cubic-bezier(.25,.46,.45,.94)}.message.expanded{clip-path:circle(100%)}.position-top{clip-path:circle(19px at 20px 20px);align-items:start;top:0;left:0}.position-bottom{clip-path:circle(19px at 20px calc(100% - 20px));align-items:end;bottom:0;left:0}.container ::ng-deep a{text-decoration:underline;font-weight:700}.container ::ng-deep a:hover{opacity:.85}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24089
|
+
}
|
|
24090
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PopupAlertComponent, decorators: [{
|
|
24091
|
+
type: Component,
|
|
24092
|
+
args: [{ selector: 'gn-ui-popup-alert', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"h-full relative container\">\n <div\n class=\"pointer-events-auto absolute text-white flex flex-row p-2 rounded message\"\n role=\"alert\"\n [ngClass]=\"{\n 'position-bottom': position === 'bottom',\n 'position-top': position === 'top',\n expanded: this.expanded,\n 'bg-red-500': type === 'danger',\n 'bg-yellow-500': type === 'warning',\n 'bg-blue-500': type === 'info'\n }\"\n (mouseenter)=\"expand()\"\n (mouseleave)=\"expandAndClose()\"\n >\n <mat-icon class=\"material-symbols-outlined mr-2 shrink-0 select-none\">{{\n icon\n }}</mat-icon>\n <div class=\"grow\" #content [ngClass]=\"{ invisible: !expanded }\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [":host{pointer-events:none}.container{filter:drop-shadow(0px 4px 3px rgba(0,0,0,.2))}.message{transition:clip-path .3s cubic-bezier(.25,.46,.45,.94)}.message.expanded{clip-path:circle(100%)}.position-top{clip-path:circle(19px at 20px 20px);align-items:start;top:0;left:0}.position-bottom{clip-path:circle(19px at 20px calc(100% - 20px));align-items:end;bottom:0;left:0}.container ::ng-deep a{text-decoration:underline;font-weight:700}.container ::ng-deep a:hover{opacity:.85}\n"] }]
|
|
24093
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { icon: [{
|
|
24094
|
+
type: Input
|
|
24095
|
+
}], type: [{
|
|
24096
|
+
type: Input
|
|
24097
|
+
}], position: [{
|
|
24098
|
+
type: Input
|
|
24099
|
+
}], content: [{
|
|
24100
|
+
type: ViewChild,
|
|
24101
|
+
args: ['content']
|
|
24102
|
+
}] } });
|
|
24103
|
+
|
|
24104
|
+
class AutocompleteComponent {
|
|
24105
|
+
constructor(cdRef) {
|
|
24106
|
+
this.cdRef = cdRef;
|
|
24107
|
+
this.clearOnSelection = false;
|
|
24108
|
+
this.autoFocus = false;
|
|
24109
|
+
this.itemSelected = new EventEmitter();
|
|
24110
|
+
this.inputSubmitted = new EventEmitter();
|
|
24111
|
+
this.inputCleared = new EventEmitter();
|
|
24112
|
+
this.control = new UntypedFormControl();
|
|
24113
|
+
this.subscription = new Subscription();
|
|
24114
|
+
this.cancelEnter = true;
|
|
24115
|
+
this.selectionSubject = new ReplaySubject(1);
|
|
24116
|
+
this.lastInputValue$ = new ReplaySubject(1);
|
|
24117
|
+
this.error = null;
|
|
24118
|
+
this.displayWithFn = (item) => item;
|
|
24119
|
+
}
|
|
24120
|
+
ngOnChanges(changes) {
|
|
24121
|
+
const { value } = changes;
|
|
24122
|
+
if (value) {
|
|
24123
|
+
const previousTextValue = this.displayWithFn(value.previousValue);
|
|
24124
|
+
const currentTextValue = this.displayWithFn(value.currentValue);
|
|
24125
|
+
if (previousTextValue !== currentTextValue) {
|
|
24126
|
+
this.updateInputValue(value.currentValue);
|
|
24127
|
+
}
|
|
24128
|
+
}
|
|
24129
|
+
}
|
|
24130
|
+
ngOnInit() {
|
|
24131
|
+
this.suggestions$ = merge(this.control.valueChanges.pipe(filter((value) => typeof value === 'string'), filter((value) => value.length > 2), debounceTime(400), distinctUntilChanged(), tap$1(() => (this.searching = true))), this.control.valueChanges.pipe(filter((value) => typeof value === 'object' && value.title), map$1((item) => item.title))).pipe(switchMap$1((value) => (value ? this.action(value) : of([]))), catchError((error) => {
|
|
24132
|
+
this.error = error.message;
|
|
24133
|
+
return of([]);
|
|
24134
|
+
}), finalize(() => (this.searching = false)));
|
|
24135
|
+
this.subscription = this.control.valueChanges.subscribe((any) => {
|
|
24136
|
+
if (any !== '') {
|
|
24137
|
+
this.cancelEnter = false;
|
|
24138
|
+
}
|
|
24139
|
+
});
|
|
24140
|
+
this.control.valueChanges
|
|
24141
|
+
.pipe(filter((value) => typeof value === 'string'))
|
|
24142
|
+
.subscribe(this.lastInputValue$);
|
|
24143
|
+
}
|
|
24144
|
+
ngAfterViewInit() {
|
|
24145
|
+
this.autocomplete.optionSelected.subscribe(this.selectionSubject);
|
|
24146
|
+
if (this.autoFocus) {
|
|
24147
|
+
this.inputRef.nativeElement.focus();
|
|
24148
|
+
this.cdRef.detectChanges();
|
|
24149
|
+
}
|
|
24150
|
+
}
|
|
24151
|
+
ngOnDestroy() {
|
|
24152
|
+
this.subscription.unsubscribe();
|
|
24153
|
+
}
|
|
24154
|
+
updateInputValue(value) {
|
|
24155
|
+
if (value) {
|
|
24156
|
+
this.control.setValue(value);
|
|
24157
|
+
}
|
|
24158
|
+
if (this.inputRef) {
|
|
24159
|
+
this.inputRef.nativeElement.value = value?.title || '';
|
|
24160
|
+
}
|
|
24161
|
+
}
|
|
24162
|
+
clear() {
|
|
24163
|
+
this.inputRef.nativeElement.value = '';
|
|
24164
|
+
this.inputCleared.emit();
|
|
24165
|
+
this.selectionSubject
|
|
24166
|
+
.pipe(take(1))
|
|
24167
|
+
.subscribe((selection) => selection && selection.option.deselect());
|
|
24168
|
+
this.inputRef.nativeElement.focus();
|
|
24169
|
+
this.triggerRef.closePanel();
|
|
24170
|
+
}
|
|
24171
|
+
handleEnter(any) {
|
|
24172
|
+
if (!this.cancelEnter) {
|
|
24173
|
+
this.inputSubmitted.emit(any);
|
|
24174
|
+
this.triggerRef.closePanel();
|
|
24175
|
+
}
|
|
24176
|
+
}
|
|
24177
|
+
handleClickSearch() {
|
|
24178
|
+
this.inputSubmitted.emit(this.inputRef.nativeElement.value);
|
|
24179
|
+
this.triggerRef.closePanel();
|
|
24180
|
+
}
|
|
24181
|
+
handleSelection(event) {
|
|
24182
|
+
this.cancelEnter = true;
|
|
24183
|
+
this.itemSelected.emit(event.option.value);
|
|
24184
|
+
if (this.clearOnSelection) {
|
|
24185
|
+
this.lastInputValue$.pipe(first()).subscribe((any) => {
|
|
24186
|
+
this.inputRef.nativeElement.value = any;
|
|
24187
|
+
});
|
|
24188
|
+
}
|
|
24189
|
+
}
|
|
24190
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24191
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", action: "action", value: "value", clearOnSelection: "clearOnSelection", autoFocus: "autoFocus", displayWithFn: "displayWithFn" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", inputCleared: "inputCleared" }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "inputRef", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24192
|
+
}
|
|
24193
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
24194
|
+
type: Component,
|
|
24195
|
+
args: [{ selector: 'gn-ui-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"] }]
|
|
24196
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { placeholder: [{
|
|
24197
|
+
type: Input
|
|
24198
|
+
}], action: [{
|
|
24199
|
+
type: Input
|
|
24200
|
+
}], value: [{
|
|
24201
|
+
type: Input
|
|
24202
|
+
}], clearOnSelection: [{
|
|
24203
|
+
type: Input
|
|
24204
|
+
}], autoFocus: [{
|
|
24205
|
+
type: Input
|
|
24206
|
+
}], itemSelected: [{
|
|
24207
|
+
type: Output
|
|
24208
|
+
}], inputSubmitted: [{
|
|
24209
|
+
type: Output
|
|
24210
|
+
}], inputCleared: [{
|
|
24211
|
+
type: Output
|
|
24212
|
+
}], triggerRef: [{
|
|
24213
|
+
type: ViewChild,
|
|
24214
|
+
args: [MatAutocompleteTrigger]
|
|
24215
|
+
}], autocomplete: [{
|
|
24216
|
+
type: ViewChild,
|
|
24217
|
+
args: [MatAutocomplete]
|
|
24218
|
+
}], inputRef: [{
|
|
24219
|
+
type: ViewChild,
|
|
24220
|
+
args: ['searchInput']
|
|
24221
|
+
}], displayWithFn: [{
|
|
24222
|
+
type: Input
|
|
24223
|
+
}] } });
|
|
24224
|
+
|
|
23814
24225
|
class ButtonComponent {
|
|
23815
24226
|
constructor() {
|
|
23816
24227
|
this.btnClass = 'gn-ui-btn-default';
|
|
@@ -23862,16 +24273,237 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23862
24273
|
type: Output
|
|
23863
24274
|
}] } });
|
|
23864
24275
|
|
|
23865
|
-
|
|
23866
|
-
class DropdownSelectorComponent {
|
|
24276
|
+
class CheckToggleComponent {
|
|
23867
24277
|
constructor() {
|
|
23868
|
-
this.
|
|
23869
|
-
this.
|
|
23870
|
-
|
|
23871
|
-
|
|
23872
|
-
this.
|
|
23873
|
-
|
|
23874
|
-
|
|
24278
|
+
this.color = 'primary';
|
|
24279
|
+
this.toggled = new EventEmitter();
|
|
24280
|
+
}
|
|
24281
|
+
toggle(event) {
|
|
24282
|
+
this.toggled.emit(event);
|
|
24283
|
+
}
|
|
24284
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24285
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CheckToggleComponent, selector: "gn-ui-check-toggle", inputs: { title: "title", label: "label", value: "value", color: "color" }, outputs: { toggled: "toggled" }, ngImport: i0, template: "<label class=\"inline-flex relative items-start cursor-pointer\" [title]=\"title\">\n <span class=\"shrink-0\">\n <input\n type=\"checkbox\"\n class=\"sr-only peer\"\n [ngModel]=\"value\"\n (ngModelChange)=\"toggle($event)\"\n />\n <div\n class=\"w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-2 rounded-full peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all\"\n [class]=\"\n color === 'secondary'\n ? 'peer-focus:ring-secondary-lighter peer-checked:bg-secondary'\n : 'peer-focus:ring-primary-lighter peer-checked:bg-primary'\n \"\n ></div>\n </span>\n <span class=\"ml-3 mt-[2px] text-sm font-medium\">{{ label }}</span>\n</label>\n", styles: [""], dependencies: [{ kind: "directive", type: i2$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24286
|
+
}
|
|
24287
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckToggleComponent, decorators: [{
|
|
24288
|
+
type: Component,
|
|
24289
|
+
args: [{ selector: 'gn-ui-check-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: "<label class=\"inline-flex relative items-start cursor-pointer\" [title]=\"title\">\n <span class=\"shrink-0\">\n <input\n type=\"checkbox\"\n class=\"sr-only peer\"\n [ngModel]=\"value\"\n (ngModelChange)=\"toggle($event)\"\n />\n <div\n class=\"w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-2 rounded-full peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all\"\n [class]=\"\n color === 'secondary'\n ? 'peer-focus:ring-secondary-lighter peer-checked:bg-secondary'\n : 'peer-focus:ring-primary-lighter peer-checked:bg-primary'\n \"\n ></div>\n </span>\n <span class=\"ml-3 mt-[2px] text-sm font-medium\">{{ label }}</span>\n</label>\n" }]
|
|
24290
|
+
}], propDecorators: { title: [{
|
|
24291
|
+
type: Input
|
|
24292
|
+
}], label: [{
|
|
24293
|
+
type: Input
|
|
24294
|
+
}], value: [{
|
|
24295
|
+
type: Input
|
|
24296
|
+
}], color: [{
|
|
24297
|
+
type: Input
|
|
24298
|
+
}], toggled: [{
|
|
24299
|
+
type: Output
|
|
24300
|
+
}] } });
|
|
24301
|
+
|
|
24302
|
+
class CheckboxComponent {
|
|
24303
|
+
constructor() {
|
|
24304
|
+
this.type = 'default';
|
|
24305
|
+
this.checked = false;
|
|
24306
|
+
this.indeterminate = false;
|
|
24307
|
+
this.changed = new EventEmitter();
|
|
24308
|
+
}
|
|
24309
|
+
get classList() {
|
|
24310
|
+
return `${this.type}`;
|
|
24311
|
+
}
|
|
24312
|
+
handleClick(event) {
|
|
24313
|
+
event.stopPropagation();
|
|
24314
|
+
this.checked = !this.checked;
|
|
24315
|
+
this.changed.emit(this.checked);
|
|
24316
|
+
}
|
|
24317
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24318
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: { type: "type", checked: "checked", indeterminate: "indeterminate" }, outputs: { changed: "changed" }, ngImport: i0, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n (click)=\"handleClick($event)\"\n></mat-checkbox>\n", styles: [".default{--gn-ui-checkbox-color: var(--color-main)}.secondary{--gn-ui-checkbox-color: var(--color-secondary)}.primary{--gn-ui-checkbox-color: var(--color-primary)}mat-checkbox{--mdc-checkbox-selected-focus-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-focus-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-state-layer-color: var( --gn-ui-checkbox-color )}\n"], dependencies: [{ kind: "component", type: i1$4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24319
|
+
}
|
|
24320
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, decorators: [{
|
|
24321
|
+
type: Component,
|
|
24322
|
+
args: [{ selector: 'gn-ui-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n (click)=\"handleClick($event)\"\n></mat-checkbox>\n", styles: [".default{--gn-ui-checkbox-color: var(--color-main)}.secondary{--gn-ui-checkbox-color: var(--color-secondary)}.primary{--gn-ui-checkbox-color: var(--color-primary)}mat-checkbox{--mdc-checkbox-selected-focus-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-focus-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-state-layer-color: var( --gn-ui-checkbox-color )}\n"] }]
|
|
24323
|
+
}], propDecorators: { type: [{
|
|
24324
|
+
type: Input
|
|
24325
|
+
}], checked: [{
|
|
24326
|
+
type: Input
|
|
24327
|
+
}], indeterminate: [{
|
|
24328
|
+
type: Input
|
|
24329
|
+
}], changed: [{
|
|
24330
|
+
type: Output
|
|
24331
|
+
}] } });
|
|
24332
|
+
|
|
24333
|
+
class ChipsInputComponent {
|
|
24334
|
+
onChange(event) {
|
|
24335
|
+
this.rawChange.next(event);
|
|
24336
|
+
}
|
|
24337
|
+
constructor(http, translate) {
|
|
24338
|
+
this.http = http;
|
|
24339
|
+
this.translate = translate;
|
|
24340
|
+
this.required = false;
|
|
24341
|
+
this.loadOnce = false;
|
|
24342
|
+
this.autocompleteItems = [];
|
|
24343
|
+
this.invalid = false;
|
|
24344
|
+
this.items = [];
|
|
24345
|
+
this.requestAutocompleteItems = (text) => {
|
|
24346
|
+
if (this.url) {
|
|
24347
|
+
if (this.loadOnce && this.loadedItems) {
|
|
24348
|
+
return this.loadedItems;
|
|
24349
|
+
}
|
|
24350
|
+
const url = this.url(text);
|
|
24351
|
+
const lang = LANG_2_TO_3_MAPPER[this.translate.currentLang.slice(0, 2)];
|
|
24352
|
+
return this.http
|
|
24353
|
+
.get(url.replace('${lang}', lang))
|
|
24354
|
+
.pipe(map$1((item) => item.map((i) => i.values[lang])));
|
|
24355
|
+
}
|
|
24356
|
+
else {
|
|
24357
|
+
return of(this.autocompleteItems || []);
|
|
24358
|
+
}
|
|
24359
|
+
};
|
|
24360
|
+
this.rawChange = new Subject();
|
|
24361
|
+
this.itemsChange = this.rawChange.pipe(distinctUntilChanged());
|
|
24362
|
+
this.subscription = new Subscription();
|
|
24363
|
+
}
|
|
24364
|
+
ngOnInit() {
|
|
24365
|
+
if (this.loadOnce) {
|
|
24366
|
+
this.loadedItems = this.requestAutocompleteItems('*').pipe(shareReplay(1));
|
|
24367
|
+
}
|
|
24368
|
+
this.items = this.selectedItems;
|
|
24369
|
+
this.subscription = this.rawChange
|
|
24370
|
+
.pipe(tap$1((v) => (this.invalid = v.length === 0)))
|
|
24371
|
+
.subscribe();
|
|
24372
|
+
this.rawChange.next(this.items);
|
|
24373
|
+
}
|
|
24374
|
+
ngOnDestroy() {
|
|
24375
|
+
this.subscription.unsubscribe();
|
|
24376
|
+
}
|
|
24377
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ChipsInputComponent, deps: [{ token: i1.HttpClient }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24378
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ChipsInputComponent, selector: "gn-ui-chips-input", inputs: { url: "url", placeholder: "placeholder", selectedItems: "selectedItems", required: "required", loadOnce: "loadOnce", autocompleteItems: "autocompleteItems" }, outputs: { itemsChange: "itemsChange" }, ngImport: i0, template: "<tag-input\n [ngModel]=\"items\"\n (ngModelChange)=\"onChange($event)\"\n onlyFromAutocomplete=\"true\"\n [placeholder]=\"placeholder\"\n [secondaryPlaceholder]=\"placeholder\"\n [ripple]=\"false\"\n [animationDuration]=\"{ enter: '0ms', leave: '0ms' }\"\n [onTextChangeDebounce]=\"100\"\n class=\"border-2 border-primary h-full rounded-lg p-2 bg-white text-sm focus:border-primary\"\n [ngClass]=\"{ invalid: invalid }\"\n>\n <tag-input-dropdown\n [autocompleteObservable]=\"requestAutocompleteItems\"\n [minimumTextLength]=\"0\"\n [keepOpen]=\"false\"\n [showDropdownIfEmpty]=\"true\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n {{ item.display }}\n </ng-template>\n </tag-input-dropdown>\n</tag-input>\n", styles: ["tag-input::ng-deep .ng2-tag-input{border-bottom:none}tag-input::ng-deep .ng2-tag-input.ng2-tag-input--focused{border-bottom:none}tag-input::ng-deep tag{border-radius:5px;background:var(--color-primary-lightest);font-family:inherit;align-content:center;font-style:italic}tag-input::ng-deep tag::ng-deep:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,tag-input::ng-deep tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:var(--color-primary)!important}tag-input::ng-deep .tag__text{padding-right:7px}tag-input::ng-deep div,tag-input::ng-deep form{height:100%}tag-input.invalid{border-color:var(--color-secondary)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5$1.TagInputComponent, selector: "tag-input", inputs: ["separatorKeys", "separatorKeyCodes", "placeholder", "secondaryPlaceholder", "maxItems", "validators", "asyncValidators", "onlyFromAutocomplete", "errorMessages", "theme", "onTextChangeDebounce", "inputId", "inputClass", "clearOnBlur", "hideForm", "addOnBlur", "addOnPaste", "pasteSplitPattern", "blinkIfDupe", "removable", "editable", "allowDupes", "modelAsStrings", "trimTags", "inputText", "ripple", "tabindex", "disable", "dragZone", "onRemoving", "onAdding", "animationDuration"], outputs: ["onAdd", "onRemove", "onSelect", "onFocus", "onBlur", "onTextChange", "onPaste", "onValidationError", "onTagEdited", "inputTextChange"] }, { kind: "component", type: i5$1.TagInputDropdown, selector: "tag-input-dropdown", inputs: ["offset", "focusFirstElement", "showDropdownIfEmpty", "autocompleteObservable", "minimumTextLength", "limitItemsTo", "displayBy", "identifyBy", "matchingFn", "appendToBody", "keepOpen", "dynamicUpdate", "zIndex", "autocompleteItems"] }] }); }
|
|
24379
|
+
}
|
|
24380
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ChipsInputComponent, decorators: [{
|
|
24381
|
+
type: Component,
|
|
24382
|
+
args: [{ selector: 'gn-ui-chips-input', template: "<tag-input\n [ngModel]=\"items\"\n (ngModelChange)=\"onChange($event)\"\n onlyFromAutocomplete=\"true\"\n [placeholder]=\"placeholder\"\n [secondaryPlaceholder]=\"placeholder\"\n [ripple]=\"false\"\n [animationDuration]=\"{ enter: '0ms', leave: '0ms' }\"\n [onTextChangeDebounce]=\"100\"\n class=\"border-2 border-primary h-full rounded-lg p-2 bg-white text-sm focus:border-primary\"\n [ngClass]=\"{ invalid: invalid }\"\n>\n <tag-input-dropdown\n [autocompleteObservable]=\"requestAutocompleteItems\"\n [minimumTextLength]=\"0\"\n [keepOpen]=\"false\"\n [showDropdownIfEmpty]=\"true\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n {{ item.display }}\n </ng-template>\n </tag-input-dropdown>\n</tag-input>\n", styles: ["tag-input::ng-deep .ng2-tag-input{border-bottom:none}tag-input::ng-deep .ng2-tag-input.ng2-tag-input--focused{border-bottom:none}tag-input::ng-deep tag{border-radius:5px;background:var(--color-primary-lightest);font-family:inherit;align-content:center;font-style:italic}tag-input::ng-deep tag::ng-deep:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,tag-input::ng-deep tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:var(--color-primary)!important}tag-input::ng-deep .tag__text{padding-right:7px}tag-input::ng-deep div,tag-input::ng-deep form{height:100%}tag-input.invalid{border-color:var(--color-secondary)}\n"] }]
|
|
24383
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i1$1.TranslateService }]; }, propDecorators: { url: [{
|
|
24384
|
+
type: Input
|
|
24385
|
+
}], placeholder: [{
|
|
24386
|
+
type: Input
|
|
24387
|
+
}], selectedItems: [{
|
|
24388
|
+
type: Input
|
|
24389
|
+
}], required: [{
|
|
24390
|
+
type: Input
|
|
24391
|
+
}], loadOnce: [{
|
|
24392
|
+
type: Input
|
|
24393
|
+
}], autocompleteItems: [{
|
|
24394
|
+
type: Input
|
|
24395
|
+
}], itemsChange: [{
|
|
24396
|
+
type: Output
|
|
24397
|
+
}] } });
|
|
24398
|
+
|
|
24399
|
+
class CopyTextButtonComponent {
|
|
24400
|
+
constructor() {
|
|
24401
|
+
this.displayText = true;
|
|
24402
|
+
this.rows = 1;
|
|
24403
|
+
}
|
|
24404
|
+
copyText(event) {
|
|
24405
|
+
navigator.clipboard.writeText(this.text);
|
|
24406
|
+
event.target.blur();
|
|
24407
|
+
}
|
|
24408
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24409
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: { text: "text", tooltipText: "tooltipText", displayText: "displayText", rows: "rows" }, ngImport: i0, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24410
|
+
}
|
|
24411
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
|
|
24412
|
+
type: Component,
|
|
24413
|
+
args: [{ selector: 'gn-ui-copy-text-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n" }]
|
|
24414
|
+
}], propDecorators: { text: [{
|
|
24415
|
+
type: Input
|
|
24416
|
+
}], tooltipText: [{
|
|
24417
|
+
type: Input
|
|
24418
|
+
}], displayText: [{
|
|
24419
|
+
type: Input
|
|
24420
|
+
}], rows: [{
|
|
24421
|
+
type: Input
|
|
24422
|
+
}] } });
|
|
24423
|
+
|
|
24424
|
+
class DatePickerComponent {
|
|
24425
|
+
constructor() {
|
|
24426
|
+
this.dateChange = new EventEmitter();
|
|
24427
|
+
}
|
|
24428
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24429
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DatePickerComponent, isStandalone: true, selector: "gn-ui-date-picker", inputs: { date: "date" }, outputs: { dateChange: "dateChange" }, ngImport: i0, template: "<div\n class=\"flex items-center justify-between pl-3 rounded-lg border border-gray-300 bg-white\"\n>\n <input\n [matDatepicker]=\"picker\"\n [value]=\"date\"\n (dateChange)=\"dateChange.emit($event.value)\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n</div>\n<mat-datepicker #picker></mat-datepicker>\n", styles: ["mat-datepicker-toggle{@apply text-primary;}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i2$3.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i2$3.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i2$3.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }] }); }
|
|
24430
|
+
}
|
|
24431
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DatePickerComponent, decorators: [{
|
|
24432
|
+
type: Component,
|
|
24433
|
+
args: [{ selector: 'gn-ui-date-picker', standalone: true, imports: [MatIconModule, MatNativeDateModule, MatDatepickerModule], template: "<div\n class=\"flex items-center justify-between pl-3 rounded-lg border border-gray-300 bg-white\"\n>\n <input\n [matDatepicker]=\"picker\"\n [value]=\"date\"\n (dateChange)=\"dateChange.emit($event.value)\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n</div>\n<mat-datepicker #picker></mat-datepicker>\n", styles: ["mat-datepicker-toggle{@apply text-primary;}\n"] }]
|
|
24434
|
+
}], propDecorators: { date: [{
|
|
24435
|
+
type: Input
|
|
24436
|
+
}], dateChange: [{
|
|
24437
|
+
type: Output
|
|
24438
|
+
}] } });
|
|
24439
|
+
|
|
24440
|
+
class DateRangePickerComponent {
|
|
24441
|
+
startDateSelected(event) {
|
|
24442
|
+
this.startDate = event.value;
|
|
24443
|
+
}
|
|
24444
|
+
endDateSelected(event) {
|
|
24445
|
+
this.endDate = event.value;
|
|
24446
|
+
}
|
|
24447
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24448
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DateRangePickerComponent, isStandalone: true, selector: "gn-ui-date-range-picker", ngImport: i0, template: "<div\n class=\"flex items-center justify-center w-64 h-11 rounded-lg border border-gray-300 bg-white\"\n>\n <div class=\"w-48 flex justify-between\">\n <mat-date-range-input [rangePicker]=\"picker\" class=\"w-full\">\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matStartDate\n placeholder=\"Start date\"\n (dateInput)=\"startDateSelected($event)\"\n />\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matEndDate\n placeholder=\"End date\"\n (dateInput)=\"endDateSelected($event)\"\n />\n </mat-date-range-input>\n </div>\n <mat-datepicker-toggle matSuffix [for]=\"picker\">\n <mat-icon>calendar_today</mat-icon>\n </mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n</div>\n", styles: ["mat-datepicker-toggle{@apply text-primary;}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i2$3.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i2$3.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i2$3.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i2$3.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i2$3.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }] }); }
|
|
24449
|
+
}
|
|
24450
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DateRangePickerComponent, decorators: [{
|
|
24451
|
+
type: Component,
|
|
24452
|
+
args: [{ selector: 'gn-ui-date-range-picker', standalone: true, imports: [MatIconModule, MatNativeDateModule, MatDatepickerModule], template: "<div\n class=\"flex items-center justify-center w-64 h-11 rounded-lg border border-gray-300 bg-white\"\n>\n <div class=\"w-48 flex justify-between\">\n <mat-date-range-input [rangePicker]=\"picker\" class=\"w-full\">\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matStartDate\n placeholder=\"Start date\"\n (dateInput)=\"startDateSelected($event)\"\n />\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matEndDate\n placeholder=\"End date\"\n (dateInput)=\"endDateSelected($event)\"\n />\n </mat-date-range-input>\n </div>\n <mat-datepicker-toggle matSuffix [for]=\"picker\">\n <mat-icon>calendar_today</mat-icon>\n </mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n</div>\n", styles: ["mat-datepicker-toggle{@apply text-primary;}\n"] }]
|
|
24453
|
+
}] });
|
|
24454
|
+
|
|
24455
|
+
const placeholder = 'dropFile';
|
|
24456
|
+
marker('dropFile');
|
|
24457
|
+
class DragAndDropFileInputComponent {
|
|
24458
|
+
constructor() {
|
|
24459
|
+
this.placeholder = placeholder;
|
|
24460
|
+
this.accept = '*';
|
|
24461
|
+
this.fileChange = new EventEmitter();
|
|
24462
|
+
this.selectedFile = null;
|
|
24463
|
+
}
|
|
24464
|
+
get fileName() {
|
|
24465
|
+
return this.selectedFile && this.selectedFile.name;
|
|
24466
|
+
}
|
|
24467
|
+
selectFile(event) {
|
|
24468
|
+
this.selectedFile = event.addedFiles[0];
|
|
24469
|
+
this.fileChange.emit(this.selectedFile);
|
|
24470
|
+
}
|
|
24471
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DragAndDropFileInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24472
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DragAndDropFileInputComponent, selector: "gn-ui-drag-and-drop-file-input", inputs: { placeholder: "placeholder", accept: "accept" }, outputs: { fileChange: "fileChange" }, ngImport: i0, template: "<div class=\"flex h-full\">\n <ngx-dropzone\n class=\"flex-1\"\n multiple=\"false\"\n (change)=\"selectFile($event)\"\n [accept]=\"accept\"\n >\n <div *ngIf=\"!fileName\" class=\"text-gray-900 pl-2 py-2\" translate=\"\">\n {{ placeholder }}\n </div>\n\n <div *ngIf=\"fileName\" class=\"text-gray-900 pl-2 py-2\">{{ fileName }}</div>\n </ngx-dropzone>\n</div>\n", styles: ["ngx-dropzone{height:auto;border:none}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3.NgxDropzoneComponent, selector: "ngx-dropzone, [ngx-dropzone]", inputs: ["accept", "disabled", "multiple", "maxFileSize", "expandable", "disableClick", "processDirectoryDrop", "id", "aria-label", "aria-labelledby", "aria-describedby"], outputs: ["change"] }] }); }
|
|
24473
|
+
}
|
|
24474
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DragAndDropFileInputComponent, decorators: [{
|
|
24475
|
+
type: Component,
|
|
24476
|
+
args: [{ selector: 'gn-ui-drag-and-drop-file-input', template: "<div class=\"flex h-full\">\n <ngx-dropzone\n class=\"flex-1\"\n multiple=\"false\"\n (change)=\"selectFile($event)\"\n [accept]=\"accept\"\n >\n <div *ngIf=\"!fileName\" class=\"text-gray-900 pl-2 py-2\" translate=\"\">\n {{ placeholder }}\n </div>\n\n <div *ngIf=\"fileName\" class=\"text-gray-900 pl-2 py-2\">{{ fileName }}</div>\n </ngx-dropzone>\n</div>\n", styles: ["ngx-dropzone{height:auto;border:none}\n"] }]
|
|
24477
|
+
}], propDecorators: { placeholder: [{
|
|
24478
|
+
type: Input
|
|
24479
|
+
}], accept: [{
|
|
24480
|
+
type: Input
|
|
24481
|
+
}], fileChange: [{
|
|
24482
|
+
type: Output
|
|
24483
|
+
}] } });
|
|
24484
|
+
|
|
24485
|
+
class DropdownMultiselectComponent {
|
|
24486
|
+
get hasSelectedChoices() {
|
|
24487
|
+
return this.selected.length > 0;
|
|
24488
|
+
}
|
|
24489
|
+
get selectedChoices() {
|
|
24490
|
+
return this.choices.filter((choice) => this.selected.indexOf(choice.value) > -1);
|
|
24491
|
+
}
|
|
24492
|
+
get filteredChoicesByText() {
|
|
24493
|
+
if (!this.searchInputValue)
|
|
24494
|
+
return this.choices;
|
|
24495
|
+
const filter = createFuzzyFilter(this.searchInputValue);
|
|
24496
|
+
return this.choices.filter((choice) => filter(choice.label));
|
|
24497
|
+
}
|
|
24498
|
+
get focusedIndex() {
|
|
24499
|
+
return this.checkboxes.reduce((prev, curr, curIndex) => curr.nativeElement === document.activeElement ? curIndex : prev, -1);
|
|
24500
|
+
}
|
|
24501
|
+
constructor(scrollStrategies) {
|
|
24502
|
+
this.scrollStrategies = scrollStrategies;
|
|
24503
|
+
this.selected = [];
|
|
24504
|
+
this.allowSearch = true;
|
|
24505
|
+
this.searchInputValue = '';
|
|
24506
|
+
this.selectValues = new EventEmitter();
|
|
23875
24507
|
this.overlayPositions = [
|
|
23876
24508
|
{
|
|
23877
24509
|
originX: 'start',
|
|
@@ -23888,31 +24520,16 @@ class DropdownSelectorComponent {
|
|
|
23888
24520
|
offsetY: -8,
|
|
23889
24521
|
},
|
|
23890
24522
|
];
|
|
24523
|
+
this.scrollStrategy = this.scrollStrategies.reposition();
|
|
24524
|
+
this.overlayOpen = false;
|
|
24525
|
+
this.overlayWidth = 'auto';
|
|
24526
|
+
this.overlayMaxHeight = 'none';
|
|
24527
|
+
this.id = `dropdown-multiselect-${Math.floor(Math.random() * 10000)}`;
|
|
23891
24528
|
}
|
|
23892
|
-
|
|
23893
|
-
|
|
23894
|
-
this.
|
|
23895
|
-
|
|
23896
|
-
get id() {
|
|
23897
|
-
return this.title.toLowerCase().replace(/[^a-z]+/g, '-');
|
|
23898
|
-
}
|
|
23899
|
-
getChoiceLabel() {
|
|
23900
|
-
return this.selectedChoice?.label;
|
|
23901
|
-
}
|
|
23902
|
-
ngOnInit() {
|
|
23903
|
-
if (!this.maxRows)
|
|
23904
|
-
this.maxRows = DEFAULT_ROW_NUMBERS;
|
|
23905
|
-
if (!this.choices || this.choices.length === 0) {
|
|
23906
|
-
this.choices = [];
|
|
23907
|
-
}
|
|
23908
|
-
}
|
|
23909
|
-
isSelected(choice) {
|
|
23910
|
-
return choice === this.selectedChoice;
|
|
23911
|
-
}
|
|
23912
|
-
onSelectValue(choice) {
|
|
23913
|
-
this.closeOverlay();
|
|
23914
|
-
this.selected = choice.value;
|
|
23915
|
-
this.selectValue.emit(this.selected);
|
|
24529
|
+
setFocus() {
|
|
24530
|
+
setTimeout(() => {
|
|
24531
|
+
this.searchFieldInput.nativeElement.focus();
|
|
24532
|
+
}, 0);
|
|
23916
24533
|
}
|
|
23917
24534
|
openOverlay() {
|
|
23918
24535
|
this.overlayWidth =
|
|
@@ -23922,20 +24539,16 @@ class DropdownSelectorComponent {
|
|
|
23922
24539
|
? `${this.maxRows * 29 + 60}px`
|
|
23923
24540
|
: 'none';
|
|
23924
24541
|
this.overlayOpen = true;
|
|
24542
|
+
this.setFocus();
|
|
24543
|
+
// this will wait for the checkboxes to be referenced and the overlay to be attached
|
|
23925
24544
|
return Promise.all([
|
|
23926
|
-
|
|
23927
|
-
|
|
24545
|
+
this.overlay.attach.pipe(take(1)).toPromise(),
|
|
24546
|
+
this.checkboxes.changes.pipe(take(1)).toPromise(),
|
|
23928
24547
|
]);
|
|
23929
24548
|
}
|
|
23930
24549
|
closeOverlay() {
|
|
23931
24550
|
this.overlayOpen = false;
|
|
23932
24551
|
}
|
|
23933
|
-
focusFirstItem() {
|
|
23934
|
-
this.choiceInputs.get(0).nativeElement.focus();
|
|
23935
|
-
}
|
|
23936
|
-
focusLastItem() {
|
|
23937
|
-
this.choiceInputs.get(this.choiceInputs.length - 1).nativeElement.focus();
|
|
23938
|
-
}
|
|
23939
24552
|
async handleTriggerKeydown(event) {
|
|
23940
24553
|
const keyCode = event.code;
|
|
23941
24554
|
const isOpenKey = keyCode === 'ArrowDown' ||
|
|
@@ -23944,12 +24557,10 @@ class DropdownSelectorComponent {
|
|
|
23944
24557
|
keyCode === 'ArrowRight' ||
|
|
23945
24558
|
keyCode === 'Enter' ||
|
|
23946
24559
|
keyCode === 'Space';
|
|
23947
|
-
const isCloseKey = keyCode === 'Escape';
|
|
23948
|
-
if (isOpenKey) {
|
|
24560
|
+
const isCloseKey = keyCode === 'Escape' || isOpenKey;
|
|
24561
|
+
if (!this.overlayOpen && isOpenKey) {
|
|
23949
24562
|
event.preventDefault();
|
|
23950
|
-
|
|
23951
|
-
await this.openOverlay();
|
|
23952
|
-
}
|
|
24563
|
+
await this.openOverlay();
|
|
23953
24564
|
if (keyCode === 'ArrowLeft' || keyCode === 'ArrowUp')
|
|
23954
24565
|
this.focusLastItem();
|
|
23955
24566
|
else
|
|
@@ -23966,7 +24577,11 @@ class DropdownSelectorComponent {
|
|
|
23966
24577
|
const keyCode = event.code;
|
|
23967
24578
|
if (keyCode === 'ArrowDown' || keyCode === 'ArrowRight') {
|
|
23968
24579
|
event.preventDefault();
|
|
23969
|
-
|
|
24580
|
+
if (document.activeElement['type'] !== 'checkbox') {
|
|
24581
|
+
this.focusFirstItem();
|
|
24582
|
+
}
|
|
24583
|
+
else
|
|
24584
|
+
this.shiftItemFocus(1);
|
|
23970
24585
|
}
|
|
23971
24586
|
else if (keyCode === 'ArrowLeft' || keyCode === 'ArrowUp') {
|
|
23972
24587
|
event.preventDefault();
|
|
@@ -23976,47 +24591,61 @@ class DropdownSelectorComponent {
|
|
|
23976
24591
|
this.closeOverlay();
|
|
23977
24592
|
}
|
|
23978
24593
|
}
|
|
23979
|
-
|
|
23980
|
-
|
|
23981
|
-
|
|
24594
|
+
focusFirstItem() {
|
|
24595
|
+
this.checkboxes.get(0).nativeElement.focus();
|
|
24596
|
+
}
|
|
24597
|
+
focusLastItem() {
|
|
24598
|
+
this.checkboxes.get(this.checkboxes.length - 1).nativeElement.focus();
|
|
24599
|
+
}
|
|
24600
|
+
shiftItemFocus(shift) {
|
|
24601
|
+
const index = this.focusedIndex;
|
|
24602
|
+
if (index === -1)
|
|
23982
24603
|
return;
|
|
23983
|
-
const max = this.
|
|
24604
|
+
const max = this.checkboxes.length;
|
|
23984
24605
|
// modulo, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder
|
|
23985
24606
|
const newIndex = (((index + shift) % max) + max) % max;
|
|
23986
|
-
this.
|
|
24607
|
+
this.checkboxes.get(newIndex).nativeElement.focus();
|
|
23987
24608
|
}
|
|
23988
|
-
|
|
23989
|
-
return this.
|
|
24609
|
+
isSelected(choice) {
|
|
24610
|
+
return this.selected.indexOf(choice.value) > -1;
|
|
23990
24611
|
}
|
|
23991
|
-
|
|
23992
|
-
|
|
23993
|
-
|
|
23994
|
-
this.
|
|
23995
|
-
|
|
24612
|
+
select(choice, selected) {
|
|
24613
|
+
this.selected = selected
|
|
24614
|
+
? [...this.selected.filter((v) => v !== choice.value), choice.value]
|
|
24615
|
+
: this.selected.filter((v) => v !== choice.value);
|
|
24616
|
+
this.selectValues.emit(this.selected);
|
|
23996
24617
|
}
|
|
23997
|
-
|
|
23998
|
-
|
|
24618
|
+
toggle(choice) {
|
|
24619
|
+
this.select(choice, !this.isSelected(choice));
|
|
24620
|
+
}
|
|
24621
|
+
clearSelection(event) {
|
|
24622
|
+
this.selectValues.emit([]);
|
|
24623
|
+
propagateToDocumentOnly(event);
|
|
24624
|
+
}
|
|
24625
|
+
clearSearchInputValue(event) {
|
|
24626
|
+
this.searchInputValue = '';
|
|
24627
|
+
propagateToDocumentOnly(event);
|
|
24628
|
+
this.setFocus();
|
|
24629
|
+
}
|
|
24630
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, deps: [{ token: i1$5.ScrollStrategyOptions }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24631
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"bg-background w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$5.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$5.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23999
24632
|
}
|
|
24000
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24633
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, decorators: [{
|
|
24001
24634
|
type: Component,
|
|
24002
|
-
args: [{ selector: 'gn-ui-dropdown-
|
|
24003
|
-
}], propDecorators: { title: [{
|
|
24004
|
-
type: Input
|
|
24005
|
-
}], showTitle: [{
|
|
24006
|
-
type: Input
|
|
24007
|
-
}], ariaName: [{
|
|
24635
|
+
args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"bg-background w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n" }]
|
|
24636
|
+
}], ctorParameters: function () { return [{ type: i1$5.ScrollStrategyOptions }]; }, propDecorators: { title: [{
|
|
24008
24637
|
type: Input
|
|
24009
24638
|
}], choices: [{
|
|
24010
24639
|
type: Input
|
|
24011
24640
|
}], selected: [{
|
|
24012
24641
|
type: Input
|
|
24013
|
-
}],
|
|
24642
|
+
}], allowSearch: [{
|
|
24014
24643
|
type: Input
|
|
24015
|
-
}],
|
|
24644
|
+
}], maxRows: [{
|
|
24016
24645
|
type: Input
|
|
24017
|
-
}],
|
|
24646
|
+
}], searchInputValue: [{
|
|
24018
24647
|
type: Input
|
|
24019
|
-
}],
|
|
24648
|
+
}], selectValues: [{
|
|
24020
24649
|
type: Output
|
|
24021
24650
|
}], overlayOrigin: [{
|
|
24022
24651
|
type: ViewChild,
|
|
@@ -24024,33 +24653,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24024
24653
|
}], overlay: [{
|
|
24025
24654
|
type: ViewChild,
|
|
24026
24655
|
args: [CdkConnectedOverlay]
|
|
24027
|
-
}],
|
|
24656
|
+
}], overlayContainer: [{
|
|
24657
|
+
type: ViewChild,
|
|
24658
|
+
args: ['overlayContainer', { read: ElementRef }]
|
|
24659
|
+
}], searchFieldInput: [{
|
|
24660
|
+
type: ViewChild,
|
|
24661
|
+
args: ['searchFieldInput']
|
|
24662
|
+
}], checkboxes: [{
|
|
24028
24663
|
type: ViewChildren,
|
|
24029
|
-
args: ['
|
|
24664
|
+
args: ['checkBox', { read: ElementRef }]
|
|
24030
24665
|
}] } });
|
|
24031
24666
|
|
|
24032
|
-
|
|
24033
|
-
|
|
24034
|
-
|
|
24035
|
-
|
|
24036
|
-
|
|
24037
|
-
|
|
24038
|
-
|
|
24039
|
-
|
|
24040
|
-
|
|
24041
|
-
|
|
24042
|
-
const filter = createFuzzyFilter(this.searchInputValue);
|
|
24043
|
-
return this.choices.filter((choice) => filter(choice.label));
|
|
24044
|
-
}
|
|
24045
|
-
get focusedIndex() {
|
|
24046
|
-
return this.checkboxes.reduce((prev, curr, curIndex) => curr.nativeElement === document.activeElement ? curIndex : prev, -1);
|
|
24047
|
-
}
|
|
24048
|
-
constructor(scrollStrategies) {
|
|
24049
|
-
this.scrollStrategies = scrollStrategies;
|
|
24050
|
-
this.selected = [];
|
|
24051
|
-
this.allowSearch = true;
|
|
24052
|
-
this.searchInputValue = '';
|
|
24053
|
-
this.selectValues = new EventEmitter();
|
|
24667
|
+
const DEFAULT_ROW_NUMBERS = 6;
|
|
24668
|
+
class DropdownSelectorComponent {
|
|
24669
|
+
constructor() {
|
|
24670
|
+
this.showTitle = true;
|
|
24671
|
+
this.extraBtnClass = '';
|
|
24672
|
+
this.minWidth = '';
|
|
24673
|
+
this.selectValue = new EventEmitter();
|
|
24674
|
+
this.overlayOpen = false;
|
|
24675
|
+
this.overlayWidth = 'auto';
|
|
24676
|
+
this.overlayMaxHeight = 'none';
|
|
24054
24677
|
this.overlayPositions = [
|
|
24055
24678
|
{
|
|
24056
24679
|
originX: 'start',
|
|
@@ -24067,16 +24690,31 @@ class DropdownMultiselectComponent {
|
|
|
24067
24690
|
offsetY: -8,
|
|
24068
24691
|
},
|
|
24069
24692
|
];
|
|
24070
|
-
this.scrollStrategy = this.scrollStrategies.reposition();
|
|
24071
|
-
this.overlayOpen = false;
|
|
24072
|
-
this.overlayWidth = 'auto';
|
|
24073
|
-
this.overlayMaxHeight = 'none';
|
|
24074
|
-
this.id = `dropdown-multiselect-${Math.floor(Math.random() * 10000)}`;
|
|
24075
24693
|
}
|
|
24076
|
-
|
|
24077
|
-
|
|
24078
|
-
this.
|
|
24079
|
-
|
|
24694
|
+
get selectedChoice() {
|
|
24695
|
+
return (this.choices.find((choice) => choice.value === this.selected) ??
|
|
24696
|
+
this.choices[0]);
|
|
24697
|
+
}
|
|
24698
|
+
get id() {
|
|
24699
|
+
return this.title.toLowerCase().replace(/[^a-z]+/g, '-');
|
|
24700
|
+
}
|
|
24701
|
+
getChoiceLabel() {
|
|
24702
|
+
return this.selectedChoice?.label;
|
|
24703
|
+
}
|
|
24704
|
+
ngOnInit() {
|
|
24705
|
+
if (!this.maxRows)
|
|
24706
|
+
this.maxRows = DEFAULT_ROW_NUMBERS;
|
|
24707
|
+
if (!this.choices || this.choices.length === 0) {
|
|
24708
|
+
this.choices = [];
|
|
24709
|
+
}
|
|
24710
|
+
}
|
|
24711
|
+
isSelected(choice) {
|
|
24712
|
+
return choice === this.selectedChoice;
|
|
24713
|
+
}
|
|
24714
|
+
onSelectValue(choice) {
|
|
24715
|
+
this.closeOverlay();
|
|
24716
|
+
this.selected = choice.value;
|
|
24717
|
+
this.selectValue.emit(this.selected);
|
|
24080
24718
|
}
|
|
24081
24719
|
openOverlay() {
|
|
24082
24720
|
this.overlayWidth =
|
|
@@ -24086,16 +24724,20 @@ class DropdownMultiselectComponent {
|
|
|
24086
24724
|
? `${this.maxRows * 29 + 60}px`
|
|
24087
24725
|
: 'none';
|
|
24088
24726
|
this.overlayOpen = true;
|
|
24089
|
-
this.setFocus();
|
|
24090
|
-
// this will wait for the checkboxes to be referenced and the overlay to be attached
|
|
24091
24727
|
return Promise.all([
|
|
24092
|
-
this.overlay.attach
|
|
24093
|
-
this.
|
|
24728
|
+
firstValueFrom(this.overlay.attach),
|
|
24729
|
+
firstValueFrom(this.choiceInputs.changes),
|
|
24094
24730
|
]);
|
|
24095
24731
|
}
|
|
24096
24732
|
closeOverlay() {
|
|
24097
24733
|
this.overlayOpen = false;
|
|
24098
24734
|
}
|
|
24735
|
+
focusFirstItem() {
|
|
24736
|
+
this.choiceInputs.get(0).nativeElement.focus();
|
|
24737
|
+
}
|
|
24738
|
+
focusLastItem() {
|
|
24739
|
+
this.choiceInputs.get(this.choiceInputs.length - 1).nativeElement.focus();
|
|
24740
|
+
}
|
|
24099
24741
|
async handleTriggerKeydown(event) {
|
|
24100
24742
|
const keyCode = event.code;
|
|
24101
24743
|
const isOpenKey = keyCode === 'ArrowDown' ||
|
|
@@ -24104,10 +24746,12 @@ class DropdownMultiselectComponent {
|
|
|
24104
24746
|
keyCode === 'ArrowRight' ||
|
|
24105
24747
|
keyCode === 'Enter' ||
|
|
24106
24748
|
keyCode === 'Space';
|
|
24107
|
-
const isCloseKey = keyCode === 'Escape'
|
|
24108
|
-
if (
|
|
24749
|
+
const isCloseKey = keyCode === 'Escape';
|
|
24750
|
+
if (isOpenKey) {
|
|
24109
24751
|
event.preventDefault();
|
|
24110
|
-
|
|
24752
|
+
if (!this.overlayOpen) {
|
|
24753
|
+
await this.openOverlay();
|
|
24754
|
+
}
|
|
24111
24755
|
if (keyCode === 'ArrowLeft' || keyCode === 'ArrowUp')
|
|
24112
24756
|
this.focusLastItem();
|
|
24113
24757
|
else
|
|
@@ -24124,11 +24768,7 @@ class DropdownMultiselectComponent {
|
|
|
24124
24768
|
const keyCode = event.code;
|
|
24125
24769
|
if (keyCode === 'ArrowDown' || keyCode === 'ArrowRight') {
|
|
24126
24770
|
event.preventDefault();
|
|
24127
|
-
|
|
24128
|
-
this.focusFirstItem();
|
|
24129
|
-
}
|
|
24130
|
-
else
|
|
24131
|
-
this.shiftItemFocus(1);
|
|
24771
|
+
this.shiftItemFocus(1);
|
|
24132
24772
|
}
|
|
24133
24773
|
else if (keyCode === 'ArrowLeft' || keyCode === 'ArrowUp') {
|
|
24134
24774
|
event.preventDefault();
|
|
@@ -24138,61 +24778,53 @@ class DropdownMultiselectComponent {
|
|
|
24138
24778
|
this.closeOverlay();
|
|
24139
24779
|
}
|
|
24140
24780
|
}
|
|
24141
|
-
focusFirstItem() {
|
|
24142
|
-
this.checkboxes.get(0).nativeElement.focus();
|
|
24143
|
-
}
|
|
24144
|
-
focusLastItem() {
|
|
24145
|
-
this.checkboxes.get(this.checkboxes.length - 1).nativeElement.focus();
|
|
24146
|
-
}
|
|
24147
24781
|
shiftItemFocus(shift) {
|
|
24148
24782
|
const index = this.focusedIndex;
|
|
24149
24783
|
if (index === -1)
|
|
24150
24784
|
return;
|
|
24151
|
-
const max = this.
|
|
24785
|
+
const max = this.choiceInputs.length;
|
|
24152
24786
|
// modulo, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder
|
|
24153
24787
|
const newIndex = (((index + shift) % max) + max) % max;
|
|
24154
|
-
this.
|
|
24155
|
-
}
|
|
24156
|
-
isSelected(choice) {
|
|
24157
|
-
return this.selected.indexOf(choice.value) > -1;
|
|
24158
|
-
}
|
|
24159
|
-
select(choice, selected) {
|
|
24160
|
-
this.selected = selected
|
|
24161
|
-
? [...this.selected.filter((v) => v !== choice.value), choice.value]
|
|
24162
|
-
: this.selected.filter((v) => v !== choice.value);
|
|
24163
|
-
this.selectValues.emit(this.selected);
|
|
24164
|
-
}
|
|
24165
|
-
toggle(choice) {
|
|
24166
|
-
this.select(choice, !this.isSelected(choice));
|
|
24788
|
+
this.choiceInputs.get(newIndex).nativeElement.focus();
|
|
24167
24789
|
}
|
|
24168
|
-
|
|
24169
|
-
this.
|
|
24170
|
-
propagateToDocumentOnly(event);
|
|
24790
|
+
get focusedIndex() {
|
|
24791
|
+
return this.choiceInputs.reduce((prev, curr, curIndex) => curr.nativeElement === document.activeElement ? curIndex : prev, -1);
|
|
24171
24792
|
}
|
|
24172
|
-
|
|
24173
|
-
|
|
24174
|
-
|
|
24175
|
-
|
|
24793
|
+
selectIfEnter(event, choice) {
|
|
24794
|
+
if (event.code === 'Enter') {
|
|
24795
|
+
event.preventDefault();
|
|
24796
|
+
this.onSelectValue(choice);
|
|
24797
|
+
}
|
|
24176
24798
|
}
|
|
24177
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24178
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type:
|
|
24799
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24800
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownSelectorComponent, isStandalone: true, selector: "gn-ui-dropdown-selector", inputs: { title: "title", showTitle: "showTitle", ariaName: "ariaName", choices: "choices", selected: "selected", maxRows: "maxRows", extraBtnClass: "extraBtnClass", minWidth: "minWidth" }, outputs: { selectValue: "selectValue" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "choiceInputs", predicate: ["choiceInputs"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-col sm:flex-row sm:items-center relative w-full\">\n <span\n *ngIf=\"showTitle\"\n class=\"tracking-wide text-sm mb-2 sm:mb-0 sm:mr-2 whitespace-nowrap\"\n [attr.for]=\"id\"\n >\n {{ title }}\n </span>\n <gn-ui-button\n type=\"outline\"\n class=\"grow min-w-0\"\n extraClass=\"bg-background !p-[8px] !pl-[16px] flex flex-row w-full {{\n extraBtnClass\n }}\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <div class=\"grow font-medium truncate py-1 mr-2 text-left\">\n {{ getChoiceLabel() | translate }}\n </div>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n </gn-ui-button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.min-width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n >\n <button\n #choiceInputs\n type=\"button\"\n *ngFor=\"let choice of choices\"\n [title]=\"choice.label | translate\"\n class=\"flex px-5 py-1 w-full text-start cursor-pointer transition-colors\"\n [ngClass]=\"\n isSelected(choice)\n ? 'text-white bg-primary hover:text-white hover:bg-primary-darker focus:text-white focus:bg-primary-darker'\n : 'text-gray-900 hover:text-primary-darkest hover:bg-gray-50 focus:text-primary-darkest focus:bg-gray-50'\n \"\n (click)=\"onSelectValue(choice)\"\n (keydown)=\"selectIfEnter($event, choice)\"\n [attr.data-cy-value]=\"choice.value.toString()\"\n [attr.data-cy-active]=\"isSelected(choice) ? 'true' : undefined\"\n >\n <span class=\"text-[14px]\">\n {{ choice.label | translate }}\n </span>\n </button>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$5.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$5.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24179
24801
|
}
|
|
24180
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24802
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownSelectorComponent, decorators: [{
|
|
24181
24803
|
type: Component,
|
|
24182
|
-
args: [{ selector: 'gn-ui-dropdown-
|
|
24183
|
-
|
|
24804
|
+
args: [{ selector: 'gn-ui-dropdown-selector', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
24805
|
+
CommonModule,
|
|
24806
|
+
ButtonComponent,
|
|
24807
|
+
OverlayModule,
|
|
24808
|
+
MatIconModule,
|
|
24809
|
+
TranslateModule,
|
|
24810
|
+
], template: "<div class=\"flex flex-col sm:flex-row sm:items-center relative w-full\">\n <span\n *ngIf=\"showTitle\"\n class=\"tracking-wide text-sm mb-2 sm:mb-0 sm:mr-2 whitespace-nowrap\"\n [attr.for]=\"id\"\n >\n {{ title }}\n </span>\n <gn-ui-button\n type=\"outline\"\n class=\"grow min-w-0\"\n extraClass=\"bg-background !p-[8px] !pl-[16px] flex flex-row w-full {{\n extraBtnClass\n }}\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <div class=\"grow font-medium truncate py-1 mr-2 text-left\">\n {{ getChoiceLabel() | translate }}\n </div>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n </gn-ui-button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.min-width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n >\n <button\n #choiceInputs\n type=\"button\"\n *ngFor=\"let choice of choices\"\n [title]=\"choice.label | translate\"\n class=\"flex px-5 py-1 w-full text-start cursor-pointer transition-colors\"\n [ngClass]=\"\n isSelected(choice)\n ? 'text-white bg-primary hover:text-white hover:bg-primary-darker focus:text-white focus:bg-primary-darker'\n : 'text-gray-900 hover:text-primary-darkest hover:bg-gray-50 focus:text-primary-darkest focus:bg-gray-50'\n \"\n (click)=\"onSelectValue(choice)\"\n (keydown)=\"selectIfEnter($event, choice)\"\n [attr.data-cy-value]=\"choice.value.toString()\"\n [attr.data-cy-active]=\"isSelected(choice) ? 'true' : undefined\"\n >\n <span class=\"text-[14px]\">\n {{ choice.label | translate }}\n </span>\n </button>\n </div>\n</ng-template>\n" }]
|
|
24811
|
+
}], propDecorators: { title: [{
|
|
24812
|
+
type: Input
|
|
24813
|
+
}], showTitle: [{
|
|
24814
|
+
type: Input
|
|
24815
|
+
}], ariaName: [{
|
|
24184
24816
|
type: Input
|
|
24185
24817
|
}], choices: [{
|
|
24186
24818
|
type: Input
|
|
24187
24819
|
}], selected: [{
|
|
24188
24820
|
type: Input
|
|
24189
|
-
}], allowSearch: [{
|
|
24190
|
-
type: Input
|
|
24191
24821
|
}], maxRows: [{
|
|
24192
24822
|
type: Input
|
|
24193
|
-
}],
|
|
24823
|
+
}], extraBtnClass: [{
|
|
24194
24824
|
type: Input
|
|
24195
|
-
}],
|
|
24825
|
+
}], minWidth: [{
|
|
24826
|
+
type: Input
|
|
24827
|
+
}], selectValue: [{
|
|
24196
24828
|
type: Output
|
|
24197
24829
|
}], overlayOrigin: [{
|
|
24198
24830
|
type: ViewChild,
|
|
@@ -24200,322 +24832,95 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24200
24832
|
}], overlay: [{
|
|
24201
24833
|
type: ViewChild,
|
|
24202
24834
|
args: [CdkConnectedOverlay]
|
|
24203
|
-
}],
|
|
24204
|
-
type: ViewChild,
|
|
24205
|
-
args: ['overlayContainer', { read: ElementRef }]
|
|
24206
|
-
}], searchFieldInput: [{
|
|
24207
|
-
type: ViewChild,
|
|
24208
|
-
args: ['searchFieldInput']
|
|
24209
|
-
}], checkboxes: [{
|
|
24835
|
+
}], choiceInputs: [{
|
|
24210
24836
|
type: ViewChildren,
|
|
24211
|
-
args: ['
|
|
24837
|
+
args: ['choiceInputs', { read: ElementRef }]
|
|
24212
24838
|
}] } });
|
|
24213
24839
|
|
|
24214
|
-
class
|
|
24215
|
-
constructor() {
|
|
24216
|
-
this.
|
|
24217
|
-
this.
|
|
24218
|
-
this.
|
|
24219
|
-
this.valueChange = this.rawChange.pipe(distinctUntilChanged());
|
|
24840
|
+
class EditableLabelDirective {
|
|
24841
|
+
constructor(el, renderer) {
|
|
24842
|
+
this.el = el;
|
|
24843
|
+
this.renderer = renderer;
|
|
24844
|
+
this.editableLabelChanged = new EventEmitter();
|
|
24220
24845
|
}
|
|
24221
24846
|
ngAfterViewInit() {
|
|
24222
|
-
|
|
24223
|
-
|
|
24224
|
-
|
|
24225
|
-
|
|
24226
|
-
|
|
24227
|
-
|
|
24228
|
-
|
|
24229
|
-
|
|
24230
|
-
|
|
24847
|
+
if (this.gnUiEditableLabel !== false) {
|
|
24848
|
+
const appendedInput = this.renderer.createElement('input');
|
|
24849
|
+
this.renderer.setStyle(appendedInput, 'background', 'inherit');
|
|
24850
|
+
this.renderer.setStyle(appendedInput, 'color', 'inherit');
|
|
24851
|
+
this.renderer.setStyle(appendedInput, 'font', 'inherit');
|
|
24852
|
+
this.renderer.setStyle(appendedInput, 'border', 'inherit');
|
|
24853
|
+
this.renderer.setStyle(appendedInput, 'width', '100%');
|
|
24854
|
+
this.renderer.setStyle(appendedInput, 'padding', 'inherit');
|
|
24855
|
+
this.renderer.setStyle(appendedInput, 'margin', '0');
|
|
24856
|
+
this.renderer.setStyle(appendedInput, 'height', 'inherit');
|
|
24857
|
+
this.renderer.setStyle(appendedInput, 'line-height', 'inherit');
|
|
24858
|
+
this.renderer.setStyle(appendedInput, 'text-decoration', 'inherit');
|
|
24859
|
+
const hostContent = this.el.nativeElement.textContent || '';
|
|
24860
|
+
const formattedContent = hostContent.replace(/\s+/g, ' ').trim();
|
|
24861
|
+
this.renderer.setProperty(appendedInput, 'value', formattedContent);
|
|
24862
|
+
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '');
|
|
24863
|
+
this.renderer.listen(appendedInput, 'input', (event) => {
|
|
24864
|
+
this.editableLabelChanged.emit(event.target.value);
|
|
24865
|
+
});
|
|
24866
|
+
this.renderer.appendChild(this.el.nativeElement, appendedInput);
|
|
24867
|
+
}
|
|
24231
24868
|
}
|
|
24232
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24233
|
-
static { this.ɵ
|
|
24869
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
24870
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: EditableLabelDirective, isStandalone: true, selector: "[gnUiEditableLabel]", inputs: { gnUiEditableLabel: "gnUiEditableLabel" }, outputs: { editableLabelChanged: "editableLabelChanged" }, ngImport: i0 }); }
|
|
24234
24871
|
}
|
|
24235
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24236
|
-
type:
|
|
24237
|
-
args: [{
|
|
24238
|
-
|
|
24239
|
-
|
|
24240
|
-
|
|
24241
|
-
|
|
24242
|
-
}], required: [{
|
|
24243
|
-
type: Input
|
|
24244
|
-
}], valueChange: [{
|
|
24872
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, decorators: [{
|
|
24873
|
+
type: Directive,
|
|
24874
|
+
args: [{
|
|
24875
|
+
selector: '[gnUiEditableLabel]',
|
|
24876
|
+
standalone: true,
|
|
24877
|
+
}]
|
|
24878
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { editableLabelChanged: [{
|
|
24245
24879
|
type: Output
|
|
24246
|
-
}],
|
|
24247
|
-
type:
|
|
24248
|
-
args: ['input']
|
|
24880
|
+
}], gnUiEditableLabel: [{
|
|
24881
|
+
type: Input
|
|
24249
24882
|
}] } });
|
|
24250
24883
|
|
|
24251
|
-
class
|
|
24252
|
-
|
|
24253
|
-
|
|
24254
|
-
}
|
|
24255
|
-
constructor(http, translate) {
|
|
24256
|
-
this.http = http;
|
|
24257
|
-
this.translate = translate;
|
|
24258
|
-
this.required = false;
|
|
24259
|
-
this.loadOnce = false;
|
|
24260
|
-
this.autocompleteItems = [];
|
|
24261
|
-
this.invalid = false;
|
|
24262
|
-
this.items = [];
|
|
24263
|
-
this.requestAutocompleteItems = (text) => {
|
|
24264
|
-
if (this.url) {
|
|
24265
|
-
if (this.loadOnce && this.loadedItems) {
|
|
24266
|
-
return this.loadedItems;
|
|
24267
|
-
}
|
|
24268
|
-
const url = this.url(text);
|
|
24269
|
-
const lang = LANG_2_TO_3_MAPPER[this.translate.currentLang.slice(0, 2)];
|
|
24270
|
-
return this.http
|
|
24271
|
-
.get(url.replace('${lang}', lang))
|
|
24272
|
-
.pipe(map$1((item) => item.map((i) => i.values[lang])));
|
|
24273
|
-
}
|
|
24274
|
-
else {
|
|
24275
|
-
return of(this.autocompleteItems || []);
|
|
24276
|
-
}
|
|
24277
|
-
};
|
|
24278
|
-
this.rawChange = new Subject();
|
|
24279
|
-
this.itemsChange = this.rawChange.pipe(distinctUntilChanged());
|
|
24280
|
-
this.subscription = new Subscription();
|
|
24281
|
-
}
|
|
24282
|
-
ngOnInit() {
|
|
24283
|
-
if (this.loadOnce) {
|
|
24284
|
-
this.loadedItems = this.requestAutocompleteItems('*').pipe(shareReplay(1));
|
|
24285
|
-
}
|
|
24286
|
-
this.items = this.selectedItems;
|
|
24287
|
-
this.subscription = this.rawChange
|
|
24288
|
-
.pipe(tap$1((v) => (this.invalid = v.length === 0)))
|
|
24289
|
-
.subscribe();
|
|
24290
|
-
this.rawChange.next(this.items);
|
|
24291
|
-
}
|
|
24292
|
-
ngOnDestroy() {
|
|
24293
|
-
this.subscription.unsubscribe();
|
|
24294
|
-
}
|
|
24295
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ChipsInputComponent, deps: [{ token: i1.HttpClient }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24296
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ChipsInputComponent, selector: "gn-ui-chips-input", inputs: { url: "url", placeholder: "placeholder", selectedItems: "selectedItems", required: "required", loadOnce: "loadOnce", autocompleteItems: "autocompleteItems" }, outputs: { itemsChange: "itemsChange" }, ngImport: i0, template: "<tag-input\n [ngModel]=\"items\"\n (ngModelChange)=\"onChange($event)\"\n onlyFromAutocomplete=\"true\"\n [placeholder]=\"placeholder\"\n [secondaryPlaceholder]=\"placeholder\"\n [ripple]=\"false\"\n [animationDuration]=\"{ enter: '0ms', leave: '0ms' }\"\n [onTextChangeDebounce]=\"100\"\n class=\"border-2 border-primary h-full rounded-lg p-2 bg-white text-sm focus:border-primary\"\n [ngClass]=\"{ invalid: invalid }\"\n>\n <tag-input-dropdown\n [autocompleteObservable]=\"requestAutocompleteItems\"\n [minimumTextLength]=\"0\"\n [keepOpen]=\"false\"\n [showDropdownIfEmpty]=\"true\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n {{ item.display }}\n </ng-template>\n </tag-input-dropdown>\n</tag-input>\n", styles: ["tag-input::ng-deep .ng2-tag-input{border-bottom:none}tag-input::ng-deep .ng2-tag-input.ng2-tag-input--focused{border-bottom:none}tag-input::ng-deep tag{border-radius:5px;background:var(--color-primary-lightest);font-family:inherit;align-content:center;font-style:italic}tag-input::ng-deep tag::ng-deep:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,tag-input::ng-deep tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:var(--color-primary)!important}tag-input::ng-deep .tag__text{padding-right:7px}tag-input::ng-deep div,tag-input::ng-deep form{height:100%}tag-input.invalid{border-color:var(--color-secondary)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.TagInputComponent, selector: "tag-input", inputs: ["separatorKeys", "separatorKeyCodes", "placeholder", "secondaryPlaceholder", "maxItems", "validators", "asyncValidators", "onlyFromAutocomplete", "errorMessages", "theme", "onTextChangeDebounce", "inputId", "inputClass", "clearOnBlur", "hideForm", "addOnBlur", "addOnPaste", "pasteSplitPattern", "blinkIfDupe", "removable", "editable", "allowDupes", "modelAsStrings", "trimTags", "inputText", "ripple", "tabindex", "disable", "dragZone", "onRemoving", "onAdding", "animationDuration"], outputs: ["onAdd", "onRemove", "onSelect", "onFocus", "onBlur", "onTextChange", "onPaste", "onValidationError", "onTagEdited", "inputTextChange"] }, { kind: "component", type: i5.TagInputDropdown, selector: "tag-input-dropdown", inputs: ["offset", "focusFirstElement", "showDropdownIfEmpty", "autocompleteObservable", "minimumTextLength", "limitItemsTo", "displayBy", "identifyBy", "matchingFn", "appendToBody", "keepOpen", "dynamicUpdate", "zIndex", "autocompleteItems"] }] }); }
|
|
24884
|
+
class NavigationButtonComponent {
|
|
24885
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24886
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24297
24887
|
}
|
|
24298
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24888
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, decorators: [{
|
|
24299
24889
|
type: Component,
|
|
24300
|
-
args: [{ selector: 'gn-ui-
|
|
24301
|
-
}],
|
|
24302
|
-
type: Input
|
|
24303
|
-
}], placeholder: [{
|
|
24304
|
-
type: Input
|
|
24305
|
-
}], selectedItems: [{
|
|
24306
|
-
type: Input
|
|
24307
|
-
}], required: [{
|
|
24308
|
-
type: Input
|
|
24309
|
-
}], loadOnce: [{
|
|
24890
|
+
args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"] }]
|
|
24891
|
+
}], propDecorators: { label: [{
|
|
24310
24892
|
type: Input
|
|
24311
|
-
}],
|
|
24893
|
+
}], icon: [{
|
|
24312
24894
|
type: Input
|
|
24313
|
-
}], itemsChange: [{
|
|
24314
|
-
type: Output
|
|
24315
24895
|
}] } });
|
|
24316
24896
|
|
|
24317
|
-
class
|
|
24897
|
+
class SearchInputComponent {
|
|
24318
24898
|
constructor() {
|
|
24319
24899
|
this.value = '';
|
|
24320
|
-
this.
|
|
24900
|
+
this.placeholder = '';
|
|
24321
24901
|
this.rawChange = new Subject();
|
|
24322
|
-
this.valueChange = this.rawChange.pipe(distinctUntilChanged());
|
|
24323
|
-
}
|
|
24324
|
-
ngAfterViewInit() {
|
|
24325
|
-
this.checkRequired(this.input.nativeElement.value);
|
|
24326
|
-
}
|
|
24327
|
-
checkRequired(value) {
|
|
24328
|
-
this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
|
|
24902
|
+
this.valueChange = this.rawChange.pipe(distinctUntilChanged$1());
|
|
24329
24903
|
}
|
|
24330
24904
|
handleChange($event) {
|
|
24331
24905
|
const value = $event.target.value;
|
|
24332
|
-
this.checkRequired(value);
|
|
24333
24906
|
this.rawChange.next(value);
|
|
24334
24907
|
}
|
|
24335
|
-
|
|
24336
|
-
|
|
24908
|
+
clear() {
|
|
24909
|
+
this.value = null;
|
|
24910
|
+
this.rawChange.next(null);
|
|
24911
|
+
}
|
|
24912
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24913
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: SearchInputComponent, selector: "gn-ui-search-input", inputs: { value: "value", placeholder: "placeholder" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"h-full relative text-gray-300\">\n <input\n #input\n class=\"peer h-full appearance-none border border-gray-300 rounded w-full p-2 pl-10 text-gray-700 leading-tight hover:border-primary focus:text-primary focus:outline-none focus:border-primary focus:border-2\"\n type=\"text\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n />\n <div\n class=\"absolute inset-y-0 left-0 pl-2.5 flex items-center peer-hover:text-primary peer-focus:text-primary\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </div>\n <button\n *ngIf=\"rawChange | async\"\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary absolute transition-all duration-100 inset-y-0 right-0 pr-2.5\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle\">close</mat-icon>\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24337
24914
|
}
|
|
24338
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24915
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchInputComponent, decorators: [{
|
|
24339
24916
|
type: Component,
|
|
24340
|
-
args: [{ selector: 'gn-ui-
|
|
24917
|
+
args: [{ selector: 'gn-ui-search-input', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"h-full relative text-gray-300\">\n <input\n #input\n class=\"peer h-full appearance-none border border-gray-300 rounded w-full p-2 pl-10 text-gray-700 leading-tight hover:border-primary focus:text-primary focus:outline-none focus:border-primary focus:border-2\"\n type=\"text\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n />\n <div\n class=\"absolute inset-y-0 left-0 pl-2.5 flex items-center peer-hover:text-primary peer-focus:text-primary\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </div>\n <button\n *ngIf=\"rawChange | async\"\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary absolute transition-all duration-100 inset-y-0 right-0 pr-2.5\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle\">close</mat-icon>\n </button>\n</div>\n" }]
|
|
24341
24918
|
}], propDecorators: { value: [{
|
|
24342
24919
|
type: Input
|
|
24343
24920
|
}], placeholder: [{
|
|
24344
24921
|
type: Input
|
|
24345
|
-
}], required: [{
|
|
24346
|
-
type: Input
|
|
24347
24922
|
}], valueChange: [{
|
|
24348
24923
|
type: Output
|
|
24349
|
-
}], input: [{
|
|
24350
|
-
type: ViewChild,
|
|
24351
|
-
args: ['input']
|
|
24352
|
-
}] } });
|
|
24353
|
-
|
|
24354
|
-
class PopupAlertComponent {
|
|
24355
|
-
constructor(changeDetector) {
|
|
24356
|
-
this.changeDetector = changeDetector;
|
|
24357
|
-
this.type = 'info';
|
|
24358
|
-
this.position = 'top';
|
|
24359
|
-
this.expanded = false;
|
|
24360
|
-
this.timeout = null;
|
|
24361
|
-
}
|
|
24362
|
-
get showDuration() {
|
|
24363
|
-
const chars = this.content.nativeElement.innerHTML.length;
|
|
24364
|
-
return Math.max(3000, chars * 20);
|
|
24365
|
-
}
|
|
24366
|
-
ngOnInit() {
|
|
24367
|
-
this.expandAndClose();
|
|
24368
|
-
}
|
|
24369
|
-
expand() {
|
|
24370
|
-
this.expanded = true;
|
|
24371
|
-
this.changeDetector.detectChanges();
|
|
24372
|
-
clearTimeout(this.timeout);
|
|
24373
|
-
}
|
|
24374
|
-
expandAndClose() {
|
|
24375
|
-
this.expanded = true;
|
|
24376
|
-
this.changeDetector.detectChanges();
|
|
24377
|
-
clearTimeout(this.timeout);
|
|
24378
|
-
this.timeout = setTimeout(() => {
|
|
24379
|
-
this.expanded = false;
|
|
24380
|
-
this.changeDetector.detectChanges();
|
|
24381
|
-
}, this.showDuration);
|
|
24382
|
-
}
|
|
24383
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PopupAlertComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24384
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: { icon: "icon", type: "type", position: "position" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: "<div class=\"h-full relative container\">\n <div\n class=\"pointer-events-auto absolute text-white flex flex-row p-2 rounded message\"\n role=\"alert\"\n [ngClass]=\"{\n 'position-bottom': position === 'bottom',\n 'position-top': position === 'top',\n expanded: this.expanded,\n 'bg-red-500': type === 'danger',\n 'bg-yellow-500': type === 'warning',\n 'bg-blue-500': type === 'info'\n }\"\n (mouseenter)=\"expand()\"\n (mouseleave)=\"expandAndClose()\"\n >\n <mat-icon class=\"material-symbols-outlined mr-2 shrink-0 select-none\">{{\n icon\n }}</mat-icon>\n <div class=\"grow\" #content [ngClass]=\"{ invisible: !expanded }\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [":host{pointer-events:none}.container{filter:drop-shadow(0px 4px 3px rgba(0,0,0,.2))}.message{transition:clip-path .3s cubic-bezier(.25,.46,.45,.94)}.message.expanded{clip-path:circle(100%)}.position-top{clip-path:circle(19px at 20px 20px);align-items:start;top:0;left:0}.position-bottom{clip-path:circle(19px at 20px calc(100% - 20px));align-items:end;bottom:0;left:0}.container ::ng-deep a{text-decoration:underline;font-weight:700}.container ::ng-deep a:hover{opacity:.85}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24385
|
-
}
|
|
24386
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PopupAlertComponent, decorators: [{
|
|
24387
|
-
type: Component,
|
|
24388
|
-
args: [{ selector: 'gn-ui-popup-alert', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"h-full relative container\">\n <div\n class=\"pointer-events-auto absolute text-white flex flex-row p-2 rounded message\"\n role=\"alert\"\n [ngClass]=\"{\n 'position-bottom': position === 'bottom',\n 'position-top': position === 'top',\n expanded: this.expanded,\n 'bg-red-500': type === 'danger',\n 'bg-yellow-500': type === 'warning',\n 'bg-blue-500': type === 'info'\n }\"\n (mouseenter)=\"expand()\"\n (mouseleave)=\"expandAndClose()\"\n >\n <mat-icon class=\"material-symbols-outlined mr-2 shrink-0 select-none\">{{\n icon\n }}</mat-icon>\n <div class=\"grow\" #content [ngClass]=\"{ invisible: !expanded }\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [":host{pointer-events:none}.container{filter:drop-shadow(0px 4px 3px rgba(0,0,0,.2))}.message{transition:clip-path .3s cubic-bezier(.25,.46,.45,.94)}.message.expanded{clip-path:circle(100%)}.position-top{clip-path:circle(19px at 20px 20px);align-items:start;top:0;left:0}.position-bottom{clip-path:circle(19px at 20px calc(100% - 20px));align-items:end;bottom:0;left:0}.container ::ng-deep a{text-decoration:underline;font-weight:700}.container ::ng-deep a:hover{opacity:.85}\n"] }]
|
|
24389
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { icon: [{
|
|
24390
|
-
type: Input
|
|
24391
|
-
}], type: [{
|
|
24392
|
-
type: Input
|
|
24393
|
-
}], position: [{
|
|
24394
|
-
type: Input
|
|
24395
|
-
}], content: [{
|
|
24396
|
-
type: ViewChild,
|
|
24397
|
-
args: ['content']
|
|
24398
|
-
}] } });
|
|
24399
|
-
|
|
24400
|
-
class AutocompleteComponent {
|
|
24401
|
-
constructor(cdRef) {
|
|
24402
|
-
this.cdRef = cdRef;
|
|
24403
|
-
this.clearOnSelection = false;
|
|
24404
|
-
this.autoFocus = false;
|
|
24405
|
-
this.itemSelected = new EventEmitter();
|
|
24406
|
-
this.inputSubmitted = new EventEmitter();
|
|
24407
|
-
this.inputCleared = new EventEmitter();
|
|
24408
|
-
this.control = new UntypedFormControl();
|
|
24409
|
-
this.subscription = new Subscription();
|
|
24410
|
-
this.cancelEnter = true;
|
|
24411
|
-
this.selectionSubject = new ReplaySubject(1);
|
|
24412
|
-
this.lastInputValue$ = new ReplaySubject(1);
|
|
24413
|
-
this.error = null;
|
|
24414
|
-
this.displayWithFn = (item) => item;
|
|
24415
|
-
}
|
|
24416
|
-
ngOnChanges(changes) {
|
|
24417
|
-
const { value } = changes;
|
|
24418
|
-
if (value) {
|
|
24419
|
-
const previousTextValue = this.displayWithFn(value.previousValue);
|
|
24420
|
-
const currentTextValue = this.displayWithFn(value.currentValue);
|
|
24421
|
-
if (previousTextValue !== currentTextValue) {
|
|
24422
|
-
this.updateInputValue(value.currentValue);
|
|
24423
|
-
}
|
|
24424
|
-
}
|
|
24425
|
-
}
|
|
24426
|
-
ngOnInit() {
|
|
24427
|
-
this.suggestions$ = merge(this.control.valueChanges.pipe(filter((value) => typeof value === 'string'), filter((value) => value.length > 2), debounceTime(400), distinctUntilChanged(), tap$1(() => (this.searching = true))), this.control.valueChanges.pipe(filter((value) => typeof value === 'object' && value.title), map$1((item) => item.title))).pipe(switchMap$1((value) => (value ? this.action(value) : of([]))), catchError((error) => {
|
|
24428
|
-
this.error = error.message;
|
|
24429
|
-
return of([]);
|
|
24430
|
-
}), finalize(() => (this.searching = false)));
|
|
24431
|
-
this.subscription = this.control.valueChanges.subscribe((any) => {
|
|
24432
|
-
if (any !== '') {
|
|
24433
|
-
this.cancelEnter = false;
|
|
24434
|
-
}
|
|
24435
|
-
});
|
|
24436
|
-
this.control.valueChanges
|
|
24437
|
-
.pipe(filter((value) => typeof value === 'string'))
|
|
24438
|
-
.subscribe(this.lastInputValue$);
|
|
24439
|
-
}
|
|
24440
|
-
ngAfterViewInit() {
|
|
24441
|
-
this.autocomplete.optionSelected.subscribe(this.selectionSubject);
|
|
24442
|
-
if (this.autoFocus) {
|
|
24443
|
-
this.inputRef.nativeElement.focus();
|
|
24444
|
-
this.cdRef.detectChanges();
|
|
24445
|
-
}
|
|
24446
|
-
}
|
|
24447
|
-
ngOnDestroy() {
|
|
24448
|
-
this.subscription.unsubscribe();
|
|
24449
|
-
}
|
|
24450
|
-
updateInputValue(value) {
|
|
24451
|
-
if (value) {
|
|
24452
|
-
this.control.setValue(value);
|
|
24453
|
-
}
|
|
24454
|
-
if (this.inputRef) {
|
|
24455
|
-
this.inputRef.nativeElement.value = value?.title || '';
|
|
24456
|
-
}
|
|
24457
|
-
}
|
|
24458
|
-
clear() {
|
|
24459
|
-
this.inputRef.nativeElement.value = '';
|
|
24460
|
-
this.inputCleared.emit();
|
|
24461
|
-
this.selectionSubject
|
|
24462
|
-
.pipe(take(1))
|
|
24463
|
-
.subscribe((selection) => selection && selection.option.deselect());
|
|
24464
|
-
this.inputRef.nativeElement.focus();
|
|
24465
|
-
this.triggerRef.closePanel();
|
|
24466
|
-
}
|
|
24467
|
-
handleEnter(any) {
|
|
24468
|
-
if (!this.cancelEnter) {
|
|
24469
|
-
this.inputSubmitted.emit(any);
|
|
24470
|
-
this.triggerRef.closePanel();
|
|
24471
|
-
}
|
|
24472
|
-
}
|
|
24473
|
-
handleClickSearch() {
|
|
24474
|
-
this.inputSubmitted.emit(this.inputRef.nativeElement.value);
|
|
24475
|
-
this.triggerRef.closePanel();
|
|
24476
|
-
}
|
|
24477
|
-
handleSelection(event) {
|
|
24478
|
-
this.cancelEnter = true;
|
|
24479
|
-
this.itemSelected.emit(event.option.value);
|
|
24480
|
-
if (this.clearOnSelection) {
|
|
24481
|
-
this.lastInputValue$.pipe(first()).subscribe((any) => {
|
|
24482
|
-
this.inputRef.nativeElement.value = any;
|
|
24483
|
-
});
|
|
24484
|
-
}
|
|
24485
|
-
}
|
|
24486
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24487
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", action: "action", value: "value", clearOnSelection: "clearOnSelection", autoFocus: "autoFocus", displayWithFn: "displayWithFn" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", inputCleared: "inputCleared" }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "inputRef", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24488
|
-
}
|
|
24489
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
24490
|
-
type: Component,
|
|
24491
|
-
args: [{ selector: 'gn-ui-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"] }]
|
|
24492
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { placeholder: [{
|
|
24493
|
-
type: Input
|
|
24494
|
-
}], action: [{
|
|
24495
|
-
type: Input
|
|
24496
|
-
}], value: [{
|
|
24497
|
-
type: Input
|
|
24498
|
-
}], clearOnSelection: [{
|
|
24499
|
-
type: Input
|
|
24500
|
-
}], autoFocus: [{
|
|
24501
|
-
type: Input
|
|
24502
|
-
}], itemSelected: [{
|
|
24503
|
-
type: Output
|
|
24504
|
-
}], inputSubmitted: [{
|
|
24505
|
-
type: Output
|
|
24506
|
-
}], inputCleared: [{
|
|
24507
|
-
type: Output
|
|
24508
|
-
}], triggerRef: [{
|
|
24509
|
-
type: ViewChild,
|
|
24510
|
-
args: [MatAutocompleteTrigger]
|
|
24511
|
-
}], autocomplete: [{
|
|
24512
|
-
type: ViewChild,
|
|
24513
|
-
args: [MatAutocomplete]
|
|
24514
|
-
}], inputRef: [{
|
|
24515
|
-
type: ViewChild,
|
|
24516
|
-
args: ['searchInput']
|
|
24517
|
-
}], displayWithFn: [{
|
|
24518
|
-
type: Input
|
|
24519
24924
|
}] } });
|
|
24520
24925
|
|
|
24521
24926
|
class StarToggleComponent {
|
|
@@ -24553,115 +24958,119 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24553
24958
|
args: ['starOverlay']
|
|
24554
24959
|
}] } });
|
|
24555
24960
|
|
|
24556
|
-
class
|
|
24557
|
-
constructor(
|
|
24558
|
-
this.
|
|
24559
|
-
this.
|
|
24560
|
-
this.
|
|
24561
|
-
this.
|
|
24562
|
-
|
|
24563
|
-
|
|
24564
|
-
|
|
24565
|
-
|
|
24566
|
-
|
|
24567
|
-
|
|
24568
|
-
|
|
24569
|
-
|
|
24961
|
+
class TextAreaComponent {
|
|
24962
|
+
constructor() {
|
|
24963
|
+
this.value = '';
|
|
24964
|
+
this.disabled = false;
|
|
24965
|
+
this.extraClass = '';
|
|
24966
|
+
this.required = false;
|
|
24967
|
+
this.rawChange = new Subject();
|
|
24968
|
+
this.valueChange = this.rawChange.pipe(distinctUntilChanged());
|
|
24969
|
+
this.baseClasses = [
|
|
24970
|
+
'w-full',
|
|
24971
|
+
'pt-2',
|
|
24972
|
+
'pl-2',
|
|
24973
|
+
'resize-none',
|
|
24974
|
+
'border',
|
|
24975
|
+
'border-gray-800',
|
|
24976
|
+
'rounded italic',
|
|
24977
|
+
'leading-tight',
|
|
24978
|
+
'focus:outline-none',
|
|
24979
|
+
'focus:bg-background',
|
|
24980
|
+
'focus:border-primary',
|
|
24981
|
+
].join(' ');
|
|
24982
|
+
this.disabledClasses = ['cursor-not-allowed'].join(' ');
|
|
24570
24983
|
}
|
|
24571
|
-
|
|
24572
|
-
|
|
24573
|
-
this.observer = new IntersectionObserver((entries) => {
|
|
24574
|
-
entries.forEach((entry) => {
|
|
24575
|
-
this.isInViewport.emit(entry.isIntersecting);
|
|
24576
|
-
});
|
|
24577
|
-
}, { root: null, threshold: 0 });
|
|
24578
|
-
}
|
|
24579
|
-
this.observer.observe(elToObserve);
|
|
24984
|
+
get classList() {
|
|
24985
|
+
return `${this.baseClasses} ${this.extraClass} ${this.disabled ? this.disabledClasses : ''}`;
|
|
24580
24986
|
}
|
|
24581
|
-
|
|
24582
|
-
this.
|
|
24987
|
+
ngAfterViewInit() {
|
|
24988
|
+
this.checkRequired(this.input.nativeElement.value);
|
|
24583
24989
|
}
|
|
24584
|
-
|
|
24585
|
-
|
|
24586
|
-
}
|
|
24587
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ViewportIntersectorComponent, decorators: [{
|
|
24588
|
-
type: Component,
|
|
24589
|
-
args: [{ selector: 'gn-ui-viewport-intersector', template: "<div class=\"w-full h-full\"></div>\n" }]
|
|
24590
|
-
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { isInViewport: [{
|
|
24591
|
-
type: Output
|
|
24592
|
-
}], entersViewport: [{
|
|
24593
|
-
type: Output
|
|
24594
|
-
}], exitsViewport: [{
|
|
24595
|
-
type: Output
|
|
24596
|
-
}] } });
|
|
24597
|
-
|
|
24598
|
-
class CheckToggleComponent {
|
|
24599
|
-
constructor() {
|
|
24600
|
-
this.color = 'primary';
|
|
24601
|
-
this.toggled = new EventEmitter();
|
|
24990
|
+
checkRequired(value) {
|
|
24991
|
+
this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
|
|
24602
24992
|
}
|
|
24603
|
-
|
|
24604
|
-
|
|
24993
|
+
handleChange($event) {
|
|
24994
|
+
const value = $event.target.value;
|
|
24995
|
+
this.checkRequired(value);
|
|
24996
|
+
this.rawChange.next(value);
|
|
24605
24997
|
}
|
|
24606
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24607
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type:
|
|
24998
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24999
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TextAreaComponent, isStandalone: true, selector: "gn-ui-text-area", inputs: { value: "value", disabled: "disabled", extraClass: "extraClass", placeholder: "placeholder", required: "required" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n [class]=\"classList\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }); }
|
|
24608
25000
|
}
|
|
24609
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
25001
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, decorators: [{
|
|
24610
25002
|
type: Component,
|
|
24611
|
-
args: [{ selector: 'gn-ui-
|
|
24612
|
-
}], propDecorators: {
|
|
25003
|
+
args: [{ selector: 'gn-ui-text-area', standalone: true, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n [class]=\"classList\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
|
|
25004
|
+
}], ctorParameters: function () { return []; }, propDecorators: { value: [{
|
|
24613
25005
|
type: Input
|
|
24614
|
-
}],
|
|
25006
|
+
}], disabled: [{
|
|
24615
25007
|
type: Input
|
|
24616
|
-
}],
|
|
25008
|
+
}], extraClass: [{
|
|
24617
25009
|
type: Input
|
|
24618
|
-
}],
|
|
25010
|
+
}], placeholder: [{
|
|
24619
25011
|
type: Input
|
|
24620
|
-
}],
|
|
25012
|
+
}], required: [{
|
|
25013
|
+
type: Input
|
|
25014
|
+
}], valueChange: [{
|
|
24621
25015
|
type: Output
|
|
25016
|
+
}], input: [{
|
|
25017
|
+
type: ViewChild,
|
|
25018
|
+
args: ['input']
|
|
24622
25019
|
}] } });
|
|
24623
25020
|
|
|
24624
|
-
|
|
24625
|
-
marker('dropFile');
|
|
24626
|
-
class DragAndDropFileInputComponent {
|
|
25021
|
+
class TextInputComponent {
|
|
24627
25022
|
constructor() {
|
|
24628
|
-
this.
|
|
24629
|
-
|
|
24630
|
-
|
|
24631
|
-
|
|
25023
|
+
this.baseClass = [
|
|
25024
|
+
'appearance-none',
|
|
25025
|
+
'border border-gray-300',
|
|
25026
|
+
'rounded w-full',
|
|
25027
|
+
'p-2',
|
|
25028
|
+
'text-gray-700',
|
|
25029
|
+
'leading-tight',
|
|
25030
|
+
'focus:outline-none',
|
|
25031
|
+
'focus:border-primary',
|
|
25032
|
+
].join(' ');
|
|
25033
|
+
this.value = '';
|
|
25034
|
+
this.extraClass = '';
|
|
25035
|
+
this.required = false;
|
|
25036
|
+
this.rawChange = new Subject();
|
|
25037
|
+
this.valueChange = this.rawChange.pipe(distinctUntilChanged());
|
|
24632
25038
|
}
|
|
24633
|
-
get
|
|
24634
|
-
return this.
|
|
25039
|
+
get classList() {
|
|
25040
|
+
return `${this.baseClass} ${this.extraClass}`;
|
|
24635
25041
|
}
|
|
24636
|
-
|
|
24637
|
-
this.
|
|
24638
|
-
this.fileChange.emit(this.selectedFile);
|
|
25042
|
+
ngAfterViewInit() {
|
|
25043
|
+
this.checkRequired(this.input.nativeElement.value);
|
|
24639
25044
|
}
|
|
24640
|
-
|
|
24641
|
-
|
|
25045
|
+
checkRequired(value) {
|
|
25046
|
+
this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
|
|
25047
|
+
}
|
|
25048
|
+
handleChange($event) {
|
|
25049
|
+
const value = $event.target.value;
|
|
25050
|
+
this.checkRequired(value);
|
|
25051
|
+
this.rawChange.next(value);
|
|
25052
|
+
}
|
|
25053
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25054
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TextInputComponent, selector: "gn-ui-text-input", inputs: { value: "value", extraClass: "extraClass", hint: "hint", required: "required", disabled: "disabled" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input\n #input\n [class]=\"classList\"\n type=\"text\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n [placeholder]=\"hint\"\n [attr.aria-label]=\"hint\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n/>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }); }
|
|
24642
25055
|
}
|
|
24643
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
25056
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextInputComponent, decorators: [{
|
|
24644
25057
|
type: Component,
|
|
24645
|
-
args: [{ selector: 'gn-ui-
|
|
24646
|
-
}], propDecorators: {
|
|
25058
|
+
args: [{ selector: 'gn-ui-text-input', template: "<input\n #input\n [class]=\"classList\"\n type=\"text\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n [placeholder]=\"hint\"\n [attr.aria-label]=\"hint\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n/>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
|
|
25059
|
+
}], propDecorators: { value: [{
|
|
24647
25060
|
type: Input
|
|
24648
|
-
}],
|
|
25061
|
+
}], extraClass: [{
|
|
24649
25062
|
type: Input
|
|
24650
|
-
}],
|
|
24651
|
-
type: Output
|
|
24652
|
-
}] } });
|
|
24653
|
-
|
|
24654
|
-
class NavigationButtonComponent {
|
|
24655
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24656
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24657
|
-
}
|
|
24658
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, decorators: [{
|
|
24659
|
-
type: Component,
|
|
24660
|
-
args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"] }]
|
|
24661
|
-
}], propDecorators: { label: [{
|
|
25063
|
+
}], hint: [{
|
|
24662
25064
|
type: Input
|
|
24663
|
-
}],
|
|
25065
|
+
}], required: [{
|
|
25066
|
+
type: Input
|
|
25067
|
+
}], disabled: [{
|
|
24664
25068
|
type: Input
|
|
25069
|
+
}], valueChange: [{
|
|
25070
|
+
type: Output
|
|
25071
|
+
}], input: [{
|
|
25072
|
+
type: ViewChild,
|
|
25073
|
+
args: ['input']
|
|
24665
25074
|
}] } });
|
|
24666
25075
|
|
|
24667
25076
|
class ColorScaleComponent {
|
|
@@ -24769,7 +25178,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24769
25178
|
|
|
24770
25179
|
class LoadingMaskComponent {
|
|
24771
25180
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LoadingMaskComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24772
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: { message: "message" }, ngImport: i0, template: "<div class=\"h-full flex flex-col justify-center items-center relative backdrop\">\n <div class=\"absolute background bg-white inset-0\"></div>\n <mat-spinner [diameter]=\"28\" class=\"relative\"></mat-spinner>\n <span class=\"text-sm text-gray-700 mt-3 relative\">{{ message }}</span>\n</div>\n", styles: ["::ng-deep .mat-spinner circle{stroke:var(--color-gray-700);opacity:.5}.backdrop{background-color:#fff6}@supports ((-webkit-backdrop-filter: blur()) or (backdrop-filter: blur())){.backdrop{background-color:transparent;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}}.background{opacity:.7}\n"], dependencies: [{ kind: "component", type: i1$
|
|
25181
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: { message: "message" }, ngImport: i0, template: "<div class=\"h-full flex flex-col justify-center items-center relative backdrop\">\n <div class=\"absolute background bg-white inset-0\"></div>\n <mat-spinner [diameter]=\"28\" class=\"relative\"></mat-spinner>\n <span class=\"text-sm text-gray-700 mt-3 relative\">{{ message }}</span>\n</div>\n", styles: ["::ng-deep .mat-spinner circle{stroke:var(--color-gray-700);opacity:.5}.backdrop{background-color:#fff6}@supports ((-webkit-backdrop-filter: blur()) or (backdrop-filter: blur())){.backdrop{background-color:transparent;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}}.background{opacity:.7}\n"], dependencies: [{ kind: "component", type: i1$6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24773
25182
|
}
|
|
24774
25183
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LoadingMaskComponent, decorators: [{
|
|
24775
25184
|
type: Component,
|
|
@@ -24865,148 +25274,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24865
25274
|
}]
|
|
24866
25275
|
}] });
|
|
24867
25276
|
|
|
24868
|
-
class
|
|
24869
|
-
constructor() {
|
|
24870
|
-
this.
|
|
24871
|
-
this.
|
|
25277
|
+
class ViewportIntersectorComponent {
|
|
25278
|
+
constructor(vcRef) {
|
|
25279
|
+
this.vcRef = vcRef;
|
|
25280
|
+
this.isInViewport = new EventEmitter();
|
|
25281
|
+
this.entersViewport = this.isInViewport.pipe(filter((inViewport) => inViewport), map$1(() => undefined));
|
|
25282
|
+
this.exitsViewport = this.isInViewport.pipe(filter((inViewport) => !inViewport), map$1(() => undefined));
|
|
24872
25283
|
}
|
|
24873
|
-
|
|
24874
|
-
|
|
24875
|
-
|
|
25284
|
+
ngOnInit() {
|
|
25285
|
+
const elToObserve = this.vcRef.element.nativeElement;
|
|
25286
|
+
this.observeInputElement(elToObserve);
|
|
24876
25287
|
}
|
|
24877
|
-
|
|
24878
|
-
|
|
24879
|
-
|
|
24880
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
|
|
24881
|
-
type: Component,
|
|
24882
|
-
args: [{ selector: 'gn-ui-copy-text-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n" }]
|
|
24883
|
-
}], propDecorators: { text: [{
|
|
24884
|
-
type: Input
|
|
24885
|
-
}], tooltipText: [{
|
|
24886
|
-
type: Input
|
|
24887
|
-
}], displayText: [{
|
|
24888
|
-
type: Input
|
|
24889
|
-
}], rows: [{
|
|
24890
|
-
type: Input
|
|
24891
|
-
}] } });
|
|
24892
|
-
|
|
24893
|
-
class CheckboxComponent {
|
|
24894
|
-
constructor() {
|
|
24895
|
-
this.type = 'default';
|
|
24896
|
-
this.checked = false;
|
|
24897
|
-
this.indeterminate = false;
|
|
24898
|
-
this.changed = new EventEmitter();
|
|
25288
|
+
ngOnDestroy() {
|
|
25289
|
+
const elToObserve = this.vcRef.element.nativeElement;
|
|
25290
|
+
this.unObserveInputElement(elToObserve);
|
|
24899
25291
|
}
|
|
24900
|
-
|
|
24901
|
-
|
|
25292
|
+
observeInputElement(elToObserve) {
|
|
25293
|
+
if (!this.observer) {
|
|
25294
|
+
this.observer = new IntersectionObserver((entries) => {
|
|
25295
|
+
entries.forEach((entry) => {
|
|
25296
|
+
this.isInViewport.emit(entry.isIntersecting);
|
|
25297
|
+
});
|
|
25298
|
+
}, { root: null, threshold: 0 });
|
|
25299
|
+
}
|
|
25300
|
+
this.observer.observe(elToObserve);
|
|
24902
25301
|
}
|
|
24903
|
-
|
|
24904
|
-
|
|
24905
|
-
this.checked = !this.checked;
|
|
24906
|
-
this.changed.emit(this.checked);
|
|
25302
|
+
unObserveInputElement(elToObserve) {
|
|
25303
|
+
this.observer?.unobserve(elToObserve);
|
|
24907
25304
|
}
|
|
24908
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24909
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type:
|
|
25305
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ViewportIntersectorComponent, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25306
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ViewportIntersectorComponent, selector: "gn-ui-viewport-intersector", outputs: { isInViewport: "isInViewport", entersViewport: "entersViewport", exitsViewport: "exitsViewport" }, ngImport: i0, template: "<div class=\"w-full h-full\"></div>\n", styles: [""] }); }
|
|
24910
25307
|
}
|
|
24911
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
25308
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ViewportIntersectorComponent, decorators: [{
|
|
24912
25309
|
type: Component,
|
|
24913
|
-
args: [{ selector: 'gn-ui-
|
|
24914
|
-
}],
|
|
24915
|
-
type: Input
|
|
24916
|
-
}], checked: [{
|
|
24917
|
-
type: Input
|
|
24918
|
-
}], indeterminate: [{
|
|
24919
|
-
type: Input
|
|
24920
|
-
}], changed: [{
|
|
25310
|
+
args: [{ selector: 'gn-ui-viewport-intersector', template: "<div class=\"w-full h-full\"></div>\n" }]
|
|
25311
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { isInViewport: [{
|
|
24921
25312
|
type: Output
|
|
24922
|
-
}]
|
|
24923
|
-
|
|
24924
|
-
class SearchInputComponent {
|
|
24925
|
-
constructor() {
|
|
24926
|
-
this.value = '';
|
|
24927
|
-
this.placeholder = '';
|
|
24928
|
-
this.rawChange = new Subject();
|
|
24929
|
-
this.valueChange = this.rawChange.pipe(distinctUntilChanged$1());
|
|
24930
|
-
}
|
|
24931
|
-
handleChange($event) {
|
|
24932
|
-
const value = $event.target.value;
|
|
24933
|
-
this.rawChange.next(value);
|
|
24934
|
-
}
|
|
24935
|
-
clear() {
|
|
24936
|
-
this.value = null;
|
|
24937
|
-
this.rawChange.next(null);
|
|
24938
|
-
}
|
|
24939
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24940
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: SearchInputComponent, selector: "gn-ui-search-input", inputs: { value: "value", placeholder: "placeholder" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"h-full relative text-gray-300\">\n <input\n #input\n class=\"peer h-full appearance-none border border-gray-300 rounded w-full p-2 pl-10 text-gray-700 leading-tight hover:border-primary focus:text-primary focus:outline-none focus:border-primary focus:border-2\"\n type=\"text\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n />\n <div\n class=\"absolute inset-y-0 left-0 pl-2.5 flex items-center peer-hover:text-primary peer-focus:text-primary\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </div>\n <button\n *ngIf=\"rawChange | async\"\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary absolute transition-all duration-100 inset-y-0 right-0 pr-2.5\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle\">close</mat-icon>\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24941
|
-
}
|
|
24942
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchInputComponent, decorators: [{
|
|
24943
|
-
type: Component,
|
|
24944
|
-
args: [{ selector: 'gn-ui-search-input', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"h-full relative text-gray-300\">\n <input\n #input\n class=\"peer h-full appearance-none border border-gray-300 rounded w-full p-2 pl-10 text-gray-700 leading-tight hover:border-primary focus:text-primary focus:outline-none focus:border-primary focus:border-2\"\n type=\"text\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n />\n <div\n class=\"absolute inset-y-0 left-0 pl-2.5 flex items-center peer-hover:text-primary peer-focus:text-primary\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </div>\n <button\n *ngIf=\"rawChange | async\"\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary absolute transition-all duration-100 inset-y-0 right-0 pr-2.5\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle\">close</mat-icon>\n </button>\n</div>\n" }]
|
|
24945
|
-
}], propDecorators: { value: [{
|
|
24946
|
-
type: Input
|
|
24947
|
-
}], placeholder: [{
|
|
24948
|
-
type: Input
|
|
24949
|
-
}], valueChange: [{
|
|
25313
|
+
}], entersViewport: [{
|
|
24950
25314
|
type: Output
|
|
24951
|
-
}]
|
|
24952
|
-
|
|
24953
|
-
class DateRangePickerComponent {
|
|
24954
|
-
startDateSelected(event) {
|
|
24955
|
-
this.startDate = event.value;
|
|
24956
|
-
}
|
|
24957
|
-
endDateSelected(event) {
|
|
24958
|
-
this.endDate = event.value;
|
|
24959
|
-
}
|
|
24960
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24961
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DateRangePickerComponent, selector: "gn-ui-date-range-picker", ngImport: i0, template: "<div\n class=\"flex items-center justify-center w-64 h-11 rounded-lg border border-gray-300 bg-white\"\n>\n <div class=\"w-48 flex justify-between\">\n <mat-date-range-input [rangePicker]=\"picker\" class=\"w-full\">\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matStartDate\n placeholder=\"Start date\"\n (dateInput)=\"startDateSelected($event)\"\n />\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matEndDate\n placeholder=\"End date\"\n (dateInput)=\"endDateSelected($event)\"\n />\n </mat-date-range-input>\n </div>\n <mat-datepicker-toggle matSuffix [for]=\"picker\">\n <mat-icon>calendar_today</mat-icon>\n </mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n</div>\n", styles: ["mat-datepicker-toggle{@apply text-primary;}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i3$2.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i3$2.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i3$2.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i3$2.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i3$2.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }] }); }
|
|
24962
|
-
}
|
|
24963
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DateRangePickerComponent, decorators: [{
|
|
24964
|
-
type: Component,
|
|
24965
|
-
args: [{ selector: 'gn-ui-date-range-picker', template: "<div\n class=\"flex items-center justify-center w-64 h-11 rounded-lg border border-gray-300 bg-white\"\n>\n <div class=\"w-48 flex justify-between\">\n <mat-date-range-input [rangePicker]=\"picker\" class=\"w-full\">\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matStartDate\n placeholder=\"Start date\"\n (dateInput)=\"startDateSelected($event)\"\n />\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matEndDate\n placeholder=\"End date\"\n (dateInput)=\"endDateSelected($event)\"\n />\n </mat-date-range-input>\n </div>\n <mat-datepicker-toggle matSuffix [for]=\"picker\">\n <mat-icon>calendar_today</mat-icon>\n </mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n</div>\n", styles: ["mat-datepicker-toggle{@apply text-primary;}\n"] }]
|
|
24966
|
-
}] });
|
|
24967
|
-
|
|
24968
|
-
class EditableLabelDirective {
|
|
24969
|
-
constructor(el, renderer) {
|
|
24970
|
-
this.el = el;
|
|
24971
|
-
this.renderer = renderer;
|
|
24972
|
-
this.editableLabelChanged = new EventEmitter();
|
|
24973
|
-
}
|
|
24974
|
-
ngAfterViewInit() {
|
|
24975
|
-
if (this.gnUiEditableLabel !== false) {
|
|
24976
|
-
const appendedInput = this.renderer.createElement('input');
|
|
24977
|
-
this.renderer.setStyle(appendedInput, 'background', 'inherit');
|
|
24978
|
-
this.renderer.setStyle(appendedInput, 'color', 'inherit');
|
|
24979
|
-
this.renderer.setStyle(appendedInput, 'font', 'inherit');
|
|
24980
|
-
this.renderer.setStyle(appendedInput, 'border', 'inherit');
|
|
24981
|
-
this.renderer.setStyle(appendedInput, 'width', '100%');
|
|
24982
|
-
this.renderer.setStyle(appendedInput, 'padding', 'inherit');
|
|
24983
|
-
this.renderer.setStyle(appendedInput, 'margin', '0');
|
|
24984
|
-
this.renderer.setStyle(appendedInput, 'height', 'inherit');
|
|
24985
|
-
this.renderer.setStyle(appendedInput, 'line-height', 'inherit');
|
|
24986
|
-
this.renderer.setStyle(appendedInput, 'text-decoration', 'inherit');
|
|
24987
|
-
const hostContent = this.el.nativeElement.textContent || '';
|
|
24988
|
-
const formattedContent = hostContent.replace(/\s+/g, ' ').trim();
|
|
24989
|
-
this.renderer.setProperty(appendedInput, 'value', formattedContent);
|
|
24990
|
-
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '');
|
|
24991
|
-
this.renderer.listen(appendedInput, 'input', (event) => {
|
|
24992
|
-
this.editableLabelChanged.emit(event.target.value);
|
|
24993
|
-
});
|
|
24994
|
-
this.renderer.appendChild(this.el.nativeElement, appendedInput);
|
|
24995
|
-
}
|
|
24996
|
-
}
|
|
24997
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
24998
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: EditableLabelDirective, isStandalone: true, selector: "[gnUiEditableLabel]", inputs: { gnUiEditableLabel: "gnUiEditableLabel" }, outputs: { editableLabelChanged: "editableLabelChanged" }, ngImport: i0 }); }
|
|
24999
|
-
}
|
|
25000
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, decorators: [{
|
|
25001
|
-
type: Directive,
|
|
25002
|
-
args: [{
|
|
25003
|
-
selector: '[gnUiEditableLabel]',
|
|
25004
|
-
standalone: true,
|
|
25005
|
-
}]
|
|
25006
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { editableLabelChanged: [{
|
|
25315
|
+
}], exitsViewport: [{
|
|
25007
25316
|
type: Output
|
|
25008
|
-
}], gnUiEditableLabel: [{
|
|
25009
|
-
type: Input
|
|
25010
25317
|
}] } });
|
|
25011
25318
|
|
|
25012
25319
|
class FilesDropDirective {
|
|
@@ -25198,7 +25505,7 @@ class ImageInputComponent {
|
|
|
25198
25505
|
});
|
|
25199
25506
|
}
|
|
25200
25507
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageInputComponent, deps: [{ token: i1.HttpClient }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25201
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ImageInputComponent, isStandalone: true, selector: "gn-ui-image-input", inputs: { maxSizeMB: "maxSizeMB", previewUrl: "previewUrl", altText: "altText", uploadProgress: "uploadProgress", uploadError: "uploadError" }, outputs: { fileChange: "fileChange", urlChange: "urlChange", uploadCancel: "uploadCancel", delete: "delete", altTextChange: "altTextChange" }, ngImport: i0, template: "<ng-container *ngIf=\"previewUrl; then withImage; else withoutImage\">\n</ng-container>\n\n<ng-template #withImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <div class=\"flex-1 group relative\">\n <img\n class=\"w-full h-full object-cover border-2 border-gray-300 rounded-lg\"\n [alt]=\"altText\"\n loading=\"lazy\"\n [src]=\"previewUrl\"\n />\n <gn-ui-button\n [extraClass]=\"\n 'bg-gray-200 absolute right-2 bottom-2 invisible group-hover:visible'\n \"\n (buttonClick)=\"handleDelete()\"\n >\n <mat-icon class=\"material-symbols-outlined\">delete</mat-icon>\n </gn-ui-button>\n </div>\n <input\n *ngIf=\"showAltTextInput\"\n type=\"text\"\n class=\"py-3 px-2 border-2 border-gray-300 rounded-lg text-sm font-medium\"\n [placeholder]=\"'input.image.altTextPlaceholder' | translate\"\n [value]=\"altText\"\n (change)=\"handleAltTextChange($event)\"\n />\n <div class=\"flex flex-row gap-2\">\n <gn-ui-button\n [extraClass]=\"'bg-gray-200 font-bold'\"\n (buttonClick)=\"handleDelete()\"\n >\n <mat-icon class=\"material-symbols-outlined me-1\">delete</mat-icon>\n {{ 'input.image.delete' | translate }}\n </gn-ui-button>\n <gn-ui-button\n *ngIf=\"!showAltTextInput\"\n [extraClass]=\"'bg-gray-200 font-bold'\"\n (buttonClick)=\"toggleAltTextInput()\"\n >\n <mat-icon class=\"material-symbols-outlined me-1\">add</mat-icon>\n {{ 'input.image.displayAltTextInput' | translate }}\n </gn-ui-button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #withoutImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <label\n gnUiFilesDrop\n class=\"block flex-1 border-2 border-dashed border-gray-300 rounded-lg p-6 flex flex-col items-center justify-center gap-4\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n >\n <div class=\"w-14 h-14 rounded-md bg-gray-200 grid\">\n <mat-icon\n *ngIf=\"!dragFilesOver && !uploadProgress && !uploadError\"\n class=\"material-symbols-outlined place-self-center text-blue-500\"\n >image</mat-icon\n >\n <mat-icon\n *ngIf=\"dragFilesOver && !uploadProgress && !uploadError\"\n class=\"material-symbols-outlined place-self-center text-blue-500\"\n >add_box</mat-icon\n >\n <div *ngIf=\"uploadProgress\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n [mode]=\"'determinate'\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n <span\n class=\"text-sm font-medium relative inline-block width-[30px] bottom-[40px] left-[15px]\"\n >\n {{ uploadProgress }}%\n </span>\n </div>\n <mat-icon\n *ngIf=\"uploadError\"\n class=\"material-symbols-outlined place-self-center text-rose-500\"\n >broken_image</mat-icon\n >\n </div>\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">{{ getPrimaryText() | translate }}</p>\n <p\n class=\"text-sm\"\n [class]=\"\n uploadProgress || uploadError\n ? 'font-bold text-blue-500 cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick()\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <input\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"showUrlInput || uploadProgress || uploadError\"\n />\n </label>\n <div *ngIf=\"!showUrlInput\" class=\"flex-none\">\n <gn-ui-button\n [extraClass]=\"'bg-gray-200 font-bold'\"\n (buttonClick)=\"displayUrlInput()\"\n >\n <mat-icon class=\"material-symbols-outlined me-1\">link</mat-icon>\n {{ 'input.image.displayUrlInput' | translate }}\n </gn-ui-button>\n </div>\n <div *ngIf=\"showUrlInput\" class=\"flex-none flex flex-col gap-2\">\n <div class=\"h-2\"></div>\n <div class=\"flex gap-2 items-center\">\n <div class=\"flex-1 flex rounded-lg\">\n <span\n class=\"material-symbols-outlined px-4 inline-flex items-center min-w-fit rounded-s-lg border-2 border-e-0 border-gray-300\"\n >link</span\n >\n <input\n type=\"text\"\n class=\"py-3 ps-1 block w-full border-2 border-s-0 border-e-0 border-gray-300 text-sm font-medium\"\n placeholder=\"https://exemple.com/image.jpg\"\n (change)=\"handleUrlChange($event)\"\n />\n <gn-ui-button\n class=\"px-1 inline-flex items-center min-w-fit rounded-e-lg border-2 border-s-0 border-gray-300 text-white\"\n [extraClass]=\"\n urlInputValue && !downloadError ? 'bg-blue-500' : 'bg-gray-500'\n \"\n [disabled]=\"!urlInputValue || downloadError\"\n (buttonClick)=\"downloadUrl()\"\n >\n <mat-icon class=\"material-symbols-outlined\">arrow_upward</mat-icon>\n </gn-ui-button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: FilesDropDirective, selector: "[gnUiFilesDrop]", outputs: ["dragFilesOver", "dropFiles"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$
|
|
25508
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ImageInputComponent, isStandalone: true, selector: "gn-ui-image-input", inputs: { maxSizeMB: "maxSizeMB", previewUrl: "previewUrl", altText: "altText", uploadProgress: "uploadProgress", uploadError: "uploadError" }, outputs: { fileChange: "fileChange", urlChange: "urlChange", uploadCancel: "uploadCancel", delete: "delete", altTextChange: "altTextChange" }, ngImport: i0, template: "<ng-container *ngIf=\"previewUrl; then withImage; else withoutImage\">\n</ng-container>\n\n<ng-template #withImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <div class=\"flex-1 group relative\">\n <img\n class=\"w-full h-full object-cover border-2 border-gray-300 rounded-lg\"\n [alt]=\"altText\"\n loading=\"lazy\"\n [src]=\"previewUrl\"\n />\n <gn-ui-button\n [extraClass]=\"\n 'bg-gray-200 absolute right-2 bottom-2 invisible group-hover:visible'\n \"\n (buttonClick)=\"handleDelete()\"\n >\n <mat-icon class=\"material-symbols-outlined\">delete</mat-icon>\n </gn-ui-button>\n </div>\n <input\n *ngIf=\"showAltTextInput\"\n type=\"text\"\n class=\"py-3 px-2 border-2 border-gray-300 rounded-lg text-sm font-medium\"\n [placeholder]=\"'input.image.altTextPlaceholder' | translate\"\n [value]=\"altText\"\n (change)=\"handleAltTextChange($event)\"\n />\n <div class=\"flex flex-row gap-2\">\n <gn-ui-button\n [extraClass]=\"'bg-gray-200 font-bold'\"\n (buttonClick)=\"handleDelete()\"\n >\n <mat-icon class=\"material-symbols-outlined me-1\">delete</mat-icon>\n {{ 'input.image.delete' | translate }}\n </gn-ui-button>\n <gn-ui-button\n *ngIf=\"!showAltTextInput\"\n [extraClass]=\"'bg-gray-200 font-bold'\"\n (buttonClick)=\"toggleAltTextInput()\"\n >\n <mat-icon class=\"material-symbols-outlined me-1\">add</mat-icon>\n {{ 'input.image.displayAltTextInput' | translate }}\n </gn-ui-button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #withoutImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <label\n gnUiFilesDrop\n class=\"block flex-1 border-2 border-dashed border-gray-300 rounded-lg p-6 flex flex-col items-center justify-center gap-4\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n >\n <div class=\"w-14 h-14 rounded-md bg-gray-200 grid\">\n <mat-icon\n *ngIf=\"!dragFilesOver && !uploadProgress && !uploadError\"\n class=\"material-symbols-outlined place-self-center text-blue-500\"\n >image</mat-icon\n >\n <mat-icon\n *ngIf=\"dragFilesOver && !uploadProgress && !uploadError\"\n class=\"material-symbols-outlined place-self-center text-blue-500\"\n >add_box</mat-icon\n >\n <div *ngIf=\"uploadProgress\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n [mode]=\"'determinate'\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n <span\n class=\"text-sm font-medium relative inline-block width-[30px] bottom-[40px] left-[15px]\"\n >\n {{ uploadProgress }}%\n </span>\n </div>\n <mat-icon\n *ngIf=\"uploadError\"\n class=\"material-symbols-outlined place-self-center text-rose-500\"\n >broken_image</mat-icon\n >\n </div>\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">{{ getPrimaryText() | translate }}</p>\n <p\n class=\"text-sm\"\n [class]=\"\n uploadProgress || uploadError\n ? 'font-bold text-blue-500 cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick()\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <input\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"showUrlInput || uploadProgress || uploadError\"\n />\n </label>\n <div *ngIf=\"!showUrlInput\" class=\"flex-none\">\n <gn-ui-button\n [extraClass]=\"'bg-gray-200 font-bold'\"\n (buttonClick)=\"displayUrlInput()\"\n >\n <mat-icon class=\"material-symbols-outlined me-1\">link</mat-icon>\n {{ 'input.image.displayUrlInput' | translate }}\n </gn-ui-button>\n </div>\n <div *ngIf=\"showUrlInput\" class=\"flex-none flex flex-col gap-2\">\n <div class=\"h-2\"></div>\n <div class=\"flex gap-2 items-center\">\n <div class=\"flex-1 flex rounded-lg\">\n <span\n class=\"material-symbols-outlined px-4 inline-flex items-center min-w-fit rounded-s-lg border-2 border-e-0 border-gray-300\"\n >link</span\n >\n <input\n type=\"text\"\n class=\"py-3 ps-1 block w-full border-2 border-s-0 border-e-0 border-gray-300 text-sm font-medium\"\n placeholder=\"https://exemple.com/image.jpg\"\n (change)=\"handleUrlChange($event)\"\n />\n <gn-ui-button\n class=\"px-1 inline-flex items-center min-w-fit rounded-e-lg border-2 border-s-0 border-gray-300 text-white\"\n [extraClass]=\"\n urlInputValue && !downloadError ? 'bg-blue-500' : 'bg-gray-500'\n \"\n [disabled]=\"!urlInputValue || downloadError\"\n (buttonClick)=\"downloadUrl()\"\n >\n <mat-icon class=\"material-symbols-outlined\">arrow_upward</mat-icon>\n </gn-ui-button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: FilesDropDirective, selector: "[gnUiFilesDrop]", outputs: ["dragFilesOver", "dropFiles"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25202
25509
|
}
|
|
25203
25510
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageInputComponent, decorators: [{
|
|
25204
25511
|
type: Component,
|
|
@@ -25234,8 +25541,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25234
25541
|
|
|
25235
25542
|
class UiInputsModule {
|
|
25236
25543
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25237
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [
|
|
25238
|
-
AutocompleteComponent,
|
|
25544
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [AutocompleteComponent,
|
|
25239
25545
|
TextInputComponent,
|
|
25240
25546
|
DragAndDropFileInputComponent,
|
|
25241
25547
|
ChipsInputComponent,
|
|
@@ -25246,8 +25552,7 @@ class UiInputsModule {
|
|
|
25246
25552
|
CheckToggleComponent,
|
|
25247
25553
|
CopyTextButtonComponent,
|
|
25248
25554
|
CheckboxComponent,
|
|
25249
|
-
SearchInputComponent,
|
|
25250
|
-
DateRangePickerComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
25555
|
+
SearchInputComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
25251
25556
|
FormsModule,
|
|
25252
25557
|
ReactiveFormsModule,
|
|
25253
25558
|
TagInputModule,
|
|
@@ -25265,7 +25570,9 @@ class UiInputsModule {
|
|
|
25265
25570
|
EditableLabelDirective,
|
|
25266
25571
|
TextAreaComponent,
|
|
25267
25572
|
ButtonComponent,
|
|
25268
|
-
ImageInputComponent
|
|
25573
|
+
ImageInputComponent,
|
|
25574
|
+
DropdownSelectorComponent,
|
|
25575
|
+
DateRangePickerComponent], exports: [DropdownSelectorComponent,
|
|
25269
25576
|
AutocompleteComponent,
|
|
25270
25577
|
ButtonComponent,
|
|
25271
25578
|
TextInputComponent,
|
|
@@ -25300,13 +25607,14 @@ class UiInputsModule {
|
|
|
25300
25607
|
MatInputModule,
|
|
25301
25608
|
MatDatepickerModule,
|
|
25302
25609
|
MatNativeDateModule,
|
|
25303
|
-
ImageInputComponent
|
|
25610
|
+
ImageInputComponent,
|
|
25611
|
+
DropdownSelectorComponent,
|
|
25612
|
+
DateRangePickerComponent] }); }
|
|
25304
25613
|
}
|
|
25305
25614
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, decorators: [{
|
|
25306
25615
|
type: NgModule,
|
|
25307
25616
|
args: [{
|
|
25308
25617
|
declarations: [
|
|
25309
|
-
DropdownSelectorComponent,
|
|
25310
25618
|
AutocompleteComponent,
|
|
25311
25619
|
TextInputComponent,
|
|
25312
25620
|
DragAndDropFileInputComponent,
|
|
@@ -25319,7 +25627,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25319
25627
|
CopyTextButtonComponent,
|
|
25320
25628
|
CheckboxComponent,
|
|
25321
25629
|
SearchInputComponent,
|
|
25322
|
-
DateRangePickerComponent,
|
|
25323
25630
|
],
|
|
25324
25631
|
imports: [
|
|
25325
25632
|
CommonModule,
|
|
@@ -25343,6 +25650,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25343
25650
|
TextAreaComponent,
|
|
25344
25651
|
ButtonComponent,
|
|
25345
25652
|
ImageInputComponent,
|
|
25653
|
+
DropdownSelectorComponent,
|
|
25654
|
+
DateRangePickerComponent,
|
|
25346
25655
|
],
|
|
25347
25656
|
exports: [
|
|
25348
25657
|
DropdownSelectorComponent,
|
|
@@ -25367,34 +25676,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25367
25676
|
}]
|
|
25368
25677
|
}] });
|
|
25369
25678
|
|
|
25679
|
+
class PreviousNextButtonsComponent {
|
|
25680
|
+
constructor() {
|
|
25681
|
+
this.directionButtonClicked = new EventEmitter();
|
|
25682
|
+
}
|
|
25683
|
+
previousButtonClicked() {
|
|
25684
|
+
this.directionButtonClicked.next('previous');
|
|
25685
|
+
}
|
|
25686
|
+
nextButtonClicked() {
|
|
25687
|
+
this.directionButtonClicked.next('next');
|
|
25688
|
+
}
|
|
25689
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PreviousNextButtonsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25690
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: PreviousNextButtonsComponent, isStandalone: true, selector: "gn-ui-previous-next-buttons", inputs: { isFirst: "isFirst", isLast: "isLast" }, outputs: { directionButtonClicked: "directionButtonClicked" }, ngImport: i0, template: "<div class=\"flex flex-row gap-x-4 items-center\">\n <gn-ui-button\n data-test=\"previousButton\"\n [type]=\"isFirst ? 'default' : 'outline'\"\n [disabled]=\"isFirst\"\n (buttonClick)=\"previousButtonClicked()\"\n >\n <mat-icon\n class=\"material-symbols-outlined text-[14px] text-center pt-[5px]\"\n >\n arrow_back\n </mat-icon>\n </gn-ui-button>\n <gn-ui-button\n data-test=\"nextButton\"\n [type]=\"isLast ? 'default' : 'outline'\"\n [disabled]=\"isLast\"\n (buttonClick)=\"nextButtonClicked()\"\n >\n <mat-icon\n class=\"material-symbols-outlined text-[14px] text-center pt-[5px]\"\n >\n arrow_forward\n </mat-icon>\n </gn-ui-button>\n</div>\n", styles: [":host{--gn-ui-button-rounded: 100%;--gn-ui-button-width: 8px;--gn-ui-button-height: 8px;--gn-ui-button-padding: 12px}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25691
|
+
}
|
|
25692
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PreviousNextButtonsComponent, decorators: [{
|
|
25693
|
+
type: Component,
|
|
25694
|
+
args: [{ selector: 'gn-ui-previous-next-buttons', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [ButtonComponent, MatIconModule], template: "<div class=\"flex flex-row gap-x-4 items-center\">\n <gn-ui-button\n data-test=\"previousButton\"\n [type]=\"isFirst ? 'default' : 'outline'\"\n [disabled]=\"isFirst\"\n (buttonClick)=\"previousButtonClicked()\"\n >\n <mat-icon\n class=\"material-symbols-outlined text-[14px] text-center pt-[5px]\"\n >\n arrow_back\n </mat-icon>\n </gn-ui-button>\n <gn-ui-button\n data-test=\"nextButton\"\n [type]=\"isLast ? 'default' : 'outline'\"\n [disabled]=\"isLast\"\n (buttonClick)=\"nextButtonClicked()\"\n >\n <mat-icon\n class=\"material-symbols-outlined text-[14px] text-center pt-[5px]\"\n >\n arrow_forward\n </mat-icon>\n </gn-ui-button>\n</div>\n", styles: [":host{--gn-ui-button-rounded: 100%;--gn-ui-button-width: 8px;--gn-ui-button-height: 8px;--gn-ui-button-padding: 12px}\n"] }]
|
|
25695
|
+
}], propDecorators: { isFirst: [{
|
|
25696
|
+
type: Input
|
|
25697
|
+
}], isLast: [{
|
|
25698
|
+
type: Input
|
|
25699
|
+
}], directionButtonClicked: [{
|
|
25700
|
+
type: Output
|
|
25701
|
+
}] } });
|
|
25702
|
+
|
|
25370
25703
|
class AddLayerFromOgcApiComponent {
|
|
25371
25704
|
constructor(changeDetectorRef) {
|
|
25372
25705
|
this.changeDetectorRef = changeDetectorRef;
|
|
25373
25706
|
this.layerAdded = new EventEmitter();
|
|
25374
25707
|
this.urlChange = new Subject();
|
|
25375
|
-
this.layerUrl = '';
|
|
25376
25708
|
this.loading = false;
|
|
25377
25709
|
this.layers = [];
|
|
25378
|
-
this.ogcEndpoint = null;
|
|
25379
25710
|
this.errorMessage = null;
|
|
25711
|
+
this.selectedLayerTypes = {};
|
|
25380
25712
|
}
|
|
25381
25713
|
ngOnInit() {
|
|
25382
25714
|
this.urlChange.pipe(debounceTime$1(700)).subscribe(() => {
|
|
25383
25715
|
this.loadLayers();
|
|
25384
|
-
this.changeDetectorRef.detectChanges(); // manually trigger change detection
|
|
25385
25716
|
});
|
|
25386
25717
|
}
|
|
25387
25718
|
async loadLayers() {
|
|
25388
25719
|
this.errorMessage = null;
|
|
25389
25720
|
try {
|
|
25390
25721
|
this.loading = true;
|
|
25391
|
-
if (this.ogcUrl.trim()
|
|
25722
|
+
if (!this.ogcUrl.trim()) {
|
|
25392
25723
|
this.layers = [];
|
|
25393
25724
|
return;
|
|
25394
25725
|
}
|
|
25395
|
-
|
|
25396
|
-
|
|
25397
|
-
this.
|
|
25726
|
+
const ogcEndpoint = await new OgcApiEndpoint(this.ogcUrl);
|
|
25727
|
+
this.layers = await ogcEndpoint.allCollections;
|
|
25728
|
+
this.setDefaultLayerTypes();
|
|
25398
25729
|
}
|
|
25399
25730
|
catch (error) {
|
|
25400
25731
|
const err = error;
|
|
@@ -25406,21 +25737,75 @@ class AddLayerFromOgcApiComponent {
|
|
|
25406
25737
|
this.changeDetectorRef.markForCheck();
|
|
25407
25738
|
}
|
|
25408
25739
|
}
|
|
25409
|
-
|
|
25410
|
-
this.
|
|
25411
|
-
|
|
25412
|
-
|
|
25413
|
-
|
|
25414
|
-
|
|
25415
|
-
};
|
|
25416
|
-
|
|
25740
|
+
setDefaultLayerTypes() {
|
|
25741
|
+
this.layers.forEach((layer) => {
|
|
25742
|
+
const choices = this.getLayerChoices(layer);
|
|
25743
|
+
if (choices.length > 0) {
|
|
25744
|
+
this.selectedLayerTypes[layer.name] = choices[0].value;
|
|
25745
|
+
}
|
|
25746
|
+
});
|
|
25747
|
+
}
|
|
25748
|
+
getLayerChoices(layer) {
|
|
25749
|
+
const choices = [];
|
|
25750
|
+
if (layer.hasRecords) {
|
|
25751
|
+
choices.push({ label: 'Records', value: 'record' });
|
|
25752
|
+
}
|
|
25753
|
+
if (layer.hasFeatures) {
|
|
25754
|
+
choices.push({ label: 'Features', value: 'features' });
|
|
25755
|
+
}
|
|
25756
|
+
if (layer.hasVectorTiles) {
|
|
25757
|
+
choices.push({ label: 'Vector Tiles', value: 'vectorTiles' });
|
|
25758
|
+
}
|
|
25759
|
+
if (layer.hasMapTiles) {
|
|
25760
|
+
choices.push({ label: 'Map Tiles', value: 'mapTiles' });
|
|
25761
|
+
}
|
|
25762
|
+
return choices;
|
|
25763
|
+
}
|
|
25764
|
+
shouldDisplayLayer(layer) {
|
|
25765
|
+
return (layer.hasRecords ||
|
|
25766
|
+
layer.hasFeatures ||
|
|
25767
|
+
layer.hasVectorTiles ||
|
|
25768
|
+
layer.hasMapTiles);
|
|
25769
|
+
}
|
|
25770
|
+
onLayerTypeSelect(layerName, selectedType) {
|
|
25771
|
+
this.selectedLayerTypes[layerName] = selectedType
|
|
25772
|
+
? selectedType
|
|
25773
|
+
: this.getLayerChoices(layerName)[0]?.value;
|
|
25774
|
+
}
|
|
25775
|
+
async addLayer(layer, layerType) {
|
|
25776
|
+
try {
|
|
25777
|
+
const ogcEndpoint = await new OgcApiEndpoint(this.ogcUrl);
|
|
25778
|
+
let layerUrl;
|
|
25779
|
+
if (layerType === 'vectorTiles') {
|
|
25780
|
+
layerUrl = await ogcEndpoint.getVectorTilesetUrl(layer);
|
|
25781
|
+
}
|
|
25782
|
+
else if (layerType === 'mapTiles') {
|
|
25783
|
+
layerUrl = await ogcEndpoint.getMapTilesetUrl(layer);
|
|
25784
|
+
}
|
|
25785
|
+
else {
|
|
25786
|
+
layerUrl = await ogcEndpoint.getCollectionItemsUrl(layer, {
|
|
25787
|
+
outputFormat: 'json',
|
|
25788
|
+
});
|
|
25789
|
+
}
|
|
25790
|
+
const layerToAdd = {
|
|
25791
|
+
name: layer,
|
|
25792
|
+
url: layerUrl,
|
|
25793
|
+
type: MapContextLayerTypeEnum.OGCAPI,
|
|
25794
|
+
layerType: layerType,
|
|
25795
|
+
};
|
|
25796
|
+
this.layerAdded.emit({ ...layerToAdd, title: layer });
|
|
25797
|
+
}
|
|
25798
|
+
catch (error) {
|
|
25799
|
+
const err = error;
|
|
25800
|
+
console.error('Error adding layer:', err.message);
|
|
25801
|
+
}
|
|
25417
25802
|
}
|
|
25418
25803
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromOgcApiComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25419
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromOgcApiComponent, isStandalone: true, selector: "gn-ui-add-layer-from-ogc-api", inputs: { ogcUrl: "ogcUrl" }, outputs: { layerAdded: "layerAdded" }, ngImport: i0, template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"ogcUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.ogc.urlInput.hint' | translate\"\n class=\"w-96\"\n
|
|
25804
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromOgcApiComponent, isStandalone: true, selector: "gn-ui-add-layer-from-ogc-api", inputs: { ogcUrl: "ogcUrl" }, outputs: { layerAdded: "layerAdded" }, ngImport: i0, template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"ogcUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.ogc.urlInput.hint' | translate\"\n class=\"w-96\"\n ></gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<ng-container *ngFor=\"let layer of layers\">\n <div\n *ngIf=\"shouldDisplayLayer(layer)\"\n class=\"flex items-center justify-between my-2 layer-item-tree\"\n >\n <div class=\"flex flex-col items-start w-full\">\n <p\n class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\"\n [title]=\"layer.name\"\n >\n {{ layer.name }}\n </p>\n <div class=\"flex justify-between items-center w-full\">\n <gn-ui-dropdown-selector\n [title]=\"'Add Layer As' | translate\"\n [choices]=\"getLayerChoices(layer)\"\n (selectValue)=\"onLayerTypeSelect(layer.name, $event)\"\n [selected]=\"selectedLayerTypes[layer.name]\"\n extraBtnClass=\"w-6 h-5 !text-sm !px-2 !py-1\"\n ></gn-ui-dropdown-selector>\n <gn-ui-button\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer.name, selectedLayerTypes[layer.name])\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n >\n <span translate>map.layer.add</span>\n </gn-ui-button>\n </div>\n </div>\n </div>\n</ng-container>\n", styles: [".dropdown-content{display:none}.relative:hover .dropdown-content{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "hint", "required", "disabled"], outputs: ["valueChange"] }] }); }
|
|
25420
25805
|
}
|
|
25421
25806
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromOgcApiComponent, decorators: [{
|
|
25422
25807
|
type: Component,
|
|
25423
|
-
args: [{ selector: 'gn-ui-add-layer-from-ogc-api', standalone: true, imports: [CommonModule, TranslateModule, UiInputsModule], template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"ogcUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.ogc.urlInput.hint' | translate\"\n class=\"w-96\"\n
|
|
25808
|
+
args: [{ selector: 'gn-ui-add-layer-from-ogc-api', standalone: true, imports: [CommonModule, TranslateModule, UiInputsModule], template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"ogcUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.ogc.urlInput.hint' | translate\"\n class=\"w-96\"\n ></gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<ng-container *ngFor=\"let layer of layers\">\n <div\n *ngIf=\"shouldDisplayLayer(layer)\"\n class=\"flex items-center justify-between my-2 layer-item-tree\"\n >\n <div class=\"flex flex-col items-start w-full\">\n <p\n class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\"\n [title]=\"layer.name\"\n >\n {{ layer.name }}\n </p>\n <div class=\"flex justify-between items-center w-full\">\n <gn-ui-dropdown-selector\n [title]=\"'Add Layer As' | translate\"\n [choices]=\"getLayerChoices(layer)\"\n (selectValue)=\"onLayerTypeSelect(layer.name, $event)\"\n [selected]=\"selectedLayerTypes[layer.name]\"\n extraBtnClass=\"w-6 h-5 !text-sm !px-2 !py-1\"\n ></gn-ui-dropdown-selector>\n <gn-ui-button\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer.name, selectedLayerTypes[layer.name])\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n >\n <span translate>map.layer.add</span>\n </gn-ui-button>\n </div>\n </div>\n </div>\n</ng-container>\n", styles: [".dropdown-content{display:none}.relative:hover .dropdown-content{display:block}\n"] }]
|
|
25424
25809
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { ogcUrl: [{
|
|
25425
25810
|
type: Input
|
|
25426
25811
|
}], layerAdded: [{
|
|
@@ -26162,7 +26547,8 @@ class ApiCardComponent {
|
|
|
26162
26547
|
}
|
|
26163
26548
|
ngOnInit() {
|
|
26164
26549
|
this.displayApiFormButton =
|
|
26165
|
-
this.link.accessServiceProtocol === 'ogcFeatures'
|
|
26550
|
+
this.link.accessServiceProtocol === 'ogcFeatures' ||
|
|
26551
|
+
this.link.accessServiceProtocol === 'wfs';
|
|
26166
26552
|
}
|
|
26167
26553
|
ngOnChanges(changes) {
|
|
26168
26554
|
this.currentlyActive =
|
|
@@ -26175,7 +26561,7 @@ class ApiCardComponent {
|
|
|
26175
26561
|
}
|
|
26176
26562
|
}
|
|
26177
26563
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ApiCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26178
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ApiCardComponent, selector: "gn-ui-api-card", inputs: { link: "link", currentLink: "currentLink" }, outputs: { openRecordApiForm: "openRecordApiForm" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden\"\n [ngClass]=\"{ 'cursor-pointer': displayApiFormButton }\"\n (click)=\"openRecordApiFormPanel()\"\n>\n <div\n class=\"font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]\"\n >\n {{ link.name || link.description }}\n </div>\n <div class=\"\">\n <div class=\"flex flex-row justify-between\">\n <span\n class=\"bg-primary-opacity-50 uppercase inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded text-primary-lightest group-hover:bg-primary transition-colors\"\n [ngClass]=\"{\n '!bg-primary': currentlyActive\n }\"\n >{{ link.accessServiceProtocol }}</span\n >\n <gn-ui-copy-text-button\n *ngIf=\"!displayApiFormButton\"\n [text]=\"link.url.toString()\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <button\n *ngIf=\"displayApiFormButton\"\n type=\"button\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"\n !currentlyActive\n ? ('record.metadata.api.form.openForm' | translate)\n : ('record.metadata.api.form.closeForm' | translate)\n \"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n [ngClass]=\"{\n 'text-secondary opacity-100': currentlyActive\n }\"\n >more_horiz</mat-icon\n >\n </button>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type:
|
|
26564
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ApiCardComponent, selector: "gn-ui-api-card", inputs: { link: "link", currentLink: "currentLink" }, outputs: { openRecordApiForm: "openRecordApiForm" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden\"\n [ngClass]=\"{ 'cursor-pointer': displayApiFormButton }\"\n (click)=\"openRecordApiFormPanel()\"\n>\n <div\n class=\"font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]\"\n >\n {{ link.name || link.description }}\n </div>\n <div class=\"\">\n <div class=\"flex flex-row justify-between\">\n <span\n class=\"bg-primary-opacity-50 uppercase inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded text-primary-lightest group-hover:bg-primary transition-colors\"\n [ngClass]=\"{\n '!bg-primary': currentlyActive\n }\"\n >{{ link.accessServiceProtocol }}</span\n >\n <gn-ui-copy-text-button\n *ngIf=\"!displayApiFormButton\"\n [text]=\"link.url.toString()\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <button\n *ngIf=\"displayApiFormButton\"\n type=\"button\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"\n !currentlyActive\n ? ('record.metadata.api.form.openForm' | translate)\n : ('record.metadata.api.form.closeForm' | translate)\n \"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n [ngClass]=\"{\n 'text-secondary opacity-100': currentlyActive\n }\"\n >more_horiz</mat-icon\n >\n </button>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26179
26565
|
}
|
|
26180
26566
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ApiCardComponent, decorators: [{
|
|
26181
26567
|
type: Component,
|
|
@@ -26306,7 +26692,7 @@ class DownloadsListComponent {
|
|
|
26306
26692
|
return getBadgeColor(getFileFormat(link));
|
|
26307
26693
|
}
|
|
26308
26694
|
isFromWfs(link) {
|
|
26309
|
-
return link.type === '
|
|
26695
|
+
return link.type === 'download' && link.accessServiceProtocol === 'wfs';
|
|
26310
26696
|
}
|
|
26311
26697
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadsListComponent, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26312
26698
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DownloadsListComponent, selector: "gn-ui-downloads-list", inputs: { links: "links" }, ngImport: i0, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div\n class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: DownloadItemComponent, selector: "gn-ui-download-item", inputs: ["link", "color", "format", "isFromWfs"], outputs: ["exportUrl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
@@ -26338,14 +26724,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26338
26724
|
}] } });
|
|
26339
26725
|
|
|
26340
26726
|
class LinkCardComponent {
|
|
26727
|
+
constructor() {
|
|
26728
|
+
this.compact = false;
|
|
26729
|
+
}
|
|
26730
|
+
get title() {
|
|
26731
|
+
if (this.link.name && this.link.description) {
|
|
26732
|
+
return `${this.link.name} | ${this.link.description}`;
|
|
26733
|
+
}
|
|
26734
|
+
return this.link.name || this.link.description || '';
|
|
26735
|
+
}
|
|
26341
26736
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LinkCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26342
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LinkCardComponent, selector: "gn-ui-link-card", inputs: { link: "link" }, ngImport: i0, template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"flex flex-col justify-between group
|
|
26737
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LinkCardComponent, isStandalone: true, selector: "gn-ui-link-card", inputs: { link: "link", compact: "compact" }, ngImport: i0, template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"flex flex-col justify-between group grow py-5 px-5 bg-white rounded border-gray-300 filter card-shadow overflow-hidden\"\n [ngClass]=\"{ 'h-40': !compact }\"\n [title]=\"title\"\n>\n <ng-container *ngIf=\"!compact; else compactTpl\">\n <div class=\"max-h-24 overflow-hidden text-ellipsis\">\n <p\n class=\"font-title font-medium text-21 text-black break-words mb-1 line-clamp-2\"\n >\n {{ link.name }}\n </p>\n <p class=\"font-medium text-sm break-words\">\n {{ link.description }}\n </p>\n <p\n *ngIf=\"!link.name && !link.description\"\n class=\"font-medium text-sm break-words truncate\"\n >\n {{ link.url }}\n </p>\n </div>\n <div>\n <mat-icon class=\"material-symbols-outlined card-icon\"\n >open_in_new</mat-icon\n >\n </div>\n </ng-container>\n <ng-template #compactTpl>\n <div class=\"flex items-center justify-between gap-4\">\n <p\n class=\"overflow-hidden font-title font-medium text-21 text-black text-ellipsis whitespace-nowrap\"\n >\n {{ link.name || link.description }}\n </p>\n <mat-icon class=\"material-symbols-outlined card-icon flex-shrink-0\"\n >open_in_new</mat-icon\n >\n </div>\n </ng-template>\n</a>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26343
26738
|
}
|
|
26344
26739
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LinkCardComponent, decorators: [{
|
|
26345
26740
|
type: Component,
|
|
26346
|
-
args: [{ selector: 'gn-ui-link-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"flex flex-col justify-between group
|
|
26741
|
+
args: [{ selector: 'gn-ui-link-card', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, MatIconModule], template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"flex flex-col justify-between group grow py-5 px-5 bg-white rounded border-gray-300 filter card-shadow overflow-hidden\"\n [ngClass]=\"{ 'h-40': !compact }\"\n [title]=\"title\"\n>\n <ng-container *ngIf=\"!compact; else compactTpl\">\n <div class=\"max-h-24 overflow-hidden text-ellipsis\">\n <p\n class=\"font-title font-medium text-21 text-black break-words mb-1 line-clamp-2\"\n >\n {{ link.name }}\n </p>\n <p class=\"font-medium text-sm break-words\">\n {{ link.description }}\n </p>\n <p\n *ngIf=\"!link.name && !link.description\"\n class=\"font-medium text-sm break-words truncate\"\n >\n {{ link.url }}\n </p>\n </div>\n <div>\n <mat-icon class=\"material-symbols-outlined card-icon\"\n >open_in_new</mat-icon\n >\n </div>\n </ng-container>\n <ng-template #compactTpl>\n <div class=\"flex items-center justify-between gap-4\">\n <p\n class=\"overflow-hidden font-title font-medium text-21 text-black text-ellipsis whitespace-nowrap\"\n >\n {{ link.name || link.description }}\n </p>\n <mat-icon class=\"material-symbols-outlined card-icon flex-shrink-0\"\n >open_in_new</mat-icon\n >\n </div>\n </ng-template>\n</a>\n" }]
|
|
26347
26742
|
}], propDecorators: { link: [{
|
|
26348
26743
|
type: Input
|
|
26744
|
+
}], compact: [{
|
|
26745
|
+
type: Input
|
|
26349
26746
|
}] } });
|
|
26350
26747
|
|
|
26351
26748
|
class MarkdownParserComponent {
|
|
@@ -26372,7 +26769,7 @@ class MarkdownEditorComponent {
|
|
|
26372
26769
|
this.textContentChanged.emit(this.textContent);
|
|
26373
26770
|
}
|
|
26374
26771
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26375
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownEditorComponent, isStandalone: true, selector: "gn-ui-markdown-editor", inputs: { preview: "preview", helperText: "helperText", placeholder: "placeholder", textContent: "textContent" }, outputs: { textContentChanged: "textContentChanged" }, ngImport: i0, template: "<div class=\"h-full flex flex-col\">\n <p class=\"flex-none mb-2 font-medium text-sm text-gray-900\">\n {{ helperText }}\n </p>\n <div class=\"flex-1\" [hidden]=\"preview\">\n <gn-ui-text-area\n [placeholder]=\"placeholder\"\n [value]=\"textContent\"\n (valueChange)=\"textContentChangedHandler($event)\"\n ></gn-ui-text-area>\n </div>\n <div\n class=\"flex-1 border border-gray-800 rounded overflow-y-scroll\"\n [hidden]=\"!preview\"\n >\n <gn-ui-markdown-parser [textContent]=\"textContent\"></gn-ui-markdown-parser>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "ngmodule", type: TranslateModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26772
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownEditorComponent, isStandalone: true, selector: "gn-ui-markdown-editor", inputs: { preview: "preview", helperText: "helperText", placeholder: "placeholder", textContent: "textContent" }, outputs: { textContentChanged: "textContentChanged" }, ngImport: i0, template: "<div class=\"h-full flex flex-col\">\n <p class=\"flex-none mb-2 font-medium text-sm text-gray-900\">\n {{ helperText }}\n </p>\n <div class=\"flex-1\" [hidden]=\"preview\">\n <gn-ui-text-area\n [placeholder]=\"placeholder\"\n [value]=\"textContent\"\n (valueChange)=\"textContentChangedHandler($event)\"\n ></gn-ui-text-area>\n </div>\n <div\n class=\"flex-1 border border-gray-800 rounded overflow-y-scroll\"\n [hidden]=\"!preview\"\n >\n <gn-ui-markdown-parser [textContent]=\"textContent\"></gn-ui-markdown-parser>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "ngmodule", type: TranslateModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26376
26773
|
}
|
|
26377
26774
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownEditorComponent, decorators: [{
|
|
26378
26775
|
type: Component,
|
|
@@ -26807,11 +27204,9 @@ class RecordApiFormComponent {
|
|
|
26807
27204
|
this.offset$ = new BehaviorSubject('');
|
|
26808
27205
|
this.limit$ = new BehaviorSubject('');
|
|
26809
27206
|
this.format$ = new BehaviorSubject('');
|
|
26810
|
-
this.
|
|
26811
|
-
|
|
26812
|
-
|
|
26813
|
-
];
|
|
26814
|
-
this.apiQueryUrl$ = combineLatest([this.offset$, this.limit$, this.format$]).pipe(map$2(([offset, limit, format]) => {
|
|
27207
|
+
this.supportOffset = true;
|
|
27208
|
+
this.outputFormats = [{ value: 'json', label: 'JSON' }];
|
|
27209
|
+
this.apiQueryUrl$ = combineLatest([this.offset$, this.limit$, this.format$]).pipe(switchMap(async ([offset, limit, format]) => {
|
|
26815
27210
|
let outputUrl;
|
|
26816
27211
|
if (this.apiBaseUrl) {
|
|
26817
27212
|
const url = new URL(this.apiBaseUrl);
|
|
@@ -26826,13 +27221,32 @@ class RecordApiFormComponent {
|
|
|
26826
27221
|
}
|
|
26827
27222
|
outputUrl = url.toString();
|
|
26828
27223
|
}
|
|
27224
|
+
if (this.accessServiceProtocol === 'wfs') {
|
|
27225
|
+
const wfsEndpoint = new WfsEndpoint(this.apiBaseUrl);
|
|
27226
|
+
if (await wfsEndpoint.isReady()) {
|
|
27227
|
+
const options = {
|
|
27228
|
+
outputFormat: format,
|
|
27229
|
+
startIndex: Number(offset),
|
|
27230
|
+
};
|
|
27231
|
+
if (limit !== '-1') {
|
|
27232
|
+
options['maxFeatures'] = Number(limit);
|
|
27233
|
+
}
|
|
27234
|
+
outputUrl = wfsEndpoint.getFeatureUrl(this.apiFeatureType, options);
|
|
27235
|
+
}
|
|
27236
|
+
}
|
|
26829
27237
|
return outputUrl;
|
|
26830
27238
|
}));
|
|
26831
27239
|
this.noLimitChecked$ = this.limit$.pipe(map$2((limit) => limit === '-1' || limit === ''));
|
|
26832
27240
|
this.displayLimit$ = this.limit$.pipe(map$2((limit) => (limit !== '-1' ? limit : '')));
|
|
26833
27241
|
}
|
|
26834
27242
|
set apiLink(value) {
|
|
26835
|
-
this.
|
|
27243
|
+
this.outputFormats = [{ value: 'json', label: 'JSON' }];
|
|
27244
|
+
this.accessServiceProtocol = value ? value.accessServiceProtocol : undefined;
|
|
27245
|
+
this.apiFeatureType = value ? value.name : undefined;
|
|
27246
|
+
if (value) {
|
|
27247
|
+
this.apiBaseUrl = value.url.href;
|
|
27248
|
+
this.parseOutputFormats();
|
|
27249
|
+
}
|
|
26836
27250
|
this.resetUrl();
|
|
26837
27251
|
}
|
|
26838
27252
|
setOffset(value) {
|
|
@@ -26850,19 +27264,61 @@ class RecordApiFormComponent {
|
|
|
26850
27264
|
this.limit$.next(DEFAULT_PARAMS.LIMIT);
|
|
26851
27265
|
this.format$.next(DEFAULT_PARAMS.FORMAT);
|
|
26852
27266
|
}
|
|
27267
|
+
parseOutputFormats() {
|
|
27268
|
+
const apiUrl = this.apiBaseUrl.slice(-1) === '?'
|
|
27269
|
+
? this.apiBaseUrl.slice(0, -1)
|
|
27270
|
+
: this.apiBaseUrl;
|
|
27271
|
+
this.getOutputFormats(apiUrl, this.accessServiceProtocol).then((outputFormats) => {
|
|
27272
|
+
let formatsList = [];
|
|
27273
|
+
if ('itemFormats' in outputFormats) {
|
|
27274
|
+
formatsList = this.mapFormats(outputFormats.itemFormats);
|
|
27275
|
+
}
|
|
27276
|
+
else if ('outputFormats' in outputFormats) {
|
|
27277
|
+
formatsList = this.mapFormats(outputFormats.outputFormats);
|
|
27278
|
+
}
|
|
27279
|
+
this.outputFormats = this.outputFormats.concat(formatsList.filter(Boolean));
|
|
27280
|
+
this.outputFormats = this.outputFormats
|
|
27281
|
+
.filter((format, index, self) => index === self.findIndex((t) => t.value === format.value))
|
|
27282
|
+
.sort((a, b) => a.label.localeCompare(b.label));
|
|
27283
|
+
});
|
|
27284
|
+
}
|
|
27285
|
+
mapFormats(formats) {
|
|
27286
|
+
return formats.map((format) => {
|
|
27287
|
+
const normalizedFormat = mimeTypeToFormat(format);
|
|
27288
|
+
if (normalizedFormat) {
|
|
27289
|
+
return {
|
|
27290
|
+
label: normalizedFormat.toUpperCase(),
|
|
27291
|
+
value: normalizedFormat,
|
|
27292
|
+
};
|
|
27293
|
+
}
|
|
27294
|
+
return null;
|
|
27295
|
+
});
|
|
27296
|
+
}
|
|
27297
|
+
async getOutputFormats(url, accessServiceProtocol) {
|
|
27298
|
+
if (accessServiceProtocol === 'wfs') {
|
|
27299
|
+
const endpoint = await new WfsEndpoint(url).isReady();
|
|
27300
|
+
this.supportOffset = endpoint.supportsStartIndex();
|
|
27301
|
+
return endpoint.getServiceInfo();
|
|
27302
|
+
}
|
|
27303
|
+
else {
|
|
27304
|
+
const endpoint = await new OgcApiEndpoint(url);
|
|
27305
|
+
const firstCollection = (await endpoint.featureCollections)[0];
|
|
27306
|
+
return endpoint.getCollectionInfo(firstCollection);
|
|
27307
|
+
}
|
|
27308
|
+
}
|
|
26853
27309
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26854
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordApiFormComponent, selector: "gn-ui-record-api-form", inputs: { apiLink: "apiLink" }, ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate
|
|
27310
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordApiFormComponent, selector: "gn-ui-record-api-form", inputs: { apiLink: "apiLink" }, ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 relative\">\n <p class=\"text-sm\" [class.text-gray-600]=\"!supportOffset\" translate>\n record.metadata.api.form.offset\n </p>\n <div class=\"flex items-center\">\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n [disabled]=\"!supportOffset\"\n (valueChange)=\"supportOffset ? setOffset($event) : null\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div\n *ngIf=\"!supportOffset\"\n class=\"flex items-center gap-2 text-orange-500 z-10 ml-3\"\n >\n <span\n class=\"material-symbols-outlined\"\n matTooltip=\"Not supported on this service\"\n >\n warning\n </span>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"outputFormats\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "hint", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26855
27311
|
}
|
|
26856
27312
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, decorators: [{
|
|
26857
27313
|
type: Component,
|
|
26858
|
-
args: [{ selector: 'gn-ui-record-api-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate
|
|
27314
|
+
args: [{ selector: 'gn-ui-record-api-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 relative\">\n <p class=\"text-sm\" [class.text-gray-600]=\"!supportOffset\" translate>\n record.metadata.api.form.offset\n </p>\n <div class=\"flex items-center\">\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n [disabled]=\"!supportOffset\"\n (valueChange)=\"supportOffset ? setOffset($event) : null\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div\n *ngIf=\"!supportOffset\"\n class=\"flex items-center gap-2 text-orange-500 z-10 ml-3\"\n >\n <span\n class=\"material-symbols-outlined\"\n matTooltip=\"Not supported on this service\"\n >\n warning\n </span>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"outputFormats\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"] }]
|
|
26859
27315
|
}], propDecorators: { apiLink: [{
|
|
26860
27316
|
type: Input
|
|
26861
27317
|
}] } });
|
|
26862
27318
|
|
|
26863
27319
|
class RelatedRecordCardComponent {
|
|
26864
27320
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26865
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RelatedRecordCardComponent, selector: "gn-ui-related-record-card", inputs: { record: "record" }, ngImport: i0, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type:
|
|
27321
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RelatedRecordCardComponent, selector: "gn-ui-related-record-card", inputs: { record: "record" }, ngImport: i0, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i1$7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26866
27322
|
}
|
|
26867
27323
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, decorators: [{
|
|
26868
27324
|
type: Component,
|
|
@@ -26958,48 +27414,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26958
27414
|
}] } });
|
|
26959
27415
|
|
|
26960
27416
|
class CarouselComponent {
|
|
27417
|
+
get isFirstStep() {
|
|
27418
|
+
return this.currentStep === 0;
|
|
27419
|
+
}
|
|
27420
|
+
get isLastStep() {
|
|
27421
|
+
return this.currentStep === this.steps.length - 1;
|
|
27422
|
+
}
|
|
27423
|
+
get stepsCount() {
|
|
27424
|
+
return this.steps.length;
|
|
27425
|
+
}
|
|
26961
27426
|
constructor(changeDetector) {
|
|
26962
27427
|
this.changeDetector = changeDetector;
|
|
26963
27428
|
this.containerClass = '';
|
|
26964
|
-
this.stepsContainerClass = '';
|
|
27429
|
+
this.stepsContainerClass = 'w-full bottom-0 top-auto';
|
|
27430
|
+
this.currentStepChange = new EventEmitter();
|
|
26965
27431
|
this.steps = [];
|
|
26966
|
-
this.
|
|
27432
|
+
this.currentStep = 0;
|
|
27433
|
+
this.refreshSteps = () => {
|
|
27434
|
+
this.steps = this.emblaApi.scrollSnapList();
|
|
27435
|
+
this.currentStep = this.emblaApi.selectedScrollSnap();
|
|
27436
|
+
this.currentStepChange.emit(this.currentStep);
|
|
27437
|
+
this.changeDetector.detectChanges();
|
|
27438
|
+
};
|
|
26967
27439
|
}
|
|
26968
27440
|
ngAfterViewInit() {
|
|
26969
27441
|
this.emblaApi = EmblaCarousel(this.carouselOverflowContainer.nativeElement, {
|
|
26970
27442
|
duration: 15,
|
|
26971
27443
|
});
|
|
26972
|
-
const refreshSteps = () => {
|
|
26973
|
-
this.steps = this.emblaApi.scrollSnapList();
|
|
26974
|
-
this.selectedStep = this.emblaApi.selectedScrollSnap();
|
|
26975
|
-
this.changeDetector.detectChanges();
|
|
26976
|
-
};
|
|
26977
27444
|
this.emblaApi
|
|
26978
|
-
.on('init', refreshSteps)
|
|
26979
|
-
.on('reInit', refreshSteps)
|
|
26980
|
-
.on('select', refreshSteps);
|
|
27445
|
+
.on('init', this.refreshSteps)
|
|
27446
|
+
.on('reInit', this.refreshSteps)
|
|
27447
|
+
.on('select', this.refreshSteps);
|
|
26981
27448
|
}
|
|
26982
27449
|
scrollToStep(stepIndex) {
|
|
26983
27450
|
this.emblaApi.scrollTo(stepIndex);
|
|
26984
27451
|
}
|
|
27452
|
+
slideToPrevious() {
|
|
27453
|
+
if (this.isFirstStep)
|
|
27454
|
+
return;
|
|
27455
|
+
this.emblaApi.scrollPrev();
|
|
27456
|
+
}
|
|
27457
|
+
slideToNext() {
|
|
27458
|
+
if (this.isLastStep)
|
|
27459
|
+
return;
|
|
27460
|
+
this.emblaApi.scrollNext();
|
|
27461
|
+
}
|
|
26985
27462
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26986
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"
|
|
27463
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, isStandalone: true, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, outputs: { currentStepChange: "currentStepChange" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"w-full\">\n <div class=\"carousel-container flex\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n *ngIf=\"steps.length > 1\"\n class=\"absolute flex flex-row justify-center gap-[14px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"currentStep === i ? 'bg-primary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-7px;top:-7px;width:20px;height:20px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26987
27464
|
}
|
|
26988
27465
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, decorators: [{
|
|
26989
27466
|
type: Component,
|
|
26990
|
-
args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"
|
|
26991
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: {
|
|
27467
|
+
args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], template: "<div #carouselOverflowContainer class=\"w-full\">\n <div class=\"carousel-container flex\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n *ngIf=\"steps.length > 1\"\n class=\"absolute flex flex-row justify-center gap-[14px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"currentStep === i ? 'bg-primary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-7px;top:-7px;width:20px;height:20px}\n"] }]
|
|
27468
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { carouselOverflowContainer: [{
|
|
27469
|
+
type: ViewChild,
|
|
27470
|
+
args: ['carouselOverflowContainer']
|
|
27471
|
+
}], containerClass: [{
|
|
26992
27472
|
type: Input
|
|
26993
27473
|
}], stepsContainerClass: [{
|
|
26994
27474
|
type: Input
|
|
26995
|
-
}],
|
|
26996
|
-
type:
|
|
26997
|
-
args: ['carouselOverflowContainer']
|
|
27475
|
+
}], currentStepChange: [{
|
|
27476
|
+
type: Output
|
|
26998
27477
|
}] } });
|
|
26999
27478
|
|
|
27000
27479
|
class FormFieldWrapperComponent {
|
|
27001
27480
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27002
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldWrapperComponent, isStandalone: true, selector: "gn-ui-form-field-wrapper", inputs: { label: "label", hint: "hint" }, ngImport: i0, template: "<div class=\"h-full flex flex-col\">\n <div class=\"flex-none w-full flex flex-row items-center\">\n <span class=\"flex-none font-bold\">{{ label }}</span>\n <div class=\"flex-1 flex justify-end items-center\">\n <ng-content select=\"[form-field-interaction]\"></ng-content>\n <span\n class=\"material-symbols-outlined m-2 gn-ui-icon-small\"\n [matTooltip]=\"hint\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n <div class=\"flex-1\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type:
|
|
27481
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldWrapperComponent, isStandalone: true, selector: "gn-ui-form-field-wrapper", inputs: { label: "label", hint: "hint" }, ngImport: i0, template: "<div class=\"h-full flex flex-col\">\n <div class=\"flex-none w-full flex flex-row items-center\">\n <span class=\"flex-none font-bold\">{{ label }}</span>\n <div class=\"flex-1 flex justify-end items-center\">\n <ng-content select=\"[form-field-interaction]\"></ng-content>\n <span\n class=\"material-symbols-outlined m-2 gn-ui-icon-small\"\n [matTooltip]=\"hint\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n <div class=\"flex-1\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27003
27482
|
}
|
|
27004
27483
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldWrapperComponent, decorators: [{
|
|
27005
27484
|
type: Component,
|
|
@@ -27148,17 +27627,87 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27148
27627
|
args: ['innerContainer']
|
|
27149
27628
|
}] } });
|
|
27150
27629
|
|
|
27630
|
+
class BlockListComponent {
|
|
27631
|
+
get pages() {
|
|
27632
|
+
return new Array(this.pagesCount).fill(0).map((_, i) => i);
|
|
27633
|
+
}
|
|
27634
|
+
get isFirstPage() {
|
|
27635
|
+
return this.currentPage === 0;
|
|
27636
|
+
}
|
|
27637
|
+
get isLastPage() {
|
|
27638
|
+
return this.currentPage === this.pagesCount - 1;
|
|
27639
|
+
}
|
|
27640
|
+
get pagesCount() {
|
|
27641
|
+
return this.blocks ? Math.ceil(this.blocks.length / this.pageSize) : 1;
|
|
27642
|
+
}
|
|
27643
|
+
constructor(changeDetector) {
|
|
27644
|
+
this.changeDetector = changeDetector;
|
|
27645
|
+
this.pageSize = 5;
|
|
27646
|
+
this.containerClass = '';
|
|
27647
|
+
this.paginationContainerClass = 'w-full bottom-0 top-auto';
|
|
27648
|
+
this.minHeight = 0;
|
|
27649
|
+
this.currentPage = 0;
|
|
27650
|
+
this.refreshBlocksVisibility = () => {
|
|
27651
|
+
this.blocks.forEach((block, index) => {
|
|
27652
|
+
block.nativeElement.style.display =
|
|
27653
|
+
index >= this.currentPage * this.pageSize &&
|
|
27654
|
+
index < (this.currentPage + 1) * this.pageSize
|
|
27655
|
+
? null
|
|
27656
|
+
: 'none';
|
|
27657
|
+
});
|
|
27658
|
+
};
|
|
27659
|
+
}
|
|
27660
|
+
ngAfterViewInit() {
|
|
27661
|
+
this.blocks.changes.subscribe(this.refreshBlocksVisibility);
|
|
27662
|
+
this.refreshBlocksVisibility();
|
|
27663
|
+
// we store the first height as the min-height of the list container
|
|
27664
|
+
this.minHeight = this.blockContainer.nativeElement.clientHeight;
|
|
27665
|
+
this.changeDetector.detectChanges();
|
|
27666
|
+
}
|
|
27667
|
+
goToPage(index) {
|
|
27668
|
+
this.currentPage = Math.max(Math.min(index, this.pagesCount - 1), 0);
|
|
27669
|
+
this.changeDetector.detectChanges();
|
|
27670
|
+
this.refreshBlocksVisibility();
|
|
27671
|
+
}
|
|
27672
|
+
previousPage() {
|
|
27673
|
+
if (this.isFirstPage)
|
|
27674
|
+
return;
|
|
27675
|
+
this.goToPage(this.currentPage - 1);
|
|
27676
|
+
}
|
|
27677
|
+
nextPage() {
|
|
27678
|
+
if (this.isLastPage)
|
|
27679
|
+
return;
|
|
27680
|
+
this.goToPage(this.currentPage + 1);
|
|
27681
|
+
}
|
|
27682
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: BlockListComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27683
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: BlockListComponent, isStandalone: true, selector: "gn-ui-block-list", inputs: { pageSize: "pageSize", containerClass: "containerClass", paginationContainerClass: "paginationContainerClass" }, queries: [{ propertyName: "blocks", predicate: ["block"], read: ElementRef }], viewQueries: [{ propertyName: "blockContainer", first: true, predicate: ["blockContainer"], descendants: true }], ngImport: i0, template: "<div\n class=\"block-list-container flex flex-col\"\n #blockContainer\n [ngClass]=\"containerClass\"\n [ngStyle]=\"{ minHeight: minHeight + 'px' }\"\n>\n <ng-content></ng-content>\n</div>\n<div\n *ngIf=\"pagesCount > 1\"\n class=\"absolute flex flex-row justify-center gap-[14px] p-1\"\n [ngClass]=\"paginationContainerClass\"\n>\n <button\n *ngFor=\"let page of pages\"\n class=\"list-page-dot\"\n (click)=\"goToPage(page)\"\n [ngClass]=\"currentPage === page ? 'bg-primary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .block-list-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.list-page-dot{width:6px;height:6px;border-radius:6px;position:relative}.list-page-dot:after{content:\"\";position:absolute;left:-7px;top:-7px;width:20px;height:20px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27684
|
+
}
|
|
27685
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: BlockListComponent, decorators: [{
|
|
27686
|
+
type: Component,
|
|
27687
|
+
args: [{ selector: 'gn-ui-block-list', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], template: "<div\n class=\"block-list-container flex flex-col\"\n #blockContainer\n [ngClass]=\"containerClass\"\n [ngStyle]=\"{ minHeight: minHeight + 'px' }\"\n>\n <ng-content></ng-content>\n</div>\n<div\n *ngIf=\"pagesCount > 1\"\n class=\"absolute flex flex-row justify-center gap-[14px] p-1\"\n [ngClass]=\"paginationContainerClass\"\n>\n <button\n *ngFor=\"let page of pages\"\n class=\"list-page-dot\"\n (click)=\"goToPage(page)\"\n [ngClass]=\"currentPage === page ? 'bg-primary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .block-list-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.list-page-dot{width:6px;height:6px;border-radius:6px;position:relative}.list-page-dot:after{content:\"\";position:absolute;left:-7px;top:-7px;width:20px;height:20px}\n"] }]
|
|
27688
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { pageSize: [{
|
|
27689
|
+
type: Input
|
|
27690
|
+
}], containerClass: [{
|
|
27691
|
+
type: Input
|
|
27692
|
+
}], paginationContainerClass: [{
|
|
27693
|
+
type: Input
|
|
27694
|
+
}], blocks: [{
|
|
27695
|
+
type: ContentChildren,
|
|
27696
|
+
args: ['block', { read: ElementRef }]
|
|
27697
|
+
}], blockContainer: [{
|
|
27698
|
+
type: ViewChild,
|
|
27699
|
+
args: ['blockContainer']
|
|
27700
|
+
}] } });
|
|
27701
|
+
|
|
27151
27702
|
class UiLayoutModule {
|
|
27152
27703
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
27153
27704
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, declarations: [ExpandablePanelComponent,
|
|
27154
27705
|
StickyHeaderComponent,
|
|
27155
27706
|
AnchorLinkDirective,
|
|
27156
|
-
ExpandablePanelButtonComponent,
|
|
27157
|
-
CarouselComponent], imports: [CommonModule, MatIconModule, i1$1.TranslateModule], exports: [ExpandablePanelComponent,
|
|
27707
|
+
ExpandablePanelButtonComponent], imports: [CommonModule, MatIconModule, i1$1.TranslateModule], exports: [ExpandablePanelComponent,
|
|
27158
27708
|
StickyHeaderComponent,
|
|
27159
27709
|
AnchorLinkDirective,
|
|
27160
|
-
ExpandablePanelButtonComponent
|
|
27161
|
-
CarouselComponent] }); }
|
|
27710
|
+
ExpandablePanelButtonComponent] }); }
|
|
27162
27711
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, imports: [CommonModule, MatIconModule, TranslateModule.forChild()] }); }
|
|
27163
27712
|
}
|
|
27164
27713
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, decorators: [{
|
|
@@ -27170,14 +27719,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27170
27719
|
StickyHeaderComponent,
|
|
27171
27720
|
AnchorLinkDirective,
|
|
27172
27721
|
ExpandablePanelButtonComponent,
|
|
27173
|
-
CarouselComponent,
|
|
27174
27722
|
],
|
|
27175
27723
|
exports: [
|
|
27176
27724
|
ExpandablePanelComponent,
|
|
27177
27725
|
StickyHeaderComponent,
|
|
27178
27726
|
AnchorLinkDirective,
|
|
27179
27727
|
ExpandablePanelButtonComponent,
|
|
27180
|
-
CarouselComponent,
|
|
27181
27728
|
],
|
|
27182
27729
|
}]
|
|
27183
27730
|
}] });
|
|
@@ -27187,7 +27734,7 @@ class UserPreviewComponent {
|
|
|
27187
27734
|
return (this.user.name + ' ' + this.user.surname).trim();
|
|
27188
27735
|
}
|
|
27189
27736
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UserPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27190
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: UserPreviewComponent, selector: "gn-ui-user-preview", inputs: { user: "user", avatarPlaceholder: "avatarPlaceholder" }, ngImport: i0, template: "<figure class=\"text-center\">\n <div\n class=\"w-12 h-12 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n", dependencies: [{ kind: "directive", type:
|
|
27737
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: UserPreviewComponent, selector: "gn-ui-user-preview", inputs: { user: "user", avatarPlaceholder: "avatarPlaceholder" }, ngImport: i0, template: "<figure class=\"text-center\">\n <div\n class=\"w-12 h-12 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n", dependencies: [{ kind: "directive", type: i2$2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: AvatarComponent, selector: "gn-ui-avatar", inputs: ["avatarUrl", "avatarPlaceholder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27191
27738
|
}
|
|
27192
27739
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UserPreviewComponent, decorators: [{
|
|
27193
27740
|
type: Component,
|
|
@@ -27198,6 +27745,112 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27198
27745
|
type: Input
|
|
27199
27746
|
}] } });
|
|
27200
27747
|
|
|
27748
|
+
class TimeSincePipe {
|
|
27749
|
+
constructor(translate) {
|
|
27750
|
+
this.translate = translate;
|
|
27751
|
+
}
|
|
27752
|
+
transform(value) {
|
|
27753
|
+
if (isNaN(value.getTime())) {
|
|
27754
|
+
throw new Error('Invalid Date');
|
|
27755
|
+
}
|
|
27756
|
+
const maintenant = new Date();
|
|
27757
|
+
let locale;
|
|
27758
|
+
switch (this.translate.currentLang) {
|
|
27759
|
+
case 'fr':
|
|
27760
|
+
locale = fr$1;
|
|
27761
|
+
break;
|
|
27762
|
+
case 'de':
|
|
27763
|
+
locale = de$1;
|
|
27764
|
+
break;
|
|
27765
|
+
case 'es':
|
|
27766
|
+
locale = es$1;
|
|
27767
|
+
break;
|
|
27768
|
+
case 'it':
|
|
27769
|
+
locale = it$1;
|
|
27770
|
+
break;
|
|
27771
|
+
case 'nl':
|
|
27772
|
+
locale = nl$1;
|
|
27773
|
+
break;
|
|
27774
|
+
case 'pt':
|
|
27775
|
+
locale = pt$1;
|
|
27776
|
+
break;
|
|
27777
|
+
case 'sk':
|
|
27778
|
+
locale = sk;
|
|
27779
|
+
break;
|
|
27780
|
+
case 'en':
|
|
27781
|
+
default:
|
|
27782
|
+
locale = enUS;
|
|
27783
|
+
break;
|
|
27784
|
+
}
|
|
27785
|
+
return formatDistance(value, maintenant, {
|
|
27786
|
+
addSuffix: true,
|
|
27787
|
+
locale: locale,
|
|
27788
|
+
});
|
|
27789
|
+
}
|
|
27790
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TimeSincePipe, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
27791
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: TimeSincePipe, isStandalone: true, name: "timeSince" }); }
|
|
27792
|
+
}
|
|
27793
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TimeSincePipe, decorators: [{
|
|
27794
|
+
type: Pipe,
|
|
27795
|
+
args: [{
|
|
27796
|
+
name: 'timeSince',
|
|
27797
|
+
standalone: true,
|
|
27798
|
+
}]
|
|
27799
|
+
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; } });
|
|
27800
|
+
|
|
27801
|
+
class UserFeedbackItemComponent {
|
|
27802
|
+
constructor() {
|
|
27803
|
+
this.newUserFeedbackAnswer = new EventEmitter();
|
|
27804
|
+
this.isAnAnswer = false;
|
|
27805
|
+
this.newAnswer = '';
|
|
27806
|
+
this.isAnswerEmpty = true;
|
|
27807
|
+
}
|
|
27808
|
+
ngOnInit() {
|
|
27809
|
+
this.isAnAnswer = !!this.userFeedbackParent.parentUuid;
|
|
27810
|
+
}
|
|
27811
|
+
onNewAnswerValueChange() {
|
|
27812
|
+
this.isAnswerEmpty = this.newAnswer.length === 0;
|
|
27813
|
+
}
|
|
27814
|
+
publishNewAnswer() {
|
|
27815
|
+
if (this.newAnswer.trim() === '')
|
|
27816
|
+
return;
|
|
27817
|
+
const newAnswer = {
|
|
27818
|
+
...this.userFeedbackParent,
|
|
27819
|
+
uuid: undefined,
|
|
27820
|
+
published: true,
|
|
27821
|
+
comment: this.newAnswer,
|
|
27822
|
+
parentUuid: this.userFeedbackParent.uuid,
|
|
27823
|
+
authorUserId: this.activeUser?.id,
|
|
27824
|
+
authorEmail: this.activeUser?.email,
|
|
27825
|
+
date: new Date(),
|
|
27826
|
+
authorName: `${this.activeUser?.name} ${this.activeUser?.surname}`,
|
|
27827
|
+
};
|
|
27828
|
+
this.newUserFeedbackAnswer.emit(newAnswer);
|
|
27829
|
+
this.newAnswer = '';
|
|
27830
|
+
this.onNewAnswerValueChange();
|
|
27831
|
+
}
|
|
27832
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UserFeedbackItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27833
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: UserFeedbackItemComponent, selector: "gn-ui-user-feedback-item", inputs: { userFeedbackParent: "userFeedbackParent", userFeedBacksAnswers: "userFeedBacksAnswers", isActiveUserEditor: "isActiveUserEditor", activeUser: "activeUser", isLastComment: "isLastComment", isAddUserFeedbackLoading: "isAddUserFeedbackLoading" }, outputs: { newUserFeedbackAnswer: "newUserFeedbackAnswer" }, ngImport: i0, template: "<div\n *ngIf=\"userFeedbackParent.published\"\n class=\"flex flex-col bg-white rounded w-full\"\n [ngClass]=\"[isAnAnswer ? 'ps-4 ' : 'p-4']\"\n>\n <div class=\"flex flex-row\">\n <div class=\"avatar\">\n <img\n class=\"rounded-full\"\n [src]=\"userFeedbackParent.avatarUrl\"\n alt=\"avatar\"\n />\n </div>\n <div class=\"p-4 flex flex-col\">\n <span>{{ userFeedbackParent.authorName }}</span>\n <span> {{ userFeedbackParent.date | timeSince }}</span>\n </div>\n </div>\n <div data-cy=\"commentText\" class=\"mt-4 whitespace-pre-line\">\n {{ userFeedbackParent.comment }}\n </div>\n <div\n class=\"w-full\"\n *ngFor=\"let userFeedBacksAnswer of userFeedBacksAnswers; let last = last\"\n >\n <hr class=\"-mx-4 my-6\" />\n <gn-ui-user-feedback-item\n [userFeedbackParent]=\"userFeedBacksAnswer\"\n [isLastComment]=\"last\"\n ></gn-ui-user-feedback-item>\n </div>\n\n <div *ngIf=\"isActiveUserEditor\" class=\"mt-2 flex flex-col\">\n <hr class=\"-mx-4 my-4\" />\n <div\n id=\"new-comment-buttons\"\n class=\"flex flex-row gap-2 items-center justify-end\"\n >\n <gn-ui-text-area\n [disabled]=\"isAddUserFeedbackLoading\"\n [(value)]=\"newAnswer\"\n (valueChange)=\"onNewAnswerValueChange()\"\n (keyup.control.enter)=\"publishNewAnswer()\"\n [placeholder]=\"\n 'record.metadata.userFeedbacks.newAnswer.placeholder' | translate\n \"\n class=\"grow\"\n extraClass=\"bg-transparent border-0 placeholder-primary-darker text-primary-darker h-9\"\n ></gn-ui-text-area>\n <div *ngIf=\"!isAnswerEmpty\" class=\"flex flex-row justify-end\">\n <gn-ui-button\n [disabled]=\"isAddUserFeedbackLoading\"\n [type]=\"'outline'\"\n (buttonClick)=\"publishNewAnswer()\"\n [title]=\"\n 'record.metadata.userFeedbacks.newAnswer.buttonTitle' | translate\n \"\n extraClass=\"!p-[0.5em] text-primary-darker border-primary-darker h-9\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"!isAddUserFeedbackLoading\"\n >\n send\n </mat-icon>\n <ng-container *ngIf=\"isAddUserFeedbackLoading\">\n <div class=\"flex justify-center w-full\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n </gn-ui-button>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: SpinningLoaderComponent, selector: "gn-ui-spinning-loader" }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "component", type: UserFeedbackItemComponent, selector: "gn-ui-user-feedback-item", inputs: ["userFeedbackParent", "userFeedBacksAnswers", "isActiveUserEditor", "activeUser", "isLastComment", "isAddUserFeedbackLoading"], outputs: ["newUserFeedbackAnswer"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "pipe", type: TimeSincePipe, name: "timeSince" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27834
|
+
}
|
|
27835
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UserFeedbackItemComponent, decorators: [{
|
|
27836
|
+
type: Component,
|
|
27837
|
+
args: [{ selector: 'gn-ui-user-feedback-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"userFeedbackParent.published\"\n class=\"flex flex-col bg-white rounded w-full\"\n [ngClass]=\"[isAnAnswer ? 'ps-4 ' : 'p-4']\"\n>\n <div class=\"flex flex-row\">\n <div class=\"avatar\">\n <img\n class=\"rounded-full\"\n [src]=\"userFeedbackParent.avatarUrl\"\n alt=\"avatar\"\n />\n </div>\n <div class=\"p-4 flex flex-col\">\n <span>{{ userFeedbackParent.authorName }}</span>\n <span> {{ userFeedbackParent.date | timeSince }}</span>\n </div>\n </div>\n <div data-cy=\"commentText\" class=\"mt-4 whitespace-pre-line\">\n {{ userFeedbackParent.comment }}\n </div>\n <div\n class=\"w-full\"\n *ngFor=\"let userFeedBacksAnswer of userFeedBacksAnswers; let last = last\"\n >\n <hr class=\"-mx-4 my-6\" />\n <gn-ui-user-feedback-item\n [userFeedbackParent]=\"userFeedBacksAnswer\"\n [isLastComment]=\"last\"\n ></gn-ui-user-feedback-item>\n </div>\n\n <div *ngIf=\"isActiveUserEditor\" class=\"mt-2 flex flex-col\">\n <hr class=\"-mx-4 my-4\" />\n <div\n id=\"new-comment-buttons\"\n class=\"flex flex-row gap-2 items-center justify-end\"\n >\n <gn-ui-text-area\n [disabled]=\"isAddUserFeedbackLoading\"\n [(value)]=\"newAnswer\"\n (valueChange)=\"onNewAnswerValueChange()\"\n (keyup.control.enter)=\"publishNewAnswer()\"\n [placeholder]=\"\n 'record.metadata.userFeedbacks.newAnswer.placeholder' | translate\n \"\n class=\"grow\"\n extraClass=\"bg-transparent border-0 placeholder-primary-darker text-primary-darker h-9\"\n ></gn-ui-text-area>\n <div *ngIf=\"!isAnswerEmpty\" class=\"flex flex-row justify-end\">\n <gn-ui-button\n [disabled]=\"isAddUserFeedbackLoading\"\n [type]=\"'outline'\"\n (buttonClick)=\"publishNewAnswer()\"\n [title]=\"\n 'record.metadata.userFeedbacks.newAnswer.buttonTitle' | translate\n \"\n extraClass=\"!p-[0.5em] text-primary-darker border-primary-darker h-9\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"!isAddUserFeedbackLoading\"\n >\n send\n </mat-icon>\n <ng-container *ngIf=\"isAddUserFeedbackLoading\">\n <div class=\"flex justify-center w-full\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n </gn-ui-button>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
27838
|
+
}], propDecorators: { userFeedbackParent: [{
|
|
27839
|
+
type: Input
|
|
27840
|
+
}], userFeedBacksAnswers: [{
|
|
27841
|
+
type: Input
|
|
27842
|
+
}], isActiveUserEditor: [{
|
|
27843
|
+
type: Input
|
|
27844
|
+
}], activeUser: [{
|
|
27845
|
+
type: Input
|
|
27846
|
+
}], isLastComment: [{
|
|
27847
|
+
type: Input
|
|
27848
|
+
}], isAddUserFeedbackLoading: [{
|
|
27849
|
+
type: Input
|
|
27850
|
+
}], newUserFeedbackAnswer: [{
|
|
27851
|
+
type: Output
|
|
27852
|
+
}] } });
|
|
27853
|
+
|
|
27201
27854
|
class UiElementsModule {
|
|
27202
27855
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
27203
27856
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, declarations: [MetadataInfoComponent,
|
|
@@ -27205,7 +27858,6 @@ class UiElementsModule {
|
|
|
27205
27858
|
DownloadItemComponent,
|
|
27206
27859
|
DownloadsListComponent,
|
|
27207
27860
|
ApiCardComponent,
|
|
27208
|
-
LinkCardComponent,
|
|
27209
27861
|
RelatedRecordCardComponent,
|
|
27210
27862
|
MetadataContactComponent,
|
|
27211
27863
|
MetadataCatalogComponent,
|
|
@@ -27219,6 +27871,7 @@ class UiElementsModule {
|
|
|
27219
27871
|
PaginationButtonsComponent,
|
|
27220
27872
|
MaxLinesComponent,
|
|
27221
27873
|
RecordApiFormComponent,
|
|
27874
|
+
UserFeedbackItemComponent,
|
|
27222
27875
|
ImageOverlayPreviewComponent], imports: [CommonModule,
|
|
27223
27876
|
MatIconModule,
|
|
27224
27877
|
MatTooltipModule,
|
|
@@ -27229,12 +27882,12 @@ class UiElementsModule {
|
|
|
27229
27882
|
FormsModule,
|
|
27230
27883
|
NgOptimizedImage,
|
|
27231
27884
|
MarkdownParserComponent,
|
|
27232
|
-
ThumbnailComponent
|
|
27885
|
+
ThumbnailComponent,
|
|
27886
|
+
TimeSincePipe], exports: [MetadataInfoComponent,
|
|
27233
27887
|
ContentGhostComponent,
|
|
27234
27888
|
DownloadItemComponent,
|
|
27235
27889
|
DownloadsListComponent,
|
|
27236
27890
|
ApiCardComponent,
|
|
27237
|
-
LinkCardComponent,
|
|
27238
27891
|
RelatedRecordCardComponent,
|
|
27239
27892
|
MetadataContactComponent,
|
|
27240
27893
|
MetadataCatalogComponent,
|
|
@@ -27249,6 +27902,7 @@ class UiElementsModule {
|
|
|
27249
27902
|
MaxLinesComponent,
|
|
27250
27903
|
RecordApiFormComponent,
|
|
27251
27904
|
MarkdownParserComponent,
|
|
27905
|
+
UserFeedbackItemComponent,
|
|
27252
27906
|
ImageOverlayPreviewComponent] }); }
|
|
27253
27907
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, imports: [CommonModule,
|
|
27254
27908
|
MatIconModule,
|
|
@@ -27279,6 +27933,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27279
27933
|
NgOptimizedImage,
|
|
27280
27934
|
MarkdownParserComponent,
|
|
27281
27935
|
ThumbnailComponent,
|
|
27936
|
+
TimeSincePipe,
|
|
27282
27937
|
],
|
|
27283
27938
|
declarations: [
|
|
27284
27939
|
MetadataInfoComponent,
|
|
@@ -27286,7 +27941,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27286
27941
|
DownloadItemComponent,
|
|
27287
27942
|
DownloadsListComponent,
|
|
27288
27943
|
ApiCardComponent,
|
|
27289
|
-
LinkCardComponent,
|
|
27290
27944
|
RelatedRecordCardComponent,
|
|
27291
27945
|
MetadataContactComponent,
|
|
27292
27946
|
MetadataCatalogComponent,
|
|
@@ -27300,6 +27954,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27300
27954
|
PaginationButtonsComponent,
|
|
27301
27955
|
MaxLinesComponent,
|
|
27302
27956
|
RecordApiFormComponent,
|
|
27957
|
+
UserFeedbackItemComponent,
|
|
27303
27958
|
ImageOverlayPreviewComponent,
|
|
27304
27959
|
],
|
|
27305
27960
|
exports: [
|
|
@@ -27308,7 +27963,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27308
27963
|
DownloadItemComponent,
|
|
27309
27964
|
DownloadsListComponent,
|
|
27310
27965
|
ApiCardComponent,
|
|
27311
|
-
LinkCardComponent,
|
|
27312
27966
|
RelatedRecordCardComponent,
|
|
27313
27967
|
MetadataContactComponent,
|
|
27314
27968
|
MetadataCatalogComponent,
|
|
@@ -27323,6 +27977,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27323
27977
|
MaxLinesComponent,
|
|
27324
27978
|
RecordApiFormComponent,
|
|
27325
27979
|
MarkdownParserComponent,
|
|
27980
|
+
UserFeedbackItemComponent,
|
|
27326
27981
|
ImageOverlayPreviewComponent,
|
|
27327
27982
|
],
|
|
27328
27983
|
}]
|
|
@@ -29652,7 +30307,7 @@ class AddLayerFromWmsComponent {
|
|
|
29652
30307
|
this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
|
|
29653
30308
|
}
|
|
29654
30309
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWmsComponent, deps: [{ token: MapFacade }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
29655
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms", ngImport: i0, template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wmsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wms.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container\n *ngFor=\"let layer of layers\"\n [ngTemplateOutlet]=\"layerTreeItem\"\n [ngTemplateOutletContext]=\"{\n layer: layer\n }\"\n ></ng-container>\n</div>\n\n<ng-template #layerTreeItem let-layer=\"layer\">\n <div class=\"flex items-center justify-between layer-tree-item my-2\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n <div *ngIf=\"layer.children?.length > 0\" class=\"ml-4\">\n <ng-container\n *ngFor=\"let child of layer.children\"\n [ngTemplateOutlet]=\"layerTreeItem\"\n [ngTemplateOutletContext]=\"{\n layer: child\n }\"\n >\n </ng-container>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
30310
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms", ngImport: i0, template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wmsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wms.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container\n *ngFor=\"let layer of layers\"\n [ngTemplateOutlet]=\"layerTreeItem\"\n [ngTemplateOutletContext]=\"{\n layer: layer\n }\"\n ></ng-container>\n</div>\n\n<ng-template #layerTreeItem let-layer=\"layer\">\n <div class=\"flex items-center justify-between layer-tree-item my-2\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n <div *ngIf=\"layer.children?.length > 0\" class=\"ml-4\">\n <ng-container\n *ngFor=\"let child of layer.children\"\n [ngTemplateOutlet]=\"layerTreeItem\"\n [ngTemplateOutletContext]=\"{\n layer: child\n }\"\n >\n </ng-container>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "hint", "required", "disabled"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
29656
30311
|
}
|
|
29657
30312
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWmsComponent, decorators: [{
|
|
29658
30313
|
type: Component,
|
|
@@ -29803,7 +30458,7 @@ class AddLayerFromWfsComponent {
|
|
|
29803
30458
|
this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
|
|
29804
30459
|
}
|
|
29805
30460
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, deps: [{ token: MapFacade }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
29806
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs", ngImport: i0, template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wfsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wfs.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container *ngFor=\"let layer of layers\">\n <div class=\"flex items-center justify-between my-2 layer-item-tree\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
30461
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs", ngImport: i0, template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wfsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wfs.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container *ngFor=\"let layer of layers\">\n <div class=\"flex items-center justify-between my-2 layer-item-tree\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "hint", "required", "disabled"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
29807
30462
|
}
|
|
29808
30463
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, decorators: [{
|
|
29809
30464
|
type: Component,
|
|
@@ -29823,7 +30478,7 @@ class LayersPanelComponent {
|
|
|
29823
30478
|
this.mapFacade.addLayer(layer);
|
|
29824
30479
|
}
|
|
29825
30480
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, deps: [{ token: MapFacade }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
29826
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.ogc.api' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-ogc-api\n [ogcUrl]=\"ogcUrl\"\n (layerAdded)=\"addLayer($event)\"\n ></gn-ui-add-layer-from-ogc-api>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ExpandablePanelButtonComponent, selector: "gn-ui-expandable-panel-button", inputs: ["titleTemplate", "collapsed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$
|
|
30481
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.ogc.api' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-ogc-api\n [ogcUrl]=\"ogcUrl\"\n (layerAdded)=\"addLayer($event)\"\n ></gn-ui-add-layer-from-ogc-api>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ExpandablePanelButtonComponent, selector: "gn-ui-expandable-panel-button", inputs: ["titleTemplate", "collapsed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$4.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$4.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: AddLayerFromOgcApiComponent, selector: "gn-ui-add-layer-from-ogc-api", inputs: ["ogcUrl"], outputs: ["layerAdded"] }, { kind: "component", type: AddLayerFromCatalogComponent, selector: "gn-ui-add-layer-from-catalog" }, { kind: "component", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms" }, { kind: "component", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file" }, { kind: "component", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
29827
30482
|
}
|
|
29828
30483
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, decorators: [{
|
|
29829
30484
|
type: Component,
|
|
@@ -30198,31 +30853,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
30198
30853
|
], template: "<div class=\"flex flex-col gap-6 p-6 items-start pointer-events-none\">\n <gn-ui-notification\n *ngFor=\"\n let notification of notificationsService.notifications$ | async;\n trackBy: trackById\n \"\n class=\"max-w-full pointer-events-auto\"\n [text]=\"notification.text\"\n [type]=\"notification.type\"\n [title]=\"notification.title\"\n [closeMessage]=\"notification.closeMessage\"\n (notificationClose)=\"\n notificationsService.removeNotificationById(notification.id)\n \"\n [@enterExit]\n ></gn-ui-notification>\n</div>\n" }]
|
|
30199
30854
|
}], ctorParameters: function () { return [{ type: NotificationsService }]; } });
|
|
30200
30855
|
|
|
30856
|
+
/*
|
|
30857
|
+
Metadata actions
|
|
30858
|
+
*/
|
|
30201
30859
|
const loadFullMetadata = createAction('[Metadata view] Load full metadata', props());
|
|
30202
30860
|
const setIncompleteMetadata = createAction('[Metadata view] Set incomplete metadata', props());
|
|
30203
|
-
const
|
|
30204
|
-
const
|
|
30861
|
+
const loadFullMetadataSuccess = createAction('[Metadata view] Load full metadata success', props());
|
|
30862
|
+
const loadFullMetadataFailure = createAction('[Metadata view] Load full metadata failure', props());
|
|
30863
|
+
const closeMetadata = createAction('[Metadata view] close');
|
|
30864
|
+
/*
|
|
30865
|
+
Related actions
|
|
30866
|
+
*/
|
|
30205
30867
|
const setRelated = createAction('[Metadata view] Set related records', props());
|
|
30868
|
+
/*
|
|
30869
|
+
ChartConfig actions
|
|
30870
|
+
*/
|
|
30206
30871
|
const setChartConfig = createAction('[Metadata view] Set chart config', props());
|
|
30207
|
-
|
|
30872
|
+
/*
|
|
30873
|
+
User Feedbacks actions
|
|
30874
|
+
*/
|
|
30875
|
+
const addUserFeedback = createAction('[Metadata view] Add UserFeedback', props());
|
|
30876
|
+
const addUserFeedbackSuccess = createAction('[Metadata view] Add UserFeedback Success', props());
|
|
30877
|
+
const addUserFeedbackFailure = createAction('[Metadata view] Add UserFeedback Failure', props());
|
|
30878
|
+
const loadUserFeedbacks = createAction('[Metadata view] Load UserFeedbacks', props());
|
|
30879
|
+
const loadUserFeedbacksSuccess = createAction('[Metadata view] Load UserFeedbacks Success', props());
|
|
30880
|
+
const loadUserFeedbacksFailure = createAction('[Metadata view] Load UserFeedbacks Failure', props());
|
|
30208
30881
|
|
|
30209
30882
|
var mdview_actions = /*#__PURE__*/Object.freeze({
|
|
30210
30883
|
__proto__: null,
|
|
30211
|
-
|
|
30212
|
-
|
|
30884
|
+
addUserFeedback: addUserFeedback,
|
|
30885
|
+
addUserFeedbackFailure: addUserFeedbackFailure,
|
|
30886
|
+
addUserFeedbackSuccess: addUserFeedbackSuccess,
|
|
30887
|
+
closeMetadata: closeMetadata,
|
|
30213
30888
|
loadFullMetadata: loadFullMetadata,
|
|
30214
|
-
|
|
30889
|
+
loadFullMetadataFailure: loadFullMetadataFailure,
|
|
30890
|
+
loadFullMetadataSuccess: loadFullMetadataSuccess,
|
|
30891
|
+
loadUserFeedbacks: loadUserFeedbacks,
|
|
30892
|
+
loadUserFeedbacksFailure: loadUserFeedbacksFailure,
|
|
30893
|
+
loadUserFeedbacksSuccess: loadUserFeedbacksSuccess,
|
|
30215
30894
|
setChartConfig: setChartConfig,
|
|
30216
30895
|
setIncompleteMetadata: setIncompleteMetadata,
|
|
30217
30896
|
setRelated: setRelated
|
|
30218
30897
|
});
|
|
30219
30898
|
|
|
30220
|
-
const
|
|
30221
|
-
const
|
|
30899
|
+
const METADATA_VIEW_FEATURE_STATE_KEY = 'metadataView';
|
|
30900
|
+
const initialMetadataViewState = {
|
|
30222
30901
|
error: null,
|
|
30223
30902
|
loadingFull: false,
|
|
30903
|
+
allUserFeedbacksLoading: false,
|
|
30904
|
+
addUserFeedbackLoading: false,
|
|
30224
30905
|
};
|
|
30225
|
-
const
|
|
30906
|
+
const metadataViewReducer = createReducer(initialMetadataViewState,
|
|
30907
|
+
/*
|
|
30908
|
+
Metadata reducers
|
|
30909
|
+
*/
|
|
30910
|
+
on(loadFullMetadata, (state) => ({
|
|
30226
30911
|
...state,
|
|
30227
30912
|
error: null,
|
|
30228
30913
|
loadingFull: true,
|
|
@@ -30230,38 +30915,82 @@ const mdViewReducer = createReducer(initialMdviewState, on(loadFullMetadata, (st
|
|
|
30230
30915
|
...state,
|
|
30231
30916
|
error: null,
|
|
30232
30917
|
metadata: incomplete,
|
|
30233
|
-
})), on(
|
|
30918
|
+
})), on(loadFullMetadataSuccess, (state, { full }) => ({
|
|
30234
30919
|
...state,
|
|
30235
30920
|
error: null,
|
|
30236
30921
|
metadata: full,
|
|
30237
30922
|
loadingFull: false,
|
|
30238
|
-
})), on(
|
|
30923
|
+
})), on(loadFullMetadataFailure, (state, { otherError, notFound }) => ({
|
|
30239
30924
|
...state,
|
|
30240
30925
|
error: { otherError, notFound },
|
|
30241
30926
|
loadingFull: false,
|
|
30242
|
-
})), on(
|
|
30927
|
+
})), on(closeMetadata, (state) => {
|
|
30928
|
+
const { metadata, related, userFeedbacks, ...stateWithoutMetadata } = state;
|
|
30929
|
+
return stateWithoutMetadata;
|
|
30930
|
+
}),
|
|
30931
|
+
/*
|
|
30932
|
+
Related reducers
|
|
30933
|
+
*/
|
|
30934
|
+
on(setRelated, (state, { related }) => ({
|
|
30243
30935
|
...state,
|
|
30244
30936
|
related,
|
|
30245
|
-
})),
|
|
30937
|
+
})),
|
|
30938
|
+
/*
|
|
30939
|
+
ChartConfig reducers
|
|
30940
|
+
*/
|
|
30941
|
+
on(setChartConfig, (state, { chartConfig }) => ({
|
|
30246
30942
|
...state,
|
|
30247
30943
|
chartConfig,
|
|
30248
|
-
})),
|
|
30249
|
-
|
|
30250
|
-
|
|
30251
|
-
|
|
30252
|
-
|
|
30253
|
-
|
|
30254
|
-
|
|
30944
|
+
})),
|
|
30945
|
+
/*
|
|
30946
|
+
UserFeedbacks reducers
|
|
30947
|
+
*/
|
|
30948
|
+
on(loadUserFeedbacks, (state) => ({
|
|
30949
|
+
...state,
|
|
30950
|
+
error: null,
|
|
30951
|
+
allUserFeedbacksLoading: true,
|
|
30952
|
+
})), on(addUserFeedback, (state) => ({
|
|
30953
|
+
...state,
|
|
30954
|
+
addUserFeedbackLoading: true,
|
|
30955
|
+
})), on(loadUserFeedbacksSuccess, (state, { userFeedbacks }) => ({
|
|
30956
|
+
...state,
|
|
30957
|
+
error: null,
|
|
30958
|
+
userFeedbacks: userFeedbacks,
|
|
30959
|
+
addUserFeedbackLoading: false,
|
|
30960
|
+
allUserFeedbacksLoading: false,
|
|
30961
|
+
})), on(loadUserFeedbacksFailure, (state, { otherError, notFound }) => ({
|
|
30962
|
+
...state,
|
|
30963
|
+
error: { otherError, notFound },
|
|
30964
|
+
addUserFeedbackLoading: false,
|
|
30965
|
+
allUserFeedbacksLoading: false,
|
|
30966
|
+
})));
|
|
30967
|
+
function reducer$1(metadataViewState, action) {
|
|
30968
|
+
return metadataViewReducer(metadataViewState, action);
|
|
30255
30969
|
}
|
|
30256
30970
|
|
|
30257
|
-
const getMdViewState = createFeatureSelector(
|
|
30971
|
+
const getMdViewState = createFeatureSelector(METADATA_VIEW_FEATURE_STATE_KEY);
|
|
30972
|
+
/*
|
|
30973
|
+
Metadata selectors
|
|
30974
|
+
*/
|
|
30258
30975
|
const getMetadataUuid = createSelector(getMdViewState, (state) => state.metadata ? state.metadata.uniqueIdentifier : null);
|
|
30259
30976
|
const getMetadata = createSelector(getMdViewState, (state) => state.metadata);
|
|
30260
30977
|
const getMetadataIsIncomplete = createSelector(getMdViewState, (state) => (state.metadata ? state.loadingFull : null));
|
|
30261
30978
|
const getMetadataIsLoading = createSelector(getMdViewState, (state) => state.loadingFull);
|
|
30262
30979
|
const getMetadataError = createSelector(getMdViewState, (state) => state.error);
|
|
30980
|
+
/*
|
|
30981
|
+
Related selectors
|
|
30982
|
+
*/
|
|
30263
30983
|
const getRelated = createSelector(getMdViewState, (state) => state.related);
|
|
30984
|
+
/*
|
|
30985
|
+
Metadata selectors
|
|
30986
|
+
*/
|
|
30264
30987
|
const getChartConfig = createSelector(getMdViewState, (state) => state.chartConfig);
|
|
30988
|
+
/*
|
|
30989
|
+
UserFeedback selectors
|
|
30990
|
+
*/
|
|
30991
|
+
const getUserFeedbacks = createSelector(getMdViewState, (state) => state.userFeedbacks);
|
|
30992
|
+
const getAllUserFeedbacksLoading = createSelector(getMdViewState, (state) => state.allUserFeedbacksLoading);
|
|
30993
|
+
const getAddUserFeedbacksLoading = createSelector(getMdViewState, (state) => state.addUserFeedbackLoading);
|
|
30265
30994
|
|
|
30266
30995
|
/**
|
|
30267
30996
|
* The Metadata View Facade is used to render complete metadata records.
|
|
@@ -30270,11 +30999,12 @@ const getChartConfig = createSelector(getMdViewState, (state) => state.chartConf
|
|
|
30270
30999
|
* To clear the current record use the `close()` method.
|
|
30271
31000
|
*/
|
|
30272
31001
|
class MdViewFacade {
|
|
30273
|
-
constructor(store, linkClassifier) {
|
|
31002
|
+
constructor(store, linkClassifier, avatarService) {
|
|
30274
31003
|
this.store = store;
|
|
30275
31004
|
this.linkClassifier = linkClassifier;
|
|
31005
|
+
this.avatarService = avatarService;
|
|
30276
31006
|
this.isPresent$ = this.store.pipe(select(getMetadataUuid), map$1((uuid) => !!uuid));
|
|
30277
|
-
this.
|
|
31007
|
+
this.isMetadataLoading$ = this.store.pipe(select(getMetadataIsLoading));
|
|
30278
31008
|
this.metadata$ = this.store.pipe(select(getMetadata), filter((md) => !!md));
|
|
30279
31009
|
this.isIncomplete$ = this.store.pipe(select(getMetadataIsIncomplete), filter((incomplete) => incomplete !== null));
|
|
30280
31010
|
this.error$ = this.store.pipe(select(getMetadataError));
|
|
@@ -30288,6 +31018,9 @@ class MdViewFacade {
|
|
|
30288
31018
|
this.geoDataLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.GEODATA))));
|
|
30289
31019
|
this.landingPageLinks$ = this.metadata$.pipe(map$1((record) => ('landingPage' in record ? [record.landingPage] : [])));
|
|
30290
31020
|
this.otherLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.UNKNOWN))));
|
|
31021
|
+
this.userFeedbacks$ = this.store.pipe(select(getUserFeedbacks));
|
|
31022
|
+
this.isAllUserFeedbackLoading$ = this.store.pipe(select(getAllUserFeedbacksLoading));
|
|
31023
|
+
this.isAddUserFeedbackLoading$ = this.store.pipe(select(getAddUserFeedbacksLoading));
|
|
30291
31024
|
}
|
|
30292
31025
|
/**
|
|
30293
31026
|
* This will show an incomplete record (e.g. from a search result) as a preview
|
|
@@ -30302,39 +31035,73 @@ class MdViewFacade {
|
|
|
30302
31035
|
loadFull(uuid) {
|
|
30303
31036
|
this.store.dispatch(loadFullMetadata({ uuid }));
|
|
30304
31037
|
}
|
|
30305
|
-
|
|
30306
|
-
this.store.dispatch(
|
|
31038
|
+
closeMetadata() {
|
|
31039
|
+
this.store.dispatch(closeMetadata());
|
|
30307
31040
|
}
|
|
30308
31041
|
setChartConfig(chartConfig) {
|
|
30309
31042
|
this.store.dispatch(setChartConfig({ chartConfig }));
|
|
30310
31043
|
}
|
|
30311
|
-
|
|
31044
|
+
/**
|
|
31045
|
+
* UserFeedbacks
|
|
31046
|
+
*/
|
|
31047
|
+
addUserFeedback(userFeedback) {
|
|
31048
|
+
this.store.dispatch(addUserFeedback({ userFeedback }));
|
|
31049
|
+
}
|
|
31050
|
+
loadUserFeedbacks(datasetUuid) {
|
|
31051
|
+
this.store.dispatch(loadUserFeedbacks({ datasetUuid }));
|
|
31052
|
+
}
|
|
31053
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewFacade, deps: [{ token: i1$2.Store }, { token: LinkClassifierService }, { token: AvatarServiceInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
30312
31054
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewFacade }); }
|
|
30313
31055
|
}
|
|
30314
31056
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewFacade, decorators: [{
|
|
30315
31057
|
type: Injectable
|
|
30316
|
-
}], ctorParameters: function () { return [{ type: i1$2.Store }, { type: LinkClassifierService }]; } });
|
|
31058
|
+
}], ctorParameters: function () { return [{ type: i1$2.Store }, { type: LinkClassifierService }, { type: AvatarServiceInterface }]; } });
|
|
30317
31059
|
|
|
30318
31060
|
class MdViewEffects {
|
|
30319
|
-
constructor(actions$, recordsRepository) {
|
|
31061
|
+
constructor(actions$, recordsRepository, platformServiceInterface) {
|
|
30320
31062
|
this.actions$ = actions$;
|
|
30321
31063
|
this.recordsRepository = recordsRepository;
|
|
30322
|
-
this.
|
|
31064
|
+
this.platformServiceInterface = platformServiceInterface;
|
|
31065
|
+
/*
|
|
31066
|
+
Metadata effects
|
|
31067
|
+
*/
|
|
31068
|
+
this.loadFullMetadata$ = createEffect(() => this.actions$.pipe(ofType(loadFullMetadata), switchMap$1(({ uuid }) => this.recordsRepository.getByUniqueIdentifier(uuid)), map$1((record) => {
|
|
30323
31069
|
if (record === null) {
|
|
30324
|
-
return
|
|
31070
|
+
return loadFullMetadataFailure({ notFound: true });
|
|
30325
31071
|
}
|
|
30326
|
-
return
|
|
30327
|
-
}), catchError((error) => of(
|
|
30328
|
-
|
|
31072
|
+
return loadFullMetadataSuccess({ full: record });
|
|
31073
|
+
}), catchError((error) => of(loadFullMetadataFailure({ otherError: error.message })))));
|
|
31074
|
+
/*
|
|
31075
|
+
Related effects
|
|
31076
|
+
*/
|
|
31077
|
+
this.loadRelatedRecords$ = createEffect(() => this.actions$.pipe(ofType(loadFullMetadataSuccess), switchMap$1(({ full }) => this.recordsRepository.getSimilarRecords(full)), map$1((related) => {
|
|
30329
31078
|
return setRelated({ related });
|
|
30330
31079
|
}), catchError((error) => of(setRelated({ related: null })))));
|
|
31080
|
+
/*
|
|
31081
|
+
UserFeedback effects
|
|
31082
|
+
*/
|
|
31083
|
+
this.loadUserFeedbacks$ = createEffect(() => this.actions$.pipe(ofType(loadUserFeedbacks), exhaustMap(({ datasetUuid }) => this.platformServiceInterface.getUserFeedbacks(datasetUuid).pipe(map$1((userFeedbacks) => loadUserFeedbacksSuccess({ userFeedbacks })), catchError((error) => of(loadUserFeedbacksFailure({
|
|
31084
|
+
otherError: error.message,
|
|
31085
|
+
})))))));
|
|
31086
|
+
this.reloadUserFeedbacks$ = createEffect(() => this.actions$.pipe(ofType(addUserFeedbackSuccess), exhaustMap(({ datasetUuid }) => this.platformServiceInterface.getUserFeedbacks(datasetUuid).pipe(map$1((userFeedbacks) => loadUserFeedbacksSuccess({ userFeedbacks })), catchError((error) => of(loadUserFeedbacksFailure({
|
|
31087
|
+
otherError: error.message,
|
|
31088
|
+
})))))));
|
|
31089
|
+
this.addUserFeedback$ = createEffect(() => this.actions$.pipe(ofType(addUserFeedback), mergeMap$1((action) => this.platformServiceInterface
|
|
31090
|
+
.postUserFeedbacks(action.userFeedback)
|
|
31091
|
+
.pipe(map$1(() => addUserFeedbackSuccess({
|
|
31092
|
+
datasetUuid: action.userFeedback.metadataUUID,
|
|
31093
|
+
})), catchError((error) => {
|
|
31094
|
+
return of(addUserFeedbackFailure({
|
|
31095
|
+
otherError: error.message,
|
|
31096
|
+
}));
|
|
31097
|
+
})))));
|
|
30331
31098
|
}
|
|
30332
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewEffects, deps: [{ token: i1$8.Actions }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
31099
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewEffects, deps: [{ token: i1$8.Actions }, { token: RecordsRepositoryInterface }, { token: PlatformServiceInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
30333
31100
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewEffects }); }
|
|
30334
31101
|
}
|
|
30335
31102
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewEffects, decorators: [{
|
|
30336
31103
|
type: Injectable
|
|
30337
|
-
}], ctorParameters: function () { return [{ type: i1$8.Actions }, { type: RecordsRepositoryInterface }]; } });
|
|
31104
|
+
}], ctorParameters: function () { return [{ type: i1$8.Actions }, { type: RecordsRepositoryInterface }, { type: PlatformServiceInterface }]; } });
|
|
30338
31105
|
|
|
30339
31106
|
class FigureComponent {
|
|
30340
31107
|
constructor() {
|
|
@@ -30569,7 +31336,7 @@ class TableComponent {
|
|
|
30569
31336
|
return rowIdPrefix + id;
|
|
30570
31337
|
}
|
|
30571
31338
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TableComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30572
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TableComponent, isStandalone: true, selector: "gn-ui-table", inputs: { data: "data", activeId: "activeId" }, outputs: { selected: "selected" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }], ngImport: i0, template: "<div class=\"border border-gray-300 rounded-lg overflow-hidden bg-white h-full\">\n <cdk-virtual-scroll-viewport\n tvsItemSize=\"48\"\n headerHeight=\"56\"\n style=\"height: calc(100% - 37px)\"\n >\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8\" matSort>\n <ng-container *ngFor=\"let prop of properties\" [matColumnDef]=\"prop\">\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ prop }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[prop] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"row.id === activeId\"\n ></tr>\n </table>\n </cdk-virtual-scroll-viewport>\n <div class=\"text-gray-900 border-t border-gray-300 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n > <span translate>table.object.count</span>.\n </div>\n</div>\n", styles: ["table{width:100%;background:white}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:whitesmoke}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i1$9.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$9.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2$
|
|
31339
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TableComponent, isStandalone: true, selector: "gn-ui-table", inputs: { data: "data", activeId: "activeId" }, outputs: { selected: "selected" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }], ngImport: i0, template: "<div class=\"border border-gray-300 rounded-lg overflow-hidden bg-white h-full\">\n <cdk-virtual-scroll-viewport\n tvsItemSize=\"48\"\n headerHeight=\"56\"\n style=\"height: calc(100% - 37px)\"\n >\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8\" matSort>\n <ng-container *ngFor=\"let prop of properties\" [matColumnDef]=\"prop\">\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ prop }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[prop] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"row.id === activeId\"\n ></tr>\n </table>\n </cdk-virtual-scroll-viewport>\n <div class=\"text-gray-900 border-t border-gray-300 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n > <span translate>table.object.count</span>.\n </div>\n</div>\n", styles: ["table{width:100%;background:white}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:whitesmoke}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i1$9.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$9.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2$5.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i2$5.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: TableVirtualScrollModule }, { kind: "directive", type: i3$1.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "component", type: i4$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30573
31340
|
}
|
|
30574
31341
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TableComponent, decorators: [{
|
|
30575
31342
|
type: Component,
|
|
@@ -31439,6 +32206,7 @@ marker('wfs.unreachable.http');
|
|
|
31439
32206
|
marker('wfs.unreachable.unknown');
|
|
31440
32207
|
marker('wfs.featuretype.notfound');
|
|
31441
32208
|
marker('wfs.geojsongml.notsupported');
|
|
32209
|
+
marker('ogc.unreachable.unknown');
|
|
31442
32210
|
marker('dataset.error.network');
|
|
31443
32211
|
marker('dataset.error.http');
|
|
31444
32212
|
marker('dataset.error.parse');
|
|
@@ -31518,6 +32286,27 @@ class DataService {
|
|
|
31518
32286
|
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
|
|
31519
32287
|
}))));
|
|
31520
32288
|
}
|
|
32289
|
+
async getDownloadLinksFromOgcApiFeatures(ogcApiLink) {
|
|
32290
|
+
const collectionInfo = await this.getDownloadUrlsFromOgcApi(ogcApiLink.url.href);
|
|
32291
|
+
return Object.keys(collectionInfo.bulkDownloadLinks).map((downloadLink) => {
|
|
32292
|
+
return {
|
|
32293
|
+
...ogcApiLink,
|
|
32294
|
+
type: 'download',
|
|
32295
|
+
url: new URL(collectionInfo.bulkDownloadLinks[downloadLink]),
|
|
32296
|
+
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(downloadLink)),
|
|
32297
|
+
};
|
|
32298
|
+
});
|
|
32299
|
+
}
|
|
32300
|
+
async getDownloadUrlsFromOgcApi(url) {
|
|
32301
|
+
const endpoint = new OgcApiEndpoint(this.proxy.getProxiedUrl(url));
|
|
32302
|
+
return await endpoint.featureCollections
|
|
32303
|
+
.then((collections) => {
|
|
32304
|
+
return endpoint.getCollectionInfo(collections[0]);
|
|
32305
|
+
})
|
|
32306
|
+
.catch((error) => {
|
|
32307
|
+
throw new Error(`ogc.unreachable.unknown`);
|
|
32308
|
+
});
|
|
32309
|
+
}
|
|
31521
32310
|
getDownloadLinksFromEsriRest(esriRestLink) {
|
|
31522
32311
|
return ['json', 'geojson'].map((format) => ({
|
|
31523
32312
|
...esriRestLink,
|
|
@@ -31561,6 +32350,17 @@ class DataService {
|
|
|
31561
32350
|
const url = this.getDownloadUrlFromEsriRest(link.url.toString(), 'geojson');
|
|
31562
32351
|
return from(openDataset(url, 'geojson')).pipe();
|
|
31563
32352
|
}
|
|
32353
|
+
else if (link.type === 'service' &&
|
|
32354
|
+
link.accessServiceProtocol === 'ogcFeatures') {
|
|
32355
|
+
return from(this.getDownloadUrlsFromOgcApi(link.url.href)).pipe(switchMap$1((collectionInfo) => {
|
|
32356
|
+
const geojsonUrl = collectionInfo.jsonDownloadLink;
|
|
32357
|
+
return openDataset(geojsonUrl, 'geojson');
|
|
32358
|
+
}), tap$1((url) => {
|
|
32359
|
+
if (url === null) {
|
|
32360
|
+
throw new Error('wfs.geojsongml.notsupported');
|
|
32361
|
+
}
|
|
32362
|
+
}));
|
|
32363
|
+
}
|
|
31564
32364
|
return throwError(() => 'protocol not supported');
|
|
31565
32365
|
}
|
|
31566
32366
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DataService, deps: [{ token: ProxyService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
@@ -32019,7 +32819,8 @@ class MapViewComponent {
|
|
|
32019
32819
|
}
|
|
32020
32820
|
else if ((link.type === 'service' &&
|
|
32021
32821
|
(link.accessServiceProtocol === 'wfs' ||
|
|
32022
|
-
link.accessServiceProtocol === 'esriRest'
|
|
32822
|
+
link.accessServiceProtocol === 'esriRest' ||
|
|
32823
|
+
link.accessServiceProtocol === 'ogcFeatures')) ||
|
|
32023
32824
|
link.type === 'download') {
|
|
32024
32825
|
return this.dataService.readAsGeoJson(link).pipe(map$1((data) => ({
|
|
32025
32826
|
type: MapContextLayerTypeEnum.GEOJSON,
|
|
@@ -32617,7 +33418,7 @@ class DataViewShareComponent {
|
|
|
32617
33418
|
this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
|
|
32618
33419
|
}
|
|
32619
33420
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DataViewShareComponent, deps: [{ token: WEB_COMPONENT_EMBEDDER_URL, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32620
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DataViewShareComponent, selector: "gn-ui-data-view-share", ngImport: i0, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$
|
|
33421
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DataViewShareComponent, selector: "gn-ui-data-view-share", ngImport: i0, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$4.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i2$4.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$4.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink" }, { kind: "component", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
32621
33422
|
}
|
|
32622
33423
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DataViewShareComponent, decorators: [{
|
|
32623
33424
|
type: Component,
|
|
@@ -32653,7 +33454,7 @@ class FeatureRecordModule {
|
|
|
32653
33454
|
DataViewWebComponentComponent,
|
|
32654
33455
|
DataViewShareComponent] }); }
|
|
32655
33456
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureRecordModule, providers: [MdViewFacade], imports: [CommonModule,
|
|
32656
|
-
StoreModule.forFeature(
|
|
33457
|
+
StoreModule.forFeature(METADATA_VIEW_FEATURE_STATE_KEY, reducer$1),
|
|
32657
33458
|
EffectsModule.forFeature([MdViewEffects]),
|
|
32658
33459
|
UiLayoutModule,
|
|
32659
33460
|
FeatureMapModule,
|
|
@@ -32681,7 +33482,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
32681
33482
|
],
|
|
32682
33483
|
imports: [
|
|
32683
33484
|
CommonModule,
|
|
32684
|
-
StoreModule.forFeature(
|
|
33485
|
+
StoreModule.forFeature(METADATA_VIEW_FEATURE_STATE_KEY, reducer$1),
|
|
32685
33486
|
EffectsModule.forFeature([MdViewEffects]),
|
|
32686
33487
|
UiLayoutModule,
|
|
32687
33488
|
FeatureMapModule,
|
|
@@ -32746,6 +33547,20 @@ const DEFAULT_FIELDS = [
|
|
|
32746
33547
|
},
|
|
32747
33548
|
onSaveProcess: '${dateNow()}',
|
|
32748
33549
|
},
|
|
33550
|
+
{
|
|
33551
|
+
model: 'licenses',
|
|
33552
|
+
formFieldConfig: {
|
|
33553
|
+
labelKey: marker('editor.record.form.license'),
|
|
33554
|
+
type: 'list',
|
|
33555
|
+
},
|
|
33556
|
+
},
|
|
33557
|
+
{
|
|
33558
|
+
model: 'resourceUpdated',
|
|
33559
|
+
formFieldConfig: {
|
|
33560
|
+
labelKey: marker('editor.record.form.resourceUpdated'),
|
|
33561
|
+
type: 'date',
|
|
33562
|
+
},
|
|
33563
|
+
},
|
|
32749
33564
|
];
|
|
32750
33565
|
|
|
32751
33566
|
const EDITOR_FEATURE_KEY = 'editor';
|
|
@@ -33130,7 +33945,7 @@ class WizardFieldComponent {
|
|
|
33130
33945
|
deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
|
|
33131
33946
|
},
|
|
33132
33947
|
{ provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },
|
|
33133
|
-
], viewQueries: [{ propertyName: "searchText", first: true, predicate: ["searchText"], descendants: true }, { propertyName: "chips", first: true, predicate: ["chips"], descendants: true }, { propertyName: "textArea", first: true, predicate: ["textArea"], descendants: true }, { propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-1\">\n <span [class]=\"wizardFieldConfig.icon + ' pr-10'\"></span>\n <div class=\"flex flex-col flex-1\">\n <div translate class=\"text-xl font-bold pb-1\">\n {{ wizardFieldConfig.label }}\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.TEXT === wizardFieldConfig.type\"\n >\n <gn-ui-text-input\n #searchText\n [id]=\"wizardFieldConfig.id\"\n [value]=\"wizardFieldData\"\n [required]=\"wizardFieldConfig.required || false\"\n hint=\"\"\n ></gn-ui-text-input>\n </div>\n <div\n class=\"flex-1 w-11/12\"\n *ngIf=\"wizardFieldType.CHIPS === wizardFieldConfig.type\"\n >\n <gn-ui-chips-input\n #chips\n [selectedItems]=\"wizardFieldData\"\n placeholder=\"\"\n [id]=\"wizardFieldConfig.id\"\n [url]=\"wizardFieldConfig.options.url\"\n [loadOnce]=\"wizardFieldConfig.options.loadOnce\"\n ></gn-ui-chips-input>\n </div>\n <div\n class=\"h-32 w-11/12\"\n *ngIf=\"wizardFieldType.TEXT_AREA === wizardFieldConfig.type\"\n >\n <gn-ui-text-area\n #textArea\n [id]=\"wizardFieldConfig.id\"\n [value]=\"wizardFieldData\"\n [required]=\"wizardFieldConfig.required || false\"\n placeholder=\"\"\n ></gn-ui-text-area>\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.DATA_PICKER === wizardFieldConfig.type\"\n >\n <input\n [id]=\"wizardFieldConfig.id\"\n type=\"text\"\n (click)=\"datepicker.open()\"\n class=\"rounded p-2 text-gray-700 w-full leading-tight focus:outline-none focus:border-primary\"\n [value]=\"wizardFieldData\"\n [matDatepicker]=\"datepicker\"\n (dateChange)=\"onDateChange($event)\"\n />\n <mat-datepicker #datepicker></mat-datepicker>\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.DROPDOWN === wizardFieldConfig.type\"\n >\n <gn-ui-dropdown-selector\n #dropdown\n [id]=\"wizardFieldConfig.id\"\n [title]=\"''\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n [showTitle]=\"false\"\n [choices]=\"dropdownChoices\"\n [selected]=\"wizardFieldData\"\n ariaName=\"search-sort-by\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex;flex:1}gn-ui-text-input::ng-deep input,input[type=text]{height:100%;background:white;color:#000;font-style:italic;border-width:2px;border-color:var(--color-primary)}gn-ui-text-area::ng-deep textarea{border-width:2px;border-color:var(--color-primary)}gn-ui-dropdown-selector::ng-deep div{height:100%}gn-ui-dropdown-selector::ng-deep select{height:100%;border-width:2px;border-color:var(--color-primary);background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "component", type: ChipsInputComponent, selector: "gn-ui-chips-input", inputs: ["url", "placeholder", "selectedItems", "required", "loadOnce", "autocompleteItems"], outputs: ["itemsChange"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type:
|
|
33948
|
+
], viewQueries: [{ propertyName: "searchText", first: true, predicate: ["searchText"], descendants: true }, { propertyName: "chips", first: true, predicate: ["chips"], descendants: true }, { propertyName: "textArea", first: true, predicate: ["textArea"], descendants: true }, { propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-1\">\n <span [class]=\"wizardFieldConfig.icon + ' pr-10'\"></span>\n <div class=\"flex flex-col flex-1\">\n <div translate class=\"text-xl font-bold pb-1\">\n {{ wizardFieldConfig.label }}\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.TEXT === wizardFieldConfig.type\"\n >\n <gn-ui-text-input\n #searchText\n [id]=\"wizardFieldConfig.id\"\n [value]=\"wizardFieldData\"\n [required]=\"wizardFieldConfig.required || false\"\n hint=\"\"\n ></gn-ui-text-input>\n </div>\n <div\n class=\"flex-1 w-11/12\"\n *ngIf=\"wizardFieldType.CHIPS === wizardFieldConfig.type\"\n >\n <gn-ui-chips-input\n #chips\n [selectedItems]=\"wizardFieldData\"\n placeholder=\"\"\n [id]=\"wizardFieldConfig.id\"\n [url]=\"wizardFieldConfig.options.url\"\n [loadOnce]=\"wizardFieldConfig.options.loadOnce\"\n ></gn-ui-chips-input>\n </div>\n <div\n class=\"h-32 w-11/12\"\n *ngIf=\"wizardFieldType.TEXT_AREA === wizardFieldConfig.type\"\n >\n <gn-ui-text-area\n #textArea\n [id]=\"wizardFieldConfig.id\"\n [value]=\"wizardFieldData\"\n [required]=\"wizardFieldConfig.required || false\"\n placeholder=\"\"\n ></gn-ui-text-area>\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.DATA_PICKER === wizardFieldConfig.type\"\n >\n <input\n [id]=\"wizardFieldConfig.id\"\n type=\"text\"\n (click)=\"datepicker.open()\"\n class=\"rounded p-2 text-gray-700 w-full leading-tight focus:outline-none focus:border-primary\"\n [value]=\"wizardFieldData\"\n [matDatepicker]=\"datepicker\"\n (dateChange)=\"onDateChange($event)\"\n />\n <mat-datepicker #datepicker></mat-datepicker>\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.DROPDOWN === wizardFieldConfig.type\"\n >\n <gn-ui-dropdown-selector\n #dropdown\n [id]=\"wizardFieldConfig.id\"\n [title]=\"''\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n [showTitle]=\"false\"\n [choices]=\"dropdownChoices\"\n [selected]=\"wizardFieldData\"\n ariaName=\"search-sort-by\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex;flex:1}gn-ui-text-input::ng-deep input,input[type=text]{height:100%;background:white;color:#000;font-style:italic;border-width:2px;border-color:var(--color-primary)}gn-ui-text-area::ng-deep textarea{border-width:2px;border-color:var(--color-primary)}gn-ui-dropdown-selector::ng-deep div{height:100%}gn-ui-dropdown-selector::ng-deep select{height:100%;border-width:2px;border-color:var(--color-primary);background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "hint", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "component", type: ChipsInputComponent, selector: "gn-ui-chips-input", inputs: ["url", "placeholder", "selectedItems", "required", "loadOnce", "autocompleteItems"], outputs: ["itemsChange"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i2$3.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i2$3.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
33134
33949
|
}
|
|
33135
33950
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: WizardFieldComponent, decorators: [{
|
|
33136
33951
|
type: Component,
|
|
@@ -33459,6 +34274,76 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
33459
34274
|
args: [{ selector: 'gn-ui-form-field-temporal-extent', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<p>form-field-temporal-extent works!</p>\n" }]
|
|
33460
34275
|
}] });
|
|
33461
34276
|
|
|
34277
|
+
class FormFieldLicenseComponent {
|
|
34278
|
+
constructor() {
|
|
34279
|
+
this.choices = [
|
|
34280
|
+
{
|
|
34281
|
+
value: 'cc-by',
|
|
34282
|
+
label: marker('editor.record.form.license.cc-by'),
|
|
34283
|
+
},
|
|
34284
|
+
{
|
|
34285
|
+
value: 'cc-by-sa',
|
|
34286
|
+
label: marker('editor.record.form.license.cc-by-sa'),
|
|
34287
|
+
},
|
|
34288
|
+
{
|
|
34289
|
+
value: 'cc-zero',
|
|
34290
|
+
label: marker('editor.record.form.license.cc-zero'),
|
|
34291
|
+
},
|
|
34292
|
+
{
|
|
34293
|
+
value: 'etalab',
|
|
34294
|
+
label: marker('editor.record.form.license.etalab'),
|
|
34295
|
+
},
|
|
34296
|
+
{
|
|
34297
|
+
value: 'etalab-v2',
|
|
34298
|
+
label: marker('editor.record.form.license.etalab-v2'),
|
|
34299
|
+
},
|
|
34300
|
+
{
|
|
34301
|
+
value: 'odbl',
|
|
34302
|
+
label: marker('editor.record.form.license.odbl'),
|
|
34303
|
+
},
|
|
34304
|
+
{
|
|
34305
|
+
value: 'odc-by',
|
|
34306
|
+
label: marker('editor.record.form.license.odc-by'),
|
|
34307
|
+
},
|
|
34308
|
+
{
|
|
34309
|
+
value: 'pddl',
|
|
34310
|
+
label: marker('editor.record.form.license.pddl'),
|
|
34311
|
+
},
|
|
34312
|
+
{
|
|
34313
|
+
value: 'unknown',
|
|
34314
|
+
label: marker('editor.record.form.license.unknown'),
|
|
34315
|
+
},
|
|
34316
|
+
];
|
|
34317
|
+
}
|
|
34318
|
+
get selected() {
|
|
34319
|
+
return this.control.value[0]?.text;
|
|
34320
|
+
}
|
|
34321
|
+
onSelectValue(value) {
|
|
34322
|
+
this.control.setValue([{ text: value }]);
|
|
34323
|
+
}
|
|
34324
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldLicenseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34325
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldLicenseComponent, isStandalone: true, selector: "gn-ui-form-field-license", inputs: { control: "control", label: "label" }, ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"label\"\n [showTitle]=\"false\"\n [choices]=\"choices\"\n [selected]=\"selected\"\n (selectValue)=\"onSelectValue($event)\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
34326
|
+
}
|
|
34327
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldLicenseComponent, decorators: [{
|
|
34328
|
+
type: Component,
|
|
34329
|
+
args: [{ selector: 'gn-ui-form-field-license', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [DropdownSelectorComponent], template: "<gn-ui-dropdown-selector\n [title]=\"label\"\n [showTitle]=\"false\"\n [choices]=\"choices\"\n [selected]=\"selected\"\n (selectValue)=\"onSelectValue($event)\"\n>\n</gn-ui-dropdown-selector>\n" }]
|
|
34330
|
+
}], propDecorators: { control: [{
|
|
34331
|
+
type: Input
|
|
34332
|
+
}], label: [{
|
|
34333
|
+
type: Input
|
|
34334
|
+
}] } });
|
|
34335
|
+
|
|
34336
|
+
class FormFieldResourceUpdatedComponent {
|
|
34337
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldResourceUpdatedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34338
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldResourceUpdatedComponent, isStandalone: true, selector: "gn-ui-form-field-resource-updated", inputs: { control: "control" }, ngImport: i0, template: "<gn-ui-date-picker\n [date]=\"control.value\"\n (dateChange)=\"control.setValue($event)\"\n></gn-ui-date-picker>\n", styles: [""], dependencies: [{ kind: "component", type: DatePickerComponent, selector: "gn-ui-date-picker", inputs: ["date"], outputs: ["dateChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
34339
|
+
}
|
|
34340
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldResourceUpdatedComponent, decorators: [{
|
|
34341
|
+
type: Component,
|
|
34342
|
+
args: [{ selector: 'gn-ui-form-field-resource-updated', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [DatePickerComponent], template: "<gn-ui-date-picker\n [date]=\"control.value\"\n (dateChange)=\"control.setValue($event)\"\n></gn-ui-date-picker>\n" }]
|
|
34343
|
+
}], propDecorators: { control: [{
|
|
34344
|
+
type: Input
|
|
34345
|
+
}] } });
|
|
34346
|
+
|
|
33462
34347
|
class FormFieldComponent {
|
|
33463
34348
|
set value(v) {
|
|
33464
34349
|
this.formControl.setValue(v, {
|
|
@@ -33513,8 +34398,17 @@ class FormFieldComponent {
|
|
|
33513
34398
|
get isAbstract() {
|
|
33514
34399
|
return this.model === 'abstract';
|
|
33515
34400
|
}
|
|
34401
|
+
get isLicenses() {
|
|
34402
|
+
return this.model === 'licenses';
|
|
34403
|
+
}
|
|
34404
|
+
get isResourceUpdated() {
|
|
34405
|
+
return this.model === 'resourceUpdated';
|
|
34406
|
+
}
|
|
34407
|
+
get withoutWrapper() {
|
|
34408
|
+
return this.model === 'title' || this.model === 'abstract';
|
|
34409
|
+
}
|
|
33516
34410
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33517
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { model: "model", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col h-full\">\n <
|
|
34411
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { model: "model", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <h2\n #titleInput\n class=\"grow text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </h2>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n [type]=\"simpleType\"\n [control]=\"formControl\"\n [readonly]=\"isFieldLocked\"\n [invalid]=\"isFieldInvalid\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isFileField\">\n <gn-ui-form-field-file\n [control]=\"formControl\"\n [readonly]=\"isFieldLocked\"\n [invalid]=\"isFieldInvalid\"\n ></gn-ui-form-field-file>\n </ng-container>\n <ng-container *ngIf=\"isArrayField\">\n <gn-ui-form-field-array></gn-ui-form-field-array>\n </ng-container>\n <ng-container *ngIf=\"isObjectField\">\n <gn-ui-form-field-object></gn-ui-form-field-object>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtentField\">\n <gn-ui-form-field-temporal-extent></gn-ui-form-field-temporal-extent>\n </ng-container>\n <div\n *ngIf=\"isFieldInvalid && config.invalidHintKey\"\n class=\"mt-2 text-pink-500 text-sm field-invalid-hint\"\n >\n {{ config.invalidHintKey | translate }}\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: EditableLabelDirective, selector: "[gnUiEditableLabel]", inputs: ["gnUiEditableLabel"], outputs: ["editableLabelChanged"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: FormFieldLicenseComponent, selector: "gn-ui-form-field-license", inputs: ["control", "label"] }, { kind: "component", type: FormFieldResourceUpdatedComponent, selector: "gn-ui-form-field-resource-updated", inputs: ["control"] }, { kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "control", "readonly", "invalid", "placeholder", "options"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["control", "label", "hint", "helperText", "placeholder"] }, { kind: "component", type: FormFieldObjectComponent, selector: "gn-ui-form-field-object" }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldTemporalExtentComponent, selector: "gn-ui-form-field-temporal-extent" }, { kind: "component", type: FormFieldFileComponent, selector: "gn-ui-form-field-file", inputs: ["control", "readonly", "invalid", "placeholder"] }, { kind: "component", type: FormFieldArrayComponent, selector: "gn-ui-form-field-array" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
33518
34412
|
}
|
|
33519
34413
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldComponent, decorators: [{
|
|
33520
34414
|
type: Component,
|
|
@@ -33524,6 +34418,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
33524
34418
|
EditableLabelDirective,
|
|
33525
34419
|
MatIconModule,
|
|
33526
34420
|
MatTooltipModule,
|
|
34421
|
+
FormFieldWrapperComponent,
|
|
34422
|
+
FormFieldLicenseComponent,
|
|
34423
|
+
FormFieldResourceUpdatedComponent,
|
|
33527
34424
|
FormFieldSimpleComponent,
|
|
33528
34425
|
FormFieldRichComponent,
|
|
33529
34426
|
FormFieldObjectComponent,
|
|
@@ -33532,7 +34429,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
33532
34429
|
FormFieldFileComponent,
|
|
33533
34430
|
FormFieldArrayComponent,
|
|
33534
34431
|
TranslateModule,
|
|
33535
|
-
], template: "<div class=\"flex flex-col h-full\">\n <
|
|
34432
|
+
], template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <h2\n #titleInput\n class=\"grow text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </h2>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n [type]=\"simpleType\"\n [control]=\"formControl\"\n [readonly]=\"isFieldLocked\"\n [invalid]=\"isFieldInvalid\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isFileField\">\n <gn-ui-form-field-file\n [control]=\"formControl\"\n [readonly]=\"isFieldLocked\"\n [invalid]=\"isFieldInvalid\"\n ></gn-ui-form-field-file>\n </ng-container>\n <ng-container *ngIf=\"isArrayField\">\n <gn-ui-form-field-array></gn-ui-form-field-array>\n </ng-container>\n <ng-container *ngIf=\"isObjectField\">\n <gn-ui-form-field-object></gn-ui-form-field-object>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtentField\">\n <gn-ui-form-field-temporal-extent></gn-ui-form-field-temporal-extent>\n </ng-container>\n <div\n *ngIf=\"isFieldInvalid && config.invalidHintKey\"\n class=\"mt-2 text-pink-500 text-sm field-invalid-hint\"\n >\n {{ config.invalidHintKey | translate }}\n </div>\n</ng-template>\n" }]
|
|
33536
34433
|
}], ctorParameters: function () { return []; }, propDecorators: { model: [{
|
|
33537
34434
|
type: Input
|
|
33538
34435
|
}], config: [{
|
|
@@ -33863,7 +34760,7 @@ class RouterEffects {
|
|
|
33863
34760
|
* the search results happens
|
|
33864
34761
|
*/
|
|
33865
34762
|
this.navigateToSearch$ = createEffect(() => this._actions$.pipe(navigation(this.routerConfig.searchRouteComponent, {
|
|
33866
|
-
run: () =>
|
|
34763
|
+
run: () => closeMetadata(),
|
|
33867
34764
|
})));
|
|
33868
34765
|
this.navigateBack$ = createEffect(() => this._actions$.pipe(ofType(backAction), tap$1(() => this._location.back())), { dispatch: false });
|
|
33869
34766
|
this.navigateForward$ = createEffect(() => this._actions$.pipe(ofType(forwardAction), tap$1(() => this._location.forward())), { dispatch: false });
|
|
@@ -33890,7 +34787,7 @@ class DefaultRouterModule {
|
|
|
33890
34787
|
};
|
|
33891
34788
|
}
|
|
33892
34789
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DefaultRouterModule, deps: [{ token: RouterService }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
33893
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: DefaultRouterModule, declarations: [SearchRouterContainerDirective], imports: [i1$2.StoreFeatureModule, i3$
|
|
34790
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: DefaultRouterModule, declarations: [SearchRouterContainerDirective], imports: [i1$2.StoreFeatureModule, i3$2.StoreRouterConnectingModule, i1$8.EffectsFeatureModule], exports: [SearchRouterContainerDirective] }); }
|
|
33894
34791
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DefaultRouterModule, providers: [
|
|
33895
34792
|
RouterFacade,
|
|
33896
34793
|
{
|
|
@@ -33933,5 +34830,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
33933
34830
|
* Generated bundle index. Do not edit.
|
|
33934
34831
|
*/
|
|
33935
34832
|
|
|
33936
|
-
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldWrapperComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, Iso191153Converter, Iso19139Converter, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, downgradeImage, downsizeImage, dragPanCondition, dropEmptyTranslations, editorReducer, findConverterForDocument, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, openRecord, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$2 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, saveRecord, saveRecordFailure, saveRecordSuccess, selectEditorState, selectFallback, selectFallbackFields, selectField, selectRecord, selectRecordChangedSinceSave, selectRecordFields, selectRecordFieldsConfig, selectRecordSaveError, selectRecordSaving, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, totalPages, updateLayer, updateRecordField };
|
|
34833
|
+
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldWrapperComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, Iso191153Converter, Iso19139Converter, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, downgradeImage, downsizeImage, dragPanCondition, dropEmptyTranslations, editorReducer, findConverterForDocument, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, openRecord, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$2 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, saveRecord, saveRecordFailure, saveRecordSuccess, selectEditorState, selectFallback, selectFallbackFields, selectField, selectRecord, selectRecordChangedSinceSave, selectRecordFields, selectRecordFieldsConfig, selectRecordSaveError, selectRecordSaving, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, totalPages, updateLayer, updateRecordField };
|
|
33937
34834
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|