geonetwork-ui 2.3.0-dev.139106e0 → 2.3.0-dev.16f429aa
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/metadata-converter/src/lib/iso19139/read-parts.mjs +2 -2
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +2 -2
- 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 +21 -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/chart-view/chart-view.component.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-update-frequency/form-field-update-frequency.component.mjs +104 -0
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +25 -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 +23 -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 +37 -8
- package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +6 -2
- package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +1 -1
- 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 +4 -3
- 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 +50 -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/feature/search/src/index.mjs +2 -1
- package/esm2022/libs/feature/search/src/lib/results-layout/results-layout.component.mjs +1 -1
- package/esm2022/libs/feature/search/src/lib/sort-by/sort-by.component.mjs +1 -1
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +1 -1
- package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +1 -1
- package/esm2022/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.mjs +1 -1
- 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 +99 -36
- 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 +60 -0
- package/esm2022/libs/ui/inputs/src/index.mjs +16 -15
- package/esm2022/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.mjs +4 -3
- 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 +19 -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 +14 -11
- 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 +23 -0
- package/esm2022/translations/en.json +23 -0
- package/esm2022/translations/es.json +23 -0
- package/esm2022/translations/fr.json +23 -0
- package/esm2022/translations/it.json +23 -0
- package/esm2022/translations/nl.json +23 -0
- package/esm2022/translations/pt.json +23 -0
- package/fesm2022/geonetwork-ui.mjs +1845 -811
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.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-update-frequency/form-field-update-frequency.component.d.ts +21 -0
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +5 -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 +7 -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/map/src/lib/utils/map-utils.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/feature/search/src/index.d.ts +1 -0
- package/libs/feature/search/src/index.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.service.d.ts +3 -3
- package/libs/feature/search/src/lib/utils/service/fields.service.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 +24 -4
- 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 +21 -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/check-toggle/check-toggle.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.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 +2 -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 +2 -2
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +1 -1
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +1 -4
- 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 +40 -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-update-frequency/form-field-update-frequency.component.css +0 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.html +14 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +143 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +38 -33
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +21 -0
- package/src/libs/feature/editor/src/lib/fields.config.ts +22 -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 +7 -0
- package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +34 -8
- package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +5 -1
- 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 +79 -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/feature/search/src/index.ts +1 -0
- package/src/libs/feature/search/src/lib/utils/service/fields.service.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 +126 -30
- 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 +62 -0
- package/src/libs/ui/inputs/src/index.ts +15 -14
- package/src/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.ts +3 -0
- 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.html +1 -0
- package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +14 -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 +3 -3
- 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 +8 -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 +23 -0
- package/translations/en.json +23 -0
- package/translations/es.json +23 -0
- package/translations/fr.json +23 -0
- package/translations/it.json +23 -0
- package/translations/nl.json +23 -0
- package/translations/pt.json +23 -0
- package/translations/sk.json +23 -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';
|
|
@@ -28,8 +28,9 @@ import { transformExtent, fromLonLat } from 'ol/proj';
|
|
|
28
28
|
import ImageWMS from 'ol/source/ImageWMS';
|
|
29
29
|
import TileWMS from 'ol/source/TileWMS';
|
|
30
30
|
import VectorSource from 'ol/source/Vector';
|
|
31
|
-
import { defaults, DragPan, MouseWheelZoom } from 'ol/interaction';
|
|
31
|
+
import { defaults as defaults$1, DragPan, MouseWheelZoom } from 'ol/interaction';
|
|
32
32
|
import { mouseOnly, noModifierKeys, primaryAction, platformModifierKeyOnly } from 'ol/events/condition';
|
|
33
|
+
import { defaults } from 'ol/control.js';
|
|
33
34
|
import chroma from 'chroma-js';
|
|
34
35
|
import { WmtsEndpoint, WmsEndpoint, WfsEndpoint, OgcApiEndpoint, sharedFetch, useCache } from '@camptocamp/ogc-client';
|
|
35
36
|
import { register, fromEPSGCode } from 'ol/proj/proj4';
|
|
@@ -42,30 +43,33 @@ import TileLayer from 'ol/layer/Tile';
|
|
|
42
43
|
import XYZ from 'ol/source/XYZ';
|
|
43
44
|
import { bbox } from 'ol/loadingstrategy';
|
|
44
45
|
import WMTS from 'ol/source/WMTS';
|
|
45
|
-
import
|
|
46
|
+
import OGCVectorTile from 'ol/source/OGCVectorTile.js';
|
|
47
|
+
import { MVT, WFS, GeoJSON as GeoJSON$1 } from 'ol/format';
|
|
48
|
+
import VectorTileLayer from 'ol/layer/VectorTile';
|
|
49
|
+
import OGCMapTile from 'ol/source/OGCMapTile.js';
|
|
50
|
+
import * as i2$4 from '@angular/material/tabs';
|
|
46
51
|
import { MatTabsModule } from '@angular/material/tabs';
|
|
47
|
-
import * as i1$4 from '@angular/cdk/overlay';
|
|
48
|
-
import { CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';
|
|
49
52
|
import * as i2$1 from '@angular/forms';
|
|
50
53
|
import { UntypedFormControl, FormsModule, ReactiveFormsModule, FormControl } from '@angular/forms';
|
|
51
|
-
import * as i5 from 'ngx-chips';
|
|
52
|
-
import { TagInputModule } from 'ngx-chips';
|
|
53
54
|
import * as i4 from '@angular/material/autocomplete';
|
|
54
55
|
import { MatAutocompleteTrigger, MatAutocomplete, MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
55
|
-
import * as i5
|
|
56
|
+
import * as i5 from '@angular/material/core';
|
|
56
57
|
import { MatNativeDateModule, MAT_DATE_LOCALE, DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
|
|
58
|
+
import * as i1$4 from '@angular/material/checkbox';
|
|
59
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
60
|
+
import * as i5$1 from 'ngx-chips';
|
|
61
|
+
import { TagInputModule } from 'ngx-chips';
|
|
62
|
+
import * as i2$2 from '@angular/material/tooltip';
|
|
63
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
64
|
+
import * as i2$3 from '@angular/material/datepicker';
|
|
65
|
+
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
57
66
|
import * as i3 from 'ngx-dropzone';
|
|
58
67
|
import { NgxDropzoneModule } from 'ngx-dropzone';
|
|
59
|
-
import * as i1$5 from '@angular/
|
|
68
|
+
import * as i1$5 from '@angular/cdk/overlay';
|
|
69
|
+
import { CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';
|
|
70
|
+
import * as i1$6 from '@angular/material/progress-spinner';
|
|
60
71
|
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
72
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
67
|
-
import * as i3$2 from '@angular/material/datepicker';
|
|
68
|
-
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
69
73
|
import { MatInputModule } from '@angular/material/input';
|
|
70
74
|
import * as i1$7 from '@angular/router';
|
|
71
75
|
import { RouterModule, RouterLink, RouteReuseStrategy } from '@angular/router';
|
|
@@ -73,6 +77,8 @@ import Duration from 'duration-relativetimeformat';
|
|
|
73
77
|
import * as basicLightbox from 'basiclightbox';
|
|
74
78
|
import { marked } from 'marked';
|
|
75
79
|
import EmblaCarousel from 'embla-carousel';
|
|
80
|
+
import { formatDistance } from 'date-fns';
|
|
81
|
+
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
82
|
import * as i1$8 from '@ngrx/effects';
|
|
77
83
|
import { createEffect, ofType, EffectsModule, Actions } from '@ngrx/effects';
|
|
78
84
|
import tippy from 'tippy.js';
|
|
@@ -83,18 +89,17 @@ import { trigger, transition, animate, keyframes, style } from '@angular/animati
|
|
|
83
89
|
import { Chart, BarController, BarElement, CategoryScale, LinearScale, LineController, LineElement, PointElement, PieController, ArcElement, ScatterController, Tooltip, Colors, Legend } from 'chart.js';
|
|
84
90
|
import * as i4$1 from '@angular/cdk/scrolling';
|
|
85
91
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
86
|
-
import * as i2$
|
|
92
|
+
import * as i2$5 from '@angular/material/sort';
|
|
87
93
|
import { MatSort, MatSortModule } from '@angular/material/sort';
|
|
88
94
|
import * as i1$9 from '@angular/material/table';
|
|
89
95
|
import { MatTableModule } from '@angular/material/table';
|
|
90
|
-
import * as i3$
|
|
96
|
+
import * as i3$1 from 'ng-table-virtual-scroll';
|
|
91
97
|
import { TableVirtualScrollDataSource, TableVirtualScrollModule } from 'ng-table-virtual-scroll';
|
|
92
98
|
import * as Papa from 'papaparse';
|
|
93
99
|
import parseDate from 'date-fns/parse';
|
|
94
100
|
import parseIsoDate from 'date-fns/parseISO';
|
|
95
|
-
import { WFS, GeoJSON as GeoJSON$1 } from 'ol/format';
|
|
96
101
|
import { MomentDateAdapter, MAT_MOMENT_DATE_ADAPTER_OPTIONS } from '@angular/material-moment-adapter';
|
|
97
|
-
import * as i3$
|
|
102
|
+
import * as i3$2 from '@ngrx/router-store';
|
|
98
103
|
import { getRouterSelectors, routerReducer, StoreRouterConnectingModule, FullRouterStateSerializer } from '@ngrx/router-store';
|
|
99
104
|
import { navigation } from '@ngrx/router-store/data-persistence';
|
|
100
105
|
|
|
@@ -854,7 +859,7 @@ function getUpdateFrequencyFromCustomPeriod(isoPeriod) {
|
|
|
854
859
|
else if (days <= 7) {
|
|
855
860
|
return {
|
|
856
861
|
per: 'week',
|
|
857
|
-
updatedTimes: Math.round(7 / days),
|
|
862
|
+
updatedTimes: Math.round(7 / days - 0.0001), // this is to make sure that 'every 2 days' = '3 times per week'
|
|
858
863
|
};
|
|
859
864
|
}
|
|
860
865
|
else if (days) {
|
|
@@ -1153,7 +1158,7 @@ function getISODuration(updateFrequency) {
|
|
|
1153
1158
|
duration.hours = Math.round(24 / updateFrequency.updatedTimes);
|
|
1154
1159
|
break;
|
|
1155
1160
|
case 'week':
|
|
1156
|
-
duration.days = Math.round(7 / updateFrequency.updatedTimes);
|
|
1161
|
+
duration.days = Math.round(7 / updateFrequency.updatedTimes - 0.0001); // this is to make sure that '2 times per week' = 'every 3 days'
|
|
1157
1162
|
break;
|
|
1158
1163
|
case 'month':
|
|
1159
1164
|
if (updateFrequency.updatedTimes <= 1)
|
|
@@ -17271,6 +17276,7 @@ var next$6 = "weiter";
|
|
|
17271
17276
|
var previous$6 = "zurück";
|
|
17272
17277
|
var records$6 = "Datensätze";
|
|
17273
17278
|
var de = {
|
|
17279
|
+
"button.login": "",
|
|
17274
17280
|
"catalog.figures.datasets": "{count, plural, =0{Datensätze} one{Datensatz} other{Datensätze}}",
|
|
17275
17281
|
"catalog.figures.organisations": "{count, plural, =0{Organisationen} one{Organisation} other{Organisationen}}",
|
|
17276
17282
|
"chart.aggregation.average": "Durchschnitt",
|
|
@@ -17416,6 +17422,19 @@ var de = {
|
|
|
17416
17422
|
"downloads.format.unknown": "unbekannt",
|
|
17417
17423
|
"downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
|
|
17418
17424
|
dropFile: dropFile$6,
|
|
17425
|
+
"editor.record.form.license": "Lizenz",
|
|
17426
|
+
"editor.record.form.license.cc-by": "",
|
|
17427
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
17428
|
+
"editor.record.form.license.cc-zero": "",
|
|
17429
|
+
"editor.record.form.license.etalab": "",
|
|
17430
|
+
"editor.record.form.license.etalab-v2": "",
|
|
17431
|
+
"editor.record.form.license.odbl": "",
|
|
17432
|
+
"editor.record.form.license.odc-by": "",
|
|
17433
|
+
"editor.record.form.license.pddl": "",
|
|
17434
|
+
"editor.record.form.license.unknown": "Unbekannt oder nicht vorhanden",
|
|
17435
|
+
"editor.record.form.resourceUpdated": "",
|
|
17436
|
+
"editor.record.form.updateFrequency": "",
|
|
17437
|
+
"editor.record.form.updateFrequency.planned": "",
|
|
17419
17438
|
"editor.record.loadError.body": "",
|
|
17420
17439
|
"editor.record.loadError.closeMessage": "",
|
|
17421
17440
|
"editor.record.loadError.title": "",
|
|
@@ -17486,6 +17505,7 @@ var de = {
|
|
|
17486
17505
|
"multiselect.filter.placeholder": "Suche",
|
|
17487
17506
|
"nav.back": "Zurück",
|
|
17488
17507
|
next: next$6,
|
|
17508
|
+
"ogc.unreachable.unknown": "Der Dienst konnte nicht erreicht werden",
|
|
17489
17509
|
"organisation.filter.placeholder": "Ergebnisse filtern",
|
|
17490
17510
|
"organisation.sort.sortBy": "Sortieren nach:",
|
|
17491
17511
|
"organisations.hits.found": "{hits, plural, =0{Keine Organisation gefunden} other{{hits} von {total} Organisationen angezeigt}}",
|
|
@@ -17564,6 +17584,14 @@ var de = {
|
|
|
17564
17584
|
"record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
|
|
17565
17585
|
"record.metadata.updatedOn": "Letzte Aktualisierung der Dateninformationen",
|
|
17566
17586
|
"record.metadata.usage": "Nutzung und Einschränkungen",
|
|
17587
|
+
"record.metadata.userFeedbacks": "",
|
|
17588
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
17589
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
17590
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
17591
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
17592
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
17593
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
17594
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
17567
17595
|
"record.more.details": "Weitere Details",
|
|
17568
17596
|
"record.tab.chart": "Diagramm",
|
|
17569
17597
|
"record.tab.data": "Tabelle",
|
|
@@ -17641,6 +17669,7 @@ var next$5 = "next";
|
|
|
17641
17669
|
var previous$5 = "previous";
|
|
17642
17670
|
var records$5 = "records";
|
|
17643
17671
|
var en = {
|
|
17672
|
+
"button.login": "Log in",
|
|
17644
17673
|
"catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
|
|
17645
17674
|
"catalog.figures.organisations": "{count, plural, =0{organisations} one{organisation} other{organisations}}",
|
|
17646
17675
|
"chart.aggregation.average": "average",
|
|
@@ -17786,6 +17815,19 @@ var en = {
|
|
|
17786
17815
|
"downloads.format.unknown": "unknown",
|
|
17787
17816
|
"downloads.wfs.featuretype.not.found": "The layer was not found",
|
|
17788
17817
|
dropFile: dropFile$5,
|
|
17818
|
+
"editor.record.form.license": "License",
|
|
17819
|
+
"editor.record.form.license.cc-by": "Creative Commons CC-BY",
|
|
17820
|
+
"editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
17821
|
+
"editor.record.form.license.cc-zero": "Creative Commons CC-0",
|
|
17822
|
+
"editor.record.form.license.etalab": "Open Licence (Etalab)",
|
|
17823
|
+
"editor.record.form.license.etalab-v2": "Open Licence v2.0 (Etalab)",
|
|
17824
|
+
"editor.record.form.license.odbl": "Open Data Commons ODbL",
|
|
17825
|
+
"editor.record.form.license.odc-by": "Open Data Commons ODC-By",
|
|
17826
|
+
"editor.record.form.license.pddl": "Open Data Commons PDDL",
|
|
17827
|
+
"editor.record.form.license.unknown": "Unknown or absent",
|
|
17828
|
+
"editor.record.form.resourceUpdated": "Last update date",
|
|
17829
|
+
"editor.record.form.updateFrequency": "Update frequency",
|
|
17830
|
+
"editor.record.form.updateFrequency.planned": "The data should be updated regularly.",
|
|
17789
17831
|
"editor.record.loadError.body": "The record could not be loaded:",
|
|
17790
17832
|
"editor.record.loadError.closeMessage": "Understood",
|
|
17791
17833
|
"editor.record.loadError.title": "Error loading record",
|
|
@@ -17856,6 +17898,7 @@ var en = {
|
|
|
17856
17898
|
"multiselect.filter.placeholder": "Search",
|
|
17857
17899
|
"nav.back": "Back",
|
|
17858
17900
|
next: next$5,
|
|
17901
|
+
"ogc.unreachable.unknown": "The service could not be reached",
|
|
17859
17902
|
"organisation.filter.placeholder": "Filter results",
|
|
17860
17903
|
"organisation.sort.sortBy": "Sort by:",
|
|
17861
17904
|
"organisations.hits.found": "{hits, plural, =0{No organizations found} other{{hits} out of {total} organizations shown}}",
|
|
@@ -17934,6 +17977,14 @@ var en = {
|
|
|
17934
17977
|
"record.metadata.updateFrequency": "Data Update Frequency",
|
|
17935
17978
|
"record.metadata.updatedOn": "Last Data Information Update",
|
|
17936
17979
|
"record.metadata.usage": "License and Conditions",
|
|
17980
|
+
"record.metadata.userFeedbacks": "Questions / Answers",
|
|
17981
|
+
"record.metadata.userFeedbacks.anonymousUser": "In order to leave a comment, please log in.",
|
|
17982
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "Publish",
|
|
17983
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "Answer...",
|
|
17984
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "Write your comment here...",
|
|
17985
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Newest comments first",
|
|
17986
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Oldest comments first",
|
|
17987
|
+
"record.metadata.userFeedbacks.sortSelector.label": "Sort by ...",
|
|
17937
17988
|
"record.more.details": "Read more",
|
|
17938
17989
|
"record.tab.chart": "Chart",
|
|
17939
17990
|
"record.tab.data": "Table",
|
|
@@ -18011,6 +18062,7 @@ var next$4 = "";
|
|
|
18011
18062
|
var previous$4 = "";
|
|
18012
18063
|
var records$4 = "";
|
|
18013
18064
|
var es = {
|
|
18065
|
+
"button.login": "",
|
|
18014
18066
|
"catalog.figures.datasets": "conjuntos de datos",
|
|
18015
18067
|
"catalog.figures.organisations": "organizaciones",
|
|
18016
18068
|
"chart.aggregation.average": "promedio",
|
|
@@ -18156,6 +18208,19 @@ var es = {
|
|
|
18156
18208
|
"downloads.format.unknown": "",
|
|
18157
18209
|
"downloads.wfs.featuretype.not.found": "",
|
|
18158
18210
|
dropFile: dropFile$4,
|
|
18211
|
+
"editor.record.form.license": "",
|
|
18212
|
+
"editor.record.form.license.cc-by": "",
|
|
18213
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
18214
|
+
"editor.record.form.license.cc-zero": "",
|
|
18215
|
+
"editor.record.form.license.etalab": "",
|
|
18216
|
+
"editor.record.form.license.etalab-v2": "",
|
|
18217
|
+
"editor.record.form.license.odbl": "",
|
|
18218
|
+
"editor.record.form.license.odc-by": "",
|
|
18219
|
+
"editor.record.form.license.pddl": "",
|
|
18220
|
+
"editor.record.form.license.unknown": "",
|
|
18221
|
+
"editor.record.form.resourceUpdated": "",
|
|
18222
|
+
"editor.record.form.updateFrequency": "",
|
|
18223
|
+
"editor.record.form.updateFrequency.planned": "",
|
|
18159
18224
|
"editor.record.loadError.body": "",
|
|
18160
18225
|
"editor.record.loadError.closeMessage": "",
|
|
18161
18226
|
"editor.record.loadError.title": "",
|
|
@@ -18226,6 +18291,7 @@ var es = {
|
|
|
18226
18291
|
"multiselect.filter.placeholder": "",
|
|
18227
18292
|
"nav.back": "",
|
|
18228
18293
|
next: next$4,
|
|
18294
|
+
"ogc.unreachable.unknown": "",
|
|
18229
18295
|
"organisation.filter.placeholder": "",
|
|
18230
18296
|
"organisation.sort.sortBy": "",
|
|
18231
18297
|
"organisations.hits.found": "",
|
|
@@ -18304,6 +18370,14 @@ var es = {
|
|
|
18304
18370
|
"record.metadata.updateFrequency": "",
|
|
18305
18371
|
"record.metadata.updatedOn": "",
|
|
18306
18372
|
"record.metadata.usage": "",
|
|
18373
|
+
"record.metadata.userFeedbacks": "",
|
|
18374
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
18375
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
18376
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
18377
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
18378
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
18379
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
18380
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
18307
18381
|
"record.more.details": "",
|
|
18308
18382
|
"record.tab.chart": "",
|
|
18309
18383
|
"record.tab.data": "",
|
|
@@ -18381,6 +18455,7 @@ var next$3 = "suivant";
|
|
|
18381
18455
|
var previous$3 = "précédent";
|
|
18382
18456
|
var records$3 = "enregistrements";
|
|
18383
18457
|
var fr = {
|
|
18458
|
+
"button.login": "Se connecter",
|
|
18384
18459
|
"catalog.figures.datasets": "{count, plural, =0{données} one{donnée} other{données}}",
|
|
18385
18460
|
"catalog.figures.organisations": "{count, plural, =0{organisations} one{organisation} other{organisations}}",
|
|
18386
18461
|
"chart.aggregation.average": "moyenne",
|
|
@@ -18526,6 +18601,19 @@ var fr = {
|
|
|
18526
18601
|
"downloads.format.unknown": "inconnu",
|
|
18527
18602
|
"downloads.wfs.featuretype.not.found": "La couche n'a pas été retrouvée",
|
|
18528
18603
|
dropFile: dropFile$3,
|
|
18604
|
+
"editor.record.form.license": "Licence",
|
|
18605
|
+
"editor.record.form.license.cc-by": "",
|
|
18606
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
18607
|
+
"editor.record.form.license.cc-zero": "",
|
|
18608
|
+
"editor.record.form.license.etalab": "Licence Ouverte (Etalab)",
|
|
18609
|
+
"editor.record.form.license.etalab-v2": "Licence Ouverte v2.0 (Etalab)",
|
|
18610
|
+
"editor.record.form.license.odbl": "",
|
|
18611
|
+
"editor.record.form.license.odc-by": "",
|
|
18612
|
+
"editor.record.form.license.pddl": "",
|
|
18613
|
+
"editor.record.form.license.unknown": "Non-reconnue ou absente",
|
|
18614
|
+
"editor.record.form.resourceUpdated": "Date de dernière révision",
|
|
18615
|
+
"editor.record.form.updateFrequency": "Fréquence de mise à jour",
|
|
18616
|
+
"editor.record.form.updateFrequency.planned": "Ces données doivent être mise à jour régulièrement.",
|
|
18529
18617
|
"editor.record.loadError.body": "",
|
|
18530
18618
|
"editor.record.loadError.closeMessage": "",
|
|
18531
18619
|
"editor.record.loadError.title": "",
|
|
@@ -18596,6 +18684,7 @@ var fr = {
|
|
|
18596
18684
|
"multiselect.filter.placeholder": "Rechercher",
|
|
18597
18685
|
"nav.back": "Retour",
|
|
18598
18686
|
next: next$3,
|
|
18687
|
+
"ogc.unreachable.unknown": "Le service n'est pas accessible",
|
|
18599
18688
|
"organisation.filter.placeholder": "Filtrer les résultats",
|
|
18600
18689
|
"organisation.sort.sortBy": "Trier par :",
|
|
18601
18690
|
"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 +18763,14 @@ var fr = {
|
|
|
18674
18763
|
"record.metadata.updateFrequency": "Fréquence de mise à jour des données",
|
|
18675
18764
|
"record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
|
|
18676
18765
|
"record.metadata.usage": "Licences et conditions d'utilisation",
|
|
18766
|
+
"record.metadata.userFeedbacks": "Questions / Réponses",
|
|
18767
|
+
"record.metadata.userFeedbacks.anonymousUser": "Pour rédiger un commentaire, veuillez vous identifier.",
|
|
18768
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "Publier",
|
|
18769
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "Répondre...",
|
|
18770
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "Rédiger votre commentaire ici...",
|
|
18771
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Les plus récents en premier",
|
|
18772
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Les plus anciens en premier",
|
|
18773
|
+
"record.metadata.userFeedbacks.sortSelector.label": "Trier par ...",
|
|
18677
18774
|
"record.more.details": "Détails",
|
|
18678
18775
|
"record.tab.chart": "Graphique",
|
|
18679
18776
|
"record.tab.data": "Tableau",
|
|
@@ -18751,6 +18848,7 @@ var next$2 = "successivo";
|
|
|
18751
18848
|
var previous$2 = "precedente";
|
|
18752
18849
|
var records$2 = "record";
|
|
18753
18850
|
var it = {
|
|
18851
|
+
"button.login": "",
|
|
18754
18852
|
"catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
|
|
18755
18853
|
"catalog.figures.organisations": "{count, plural, =0{organizzazioni} one{organizzazione} other{organizzazioni}}",
|
|
18756
18854
|
"chart.aggregation.average": "media",
|
|
@@ -18896,6 +18994,19 @@ var it = {
|
|
|
18896
18994
|
"downloads.format.unknown": "sconosciuto",
|
|
18897
18995
|
"downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
|
|
18898
18996
|
dropFile: dropFile$2,
|
|
18997
|
+
"editor.record.form.license": "Licenza",
|
|
18998
|
+
"editor.record.form.license.cc-by": "",
|
|
18999
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
19000
|
+
"editor.record.form.license.cc-zero": "",
|
|
19001
|
+
"editor.record.form.license.etalab": "Licenza aperta (Etalab)",
|
|
19002
|
+
"editor.record.form.license.etalab-v2": "Licenza aperta v2.0 (Etalab)",
|
|
19003
|
+
"editor.record.form.license.odbl": "",
|
|
19004
|
+
"editor.record.form.license.odc-by": "",
|
|
19005
|
+
"editor.record.form.license.pddl": "",
|
|
19006
|
+
"editor.record.form.license.unknown": "Non riconosciuta o assente",
|
|
19007
|
+
"editor.record.form.resourceUpdated": "",
|
|
19008
|
+
"editor.record.form.updateFrequency": "",
|
|
19009
|
+
"editor.record.form.updateFrequency.planned": "",
|
|
18899
19010
|
"editor.record.loadError.body": "",
|
|
18900
19011
|
"editor.record.loadError.closeMessage": "",
|
|
18901
19012
|
"editor.record.loadError.title": "",
|
|
@@ -18966,6 +19077,7 @@ var it = {
|
|
|
18966
19077
|
"multiselect.filter.placeholder": "Cerca",
|
|
18967
19078
|
"nav.back": "Indietro",
|
|
18968
19079
|
next: next$2,
|
|
19080
|
+
"ogc.unreachable.unknown": "Il servizio non è accessibile",
|
|
18969
19081
|
"organisation.filter.placeholder": "Filtra i risultati",
|
|
18970
19082
|
"organisation.sort.sortBy": "Ordina per:",
|
|
18971
19083
|
"organisations.hits.found": "{hits, plural, =0{Nessuna organizzazione trovata} one{1 organizzazione su {total} visualizzata} other{{hits} organizzazioni su {total} visualizzate}}",
|
|
@@ -19044,6 +19156,14 @@ var it = {
|
|
|
19044
19156
|
"record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
|
|
19045
19157
|
"record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
|
|
19046
19158
|
"record.metadata.usage": "Licenze e limiti di utilizzo",
|
|
19159
|
+
"record.metadata.userFeedbacks": "",
|
|
19160
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
19161
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
19162
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
19163
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
19164
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
19165
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
19166
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
19047
19167
|
"record.more.details": "Dettagli",
|
|
19048
19168
|
"record.tab.chart": "Grafico",
|
|
19049
19169
|
"record.tab.data": "Tabella",
|
|
@@ -19121,6 +19241,7 @@ var next$1 = "";
|
|
|
19121
19241
|
var previous$1 = "";
|
|
19122
19242
|
var records$1 = "";
|
|
19123
19243
|
var nl = {
|
|
19244
|
+
"button.login": "",
|
|
19124
19245
|
"catalog.figures.datasets": "datasets",
|
|
19125
19246
|
"catalog.figures.organisations": "organisaties",
|
|
19126
19247
|
"chart.aggregation.average": "gemiddelde",
|
|
@@ -19266,6 +19387,19 @@ var nl = {
|
|
|
19266
19387
|
"downloads.format.unknown": "",
|
|
19267
19388
|
"downloads.wfs.featuretype.not.found": "",
|
|
19268
19389
|
dropFile: dropFile$1,
|
|
19390
|
+
"editor.record.form.license": "",
|
|
19391
|
+
"editor.record.form.license.cc-by": "",
|
|
19392
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
19393
|
+
"editor.record.form.license.cc-zero": "",
|
|
19394
|
+
"editor.record.form.license.etalab": "",
|
|
19395
|
+
"editor.record.form.license.etalab-v2": "",
|
|
19396
|
+
"editor.record.form.license.odbl": "",
|
|
19397
|
+
"editor.record.form.license.odc-by": "",
|
|
19398
|
+
"editor.record.form.license.pddl": "",
|
|
19399
|
+
"editor.record.form.license.unknown": "",
|
|
19400
|
+
"editor.record.form.resourceUpdated": "",
|
|
19401
|
+
"editor.record.form.updateFrequency": "",
|
|
19402
|
+
"editor.record.form.updateFrequency.planned": "",
|
|
19269
19403
|
"editor.record.loadError.body": "",
|
|
19270
19404
|
"editor.record.loadError.closeMessage": "",
|
|
19271
19405
|
"editor.record.loadError.title": "",
|
|
@@ -19336,6 +19470,7 @@ var nl = {
|
|
|
19336
19470
|
"multiselect.filter.placeholder": "",
|
|
19337
19471
|
"nav.back": "",
|
|
19338
19472
|
next: next$1,
|
|
19473
|
+
"ogc.unreachable.unknown": "",
|
|
19339
19474
|
"organisation.filter.placeholder": "",
|
|
19340
19475
|
"organisation.sort.sortBy": "",
|
|
19341
19476
|
"organisations.hits.found": "",
|
|
@@ -19414,6 +19549,14 @@ var nl = {
|
|
|
19414
19549
|
"record.metadata.updateFrequency": "",
|
|
19415
19550
|
"record.metadata.updatedOn": "",
|
|
19416
19551
|
"record.metadata.usage": "",
|
|
19552
|
+
"record.metadata.userFeedbacks": "",
|
|
19553
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
19554
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
19555
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
19556
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
19557
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
19558
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
19559
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
19417
19560
|
"record.more.details": "",
|
|
19418
19561
|
"record.tab.chart": "",
|
|
19419
19562
|
"record.tab.data": "",
|
|
@@ -19491,6 +19634,7 @@ var next = "";
|
|
|
19491
19634
|
var previous = "";
|
|
19492
19635
|
var records = "";
|
|
19493
19636
|
var pt = {
|
|
19637
|
+
"button.login": "",
|
|
19494
19638
|
"catalog.figures.datasets": "conjuntos de dados",
|
|
19495
19639
|
"catalog.figures.organisations": "organizações",
|
|
19496
19640
|
"chart.aggregation.average": "média",
|
|
@@ -19636,6 +19780,19 @@ var pt = {
|
|
|
19636
19780
|
"downloads.format.unknown": "",
|
|
19637
19781
|
"downloads.wfs.featuretype.not.found": "",
|
|
19638
19782
|
dropFile: dropFile,
|
|
19783
|
+
"editor.record.form.license": "",
|
|
19784
|
+
"editor.record.form.license.cc-by": "",
|
|
19785
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
19786
|
+
"editor.record.form.license.cc-zero": "",
|
|
19787
|
+
"editor.record.form.license.etalab": "",
|
|
19788
|
+
"editor.record.form.license.etalab-v2": "",
|
|
19789
|
+
"editor.record.form.license.odbl": "",
|
|
19790
|
+
"editor.record.form.license.odc-by": "",
|
|
19791
|
+
"editor.record.form.license.pddl": "",
|
|
19792
|
+
"editor.record.form.license.unknown": "",
|
|
19793
|
+
"editor.record.form.resourceUpdated": "",
|
|
19794
|
+
"editor.record.form.updateFrequency": "",
|
|
19795
|
+
"editor.record.form.updateFrequency.planned": "",
|
|
19639
19796
|
"editor.record.loadError.body": "",
|
|
19640
19797
|
"editor.record.loadError.closeMessage": "",
|
|
19641
19798
|
"editor.record.loadError.title": "",
|
|
@@ -19706,6 +19863,7 @@ var pt = {
|
|
|
19706
19863
|
"multiselect.filter.placeholder": "",
|
|
19707
19864
|
"nav.back": "",
|
|
19708
19865
|
next: next,
|
|
19866
|
+
"ogc.unreachable.unknown": "",
|
|
19709
19867
|
"organisation.filter.placeholder": "",
|
|
19710
19868
|
"organisation.sort.sortBy": "",
|
|
19711
19869
|
"organisations.hits.found": "",
|
|
@@ -19784,6 +19942,14 @@ var pt = {
|
|
|
19784
19942
|
"record.metadata.updateFrequency": "",
|
|
19785
19943
|
"record.metadata.updatedOn": "",
|
|
19786
19944
|
"record.metadata.usage": "",
|
|
19945
|
+
"record.metadata.userFeedbacks": "",
|
|
19946
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
19947
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
19948
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
19949
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
19950
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
19951
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
19952
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
19787
19953
|
"record.more.details": "",
|
|
19788
19954
|
"record.tab.chart": "",
|
|
19789
19955
|
"record.tab.data": "",
|
|
@@ -21166,6 +21332,16 @@ class GravatarService {
|
|
|
21166
21332
|
getProfileIcon(hash) {
|
|
21167
21333
|
return this.identicon$.pipe(map$1((identicon) => identicon || this.GRAVATAR_IDENTICON), map$1((identicon) => `${this.GRAVATAR_URL}${hash}?d=${identicon}`));
|
|
21168
21334
|
}
|
|
21335
|
+
async getProfileIconUrl(userId) {
|
|
21336
|
+
let iconUrl = '';
|
|
21337
|
+
try {
|
|
21338
|
+
iconUrl = await firstValueFrom(this.getProfileIcon(userId));
|
|
21339
|
+
}
|
|
21340
|
+
catch (error) {
|
|
21341
|
+
return '';
|
|
21342
|
+
}
|
|
21343
|
+
return iconUrl;
|
|
21344
|
+
}
|
|
21169
21345
|
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
21346
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GravatarService, providedIn: 'root' }); }
|
|
21171
21347
|
}
|
|
@@ -21317,6 +21493,39 @@ class Gn4PlatformMapper {
|
|
|
21317
21493
|
};
|
|
21318
21494
|
});
|
|
21319
21495
|
}
|
|
21496
|
+
userFeedbacksFromApi(userFeedback) {
|
|
21497
|
+
return {
|
|
21498
|
+
uuid: userFeedback.uuid,
|
|
21499
|
+
metadataUUID: userFeedback.metadataUUID,
|
|
21500
|
+
comment: userFeedback.comment,
|
|
21501
|
+
authorUserId: userFeedback.authorUserId.toString(),
|
|
21502
|
+
authorName: userFeedback.authorName,
|
|
21503
|
+
authorEmail: userFeedback.authorEmail,
|
|
21504
|
+
published: userFeedback.published,
|
|
21505
|
+
parentUuid: userFeedback.parentUuid ?? undefined,
|
|
21506
|
+
date: new Date(userFeedback.date),
|
|
21507
|
+
};
|
|
21508
|
+
}
|
|
21509
|
+
userFeedbacksToApi(userFeedback) {
|
|
21510
|
+
return {
|
|
21511
|
+
uuid: userFeedback.uuid,
|
|
21512
|
+
metadataUUID: userFeedback.metadataUUID,
|
|
21513
|
+
comment: userFeedback.comment,
|
|
21514
|
+
authorUserId: Number.parseInt(userFeedback.authorUserId),
|
|
21515
|
+
authorName: userFeedback.authorName,
|
|
21516
|
+
authorEmail: userFeedback.authorEmail,
|
|
21517
|
+
published: userFeedback.published,
|
|
21518
|
+
parentUuid: userFeedback.parentUuid,
|
|
21519
|
+
date: userFeedback.date.getTime().toString(),
|
|
21520
|
+
};
|
|
21521
|
+
}
|
|
21522
|
+
async createUserFeedbackViewModel(baseUserFeedback) {
|
|
21523
|
+
const userAvatarUrl = await this.avatarService.getProfileIconUrl(baseUserFeedback.authorUserId?.toString());
|
|
21524
|
+
return {
|
|
21525
|
+
...baseUserFeedback,
|
|
21526
|
+
avatarUrl: userAvatarUrl,
|
|
21527
|
+
};
|
|
21528
|
+
}
|
|
21320
21529
|
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
21530
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformMapper }); }
|
|
21322
21531
|
}
|
|
@@ -21326,7 +21535,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21326
21535
|
|
|
21327
21536
|
const minApiVersion = '4.2.2';
|
|
21328
21537
|
class Gn4PlatformService {
|
|
21329
|
-
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService) {
|
|
21538
|
+
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService, userfeedbackApiService) {
|
|
21330
21539
|
this.siteApiService = siteApiService;
|
|
21331
21540
|
this.meApi = meApi;
|
|
21332
21541
|
this.usersApi = usersApi;
|
|
@@ -21334,6 +21543,7 @@ class Gn4PlatformService {
|
|
|
21334
21543
|
this.toolsApiService = toolsApiService;
|
|
21335
21544
|
this.registriesApiService = registriesApiService;
|
|
21336
21545
|
this.langService = langService;
|
|
21546
|
+
this.userfeedbackApiService = userfeedbackApiService;
|
|
21337
21547
|
this.type = 'GeoNetwork';
|
|
21338
21548
|
this.keyTranslations$ = this.toolsApiService
|
|
21339
21549
|
.getTranslationsPackage1('gnui')
|
|
@@ -21353,7 +21563,7 @@ class Gn4PlatformService {
|
|
|
21353
21563
|
*/
|
|
21354
21564
|
this.thesauri = {};
|
|
21355
21565
|
this.me$ = this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
21356
|
-
this.
|
|
21566
|
+
this.isUserAnonymous$ = this.me$.pipe(map$1((user) => !user || !('id' in user)));
|
|
21357
21567
|
this.users$ = this.usersApi.getUsers().pipe(map$1((users) => users.map((user) => this.mapper.userFromApi(user))), shareReplay());
|
|
21358
21568
|
}
|
|
21359
21569
|
getType() {
|
|
@@ -21366,7 +21576,7 @@ class Gn4PlatformService {
|
|
|
21366
21576
|
return this.me$;
|
|
21367
21577
|
}
|
|
21368
21578
|
isAnonymous() {
|
|
21369
|
-
return this.
|
|
21579
|
+
return this.isUserAnonymous$;
|
|
21370
21580
|
}
|
|
21371
21581
|
getOrganizations() {
|
|
21372
21582
|
return undefined;
|
|
@@ -21402,12 +21612,25 @@ class Gn4PlatformService {
|
|
|
21402
21612
|
.pipe(map$1((thesaurus) => this.mapper.thesaurusFromApi(thesaurus, this.langService.iso3)), shareReplay(1));
|
|
21403
21613
|
return this.thesauri[uri];
|
|
21404
21614
|
}
|
|
21405
|
-
|
|
21615
|
+
getUserFeedbacks(uuid) {
|
|
21616
|
+
return this.userfeedbackApiService.getUserComments(uuid).pipe(map$1((userFeedbacks) => userFeedbacks.map(this.mapper.userFeedbacksFromApi)), catchError((error) => {
|
|
21617
|
+
console.error('Error fetching user feedbacks:', error);
|
|
21618
|
+
return of(undefined);
|
|
21619
|
+
}));
|
|
21620
|
+
}
|
|
21621
|
+
postUserFeedbacks(userFeedback) {
|
|
21622
|
+
const mappedUserFeedBack = this.mapper.userFeedbacksToApi(userFeedback);
|
|
21623
|
+
return this.userfeedbackApiService.newUserFeedback(mappedUserFeedBack).pipe(map$1(() => undefined), catchError((error) => {
|
|
21624
|
+
console.error('Error posting user feedback:', error);
|
|
21625
|
+
return of(undefined);
|
|
21626
|
+
}));
|
|
21627
|
+
}
|
|
21628
|
+
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
21629
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService }); }
|
|
21407
21630
|
}
|
|
21408
21631
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, decorators: [{
|
|
21409
21632
|
type: Injectable
|
|
21410
|
-
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }, { type: LangService }]; } });
|
|
21633
|
+
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }, { type: LangService }, { type: UserfeedbackApiService }]; } });
|
|
21411
21634
|
|
|
21412
21635
|
function provideGn4() {
|
|
21413
21636
|
return [
|
|
@@ -22134,6 +22357,27 @@ const FORMATS = {
|
|
|
22134
22357
|
color: '#de630b',
|
|
22135
22358
|
mimeTypes: ['application/x-dxf', 'image/x-dxf'],
|
|
22136
22359
|
},
|
|
22360
|
+
html: {
|
|
22361
|
+
extensions: ['html', 'htm'],
|
|
22362
|
+
priority: 12,
|
|
22363
|
+
color: '#f2bb3a',
|
|
22364
|
+
mimeTypes: ['text/html'],
|
|
22365
|
+
},
|
|
22366
|
+
fgb: {
|
|
22367
|
+
extensions: ['fgb', 'flatgeobuf'],
|
|
22368
|
+
priority: 13,
|
|
22369
|
+
color: '#f2bb3a',
|
|
22370
|
+
mimeTypes: ['application/flatgeobuf'],
|
|
22371
|
+
},
|
|
22372
|
+
jsonfg: {
|
|
22373
|
+
extensions: ['jsonfg', 'jsonfgc'],
|
|
22374
|
+
priority: 14,
|
|
22375
|
+
color: '#f2bb3a',
|
|
22376
|
+
mimeTypes: [
|
|
22377
|
+
'application/vnd.ogc.fg+json',
|
|
22378
|
+
'application/vnd.ogc.fg+json;compatibility=geojson',
|
|
22379
|
+
],
|
|
22380
|
+
},
|
|
22137
22381
|
};
|
|
22138
22382
|
function getFormatPriority(linkFormat) {
|
|
22139
22383
|
for (const format in FORMATS) {
|
|
@@ -22265,7 +22509,7 @@ class LinkClassifierService {
|
|
|
22265
22509
|
case 'wmts':
|
|
22266
22510
|
return [LinkUsage.API, LinkUsage.MAP_API];
|
|
22267
22511
|
case 'ogcFeatures':
|
|
22268
|
-
return [LinkUsage.API];
|
|
22512
|
+
return [LinkUsage.API, LinkUsage.DOWNLOAD, LinkUsage.GEODATA];
|
|
22269
22513
|
default:
|
|
22270
22514
|
return [LinkUsage.UNKNOWN];
|
|
22271
22515
|
}
|
|
@@ -22318,7 +22562,10 @@ class MapUtilsService {
|
|
|
22318
22562
|
}
|
|
22319
22563
|
createEmptyMap() {
|
|
22320
22564
|
return new Map$1({
|
|
22321
|
-
controls:
|
|
22565
|
+
controls: defaults({
|
|
22566
|
+
attribution: true,
|
|
22567
|
+
attributionOptions: { collapsible: false },
|
|
22568
|
+
}),
|
|
22322
22569
|
pixelRatio: 1,
|
|
22323
22570
|
});
|
|
22324
22571
|
}
|
|
@@ -22417,7 +22664,7 @@ class MapUtilsService {
|
|
|
22417
22664
|
}
|
|
22418
22665
|
prioritizePageScroll(interactions) {
|
|
22419
22666
|
interactions.clear();
|
|
22420
|
-
interactions.extend(defaults({
|
|
22667
|
+
interactions.extend(defaults$1({
|
|
22421
22668
|
// remove rotate interactions
|
|
22422
22669
|
altShiftDragRotate: false,
|
|
22423
22670
|
pinchRotate: false,
|
|
@@ -23534,6 +23781,7 @@ const DEFAULT_BASELAYER_CONTEXT = {
|
|
|
23534
23781
|
`https://b.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png`,
|
|
23535
23782
|
`https://c.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png`,
|
|
23536
23783
|
],
|
|
23784
|
+
attributions: `<span>© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, © <a href="https://carto.com/">Carto</a></span>`,
|
|
23537
23785
|
};
|
|
23538
23786
|
const DEFAULT_VIEW = {
|
|
23539
23787
|
center: [0, 15],
|
|
@@ -23566,18 +23814,39 @@ class MapContextService {
|
|
|
23566
23814
|
const style = this.styleService.styles.default;
|
|
23567
23815
|
switch (type) {
|
|
23568
23816
|
case MapContextLayerTypeEnum.OGCAPI:
|
|
23569
|
-
|
|
23570
|
-
|
|
23571
|
-
|
|
23572
|
-
|
|
23573
|
-
|
|
23574
|
-
|
|
23575
|
-
|
|
23817
|
+
if (layerModel.layerType === 'vectorTiles') {
|
|
23818
|
+
return new VectorTileLayer({
|
|
23819
|
+
source: new OGCVectorTile({
|
|
23820
|
+
url: layerModel.url,
|
|
23821
|
+
format: new MVT(),
|
|
23822
|
+
attributions: layerModel.attributions,
|
|
23823
|
+
}),
|
|
23824
|
+
});
|
|
23825
|
+
}
|
|
23826
|
+
else if (layerModel.layerType === 'mapTiles') {
|
|
23827
|
+
return new TileLayer({
|
|
23828
|
+
source: new OGCMapTile({
|
|
23829
|
+
url: layerModel.url,
|
|
23830
|
+
attributions: layerModel.attributions,
|
|
23831
|
+
}),
|
|
23832
|
+
});
|
|
23833
|
+
}
|
|
23834
|
+
else {
|
|
23835
|
+
return new VectorLayer({
|
|
23836
|
+
source: new VectorSource({
|
|
23837
|
+
format: new GeoJSON(),
|
|
23838
|
+
url: layerModel.url,
|
|
23839
|
+
attributions: layerModel.attributions,
|
|
23840
|
+
}),
|
|
23841
|
+
style,
|
|
23842
|
+
});
|
|
23843
|
+
}
|
|
23576
23844
|
case MapContextLayerTypeEnum.XYZ:
|
|
23577
23845
|
return new TileLayer({
|
|
23578
23846
|
source: new XYZ({
|
|
23579
23847
|
url: 'url' in layerModel ? layerModel.url : undefined,
|
|
23580
23848
|
urls: 'urls' in layerModel ? layerModel.urls : undefined,
|
|
23849
|
+
attributions: layerModel.attributions,
|
|
23581
23850
|
}),
|
|
23582
23851
|
});
|
|
23583
23852
|
case MapContextLayerTypeEnum.WMS:
|
|
@@ -23586,6 +23855,7 @@ class MapContextService {
|
|
|
23586
23855
|
url: layerModel.url,
|
|
23587
23856
|
params: { LAYERS: layerModel.name },
|
|
23588
23857
|
gutter: 20,
|
|
23858
|
+
attributions: layerModel.attributions,
|
|
23589
23859
|
}),
|
|
23590
23860
|
});
|
|
23591
23861
|
case MapContextLayerTypeEnum.WMTS: {
|
|
@@ -23609,6 +23879,7 @@ class MapContextService {
|
|
|
23609
23879
|
tileGrid,
|
|
23610
23880
|
projection: matrixSet.crs,
|
|
23611
23881
|
dimensions,
|
|
23882
|
+
attributions: layerModel.attributions,
|
|
23612
23883
|
}));
|
|
23613
23884
|
});
|
|
23614
23885
|
return olLayer;
|
|
@@ -23631,6 +23902,7 @@ class MapContextService {
|
|
|
23631
23902
|
});
|
|
23632
23903
|
},
|
|
23633
23904
|
strategy: bbox,
|
|
23905
|
+
attributions: layerModel.attributions,
|
|
23634
23906
|
}));
|
|
23635
23907
|
});
|
|
23636
23908
|
return olLayer;
|
|
@@ -23811,6 +24083,173 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23811
24083
|
type: Input
|
|
23812
24084
|
}] } });
|
|
23813
24085
|
|
|
24086
|
+
class PopupAlertComponent {
|
|
24087
|
+
constructor(changeDetector) {
|
|
24088
|
+
this.changeDetector = changeDetector;
|
|
24089
|
+
this.type = 'info';
|
|
24090
|
+
this.position = 'top';
|
|
24091
|
+
this.expanded = false;
|
|
24092
|
+
this.timeout = null;
|
|
24093
|
+
}
|
|
24094
|
+
get showDuration() {
|
|
24095
|
+
const chars = this.content.nativeElement.innerHTML.length;
|
|
24096
|
+
return Math.max(3000, chars * 20);
|
|
24097
|
+
}
|
|
24098
|
+
ngOnInit() {
|
|
24099
|
+
this.expandAndClose();
|
|
24100
|
+
}
|
|
24101
|
+
expand() {
|
|
24102
|
+
this.expanded = true;
|
|
24103
|
+
this.changeDetector.detectChanges();
|
|
24104
|
+
clearTimeout(this.timeout);
|
|
24105
|
+
}
|
|
24106
|
+
expandAndClose() {
|
|
24107
|
+
this.expanded = true;
|
|
24108
|
+
this.changeDetector.detectChanges();
|
|
24109
|
+
clearTimeout(this.timeout);
|
|
24110
|
+
this.timeout = setTimeout(() => {
|
|
24111
|
+
this.expanded = false;
|
|
24112
|
+
this.changeDetector.detectChanges();
|
|
24113
|
+
}, this.showDuration);
|
|
24114
|
+
}
|
|
24115
|
+
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 }); }
|
|
24116
|
+
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 }); }
|
|
24117
|
+
}
|
|
24118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PopupAlertComponent, decorators: [{
|
|
24119
|
+
type: Component,
|
|
24120
|
+
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"] }]
|
|
24121
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { icon: [{
|
|
24122
|
+
type: Input
|
|
24123
|
+
}], type: [{
|
|
24124
|
+
type: Input
|
|
24125
|
+
}], position: [{
|
|
24126
|
+
type: Input
|
|
24127
|
+
}], content: [{
|
|
24128
|
+
type: ViewChild,
|
|
24129
|
+
args: ['content']
|
|
24130
|
+
}] } });
|
|
24131
|
+
|
|
24132
|
+
class AutocompleteComponent {
|
|
24133
|
+
constructor(cdRef) {
|
|
24134
|
+
this.cdRef = cdRef;
|
|
24135
|
+
this.clearOnSelection = false;
|
|
24136
|
+
this.autoFocus = false;
|
|
24137
|
+
this.itemSelected = new EventEmitter();
|
|
24138
|
+
this.inputSubmitted = new EventEmitter();
|
|
24139
|
+
this.inputCleared = new EventEmitter();
|
|
24140
|
+
this.control = new UntypedFormControl();
|
|
24141
|
+
this.subscription = new Subscription();
|
|
24142
|
+
this.cancelEnter = true;
|
|
24143
|
+
this.selectionSubject = new ReplaySubject(1);
|
|
24144
|
+
this.lastInputValue$ = new ReplaySubject(1);
|
|
24145
|
+
this.error = null;
|
|
24146
|
+
this.displayWithFn = (item) => item;
|
|
24147
|
+
}
|
|
24148
|
+
ngOnChanges(changes) {
|
|
24149
|
+
const { value } = changes;
|
|
24150
|
+
if (value) {
|
|
24151
|
+
const previousTextValue = this.displayWithFn(value.previousValue);
|
|
24152
|
+
const currentTextValue = this.displayWithFn(value.currentValue);
|
|
24153
|
+
if (previousTextValue !== currentTextValue) {
|
|
24154
|
+
this.updateInputValue(value.currentValue);
|
|
24155
|
+
}
|
|
24156
|
+
}
|
|
24157
|
+
}
|
|
24158
|
+
ngOnInit() {
|
|
24159
|
+
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) => {
|
|
24160
|
+
this.error = error.message;
|
|
24161
|
+
return of([]);
|
|
24162
|
+
}), finalize(() => (this.searching = false)));
|
|
24163
|
+
this.subscription = this.control.valueChanges.subscribe((any) => {
|
|
24164
|
+
if (any !== '') {
|
|
24165
|
+
this.cancelEnter = false;
|
|
24166
|
+
}
|
|
24167
|
+
});
|
|
24168
|
+
this.control.valueChanges
|
|
24169
|
+
.pipe(filter((value) => typeof value === 'string'))
|
|
24170
|
+
.subscribe(this.lastInputValue$);
|
|
24171
|
+
}
|
|
24172
|
+
ngAfterViewInit() {
|
|
24173
|
+
this.autocomplete.optionSelected.subscribe(this.selectionSubject);
|
|
24174
|
+
if (this.autoFocus) {
|
|
24175
|
+
this.inputRef.nativeElement.focus();
|
|
24176
|
+
this.cdRef.detectChanges();
|
|
24177
|
+
}
|
|
24178
|
+
}
|
|
24179
|
+
ngOnDestroy() {
|
|
24180
|
+
this.subscription.unsubscribe();
|
|
24181
|
+
}
|
|
24182
|
+
updateInputValue(value) {
|
|
24183
|
+
if (value) {
|
|
24184
|
+
this.control.setValue(value);
|
|
24185
|
+
}
|
|
24186
|
+
if (this.inputRef) {
|
|
24187
|
+
this.inputRef.nativeElement.value = value?.title || '';
|
|
24188
|
+
}
|
|
24189
|
+
}
|
|
24190
|
+
clear() {
|
|
24191
|
+
this.inputRef.nativeElement.value = '';
|
|
24192
|
+
this.inputCleared.emit();
|
|
24193
|
+
this.selectionSubject
|
|
24194
|
+
.pipe(take(1))
|
|
24195
|
+
.subscribe((selection) => selection && selection.option.deselect());
|
|
24196
|
+
this.inputRef.nativeElement.focus();
|
|
24197
|
+
this.triggerRef.closePanel();
|
|
24198
|
+
}
|
|
24199
|
+
handleEnter(any) {
|
|
24200
|
+
if (!this.cancelEnter) {
|
|
24201
|
+
this.inputSubmitted.emit(any);
|
|
24202
|
+
this.triggerRef.closePanel();
|
|
24203
|
+
}
|
|
24204
|
+
}
|
|
24205
|
+
handleClickSearch() {
|
|
24206
|
+
this.inputSubmitted.emit(this.inputRef.nativeElement.value);
|
|
24207
|
+
this.triggerRef.closePanel();
|
|
24208
|
+
}
|
|
24209
|
+
handleSelection(event) {
|
|
24210
|
+
this.cancelEnter = true;
|
|
24211
|
+
this.itemSelected.emit(event.option.value);
|
|
24212
|
+
if (this.clearOnSelection) {
|
|
24213
|
+
this.lastInputValue$.pipe(first()).subscribe((any) => {
|
|
24214
|
+
this.inputRef.nativeElement.value = any;
|
|
24215
|
+
});
|
|
24216
|
+
}
|
|
24217
|
+
}
|
|
24218
|
+
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 }); }
|
|
24219
|
+
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 }); }
|
|
24220
|
+
}
|
|
24221
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
24222
|
+
type: Component,
|
|
24223
|
+
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"] }]
|
|
24224
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { placeholder: [{
|
|
24225
|
+
type: Input
|
|
24226
|
+
}], action: [{
|
|
24227
|
+
type: Input
|
|
24228
|
+
}], value: [{
|
|
24229
|
+
type: Input
|
|
24230
|
+
}], clearOnSelection: [{
|
|
24231
|
+
type: Input
|
|
24232
|
+
}], autoFocus: [{
|
|
24233
|
+
type: Input
|
|
24234
|
+
}], itemSelected: [{
|
|
24235
|
+
type: Output
|
|
24236
|
+
}], inputSubmitted: [{
|
|
24237
|
+
type: Output
|
|
24238
|
+
}], inputCleared: [{
|
|
24239
|
+
type: Output
|
|
24240
|
+
}], triggerRef: [{
|
|
24241
|
+
type: ViewChild,
|
|
24242
|
+
args: [MatAutocompleteTrigger]
|
|
24243
|
+
}], autocomplete: [{
|
|
24244
|
+
type: ViewChild,
|
|
24245
|
+
args: [MatAutocomplete]
|
|
24246
|
+
}], inputRef: [{
|
|
24247
|
+
type: ViewChild,
|
|
24248
|
+
args: ['searchInput']
|
|
24249
|
+
}], displayWithFn: [{
|
|
24250
|
+
type: Input
|
|
24251
|
+
}] } });
|
|
24252
|
+
|
|
23814
24253
|
class ButtonComponent {
|
|
23815
24254
|
constructor() {
|
|
23816
24255
|
this.btnClass = 'gn-ui-btn-default';
|
|
@@ -23862,171 +24301,213 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23862
24301
|
type: Output
|
|
23863
24302
|
}] } });
|
|
23864
24303
|
|
|
23865
|
-
|
|
23866
|
-
class DropdownSelectorComponent {
|
|
24304
|
+
class CheckToggleComponent {
|
|
23867
24305
|
constructor() {
|
|
23868
|
-
this.
|
|
23869
|
-
this.
|
|
23870
|
-
this.minWidth = '';
|
|
23871
|
-
this.selectValue = new EventEmitter();
|
|
23872
|
-
this.overlayOpen = false;
|
|
23873
|
-
this.overlayWidth = 'auto';
|
|
23874
|
-
this.overlayMaxHeight = 'none';
|
|
23875
|
-
this.overlayPositions = [
|
|
23876
|
-
{
|
|
23877
|
-
originX: 'start',
|
|
23878
|
-
originY: 'bottom',
|
|
23879
|
-
overlayX: 'start',
|
|
23880
|
-
overlayY: 'top',
|
|
23881
|
-
offsetY: 8,
|
|
23882
|
-
},
|
|
23883
|
-
{
|
|
23884
|
-
originX: 'start',
|
|
23885
|
-
originY: 'top',
|
|
23886
|
-
overlayX: 'start',
|
|
23887
|
-
overlayY: 'bottom',
|
|
23888
|
-
offsetY: -8,
|
|
23889
|
-
},
|
|
23890
|
-
];
|
|
23891
|
-
}
|
|
23892
|
-
get selectedChoice() {
|
|
23893
|
-
return (this.choices.find((choice) => choice.value === this.selected) ??
|
|
23894
|
-
this.choices[0]);
|
|
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;
|
|
24306
|
+
this.color = 'primary';
|
|
24307
|
+
this.toggled = new EventEmitter();
|
|
23911
24308
|
}
|
|
23912
|
-
|
|
23913
|
-
this.
|
|
23914
|
-
this.selected = choice.value;
|
|
23915
|
-
this.selectValue.emit(this.selected);
|
|
24309
|
+
toggle(event) {
|
|
24310
|
+
this.toggled.emit(event);
|
|
23916
24311
|
}
|
|
23917
|
-
|
|
23918
|
-
|
|
23919
|
-
|
|
23920
|
-
|
|
23921
|
-
|
|
23922
|
-
|
|
23923
|
-
|
|
23924
|
-
|
|
23925
|
-
|
|
23926
|
-
|
|
23927
|
-
|
|
23928
|
-
|
|
24312
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24313
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CheckToggleComponent, isStandalone: true, 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: "ngmodule", type: FormsModule }, { 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 }); }
|
|
24314
|
+
}
|
|
24315
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckToggleComponent, decorators: [{
|
|
24316
|
+
type: Component,
|
|
24317
|
+
args: [{ selector: 'gn-ui-check-toggle', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [FormsModule], 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" }]
|
|
24318
|
+
}], propDecorators: { title: [{
|
|
24319
|
+
type: Input
|
|
24320
|
+
}], label: [{
|
|
24321
|
+
type: Input
|
|
24322
|
+
}], value: [{
|
|
24323
|
+
type: Input
|
|
24324
|
+
}], color: [{
|
|
24325
|
+
type: Input
|
|
24326
|
+
}], toggled: [{
|
|
24327
|
+
type: Output
|
|
24328
|
+
}] } });
|
|
24329
|
+
|
|
24330
|
+
class CheckboxComponent {
|
|
24331
|
+
constructor() {
|
|
24332
|
+
this.type = 'default';
|
|
24333
|
+
this.checked = false;
|
|
24334
|
+
this.indeterminate = false;
|
|
24335
|
+
this.changed = new EventEmitter();
|
|
23929
24336
|
}
|
|
23930
|
-
|
|
23931
|
-
this.
|
|
24337
|
+
get classList() {
|
|
24338
|
+
return `${this.type}`;
|
|
23932
24339
|
}
|
|
23933
|
-
|
|
23934
|
-
|
|
24340
|
+
handleClick(event) {
|
|
24341
|
+
event.stopPropagation();
|
|
24342
|
+
this.checked = !this.checked;
|
|
24343
|
+
this.changed.emit(this.checked);
|
|
23935
24344
|
}
|
|
23936
|
-
|
|
23937
|
-
|
|
24345
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24346
|
+
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 }); }
|
|
24347
|
+
}
|
|
24348
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, decorators: [{
|
|
24349
|
+
type: Component,
|
|
24350
|
+
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"] }]
|
|
24351
|
+
}], propDecorators: { type: [{
|
|
24352
|
+
type: Input
|
|
24353
|
+
}], checked: [{
|
|
24354
|
+
type: Input
|
|
24355
|
+
}], indeterminate: [{
|
|
24356
|
+
type: Input
|
|
24357
|
+
}], changed: [{
|
|
24358
|
+
type: Output
|
|
24359
|
+
}] } });
|
|
24360
|
+
|
|
24361
|
+
class ChipsInputComponent {
|
|
24362
|
+
onChange(event) {
|
|
24363
|
+
this.rawChange.next(event);
|
|
23938
24364
|
}
|
|
23939
|
-
|
|
23940
|
-
|
|
23941
|
-
|
|
23942
|
-
|
|
23943
|
-
|
|
23944
|
-
|
|
23945
|
-
|
|
23946
|
-
|
|
23947
|
-
|
|
23948
|
-
|
|
23949
|
-
|
|
23950
|
-
|
|
23951
|
-
|
|
24365
|
+
constructor(http, translate) {
|
|
24366
|
+
this.http = http;
|
|
24367
|
+
this.translate = translate;
|
|
24368
|
+
this.required = false;
|
|
24369
|
+
this.loadOnce = false;
|
|
24370
|
+
this.autocompleteItems = [];
|
|
24371
|
+
this.invalid = false;
|
|
24372
|
+
this.items = [];
|
|
24373
|
+
this.requestAutocompleteItems = (text) => {
|
|
24374
|
+
if (this.url) {
|
|
24375
|
+
if (this.loadOnce && this.loadedItems) {
|
|
24376
|
+
return this.loadedItems;
|
|
24377
|
+
}
|
|
24378
|
+
const url = this.url(text);
|
|
24379
|
+
const lang = LANG_2_TO_3_MAPPER[this.translate.currentLang.slice(0, 2)];
|
|
24380
|
+
return this.http
|
|
24381
|
+
.get(url.replace('${lang}', lang))
|
|
24382
|
+
.pipe(map$1((item) => item.map((i) => i.values[lang])));
|
|
23952
24383
|
}
|
|
23953
|
-
|
|
23954
|
-
this.
|
|
23955
|
-
|
|
23956
|
-
|
|
23957
|
-
|
|
23958
|
-
|
|
23959
|
-
|
|
23960
|
-
this.closeOverlay();
|
|
23961
|
-
}
|
|
24384
|
+
else {
|
|
24385
|
+
return of(this.autocompleteItems || []);
|
|
24386
|
+
}
|
|
24387
|
+
};
|
|
24388
|
+
this.rawChange = new Subject();
|
|
24389
|
+
this.itemsChange = this.rawChange.pipe(distinctUntilChanged());
|
|
24390
|
+
this.subscription = new Subscription();
|
|
23962
24391
|
}
|
|
23963
|
-
|
|
23964
|
-
if (
|
|
23965
|
-
|
|
23966
|
-
const keyCode = event.code;
|
|
23967
|
-
if (keyCode === 'ArrowDown' || keyCode === 'ArrowRight') {
|
|
23968
|
-
event.preventDefault();
|
|
23969
|
-
this.shiftItemFocus(1);
|
|
23970
|
-
}
|
|
23971
|
-
else if (keyCode === 'ArrowLeft' || keyCode === 'ArrowUp') {
|
|
23972
|
-
event.preventDefault();
|
|
23973
|
-
this.shiftItemFocus(-1);
|
|
23974
|
-
}
|
|
23975
|
-
else if (keyCode === 'Escape') {
|
|
23976
|
-
this.closeOverlay();
|
|
24392
|
+
ngOnInit() {
|
|
24393
|
+
if (this.loadOnce) {
|
|
24394
|
+
this.loadedItems = this.requestAutocompleteItems('*').pipe(shareReplay(1));
|
|
23977
24395
|
}
|
|
24396
|
+
this.items = this.selectedItems;
|
|
24397
|
+
this.subscription = this.rawChange
|
|
24398
|
+
.pipe(tap$1((v) => (this.invalid = v.length === 0)))
|
|
24399
|
+
.subscribe();
|
|
24400
|
+
this.rawChange.next(this.items);
|
|
23978
24401
|
}
|
|
23979
|
-
|
|
23980
|
-
|
|
23981
|
-
if (index === -1)
|
|
23982
|
-
return;
|
|
23983
|
-
const max = this.choiceInputs.length;
|
|
23984
|
-
// modulo, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder
|
|
23985
|
-
const newIndex = (((index + shift) % max) + max) % max;
|
|
23986
|
-
this.choiceInputs.get(newIndex).nativeElement.focus();
|
|
24402
|
+
ngOnDestroy() {
|
|
24403
|
+
this.subscription.unsubscribe();
|
|
23987
24404
|
}
|
|
23988
|
-
|
|
23989
|
-
|
|
24405
|
+
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 }); }
|
|
24406
|
+
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"] }] }); }
|
|
24407
|
+
}
|
|
24408
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ChipsInputComponent, decorators: [{
|
|
24409
|
+
type: Component,
|
|
24410
|
+
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"] }]
|
|
24411
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i1$1.TranslateService }]; }, propDecorators: { url: [{
|
|
24412
|
+
type: Input
|
|
24413
|
+
}], placeholder: [{
|
|
24414
|
+
type: Input
|
|
24415
|
+
}], selectedItems: [{
|
|
24416
|
+
type: Input
|
|
24417
|
+
}], required: [{
|
|
24418
|
+
type: Input
|
|
24419
|
+
}], loadOnce: [{
|
|
24420
|
+
type: Input
|
|
24421
|
+
}], autocompleteItems: [{
|
|
24422
|
+
type: Input
|
|
24423
|
+
}], itemsChange: [{
|
|
24424
|
+
type: Output
|
|
24425
|
+
}] } });
|
|
24426
|
+
|
|
24427
|
+
class CopyTextButtonComponent {
|
|
24428
|
+
constructor() {
|
|
24429
|
+
this.displayText = true;
|
|
24430
|
+
this.rows = 1;
|
|
23990
24431
|
}
|
|
23991
|
-
|
|
23992
|
-
|
|
23993
|
-
|
|
23994
|
-
this.onSelectValue(choice);
|
|
23995
|
-
}
|
|
24432
|
+
copyText(event) {
|
|
24433
|
+
navigator.clipboard.writeText(this.text);
|
|
24434
|
+
event.target.blur();
|
|
23996
24435
|
}
|
|
23997
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
23998
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type:
|
|
24436
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24437
|
+
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 }); }
|
|
23999
24438
|
}
|
|
24000
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24439
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
|
|
24001
24440
|
type: Component,
|
|
24002
|
-
args: [{ selector: 'gn-ui-
|
|
24003
|
-
}], propDecorators: {
|
|
24004
|
-
type: Input
|
|
24005
|
-
}], showTitle: [{
|
|
24441
|
+
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" }]
|
|
24442
|
+
}], propDecorators: { text: [{
|
|
24006
24443
|
type: Input
|
|
24007
|
-
}],
|
|
24444
|
+
}], tooltipText: [{
|
|
24008
24445
|
type: Input
|
|
24009
|
-
}],
|
|
24446
|
+
}], displayText: [{
|
|
24010
24447
|
type: Input
|
|
24011
|
-
}],
|
|
24448
|
+
}], rows: [{
|
|
24012
24449
|
type: Input
|
|
24013
|
-
}]
|
|
24450
|
+
}] } });
|
|
24451
|
+
|
|
24452
|
+
class DatePickerComponent {
|
|
24453
|
+
constructor() {
|
|
24454
|
+
this.dateChange = new EventEmitter();
|
|
24455
|
+
}
|
|
24456
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24457
|
+
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"] }] }); }
|
|
24458
|
+
}
|
|
24459
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DatePickerComponent, decorators: [{
|
|
24460
|
+
type: Component,
|
|
24461
|
+
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"] }]
|
|
24462
|
+
}], propDecorators: { date: [{
|
|
24014
24463
|
type: Input
|
|
24015
|
-
}],
|
|
24464
|
+
}], dateChange: [{
|
|
24465
|
+
type: Output
|
|
24466
|
+
}] } });
|
|
24467
|
+
|
|
24468
|
+
class DateRangePickerComponent {
|
|
24469
|
+
startDateSelected(event) {
|
|
24470
|
+
this.startDate = event.value;
|
|
24471
|
+
}
|
|
24472
|
+
endDateSelected(event) {
|
|
24473
|
+
this.endDate = event.value;
|
|
24474
|
+
}
|
|
24475
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24476
|
+
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"] }] }); }
|
|
24477
|
+
}
|
|
24478
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DateRangePickerComponent, decorators: [{
|
|
24479
|
+
type: Component,
|
|
24480
|
+
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"] }]
|
|
24481
|
+
}] });
|
|
24482
|
+
|
|
24483
|
+
const placeholder = 'dropFile';
|
|
24484
|
+
marker('dropFile');
|
|
24485
|
+
class DragAndDropFileInputComponent {
|
|
24486
|
+
constructor() {
|
|
24487
|
+
this.placeholder = placeholder;
|
|
24488
|
+
this.accept = '*';
|
|
24489
|
+
this.fileChange = new EventEmitter();
|
|
24490
|
+
this.selectedFile = null;
|
|
24491
|
+
}
|
|
24492
|
+
get fileName() {
|
|
24493
|
+
return this.selectedFile && this.selectedFile.name;
|
|
24494
|
+
}
|
|
24495
|
+
selectFile(event) {
|
|
24496
|
+
this.selectedFile = event.addedFiles[0];
|
|
24497
|
+
this.fileChange.emit(this.selectedFile);
|
|
24498
|
+
}
|
|
24499
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DragAndDropFileInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24500
|
+
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"] }] }); }
|
|
24501
|
+
}
|
|
24502
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DragAndDropFileInputComponent, decorators: [{
|
|
24503
|
+
type: Component,
|
|
24504
|
+
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"] }]
|
|
24505
|
+
}], propDecorators: { placeholder: [{
|
|
24016
24506
|
type: Input
|
|
24017
|
-
}],
|
|
24507
|
+
}], accept: [{
|
|
24018
24508
|
type: Input
|
|
24019
|
-
}],
|
|
24509
|
+
}], fileChange: [{
|
|
24020
24510
|
type: Output
|
|
24021
|
-
}], overlayOrigin: [{
|
|
24022
|
-
type: ViewChild,
|
|
24023
|
-
args: ['overlayOrigin']
|
|
24024
|
-
}], overlay: [{
|
|
24025
|
-
type: ViewChild,
|
|
24026
|
-
args: [CdkConnectedOverlay]
|
|
24027
|
-
}], choiceInputs: [{
|
|
24028
|
-
type: ViewChildren,
|
|
24029
|
-
args: ['choiceInputs', { read: ElementRef }]
|
|
24030
24511
|
}] } });
|
|
24031
24512
|
|
|
24032
24513
|
class DropdownMultiselectComponent {
|
|
@@ -24174,13 +24655,13 @@ class DropdownMultiselectComponent {
|
|
|
24174
24655
|
propagateToDocumentOnly(event);
|
|
24175
24656
|
this.setFocus();
|
|
24176
24657
|
}
|
|
24177
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, deps: [{ token: i1$
|
|
24178
|
-
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$
|
|
24658
|
+
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 }); }
|
|
24659
|
+
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 }); }
|
|
24179
24660
|
}
|
|
24180
24661
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, decorators: [{
|
|
24181
24662
|
type: Component,
|
|
24182
24663
|
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" }]
|
|
24183
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
24664
|
+
}], ctorParameters: function () { return [{ type: i1$5.ScrollStrategyOptions }]; }, propDecorators: { title: [{
|
|
24184
24665
|
type: Input
|
|
24185
24666
|
}], choices: [{
|
|
24186
24667
|
type: Input
|
|
@@ -24211,311 +24692,265 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24211
24692
|
args: ['checkBox', { read: ElementRef }]
|
|
24212
24693
|
}] } });
|
|
24213
24694
|
|
|
24214
|
-
|
|
24695
|
+
const DEFAULT_ROW_NUMBERS = 6;
|
|
24696
|
+
class DropdownSelectorComponent {
|
|
24215
24697
|
constructor() {
|
|
24216
|
-
this.
|
|
24217
|
-
this.
|
|
24218
|
-
this.
|
|
24219
|
-
this.
|
|
24698
|
+
this.showTitle = true;
|
|
24699
|
+
this.extraBtnClass = '';
|
|
24700
|
+
this.minWidth = '';
|
|
24701
|
+
this.selectValue = new EventEmitter();
|
|
24702
|
+
this.overlayOpen = false;
|
|
24703
|
+
this.overlayWidth = 'auto';
|
|
24704
|
+
this.overlayMaxHeight = 'none';
|
|
24705
|
+
this.overlayPositions = [
|
|
24706
|
+
{
|
|
24707
|
+
originX: 'start',
|
|
24708
|
+
originY: 'bottom',
|
|
24709
|
+
overlayX: 'start',
|
|
24710
|
+
overlayY: 'top',
|
|
24711
|
+
offsetY: 8,
|
|
24712
|
+
},
|
|
24713
|
+
{
|
|
24714
|
+
originX: 'start',
|
|
24715
|
+
originY: 'top',
|
|
24716
|
+
overlayX: 'start',
|
|
24717
|
+
overlayY: 'bottom',
|
|
24718
|
+
offsetY: -8,
|
|
24719
|
+
},
|
|
24720
|
+
];
|
|
24220
24721
|
}
|
|
24221
|
-
|
|
24222
|
-
|
|
24722
|
+
get selectedChoice() {
|
|
24723
|
+
return (this.choices.find((choice) => choice.value === this.selected) ??
|
|
24724
|
+
this.choices[0]);
|
|
24223
24725
|
}
|
|
24224
|
-
|
|
24225
|
-
this.
|
|
24726
|
+
get id() {
|
|
24727
|
+
return this.title.toLowerCase().replace(/[^a-z]+/g, '-');
|
|
24226
24728
|
}
|
|
24227
|
-
|
|
24228
|
-
|
|
24229
|
-
this.checkRequired(value);
|
|
24230
|
-
this.rawChange.next(value);
|
|
24729
|
+
getChoiceLabel() {
|
|
24730
|
+
return this.selectedChoice?.label;
|
|
24231
24731
|
}
|
|
24232
|
-
|
|
24233
|
-
|
|
24234
|
-
|
|
24235
|
-
|
|
24236
|
-
|
|
24237
|
-
|
|
24238
|
-
}], propDecorators: { value: [{
|
|
24239
|
-
type: Input
|
|
24240
|
-
}], hint: [{
|
|
24241
|
-
type: Input
|
|
24242
|
-
}], required: [{
|
|
24243
|
-
type: Input
|
|
24244
|
-
}], valueChange: [{
|
|
24245
|
-
type: Output
|
|
24246
|
-
}], input: [{
|
|
24247
|
-
type: ViewChild,
|
|
24248
|
-
args: ['input']
|
|
24249
|
-
}] } });
|
|
24250
|
-
|
|
24251
|
-
class ChipsInputComponent {
|
|
24252
|
-
onChange(event) {
|
|
24253
|
-
this.rawChange.next(event);
|
|
24732
|
+
ngOnInit() {
|
|
24733
|
+
if (!this.maxRows)
|
|
24734
|
+
this.maxRows = DEFAULT_ROW_NUMBERS;
|
|
24735
|
+
if (!this.choices || this.choices.length === 0) {
|
|
24736
|
+
this.choices = [];
|
|
24737
|
+
}
|
|
24254
24738
|
}
|
|
24255
|
-
|
|
24256
|
-
this.
|
|
24257
|
-
|
|
24258
|
-
|
|
24259
|
-
this.
|
|
24260
|
-
this.
|
|
24261
|
-
this.
|
|
24262
|
-
|
|
24263
|
-
|
|
24264
|
-
|
|
24265
|
-
|
|
24266
|
-
|
|
24267
|
-
|
|
24268
|
-
|
|
24269
|
-
|
|
24270
|
-
|
|
24271
|
-
|
|
24272
|
-
|
|
24273
|
-
|
|
24274
|
-
|
|
24275
|
-
|
|
24739
|
+
isSelected(choice) {
|
|
24740
|
+
return choice === this.selectedChoice;
|
|
24741
|
+
}
|
|
24742
|
+
onSelectValue(choice) {
|
|
24743
|
+
this.closeOverlay();
|
|
24744
|
+
this.selected = choice.value;
|
|
24745
|
+
this.selectValue.emit(this.selected);
|
|
24746
|
+
}
|
|
24747
|
+
openOverlay() {
|
|
24748
|
+
this.overlayWidth =
|
|
24749
|
+
this.overlayOrigin.elementRef.nativeElement.getBoundingClientRect()
|
|
24750
|
+
.width + 'px';
|
|
24751
|
+
this.overlayMaxHeight = this.maxRows
|
|
24752
|
+
? `${this.maxRows * 29 + 60}px`
|
|
24753
|
+
: 'none';
|
|
24754
|
+
this.overlayOpen = true;
|
|
24755
|
+
return Promise.all([
|
|
24756
|
+
firstValueFrom(this.overlay.attach),
|
|
24757
|
+
firstValueFrom(this.choiceInputs.changes),
|
|
24758
|
+
]);
|
|
24759
|
+
}
|
|
24760
|
+
closeOverlay() {
|
|
24761
|
+
this.overlayOpen = false;
|
|
24762
|
+
}
|
|
24763
|
+
focusFirstItem() {
|
|
24764
|
+
this.choiceInputs.get(0).nativeElement.focus();
|
|
24765
|
+
}
|
|
24766
|
+
focusLastItem() {
|
|
24767
|
+
this.choiceInputs.get(this.choiceInputs.length - 1).nativeElement.focus();
|
|
24768
|
+
}
|
|
24769
|
+
async handleTriggerKeydown(event) {
|
|
24770
|
+
const keyCode = event.code;
|
|
24771
|
+
const isOpenKey = keyCode === 'ArrowDown' ||
|
|
24772
|
+
keyCode === 'ArrowUp' ||
|
|
24773
|
+
keyCode === 'ArrowLeft' ||
|
|
24774
|
+
keyCode === 'ArrowRight' ||
|
|
24775
|
+
keyCode === 'Enter' ||
|
|
24776
|
+
keyCode === 'Space';
|
|
24777
|
+
const isCloseKey = keyCode === 'Escape';
|
|
24778
|
+
if (isOpenKey) {
|
|
24779
|
+
event.preventDefault();
|
|
24780
|
+
if (!this.overlayOpen) {
|
|
24781
|
+
await this.openOverlay();
|
|
24276
24782
|
}
|
|
24277
|
-
|
|
24278
|
-
|
|
24279
|
-
|
|
24280
|
-
|
|
24783
|
+
if (keyCode === 'ArrowLeft' || keyCode === 'ArrowUp')
|
|
24784
|
+
this.focusLastItem();
|
|
24785
|
+
else
|
|
24786
|
+
this.focusFirstItem();
|
|
24787
|
+
}
|
|
24788
|
+
else if (this.overlayOpen && isCloseKey) {
|
|
24789
|
+
event.preventDefault();
|
|
24790
|
+
this.closeOverlay();
|
|
24791
|
+
}
|
|
24281
24792
|
}
|
|
24282
|
-
|
|
24283
|
-
if (this.
|
|
24284
|
-
|
|
24793
|
+
handleOverlayKeydown(event) {
|
|
24794
|
+
if (!this.overlayOpen)
|
|
24795
|
+
return;
|
|
24796
|
+
const keyCode = event.code;
|
|
24797
|
+
if (keyCode === 'ArrowDown' || keyCode === 'ArrowRight') {
|
|
24798
|
+
event.preventDefault();
|
|
24799
|
+
this.shiftItemFocus(1);
|
|
24800
|
+
}
|
|
24801
|
+
else if (keyCode === 'ArrowLeft' || keyCode === 'ArrowUp') {
|
|
24802
|
+
event.preventDefault();
|
|
24803
|
+
this.shiftItemFocus(-1);
|
|
24804
|
+
}
|
|
24805
|
+
else if (keyCode === 'Escape') {
|
|
24806
|
+
this.closeOverlay();
|
|
24285
24807
|
}
|
|
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
24808
|
}
|
|
24292
|
-
|
|
24293
|
-
this.
|
|
24809
|
+
shiftItemFocus(shift) {
|
|
24810
|
+
const index = this.focusedIndex;
|
|
24811
|
+
if (index === -1)
|
|
24812
|
+
return;
|
|
24813
|
+
const max = this.choiceInputs.length;
|
|
24814
|
+
// modulo, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder
|
|
24815
|
+
const newIndex = (((index + shift) % max) + max) % max;
|
|
24816
|
+
this.choiceInputs.get(newIndex).nativeElement.focus();
|
|
24294
24817
|
}
|
|
24295
|
-
|
|
24296
|
-
|
|
24818
|
+
get focusedIndex() {
|
|
24819
|
+
return this.choiceInputs.reduce((prev, curr, curIndex) => curr.nativeElement === document.activeElement ? curIndex : prev, -1);
|
|
24820
|
+
}
|
|
24821
|
+
selectIfEnter(event, choice) {
|
|
24822
|
+
if (event.code === 'Enter') {
|
|
24823
|
+
event.preventDefault();
|
|
24824
|
+
this.onSelectValue(choice);
|
|
24825
|
+
}
|
|
24826
|
+
}
|
|
24827
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24828
|
+
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", disabled: "disabled" }, 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 [disabled]=\"disabled\"\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 }); }
|
|
24297
24829
|
}
|
|
24298
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24830
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownSelectorComponent, decorators: [{
|
|
24299
24831
|
type: Component,
|
|
24300
|
-
args: [{ selector: 'gn-ui-
|
|
24301
|
-
|
|
24832
|
+
args: [{ selector: 'gn-ui-dropdown-selector', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
24833
|
+
CommonModule,
|
|
24834
|
+
ButtonComponent,
|
|
24835
|
+
OverlayModule,
|
|
24836
|
+
MatIconModule,
|
|
24837
|
+
TranslateModule,
|
|
24838
|
+
], 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 [disabled]=\"disabled\"\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" }]
|
|
24839
|
+
}], propDecorators: { title: [{
|
|
24302
24840
|
type: Input
|
|
24303
|
-
}],
|
|
24841
|
+
}], showTitle: [{
|
|
24304
24842
|
type: Input
|
|
24305
|
-
}],
|
|
24843
|
+
}], ariaName: [{
|
|
24306
24844
|
type: Input
|
|
24307
|
-
}],
|
|
24845
|
+
}], choices: [{
|
|
24308
24846
|
type: Input
|
|
24309
|
-
}],
|
|
24847
|
+
}], selected: [{
|
|
24310
24848
|
type: Input
|
|
24311
|
-
}],
|
|
24849
|
+
}], maxRows: [{
|
|
24312
24850
|
type: Input
|
|
24313
|
-
}],
|
|
24851
|
+
}], extraBtnClass: [{
|
|
24852
|
+
type: Input
|
|
24853
|
+
}], minWidth: [{
|
|
24854
|
+
type: Input
|
|
24855
|
+
}], disabled: [{
|
|
24856
|
+
type: Input
|
|
24857
|
+
}], selectValue: [{
|
|
24314
24858
|
type: Output
|
|
24859
|
+
}], overlayOrigin: [{
|
|
24860
|
+
type: ViewChild,
|
|
24861
|
+
args: ['overlayOrigin']
|
|
24862
|
+
}], overlay: [{
|
|
24863
|
+
type: ViewChild,
|
|
24864
|
+
args: [CdkConnectedOverlay]
|
|
24865
|
+
}], choiceInputs: [{
|
|
24866
|
+
type: ViewChildren,
|
|
24867
|
+
args: ['choiceInputs', { read: ElementRef }]
|
|
24315
24868
|
}] } });
|
|
24316
24869
|
|
|
24317
|
-
class
|
|
24318
|
-
constructor() {
|
|
24319
|
-
this.
|
|
24320
|
-
this.
|
|
24321
|
-
this.
|
|
24322
|
-
this.valueChange = this.rawChange.pipe(distinctUntilChanged());
|
|
24870
|
+
class EditableLabelDirective {
|
|
24871
|
+
constructor(el, renderer) {
|
|
24872
|
+
this.el = el;
|
|
24873
|
+
this.renderer = renderer;
|
|
24874
|
+
this.editableLabelChanged = new EventEmitter();
|
|
24323
24875
|
}
|
|
24324
24876
|
ngAfterViewInit() {
|
|
24325
|
-
|
|
24326
|
-
|
|
24327
|
-
|
|
24328
|
-
|
|
24329
|
-
|
|
24330
|
-
|
|
24331
|
-
|
|
24332
|
-
|
|
24333
|
-
|
|
24877
|
+
if (this.gnUiEditableLabel !== false) {
|
|
24878
|
+
const appendedInput = this.renderer.createElement('input');
|
|
24879
|
+
this.renderer.setStyle(appendedInput, 'background', 'inherit');
|
|
24880
|
+
this.renderer.setStyle(appendedInput, 'color', 'inherit');
|
|
24881
|
+
this.renderer.setStyle(appendedInput, 'font', 'inherit');
|
|
24882
|
+
this.renderer.setStyle(appendedInput, 'border', 'inherit');
|
|
24883
|
+
this.renderer.setStyle(appendedInput, 'width', '100%');
|
|
24884
|
+
this.renderer.setStyle(appendedInput, 'padding', 'inherit');
|
|
24885
|
+
this.renderer.setStyle(appendedInput, 'margin', '0');
|
|
24886
|
+
this.renderer.setStyle(appendedInput, 'height', 'inherit');
|
|
24887
|
+
this.renderer.setStyle(appendedInput, 'line-height', 'inherit');
|
|
24888
|
+
this.renderer.setStyle(appendedInput, 'text-decoration', 'inherit');
|
|
24889
|
+
const hostContent = this.el.nativeElement.textContent || '';
|
|
24890
|
+
const formattedContent = hostContent.replace(/\s+/g, ' ').trim();
|
|
24891
|
+
this.renderer.setProperty(appendedInput, 'value', formattedContent);
|
|
24892
|
+
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '');
|
|
24893
|
+
this.renderer.listen(appendedInput, 'input', (event) => {
|
|
24894
|
+
this.editableLabelChanged.emit(event.target.value);
|
|
24895
|
+
});
|
|
24896
|
+
this.renderer.appendChild(this.el.nativeElement, appendedInput);
|
|
24897
|
+
}
|
|
24334
24898
|
}
|
|
24335
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24336
|
-
static { this.ɵ
|
|
24899
|
+
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 }); }
|
|
24900
|
+
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 }); }
|
|
24337
24901
|
}
|
|
24338
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24339
|
-
type:
|
|
24340
|
-
args: [{
|
|
24341
|
-
|
|
24342
|
-
|
|
24343
|
-
|
|
24344
|
-
|
|
24345
|
-
}], required: [{
|
|
24346
|
-
type: Input
|
|
24347
|
-
}], valueChange: [{
|
|
24902
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, decorators: [{
|
|
24903
|
+
type: Directive,
|
|
24904
|
+
args: [{
|
|
24905
|
+
selector: '[gnUiEditableLabel]',
|
|
24906
|
+
standalone: true,
|
|
24907
|
+
}]
|
|
24908
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { editableLabelChanged: [{
|
|
24348
24909
|
type: Output
|
|
24349
|
-
}],
|
|
24350
|
-
type:
|
|
24351
|
-
args: ['input']
|
|
24910
|
+
}], gnUiEditableLabel: [{
|
|
24911
|
+
type: Input
|
|
24352
24912
|
}] } });
|
|
24353
24913
|
|
|
24354
|
-
class
|
|
24355
|
-
|
|
24356
|
-
|
|
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 }); }
|
|
24914
|
+
class NavigationButtonComponent {
|
|
24915
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24916
|
+
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 }); }
|
|
24385
24917
|
}
|
|
24386
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24918
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, decorators: [{
|
|
24387
24919
|
type: Component,
|
|
24388
|
-
args: [{ selector: 'gn-ui-
|
|
24389
|
-
}],
|
|
24390
|
-
type: Input
|
|
24391
|
-
}], type: [{
|
|
24920
|
+
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"] }]
|
|
24921
|
+
}], propDecorators: { label: [{
|
|
24392
24922
|
type: Input
|
|
24393
|
-
}],
|
|
24923
|
+
}], icon: [{
|
|
24394
24924
|
type: Input
|
|
24395
|
-
}], content: [{
|
|
24396
|
-
type: ViewChild,
|
|
24397
|
-
args: ['content']
|
|
24398
24925
|
}] } });
|
|
24399
24926
|
|
|
24400
|
-
class
|
|
24401
|
-
constructor(
|
|
24402
|
-
this.
|
|
24403
|
-
this.
|
|
24404
|
-
this.
|
|
24405
|
-
this.
|
|
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();
|
|
24927
|
+
class SearchInputComponent {
|
|
24928
|
+
constructor() {
|
|
24929
|
+
this.value = '';
|
|
24930
|
+
this.placeholder = '';
|
|
24931
|
+
this.rawChange = new Subject();
|
|
24932
|
+
this.valueChange = this.rawChange.pipe(distinctUntilChanged$1());
|
|
24449
24933
|
}
|
|
24450
|
-
|
|
24451
|
-
|
|
24452
|
-
|
|
24453
|
-
}
|
|
24454
|
-
if (this.inputRef) {
|
|
24455
|
-
this.inputRef.nativeElement.value = value?.title || '';
|
|
24456
|
-
}
|
|
24934
|
+
handleChange($event) {
|
|
24935
|
+
const value = $event.target.value;
|
|
24936
|
+
this.rawChange.next(value);
|
|
24457
24937
|
}
|
|
24458
24938
|
clear() {
|
|
24459
|
-
this.
|
|
24460
|
-
this.
|
|
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
|
-
}
|
|
24939
|
+
this.value = null;
|
|
24940
|
+
this.rawChange.next(null);
|
|
24485
24941
|
}
|
|
24486
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24487
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type:
|
|
24942
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24943
|
+
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 }); }
|
|
24488
24944
|
}
|
|
24489
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24945
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchInputComponent, decorators: [{
|
|
24490
24946
|
type: Component,
|
|
24491
|
-
args: [{ selector: 'gn-ui-
|
|
24492
|
-
}],
|
|
24493
|
-
type: Input
|
|
24494
|
-
}], action: [{
|
|
24495
|
-
type: Input
|
|
24496
|
-
}], value: [{
|
|
24497
|
-
type: Input
|
|
24498
|
-
}], clearOnSelection: [{
|
|
24947
|
+
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" }]
|
|
24948
|
+
}], propDecorators: { value: [{
|
|
24499
24949
|
type: Input
|
|
24500
|
-
}],
|
|
24950
|
+
}], placeholder: [{
|
|
24501
24951
|
type: Input
|
|
24502
|
-
}],
|
|
24503
|
-
type: Output
|
|
24504
|
-
}], inputSubmitted: [{
|
|
24505
|
-
type: Output
|
|
24506
|
-
}], inputCleared: [{
|
|
24952
|
+
}], valueChange: [{
|
|
24507
24953
|
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
24954
|
}] } });
|
|
24520
24955
|
|
|
24521
24956
|
class StarToggleComponent {
|
|
@@ -24553,115 +24988,119 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24553
24988
|
args: ['starOverlay']
|
|
24554
24989
|
}] } });
|
|
24555
24990
|
|
|
24556
|
-
class
|
|
24557
|
-
constructor(
|
|
24558
|
-
this.
|
|
24559
|
-
this.
|
|
24560
|
-
this.
|
|
24561
|
-
this.
|
|
24562
|
-
|
|
24563
|
-
|
|
24564
|
-
|
|
24565
|
-
|
|
24566
|
-
|
|
24567
|
-
|
|
24568
|
-
|
|
24569
|
-
|
|
24991
|
+
class TextAreaComponent {
|
|
24992
|
+
constructor() {
|
|
24993
|
+
this.value = '';
|
|
24994
|
+
this.disabled = false;
|
|
24995
|
+
this.extraClass = '';
|
|
24996
|
+
this.required = false;
|
|
24997
|
+
this.rawChange = new Subject();
|
|
24998
|
+
this.valueChange = this.rawChange.pipe(distinctUntilChanged());
|
|
24999
|
+
this.baseClasses = [
|
|
25000
|
+
'w-full',
|
|
25001
|
+
'pt-2',
|
|
25002
|
+
'pl-2',
|
|
25003
|
+
'resize-none',
|
|
25004
|
+
'border',
|
|
25005
|
+
'border-gray-800',
|
|
25006
|
+
'rounded italic',
|
|
25007
|
+
'leading-tight',
|
|
25008
|
+
'focus:outline-none',
|
|
25009
|
+
'focus:bg-background',
|
|
25010
|
+
'focus:border-primary',
|
|
25011
|
+
].join(' ');
|
|
25012
|
+
this.disabledClasses = ['cursor-not-allowed'].join(' ');
|
|
24570
25013
|
}
|
|
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);
|
|
25014
|
+
get classList() {
|
|
25015
|
+
return `${this.baseClasses} ${this.extraClass} ${this.disabled ? this.disabledClasses : ''}`;
|
|
24580
25016
|
}
|
|
24581
|
-
|
|
24582
|
-
this.
|
|
25017
|
+
ngAfterViewInit() {
|
|
25018
|
+
this.checkRequired(this.input.nativeElement.value);
|
|
24583
25019
|
}
|
|
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();
|
|
25020
|
+
checkRequired(value) {
|
|
25021
|
+
this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
|
|
24602
25022
|
}
|
|
24603
|
-
|
|
24604
|
-
|
|
25023
|
+
handleChange($event) {
|
|
25024
|
+
const value = $event.target.value;
|
|
25025
|
+
this.checkRequired(value);
|
|
25026
|
+
this.rawChange.next(value);
|
|
24605
25027
|
}
|
|
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:
|
|
25028
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25029
|
+
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
25030
|
}
|
|
24609
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
25031
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, decorators: [{
|
|
24610
25032
|
type: Component,
|
|
24611
|
-
args: [{ selector: 'gn-ui-
|
|
24612
|
-
}], propDecorators: {
|
|
25033
|
+
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"] }]
|
|
25034
|
+
}], ctorParameters: function () { return []; }, propDecorators: { value: [{
|
|
24613
25035
|
type: Input
|
|
24614
|
-
}],
|
|
25036
|
+
}], disabled: [{
|
|
24615
25037
|
type: Input
|
|
24616
|
-
}],
|
|
25038
|
+
}], extraClass: [{
|
|
24617
25039
|
type: Input
|
|
24618
|
-
}],
|
|
25040
|
+
}], placeholder: [{
|
|
24619
25041
|
type: Input
|
|
24620
|
-
}],
|
|
25042
|
+
}], required: [{
|
|
25043
|
+
type: Input
|
|
25044
|
+
}], valueChange: [{
|
|
24621
25045
|
type: Output
|
|
25046
|
+
}], input: [{
|
|
25047
|
+
type: ViewChild,
|
|
25048
|
+
args: ['input']
|
|
24622
25049
|
}] } });
|
|
24623
25050
|
|
|
24624
|
-
|
|
24625
|
-
marker('dropFile');
|
|
24626
|
-
class DragAndDropFileInputComponent {
|
|
25051
|
+
class TextInputComponent {
|
|
24627
25052
|
constructor() {
|
|
24628
|
-
this.
|
|
24629
|
-
|
|
24630
|
-
|
|
24631
|
-
|
|
25053
|
+
this.baseClass = [
|
|
25054
|
+
'appearance-none',
|
|
25055
|
+
'border border-gray-300',
|
|
25056
|
+
'rounded w-full',
|
|
25057
|
+
'p-2',
|
|
25058
|
+
'text-gray-700',
|
|
25059
|
+
'leading-tight',
|
|
25060
|
+
'focus:outline-none',
|
|
25061
|
+
'focus:border-primary',
|
|
25062
|
+
].join(' ');
|
|
25063
|
+
this.value = '';
|
|
25064
|
+
this.extraClass = '';
|
|
25065
|
+
this.required = false;
|
|
25066
|
+
this.rawChange = new Subject();
|
|
25067
|
+
this.valueChange = this.rawChange.pipe(distinctUntilChanged());
|
|
24632
25068
|
}
|
|
24633
|
-
get
|
|
24634
|
-
return this.
|
|
25069
|
+
get classList() {
|
|
25070
|
+
return `${this.baseClass} ${this.extraClass}`;
|
|
24635
25071
|
}
|
|
24636
|
-
|
|
24637
|
-
this.
|
|
24638
|
-
this.fileChange.emit(this.selectedFile);
|
|
25072
|
+
ngAfterViewInit() {
|
|
25073
|
+
this.checkRequired(this.input.nativeElement.value);
|
|
24639
25074
|
}
|
|
24640
|
-
|
|
24641
|
-
|
|
25075
|
+
checkRequired(value) {
|
|
25076
|
+
this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
|
|
25077
|
+
}
|
|
25078
|
+
handleChange($event) {
|
|
25079
|
+
const value = $event.target.value;
|
|
25080
|
+
this.checkRequired(value);
|
|
25081
|
+
this.rawChange.next(value);
|
|
25082
|
+
}
|
|
25083
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25084
|
+
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
25085
|
}
|
|
24643
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
25086
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextInputComponent, decorators: [{
|
|
24644
25087
|
type: Component,
|
|
24645
|
-
args: [{ selector: 'gn-ui-
|
|
24646
|
-
}], propDecorators: {
|
|
25088
|
+
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"] }]
|
|
25089
|
+
}], propDecorators: { value: [{
|
|
24647
25090
|
type: Input
|
|
24648
|
-
}],
|
|
25091
|
+
}], extraClass: [{
|
|
24649
25092
|
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: [{
|
|
25093
|
+
}], hint: [{
|
|
24662
25094
|
type: Input
|
|
24663
|
-
}],
|
|
25095
|
+
}], required: [{
|
|
25096
|
+
type: Input
|
|
25097
|
+
}], disabled: [{
|
|
24664
25098
|
type: Input
|
|
25099
|
+
}], valueChange: [{
|
|
25100
|
+
type: Output
|
|
25101
|
+
}], input: [{
|
|
25102
|
+
type: ViewChild,
|
|
25103
|
+
args: ['input']
|
|
24665
25104
|
}] } });
|
|
24666
25105
|
|
|
24667
25106
|
class ColorScaleComponent {
|
|
@@ -24769,7 +25208,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24769
25208
|
|
|
24770
25209
|
class LoadingMaskComponent {
|
|
24771
25210
|
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$
|
|
25211
|
+
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
25212
|
}
|
|
24774
25213
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LoadingMaskComponent, decorators: [{
|
|
24775
25214
|
type: Component,
|
|
@@ -24865,148 +25304,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24865
25304
|
}]
|
|
24866
25305
|
}] });
|
|
24867
25306
|
|
|
24868
|
-
class
|
|
24869
|
-
constructor() {
|
|
24870
|
-
this.
|
|
24871
|
-
this.
|
|
25307
|
+
class ViewportIntersectorComponent {
|
|
25308
|
+
constructor(vcRef) {
|
|
25309
|
+
this.vcRef = vcRef;
|
|
25310
|
+
this.isInViewport = new EventEmitter();
|
|
25311
|
+
this.entersViewport = this.isInViewport.pipe(filter((inViewport) => inViewport), map$1(() => undefined));
|
|
25312
|
+
this.exitsViewport = this.isInViewport.pipe(filter((inViewport) => !inViewport), map$1(() => undefined));
|
|
24872
25313
|
}
|
|
24873
|
-
|
|
24874
|
-
|
|
24875
|
-
|
|
25314
|
+
ngOnInit() {
|
|
25315
|
+
const elToObserve = this.vcRef.element.nativeElement;
|
|
25316
|
+
this.observeInputElement(elToObserve);
|
|
24876
25317
|
}
|
|
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();
|
|
25318
|
+
ngOnDestroy() {
|
|
25319
|
+
const elToObserve = this.vcRef.element.nativeElement;
|
|
25320
|
+
this.unObserveInputElement(elToObserve);
|
|
24899
25321
|
}
|
|
24900
|
-
|
|
24901
|
-
|
|
25322
|
+
observeInputElement(elToObserve) {
|
|
25323
|
+
if (!this.observer) {
|
|
25324
|
+
this.observer = new IntersectionObserver((entries) => {
|
|
25325
|
+
entries.forEach((entry) => {
|
|
25326
|
+
this.isInViewport.emit(entry.isIntersecting);
|
|
25327
|
+
});
|
|
25328
|
+
}, { root: null, threshold: 0 });
|
|
25329
|
+
}
|
|
25330
|
+
this.observer.observe(elToObserve);
|
|
24902
25331
|
}
|
|
24903
|
-
|
|
24904
|
-
|
|
24905
|
-
this.checked = !this.checked;
|
|
24906
|
-
this.changed.emit(this.checked);
|
|
25332
|
+
unObserveInputElement(elToObserve) {
|
|
25333
|
+
this.observer?.unobserve(elToObserve);
|
|
24907
25334
|
}
|
|
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:
|
|
25335
|
+
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 }); }
|
|
25336
|
+
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
25337
|
}
|
|
24911
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
25338
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ViewportIntersectorComponent, decorators: [{
|
|
24912
25339
|
type: Component,
|
|
24913
|
-
args: [{ selector: 'gn-ui-
|
|
24914
|
-
}],
|
|
24915
|
-
type: Input
|
|
24916
|
-
}], checked: [{
|
|
24917
|
-
type: Input
|
|
24918
|
-
}], indeterminate: [{
|
|
24919
|
-
type: Input
|
|
24920
|
-
}], changed: [{
|
|
25340
|
+
args: [{ selector: 'gn-ui-viewport-intersector', template: "<div class=\"w-full h-full\"></div>\n" }]
|
|
25341
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { isInViewport: [{
|
|
24921
25342
|
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: [{
|
|
25343
|
+
}], entersViewport: [{
|
|
24950
25344
|
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: [{
|
|
25345
|
+
}], exitsViewport: [{
|
|
25007
25346
|
type: Output
|
|
25008
|
-
}], gnUiEditableLabel: [{
|
|
25009
|
-
type: Input
|
|
25010
25347
|
}] } });
|
|
25011
25348
|
|
|
25012
25349
|
class FilesDropDirective {
|
|
@@ -25198,7 +25535,7 @@ class ImageInputComponent {
|
|
|
25198
25535
|
});
|
|
25199
25536
|
}
|
|
25200
25537
|
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$
|
|
25538
|
+
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
25539
|
}
|
|
25203
25540
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageInputComponent, decorators: [{
|
|
25204
25541
|
type: Component,
|
|
@@ -25234,8 +25571,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25234
25571
|
|
|
25235
25572
|
class UiInputsModule {
|
|
25236
25573
|
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,
|
|
25574
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [AutocompleteComponent,
|
|
25239
25575
|
TextInputComponent,
|
|
25240
25576
|
DragAndDropFileInputComponent,
|
|
25241
25577
|
ChipsInputComponent,
|
|
@@ -25243,11 +25579,9 @@ class UiInputsModule {
|
|
|
25243
25579
|
StarToggleComponent,
|
|
25244
25580
|
DropdownMultiselectComponent,
|
|
25245
25581
|
ViewportIntersectorComponent,
|
|
25246
|
-
CheckToggleComponent,
|
|
25247
25582
|
CopyTextButtonComponent,
|
|
25248
25583
|
CheckboxComponent,
|
|
25249
|
-
SearchInputComponent,
|
|
25250
|
-
DateRangePickerComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
25584
|
+
SearchInputComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
25251
25585
|
FormsModule,
|
|
25252
25586
|
ReactiveFormsModule,
|
|
25253
25587
|
TagInputModule,
|
|
@@ -25265,7 +25599,10 @@ class UiInputsModule {
|
|
|
25265
25599
|
EditableLabelDirective,
|
|
25266
25600
|
TextAreaComponent,
|
|
25267
25601
|
ButtonComponent,
|
|
25268
|
-
ImageInputComponent
|
|
25602
|
+
ImageInputComponent,
|
|
25603
|
+
DropdownSelectorComponent,
|
|
25604
|
+
DateRangePickerComponent,
|
|
25605
|
+
CheckToggleComponent], exports: [DropdownSelectorComponent,
|
|
25269
25606
|
AutocompleteComponent,
|
|
25270
25607
|
ButtonComponent,
|
|
25271
25608
|
TextInputComponent,
|
|
@@ -25300,13 +25637,15 @@ class UiInputsModule {
|
|
|
25300
25637
|
MatInputModule,
|
|
25301
25638
|
MatDatepickerModule,
|
|
25302
25639
|
MatNativeDateModule,
|
|
25303
|
-
ImageInputComponent
|
|
25640
|
+
ImageInputComponent,
|
|
25641
|
+
DropdownSelectorComponent,
|
|
25642
|
+
DateRangePickerComponent,
|
|
25643
|
+
CheckToggleComponent] }); }
|
|
25304
25644
|
}
|
|
25305
25645
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, decorators: [{
|
|
25306
25646
|
type: NgModule,
|
|
25307
25647
|
args: [{
|
|
25308
25648
|
declarations: [
|
|
25309
|
-
DropdownSelectorComponent,
|
|
25310
25649
|
AutocompleteComponent,
|
|
25311
25650
|
TextInputComponent,
|
|
25312
25651
|
DragAndDropFileInputComponent,
|
|
@@ -25315,11 +25654,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25315
25654
|
StarToggleComponent,
|
|
25316
25655
|
DropdownMultiselectComponent,
|
|
25317
25656
|
ViewportIntersectorComponent,
|
|
25318
|
-
CheckToggleComponent,
|
|
25319
25657
|
CopyTextButtonComponent,
|
|
25320
25658
|
CheckboxComponent,
|
|
25321
25659
|
SearchInputComponent,
|
|
25322
|
-
DateRangePickerComponent,
|
|
25323
25660
|
],
|
|
25324
25661
|
imports: [
|
|
25325
25662
|
CommonModule,
|
|
@@ -25343,6 +25680,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25343
25680
|
TextAreaComponent,
|
|
25344
25681
|
ButtonComponent,
|
|
25345
25682
|
ImageInputComponent,
|
|
25683
|
+
DropdownSelectorComponent,
|
|
25684
|
+
DateRangePickerComponent,
|
|
25685
|
+
CheckToggleComponent,
|
|
25346
25686
|
],
|
|
25347
25687
|
exports: [
|
|
25348
25688
|
DropdownSelectorComponent,
|
|
@@ -25367,34 +25707,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25367
25707
|
}]
|
|
25368
25708
|
}] });
|
|
25369
25709
|
|
|
25710
|
+
class PreviousNextButtonsComponent {
|
|
25711
|
+
constructor() {
|
|
25712
|
+
this.directionButtonClicked = new EventEmitter();
|
|
25713
|
+
}
|
|
25714
|
+
previousButtonClicked() {
|
|
25715
|
+
this.directionButtonClicked.next('previous');
|
|
25716
|
+
}
|
|
25717
|
+
nextButtonClicked() {
|
|
25718
|
+
this.directionButtonClicked.next('next');
|
|
25719
|
+
}
|
|
25720
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PreviousNextButtonsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25721
|
+
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 }); }
|
|
25722
|
+
}
|
|
25723
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PreviousNextButtonsComponent, decorators: [{
|
|
25724
|
+
type: Component,
|
|
25725
|
+
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"] }]
|
|
25726
|
+
}], propDecorators: { isFirst: [{
|
|
25727
|
+
type: Input
|
|
25728
|
+
}], isLast: [{
|
|
25729
|
+
type: Input
|
|
25730
|
+
}], directionButtonClicked: [{
|
|
25731
|
+
type: Output
|
|
25732
|
+
}] } });
|
|
25733
|
+
|
|
25370
25734
|
class AddLayerFromOgcApiComponent {
|
|
25371
25735
|
constructor(changeDetectorRef) {
|
|
25372
25736
|
this.changeDetectorRef = changeDetectorRef;
|
|
25373
25737
|
this.layerAdded = new EventEmitter();
|
|
25374
25738
|
this.urlChange = new Subject();
|
|
25375
|
-
this.layerUrl = '';
|
|
25376
25739
|
this.loading = false;
|
|
25377
25740
|
this.layers = [];
|
|
25378
|
-
this.ogcEndpoint = null;
|
|
25379
25741
|
this.errorMessage = null;
|
|
25742
|
+
this.selectedLayerTypes = {};
|
|
25380
25743
|
}
|
|
25381
25744
|
ngOnInit() {
|
|
25382
25745
|
this.urlChange.pipe(debounceTime$1(700)).subscribe(() => {
|
|
25383
25746
|
this.loadLayers();
|
|
25384
|
-
this.changeDetectorRef.detectChanges(); // manually trigger change detection
|
|
25385
25747
|
});
|
|
25386
25748
|
}
|
|
25387
25749
|
async loadLayers() {
|
|
25388
25750
|
this.errorMessage = null;
|
|
25389
25751
|
try {
|
|
25390
25752
|
this.loading = true;
|
|
25391
|
-
if (this.ogcUrl.trim()
|
|
25753
|
+
if (!this.ogcUrl.trim()) {
|
|
25392
25754
|
this.layers = [];
|
|
25393
25755
|
return;
|
|
25394
25756
|
}
|
|
25395
|
-
|
|
25396
|
-
|
|
25397
|
-
this.
|
|
25757
|
+
const ogcEndpoint = await new OgcApiEndpoint(this.ogcUrl);
|
|
25758
|
+
this.layers = await ogcEndpoint.allCollections;
|
|
25759
|
+
this.setDefaultLayerTypes();
|
|
25398
25760
|
}
|
|
25399
25761
|
catch (error) {
|
|
25400
25762
|
const err = error;
|
|
@@ -25406,21 +25768,75 @@ class AddLayerFromOgcApiComponent {
|
|
|
25406
25768
|
this.changeDetectorRef.markForCheck();
|
|
25407
25769
|
}
|
|
25408
25770
|
}
|
|
25409
|
-
|
|
25410
|
-
this.
|
|
25411
|
-
|
|
25412
|
-
|
|
25413
|
-
|
|
25414
|
-
|
|
25415
|
-
};
|
|
25416
|
-
|
|
25771
|
+
setDefaultLayerTypes() {
|
|
25772
|
+
this.layers.forEach((layer) => {
|
|
25773
|
+
const choices = this.getLayerChoices(layer);
|
|
25774
|
+
if (choices.length > 0) {
|
|
25775
|
+
this.selectedLayerTypes[layer.name] = choices[0].value;
|
|
25776
|
+
}
|
|
25777
|
+
});
|
|
25778
|
+
}
|
|
25779
|
+
getLayerChoices(layer) {
|
|
25780
|
+
const choices = [];
|
|
25781
|
+
if (layer.hasRecords) {
|
|
25782
|
+
choices.push({ label: 'Records', value: 'record' });
|
|
25783
|
+
}
|
|
25784
|
+
if (layer.hasFeatures) {
|
|
25785
|
+
choices.push({ label: 'Features', value: 'features' });
|
|
25786
|
+
}
|
|
25787
|
+
if (layer.hasVectorTiles) {
|
|
25788
|
+
choices.push({ label: 'Vector Tiles', value: 'vectorTiles' });
|
|
25789
|
+
}
|
|
25790
|
+
if (layer.hasMapTiles) {
|
|
25791
|
+
choices.push({ label: 'Map Tiles', value: 'mapTiles' });
|
|
25792
|
+
}
|
|
25793
|
+
return choices;
|
|
25794
|
+
}
|
|
25795
|
+
shouldDisplayLayer(layer) {
|
|
25796
|
+
return (layer.hasRecords ||
|
|
25797
|
+
layer.hasFeatures ||
|
|
25798
|
+
layer.hasVectorTiles ||
|
|
25799
|
+
layer.hasMapTiles);
|
|
25800
|
+
}
|
|
25801
|
+
onLayerTypeSelect(layerName, selectedType) {
|
|
25802
|
+
this.selectedLayerTypes[layerName] = selectedType
|
|
25803
|
+
? selectedType
|
|
25804
|
+
: this.getLayerChoices(layerName)[0]?.value;
|
|
25805
|
+
}
|
|
25806
|
+
async addLayer(layer, layerType) {
|
|
25807
|
+
try {
|
|
25808
|
+
const ogcEndpoint = await new OgcApiEndpoint(this.ogcUrl);
|
|
25809
|
+
let layerUrl;
|
|
25810
|
+
if (layerType === 'vectorTiles') {
|
|
25811
|
+
layerUrl = await ogcEndpoint.getVectorTilesetUrl(layer);
|
|
25812
|
+
}
|
|
25813
|
+
else if (layerType === 'mapTiles') {
|
|
25814
|
+
layerUrl = await ogcEndpoint.getMapTilesetUrl(layer);
|
|
25815
|
+
}
|
|
25816
|
+
else {
|
|
25817
|
+
layerUrl = await ogcEndpoint.getCollectionItemsUrl(layer, {
|
|
25818
|
+
outputFormat: 'json',
|
|
25819
|
+
});
|
|
25820
|
+
}
|
|
25821
|
+
const layerToAdd = {
|
|
25822
|
+
name: layer,
|
|
25823
|
+
url: layerUrl,
|
|
25824
|
+
type: MapContextLayerTypeEnum.OGCAPI,
|
|
25825
|
+
layerType: layerType,
|
|
25826
|
+
};
|
|
25827
|
+
this.layerAdded.emit({ ...layerToAdd, title: layer });
|
|
25828
|
+
}
|
|
25829
|
+
catch (error) {
|
|
25830
|
+
const err = error;
|
|
25831
|
+
console.error('Error adding layer:', err.message);
|
|
25832
|
+
}
|
|
25417
25833
|
}
|
|
25418
25834
|
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
|
|
25835
|
+
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", "disabled"], 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
25836
|
}
|
|
25421
25837
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromOgcApiComponent, decorators: [{
|
|
25422
25838
|
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
|
|
25839
|
+
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
25840
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { ogcUrl: [{
|
|
25425
25841
|
type: Input
|
|
25426
25842
|
}], layerAdded: [{
|
|
@@ -26162,7 +26578,8 @@ class ApiCardComponent {
|
|
|
26162
26578
|
}
|
|
26163
26579
|
ngOnInit() {
|
|
26164
26580
|
this.displayApiFormButton =
|
|
26165
|
-
this.link.accessServiceProtocol === 'ogcFeatures'
|
|
26581
|
+
this.link.accessServiceProtocol === 'ogcFeatures' ||
|
|
26582
|
+
this.link.accessServiceProtocol === 'wfs';
|
|
26166
26583
|
}
|
|
26167
26584
|
ngOnChanges(changes) {
|
|
26168
26585
|
this.currentlyActive =
|
|
@@ -26175,7 +26592,7 @@ class ApiCardComponent {
|
|
|
26175
26592
|
}
|
|
26176
26593
|
}
|
|
26177
26594
|
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:
|
|
26595
|
+
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
26596
|
}
|
|
26180
26597
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ApiCardComponent, decorators: [{
|
|
26181
26598
|
type: Component,
|
|
@@ -26306,7 +26723,7 @@ class DownloadsListComponent {
|
|
|
26306
26723
|
return getBadgeColor(getFileFormat(link));
|
|
26307
26724
|
}
|
|
26308
26725
|
isFromWfs(link) {
|
|
26309
|
-
return link.type === '
|
|
26726
|
+
return link.type === 'download' && link.accessServiceProtocol === 'wfs';
|
|
26310
26727
|
}
|
|
26311
26728
|
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
26729
|
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 +26755,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26338
26755
|
}] } });
|
|
26339
26756
|
|
|
26340
26757
|
class LinkCardComponent {
|
|
26758
|
+
constructor() {
|
|
26759
|
+
this.compact = false;
|
|
26760
|
+
}
|
|
26761
|
+
get title() {
|
|
26762
|
+
if (this.link.name && this.link.description) {
|
|
26763
|
+
return `${this.link.name} | ${this.link.description}`;
|
|
26764
|
+
}
|
|
26765
|
+
return this.link.name || this.link.description || '';
|
|
26766
|
+
}
|
|
26341
26767
|
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
|
|
26768
|
+
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
26769
|
}
|
|
26344
26770
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LinkCardComponent, decorators: [{
|
|
26345
26771
|
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
|
|
26772
|
+
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
26773
|
}], propDecorators: { link: [{
|
|
26348
26774
|
type: Input
|
|
26775
|
+
}], compact: [{
|
|
26776
|
+
type: Input
|
|
26349
26777
|
}] } });
|
|
26350
26778
|
|
|
26351
26779
|
class MarkdownParserComponent {
|
|
@@ -26372,7 +26800,7 @@ class MarkdownEditorComponent {
|
|
|
26372
26800
|
this.textContentChanged.emit(this.textContent);
|
|
26373
26801
|
}
|
|
26374
26802
|
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 }); }
|
|
26803
|
+
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
26804
|
}
|
|
26377
26805
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownEditorComponent, decorators: [{
|
|
26378
26806
|
type: Component,
|
|
@@ -26804,43 +27232,36 @@ const DEFAULT_PARAMS = {
|
|
|
26804
27232
|
};
|
|
26805
27233
|
class RecordApiFormComponent {
|
|
26806
27234
|
constructor() {
|
|
26807
|
-
this.offset$ = new BehaviorSubject(
|
|
26808
|
-
this.limit$ = new BehaviorSubject(
|
|
26809
|
-
this.format$ = new BehaviorSubject(
|
|
26810
|
-
this.
|
|
26811
|
-
|
|
26812
|
-
|
|
26813
|
-
|
|
26814
|
-
|
|
26815
|
-
|
|
26816
|
-
|
|
26817
|
-
|
|
26818
|
-
|
|
26819
|
-
for (const [key, value] of Object.entries(params)) {
|
|
26820
|
-
if (value && value !== '0') {
|
|
26821
|
-
url.searchParams.set(key, value);
|
|
26822
|
-
}
|
|
26823
|
-
else {
|
|
26824
|
-
url.searchParams.delete(key);
|
|
26825
|
-
}
|
|
26826
|
-
}
|
|
26827
|
-
outputUrl = url.toString();
|
|
26828
|
-
}
|
|
26829
|
-
return outputUrl;
|
|
26830
|
-
}));
|
|
27235
|
+
this.offset$ = new BehaviorSubject(DEFAULT_PARAMS.OFFSET);
|
|
27236
|
+
this.limit$ = new BehaviorSubject(DEFAULT_PARAMS.LIMIT);
|
|
27237
|
+
this.format$ = new BehaviorSubject(DEFAULT_PARAMS.FORMAT);
|
|
27238
|
+
this.endpoint$ = new BehaviorSubject(undefined);
|
|
27239
|
+
this.supportOffset = true;
|
|
27240
|
+
this.outputFormats = [{ value: 'json', label: 'JSON' }];
|
|
27241
|
+
this.apiQueryUrl$ = combineLatest([
|
|
27242
|
+
this.offset$,
|
|
27243
|
+
this.limit$,
|
|
27244
|
+
this.format$,
|
|
27245
|
+
this.endpoint$,
|
|
27246
|
+
]).pipe(switchMap(([offset, limit, format]) => this.generateApiQueryUrl(offset, limit, format)));
|
|
26831
27247
|
this.noLimitChecked$ = this.limit$.pipe(map$2((limit) => limit === '-1' || limit === ''));
|
|
26832
27248
|
this.displayLimit$ = this.limit$.pipe(map$2((limit) => (limit !== '-1' ? limit : '')));
|
|
26833
27249
|
}
|
|
26834
27250
|
set apiLink(value) {
|
|
26835
|
-
this.
|
|
27251
|
+
this.outputFormats = [{ value: 'json', label: 'JSON' }];
|
|
27252
|
+
this.accessServiceProtocol = value ? value.accessServiceProtocol : undefined;
|
|
27253
|
+
this.apiFeatureType = value ? value.name : undefined;
|
|
27254
|
+
if (value) {
|
|
27255
|
+
this.apiBaseUrl = value.url.href;
|
|
27256
|
+
this.createEndpoint().then(() => this.parseOutputFormats());
|
|
27257
|
+
}
|
|
26836
27258
|
this.resetUrl();
|
|
26837
27259
|
}
|
|
26838
27260
|
setOffset(value) {
|
|
26839
27261
|
this.offset$.next(value);
|
|
26840
27262
|
}
|
|
26841
27263
|
setLimit(value) {
|
|
26842
|
-
|
|
26843
|
-
this.limit$.next(newLimit);
|
|
27264
|
+
this.limit$.next(value === '' ? '-1' : value);
|
|
26844
27265
|
}
|
|
26845
27266
|
setFormat(value) {
|
|
26846
27267
|
this.format$.next(String(value));
|
|
@@ -26850,19 +27271,86 @@ class RecordApiFormComponent {
|
|
|
26850
27271
|
this.limit$.next(DEFAULT_PARAMS.LIMIT);
|
|
26851
27272
|
this.format$.next(DEFAULT_PARAMS.FORMAT);
|
|
26852
27273
|
}
|
|
27274
|
+
async parseOutputFormats() {
|
|
27275
|
+
if (!this.endpoint)
|
|
27276
|
+
return;
|
|
27277
|
+
const apiUrl = this.apiBaseUrl.endsWith('?')
|
|
27278
|
+
? this.apiBaseUrl.slice(0, -1)
|
|
27279
|
+
: this.apiBaseUrl;
|
|
27280
|
+
const outputFormats = await this.getOutputFormats(apiUrl);
|
|
27281
|
+
const formatsList = outputFormats.itemFormats
|
|
27282
|
+
? this.mapFormats(outputFormats.itemFormats)
|
|
27283
|
+
: this.mapFormats(outputFormats.outputFormats || []);
|
|
27284
|
+
this.outputFormats = this.outputFormats
|
|
27285
|
+
.concat(formatsList.filter(Boolean))
|
|
27286
|
+
.filter((format, index, self) => index === self.findIndex((t) => t.value === format.value))
|
|
27287
|
+
.sort((a, b) => a.label.localeCompare(b.label));
|
|
27288
|
+
}
|
|
27289
|
+
mapFormats(formats) {
|
|
27290
|
+
return formats.map((format) => {
|
|
27291
|
+
const normalizedFormat = mimeTypeToFormat(format);
|
|
27292
|
+
return normalizedFormat
|
|
27293
|
+
? { label: normalizedFormat.toUpperCase(), value: normalizedFormat }
|
|
27294
|
+
: null;
|
|
27295
|
+
});
|
|
27296
|
+
}
|
|
27297
|
+
async getOutputFormats(url) {
|
|
27298
|
+
if (!this.endpoint)
|
|
27299
|
+
return {};
|
|
27300
|
+
if (this.endpoint instanceof WfsEndpoint) {
|
|
27301
|
+
this.supportOffset = this.endpoint.supportsStartIndex();
|
|
27302
|
+
return this.endpoint.getServiceInfo();
|
|
27303
|
+
}
|
|
27304
|
+
else {
|
|
27305
|
+
{
|
|
27306
|
+
return (await this.endpoint.getCollectionInfo(this.firstCollection));
|
|
27307
|
+
}
|
|
27308
|
+
}
|
|
27309
|
+
}
|
|
27310
|
+
async createEndpoint() {
|
|
27311
|
+
if (!this.apiBaseUrl || !this.accessServiceProtocol)
|
|
27312
|
+
return;
|
|
27313
|
+
if (this.accessServiceProtocol === 'wfs') {
|
|
27314
|
+
this.endpoint = new WfsEndpoint(this.apiBaseUrl);
|
|
27315
|
+
await this.endpoint.isReady();
|
|
27316
|
+
}
|
|
27317
|
+
else {
|
|
27318
|
+
this.endpoint = new OgcApiEndpoint(this.apiBaseUrl);
|
|
27319
|
+
this.firstCollection = (await this.endpoint.featureCollections)[0];
|
|
27320
|
+
}
|
|
27321
|
+
this.endpoint$.next(this.endpoint);
|
|
27322
|
+
}
|
|
27323
|
+
async generateApiQueryUrl(offset, limit, format) {
|
|
27324
|
+
if (!this.apiBaseUrl || !this.endpoint || !this.apiFeatureType)
|
|
27325
|
+
return '';
|
|
27326
|
+
const options = {
|
|
27327
|
+
outputFormat: format,
|
|
27328
|
+
startIndex: offset ? Number(offset) : undefined,
|
|
27329
|
+
maxFeatures: limit !== '-1' ? Number(limit) : undefined,
|
|
27330
|
+
limit: limit !== '-1' ? Number(limit) : limit === '-1' ? -1 : undefined,
|
|
27331
|
+
offset: offset !== '' ? Number(offset) : undefined,
|
|
27332
|
+
};
|
|
27333
|
+
if (this.endpoint instanceof WfsEndpoint) {
|
|
27334
|
+
options.maxFeatures = limit !== '-1' ? Number(limit) : undefined;
|
|
27335
|
+
return this.endpoint.getFeatureUrl(this.apiFeatureType, options);
|
|
27336
|
+
}
|
|
27337
|
+
else {
|
|
27338
|
+
return await this.endpoint.getCollectionItemsUrl(this.firstCollection, options);
|
|
27339
|
+
}
|
|
27340
|
+
}
|
|
26853
27341
|
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
|
|
27342
|
+
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", "disabled"], 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
27343
|
}
|
|
26856
27344
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, decorators: [{
|
|
26857
27345
|
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
|
|
27346
|
+
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
27347
|
}], propDecorators: { apiLink: [{
|
|
26860
27348
|
type: Input
|
|
26861
27349
|
}] } });
|
|
26862
27350
|
|
|
26863
27351
|
class RelatedRecordCardComponent {
|
|
26864
27352
|
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:
|
|
27353
|
+
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
27354
|
}
|
|
26867
27355
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, decorators: [{
|
|
26868
27356
|
type: Component,
|
|
@@ -26958,48 +27446,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26958
27446
|
}] } });
|
|
26959
27447
|
|
|
26960
27448
|
class CarouselComponent {
|
|
27449
|
+
get isFirstStep() {
|
|
27450
|
+
return this.currentStep === 0;
|
|
27451
|
+
}
|
|
27452
|
+
get isLastStep() {
|
|
27453
|
+
return this.currentStep === this.steps.length - 1;
|
|
27454
|
+
}
|
|
27455
|
+
get stepsCount() {
|
|
27456
|
+
return this.steps.length;
|
|
27457
|
+
}
|
|
26961
27458
|
constructor(changeDetector) {
|
|
26962
27459
|
this.changeDetector = changeDetector;
|
|
26963
27460
|
this.containerClass = '';
|
|
26964
|
-
this.stepsContainerClass = '';
|
|
27461
|
+
this.stepsContainerClass = 'w-full bottom-0 top-auto';
|
|
27462
|
+
this.currentStepChange = new EventEmitter();
|
|
26965
27463
|
this.steps = [];
|
|
26966
|
-
this.
|
|
27464
|
+
this.currentStep = 0;
|
|
27465
|
+
this.refreshSteps = () => {
|
|
27466
|
+
this.steps = this.emblaApi.scrollSnapList();
|
|
27467
|
+
this.currentStep = this.emblaApi.selectedScrollSnap();
|
|
27468
|
+
this.currentStepChange.emit(this.currentStep);
|
|
27469
|
+
this.changeDetector.detectChanges();
|
|
27470
|
+
};
|
|
26967
27471
|
}
|
|
26968
27472
|
ngAfterViewInit() {
|
|
26969
27473
|
this.emblaApi = EmblaCarousel(this.carouselOverflowContainer.nativeElement, {
|
|
26970
27474
|
duration: 15,
|
|
26971
27475
|
});
|
|
26972
|
-
const refreshSteps = () => {
|
|
26973
|
-
this.steps = this.emblaApi.scrollSnapList();
|
|
26974
|
-
this.selectedStep = this.emblaApi.selectedScrollSnap();
|
|
26975
|
-
this.changeDetector.detectChanges();
|
|
26976
|
-
};
|
|
26977
27476
|
this.emblaApi
|
|
26978
|
-
.on('init', refreshSteps)
|
|
26979
|
-
.on('reInit', refreshSteps)
|
|
26980
|
-
.on('select', refreshSteps);
|
|
27477
|
+
.on('init', this.refreshSteps)
|
|
27478
|
+
.on('reInit', this.refreshSteps)
|
|
27479
|
+
.on('select', this.refreshSteps);
|
|
26981
27480
|
}
|
|
26982
27481
|
scrollToStep(stepIndex) {
|
|
26983
27482
|
this.emblaApi.scrollTo(stepIndex);
|
|
26984
27483
|
}
|
|
27484
|
+
slideToPrevious() {
|
|
27485
|
+
if (this.isFirstStep)
|
|
27486
|
+
return;
|
|
27487
|
+
this.emblaApi.scrollPrev();
|
|
27488
|
+
}
|
|
27489
|
+
slideToNext() {
|
|
27490
|
+
if (this.isLastStep)
|
|
27491
|
+
return;
|
|
27492
|
+
this.emblaApi.scrollNext();
|
|
27493
|
+
}
|
|
26985
27494
|
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=\"
|
|
27495
|
+
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;display:block}.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
27496
|
}
|
|
26988
27497
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, decorators: [{
|
|
26989
27498
|
type: Component,
|
|
26990
|
-
args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"
|
|
26991
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: {
|
|
27499
|
+
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;display:block}.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"] }]
|
|
27500
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { carouselOverflowContainer: [{
|
|
27501
|
+
type: ViewChild,
|
|
27502
|
+
args: ['carouselOverflowContainer']
|
|
27503
|
+
}], containerClass: [{
|
|
26992
27504
|
type: Input
|
|
26993
27505
|
}], stepsContainerClass: [{
|
|
26994
27506
|
type: Input
|
|
26995
|
-
}],
|
|
26996
|
-
type:
|
|
26997
|
-
args: ['carouselOverflowContainer']
|
|
27507
|
+
}], currentStepChange: [{
|
|
27508
|
+
type: Output
|
|
26998
27509
|
}] } });
|
|
26999
27510
|
|
|
27000
27511
|
class FormFieldWrapperComponent {
|
|
27001
27512
|
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:
|
|
27513
|
+
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
27514
|
}
|
|
27004
27515
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldWrapperComponent, decorators: [{
|
|
27005
27516
|
type: Component,
|
|
@@ -27148,17 +27659,87 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27148
27659
|
args: ['innerContainer']
|
|
27149
27660
|
}] } });
|
|
27150
27661
|
|
|
27662
|
+
class BlockListComponent {
|
|
27663
|
+
get pages() {
|
|
27664
|
+
return new Array(this.pagesCount).fill(0).map((_, i) => i);
|
|
27665
|
+
}
|
|
27666
|
+
get isFirstPage() {
|
|
27667
|
+
return this.currentPage === 0;
|
|
27668
|
+
}
|
|
27669
|
+
get isLastPage() {
|
|
27670
|
+
return this.currentPage === this.pagesCount - 1;
|
|
27671
|
+
}
|
|
27672
|
+
get pagesCount() {
|
|
27673
|
+
return this.blocks ? Math.ceil(this.blocks.length / this.pageSize) : 1;
|
|
27674
|
+
}
|
|
27675
|
+
constructor(changeDetector) {
|
|
27676
|
+
this.changeDetector = changeDetector;
|
|
27677
|
+
this.pageSize = 5;
|
|
27678
|
+
this.containerClass = '';
|
|
27679
|
+
this.paginationContainerClass = 'w-full bottom-0 top-auto';
|
|
27680
|
+
this.minHeight = 0;
|
|
27681
|
+
this.currentPage = 0;
|
|
27682
|
+
this.refreshBlocksVisibility = () => {
|
|
27683
|
+
this.blocks.forEach((block, index) => {
|
|
27684
|
+
block.nativeElement.style.display =
|
|
27685
|
+
index >= this.currentPage * this.pageSize &&
|
|
27686
|
+
index < (this.currentPage + 1) * this.pageSize
|
|
27687
|
+
? null
|
|
27688
|
+
: 'none';
|
|
27689
|
+
});
|
|
27690
|
+
};
|
|
27691
|
+
}
|
|
27692
|
+
ngAfterViewInit() {
|
|
27693
|
+
this.blocks.changes.subscribe(this.refreshBlocksVisibility);
|
|
27694
|
+
this.refreshBlocksVisibility();
|
|
27695
|
+
// we store the first height as the min-height of the list container
|
|
27696
|
+
this.minHeight = this.blockContainer.nativeElement.clientHeight;
|
|
27697
|
+
this.changeDetector.detectChanges();
|
|
27698
|
+
}
|
|
27699
|
+
goToPage(index) {
|
|
27700
|
+
this.currentPage = Math.max(Math.min(index, this.pagesCount - 1), 0);
|
|
27701
|
+
this.changeDetector.detectChanges();
|
|
27702
|
+
this.refreshBlocksVisibility();
|
|
27703
|
+
}
|
|
27704
|
+
previousPage() {
|
|
27705
|
+
if (this.isFirstPage)
|
|
27706
|
+
return;
|
|
27707
|
+
this.goToPage(this.currentPage - 1);
|
|
27708
|
+
}
|
|
27709
|
+
nextPage() {
|
|
27710
|
+
if (this.isLastPage)
|
|
27711
|
+
return;
|
|
27712
|
+
this.goToPage(this.currentPage + 1);
|
|
27713
|
+
}
|
|
27714
|
+
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 }); }
|
|
27715
|
+
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 }); }
|
|
27716
|
+
}
|
|
27717
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: BlockListComponent, decorators: [{
|
|
27718
|
+
type: Component,
|
|
27719
|
+
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"] }]
|
|
27720
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { pageSize: [{
|
|
27721
|
+
type: Input
|
|
27722
|
+
}], containerClass: [{
|
|
27723
|
+
type: Input
|
|
27724
|
+
}], paginationContainerClass: [{
|
|
27725
|
+
type: Input
|
|
27726
|
+
}], blocks: [{
|
|
27727
|
+
type: ContentChildren,
|
|
27728
|
+
args: ['block', { read: ElementRef }]
|
|
27729
|
+
}], blockContainer: [{
|
|
27730
|
+
type: ViewChild,
|
|
27731
|
+
args: ['blockContainer']
|
|
27732
|
+
}] } });
|
|
27733
|
+
|
|
27151
27734
|
class UiLayoutModule {
|
|
27152
27735
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
27153
27736
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, declarations: [ExpandablePanelComponent,
|
|
27154
27737
|
StickyHeaderComponent,
|
|
27155
27738
|
AnchorLinkDirective,
|
|
27156
|
-
ExpandablePanelButtonComponent,
|
|
27157
|
-
CarouselComponent], imports: [CommonModule, MatIconModule, i1$1.TranslateModule], exports: [ExpandablePanelComponent,
|
|
27739
|
+
ExpandablePanelButtonComponent], imports: [CommonModule, MatIconModule, i1$1.TranslateModule], exports: [ExpandablePanelComponent,
|
|
27158
27740
|
StickyHeaderComponent,
|
|
27159
27741
|
AnchorLinkDirective,
|
|
27160
|
-
ExpandablePanelButtonComponent
|
|
27161
|
-
CarouselComponent] }); }
|
|
27742
|
+
ExpandablePanelButtonComponent] }); }
|
|
27162
27743
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, imports: [CommonModule, MatIconModule, TranslateModule.forChild()] }); }
|
|
27163
27744
|
}
|
|
27164
27745
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, decorators: [{
|
|
@@ -27170,14 +27751,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27170
27751
|
StickyHeaderComponent,
|
|
27171
27752
|
AnchorLinkDirective,
|
|
27172
27753
|
ExpandablePanelButtonComponent,
|
|
27173
|
-
CarouselComponent,
|
|
27174
27754
|
],
|
|
27175
27755
|
exports: [
|
|
27176
27756
|
ExpandablePanelComponent,
|
|
27177
27757
|
StickyHeaderComponent,
|
|
27178
27758
|
AnchorLinkDirective,
|
|
27179
27759
|
ExpandablePanelButtonComponent,
|
|
27180
|
-
CarouselComponent,
|
|
27181
27760
|
],
|
|
27182
27761
|
}]
|
|
27183
27762
|
}] });
|
|
@@ -27187,7 +27766,7 @@ class UserPreviewComponent {
|
|
|
27187
27766
|
return (this.user.name + ' ' + this.user.surname).trim();
|
|
27188
27767
|
}
|
|
27189
27768
|
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:
|
|
27769
|
+
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
27770
|
}
|
|
27192
27771
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UserPreviewComponent, decorators: [{
|
|
27193
27772
|
type: Component,
|
|
@@ -27198,6 +27777,110 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27198
27777
|
type: Input
|
|
27199
27778
|
}] } });
|
|
27200
27779
|
|
|
27780
|
+
class TimeSincePipe {
|
|
27781
|
+
constructor(translate) {
|
|
27782
|
+
this.translate = translate;
|
|
27783
|
+
}
|
|
27784
|
+
transform(value) {
|
|
27785
|
+
if (isNaN(value.getTime())) {
|
|
27786
|
+
throw new Error('Invalid Date');
|
|
27787
|
+
}
|
|
27788
|
+
const maintenant = new Date();
|
|
27789
|
+
let locale;
|
|
27790
|
+
switch (this.translate.currentLang) {
|
|
27791
|
+
case 'fr':
|
|
27792
|
+
locale = fr$1;
|
|
27793
|
+
break;
|
|
27794
|
+
case 'de':
|
|
27795
|
+
locale = de$1;
|
|
27796
|
+
break;
|
|
27797
|
+
case 'es':
|
|
27798
|
+
locale = es$1;
|
|
27799
|
+
break;
|
|
27800
|
+
case 'it':
|
|
27801
|
+
locale = it$1;
|
|
27802
|
+
break;
|
|
27803
|
+
case 'nl':
|
|
27804
|
+
locale = nl$1;
|
|
27805
|
+
break;
|
|
27806
|
+
case 'pt':
|
|
27807
|
+
locale = pt$1;
|
|
27808
|
+
break;
|
|
27809
|
+
case 'sk':
|
|
27810
|
+
locale = sk;
|
|
27811
|
+
break;
|
|
27812
|
+
case 'en':
|
|
27813
|
+
default:
|
|
27814
|
+
locale = enUS;
|
|
27815
|
+
break;
|
|
27816
|
+
}
|
|
27817
|
+
return formatDistance(value, maintenant, {
|
|
27818
|
+
addSuffix: true,
|
|
27819
|
+
locale: locale,
|
|
27820
|
+
});
|
|
27821
|
+
}
|
|
27822
|
+
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 }); }
|
|
27823
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: TimeSincePipe, isStandalone: true, name: "timeSince" }); }
|
|
27824
|
+
}
|
|
27825
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TimeSincePipe, decorators: [{
|
|
27826
|
+
type: Pipe,
|
|
27827
|
+
args: [{
|
|
27828
|
+
name: 'timeSince',
|
|
27829
|
+
standalone: true,
|
|
27830
|
+
}]
|
|
27831
|
+
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; } });
|
|
27832
|
+
|
|
27833
|
+
class UserFeedbackItemComponent {
|
|
27834
|
+
constructor() {
|
|
27835
|
+
this.newUserFeedbackAnswer = new EventEmitter();
|
|
27836
|
+
this.isAnAnswer = false;
|
|
27837
|
+
this.newAnswer = '';
|
|
27838
|
+
this.isAnswerEmpty = true;
|
|
27839
|
+
}
|
|
27840
|
+
ngOnInit() {
|
|
27841
|
+
this.isAnAnswer = !!this.userFeedbackParent.parentUuid;
|
|
27842
|
+
}
|
|
27843
|
+
onNewAnswerValueChange() {
|
|
27844
|
+
this.isAnswerEmpty = this.newAnswer.length === 0;
|
|
27845
|
+
}
|
|
27846
|
+
publishNewAnswer() {
|
|
27847
|
+
if (this.newAnswer.trim() === '')
|
|
27848
|
+
return;
|
|
27849
|
+
const newAnswer = {
|
|
27850
|
+
...this.userFeedbackParent,
|
|
27851
|
+
uuid: undefined,
|
|
27852
|
+
published: true,
|
|
27853
|
+
comment: this.newAnswer,
|
|
27854
|
+
parentUuid: this.userFeedbackParent.uuid,
|
|
27855
|
+
authorUserId: this.activeUser?.id,
|
|
27856
|
+
authorEmail: this.activeUser?.email,
|
|
27857
|
+
date: new Date(),
|
|
27858
|
+
authorName: `${this.activeUser?.name} ${this.activeUser?.surname}`,
|
|
27859
|
+
};
|
|
27860
|
+
this.newUserFeedbackAnswer.emit(newAnswer);
|
|
27861
|
+
this.newAnswer = '';
|
|
27862
|
+
this.onNewAnswerValueChange();
|
|
27863
|
+
}
|
|
27864
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UserFeedbackItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27865
|
+
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", 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=\"activeUser\" 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", "activeUser", "isLastComment", "isAddUserFeedbackLoading"], outputs: ["newUserFeedbackAnswer"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "pipe", type: TimeSincePipe, name: "timeSince" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27866
|
+
}
|
|
27867
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UserFeedbackItemComponent, decorators: [{
|
|
27868
|
+
type: Component,
|
|
27869
|
+
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=\"activeUser\" 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" }]
|
|
27870
|
+
}], propDecorators: { userFeedbackParent: [{
|
|
27871
|
+
type: Input
|
|
27872
|
+
}], userFeedBacksAnswers: [{
|
|
27873
|
+
type: Input
|
|
27874
|
+
}], activeUser: [{
|
|
27875
|
+
type: Input
|
|
27876
|
+
}], isLastComment: [{
|
|
27877
|
+
type: Input
|
|
27878
|
+
}], isAddUserFeedbackLoading: [{
|
|
27879
|
+
type: Input
|
|
27880
|
+
}], newUserFeedbackAnswer: [{
|
|
27881
|
+
type: Output
|
|
27882
|
+
}] } });
|
|
27883
|
+
|
|
27201
27884
|
class UiElementsModule {
|
|
27202
27885
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
27203
27886
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, declarations: [MetadataInfoComponent,
|
|
@@ -27205,7 +27888,6 @@ class UiElementsModule {
|
|
|
27205
27888
|
DownloadItemComponent,
|
|
27206
27889
|
DownloadsListComponent,
|
|
27207
27890
|
ApiCardComponent,
|
|
27208
|
-
LinkCardComponent,
|
|
27209
27891
|
RelatedRecordCardComponent,
|
|
27210
27892
|
MetadataContactComponent,
|
|
27211
27893
|
MetadataCatalogComponent,
|
|
@@ -27219,6 +27901,7 @@ class UiElementsModule {
|
|
|
27219
27901
|
PaginationButtonsComponent,
|
|
27220
27902
|
MaxLinesComponent,
|
|
27221
27903
|
RecordApiFormComponent,
|
|
27904
|
+
UserFeedbackItemComponent,
|
|
27222
27905
|
ImageOverlayPreviewComponent], imports: [CommonModule,
|
|
27223
27906
|
MatIconModule,
|
|
27224
27907
|
MatTooltipModule,
|
|
@@ -27229,12 +27912,12 @@ class UiElementsModule {
|
|
|
27229
27912
|
FormsModule,
|
|
27230
27913
|
NgOptimizedImage,
|
|
27231
27914
|
MarkdownParserComponent,
|
|
27232
|
-
ThumbnailComponent
|
|
27915
|
+
ThumbnailComponent,
|
|
27916
|
+
TimeSincePipe], exports: [MetadataInfoComponent,
|
|
27233
27917
|
ContentGhostComponent,
|
|
27234
27918
|
DownloadItemComponent,
|
|
27235
27919
|
DownloadsListComponent,
|
|
27236
27920
|
ApiCardComponent,
|
|
27237
|
-
LinkCardComponent,
|
|
27238
27921
|
RelatedRecordCardComponent,
|
|
27239
27922
|
MetadataContactComponent,
|
|
27240
27923
|
MetadataCatalogComponent,
|
|
@@ -27249,6 +27932,7 @@ class UiElementsModule {
|
|
|
27249
27932
|
MaxLinesComponent,
|
|
27250
27933
|
RecordApiFormComponent,
|
|
27251
27934
|
MarkdownParserComponent,
|
|
27935
|
+
UserFeedbackItemComponent,
|
|
27252
27936
|
ImageOverlayPreviewComponent] }); }
|
|
27253
27937
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, imports: [CommonModule,
|
|
27254
27938
|
MatIconModule,
|
|
@@ -27279,6 +27963,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27279
27963
|
NgOptimizedImage,
|
|
27280
27964
|
MarkdownParserComponent,
|
|
27281
27965
|
ThumbnailComponent,
|
|
27966
|
+
TimeSincePipe,
|
|
27282
27967
|
],
|
|
27283
27968
|
declarations: [
|
|
27284
27969
|
MetadataInfoComponent,
|
|
@@ -27286,7 +27971,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27286
27971
|
DownloadItemComponent,
|
|
27287
27972
|
DownloadsListComponent,
|
|
27288
27973
|
ApiCardComponent,
|
|
27289
|
-
LinkCardComponent,
|
|
27290
27974
|
RelatedRecordCardComponent,
|
|
27291
27975
|
MetadataContactComponent,
|
|
27292
27976
|
MetadataCatalogComponent,
|
|
@@ -27300,6 +27984,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27300
27984
|
PaginationButtonsComponent,
|
|
27301
27985
|
MaxLinesComponent,
|
|
27302
27986
|
RecordApiFormComponent,
|
|
27987
|
+
UserFeedbackItemComponent,
|
|
27303
27988
|
ImageOverlayPreviewComponent,
|
|
27304
27989
|
],
|
|
27305
27990
|
exports: [
|
|
@@ -27308,7 +27993,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27308
27993
|
DownloadItemComponent,
|
|
27309
27994
|
DownloadsListComponent,
|
|
27310
27995
|
ApiCardComponent,
|
|
27311
|
-
LinkCardComponent,
|
|
27312
27996
|
RelatedRecordCardComponent,
|
|
27313
27997
|
MetadataContactComponent,
|
|
27314
27998
|
MetadataCatalogComponent,
|
|
@@ -27323,6 +28007,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27323
28007
|
MaxLinesComponent,
|
|
27324
28008
|
RecordApiFormComponent,
|
|
27325
28009
|
MarkdownParserComponent,
|
|
28010
|
+
UserFeedbackItemComponent,
|
|
27326
28011
|
ImageOverlayPreviewComponent,
|
|
27327
28012
|
],
|
|
27328
28013
|
}]
|
|
@@ -28576,7 +29261,7 @@ class ResultsLayoutComponent {
|
|
|
28576
29261
|
this.searchFacade.setResultsLayout(layout);
|
|
28577
29262
|
}
|
|
28578
29263
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsLayoutComponent, deps: [{ token: SearchFacade }, { token: RESULTS_LAYOUT_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28579
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsLayoutComponent, selector: "gn-ui-results-layout", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'results.layout.selectOne' | translate\"\n [ariaName]=\"'results.layout.selectOne' | translate\"\n [choices]=\"choices\"\n (selectValue)=\"change($event)\"\n [selected]=\"searchFacade.layout$ | async\"\n></gn-ui-dropdown-selector>\n", dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
29264
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsLayoutComponent, selector: "gn-ui-results-layout", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'results.layout.selectOne' | translate\"\n [ariaName]=\"'results.layout.selectOne' | translate\"\n [choices]=\"choices\"\n (selectValue)=\"change($event)\"\n [selected]=\"searchFacade.layout$ | async\"\n></gn-ui-dropdown-selector>\n", dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
28580
29265
|
}
|
|
28581
29266
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsLayoutComponent, decorators: [{
|
|
28582
29267
|
type: Component,
|
|
@@ -28784,7 +29469,7 @@ class SortByComponent {
|
|
|
28784
29469
|
this.searchService.setSortBy(criteriaAsString.split(','));
|
|
28785
29470
|
}
|
|
28786
29471
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SortByComponent, deps: [{ token: SearchFacade }, { token: SearchService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28787
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: SortByComponent, selector: "gn-ui-sort-by", inputs: { isQualitySortable: "isQualitySortable" }, ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'search.field.sortBy' | translate\"\n [choices]=\"choices\"\n (selectValue)=\"changeSortBy($event)\"\n [selected]=\"currentSortBy$ | async\"\n ariaName=\"search-sort-by\"\n></gn-ui-dropdown-selector>\n", dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
29472
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: SortByComponent, selector: "gn-ui-sort-by", inputs: { isQualitySortable: "isQualitySortable" }, ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'search.field.sortBy' | translate\"\n [choices]=\"choices\"\n (selectValue)=\"changeSortBy($event)\"\n [selected]=\"currentSortBy$ | async\"\n ariaName=\"search-sort-by\"\n></gn-ui-dropdown-selector>\n", dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
28788
29473
|
}
|
|
28789
29474
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SortByComponent, decorators: [{
|
|
28790
29475
|
type: Component,
|
|
@@ -29652,7 +30337,7 @@ class AddLayerFromWmsComponent {
|
|
|
29652
30337
|
this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
|
|
29653
30338
|
}
|
|
29654
30339
|
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" }] }); }
|
|
30340
|
+
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
30341
|
}
|
|
29657
30342
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWmsComponent, decorators: [{
|
|
29658
30343
|
type: Component,
|
|
@@ -29803,7 +30488,7 @@ class AddLayerFromWfsComponent {
|
|
|
29803
30488
|
this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
|
|
29804
30489
|
}
|
|
29805
30490
|
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" }] }); }
|
|
30491
|
+
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
30492
|
}
|
|
29808
30493
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, decorators: [{
|
|
29809
30494
|
type: Component,
|
|
@@ -29823,7 +30508,7 @@ class LayersPanelComponent {
|
|
|
29823
30508
|
this.mapFacade.addLayer(layer);
|
|
29824
30509
|
}
|
|
29825
30510
|
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$
|
|
30511
|
+
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
30512
|
}
|
|
29828
30513
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, decorators: [{
|
|
29829
30514
|
type: Component,
|
|
@@ -30198,31 +30883,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
30198
30883
|
], 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
30884
|
}], ctorParameters: function () { return [{ type: NotificationsService }]; } });
|
|
30200
30885
|
|
|
30886
|
+
/*
|
|
30887
|
+
Metadata actions
|
|
30888
|
+
*/
|
|
30201
30889
|
const loadFullMetadata = createAction('[Metadata view] Load full metadata', props());
|
|
30202
30890
|
const setIncompleteMetadata = createAction('[Metadata view] Set incomplete metadata', props());
|
|
30203
|
-
const
|
|
30204
|
-
const
|
|
30891
|
+
const loadFullMetadataSuccess = createAction('[Metadata view] Load full metadata success', props());
|
|
30892
|
+
const loadFullMetadataFailure = createAction('[Metadata view] Load full metadata failure', props());
|
|
30893
|
+
const closeMetadata = createAction('[Metadata view] close');
|
|
30894
|
+
/*
|
|
30895
|
+
Related actions
|
|
30896
|
+
*/
|
|
30205
30897
|
const setRelated = createAction('[Metadata view] Set related records', props());
|
|
30898
|
+
/*
|
|
30899
|
+
ChartConfig actions
|
|
30900
|
+
*/
|
|
30206
30901
|
const setChartConfig = createAction('[Metadata view] Set chart config', props());
|
|
30207
|
-
|
|
30902
|
+
/*
|
|
30903
|
+
User Feedbacks actions
|
|
30904
|
+
*/
|
|
30905
|
+
const addUserFeedback = createAction('[Metadata view] Add UserFeedback', props());
|
|
30906
|
+
const addUserFeedbackSuccess = createAction('[Metadata view] Add UserFeedback Success', props());
|
|
30907
|
+
const addUserFeedbackFailure = createAction('[Metadata view] Add UserFeedback Failure', props());
|
|
30908
|
+
const loadUserFeedbacks = createAction('[Metadata view] Load UserFeedbacks', props());
|
|
30909
|
+
const loadUserFeedbacksSuccess = createAction('[Metadata view] Load UserFeedbacks Success', props());
|
|
30910
|
+
const loadUserFeedbacksFailure = createAction('[Metadata view] Load UserFeedbacks Failure', props());
|
|
30208
30911
|
|
|
30209
30912
|
var mdview_actions = /*#__PURE__*/Object.freeze({
|
|
30210
30913
|
__proto__: null,
|
|
30211
|
-
|
|
30212
|
-
|
|
30914
|
+
addUserFeedback: addUserFeedback,
|
|
30915
|
+
addUserFeedbackFailure: addUserFeedbackFailure,
|
|
30916
|
+
addUserFeedbackSuccess: addUserFeedbackSuccess,
|
|
30917
|
+
closeMetadata: closeMetadata,
|
|
30213
30918
|
loadFullMetadata: loadFullMetadata,
|
|
30214
|
-
|
|
30919
|
+
loadFullMetadataFailure: loadFullMetadataFailure,
|
|
30920
|
+
loadFullMetadataSuccess: loadFullMetadataSuccess,
|
|
30921
|
+
loadUserFeedbacks: loadUserFeedbacks,
|
|
30922
|
+
loadUserFeedbacksFailure: loadUserFeedbacksFailure,
|
|
30923
|
+
loadUserFeedbacksSuccess: loadUserFeedbacksSuccess,
|
|
30215
30924
|
setChartConfig: setChartConfig,
|
|
30216
30925
|
setIncompleteMetadata: setIncompleteMetadata,
|
|
30217
30926
|
setRelated: setRelated
|
|
30218
30927
|
});
|
|
30219
30928
|
|
|
30220
|
-
const
|
|
30221
|
-
const
|
|
30929
|
+
const METADATA_VIEW_FEATURE_STATE_KEY = 'metadataView';
|
|
30930
|
+
const initialMetadataViewState = {
|
|
30222
30931
|
error: null,
|
|
30223
30932
|
loadingFull: false,
|
|
30933
|
+
allUserFeedbacksLoading: false,
|
|
30934
|
+
addUserFeedbackLoading: false,
|
|
30224
30935
|
};
|
|
30225
|
-
const
|
|
30936
|
+
const metadataViewReducer = createReducer(initialMetadataViewState,
|
|
30937
|
+
/*
|
|
30938
|
+
Metadata reducers
|
|
30939
|
+
*/
|
|
30940
|
+
on(loadFullMetadata, (state) => ({
|
|
30226
30941
|
...state,
|
|
30227
30942
|
error: null,
|
|
30228
30943
|
loadingFull: true,
|
|
@@ -30230,38 +30945,80 @@ const mdViewReducer = createReducer(initialMdviewState, on(loadFullMetadata, (st
|
|
|
30230
30945
|
...state,
|
|
30231
30946
|
error: null,
|
|
30232
30947
|
metadata: incomplete,
|
|
30233
|
-
})), on(
|
|
30948
|
+
})), on(loadFullMetadataSuccess, (state, { full }) => ({
|
|
30234
30949
|
...state,
|
|
30235
30950
|
error: null,
|
|
30236
30951
|
metadata: full,
|
|
30237
30952
|
loadingFull: false,
|
|
30238
|
-
})), on(
|
|
30953
|
+
})), on(loadFullMetadataFailure, (state, { otherError, notFound }) => ({
|
|
30239
30954
|
...state,
|
|
30240
30955
|
error: { otherError, notFound },
|
|
30241
30956
|
loadingFull: false,
|
|
30242
|
-
})), on(
|
|
30957
|
+
})), on(closeMetadata, (state) => {
|
|
30958
|
+
const { metadata, related, userFeedbacks, ...stateWithoutMetadata } = state;
|
|
30959
|
+
return stateWithoutMetadata;
|
|
30960
|
+
}),
|
|
30961
|
+
/*
|
|
30962
|
+
Related reducers
|
|
30963
|
+
*/
|
|
30964
|
+
on(setRelated, (state, { related }) => ({
|
|
30243
30965
|
...state,
|
|
30244
30966
|
related,
|
|
30245
|
-
})),
|
|
30967
|
+
})),
|
|
30968
|
+
/*
|
|
30969
|
+
ChartConfig reducers
|
|
30970
|
+
*/
|
|
30971
|
+
on(setChartConfig, (state, { chartConfig }) => ({
|
|
30246
30972
|
...state,
|
|
30247
30973
|
chartConfig,
|
|
30248
|
-
})),
|
|
30249
|
-
|
|
30250
|
-
|
|
30251
|
-
|
|
30252
|
-
|
|
30253
|
-
|
|
30254
|
-
|
|
30974
|
+
})),
|
|
30975
|
+
/*
|
|
30976
|
+
UserFeedbacks reducers
|
|
30977
|
+
*/
|
|
30978
|
+
on(loadUserFeedbacks, (state) => ({
|
|
30979
|
+
...state,
|
|
30980
|
+
allUserFeedbacksLoading: true,
|
|
30981
|
+
})), on(addUserFeedback, (state) => ({
|
|
30982
|
+
...state,
|
|
30983
|
+
addUserFeedbackLoading: true,
|
|
30984
|
+
})), on(loadUserFeedbacksSuccess, (state, { userFeedbacks }) => ({
|
|
30985
|
+
...state,
|
|
30986
|
+
userFeedbacks: userFeedbacks,
|
|
30987
|
+
addUserFeedbackLoading: false,
|
|
30988
|
+
allUserFeedbacksLoading: false,
|
|
30989
|
+
})), on(loadUserFeedbacksFailure, (state, { otherError, notFound }) => ({
|
|
30990
|
+
...state,
|
|
30991
|
+
error: { otherError, notFound },
|
|
30992
|
+
addUserFeedbackLoading: false,
|
|
30993
|
+
allUserFeedbacksLoading: false,
|
|
30994
|
+
})));
|
|
30995
|
+
function reducer$1(metadataViewState, action) {
|
|
30996
|
+
return metadataViewReducer(metadataViewState, action);
|
|
30255
30997
|
}
|
|
30256
30998
|
|
|
30257
|
-
const getMdViewState = createFeatureSelector(
|
|
30999
|
+
const getMdViewState = createFeatureSelector(METADATA_VIEW_FEATURE_STATE_KEY);
|
|
31000
|
+
/*
|
|
31001
|
+
Metadata selectors
|
|
31002
|
+
*/
|
|
30258
31003
|
const getMetadataUuid = createSelector(getMdViewState, (state) => state.metadata ? state.metadata.uniqueIdentifier : null);
|
|
30259
31004
|
const getMetadata = createSelector(getMdViewState, (state) => state.metadata);
|
|
30260
31005
|
const getMetadataIsIncomplete = createSelector(getMdViewState, (state) => (state.metadata ? state.loadingFull : null));
|
|
30261
31006
|
const getMetadataIsLoading = createSelector(getMdViewState, (state) => state.loadingFull);
|
|
30262
31007
|
const getMetadataError = createSelector(getMdViewState, (state) => state.error);
|
|
31008
|
+
/*
|
|
31009
|
+
Related selectors
|
|
31010
|
+
*/
|
|
30263
31011
|
const getRelated = createSelector(getMdViewState, (state) => state.related);
|
|
31012
|
+
/*
|
|
31013
|
+
Metadata selectors
|
|
31014
|
+
*/
|
|
30264
31015
|
const getChartConfig = createSelector(getMdViewState, (state) => state.chartConfig);
|
|
31016
|
+
/*
|
|
31017
|
+
UserFeedback selectors
|
|
31018
|
+
*/
|
|
31019
|
+
const getUserFeedbacks = createSelector(getMdViewState, (state) => state.userFeedbacks);
|
|
31020
|
+
const getAllUserFeedbacksLoading = createSelector(getMdViewState, (state) => state.allUserFeedbacksLoading);
|
|
31021
|
+
const getAddUserFeedbacksLoading = createSelector(getMdViewState, (state) => state.addUserFeedbackLoading);
|
|
30265
31022
|
|
|
30266
31023
|
/**
|
|
30267
31024
|
* The Metadata View Facade is used to render complete metadata records.
|
|
@@ -30270,11 +31027,12 @@ const getChartConfig = createSelector(getMdViewState, (state) => state.chartConf
|
|
|
30270
31027
|
* To clear the current record use the `close()` method.
|
|
30271
31028
|
*/
|
|
30272
31029
|
class MdViewFacade {
|
|
30273
|
-
constructor(store, linkClassifier) {
|
|
31030
|
+
constructor(store, linkClassifier, avatarService) {
|
|
30274
31031
|
this.store = store;
|
|
30275
31032
|
this.linkClassifier = linkClassifier;
|
|
31033
|
+
this.avatarService = avatarService;
|
|
30276
31034
|
this.isPresent$ = this.store.pipe(select(getMetadataUuid), map$1((uuid) => !!uuid));
|
|
30277
|
-
this.
|
|
31035
|
+
this.isMetadataLoading$ = this.store.pipe(select(getMetadataIsLoading));
|
|
30278
31036
|
this.metadata$ = this.store.pipe(select(getMetadata), filter((md) => !!md));
|
|
30279
31037
|
this.isIncomplete$ = this.store.pipe(select(getMetadataIsIncomplete), filter((incomplete) => incomplete !== null));
|
|
30280
31038
|
this.error$ = this.store.pipe(select(getMetadataError));
|
|
@@ -30288,6 +31046,9 @@ class MdViewFacade {
|
|
|
30288
31046
|
this.geoDataLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.GEODATA))));
|
|
30289
31047
|
this.landingPageLinks$ = this.metadata$.pipe(map$1((record) => ('landingPage' in record ? [record.landingPage] : [])));
|
|
30290
31048
|
this.otherLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.UNKNOWN))));
|
|
31049
|
+
this.userFeedbacks$ = this.store.pipe(select(getUserFeedbacks));
|
|
31050
|
+
this.isAllUserFeedbackLoading$ = this.store.pipe(select(getAllUserFeedbacksLoading));
|
|
31051
|
+
this.isAddUserFeedbackLoading$ = this.store.pipe(select(getAddUserFeedbacksLoading));
|
|
30291
31052
|
}
|
|
30292
31053
|
/**
|
|
30293
31054
|
* This will show an incomplete record (e.g. from a search result) as a preview
|
|
@@ -30302,39 +31063,73 @@ class MdViewFacade {
|
|
|
30302
31063
|
loadFull(uuid) {
|
|
30303
31064
|
this.store.dispatch(loadFullMetadata({ uuid }));
|
|
30304
31065
|
}
|
|
30305
|
-
|
|
30306
|
-
this.store.dispatch(
|
|
31066
|
+
closeMetadata() {
|
|
31067
|
+
this.store.dispatch(closeMetadata());
|
|
30307
31068
|
}
|
|
30308
31069
|
setChartConfig(chartConfig) {
|
|
30309
31070
|
this.store.dispatch(setChartConfig({ chartConfig }));
|
|
30310
31071
|
}
|
|
30311
|
-
|
|
31072
|
+
/**
|
|
31073
|
+
* UserFeedbacks
|
|
31074
|
+
*/
|
|
31075
|
+
addUserFeedback(userFeedback) {
|
|
31076
|
+
this.store.dispatch(addUserFeedback({ userFeedback }));
|
|
31077
|
+
}
|
|
31078
|
+
loadUserFeedbacks(datasetUuid) {
|
|
31079
|
+
this.store.dispatch(loadUserFeedbacks({ datasetUuid }));
|
|
31080
|
+
}
|
|
31081
|
+
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
31082
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewFacade }); }
|
|
30313
31083
|
}
|
|
30314
31084
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewFacade, decorators: [{
|
|
30315
31085
|
type: Injectable
|
|
30316
|
-
}], ctorParameters: function () { return [{ type: i1$2.Store }, { type: LinkClassifierService }]; } });
|
|
31086
|
+
}], ctorParameters: function () { return [{ type: i1$2.Store }, { type: LinkClassifierService }, { type: AvatarServiceInterface }]; } });
|
|
30317
31087
|
|
|
30318
31088
|
class MdViewEffects {
|
|
30319
|
-
constructor(actions$, recordsRepository) {
|
|
31089
|
+
constructor(actions$, recordsRepository, platformServiceInterface) {
|
|
30320
31090
|
this.actions$ = actions$;
|
|
30321
31091
|
this.recordsRepository = recordsRepository;
|
|
30322
|
-
this.
|
|
31092
|
+
this.platformServiceInterface = platformServiceInterface;
|
|
31093
|
+
/*
|
|
31094
|
+
Metadata effects
|
|
31095
|
+
*/
|
|
31096
|
+
this.loadFullMetadata$ = createEffect(() => this.actions$.pipe(ofType(loadFullMetadata), switchMap$1(({ uuid }) => this.recordsRepository.getByUniqueIdentifier(uuid)), map$1((record) => {
|
|
30323
31097
|
if (record === null) {
|
|
30324
|
-
return
|
|
31098
|
+
return loadFullMetadataFailure({ notFound: true });
|
|
30325
31099
|
}
|
|
30326
|
-
return
|
|
30327
|
-
}), catchError((error) => of(
|
|
30328
|
-
|
|
31100
|
+
return loadFullMetadataSuccess({ full: record });
|
|
31101
|
+
}), catchError((error) => of(loadFullMetadataFailure({ otherError: error.message })))));
|
|
31102
|
+
/*
|
|
31103
|
+
Related effects
|
|
31104
|
+
*/
|
|
31105
|
+
this.loadRelatedRecords$ = createEffect(() => this.actions$.pipe(ofType(loadFullMetadataSuccess), switchMap$1(({ full }) => this.recordsRepository.getSimilarRecords(full)), map$1((related) => {
|
|
30329
31106
|
return setRelated({ related });
|
|
30330
31107
|
}), catchError((error) => of(setRelated({ related: null })))));
|
|
31108
|
+
/*
|
|
31109
|
+
UserFeedback effects
|
|
31110
|
+
*/
|
|
31111
|
+
this.loadUserFeedbacks$ = createEffect(() => this.actions$.pipe(ofType(loadUserFeedbacks), exhaustMap(({ datasetUuid }) => this.platformServiceInterface.getUserFeedbacks(datasetUuid).pipe(map$1((userFeedbacks) => loadUserFeedbacksSuccess({ userFeedbacks })), catchError((error) => of(loadUserFeedbacksFailure({
|
|
31112
|
+
otherError: error.message,
|
|
31113
|
+
})))))));
|
|
31114
|
+
this.reloadUserFeedbacks$ = createEffect(() => this.actions$.pipe(ofType(addUserFeedbackSuccess), exhaustMap(({ datasetUuid }) => this.platformServiceInterface.getUserFeedbacks(datasetUuid).pipe(map$1((userFeedbacks) => loadUserFeedbacksSuccess({ userFeedbacks })), catchError((error) => of(loadUserFeedbacksFailure({
|
|
31115
|
+
otherError: error.message,
|
|
31116
|
+
})))))));
|
|
31117
|
+
this.addUserFeedback$ = createEffect(() => this.actions$.pipe(ofType(addUserFeedback), mergeMap$1((action) => this.platformServiceInterface
|
|
31118
|
+
.postUserFeedbacks(action.userFeedback)
|
|
31119
|
+
.pipe(map$1(() => addUserFeedbackSuccess({
|
|
31120
|
+
datasetUuid: action.userFeedback.metadataUUID,
|
|
31121
|
+
})), catchError((error) => {
|
|
31122
|
+
return of(addUserFeedbackFailure({
|
|
31123
|
+
otherError: error.message,
|
|
31124
|
+
}));
|
|
31125
|
+
})))));
|
|
30331
31126
|
}
|
|
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 }); }
|
|
31127
|
+
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
31128
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewEffects }); }
|
|
30334
31129
|
}
|
|
30335
31130
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewEffects, decorators: [{
|
|
30336
31131
|
type: Injectable
|
|
30337
|
-
}], ctorParameters: function () { return [{ type: i1$8.Actions }, { type: RecordsRepositoryInterface }]; } });
|
|
31132
|
+
}], ctorParameters: function () { return [{ type: i1$8.Actions }, { type: RecordsRepositoryInterface }, { type: PlatformServiceInterface }]; } });
|
|
30338
31133
|
|
|
30339
31134
|
class FigureComponent {
|
|
30340
31135
|
constructor() {
|
|
@@ -30569,7 +31364,7 @@ class TableComponent {
|
|
|
30569
31364
|
return rowIdPrefix + id;
|
|
30570
31365
|
}
|
|
30571
31366
|
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$
|
|
31367
|
+
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
31368
|
}
|
|
30574
31369
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TableComponent, decorators: [{
|
|
30575
31370
|
type: Component,
|
|
@@ -31439,6 +32234,7 @@ marker('wfs.unreachable.http');
|
|
|
31439
32234
|
marker('wfs.unreachable.unknown');
|
|
31440
32235
|
marker('wfs.featuretype.notfound');
|
|
31441
32236
|
marker('wfs.geojsongml.notsupported');
|
|
32237
|
+
marker('ogc.unreachable.unknown');
|
|
31442
32238
|
marker('dataset.error.network');
|
|
31443
32239
|
marker('dataset.error.http');
|
|
31444
32240
|
marker('dataset.error.parse');
|
|
@@ -31518,6 +32314,27 @@ class DataService {
|
|
|
31518
32314
|
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
|
|
31519
32315
|
}))));
|
|
31520
32316
|
}
|
|
32317
|
+
async getDownloadLinksFromOgcApiFeatures(ogcApiLink) {
|
|
32318
|
+
const collectionInfo = await this.getDownloadUrlsFromOgcApi(ogcApiLink.url.href);
|
|
32319
|
+
return Object.keys(collectionInfo.bulkDownloadLinks).map((downloadLink) => {
|
|
32320
|
+
return {
|
|
32321
|
+
...ogcApiLink,
|
|
32322
|
+
type: 'download',
|
|
32323
|
+
url: new URL(collectionInfo.bulkDownloadLinks[downloadLink]),
|
|
32324
|
+
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(downloadLink)),
|
|
32325
|
+
};
|
|
32326
|
+
});
|
|
32327
|
+
}
|
|
32328
|
+
async getDownloadUrlsFromOgcApi(url) {
|
|
32329
|
+
const endpoint = new OgcApiEndpoint(this.proxy.getProxiedUrl(url));
|
|
32330
|
+
return await endpoint.featureCollections
|
|
32331
|
+
.then((collections) => {
|
|
32332
|
+
return endpoint.getCollectionInfo(collections[0]);
|
|
32333
|
+
})
|
|
32334
|
+
.catch((error) => {
|
|
32335
|
+
throw new Error(`ogc.unreachable.unknown`);
|
|
32336
|
+
});
|
|
32337
|
+
}
|
|
31521
32338
|
getDownloadLinksFromEsriRest(esriRestLink) {
|
|
31522
32339
|
return ['json', 'geojson'].map((format) => ({
|
|
31523
32340
|
...esriRestLink,
|
|
@@ -31561,6 +32378,17 @@ class DataService {
|
|
|
31561
32378
|
const url = this.getDownloadUrlFromEsriRest(link.url.toString(), 'geojson');
|
|
31562
32379
|
return from(openDataset(url, 'geojson')).pipe();
|
|
31563
32380
|
}
|
|
32381
|
+
else if (link.type === 'service' &&
|
|
32382
|
+
link.accessServiceProtocol === 'ogcFeatures') {
|
|
32383
|
+
return from(this.getDownloadUrlsFromOgcApi(link.url.href)).pipe(switchMap$1((collectionInfo) => {
|
|
32384
|
+
const geojsonUrl = collectionInfo.jsonDownloadLink;
|
|
32385
|
+
return openDataset(geojsonUrl, 'geojson');
|
|
32386
|
+
}), tap$1((url) => {
|
|
32387
|
+
if (url === null) {
|
|
32388
|
+
throw new Error('wfs.geojsongml.notsupported');
|
|
32389
|
+
}
|
|
32390
|
+
}));
|
|
32391
|
+
}
|
|
31564
32392
|
return throwError(() => 'protocol not supported');
|
|
31565
32393
|
}
|
|
31566
32394
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DataService, deps: [{ token: ProxyService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
@@ -31787,7 +32615,7 @@ class ChartViewComponent {
|
|
|
31787
32615
|
this.changeDetector.detectChanges();
|
|
31788
32616
|
}
|
|
31789
32617
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ChartViewComponent, deps: [{ token: DataService }, { token: i0.ChangeDetectorRef }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31790
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ChartViewComponent, selector: "gn-ui-chart-view", inputs: { link: "link", aggregation: "aggregation", xProperty: "xProperty", yProperty: "yProperty", chartType: "chartType" }, outputs: { chartConfig$: "chartConfig$" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col\">\n <div\n class=\"flex flex-col space-y-2 sm:flex-row sm:space-y-0 sm:space-x-2 justify-between text-[13px]\"\n >\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"typeChoices\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"chartType$.next($event)\"\n [selected]=\"chartType$.value\"\n [title]=\"'chart.dropdown.type' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"xChoices$ | async\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"xProperty$.next($event)\"\n [selected]=\"xProperty$.value\"\n [title]=\"'chart.dropdown.xProperty' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n *ngIf=\"!isCountAggregation\"\n [choices]=\"yChoices$ | async\"\n (selectValue)=\"yProperty$.next($event)\"\n [selected]=\"yProperty$.value\"\n [title]=\"'chart.dropdown.yProperty' | translate\"\n class=\"select-y-prop\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"aggregationChoices\"\n class=\"aggregation-choices\"\n (selectValue)=\"aggregation$.next($event)\"\n [selected]=\"aggregation$.value\"\n [title]=\"'chart.dropdown.aggregation' | translate\"\n ></gn-ui-dropdown-selector>\n </div>\n <div\n class=\"relative h-full mt-2 bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-chart\n [data]=\"chartData$ | async\"\n [type]=\"chartType$.value\"\n [labelProperty]=\"labelProperty\"\n [valueProperty]=\"valueProperty\"\n ></gn-ui-chart>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'chart.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"error_outline\"\n class=\"absolute m-2 inset-0\"\n >\n <span>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "component", type: ChartComponent, selector: "gn-ui-chart", inputs: ["data", "labelProperty", "valueProperty", "secondaryValueProperty", "type"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
32618
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ChartViewComponent, selector: "gn-ui-chart-view", inputs: { link: "link", aggregation: "aggregation", xProperty: "xProperty", yProperty: "yProperty", chartType: "chartType" }, outputs: { chartConfig$: "chartConfig$" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col\">\n <div\n class=\"flex flex-col space-y-2 sm:flex-row sm:space-y-0 sm:space-x-2 justify-between text-[13px]\"\n >\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"typeChoices\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"chartType$.next($event)\"\n [selected]=\"chartType$.value\"\n [title]=\"'chart.dropdown.type' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"xChoices$ | async\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"xProperty$.next($event)\"\n [selected]=\"xProperty$.value\"\n [title]=\"'chart.dropdown.xProperty' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n *ngIf=\"!isCountAggregation\"\n [choices]=\"yChoices$ | async\"\n (selectValue)=\"yProperty$.next($event)\"\n [selected]=\"yProperty$.value\"\n [title]=\"'chart.dropdown.yProperty' | translate\"\n class=\"select-y-prop\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"aggregationChoices\"\n class=\"aggregation-choices\"\n (selectValue)=\"aggregation$.next($event)\"\n [selected]=\"aggregation$.value\"\n [title]=\"'chart.dropdown.aggregation' | translate\"\n ></gn-ui-dropdown-selector>\n </div>\n <div\n class=\"relative h-full mt-2 bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-chart\n [data]=\"chartData$ | async\"\n [type]=\"chartType$.value\"\n [labelProperty]=\"labelProperty\"\n [valueProperty]=\"valueProperty\"\n ></gn-ui-chart>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'chart.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"error_outline\"\n class=\"absolute m-2 inset-0\"\n >\n <span>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "component", type: ChartComponent, selector: "gn-ui-chart", inputs: ["data", "labelProperty", "valueProperty", "secondaryValueProperty", "type"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
31791
32619
|
}
|
|
31792
32620
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ChartViewComponent, decorators: [{
|
|
31793
32621
|
type: Component,
|
|
@@ -32019,7 +32847,8 @@ class MapViewComponent {
|
|
|
32019
32847
|
}
|
|
32020
32848
|
else if ((link.type === 'service' &&
|
|
32021
32849
|
(link.accessServiceProtocol === 'wfs' ||
|
|
32022
|
-
link.accessServiceProtocol === 'esriRest'
|
|
32850
|
+
link.accessServiceProtocol === 'esriRest' ||
|
|
32851
|
+
link.accessServiceProtocol === 'ogcFeatures')) ||
|
|
32023
32852
|
link.type === 'download') {
|
|
32024
32853
|
return this.dataService.readAsGeoJson(link).pipe(map$1((data) => ({
|
|
32025
32854
|
type: MapContextLayerTypeEnum.GEOJSON,
|
|
@@ -32032,7 +32861,7 @@ class MapViewComponent {
|
|
|
32032
32861
|
this.selectedLinkIndex$.next(link);
|
|
32033
32862
|
}
|
|
32034
32863
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, deps: [{ token: MdViewFacade }, { token: MapManagerService }, { token: MapUtilsService }, { token: DataService }, { token: FeatureInfoService }, { token: i0.ChangeDetectorRef }, { token: MapStyleService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32035
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MapViewComponent, selector: "gn-ui-map-view", ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end mb-7 mt-1\">\n <gn-ui-dropdown-selector\n class=\"truncate p-1 -mx-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n <gn-ui-external-viewer-button\n class=\"shrink-0 py-1 place-self-end\"\n [link]=\"selectedLink$ | async\"\n [mapConfig]=\"mapConfig\"\n >\n </gn-ui-external-viewer-button>\n </div>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-context\n [context]=\"mapContext$ | async\"\n [mapConfig]=\"mapConfig\"\n ></gn-ui-map-context>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <button\n (click)=\"resetSelection()\"\n class=\"rounded bg-primary-opacity-25 text-white absolute right-[0.5em]\"\n >\n <mat-icon\n class=\"material-symbols-outlined align-middle text-sm\"\n style=\"height: 21px\"\n >close</mat-icon\n >\n </button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"error_outline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MapContextComponent, selector: "gn-ui-map-context", inputs: ["context", "mapConfig"], outputs: ["featureClicked"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ExternalViewerButtonComponent, selector: "gn-ui-external-viewer-button", inputs: ["link", "mapConfig"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
32864
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MapViewComponent, selector: "gn-ui-map-view", ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end mb-7 mt-1\">\n <gn-ui-dropdown-selector\n class=\"truncate p-1 -mx-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n <gn-ui-external-viewer-button\n class=\"shrink-0 py-1 place-self-end\"\n [link]=\"selectedLink$ | async\"\n [mapConfig]=\"mapConfig\"\n >\n </gn-ui-external-viewer-button>\n </div>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-context\n [context]=\"mapContext$ | async\"\n [mapConfig]=\"mapConfig\"\n ></gn-ui-map-context>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <button\n (click)=\"resetSelection()\"\n class=\"rounded bg-primary-opacity-25 text-white absolute right-[0.5em]\"\n >\n <mat-icon\n class=\"material-symbols-outlined align-middle text-sm\"\n style=\"height: 21px\"\n >close</mat-icon\n >\n </button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"error_outline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MapContextComponent, selector: "gn-ui-map-context", inputs: ["context", "mapConfig"], outputs: ["featureClicked"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ExternalViewerButtonComponent, selector: "gn-ui-external-viewer-button", inputs: ["link", "mapConfig"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
32036
32865
|
}
|
|
32037
32866
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, decorators: [{
|
|
32038
32867
|
type: Component,
|
|
@@ -32070,7 +32899,7 @@ class DataViewComponent {
|
|
|
32070
32899
|
this.selectedLink$.next(link);
|
|
32071
32900
|
}
|
|
32072
32901
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DataViewComponent, deps: [{ token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32073
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DataViewComponent, selector: "gn-ui-data-view", inputs: { mode: "mode" }, outputs: { chartConfig$: "chartConfig$" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <gn-ui-dropdown-selector\n *ngIf=\"dropdownChoices$ | async as choices\"\n [title]=\"'table.select.data' | translate\"\n class=\"truncate p-1 -mx-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [choices]=\"choices\"\n (selectValue)=\"selectLink($event)\"\n ></gn-ui-dropdown-selector>\n <div class=\"relative h-[420px]\">\n <gn-ui-table-view\n *ngIf=\"mode === 'table'\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-table-view>\n <gn-ui-chart-view\n *ngIf=\"mode === 'chart'\"\n (chartConfig$)=\"setChartConfig($event)\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-chart-view>\n </div>\n</div>\n", styles: [""], 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: TableViewComponent, selector: "gn-ui-table-view", inputs: ["link"] }, { kind: "component", type: ChartViewComponent, selector: "gn-ui-chart-view", inputs: ["link", "aggregation", "xProperty", "yProperty", "chartType"], outputs: ["chartConfig$"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
32902
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DataViewComponent, selector: "gn-ui-data-view", inputs: { mode: "mode" }, outputs: { chartConfig$: "chartConfig$" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <gn-ui-dropdown-selector\n *ngIf=\"dropdownChoices$ | async as choices\"\n [title]=\"'table.select.data' | translate\"\n class=\"truncate p-1 -mx-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [choices]=\"choices\"\n (selectValue)=\"selectLink($event)\"\n ></gn-ui-dropdown-selector>\n <div class=\"relative h-[420px]\">\n <gn-ui-table-view\n *ngIf=\"mode === 'table'\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-table-view>\n <gn-ui-chart-view\n *ngIf=\"mode === 'chart'\"\n (chartConfig$)=\"setChartConfig($event)\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-chart-view>\n </div>\n</div>\n", styles: [""], 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", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: TableViewComponent, selector: "gn-ui-table-view", inputs: ["link"] }, { kind: "component", type: ChartViewComponent, selector: "gn-ui-chart-view", inputs: ["link", "aggregation", "xProperty", "yProperty", "chartType"], outputs: ["chartConfig$"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
32074
32903
|
}
|
|
32075
32904
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DataViewComponent, decorators: [{
|
|
32076
32905
|
type: Component,
|
|
@@ -32164,7 +32993,7 @@ class OrganisationsFilterComponent {
|
|
|
32164
32993
|
this.filterByValueChange.next(inputValue);
|
|
32165
32994
|
}
|
|
32166
32995
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationsFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32167
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: OrganisationsFilterComponent, selector: "gn-ui-organisations-filter", outputs: { sortBy: "sortBy", filterBy: "filterBy" }, ngImport: i0, template: "<div\n class=\"flex flex-wrap sm:flex-nowrap justify-between bg-white shadow-xl p-5 rounded-lg\"\n>\n <span class=\"grow mb-4 mr-4 sm:mb-0 sm:mr-16 sm:max-w-sm\">\n <gn-ui-search-input\n (valueChange)=\"filterOrganisations($event)\"\n [placeholder]=\"'organisation.filter.placeholder' | translate\"\n ></gn-ui-search-input>\n </span>\n <span class=\"flex flex-wrap sm:flex-nowrap sm:shrink-0\">\n <gn-ui-dropdown-selector\n [title]=\"'organisation.sort.sortBy' | translate\"\n class=\"shrink\"\n [choices]=\"choices\"\n [minWidth]=\"'180px'\"\n [showTitle]=\"true\"\n (selectValue)=\"selectOrderToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n </span>\n</div>\n", dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: SearchInputComponent, selector: "gn-ui-search-input", inputs: ["value", "placeholder"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
32996
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: OrganisationsFilterComponent, selector: "gn-ui-organisations-filter", outputs: { sortBy: "sortBy", filterBy: "filterBy" }, ngImport: i0, template: "<div\n class=\"flex flex-wrap sm:flex-nowrap justify-between bg-white shadow-xl p-5 rounded-lg\"\n>\n <span class=\"grow mb-4 mr-4 sm:mb-0 sm:mr-16 sm:max-w-sm\">\n <gn-ui-search-input\n (valueChange)=\"filterOrganisations($event)\"\n [placeholder]=\"'organisation.filter.placeholder' | translate\"\n ></gn-ui-search-input>\n </span>\n <span class=\"flex flex-wrap sm:flex-nowrap sm:shrink-0\">\n <gn-ui-dropdown-selector\n [title]=\"'organisation.sort.sortBy' | translate\"\n class=\"shrink\"\n [choices]=\"choices\"\n [minWidth]=\"'180px'\"\n [showTitle]=\"true\"\n (selectValue)=\"selectOrderToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n </span>\n</div>\n", dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: SearchInputComponent, selector: "gn-ui-search-input", inputs: ["value", "placeholder"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
32168
32997
|
}
|
|
32169
32998
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationsFilterComponent, decorators: [{
|
|
32170
32999
|
type: Component,
|
|
@@ -32204,7 +33033,7 @@ class LanguageSwitcherComponent {
|
|
|
32204
33033
|
this.translate.use(value);
|
|
32205
33034
|
}
|
|
32206
33035
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, deps: [{ token: LANGUAGES_LIST, optional: true }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32207
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n extraBtnClass=\"bg-transparent flex justify-items-center !pl-2 !py-1\"\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"] }] }); }
|
|
33036
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n extraBtnClass=\"bg-transparent flex justify-items-center !pl-2 !py-1\"\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", "disabled"], outputs: ["selectValue"] }] }); }
|
|
32208
33037
|
}
|
|
32209
33038
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
|
|
32210
33039
|
type: Component,
|
|
@@ -32617,7 +33446,7 @@ class DataViewShareComponent {
|
|
|
32617
33446
|
this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
|
|
32618
33447
|
}
|
|
32619
33448
|
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$
|
|
33449
|
+
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
33450
|
}
|
|
32622
33451
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DataViewShareComponent, decorators: [{
|
|
32623
33452
|
type: Component,
|
|
@@ -32653,7 +33482,7 @@ class FeatureRecordModule {
|
|
|
32653
33482
|
DataViewWebComponentComponent,
|
|
32654
33483
|
DataViewShareComponent] }); }
|
|
32655
33484
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureRecordModule, providers: [MdViewFacade], imports: [CommonModule,
|
|
32656
|
-
StoreModule.forFeature(
|
|
33485
|
+
StoreModule.forFeature(METADATA_VIEW_FEATURE_STATE_KEY, reducer$1),
|
|
32657
33486
|
EffectsModule.forFeature([MdViewEffects]),
|
|
32658
33487
|
UiLayoutModule,
|
|
32659
33488
|
FeatureMapModule,
|
|
@@ -32681,7 +33510,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
32681
33510
|
],
|
|
32682
33511
|
imports: [
|
|
32683
33512
|
CommonModule,
|
|
32684
|
-
StoreModule.forFeature(
|
|
33513
|
+
StoreModule.forFeature(METADATA_VIEW_FEATURE_STATE_KEY, reducer$1),
|
|
32685
33514
|
EffectsModule.forFeature([MdViewEffects]),
|
|
32686
33515
|
UiLayoutModule,
|
|
32687
33516
|
FeatureMapModule,
|
|
@@ -32746,6 +33575,27 @@ const DEFAULT_FIELDS = [
|
|
|
32746
33575
|
},
|
|
32747
33576
|
onSaveProcess: '${dateNow()}',
|
|
32748
33577
|
},
|
|
33578
|
+
{
|
|
33579
|
+
model: 'licenses',
|
|
33580
|
+
formFieldConfig: {
|
|
33581
|
+
labelKey: marker('editor.record.form.license'),
|
|
33582
|
+
type: 'list',
|
|
33583
|
+
},
|
|
33584
|
+
},
|
|
33585
|
+
{
|
|
33586
|
+
model: 'resourceUpdated',
|
|
33587
|
+
formFieldConfig: {
|
|
33588
|
+
labelKey: marker('editor.record.form.resourceUpdated'),
|
|
33589
|
+
type: 'date',
|
|
33590
|
+
},
|
|
33591
|
+
},
|
|
33592
|
+
{
|
|
33593
|
+
model: 'updateFrequency',
|
|
33594
|
+
formFieldConfig: {
|
|
33595
|
+
labelKey: marker('editor.record.form.updateFrequency'),
|
|
33596
|
+
type: 'text',
|
|
33597
|
+
},
|
|
33598
|
+
},
|
|
32749
33599
|
];
|
|
32750
33600
|
|
|
32751
33601
|
const EDITOR_FEATURE_KEY = 'editor';
|
|
@@ -33130,7 +33980,7 @@ class WizardFieldComponent {
|
|
|
33130
33980
|
deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
|
|
33131
33981
|
},
|
|
33132
33982
|
{ 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:
|
|
33983
|
+
], 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", "disabled"], 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
33984
|
}
|
|
33135
33985
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: WizardFieldComponent, decorators: [{
|
|
33136
33986
|
type: Component,
|
|
@@ -33459,6 +34309,174 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
33459
34309
|
args: [{ selector: 'gn-ui-form-field-temporal-extent', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<p>form-field-temporal-extent works!</p>\n" }]
|
|
33460
34310
|
}] });
|
|
33461
34311
|
|
|
34312
|
+
class FormFieldLicenseComponent {
|
|
34313
|
+
constructor() {
|
|
34314
|
+
this.choices = [
|
|
34315
|
+
{
|
|
34316
|
+
value: 'cc-by',
|
|
34317
|
+
label: marker('editor.record.form.license.cc-by'),
|
|
34318
|
+
},
|
|
34319
|
+
{
|
|
34320
|
+
value: 'cc-by-sa',
|
|
34321
|
+
label: marker('editor.record.form.license.cc-by-sa'),
|
|
34322
|
+
},
|
|
34323
|
+
{
|
|
34324
|
+
value: 'cc-zero',
|
|
34325
|
+
label: marker('editor.record.form.license.cc-zero'),
|
|
34326
|
+
},
|
|
34327
|
+
{
|
|
34328
|
+
value: 'etalab',
|
|
34329
|
+
label: marker('editor.record.form.license.etalab'),
|
|
34330
|
+
},
|
|
34331
|
+
{
|
|
34332
|
+
value: 'etalab-v2',
|
|
34333
|
+
label: marker('editor.record.form.license.etalab-v2'),
|
|
34334
|
+
},
|
|
34335
|
+
{
|
|
34336
|
+
value: 'odbl',
|
|
34337
|
+
label: marker('editor.record.form.license.odbl'),
|
|
34338
|
+
},
|
|
34339
|
+
{
|
|
34340
|
+
value: 'odc-by',
|
|
34341
|
+
label: marker('editor.record.form.license.odc-by'),
|
|
34342
|
+
},
|
|
34343
|
+
{
|
|
34344
|
+
value: 'pddl',
|
|
34345
|
+
label: marker('editor.record.form.license.pddl'),
|
|
34346
|
+
},
|
|
34347
|
+
{
|
|
34348
|
+
value: 'unknown',
|
|
34349
|
+
label: marker('editor.record.form.license.unknown'),
|
|
34350
|
+
},
|
|
34351
|
+
];
|
|
34352
|
+
}
|
|
34353
|
+
get selected() {
|
|
34354
|
+
return this.control.value[0]?.text;
|
|
34355
|
+
}
|
|
34356
|
+
onSelectValue(value) {
|
|
34357
|
+
this.control.setValue([{ text: value }]);
|
|
34358
|
+
}
|
|
34359
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldLicenseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34360
|
+
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", "disabled"], outputs: ["selectValue"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
34361
|
+
}
|
|
34362
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldLicenseComponent, decorators: [{
|
|
34363
|
+
type: Component,
|
|
34364
|
+
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" }]
|
|
34365
|
+
}], propDecorators: { control: [{
|
|
34366
|
+
type: Input
|
|
34367
|
+
}], label: [{
|
|
34368
|
+
type: Input
|
|
34369
|
+
}] } });
|
|
34370
|
+
|
|
34371
|
+
class FormFieldResourceUpdatedComponent {
|
|
34372
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldResourceUpdatedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34373
|
+
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 }); }
|
|
34374
|
+
}
|
|
34375
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldResourceUpdatedComponent, decorators: [{
|
|
34376
|
+
type: Component,
|
|
34377
|
+
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" }]
|
|
34378
|
+
}], propDecorators: { control: [{
|
|
34379
|
+
type: Input
|
|
34380
|
+
}] } });
|
|
34381
|
+
|
|
34382
|
+
class FormFieldUpdateFrequencyComponent {
|
|
34383
|
+
get planned() {
|
|
34384
|
+
return this.control.value !== 'notPlanned';
|
|
34385
|
+
}
|
|
34386
|
+
constructor(translateService) {
|
|
34387
|
+
this.translateService = translateService;
|
|
34388
|
+
this.choices = [
|
|
34389
|
+
{
|
|
34390
|
+
value: 'day.1',
|
|
34391
|
+
label: this.translateService.instant('domain.record.updateFrequency.day', {
|
|
34392
|
+
count: 1,
|
|
34393
|
+
}),
|
|
34394
|
+
},
|
|
34395
|
+
{
|
|
34396
|
+
value: 'day.2',
|
|
34397
|
+
label: this.translateService.instant('domain.record.updateFrequency.day', {
|
|
34398
|
+
count: 2,
|
|
34399
|
+
}),
|
|
34400
|
+
},
|
|
34401
|
+
{
|
|
34402
|
+
value: 'week.1',
|
|
34403
|
+
label: this.translateService.instant('domain.record.updateFrequency.week', {
|
|
34404
|
+
count: 1,
|
|
34405
|
+
}),
|
|
34406
|
+
},
|
|
34407
|
+
{
|
|
34408
|
+
value: 'week.2',
|
|
34409
|
+
label: this.translateService.instant('domain.record.updateFrequency.week', {
|
|
34410
|
+
count: 2,
|
|
34411
|
+
}),
|
|
34412
|
+
},
|
|
34413
|
+
{
|
|
34414
|
+
value: 'month.1',
|
|
34415
|
+
label: this.translateService.instant('domain.record.updateFrequency.month', {
|
|
34416
|
+
count: 1,
|
|
34417
|
+
}),
|
|
34418
|
+
},
|
|
34419
|
+
{
|
|
34420
|
+
value: 'month.2',
|
|
34421
|
+
label: this.translateService.instant('domain.record.updateFrequency.month', {
|
|
34422
|
+
count: 2,
|
|
34423
|
+
}),
|
|
34424
|
+
},
|
|
34425
|
+
{
|
|
34426
|
+
value: 'year.1',
|
|
34427
|
+
label: this.translateService.instant('domain.record.updateFrequency.year', {
|
|
34428
|
+
count: 1,
|
|
34429
|
+
}),
|
|
34430
|
+
},
|
|
34431
|
+
{
|
|
34432
|
+
value: 'year.2',
|
|
34433
|
+
label: this.translateService.instant('domain.record.updateFrequency.year', {
|
|
34434
|
+
count: 2,
|
|
34435
|
+
}),
|
|
34436
|
+
},
|
|
34437
|
+
];
|
|
34438
|
+
}
|
|
34439
|
+
ngOnInit() {
|
|
34440
|
+
const updatedTimes = this.control.value?.updatedTimes;
|
|
34441
|
+
const per = this.control.value?.per;
|
|
34442
|
+
if (updatedTimes && updatedTimes !== 1 && updatedTimes !== 2) {
|
|
34443
|
+
this.choices = [
|
|
34444
|
+
{
|
|
34445
|
+
value: `${per}.${updatedTimes}`,
|
|
34446
|
+
label: this.translateService.instant(`domain.record.updateFrequency.${per}`, {
|
|
34447
|
+
count: updatedTimes,
|
|
34448
|
+
}),
|
|
34449
|
+
},
|
|
34450
|
+
...this.choices,
|
|
34451
|
+
];
|
|
34452
|
+
}
|
|
34453
|
+
}
|
|
34454
|
+
onPlannedToggled() {
|
|
34455
|
+
if (this.planned) {
|
|
34456
|
+
this.control.setValue('notPlanned');
|
|
34457
|
+
}
|
|
34458
|
+
else {
|
|
34459
|
+
this.control.setValue({ updatedTimes: 1, per: 'day' });
|
|
34460
|
+
}
|
|
34461
|
+
}
|
|
34462
|
+
get selectedFrequency() {
|
|
34463
|
+
const { updatedTimes, per } = this.control.value;
|
|
34464
|
+
return `${per}.${updatedTimes}`;
|
|
34465
|
+
}
|
|
34466
|
+
onSelectFrequencyValue(value) {
|
|
34467
|
+
const split = value.split('.');
|
|
34468
|
+
this.control.setValue({ updatedTimes: Number(split[1]), per: split[0] });
|
|
34469
|
+
}
|
|
34470
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldUpdateFrequencyComponent, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34471
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldUpdateFrequencyComponent, isStandalone: true, selector: "gn-ui-form-field-update-frequency", inputs: { control: "control" }, ngImport: i0, template: "<gn-ui-check-toggle\n [label]=\"'editor.record.form.updateFrequency.planned' | translate\"\n [value]=\"planned\"\n (toggled)=\"onPlannedToggled()\"\n></gn-ui-check-toggle>\n<gn-ui-dropdown-selector\n title=\"updateFrequency\"\n [showTitle]=\"false\"\n [choices]=\"choices\"\n [selected]=\"selectedFrequency\"\n (selectValue)=\"onSelectFrequencyValue($event)\"\n [disabled]=\"!planned\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: CheckToggleComponent, selector: "gn-ui-check-toggle", inputs: ["title", "label", "value", "color"], outputs: ["toggled"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
34472
|
+
}
|
|
34473
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldUpdateFrequencyComponent, decorators: [{
|
|
34474
|
+
type: Component,
|
|
34475
|
+
args: [{ selector: 'gn-ui-form-field-update-frequency', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CheckToggleComponent, DropdownSelectorComponent, TranslateModule], template: "<gn-ui-check-toggle\n [label]=\"'editor.record.form.updateFrequency.planned' | translate\"\n [value]=\"planned\"\n (toggled)=\"onPlannedToggled()\"\n></gn-ui-check-toggle>\n<gn-ui-dropdown-selector\n title=\"updateFrequency\"\n [showTitle]=\"false\"\n [choices]=\"choices\"\n [selected]=\"selectedFrequency\"\n (selectValue)=\"onSelectFrequencyValue($event)\"\n [disabled]=\"!planned\"\n>\n</gn-ui-dropdown-selector>\n" }]
|
|
34476
|
+
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; }, propDecorators: { control: [{
|
|
34477
|
+
type: Input
|
|
34478
|
+
}] } });
|
|
34479
|
+
|
|
33462
34480
|
class FormFieldComponent {
|
|
33463
34481
|
set value(v) {
|
|
33464
34482
|
this.formControl.setValue(v, {
|
|
@@ -33513,8 +34531,20 @@ class FormFieldComponent {
|
|
|
33513
34531
|
get isAbstract() {
|
|
33514
34532
|
return this.model === 'abstract';
|
|
33515
34533
|
}
|
|
34534
|
+
get isLicenses() {
|
|
34535
|
+
return this.model === 'licenses';
|
|
34536
|
+
}
|
|
34537
|
+
get isResourceUpdated() {
|
|
34538
|
+
return this.model === 'resourceUpdated';
|
|
34539
|
+
}
|
|
34540
|
+
get isUpdateFrequency() {
|
|
34541
|
+
return this.model === 'updateFrequency';
|
|
34542
|
+
}
|
|
34543
|
+
get withoutWrapper() {
|
|
34544
|
+
return this.model === 'title' || this.model === 'abstract';
|
|
34545
|
+
}
|
|
33516
34546
|
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 <
|
|
34547
|
+
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=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\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: FormFieldUpdateFrequencyComponent, selector: "gn-ui-form-field-update-frequency", 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
34548
|
}
|
|
33519
34549
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldComponent, decorators: [{
|
|
33520
34550
|
type: Component,
|
|
@@ -33524,6 +34554,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
33524
34554
|
EditableLabelDirective,
|
|
33525
34555
|
MatIconModule,
|
|
33526
34556
|
MatTooltipModule,
|
|
34557
|
+
FormFieldWrapperComponent,
|
|
34558
|
+
FormFieldLicenseComponent,
|
|
34559
|
+
FormFieldResourceUpdatedComponent,
|
|
34560
|
+
FormFieldUpdateFrequencyComponent,
|
|
33527
34561
|
FormFieldSimpleComponent,
|
|
33528
34562
|
FormFieldRichComponent,
|
|
33529
34563
|
FormFieldObjectComponent,
|
|
@@ -33532,7 +34566,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
33532
34566
|
FormFieldFileComponent,
|
|
33533
34567
|
FormFieldArrayComponent,
|
|
33534
34568
|
TranslateModule,
|
|
33535
|
-
], template: "<div class=\"flex flex-col h-full\">\n <
|
|
34569
|
+
], 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=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\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
34570
|
}], ctorParameters: function () { return []; }, propDecorators: { model: [{
|
|
33537
34571
|
type: Input
|
|
33538
34572
|
}], config: [{
|
|
@@ -33863,7 +34897,7 @@ class RouterEffects {
|
|
|
33863
34897
|
* the search results happens
|
|
33864
34898
|
*/
|
|
33865
34899
|
this.navigateToSearch$ = createEffect(() => this._actions$.pipe(navigation(this.routerConfig.searchRouteComponent, {
|
|
33866
|
-
run: () =>
|
|
34900
|
+
run: () => closeMetadata(),
|
|
33867
34901
|
})));
|
|
33868
34902
|
this.navigateBack$ = createEffect(() => this._actions$.pipe(ofType(backAction), tap$1(() => this._location.back())), { dispatch: false });
|
|
33869
34903
|
this.navigateForward$ = createEffect(() => this._actions$.pipe(ofType(forwardAction), tap$1(() => this._location.forward())), { dispatch: false });
|
|
@@ -33890,7 +34924,7 @@ class DefaultRouterModule {
|
|
|
33890
34924
|
};
|
|
33891
34925
|
}
|
|
33892
34926
|
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$
|
|
34927
|
+
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
34928
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DefaultRouterModule, providers: [
|
|
33895
34929
|
RouterFacade,
|
|
33896
34930
|
{
|
|
@@ -33933,5 +34967,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
33933
34967
|
* Generated bundle index. Do not edit.
|
|
33934
34968
|
*/
|
|
33935
34969
|
|
|
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 };
|
|
34970
|
+
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, 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, FullTextSearchField, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, IsSpatialSearchField, 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, LicenseSearchField, 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, MultilingualSearchField, MyOrgService, NavigationButtonComponent, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, 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, SimpleSearchField, 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, TranslatedSearchField, 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
34971
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|