geonetwork-ui 2.3.0-dev.6083baae → 2.3.0-dev.639c48f8
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/gn4/gn4.field.mapper.mjs +3 -3
- 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 +19 -7
- package/esm2022/libs/common/domain/src/lib/model/record/index.mjs +2 -1
- package/esm2022/libs/common/domain/src/lib/model/record/user-feedbacks.model.mjs +2 -0
- package/esm2022/libs/common/domain/src/lib/model/user/index.mjs +2 -0
- package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
- package/esm2022/libs/feature/dataviz/src/lib/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-rich/form-field-rich.component.mjs +3 -3
- 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 +43 -10
- package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +3 -13
- 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 +29 -8
- 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 +52 -17
- package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +18 -3
- package/esm2022/libs/feature/router/src/lib/default/state/router.effects.mjs +2 -2
- package/esm2022/libs/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 +62 -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/form-field-wrapper/form-field-wrapper.component.mjs +3 -3
- 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 +1852 -827
- 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 +9 -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/components/record-form/record-form.component.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
- package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts +10 -5
- package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts.map +1 -1
- package/libs/feature/map/src/lib/map-context/map-context.model.d.ts +1 -0
- package/libs/feature/map/src/lib/map-context/map-context.model.d.ts.map +1 -1
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
- package/libs/feature/record/src/lib/feature-record.module.d.ts.map +1 -1
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.actions.d.ts +40 -6
- package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.effects.d.ts +24 -4
- package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts +14 -4
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +8 -5
- package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +12 -9
- package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
- package/libs/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 +22 -0
- package/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.d.ts.map +1 -0
- package/libs/ui/inputs/src/index.d.ts +15 -14
- package/libs/ui/inputs/src/index.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/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/gn4/gn4.field.mapper.ts +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 +34 -7
- package/src/libs/common/domain/src/lib/model/record/index.ts +1 -0
- package/src/libs/common/domain/src/lib/model/record/user-feedbacks.model.ts +15 -0
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +3 -0
- package/src/libs/common/fixtures/src/index.ts +8 -6
- package/src/libs/common/fixtures/src/lib/link.fixtures.ts +8 -0
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +3 -3
- package/src/libs/common/fixtures/src/lib/user-feedbacks.fixtures.ts +83 -0
- package/src/libs/feature/dataviz/src/lib/service/data.service.ts +51 -1
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.css +0 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.html +8 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.ts +64 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.css +0 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.html +4 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.ts +15 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.css +0 -5
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.html +1 -1
- 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 +62 -33
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +40 -4
- package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +2 -21
- 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 +1 -0
- package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +26 -8
- package/src/libs/feature/record/src/lib/feature-record.module.ts +5 -2
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +2 -1
- package/src/libs/feature/record/src/lib/state/mdview.actions.ts +51 -6
- package/src/libs/feature/record/src/lib/state/mdview.effects.ts +82 -7
- package/src/libs/feature/record/src/lib/state/mdview.facade.ts +48 -8
- package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +81 -24
- package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +40 -10
- package/src/libs/feature/router/src/lib/default/state/router.effects.ts +2 -2
- package/src/libs/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 +63 -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/form-field-wrapper/form-field-wrapper.component.css +0 -5
- package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.html +1 -1
- 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/tailwind.base.css +7 -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';
|
|
@@ -42,30 +42,33 @@ import TileLayer from 'ol/layer/Tile';
|
|
|
42
42
|
import XYZ from 'ol/source/XYZ';
|
|
43
43
|
import { bbox } from 'ol/loadingstrategy';
|
|
44
44
|
import WMTS from 'ol/source/WMTS';
|
|
45
|
-
import
|
|
45
|
+
import OGCVectorTile from 'ol/source/OGCVectorTile.js';
|
|
46
|
+
import { MVT, WFS, GeoJSON as GeoJSON$1 } from 'ol/format';
|
|
47
|
+
import VectorTileLayer from 'ol/layer/VectorTile';
|
|
48
|
+
import OGCMapTile from 'ol/source/OGCMapTile.js';
|
|
49
|
+
import * as i2$4 from '@angular/material/tabs';
|
|
46
50
|
import { MatTabsModule } from '@angular/material/tabs';
|
|
47
|
-
import * as i1$4 from '@angular/cdk/overlay';
|
|
48
|
-
import { CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';
|
|
49
51
|
import * as i2$1 from '@angular/forms';
|
|
50
52
|
import { UntypedFormControl, FormsModule, ReactiveFormsModule, FormControl } from '@angular/forms';
|
|
51
|
-
import * as i5 from 'ngx-chips';
|
|
52
|
-
import { TagInputModule } from 'ngx-chips';
|
|
53
53
|
import * as i4 from '@angular/material/autocomplete';
|
|
54
54
|
import { MatAutocompleteTrigger, MatAutocomplete, MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
55
|
-
import * as i5
|
|
55
|
+
import * as i5 from '@angular/material/core';
|
|
56
56
|
import { MatNativeDateModule, MAT_DATE_LOCALE, DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
|
|
57
|
+
import * as i1$4 from '@angular/material/checkbox';
|
|
58
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
59
|
+
import * as i5$1 from 'ngx-chips';
|
|
60
|
+
import { TagInputModule } from 'ngx-chips';
|
|
61
|
+
import * as i2$2 from '@angular/material/tooltip';
|
|
62
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
63
|
+
import * as i2$3 from '@angular/material/datepicker';
|
|
64
|
+
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
57
65
|
import * as i3 from 'ngx-dropzone';
|
|
58
66
|
import { NgxDropzoneModule } from 'ngx-dropzone';
|
|
59
|
-
import * as i1$5 from '@angular/
|
|
67
|
+
import * as i1$5 from '@angular/cdk/overlay';
|
|
68
|
+
import { CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';
|
|
69
|
+
import * as i1$6 from '@angular/material/progress-spinner';
|
|
60
70
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
61
|
-
import * as i1$6 from '@angular/material/checkbox';
|
|
62
|
-
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
63
|
-
import * as i3$1 from '@angular/material/tooltip';
|
|
64
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
65
|
-
import * as i2$2 from '@angular/material/form-field';
|
|
66
71
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
67
|
-
import * as i3$2 from '@angular/material/datepicker';
|
|
68
|
-
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
69
72
|
import { MatInputModule } from '@angular/material/input';
|
|
70
73
|
import * as i1$7 from '@angular/router';
|
|
71
74
|
import { RouterModule, RouterLink, RouteReuseStrategy } from '@angular/router';
|
|
@@ -73,6 +76,8 @@ import Duration from 'duration-relativetimeformat';
|
|
|
73
76
|
import * as basicLightbox from 'basiclightbox';
|
|
74
77
|
import { marked } from 'marked';
|
|
75
78
|
import EmblaCarousel from 'embla-carousel';
|
|
79
|
+
import { formatDistance } from 'date-fns';
|
|
80
|
+
import { enUS, sk, pt as pt$1, nl as nl$1, it as it$1, es as es$1, de as de$1, fr as fr$1 } from 'date-fns/locale';
|
|
76
81
|
import * as i1$8 from '@ngrx/effects';
|
|
77
82
|
import { createEffect, ofType, EffectsModule, Actions } from '@ngrx/effects';
|
|
78
83
|
import tippy from 'tippy.js';
|
|
@@ -83,18 +88,17 @@ import { trigger, transition, animate, keyframes, style } from '@angular/animati
|
|
|
83
88
|
import { Chart, BarController, BarElement, CategoryScale, LinearScale, LineController, LineElement, PointElement, PieController, ArcElement, ScatterController, Tooltip, Colors, Legend } from 'chart.js';
|
|
84
89
|
import * as i4$1 from '@angular/cdk/scrolling';
|
|
85
90
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
86
|
-
import * as i2$
|
|
91
|
+
import * as i2$5 from '@angular/material/sort';
|
|
87
92
|
import { MatSort, MatSortModule } from '@angular/material/sort';
|
|
88
93
|
import * as i1$9 from '@angular/material/table';
|
|
89
94
|
import { MatTableModule } from '@angular/material/table';
|
|
90
|
-
import * as i3$
|
|
95
|
+
import * as i3$1 from 'ng-table-virtual-scroll';
|
|
91
96
|
import { TableVirtualScrollDataSource, TableVirtualScrollModule } from 'ng-table-virtual-scroll';
|
|
92
97
|
import * as Papa from 'papaparse';
|
|
93
98
|
import parseDate from 'date-fns/parse';
|
|
94
99
|
import parseIsoDate from 'date-fns/parseISO';
|
|
95
|
-
import { WFS, GeoJSON as GeoJSON$1 } from 'ol/format';
|
|
96
100
|
import { MomentDateAdapter, MAT_MOMENT_DATE_ADAPTER_OPTIONS } from '@angular/material-moment-adapter';
|
|
97
|
-
import * as i3$
|
|
101
|
+
import * as i3$2 from '@ngrx/router-store';
|
|
98
102
|
import { getRouterSelectors, routerReducer, StoreRouterConnectingModule, FullRouterStateSerializer } from '@ngrx/router-store';
|
|
99
103
|
import { navigation } from '@ngrx/router-store/data-persistence';
|
|
100
104
|
|
|
@@ -854,7 +858,7 @@ function getUpdateFrequencyFromCustomPeriod(isoPeriod) {
|
|
|
854
858
|
else if (days <= 7) {
|
|
855
859
|
return {
|
|
856
860
|
per: 'week',
|
|
857
|
-
updatedTimes: Math.round(7 / days),
|
|
861
|
+
updatedTimes: Math.round(7 / days - 0.0001), // this is to make sure that 'every 2 days' = '3 times per week'
|
|
858
862
|
};
|
|
859
863
|
}
|
|
860
864
|
else if (days) {
|
|
@@ -1153,7 +1157,7 @@ function getISODuration(updateFrequency) {
|
|
|
1153
1157
|
duration.hours = Math.round(24 / updateFrequency.updatedTimes);
|
|
1154
1158
|
break;
|
|
1155
1159
|
case 'week':
|
|
1156
|
-
duration.days = Math.round(7 / updateFrequency.updatedTimes);
|
|
1160
|
+
duration.days = Math.round(7 / updateFrequency.updatedTimes - 0.0001); // this is to make sure that '2 times per week' = 'every 3 days'
|
|
1157
1161
|
break;
|
|
1158
1162
|
case 'month':
|
|
1159
1163
|
if (updateFrequency.updatedTimes <= 1)
|
|
@@ -17271,6 +17275,7 @@ var next$6 = "weiter";
|
|
|
17271
17275
|
var previous$6 = "zurück";
|
|
17272
17276
|
var records$6 = "Datensätze";
|
|
17273
17277
|
var de = {
|
|
17278
|
+
"button.login": "",
|
|
17274
17279
|
"catalog.figures.datasets": "{count, plural, =0{Datensätze} one{Datensatz} other{Datensätze}}",
|
|
17275
17280
|
"catalog.figures.organisations": "{count, plural, =0{Organisationen} one{Organisation} other{Organisationen}}",
|
|
17276
17281
|
"chart.aggregation.average": "Durchschnitt",
|
|
@@ -17416,6 +17421,19 @@ var de = {
|
|
|
17416
17421
|
"downloads.format.unknown": "unbekannt",
|
|
17417
17422
|
"downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
|
|
17418
17423
|
dropFile: dropFile$6,
|
|
17424
|
+
"editor.record.form.license": "Lizenz",
|
|
17425
|
+
"editor.record.form.license.cc-by": "",
|
|
17426
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
17427
|
+
"editor.record.form.license.cc-zero": "",
|
|
17428
|
+
"editor.record.form.license.etalab": "",
|
|
17429
|
+
"editor.record.form.license.etalab-v2": "",
|
|
17430
|
+
"editor.record.form.license.odbl": "",
|
|
17431
|
+
"editor.record.form.license.odc-by": "",
|
|
17432
|
+
"editor.record.form.license.pddl": "",
|
|
17433
|
+
"editor.record.form.license.unknown": "Unbekannt oder nicht vorhanden",
|
|
17434
|
+
"editor.record.form.resourceUpdated": "",
|
|
17435
|
+
"editor.record.form.updateFrequency": "",
|
|
17436
|
+
"editor.record.form.updateFrequency.planned": "",
|
|
17419
17437
|
"editor.record.loadError.body": "",
|
|
17420
17438
|
"editor.record.loadError.closeMessage": "",
|
|
17421
17439
|
"editor.record.loadError.title": "",
|
|
@@ -17486,6 +17504,7 @@ var de = {
|
|
|
17486
17504
|
"multiselect.filter.placeholder": "Suche",
|
|
17487
17505
|
"nav.back": "Zurück",
|
|
17488
17506
|
next: next$6,
|
|
17507
|
+
"ogc.unreachable.unknown": "Der Dienst konnte nicht erreicht werden",
|
|
17489
17508
|
"organisation.filter.placeholder": "Ergebnisse filtern",
|
|
17490
17509
|
"organisation.sort.sortBy": "Sortieren nach:",
|
|
17491
17510
|
"organisations.hits.found": "{hits, plural, =0{Keine Organisation gefunden} other{{hits} von {total} Organisationen angezeigt}}",
|
|
@@ -17564,6 +17583,14 @@ var de = {
|
|
|
17564
17583
|
"record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
|
|
17565
17584
|
"record.metadata.updatedOn": "Letzte Aktualisierung der Dateninformationen",
|
|
17566
17585
|
"record.metadata.usage": "Nutzung und Einschränkungen",
|
|
17586
|
+
"record.metadata.userFeedbacks": "",
|
|
17587
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
17588
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
17589
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
17590
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
17591
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
17592
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
17593
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
17567
17594
|
"record.more.details": "Weitere Details",
|
|
17568
17595
|
"record.tab.chart": "Diagramm",
|
|
17569
17596
|
"record.tab.data": "Tabelle",
|
|
@@ -17641,6 +17668,7 @@ var next$5 = "next";
|
|
|
17641
17668
|
var previous$5 = "previous";
|
|
17642
17669
|
var records$5 = "records";
|
|
17643
17670
|
var en = {
|
|
17671
|
+
"button.login": "Log in",
|
|
17644
17672
|
"catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
|
|
17645
17673
|
"catalog.figures.organisations": "{count, plural, =0{organisations} one{organisation} other{organisations}}",
|
|
17646
17674
|
"chart.aggregation.average": "average",
|
|
@@ -17786,6 +17814,19 @@ var en = {
|
|
|
17786
17814
|
"downloads.format.unknown": "unknown",
|
|
17787
17815
|
"downloads.wfs.featuretype.not.found": "The layer was not found",
|
|
17788
17816
|
dropFile: dropFile$5,
|
|
17817
|
+
"editor.record.form.license": "License",
|
|
17818
|
+
"editor.record.form.license.cc-by": "Creative Commons CC-BY",
|
|
17819
|
+
"editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
17820
|
+
"editor.record.form.license.cc-zero": "Creative Commons CC-0",
|
|
17821
|
+
"editor.record.form.license.etalab": "Open Licence (Etalab)",
|
|
17822
|
+
"editor.record.form.license.etalab-v2": "Open Licence v2.0 (Etalab)",
|
|
17823
|
+
"editor.record.form.license.odbl": "Open Data Commons ODbL",
|
|
17824
|
+
"editor.record.form.license.odc-by": "Open Data Commons ODC-By",
|
|
17825
|
+
"editor.record.form.license.pddl": "Open Data Commons PDDL",
|
|
17826
|
+
"editor.record.form.license.unknown": "Unknown or absent",
|
|
17827
|
+
"editor.record.form.resourceUpdated": "Last update date",
|
|
17828
|
+
"editor.record.form.updateFrequency": "Update frequency",
|
|
17829
|
+
"editor.record.form.updateFrequency.planned": "The data should be updated regularly.",
|
|
17789
17830
|
"editor.record.loadError.body": "The record could not be loaded:",
|
|
17790
17831
|
"editor.record.loadError.closeMessage": "Understood",
|
|
17791
17832
|
"editor.record.loadError.title": "Error loading record",
|
|
@@ -17856,6 +17897,7 @@ var en = {
|
|
|
17856
17897
|
"multiselect.filter.placeholder": "Search",
|
|
17857
17898
|
"nav.back": "Back",
|
|
17858
17899
|
next: next$5,
|
|
17900
|
+
"ogc.unreachable.unknown": "The service could not be reached",
|
|
17859
17901
|
"organisation.filter.placeholder": "Filter results",
|
|
17860
17902
|
"organisation.sort.sortBy": "Sort by:",
|
|
17861
17903
|
"organisations.hits.found": "{hits, plural, =0{No organizations found} other{{hits} out of {total} organizations shown}}",
|
|
@@ -17934,6 +17976,14 @@ var en = {
|
|
|
17934
17976
|
"record.metadata.updateFrequency": "Data Update Frequency",
|
|
17935
17977
|
"record.metadata.updatedOn": "Last Data Information Update",
|
|
17936
17978
|
"record.metadata.usage": "License and Conditions",
|
|
17979
|
+
"record.metadata.userFeedbacks": "Questions / Answers",
|
|
17980
|
+
"record.metadata.userFeedbacks.anonymousUser": "In order to leave a comment, please log in.",
|
|
17981
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "Publish",
|
|
17982
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "Answer...",
|
|
17983
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "Write your comment here...",
|
|
17984
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Newest comments first",
|
|
17985
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Oldest comments first",
|
|
17986
|
+
"record.metadata.userFeedbacks.sortSelector.label": "Sort by ...",
|
|
17937
17987
|
"record.more.details": "Read more",
|
|
17938
17988
|
"record.tab.chart": "Chart",
|
|
17939
17989
|
"record.tab.data": "Table",
|
|
@@ -18011,6 +18061,7 @@ var next$4 = "";
|
|
|
18011
18061
|
var previous$4 = "";
|
|
18012
18062
|
var records$4 = "";
|
|
18013
18063
|
var es = {
|
|
18064
|
+
"button.login": "",
|
|
18014
18065
|
"catalog.figures.datasets": "conjuntos de datos",
|
|
18015
18066
|
"catalog.figures.organisations": "organizaciones",
|
|
18016
18067
|
"chart.aggregation.average": "promedio",
|
|
@@ -18156,6 +18207,19 @@ var es = {
|
|
|
18156
18207
|
"downloads.format.unknown": "",
|
|
18157
18208
|
"downloads.wfs.featuretype.not.found": "",
|
|
18158
18209
|
dropFile: dropFile$4,
|
|
18210
|
+
"editor.record.form.license": "",
|
|
18211
|
+
"editor.record.form.license.cc-by": "",
|
|
18212
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
18213
|
+
"editor.record.form.license.cc-zero": "",
|
|
18214
|
+
"editor.record.form.license.etalab": "",
|
|
18215
|
+
"editor.record.form.license.etalab-v2": "",
|
|
18216
|
+
"editor.record.form.license.odbl": "",
|
|
18217
|
+
"editor.record.form.license.odc-by": "",
|
|
18218
|
+
"editor.record.form.license.pddl": "",
|
|
18219
|
+
"editor.record.form.license.unknown": "",
|
|
18220
|
+
"editor.record.form.resourceUpdated": "",
|
|
18221
|
+
"editor.record.form.updateFrequency": "",
|
|
18222
|
+
"editor.record.form.updateFrequency.planned": "",
|
|
18159
18223
|
"editor.record.loadError.body": "",
|
|
18160
18224
|
"editor.record.loadError.closeMessage": "",
|
|
18161
18225
|
"editor.record.loadError.title": "",
|
|
@@ -18226,6 +18290,7 @@ var es = {
|
|
|
18226
18290
|
"multiselect.filter.placeholder": "",
|
|
18227
18291
|
"nav.back": "",
|
|
18228
18292
|
next: next$4,
|
|
18293
|
+
"ogc.unreachable.unknown": "",
|
|
18229
18294
|
"organisation.filter.placeholder": "",
|
|
18230
18295
|
"organisation.sort.sortBy": "",
|
|
18231
18296
|
"organisations.hits.found": "",
|
|
@@ -18304,6 +18369,14 @@ var es = {
|
|
|
18304
18369
|
"record.metadata.updateFrequency": "",
|
|
18305
18370
|
"record.metadata.updatedOn": "",
|
|
18306
18371
|
"record.metadata.usage": "",
|
|
18372
|
+
"record.metadata.userFeedbacks": "",
|
|
18373
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
18374
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
18375
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
18376
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
18377
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
18378
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
18379
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
18307
18380
|
"record.more.details": "",
|
|
18308
18381
|
"record.tab.chart": "",
|
|
18309
18382
|
"record.tab.data": "",
|
|
@@ -18381,6 +18454,7 @@ var next$3 = "suivant";
|
|
|
18381
18454
|
var previous$3 = "précédent";
|
|
18382
18455
|
var records$3 = "enregistrements";
|
|
18383
18456
|
var fr = {
|
|
18457
|
+
"button.login": "Se connecter",
|
|
18384
18458
|
"catalog.figures.datasets": "{count, plural, =0{données} one{donnée} other{données}}",
|
|
18385
18459
|
"catalog.figures.organisations": "{count, plural, =0{organisations} one{organisation} other{organisations}}",
|
|
18386
18460
|
"chart.aggregation.average": "moyenne",
|
|
@@ -18526,6 +18600,19 @@ var fr = {
|
|
|
18526
18600
|
"downloads.format.unknown": "inconnu",
|
|
18527
18601
|
"downloads.wfs.featuretype.not.found": "La couche n'a pas été retrouvée",
|
|
18528
18602
|
dropFile: dropFile$3,
|
|
18603
|
+
"editor.record.form.license": "Licence",
|
|
18604
|
+
"editor.record.form.license.cc-by": "",
|
|
18605
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
18606
|
+
"editor.record.form.license.cc-zero": "",
|
|
18607
|
+
"editor.record.form.license.etalab": "Licence Ouverte (Etalab)",
|
|
18608
|
+
"editor.record.form.license.etalab-v2": "Licence Ouverte v2.0 (Etalab)",
|
|
18609
|
+
"editor.record.form.license.odbl": "",
|
|
18610
|
+
"editor.record.form.license.odc-by": "",
|
|
18611
|
+
"editor.record.form.license.pddl": "",
|
|
18612
|
+
"editor.record.form.license.unknown": "Non-reconnue ou absente",
|
|
18613
|
+
"editor.record.form.resourceUpdated": "Date de dernière révision",
|
|
18614
|
+
"editor.record.form.updateFrequency": "Fréquence de mise à jour",
|
|
18615
|
+
"editor.record.form.updateFrequency.planned": "Ces données doivent être mise à jour régulièrement.",
|
|
18529
18616
|
"editor.record.loadError.body": "",
|
|
18530
18617
|
"editor.record.loadError.closeMessage": "",
|
|
18531
18618
|
"editor.record.loadError.title": "",
|
|
@@ -18596,6 +18683,7 @@ var fr = {
|
|
|
18596
18683
|
"multiselect.filter.placeholder": "Rechercher",
|
|
18597
18684
|
"nav.back": "Retour",
|
|
18598
18685
|
next: next$3,
|
|
18686
|
+
"ogc.unreachable.unknown": "Le service n'est pas accessible",
|
|
18599
18687
|
"organisation.filter.placeholder": "Filtrer les résultats",
|
|
18600
18688
|
"organisation.sort.sortBy": "Trier par :",
|
|
18601
18689
|
"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 +18762,14 @@ var fr = {
|
|
|
18674
18762
|
"record.metadata.updateFrequency": "Fréquence de mise à jour des données",
|
|
18675
18763
|
"record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
|
|
18676
18764
|
"record.metadata.usage": "Licences et conditions d'utilisation",
|
|
18765
|
+
"record.metadata.userFeedbacks": "Questions / Réponses",
|
|
18766
|
+
"record.metadata.userFeedbacks.anonymousUser": "Pour rédiger un commentaire, veuillez vous identifier.",
|
|
18767
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "Publier",
|
|
18768
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "Répondre...",
|
|
18769
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "Rédiger votre commentaire ici...",
|
|
18770
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Les plus récents en premier",
|
|
18771
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Les plus anciens en premier",
|
|
18772
|
+
"record.metadata.userFeedbacks.sortSelector.label": "Trier par ...",
|
|
18677
18773
|
"record.more.details": "Détails",
|
|
18678
18774
|
"record.tab.chart": "Graphique",
|
|
18679
18775
|
"record.tab.data": "Tableau",
|
|
@@ -18751,6 +18847,7 @@ var next$2 = "successivo";
|
|
|
18751
18847
|
var previous$2 = "precedente";
|
|
18752
18848
|
var records$2 = "record";
|
|
18753
18849
|
var it = {
|
|
18850
|
+
"button.login": "",
|
|
18754
18851
|
"catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
|
|
18755
18852
|
"catalog.figures.organisations": "{count, plural, =0{organizzazioni} one{organizzazione} other{organizzazioni}}",
|
|
18756
18853
|
"chart.aggregation.average": "media",
|
|
@@ -18896,6 +18993,19 @@ var it = {
|
|
|
18896
18993
|
"downloads.format.unknown": "sconosciuto",
|
|
18897
18994
|
"downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
|
|
18898
18995
|
dropFile: dropFile$2,
|
|
18996
|
+
"editor.record.form.license": "Licenza",
|
|
18997
|
+
"editor.record.form.license.cc-by": "",
|
|
18998
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
18999
|
+
"editor.record.form.license.cc-zero": "",
|
|
19000
|
+
"editor.record.form.license.etalab": "Licenza aperta (Etalab)",
|
|
19001
|
+
"editor.record.form.license.etalab-v2": "Licenza aperta v2.0 (Etalab)",
|
|
19002
|
+
"editor.record.form.license.odbl": "",
|
|
19003
|
+
"editor.record.form.license.odc-by": "",
|
|
19004
|
+
"editor.record.form.license.pddl": "",
|
|
19005
|
+
"editor.record.form.license.unknown": "Non riconosciuta o assente",
|
|
19006
|
+
"editor.record.form.resourceUpdated": "",
|
|
19007
|
+
"editor.record.form.updateFrequency": "",
|
|
19008
|
+
"editor.record.form.updateFrequency.planned": "",
|
|
18899
19009
|
"editor.record.loadError.body": "",
|
|
18900
19010
|
"editor.record.loadError.closeMessage": "",
|
|
18901
19011
|
"editor.record.loadError.title": "",
|
|
@@ -18966,6 +19076,7 @@ var it = {
|
|
|
18966
19076
|
"multiselect.filter.placeholder": "Cerca",
|
|
18967
19077
|
"nav.back": "Indietro",
|
|
18968
19078
|
next: next$2,
|
|
19079
|
+
"ogc.unreachable.unknown": "Il servizio non è accessibile",
|
|
18969
19080
|
"organisation.filter.placeholder": "Filtra i risultati",
|
|
18970
19081
|
"organisation.sort.sortBy": "Ordina per:",
|
|
18971
19082
|
"organisations.hits.found": "{hits, plural, =0{Nessuna organizzazione trovata} one{1 organizzazione su {total} visualizzata} other{{hits} organizzazioni su {total} visualizzate}}",
|
|
@@ -19044,6 +19155,14 @@ var it = {
|
|
|
19044
19155
|
"record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
|
|
19045
19156
|
"record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
|
|
19046
19157
|
"record.metadata.usage": "Licenze e limiti di utilizzo",
|
|
19158
|
+
"record.metadata.userFeedbacks": "",
|
|
19159
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
19160
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
19161
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
19162
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
19163
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
19164
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
19165
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
19047
19166
|
"record.more.details": "Dettagli",
|
|
19048
19167
|
"record.tab.chart": "Grafico",
|
|
19049
19168
|
"record.tab.data": "Tabella",
|
|
@@ -19121,6 +19240,7 @@ var next$1 = "";
|
|
|
19121
19240
|
var previous$1 = "";
|
|
19122
19241
|
var records$1 = "";
|
|
19123
19242
|
var nl = {
|
|
19243
|
+
"button.login": "",
|
|
19124
19244
|
"catalog.figures.datasets": "datasets",
|
|
19125
19245
|
"catalog.figures.organisations": "organisaties",
|
|
19126
19246
|
"chart.aggregation.average": "gemiddelde",
|
|
@@ -19266,6 +19386,19 @@ var nl = {
|
|
|
19266
19386
|
"downloads.format.unknown": "",
|
|
19267
19387
|
"downloads.wfs.featuretype.not.found": "",
|
|
19268
19388
|
dropFile: dropFile$1,
|
|
19389
|
+
"editor.record.form.license": "",
|
|
19390
|
+
"editor.record.form.license.cc-by": "",
|
|
19391
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
19392
|
+
"editor.record.form.license.cc-zero": "",
|
|
19393
|
+
"editor.record.form.license.etalab": "",
|
|
19394
|
+
"editor.record.form.license.etalab-v2": "",
|
|
19395
|
+
"editor.record.form.license.odbl": "",
|
|
19396
|
+
"editor.record.form.license.odc-by": "",
|
|
19397
|
+
"editor.record.form.license.pddl": "",
|
|
19398
|
+
"editor.record.form.license.unknown": "",
|
|
19399
|
+
"editor.record.form.resourceUpdated": "",
|
|
19400
|
+
"editor.record.form.updateFrequency": "",
|
|
19401
|
+
"editor.record.form.updateFrequency.planned": "",
|
|
19269
19402
|
"editor.record.loadError.body": "",
|
|
19270
19403
|
"editor.record.loadError.closeMessage": "",
|
|
19271
19404
|
"editor.record.loadError.title": "",
|
|
@@ -19336,6 +19469,7 @@ var nl = {
|
|
|
19336
19469
|
"multiselect.filter.placeholder": "",
|
|
19337
19470
|
"nav.back": "",
|
|
19338
19471
|
next: next$1,
|
|
19472
|
+
"ogc.unreachable.unknown": "",
|
|
19339
19473
|
"organisation.filter.placeholder": "",
|
|
19340
19474
|
"organisation.sort.sortBy": "",
|
|
19341
19475
|
"organisations.hits.found": "",
|
|
@@ -19414,6 +19548,14 @@ var nl = {
|
|
|
19414
19548
|
"record.metadata.updateFrequency": "",
|
|
19415
19549
|
"record.metadata.updatedOn": "",
|
|
19416
19550
|
"record.metadata.usage": "",
|
|
19551
|
+
"record.metadata.userFeedbacks": "",
|
|
19552
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
19553
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
19554
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
19555
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
19556
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
19557
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
19558
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
19417
19559
|
"record.more.details": "",
|
|
19418
19560
|
"record.tab.chart": "",
|
|
19419
19561
|
"record.tab.data": "",
|
|
@@ -19491,6 +19633,7 @@ var next = "";
|
|
|
19491
19633
|
var previous = "";
|
|
19492
19634
|
var records = "";
|
|
19493
19635
|
var pt = {
|
|
19636
|
+
"button.login": "",
|
|
19494
19637
|
"catalog.figures.datasets": "conjuntos de dados",
|
|
19495
19638
|
"catalog.figures.organisations": "organizações",
|
|
19496
19639
|
"chart.aggregation.average": "média",
|
|
@@ -19636,6 +19779,19 @@ var pt = {
|
|
|
19636
19779
|
"downloads.format.unknown": "",
|
|
19637
19780
|
"downloads.wfs.featuretype.not.found": "",
|
|
19638
19781
|
dropFile: dropFile,
|
|
19782
|
+
"editor.record.form.license": "",
|
|
19783
|
+
"editor.record.form.license.cc-by": "",
|
|
19784
|
+
"editor.record.form.license.cc-by-sa": "",
|
|
19785
|
+
"editor.record.form.license.cc-zero": "",
|
|
19786
|
+
"editor.record.form.license.etalab": "",
|
|
19787
|
+
"editor.record.form.license.etalab-v2": "",
|
|
19788
|
+
"editor.record.form.license.odbl": "",
|
|
19789
|
+
"editor.record.form.license.odc-by": "",
|
|
19790
|
+
"editor.record.form.license.pddl": "",
|
|
19791
|
+
"editor.record.form.license.unknown": "",
|
|
19792
|
+
"editor.record.form.resourceUpdated": "",
|
|
19793
|
+
"editor.record.form.updateFrequency": "",
|
|
19794
|
+
"editor.record.form.updateFrequency.planned": "",
|
|
19639
19795
|
"editor.record.loadError.body": "",
|
|
19640
19796
|
"editor.record.loadError.closeMessage": "",
|
|
19641
19797
|
"editor.record.loadError.title": "",
|
|
@@ -19706,6 +19862,7 @@ var pt = {
|
|
|
19706
19862
|
"multiselect.filter.placeholder": "",
|
|
19707
19863
|
"nav.back": "",
|
|
19708
19864
|
next: next,
|
|
19865
|
+
"ogc.unreachable.unknown": "",
|
|
19709
19866
|
"organisation.filter.placeholder": "",
|
|
19710
19867
|
"organisation.sort.sortBy": "",
|
|
19711
19868
|
"organisations.hits.found": "",
|
|
@@ -19784,6 +19941,14 @@ var pt = {
|
|
|
19784
19941
|
"record.metadata.updateFrequency": "",
|
|
19785
19942
|
"record.metadata.updatedOn": "",
|
|
19786
19943
|
"record.metadata.usage": "",
|
|
19944
|
+
"record.metadata.userFeedbacks": "",
|
|
19945
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
19946
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
19947
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
19948
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
19949
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
19950
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
19951
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
19787
19952
|
"record.more.details": "",
|
|
19788
19953
|
"record.tab.chart": "",
|
|
19789
19954
|
"record.tab.data": "",
|
|
@@ -19937,11 +20102,11 @@ class Gn4FieldMapper {
|
|
|
19937
20102
|
}),
|
|
19938
20103
|
creationDateForResource: (output, source) => ({
|
|
19939
20104
|
...output,
|
|
19940
|
-
|
|
20105
|
+
resourceCreated: toDate(getFirstValue(selectField(source, 'creationDateForResource'))),
|
|
19941
20106
|
}),
|
|
19942
20107
|
revisionDateForResource: (output, source) => ({
|
|
19943
20108
|
...output,
|
|
19944
|
-
|
|
20109
|
+
resourceUpdated: toDate(getFirstValue(selectField(source, 'revisionDateForResource'))),
|
|
19945
20110
|
}),
|
|
19946
20111
|
createDate: (output, source) => ({
|
|
19947
20112
|
...output,
|
|
@@ -21166,6 +21331,16 @@ class GravatarService {
|
|
|
21166
21331
|
getProfileIcon(hash) {
|
|
21167
21332
|
return this.identicon$.pipe(map$1((identicon) => identicon || this.GRAVATAR_IDENTICON), map$1((identicon) => `${this.GRAVATAR_URL}${hash}?d=${identicon}`));
|
|
21168
21333
|
}
|
|
21334
|
+
async getProfileIconUrl(userId) {
|
|
21335
|
+
let iconUrl = '';
|
|
21336
|
+
try {
|
|
21337
|
+
iconUrl = await firstValueFrom(this.getProfileIcon(userId));
|
|
21338
|
+
}
|
|
21339
|
+
catch (error) {
|
|
21340
|
+
return '';
|
|
21341
|
+
}
|
|
21342
|
+
return iconUrl;
|
|
21343
|
+
}
|
|
21169
21344
|
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
21345
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GravatarService, providedIn: 'root' }); }
|
|
21171
21346
|
}
|
|
@@ -21317,6 +21492,39 @@ class Gn4PlatformMapper {
|
|
|
21317
21492
|
};
|
|
21318
21493
|
});
|
|
21319
21494
|
}
|
|
21495
|
+
userFeedbacksFromApi(userFeedback) {
|
|
21496
|
+
return {
|
|
21497
|
+
uuid: userFeedback.uuid,
|
|
21498
|
+
metadataUUID: userFeedback.metadataUUID,
|
|
21499
|
+
comment: userFeedback.comment,
|
|
21500
|
+
authorUserId: userFeedback.authorUserId.toString(),
|
|
21501
|
+
authorName: userFeedback.authorName,
|
|
21502
|
+
authorEmail: userFeedback.authorEmail,
|
|
21503
|
+
published: userFeedback.published,
|
|
21504
|
+
parentUuid: userFeedback.parentUuid ?? undefined,
|
|
21505
|
+
date: new Date(userFeedback.date),
|
|
21506
|
+
};
|
|
21507
|
+
}
|
|
21508
|
+
userFeedbacksToApi(userFeedback) {
|
|
21509
|
+
return {
|
|
21510
|
+
uuid: userFeedback.uuid,
|
|
21511
|
+
metadataUUID: userFeedback.metadataUUID,
|
|
21512
|
+
comment: userFeedback.comment,
|
|
21513
|
+
authorUserId: Number.parseInt(userFeedback.authorUserId),
|
|
21514
|
+
authorName: userFeedback.authorName,
|
|
21515
|
+
authorEmail: userFeedback.authorEmail,
|
|
21516
|
+
published: userFeedback.published,
|
|
21517
|
+
parentUuid: userFeedback.parentUuid,
|
|
21518
|
+
date: userFeedback.date.getTime().toString(),
|
|
21519
|
+
};
|
|
21520
|
+
}
|
|
21521
|
+
async createUserFeedbackViewModel(baseUserFeedback) {
|
|
21522
|
+
const userAvatarUrl = await this.avatarService.getProfileIconUrl(baseUserFeedback.authorUserId?.toString());
|
|
21523
|
+
return {
|
|
21524
|
+
...baseUserFeedback,
|
|
21525
|
+
avatarUrl: userAvatarUrl,
|
|
21526
|
+
};
|
|
21527
|
+
}
|
|
21320
21528
|
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
21529
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformMapper }); }
|
|
21322
21530
|
}
|
|
@@ -21326,7 +21534,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21326
21534
|
|
|
21327
21535
|
const minApiVersion = '4.2.2';
|
|
21328
21536
|
class Gn4PlatformService {
|
|
21329
|
-
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService) {
|
|
21537
|
+
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService, userfeedbackApiService) {
|
|
21330
21538
|
this.siteApiService = siteApiService;
|
|
21331
21539
|
this.meApi = meApi;
|
|
21332
21540
|
this.usersApi = usersApi;
|
|
@@ -21334,6 +21542,7 @@ class Gn4PlatformService {
|
|
|
21334
21542
|
this.toolsApiService = toolsApiService;
|
|
21335
21543
|
this.registriesApiService = registriesApiService;
|
|
21336
21544
|
this.langService = langService;
|
|
21545
|
+
this.userfeedbackApiService = userfeedbackApiService;
|
|
21337
21546
|
this.type = 'GeoNetwork';
|
|
21338
21547
|
this.keyTranslations$ = this.toolsApiService
|
|
21339
21548
|
.getTranslationsPackage1('gnui')
|
|
@@ -21353,7 +21562,7 @@ class Gn4PlatformService {
|
|
|
21353
21562
|
*/
|
|
21354
21563
|
this.thesauri = {};
|
|
21355
21564
|
this.me$ = this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
21356
|
-
this.
|
|
21565
|
+
this.isUserAnonymous$ = this.me$.pipe(map$1((user) => !user || !('id' in user)));
|
|
21357
21566
|
this.users$ = this.usersApi.getUsers().pipe(map$1((users) => users.map((user) => this.mapper.userFromApi(user))), shareReplay());
|
|
21358
21567
|
}
|
|
21359
21568
|
getType() {
|
|
@@ -21366,7 +21575,7 @@ class Gn4PlatformService {
|
|
|
21366
21575
|
return this.me$;
|
|
21367
21576
|
}
|
|
21368
21577
|
isAnonymous() {
|
|
21369
|
-
return this.
|
|
21578
|
+
return this.isUserAnonymous$;
|
|
21370
21579
|
}
|
|
21371
21580
|
getOrganizations() {
|
|
21372
21581
|
return undefined;
|
|
@@ -21402,12 +21611,23 @@ class Gn4PlatformService {
|
|
|
21402
21611
|
.pipe(map$1((thesaurus) => this.mapper.thesaurusFromApi(thesaurus, this.langService.iso3)), shareReplay(1));
|
|
21403
21612
|
return this.thesauri[uri];
|
|
21404
21613
|
}
|
|
21405
|
-
|
|
21614
|
+
getUserFeedbacks(uuid) {
|
|
21615
|
+
return this.userfeedbackApiService
|
|
21616
|
+
.getUserComments(uuid)
|
|
21617
|
+
.pipe(map$1((userFeedbacks) => userFeedbacks.map(this.mapper.userFeedbacksFromApi)));
|
|
21618
|
+
}
|
|
21619
|
+
postUserFeedbacks(userFeedback) {
|
|
21620
|
+
const mappedUserFeedBack = this.mapper.userFeedbacksToApi(userFeedback);
|
|
21621
|
+
return this.userfeedbackApiService
|
|
21622
|
+
.newUserFeedback(mappedUserFeedBack)
|
|
21623
|
+
.pipe(map$1(() => undefined));
|
|
21624
|
+
}
|
|
21625
|
+
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
21626
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService }); }
|
|
21407
21627
|
}
|
|
21408
21628
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, decorators: [{
|
|
21409
21629
|
type: Injectable
|
|
21410
|
-
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }, { type: LangService }]; } });
|
|
21630
|
+
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }, { type: LangService }, { type: UserfeedbackApiService }]; } });
|
|
21411
21631
|
|
|
21412
21632
|
function provideGn4() {
|
|
21413
21633
|
return [
|
|
@@ -22134,6 +22354,27 @@ const FORMATS = {
|
|
|
22134
22354
|
color: '#de630b',
|
|
22135
22355
|
mimeTypes: ['application/x-dxf', 'image/x-dxf'],
|
|
22136
22356
|
},
|
|
22357
|
+
html: {
|
|
22358
|
+
extensions: ['html', 'htm'],
|
|
22359
|
+
priority: 12,
|
|
22360
|
+
color: '#f2bb3a',
|
|
22361
|
+
mimeTypes: ['text/html'],
|
|
22362
|
+
},
|
|
22363
|
+
fgb: {
|
|
22364
|
+
extensions: ['fgb', 'flatgeobuf'],
|
|
22365
|
+
priority: 13,
|
|
22366
|
+
color: '#f2bb3a',
|
|
22367
|
+
mimeTypes: ['application/flatgeobuf'],
|
|
22368
|
+
},
|
|
22369
|
+
jsonfg: {
|
|
22370
|
+
extensions: ['jsonfg', 'jsonfgc'],
|
|
22371
|
+
priority: 14,
|
|
22372
|
+
color: '#f2bb3a',
|
|
22373
|
+
mimeTypes: [
|
|
22374
|
+
'application/vnd.ogc.fg+json',
|
|
22375
|
+
'application/vnd.ogc.fg+json;compatibility=geojson',
|
|
22376
|
+
],
|
|
22377
|
+
},
|
|
22137
22378
|
};
|
|
22138
22379
|
function getFormatPriority(linkFormat) {
|
|
22139
22380
|
for (const format in FORMATS) {
|
|
@@ -22265,7 +22506,7 @@ class LinkClassifierService {
|
|
|
22265
22506
|
case 'wmts':
|
|
22266
22507
|
return [LinkUsage.API, LinkUsage.MAP_API];
|
|
22267
22508
|
case 'ogcFeatures':
|
|
22268
|
-
return [LinkUsage.API];
|
|
22509
|
+
return [LinkUsage.API, LinkUsage.DOWNLOAD, LinkUsage.GEODATA];
|
|
22269
22510
|
default:
|
|
22270
22511
|
return [LinkUsage.UNKNOWN];
|
|
22271
22512
|
}
|
|
@@ -23566,13 +23807,30 @@ class MapContextService {
|
|
|
23566
23807
|
const style = this.styleService.styles.default;
|
|
23567
23808
|
switch (type) {
|
|
23568
23809
|
case MapContextLayerTypeEnum.OGCAPI:
|
|
23569
|
-
|
|
23570
|
-
|
|
23571
|
-
|
|
23572
|
-
|
|
23573
|
-
|
|
23574
|
-
|
|
23575
|
-
|
|
23810
|
+
if (layerModel.layerType === 'vectorTiles') {
|
|
23811
|
+
return new VectorTileLayer({
|
|
23812
|
+
source: new OGCVectorTile({
|
|
23813
|
+
url: layerModel.url,
|
|
23814
|
+
format: new MVT(),
|
|
23815
|
+
}),
|
|
23816
|
+
});
|
|
23817
|
+
}
|
|
23818
|
+
else if (layerModel.layerType === 'mapTiles') {
|
|
23819
|
+
return new TileLayer({
|
|
23820
|
+
source: new OGCMapTile({
|
|
23821
|
+
url: layerModel.url,
|
|
23822
|
+
}),
|
|
23823
|
+
});
|
|
23824
|
+
}
|
|
23825
|
+
else {
|
|
23826
|
+
return new VectorLayer({
|
|
23827
|
+
source: new VectorSource({
|
|
23828
|
+
format: new GeoJSON(),
|
|
23829
|
+
url: layerModel.url,
|
|
23830
|
+
}),
|
|
23831
|
+
style,
|
|
23832
|
+
});
|
|
23833
|
+
}
|
|
23576
23834
|
case MapContextLayerTypeEnum.XYZ:
|
|
23577
23835
|
return new TileLayer({
|
|
23578
23836
|
source: new XYZ({
|
|
@@ -23811,6 +24069,173 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23811
24069
|
type: Input
|
|
23812
24070
|
}] } });
|
|
23813
24071
|
|
|
24072
|
+
class PopupAlertComponent {
|
|
24073
|
+
constructor(changeDetector) {
|
|
24074
|
+
this.changeDetector = changeDetector;
|
|
24075
|
+
this.type = 'info';
|
|
24076
|
+
this.position = 'top';
|
|
24077
|
+
this.expanded = false;
|
|
24078
|
+
this.timeout = null;
|
|
24079
|
+
}
|
|
24080
|
+
get showDuration() {
|
|
24081
|
+
const chars = this.content.nativeElement.innerHTML.length;
|
|
24082
|
+
return Math.max(3000, chars * 20);
|
|
24083
|
+
}
|
|
24084
|
+
ngOnInit() {
|
|
24085
|
+
this.expandAndClose();
|
|
24086
|
+
}
|
|
24087
|
+
expand() {
|
|
24088
|
+
this.expanded = true;
|
|
24089
|
+
this.changeDetector.detectChanges();
|
|
24090
|
+
clearTimeout(this.timeout);
|
|
24091
|
+
}
|
|
24092
|
+
expandAndClose() {
|
|
24093
|
+
this.expanded = true;
|
|
24094
|
+
this.changeDetector.detectChanges();
|
|
24095
|
+
clearTimeout(this.timeout);
|
|
24096
|
+
this.timeout = setTimeout(() => {
|
|
24097
|
+
this.expanded = false;
|
|
24098
|
+
this.changeDetector.detectChanges();
|
|
24099
|
+
}, this.showDuration);
|
|
24100
|
+
}
|
|
24101
|
+
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 }); }
|
|
24102
|
+
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 }); }
|
|
24103
|
+
}
|
|
24104
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PopupAlertComponent, decorators: [{
|
|
24105
|
+
type: Component,
|
|
24106
|
+
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"] }]
|
|
24107
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { icon: [{
|
|
24108
|
+
type: Input
|
|
24109
|
+
}], type: [{
|
|
24110
|
+
type: Input
|
|
24111
|
+
}], position: [{
|
|
24112
|
+
type: Input
|
|
24113
|
+
}], content: [{
|
|
24114
|
+
type: ViewChild,
|
|
24115
|
+
args: ['content']
|
|
24116
|
+
}] } });
|
|
24117
|
+
|
|
24118
|
+
class AutocompleteComponent {
|
|
24119
|
+
constructor(cdRef) {
|
|
24120
|
+
this.cdRef = cdRef;
|
|
24121
|
+
this.clearOnSelection = false;
|
|
24122
|
+
this.autoFocus = false;
|
|
24123
|
+
this.itemSelected = new EventEmitter();
|
|
24124
|
+
this.inputSubmitted = new EventEmitter();
|
|
24125
|
+
this.inputCleared = new EventEmitter();
|
|
24126
|
+
this.control = new UntypedFormControl();
|
|
24127
|
+
this.subscription = new Subscription();
|
|
24128
|
+
this.cancelEnter = true;
|
|
24129
|
+
this.selectionSubject = new ReplaySubject(1);
|
|
24130
|
+
this.lastInputValue$ = new ReplaySubject(1);
|
|
24131
|
+
this.error = null;
|
|
24132
|
+
this.displayWithFn = (item) => item;
|
|
24133
|
+
}
|
|
24134
|
+
ngOnChanges(changes) {
|
|
24135
|
+
const { value } = changes;
|
|
24136
|
+
if (value) {
|
|
24137
|
+
const previousTextValue = this.displayWithFn(value.previousValue);
|
|
24138
|
+
const currentTextValue = this.displayWithFn(value.currentValue);
|
|
24139
|
+
if (previousTextValue !== currentTextValue) {
|
|
24140
|
+
this.updateInputValue(value.currentValue);
|
|
24141
|
+
}
|
|
24142
|
+
}
|
|
24143
|
+
}
|
|
24144
|
+
ngOnInit() {
|
|
24145
|
+
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) => {
|
|
24146
|
+
this.error = error.message;
|
|
24147
|
+
return of([]);
|
|
24148
|
+
}), finalize(() => (this.searching = false)));
|
|
24149
|
+
this.subscription = this.control.valueChanges.subscribe((any) => {
|
|
24150
|
+
if (any !== '') {
|
|
24151
|
+
this.cancelEnter = false;
|
|
24152
|
+
}
|
|
24153
|
+
});
|
|
24154
|
+
this.control.valueChanges
|
|
24155
|
+
.pipe(filter((value) => typeof value === 'string'))
|
|
24156
|
+
.subscribe(this.lastInputValue$);
|
|
24157
|
+
}
|
|
24158
|
+
ngAfterViewInit() {
|
|
24159
|
+
this.autocomplete.optionSelected.subscribe(this.selectionSubject);
|
|
24160
|
+
if (this.autoFocus) {
|
|
24161
|
+
this.inputRef.nativeElement.focus();
|
|
24162
|
+
this.cdRef.detectChanges();
|
|
24163
|
+
}
|
|
24164
|
+
}
|
|
24165
|
+
ngOnDestroy() {
|
|
24166
|
+
this.subscription.unsubscribe();
|
|
24167
|
+
}
|
|
24168
|
+
updateInputValue(value) {
|
|
24169
|
+
if (value) {
|
|
24170
|
+
this.control.setValue(value);
|
|
24171
|
+
}
|
|
24172
|
+
if (this.inputRef) {
|
|
24173
|
+
this.inputRef.nativeElement.value = value?.title || '';
|
|
24174
|
+
}
|
|
24175
|
+
}
|
|
24176
|
+
clear() {
|
|
24177
|
+
this.inputRef.nativeElement.value = '';
|
|
24178
|
+
this.inputCleared.emit();
|
|
24179
|
+
this.selectionSubject
|
|
24180
|
+
.pipe(take(1))
|
|
24181
|
+
.subscribe((selection) => selection && selection.option.deselect());
|
|
24182
|
+
this.inputRef.nativeElement.focus();
|
|
24183
|
+
this.triggerRef.closePanel();
|
|
24184
|
+
}
|
|
24185
|
+
handleEnter(any) {
|
|
24186
|
+
if (!this.cancelEnter) {
|
|
24187
|
+
this.inputSubmitted.emit(any);
|
|
24188
|
+
this.triggerRef.closePanel();
|
|
24189
|
+
}
|
|
24190
|
+
}
|
|
24191
|
+
handleClickSearch() {
|
|
24192
|
+
this.inputSubmitted.emit(this.inputRef.nativeElement.value);
|
|
24193
|
+
this.triggerRef.closePanel();
|
|
24194
|
+
}
|
|
24195
|
+
handleSelection(event) {
|
|
24196
|
+
this.cancelEnter = true;
|
|
24197
|
+
this.itemSelected.emit(event.option.value);
|
|
24198
|
+
if (this.clearOnSelection) {
|
|
24199
|
+
this.lastInputValue$.pipe(first()).subscribe((any) => {
|
|
24200
|
+
this.inputRef.nativeElement.value = any;
|
|
24201
|
+
});
|
|
24202
|
+
}
|
|
24203
|
+
}
|
|
24204
|
+
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 }); }
|
|
24205
|
+
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 }); }
|
|
24206
|
+
}
|
|
24207
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
24208
|
+
type: Component,
|
|
24209
|
+
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"] }]
|
|
24210
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { placeholder: [{
|
|
24211
|
+
type: Input
|
|
24212
|
+
}], action: [{
|
|
24213
|
+
type: Input
|
|
24214
|
+
}], value: [{
|
|
24215
|
+
type: Input
|
|
24216
|
+
}], clearOnSelection: [{
|
|
24217
|
+
type: Input
|
|
24218
|
+
}], autoFocus: [{
|
|
24219
|
+
type: Input
|
|
24220
|
+
}], itemSelected: [{
|
|
24221
|
+
type: Output
|
|
24222
|
+
}], inputSubmitted: [{
|
|
24223
|
+
type: Output
|
|
24224
|
+
}], inputCleared: [{
|
|
24225
|
+
type: Output
|
|
24226
|
+
}], triggerRef: [{
|
|
24227
|
+
type: ViewChild,
|
|
24228
|
+
args: [MatAutocompleteTrigger]
|
|
24229
|
+
}], autocomplete: [{
|
|
24230
|
+
type: ViewChild,
|
|
24231
|
+
args: [MatAutocomplete]
|
|
24232
|
+
}], inputRef: [{
|
|
24233
|
+
type: ViewChild,
|
|
24234
|
+
args: ['searchInput']
|
|
24235
|
+
}], displayWithFn: [{
|
|
24236
|
+
type: Input
|
|
24237
|
+
}] } });
|
|
24238
|
+
|
|
23814
24239
|
class ButtonComponent {
|
|
23815
24240
|
constructor() {
|
|
23816
24241
|
this.btnClass = 'gn-ui-btn-default';
|
|
@@ -23862,171 +24287,213 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23862
24287
|
type: Output
|
|
23863
24288
|
}] } });
|
|
23864
24289
|
|
|
23865
|
-
|
|
23866
|
-
class DropdownSelectorComponent {
|
|
24290
|
+
class CheckToggleComponent {
|
|
23867
24291
|
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;
|
|
24292
|
+
this.color = 'primary';
|
|
24293
|
+
this.toggled = new EventEmitter();
|
|
23911
24294
|
}
|
|
23912
|
-
|
|
23913
|
-
this.
|
|
23914
|
-
this.selected = choice.value;
|
|
23915
|
-
this.selectValue.emit(this.selected);
|
|
24295
|
+
toggle(event) {
|
|
24296
|
+
this.toggled.emit(event);
|
|
23916
24297
|
}
|
|
23917
|
-
|
|
23918
|
-
|
|
23919
|
-
|
|
23920
|
-
|
|
23921
|
-
|
|
23922
|
-
|
|
23923
|
-
|
|
23924
|
-
|
|
23925
|
-
|
|
23926
|
-
|
|
23927
|
-
|
|
23928
|
-
|
|
24298
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24299
|
+
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 }); }
|
|
24300
|
+
}
|
|
24301
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckToggleComponent, decorators: [{
|
|
24302
|
+
type: Component,
|
|
24303
|
+
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" }]
|
|
24304
|
+
}], propDecorators: { title: [{
|
|
24305
|
+
type: Input
|
|
24306
|
+
}], label: [{
|
|
24307
|
+
type: Input
|
|
24308
|
+
}], value: [{
|
|
24309
|
+
type: Input
|
|
24310
|
+
}], color: [{
|
|
24311
|
+
type: Input
|
|
24312
|
+
}], toggled: [{
|
|
24313
|
+
type: Output
|
|
24314
|
+
}] } });
|
|
24315
|
+
|
|
24316
|
+
class CheckboxComponent {
|
|
24317
|
+
constructor() {
|
|
24318
|
+
this.type = 'default';
|
|
24319
|
+
this.checked = false;
|
|
24320
|
+
this.indeterminate = false;
|
|
24321
|
+
this.changed = new EventEmitter();
|
|
23929
24322
|
}
|
|
23930
|
-
|
|
23931
|
-
this.
|
|
24323
|
+
get classList() {
|
|
24324
|
+
return `${this.type}`;
|
|
23932
24325
|
}
|
|
23933
|
-
|
|
23934
|
-
|
|
24326
|
+
handleClick(event) {
|
|
24327
|
+
event.stopPropagation();
|
|
24328
|
+
this.checked = !this.checked;
|
|
24329
|
+
this.changed.emit(this.checked);
|
|
23935
24330
|
}
|
|
23936
|
-
|
|
23937
|
-
|
|
24331
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24332
|
+
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 }); }
|
|
24333
|
+
}
|
|
24334
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, decorators: [{
|
|
24335
|
+
type: Component,
|
|
24336
|
+
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"] }]
|
|
24337
|
+
}], propDecorators: { type: [{
|
|
24338
|
+
type: Input
|
|
24339
|
+
}], checked: [{
|
|
24340
|
+
type: Input
|
|
24341
|
+
}], indeterminate: [{
|
|
24342
|
+
type: Input
|
|
24343
|
+
}], changed: [{
|
|
24344
|
+
type: Output
|
|
24345
|
+
}] } });
|
|
24346
|
+
|
|
24347
|
+
class ChipsInputComponent {
|
|
24348
|
+
onChange(event) {
|
|
24349
|
+
this.rawChange.next(event);
|
|
23938
24350
|
}
|
|
23939
|
-
|
|
23940
|
-
|
|
23941
|
-
|
|
23942
|
-
|
|
23943
|
-
|
|
23944
|
-
|
|
23945
|
-
|
|
23946
|
-
|
|
23947
|
-
|
|
23948
|
-
|
|
23949
|
-
|
|
23950
|
-
|
|
23951
|
-
|
|
24351
|
+
constructor(http, translate) {
|
|
24352
|
+
this.http = http;
|
|
24353
|
+
this.translate = translate;
|
|
24354
|
+
this.required = false;
|
|
24355
|
+
this.loadOnce = false;
|
|
24356
|
+
this.autocompleteItems = [];
|
|
24357
|
+
this.invalid = false;
|
|
24358
|
+
this.items = [];
|
|
24359
|
+
this.requestAutocompleteItems = (text) => {
|
|
24360
|
+
if (this.url) {
|
|
24361
|
+
if (this.loadOnce && this.loadedItems) {
|
|
24362
|
+
return this.loadedItems;
|
|
24363
|
+
}
|
|
24364
|
+
const url = this.url(text);
|
|
24365
|
+
const lang = LANG_2_TO_3_MAPPER[this.translate.currentLang.slice(0, 2)];
|
|
24366
|
+
return this.http
|
|
24367
|
+
.get(url.replace('${lang}', lang))
|
|
24368
|
+
.pipe(map$1((item) => item.map((i) => i.values[lang])));
|
|
23952
24369
|
}
|
|
23953
|
-
|
|
23954
|
-
this.
|
|
23955
|
-
|
|
23956
|
-
|
|
23957
|
-
|
|
23958
|
-
|
|
23959
|
-
|
|
23960
|
-
this.closeOverlay();
|
|
23961
|
-
}
|
|
24370
|
+
else {
|
|
24371
|
+
return of(this.autocompleteItems || []);
|
|
24372
|
+
}
|
|
24373
|
+
};
|
|
24374
|
+
this.rawChange = new Subject();
|
|
24375
|
+
this.itemsChange = this.rawChange.pipe(distinctUntilChanged());
|
|
24376
|
+
this.subscription = new Subscription();
|
|
23962
24377
|
}
|
|
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();
|
|
24378
|
+
ngOnInit() {
|
|
24379
|
+
if (this.loadOnce) {
|
|
24380
|
+
this.loadedItems = this.requestAutocompleteItems('*').pipe(shareReplay(1));
|
|
23977
24381
|
}
|
|
24382
|
+
this.items = this.selectedItems;
|
|
24383
|
+
this.subscription = this.rawChange
|
|
24384
|
+
.pipe(tap$1((v) => (this.invalid = v.length === 0)))
|
|
24385
|
+
.subscribe();
|
|
24386
|
+
this.rawChange.next(this.items);
|
|
23978
24387
|
}
|
|
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();
|
|
24388
|
+
ngOnDestroy() {
|
|
24389
|
+
this.subscription.unsubscribe();
|
|
23987
24390
|
}
|
|
23988
|
-
|
|
23989
|
-
|
|
24391
|
+
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 }); }
|
|
24392
|
+
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"] }] }); }
|
|
24393
|
+
}
|
|
24394
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ChipsInputComponent, decorators: [{
|
|
24395
|
+
type: Component,
|
|
24396
|
+
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"] }]
|
|
24397
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i1$1.TranslateService }]; }, propDecorators: { url: [{
|
|
24398
|
+
type: Input
|
|
24399
|
+
}], placeholder: [{
|
|
24400
|
+
type: Input
|
|
24401
|
+
}], selectedItems: [{
|
|
24402
|
+
type: Input
|
|
24403
|
+
}], required: [{
|
|
24404
|
+
type: Input
|
|
24405
|
+
}], loadOnce: [{
|
|
24406
|
+
type: Input
|
|
24407
|
+
}], autocompleteItems: [{
|
|
24408
|
+
type: Input
|
|
24409
|
+
}], itemsChange: [{
|
|
24410
|
+
type: Output
|
|
24411
|
+
}] } });
|
|
24412
|
+
|
|
24413
|
+
class CopyTextButtonComponent {
|
|
24414
|
+
constructor() {
|
|
24415
|
+
this.displayText = true;
|
|
24416
|
+
this.rows = 1;
|
|
23990
24417
|
}
|
|
23991
|
-
|
|
23992
|
-
|
|
23993
|
-
|
|
23994
|
-
this.onSelectValue(choice);
|
|
23995
|
-
}
|
|
24418
|
+
copyText(event) {
|
|
24419
|
+
navigator.clipboard.writeText(this.text);
|
|
24420
|
+
event.target.blur();
|
|
23996
24421
|
}
|
|
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:
|
|
24422
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24423
|
+
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
24424
|
}
|
|
24000
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24425
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
|
|
24001
24426
|
type: Component,
|
|
24002
|
-
args: [{ selector: 'gn-ui-
|
|
24003
|
-
}], propDecorators: {
|
|
24004
|
-
type: Input
|
|
24005
|
-
}], showTitle: [{
|
|
24427
|
+
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" }]
|
|
24428
|
+
}], propDecorators: { text: [{
|
|
24006
24429
|
type: Input
|
|
24007
|
-
}],
|
|
24430
|
+
}], tooltipText: [{
|
|
24008
24431
|
type: Input
|
|
24009
|
-
}],
|
|
24432
|
+
}], displayText: [{
|
|
24010
24433
|
type: Input
|
|
24011
|
-
}],
|
|
24434
|
+
}], rows: [{
|
|
24012
24435
|
type: Input
|
|
24013
|
-
}]
|
|
24436
|
+
}] } });
|
|
24437
|
+
|
|
24438
|
+
class DatePickerComponent {
|
|
24439
|
+
constructor() {
|
|
24440
|
+
this.dateChange = new EventEmitter();
|
|
24441
|
+
}
|
|
24442
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24443
|
+
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"] }] }); }
|
|
24444
|
+
}
|
|
24445
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DatePickerComponent, decorators: [{
|
|
24446
|
+
type: Component,
|
|
24447
|
+
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"] }]
|
|
24448
|
+
}], propDecorators: { date: [{
|
|
24014
24449
|
type: Input
|
|
24015
|
-
}],
|
|
24450
|
+
}], dateChange: [{
|
|
24451
|
+
type: Output
|
|
24452
|
+
}] } });
|
|
24453
|
+
|
|
24454
|
+
class DateRangePickerComponent {
|
|
24455
|
+
startDateSelected(event) {
|
|
24456
|
+
this.startDate = event.value;
|
|
24457
|
+
}
|
|
24458
|
+
endDateSelected(event) {
|
|
24459
|
+
this.endDate = event.value;
|
|
24460
|
+
}
|
|
24461
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24462
|
+
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"] }] }); }
|
|
24463
|
+
}
|
|
24464
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DateRangePickerComponent, decorators: [{
|
|
24465
|
+
type: Component,
|
|
24466
|
+
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"] }]
|
|
24467
|
+
}] });
|
|
24468
|
+
|
|
24469
|
+
const placeholder = 'dropFile';
|
|
24470
|
+
marker('dropFile');
|
|
24471
|
+
class DragAndDropFileInputComponent {
|
|
24472
|
+
constructor() {
|
|
24473
|
+
this.placeholder = placeholder;
|
|
24474
|
+
this.accept = '*';
|
|
24475
|
+
this.fileChange = new EventEmitter();
|
|
24476
|
+
this.selectedFile = null;
|
|
24477
|
+
}
|
|
24478
|
+
get fileName() {
|
|
24479
|
+
return this.selectedFile && this.selectedFile.name;
|
|
24480
|
+
}
|
|
24481
|
+
selectFile(event) {
|
|
24482
|
+
this.selectedFile = event.addedFiles[0];
|
|
24483
|
+
this.fileChange.emit(this.selectedFile);
|
|
24484
|
+
}
|
|
24485
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DragAndDropFileInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24486
|
+
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"] }] }); }
|
|
24487
|
+
}
|
|
24488
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DragAndDropFileInputComponent, decorators: [{
|
|
24489
|
+
type: Component,
|
|
24490
|
+
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"] }]
|
|
24491
|
+
}], propDecorators: { placeholder: [{
|
|
24016
24492
|
type: Input
|
|
24017
|
-
}],
|
|
24493
|
+
}], accept: [{
|
|
24018
24494
|
type: Input
|
|
24019
|
-
}],
|
|
24495
|
+
}], fileChange: [{
|
|
24020
24496
|
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
24497
|
}] } });
|
|
24031
24498
|
|
|
24032
24499
|
class DropdownMultiselectComponent {
|
|
@@ -24174,13 +24641,13 @@ class DropdownMultiselectComponent {
|
|
|
24174
24641
|
propagateToDocumentOnly(event);
|
|
24175
24642
|
this.setFocus();
|
|
24176
24643
|
}
|
|
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$
|
|
24644
|
+
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 }); }
|
|
24645
|
+
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
24646
|
}
|
|
24180
24647
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, decorators: [{
|
|
24181
24648
|
type: Component,
|
|
24182
24649
|
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$
|
|
24650
|
+
}], ctorParameters: function () { return [{ type: i1$5.ScrollStrategyOptions }]; }, propDecorators: { title: [{
|
|
24184
24651
|
type: Input
|
|
24185
24652
|
}], choices: [{
|
|
24186
24653
|
type: Input
|
|
@@ -24211,311 +24678,265 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24211
24678
|
args: ['checkBox', { read: ElementRef }]
|
|
24212
24679
|
}] } });
|
|
24213
24680
|
|
|
24214
|
-
|
|
24681
|
+
const DEFAULT_ROW_NUMBERS = 6;
|
|
24682
|
+
class DropdownSelectorComponent {
|
|
24215
24683
|
constructor() {
|
|
24216
|
-
this.
|
|
24217
|
-
this.
|
|
24218
|
-
this.
|
|
24219
|
-
this.
|
|
24684
|
+
this.showTitle = true;
|
|
24685
|
+
this.extraBtnClass = '';
|
|
24686
|
+
this.minWidth = '';
|
|
24687
|
+
this.selectValue = new EventEmitter();
|
|
24688
|
+
this.overlayOpen = false;
|
|
24689
|
+
this.overlayWidth = 'auto';
|
|
24690
|
+
this.overlayMaxHeight = 'none';
|
|
24691
|
+
this.overlayPositions = [
|
|
24692
|
+
{
|
|
24693
|
+
originX: 'start',
|
|
24694
|
+
originY: 'bottom',
|
|
24695
|
+
overlayX: 'start',
|
|
24696
|
+
overlayY: 'top',
|
|
24697
|
+
offsetY: 8,
|
|
24698
|
+
},
|
|
24699
|
+
{
|
|
24700
|
+
originX: 'start',
|
|
24701
|
+
originY: 'top',
|
|
24702
|
+
overlayX: 'start',
|
|
24703
|
+
overlayY: 'bottom',
|
|
24704
|
+
offsetY: -8,
|
|
24705
|
+
},
|
|
24706
|
+
];
|
|
24220
24707
|
}
|
|
24221
|
-
|
|
24222
|
-
|
|
24708
|
+
get selectedChoice() {
|
|
24709
|
+
return (this.choices.find((choice) => choice.value === this.selected) ??
|
|
24710
|
+
this.choices[0]);
|
|
24223
24711
|
}
|
|
24224
|
-
|
|
24225
|
-
this.
|
|
24712
|
+
get id() {
|
|
24713
|
+
return this.title.toLowerCase().replace(/[^a-z]+/g, '-');
|
|
24226
24714
|
}
|
|
24227
|
-
|
|
24228
|
-
|
|
24229
|
-
this.checkRequired(value);
|
|
24230
|
-
this.rawChange.next(value);
|
|
24715
|
+
getChoiceLabel() {
|
|
24716
|
+
return this.selectedChoice?.label;
|
|
24231
24717
|
}
|
|
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);
|
|
24718
|
+
ngOnInit() {
|
|
24719
|
+
if (!this.maxRows)
|
|
24720
|
+
this.maxRows = DEFAULT_ROW_NUMBERS;
|
|
24721
|
+
if (!this.choices || this.choices.length === 0) {
|
|
24722
|
+
this.choices = [];
|
|
24723
|
+
}
|
|
24254
24724
|
}
|
|
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
|
-
|
|
24725
|
+
isSelected(choice) {
|
|
24726
|
+
return choice === this.selectedChoice;
|
|
24727
|
+
}
|
|
24728
|
+
onSelectValue(choice) {
|
|
24729
|
+
this.closeOverlay();
|
|
24730
|
+
this.selected = choice.value;
|
|
24731
|
+
this.selectValue.emit(this.selected);
|
|
24732
|
+
}
|
|
24733
|
+
openOverlay() {
|
|
24734
|
+
this.overlayWidth =
|
|
24735
|
+
this.overlayOrigin.elementRef.nativeElement.getBoundingClientRect()
|
|
24736
|
+
.width + 'px';
|
|
24737
|
+
this.overlayMaxHeight = this.maxRows
|
|
24738
|
+
? `${this.maxRows * 29 + 60}px`
|
|
24739
|
+
: 'none';
|
|
24740
|
+
this.overlayOpen = true;
|
|
24741
|
+
return Promise.all([
|
|
24742
|
+
firstValueFrom(this.overlay.attach),
|
|
24743
|
+
firstValueFrom(this.choiceInputs.changes),
|
|
24744
|
+
]);
|
|
24745
|
+
}
|
|
24746
|
+
closeOverlay() {
|
|
24747
|
+
this.overlayOpen = false;
|
|
24748
|
+
}
|
|
24749
|
+
focusFirstItem() {
|
|
24750
|
+
this.choiceInputs.get(0).nativeElement.focus();
|
|
24751
|
+
}
|
|
24752
|
+
focusLastItem() {
|
|
24753
|
+
this.choiceInputs.get(this.choiceInputs.length - 1).nativeElement.focus();
|
|
24754
|
+
}
|
|
24755
|
+
async handleTriggerKeydown(event) {
|
|
24756
|
+
const keyCode = event.code;
|
|
24757
|
+
const isOpenKey = keyCode === 'ArrowDown' ||
|
|
24758
|
+
keyCode === 'ArrowUp' ||
|
|
24759
|
+
keyCode === 'ArrowLeft' ||
|
|
24760
|
+
keyCode === 'ArrowRight' ||
|
|
24761
|
+
keyCode === 'Enter' ||
|
|
24762
|
+
keyCode === 'Space';
|
|
24763
|
+
const isCloseKey = keyCode === 'Escape';
|
|
24764
|
+
if (isOpenKey) {
|
|
24765
|
+
event.preventDefault();
|
|
24766
|
+
if (!this.overlayOpen) {
|
|
24767
|
+
await this.openOverlay();
|
|
24276
24768
|
}
|
|
24277
|
-
|
|
24278
|
-
|
|
24279
|
-
|
|
24280
|
-
|
|
24769
|
+
if (keyCode === 'ArrowLeft' || keyCode === 'ArrowUp')
|
|
24770
|
+
this.focusLastItem();
|
|
24771
|
+
else
|
|
24772
|
+
this.focusFirstItem();
|
|
24773
|
+
}
|
|
24774
|
+
else if (this.overlayOpen && isCloseKey) {
|
|
24775
|
+
event.preventDefault();
|
|
24776
|
+
this.closeOverlay();
|
|
24777
|
+
}
|
|
24281
24778
|
}
|
|
24282
|
-
|
|
24283
|
-
if (this.
|
|
24284
|
-
|
|
24779
|
+
handleOverlayKeydown(event) {
|
|
24780
|
+
if (!this.overlayOpen)
|
|
24781
|
+
return;
|
|
24782
|
+
const keyCode = event.code;
|
|
24783
|
+
if (keyCode === 'ArrowDown' || keyCode === 'ArrowRight') {
|
|
24784
|
+
event.preventDefault();
|
|
24785
|
+
this.shiftItemFocus(1);
|
|
24786
|
+
}
|
|
24787
|
+
else if (keyCode === 'ArrowLeft' || keyCode === 'ArrowUp') {
|
|
24788
|
+
event.preventDefault();
|
|
24789
|
+
this.shiftItemFocus(-1);
|
|
24790
|
+
}
|
|
24791
|
+
else if (keyCode === 'Escape') {
|
|
24792
|
+
this.closeOverlay();
|
|
24285
24793
|
}
|
|
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
24794
|
}
|
|
24292
|
-
|
|
24293
|
-
this.
|
|
24795
|
+
shiftItemFocus(shift) {
|
|
24796
|
+
const index = this.focusedIndex;
|
|
24797
|
+
if (index === -1)
|
|
24798
|
+
return;
|
|
24799
|
+
const max = this.choiceInputs.length;
|
|
24800
|
+
// modulo, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder
|
|
24801
|
+
const newIndex = (((index + shift) % max) + max) % max;
|
|
24802
|
+
this.choiceInputs.get(newIndex).nativeElement.focus();
|
|
24294
24803
|
}
|
|
24295
|
-
|
|
24296
|
-
|
|
24804
|
+
get focusedIndex() {
|
|
24805
|
+
return this.choiceInputs.reduce((prev, curr, curIndex) => curr.nativeElement === document.activeElement ? curIndex : prev, -1);
|
|
24806
|
+
}
|
|
24807
|
+
selectIfEnter(event, choice) {
|
|
24808
|
+
if (event.code === 'Enter') {
|
|
24809
|
+
event.preventDefault();
|
|
24810
|
+
this.onSelectValue(choice);
|
|
24811
|
+
}
|
|
24812
|
+
}
|
|
24813
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24814
|
+
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
24815
|
}
|
|
24298
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24816
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownSelectorComponent, decorators: [{
|
|
24299
24817
|
type: Component,
|
|
24300
|
-
args: [{ selector: 'gn-ui-
|
|
24301
|
-
|
|
24818
|
+
args: [{ selector: 'gn-ui-dropdown-selector', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
24819
|
+
CommonModule,
|
|
24820
|
+
ButtonComponent,
|
|
24821
|
+
OverlayModule,
|
|
24822
|
+
MatIconModule,
|
|
24823
|
+
TranslateModule,
|
|
24824
|
+
], 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" }]
|
|
24825
|
+
}], propDecorators: { title: [{
|
|
24302
24826
|
type: Input
|
|
24303
|
-
}],
|
|
24827
|
+
}], showTitle: [{
|
|
24304
24828
|
type: Input
|
|
24305
|
-
}],
|
|
24829
|
+
}], ariaName: [{
|
|
24306
24830
|
type: Input
|
|
24307
|
-
}],
|
|
24831
|
+
}], choices: [{
|
|
24308
24832
|
type: Input
|
|
24309
|
-
}],
|
|
24833
|
+
}], selected: [{
|
|
24310
24834
|
type: Input
|
|
24311
|
-
}],
|
|
24835
|
+
}], maxRows: [{
|
|
24312
24836
|
type: Input
|
|
24313
|
-
}],
|
|
24837
|
+
}], extraBtnClass: [{
|
|
24838
|
+
type: Input
|
|
24839
|
+
}], minWidth: [{
|
|
24840
|
+
type: Input
|
|
24841
|
+
}], disabled: [{
|
|
24842
|
+
type: Input
|
|
24843
|
+
}], selectValue: [{
|
|
24314
24844
|
type: Output
|
|
24845
|
+
}], overlayOrigin: [{
|
|
24846
|
+
type: ViewChild,
|
|
24847
|
+
args: ['overlayOrigin']
|
|
24848
|
+
}], overlay: [{
|
|
24849
|
+
type: ViewChild,
|
|
24850
|
+
args: [CdkConnectedOverlay]
|
|
24851
|
+
}], choiceInputs: [{
|
|
24852
|
+
type: ViewChildren,
|
|
24853
|
+
args: ['choiceInputs', { read: ElementRef }]
|
|
24315
24854
|
}] } });
|
|
24316
24855
|
|
|
24317
|
-
class
|
|
24318
|
-
constructor() {
|
|
24319
|
-
this.
|
|
24320
|
-
this.
|
|
24321
|
-
this.
|
|
24322
|
-
this.valueChange = this.rawChange.pipe(distinctUntilChanged());
|
|
24856
|
+
class EditableLabelDirective {
|
|
24857
|
+
constructor(el, renderer) {
|
|
24858
|
+
this.el = el;
|
|
24859
|
+
this.renderer = renderer;
|
|
24860
|
+
this.editableLabelChanged = new EventEmitter();
|
|
24323
24861
|
}
|
|
24324
24862
|
ngAfterViewInit() {
|
|
24325
|
-
|
|
24326
|
-
|
|
24327
|
-
|
|
24328
|
-
|
|
24329
|
-
|
|
24330
|
-
|
|
24331
|
-
|
|
24332
|
-
|
|
24333
|
-
|
|
24863
|
+
if (this.gnUiEditableLabel !== false) {
|
|
24864
|
+
const appendedInput = this.renderer.createElement('input');
|
|
24865
|
+
this.renderer.setStyle(appendedInput, 'background', 'inherit');
|
|
24866
|
+
this.renderer.setStyle(appendedInput, 'color', 'inherit');
|
|
24867
|
+
this.renderer.setStyle(appendedInput, 'font', 'inherit');
|
|
24868
|
+
this.renderer.setStyle(appendedInput, 'border', 'inherit');
|
|
24869
|
+
this.renderer.setStyle(appendedInput, 'width', '100%');
|
|
24870
|
+
this.renderer.setStyle(appendedInput, 'padding', 'inherit');
|
|
24871
|
+
this.renderer.setStyle(appendedInput, 'margin', '0');
|
|
24872
|
+
this.renderer.setStyle(appendedInput, 'height', 'inherit');
|
|
24873
|
+
this.renderer.setStyle(appendedInput, 'line-height', 'inherit');
|
|
24874
|
+
this.renderer.setStyle(appendedInput, 'text-decoration', 'inherit');
|
|
24875
|
+
const hostContent = this.el.nativeElement.textContent || '';
|
|
24876
|
+
const formattedContent = hostContent.replace(/\s+/g, ' ').trim();
|
|
24877
|
+
this.renderer.setProperty(appendedInput, 'value', formattedContent);
|
|
24878
|
+
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '');
|
|
24879
|
+
this.renderer.listen(appendedInput, 'input', (event) => {
|
|
24880
|
+
this.editableLabelChanged.emit(event.target.value);
|
|
24881
|
+
});
|
|
24882
|
+
this.renderer.appendChild(this.el.nativeElement, appendedInput);
|
|
24883
|
+
}
|
|
24334
24884
|
}
|
|
24335
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24336
|
-
static { this.ɵ
|
|
24885
|
+
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 }); }
|
|
24886
|
+
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
24887
|
}
|
|
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: [{
|
|
24888
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, decorators: [{
|
|
24889
|
+
type: Directive,
|
|
24890
|
+
args: [{
|
|
24891
|
+
selector: '[gnUiEditableLabel]',
|
|
24892
|
+
standalone: true,
|
|
24893
|
+
}]
|
|
24894
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { editableLabelChanged: [{
|
|
24348
24895
|
type: Output
|
|
24349
|
-
}],
|
|
24350
|
-
type:
|
|
24351
|
-
args: ['input']
|
|
24896
|
+
}], gnUiEditableLabel: [{
|
|
24897
|
+
type: Input
|
|
24352
24898
|
}] } });
|
|
24353
24899
|
|
|
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 }); }
|
|
24900
|
+
class NavigationButtonComponent {
|
|
24901
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24902
|
+
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
24903
|
}
|
|
24386
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24904
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, decorators: [{
|
|
24387
24905
|
type: Component,
|
|
24388
|
-
args: [{ selector: 'gn-ui-
|
|
24389
|
-
}],
|
|
24390
|
-
type: Input
|
|
24391
|
-
}], type: [{
|
|
24906
|
+
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"] }]
|
|
24907
|
+
}], propDecorators: { label: [{
|
|
24392
24908
|
type: Input
|
|
24393
|
-
}],
|
|
24909
|
+
}], icon: [{
|
|
24394
24910
|
type: Input
|
|
24395
|
-
}], content: [{
|
|
24396
|
-
type: ViewChild,
|
|
24397
|
-
args: ['content']
|
|
24398
24911
|
}] } });
|
|
24399
24912
|
|
|
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();
|
|
24913
|
+
class SearchInputComponent {
|
|
24914
|
+
constructor() {
|
|
24915
|
+
this.value = '';
|
|
24916
|
+
this.placeholder = '';
|
|
24917
|
+
this.rawChange = new Subject();
|
|
24918
|
+
this.valueChange = this.rawChange.pipe(distinctUntilChanged$1());
|
|
24449
24919
|
}
|
|
24450
|
-
|
|
24451
|
-
|
|
24452
|
-
|
|
24453
|
-
}
|
|
24454
|
-
if (this.inputRef) {
|
|
24455
|
-
this.inputRef.nativeElement.value = value?.title || '';
|
|
24456
|
-
}
|
|
24920
|
+
handleChange($event) {
|
|
24921
|
+
const value = $event.target.value;
|
|
24922
|
+
this.rawChange.next(value);
|
|
24457
24923
|
}
|
|
24458
24924
|
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
|
-
}
|
|
24925
|
+
this.value = null;
|
|
24926
|
+
this.rawChange.next(null);
|
|
24485
24927
|
}
|
|
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:
|
|
24928
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24929
|
+
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
24930
|
}
|
|
24489
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
24931
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchInputComponent, decorators: [{
|
|
24490
24932
|
type: Component,
|
|
24491
|
-
args: [{ selector: 'gn-ui-
|
|
24492
|
-
}],
|
|
24493
|
-
type: Input
|
|
24494
|
-
}], action: [{
|
|
24495
|
-
type: Input
|
|
24496
|
-
}], value: [{
|
|
24497
|
-
type: Input
|
|
24498
|
-
}], clearOnSelection: [{
|
|
24933
|
+
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" }]
|
|
24934
|
+
}], propDecorators: { value: [{
|
|
24499
24935
|
type: Input
|
|
24500
|
-
}],
|
|
24936
|
+
}], placeholder: [{
|
|
24501
24937
|
type: Input
|
|
24502
|
-
}],
|
|
24503
|
-
type: Output
|
|
24504
|
-
}], inputSubmitted: [{
|
|
24505
|
-
type: Output
|
|
24506
|
-
}], inputCleared: [{
|
|
24938
|
+
}], valueChange: [{
|
|
24507
24939
|
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
24940
|
}] } });
|
|
24520
24941
|
|
|
24521
24942
|
class StarToggleComponent {
|
|
@@ -24553,115 +24974,119 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24553
24974
|
args: ['starOverlay']
|
|
24554
24975
|
}] } });
|
|
24555
24976
|
|
|
24556
|
-
class
|
|
24557
|
-
constructor(
|
|
24558
|
-
this.
|
|
24559
|
-
this.
|
|
24560
|
-
this.
|
|
24561
|
-
this.
|
|
24562
|
-
|
|
24563
|
-
|
|
24564
|
-
|
|
24565
|
-
|
|
24566
|
-
|
|
24567
|
-
|
|
24568
|
-
|
|
24569
|
-
|
|
24977
|
+
class TextAreaComponent {
|
|
24978
|
+
constructor() {
|
|
24979
|
+
this.value = '';
|
|
24980
|
+
this.disabled = false;
|
|
24981
|
+
this.extraClass = '';
|
|
24982
|
+
this.required = false;
|
|
24983
|
+
this.rawChange = new Subject();
|
|
24984
|
+
this.valueChange = this.rawChange.pipe(distinctUntilChanged());
|
|
24985
|
+
this.baseClasses = [
|
|
24986
|
+
'w-full',
|
|
24987
|
+
'pt-2',
|
|
24988
|
+
'pl-2',
|
|
24989
|
+
'resize-none',
|
|
24990
|
+
'border',
|
|
24991
|
+
'border-gray-800',
|
|
24992
|
+
'rounded italic',
|
|
24993
|
+
'leading-tight',
|
|
24994
|
+
'focus:outline-none',
|
|
24995
|
+
'focus:bg-background',
|
|
24996
|
+
'focus:border-primary',
|
|
24997
|
+
].join(' ');
|
|
24998
|
+
this.disabledClasses = ['cursor-not-allowed'].join(' ');
|
|
24570
24999
|
}
|
|
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);
|
|
25000
|
+
get classList() {
|
|
25001
|
+
return `${this.baseClasses} ${this.extraClass} ${this.disabled ? this.disabledClasses : ''}`;
|
|
24580
25002
|
}
|
|
24581
|
-
|
|
24582
|
-
this.
|
|
25003
|
+
ngAfterViewInit() {
|
|
25004
|
+
this.checkRequired(this.input.nativeElement.value);
|
|
24583
25005
|
}
|
|
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();
|
|
25006
|
+
checkRequired(value) {
|
|
25007
|
+
this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
|
|
24602
25008
|
}
|
|
24603
|
-
|
|
24604
|
-
|
|
25009
|
+
handleChange($event) {
|
|
25010
|
+
const value = $event.target.value;
|
|
25011
|
+
this.checkRequired(value);
|
|
25012
|
+
this.rawChange.next(value);
|
|
24605
25013
|
}
|
|
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:
|
|
25014
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25015
|
+
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
25016
|
}
|
|
24609
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
25017
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, decorators: [{
|
|
24610
25018
|
type: Component,
|
|
24611
|
-
args: [{ selector: 'gn-ui-
|
|
24612
|
-
}], propDecorators: {
|
|
25019
|
+
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"] }]
|
|
25020
|
+
}], ctorParameters: function () { return []; }, propDecorators: { value: [{
|
|
24613
25021
|
type: Input
|
|
24614
|
-
}],
|
|
25022
|
+
}], disabled: [{
|
|
24615
25023
|
type: Input
|
|
24616
|
-
}],
|
|
25024
|
+
}], extraClass: [{
|
|
24617
25025
|
type: Input
|
|
24618
|
-
}],
|
|
25026
|
+
}], placeholder: [{
|
|
24619
25027
|
type: Input
|
|
24620
|
-
}],
|
|
25028
|
+
}], required: [{
|
|
25029
|
+
type: Input
|
|
25030
|
+
}], valueChange: [{
|
|
24621
25031
|
type: Output
|
|
25032
|
+
}], input: [{
|
|
25033
|
+
type: ViewChild,
|
|
25034
|
+
args: ['input']
|
|
24622
25035
|
}] } });
|
|
24623
25036
|
|
|
24624
|
-
|
|
24625
|
-
marker('dropFile');
|
|
24626
|
-
class DragAndDropFileInputComponent {
|
|
25037
|
+
class TextInputComponent {
|
|
24627
25038
|
constructor() {
|
|
24628
|
-
this.
|
|
24629
|
-
|
|
24630
|
-
|
|
24631
|
-
|
|
25039
|
+
this.baseClass = [
|
|
25040
|
+
'appearance-none',
|
|
25041
|
+
'border border-gray-300',
|
|
25042
|
+
'rounded w-full',
|
|
25043
|
+
'p-2',
|
|
25044
|
+
'text-gray-700',
|
|
25045
|
+
'leading-tight',
|
|
25046
|
+
'focus:outline-none',
|
|
25047
|
+
'focus:border-primary',
|
|
25048
|
+
].join(' ');
|
|
25049
|
+
this.value = '';
|
|
25050
|
+
this.extraClass = '';
|
|
25051
|
+
this.required = false;
|
|
25052
|
+
this.rawChange = new Subject();
|
|
25053
|
+
this.valueChange = this.rawChange.pipe(distinctUntilChanged());
|
|
24632
25054
|
}
|
|
24633
|
-
get
|
|
24634
|
-
return this.
|
|
25055
|
+
get classList() {
|
|
25056
|
+
return `${this.baseClass} ${this.extraClass}`;
|
|
24635
25057
|
}
|
|
24636
|
-
|
|
24637
|
-
this.
|
|
24638
|
-
this.fileChange.emit(this.selectedFile);
|
|
25058
|
+
ngAfterViewInit() {
|
|
25059
|
+
this.checkRequired(this.input.nativeElement.value);
|
|
24639
25060
|
}
|
|
24640
|
-
|
|
24641
|
-
|
|
25061
|
+
checkRequired(value) {
|
|
25062
|
+
this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
|
|
25063
|
+
}
|
|
25064
|
+
handleChange($event) {
|
|
25065
|
+
const value = $event.target.value;
|
|
25066
|
+
this.checkRequired(value);
|
|
25067
|
+
this.rawChange.next(value);
|
|
25068
|
+
}
|
|
25069
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25070
|
+
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
25071
|
}
|
|
24643
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
25072
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextInputComponent, decorators: [{
|
|
24644
25073
|
type: Component,
|
|
24645
|
-
args: [{ selector: 'gn-ui-
|
|
24646
|
-
}], propDecorators: {
|
|
25074
|
+
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"] }]
|
|
25075
|
+
}], propDecorators: { value: [{
|
|
24647
25076
|
type: Input
|
|
24648
|
-
}],
|
|
25077
|
+
}], extraClass: [{
|
|
24649
25078
|
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: [{
|
|
25079
|
+
}], hint: [{
|
|
24662
25080
|
type: Input
|
|
24663
|
-
}],
|
|
25081
|
+
}], required: [{
|
|
25082
|
+
type: Input
|
|
25083
|
+
}], disabled: [{
|
|
24664
25084
|
type: Input
|
|
25085
|
+
}], valueChange: [{
|
|
25086
|
+
type: Output
|
|
25087
|
+
}], input: [{
|
|
25088
|
+
type: ViewChild,
|
|
25089
|
+
args: ['input']
|
|
24665
25090
|
}] } });
|
|
24666
25091
|
|
|
24667
25092
|
class ColorScaleComponent {
|
|
@@ -24769,7 +25194,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24769
25194
|
|
|
24770
25195
|
class LoadingMaskComponent {
|
|
24771
25196
|
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$
|
|
25197
|
+
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
25198
|
}
|
|
24774
25199
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LoadingMaskComponent, decorators: [{
|
|
24775
25200
|
type: Component,
|
|
@@ -24865,148 +25290,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24865
25290
|
}]
|
|
24866
25291
|
}] });
|
|
24867
25292
|
|
|
24868
|
-
class
|
|
24869
|
-
constructor() {
|
|
24870
|
-
this.
|
|
24871
|
-
this.
|
|
25293
|
+
class ViewportIntersectorComponent {
|
|
25294
|
+
constructor(vcRef) {
|
|
25295
|
+
this.vcRef = vcRef;
|
|
25296
|
+
this.isInViewport = new EventEmitter();
|
|
25297
|
+
this.entersViewport = this.isInViewport.pipe(filter((inViewport) => inViewport), map$1(() => undefined));
|
|
25298
|
+
this.exitsViewport = this.isInViewport.pipe(filter((inViewport) => !inViewport), map$1(() => undefined));
|
|
24872
25299
|
}
|
|
24873
|
-
|
|
24874
|
-
|
|
24875
|
-
|
|
25300
|
+
ngOnInit() {
|
|
25301
|
+
const elToObserve = this.vcRef.element.nativeElement;
|
|
25302
|
+
this.observeInputElement(elToObserve);
|
|
24876
25303
|
}
|
|
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();
|
|
25304
|
+
ngOnDestroy() {
|
|
25305
|
+
const elToObserve = this.vcRef.element.nativeElement;
|
|
25306
|
+
this.unObserveInputElement(elToObserve);
|
|
24899
25307
|
}
|
|
24900
|
-
|
|
24901
|
-
|
|
25308
|
+
observeInputElement(elToObserve) {
|
|
25309
|
+
if (!this.observer) {
|
|
25310
|
+
this.observer = new IntersectionObserver((entries) => {
|
|
25311
|
+
entries.forEach((entry) => {
|
|
25312
|
+
this.isInViewport.emit(entry.isIntersecting);
|
|
25313
|
+
});
|
|
25314
|
+
}, { root: null, threshold: 0 });
|
|
25315
|
+
}
|
|
25316
|
+
this.observer.observe(elToObserve);
|
|
24902
25317
|
}
|
|
24903
|
-
|
|
24904
|
-
|
|
24905
|
-
this.checked = !this.checked;
|
|
24906
|
-
this.changed.emit(this.checked);
|
|
25318
|
+
unObserveInputElement(elToObserve) {
|
|
25319
|
+
this.observer?.unobserve(elToObserve);
|
|
24907
25320
|
}
|
|
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:
|
|
25321
|
+
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 }); }
|
|
25322
|
+
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
25323
|
}
|
|
24911
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
25324
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ViewportIntersectorComponent, decorators: [{
|
|
24912
25325
|
type: Component,
|
|
24913
|
-
args: [{ selector: 'gn-ui-
|
|
24914
|
-
}],
|
|
24915
|
-
type: Input
|
|
24916
|
-
}], checked: [{
|
|
24917
|
-
type: Input
|
|
24918
|
-
}], indeterminate: [{
|
|
24919
|
-
type: Input
|
|
24920
|
-
}], changed: [{
|
|
25326
|
+
args: [{ selector: 'gn-ui-viewport-intersector', template: "<div class=\"w-full h-full\"></div>\n" }]
|
|
25327
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { isInViewport: [{
|
|
24921
25328
|
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: [{
|
|
25329
|
+
}], entersViewport: [{
|
|
24950
25330
|
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: [{
|
|
25331
|
+
}], exitsViewport: [{
|
|
25007
25332
|
type: Output
|
|
25008
|
-
}], gnUiEditableLabel: [{
|
|
25009
|
-
type: Input
|
|
25010
25333
|
}] } });
|
|
25011
25334
|
|
|
25012
25335
|
class FilesDropDirective {
|
|
@@ -25198,7 +25521,7 @@ class ImageInputComponent {
|
|
|
25198
25521
|
});
|
|
25199
25522
|
}
|
|
25200
25523
|
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$
|
|
25524
|
+
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
25525
|
}
|
|
25203
25526
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageInputComponent, decorators: [{
|
|
25204
25527
|
type: Component,
|
|
@@ -25234,8 +25557,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25234
25557
|
|
|
25235
25558
|
class UiInputsModule {
|
|
25236
25559
|
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,
|
|
25560
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [AutocompleteComponent,
|
|
25239
25561
|
TextInputComponent,
|
|
25240
25562
|
DragAndDropFileInputComponent,
|
|
25241
25563
|
ChipsInputComponent,
|
|
@@ -25243,11 +25565,9 @@ class UiInputsModule {
|
|
|
25243
25565
|
StarToggleComponent,
|
|
25244
25566
|
DropdownMultiselectComponent,
|
|
25245
25567
|
ViewportIntersectorComponent,
|
|
25246
|
-
CheckToggleComponent,
|
|
25247
25568
|
CopyTextButtonComponent,
|
|
25248
25569
|
CheckboxComponent,
|
|
25249
|
-
SearchInputComponent,
|
|
25250
|
-
DateRangePickerComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
25570
|
+
SearchInputComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
25251
25571
|
FormsModule,
|
|
25252
25572
|
ReactiveFormsModule,
|
|
25253
25573
|
TagInputModule,
|
|
@@ -25265,7 +25585,10 @@ class UiInputsModule {
|
|
|
25265
25585
|
EditableLabelDirective,
|
|
25266
25586
|
TextAreaComponent,
|
|
25267
25587
|
ButtonComponent,
|
|
25268
|
-
ImageInputComponent
|
|
25588
|
+
ImageInputComponent,
|
|
25589
|
+
DropdownSelectorComponent,
|
|
25590
|
+
DateRangePickerComponent,
|
|
25591
|
+
CheckToggleComponent], exports: [DropdownSelectorComponent,
|
|
25269
25592
|
AutocompleteComponent,
|
|
25270
25593
|
ButtonComponent,
|
|
25271
25594
|
TextInputComponent,
|
|
@@ -25300,13 +25623,15 @@ class UiInputsModule {
|
|
|
25300
25623
|
MatInputModule,
|
|
25301
25624
|
MatDatepickerModule,
|
|
25302
25625
|
MatNativeDateModule,
|
|
25303
|
-
ImageInputComponent
|
|
25626
|
+
ImageInputComponent,
|
|
25627
|
+
DropdownSelectorComponent,
|
|
25628
|
+
DateRangePickerComponent,
|
|
25629
|
+
CheckToggleComponent] }); }
|
|
25304
25630
|
}
|
|
25305
25631
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, decorators: [{
|
|
25306
25632
|
type: NgModule,
|
|
25307
25633
|
args: [{
|
|
25308
25634
|
declarations: [
|
|
25309
|
-
DropdownSelectorComponent,
|
|
25310
25635
|
AutocompleteComponent,
|
|
25311
25636
|
TextInputComponent,
|
|
25312
25637
|
DragAndDropFileInputComponent,
|
|
@@ -25315,11 +25640,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25315
25640
|
StarToggleComponent,
|
|
25316
25641
|
DropdownMultiselectComponent,
|
|
25317
25642
|
ViewportIntersectorComponent,
|
|
25318
|
-
CheckToggleComponent,
|
|
25319
25643
|
CopyTextButtonComponent,
|
|
25320
25644
|
CheckboxComponent,
|
|
25321
25645
|
SearchInputComponent,
|
|
25322
|
-
DateRangePickerComponent,
|
|
25323
25646
|
],
|
|
25324
25647
|
imports: [
|
|
25325
25648
|
CommonModule,
|
|
@@ -25343,6 +25666,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25343
25666
|
TextAreaComponent,
|
|
25344
25667
|
ButtonComponent,
|
|
25345
25668
|
ImageInputComponent,
|
|
25669
|
+
DropdownSelectorComponent,
|
|
25670
|
+
DateRangePickerComponent,
|
|
25671
|
+
CheckToggleComponent,
|
|
25346
25672
|
],
|
|
25347
25673
|
exports: [
|
|
25348
25674
|
DropdownSelectorComponent,
|
|
@@ -25367,34 +25693,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25367
25693
|
}]
|
|
25368
25694
|
}] });
|
|
25369
25695
|
|
|
25696
|
+
class PreviousNextButtonsComponent {
|
|
25697
|
+
constructor() {
|
|
25698
|
+
this.directionButtonClicked = new EventEmitter();
|
|
25699
|
+
}
|
|
25700
|
+
previousButtonClicked() {
|
|
25701
|
+
this.directionButtonClicked.next('previous');
|
|
25702
|
+
}
|
|
25703
|
+
nextButtonClicked() {
|
|
25704
|
+
this.directionButtonClicked.next('next');
|
|
25705
|
+
}
|
|
25706
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PreviousNextButtonsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25707
|
+
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 }); }
|
|
25708
|
+
}
|
|
25709
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PreviousNextButtonsComponent, decorators: [{
|
|
25710
|
+
type: Component,
|
|
25711
|
+
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"] }]
|
|
25712
|
+
}], propDecorators: { isFirst: [{
|
|
25713
|
+
type: Input
|
|
25714
|
+
}], isLast: [{
|
|
25715
|
+
type: Input
|
|
25716
|
+
}], directionButtonClicked: [{
|
|
25717
|
+
type: Output
|
|
25718
|
+
}] } });
|
|
25719
|
+
|
|
25370
25720
|
class AddLayerFromOgcApiComponent {
|
|
25371
25721
|
constructor(changeDetectorRef) {
|
|
25372
25722
|
this.changeDetectorRef = changeDetectorRef;
|
|
25373
25723
|
this.layerAdded = new EventEmitter();
|
|
25374
25724
|
this.urlChange = new Subject();
|
|
25375
|
-
this.layerUrl = '';
|
|
25376
25725
|
this.loading = false;
|
|
25377
25726
|
this.layers = [];
|
|
25378
|
-
this.ogcEndpoint = null;
|
|
25379
25727
|
this.errorMessage = null;
|
|
25728
|
+
this.selectedLayerTypes = {};
|
|
25380
25729
|
}
|
|
25381
25730
|
ngOnInit() {
|
|
25382
25731
|
this.urlChange.pipe(debounceTime$1(700)).subscribe(() => {
|
|
25383
25732
|
this.loadLayers();
|
|
25384
|
-
this.changeDetectorRef.detectChanges(); // manually trigger change detection
|
|
25385
25733
|
});
|
|
25386
25734
|
}
|
|
25387
25735
|
async loadLayers() {
|
|
25388
25736
|
this.errorMessage = null;
|
|
25389
25737
|
try {
|
|
25390
25738
|
this.loading = true;
|
|
25391
|
-
if (this.ogcUrl.trim()
|
|
25739
|
+
if (!this.ogcUrl.trim()) {
|
|
25392
25740
|
this.layers = [];
|
|
25393
25741
|
return;
|
|
25394
25742
|
}
|
|
25395
|
-
|
|
25396
|
-
|
|
25397
|
-
this.
|
|
25743
|
+
const ogcEndpoint = await new OgcApiEndpoint(this.ogcUrl);
|
|
25744
|
+
this.layers = await ogcEndpoint.allCollections;
|
|
25745
|
+
this.setDefaultLayerTypes();
|
|
25398
25746
|
}
|
|
25399
25747
|
catch (error) {
|
|
25400
25748
|
const err = error;
|
|
@@ -25406,21 +25754,75 @@ class AddLayerFromOgcApiComponent {
|
|
|
25406
25754
|
this.changeDetectorRef.markForCheck();
|
|
25407
25755
|
}
|
|
25408
25756
|
}
|
|
25409
|
-
|
|
25410
|
-
this.
|
|
25411
|
-
|
|
25412
|
-
|
|
25413
|
-
|
|
25414
|
-
|
|
25415
|
-
};
|
|
25416
|
-
|
|
25757
|
+
setDefaultLayerTypes() {
|
|
25758
|
+
this.layers.forEach((layer) => {
|
|
25759
|
+
const choices = this.getLayerChoices(layer);
|
|
25760
|
+
if (choices.length > 0) {
|
|
25761
|
+
this.selectedLayerTypes[layer.name] = choices[0].value;
|
|
25762
|
+
}
|
|
25763
|
+
});
|
|
25764
|
+
}
|
|
25765
|
+
getLayerChoices(layer) {
|
|
25766
|
+
const choices = [];
|
|
25767
|
+
if (layer.hasRecords) {
|
|
25768
|
+
choices.push({ label: 'Records', value: 'record' });
|
|
25769
|
+
}
|
|
25770
|
+
if (layer.hasFeatures) {
|
|
25771
|
+
choices.push({ label: 'Features', value: 'features' });
|
|
25772
|
+
}
|
|
25773
|
+
if (layer.hasVectorTiles) {
|
|
25774
|
+
choices.push({ label: 'Vector Tiles', value: 'vectorTiles' });
|
|
25775
|
+
}
|
|
25776
|
+
if (layer.hasMapTiles) {
|
|
25777
|
+
choices.push({ label: 'Map Tiles', value: 'mapTiles' });
|
|
25778
|
+
}
|
|
25779
|
+
return choices;
|
|
25780
|
+
}
|
|
25781
|
+
shouldDisplayLayer(layer) {
|
|
25782
|
+
return (layer.hasRecords ||
|
|
25783
|
+
layer.hasFeatures ||
|
|
25784
|
+
layer.hasVectorTiles ||
|
|
25785
|
+
layer.hasMapTiles);
|
|
25786
|
+
}
|
|
25787
|
+
onLayerTypeSelect(layerName, selectedType) {
|
|
25788
|
+
this.selectedLayerTypes[layerName] = selectedType
|
|
25789
|
+
? selectedType
|
|
25790
|
+
: this.getLayerChoices(layerName)[0]?.value;
|
|
25791
|
+
}
|
|
25792
|
+
async addLayer(layer, layerType) {
|
|
25793
|
+
try {
|
|
25794
|
+
const ogcEndpoint = await new OgcApiEndpoint(this.ogcUrl);
|
|
25795
|
+
let layerUrl;
|
|
25796
|
+
if (layerType === 'vectorTiles') {
|
|
25797
|
+
layerUrl = await ogcEndpoint.getVectorTilesetUrl(layer);
|
|
25798
|
+
}
|
|
25799
|
+
else if (layerType === 'mapTiles') {
|
|
25800
|
+
layerUrl = await ogcEndpoint.getMapTilesetUrl(layer);
|
|
25801
|
+
}
|
|
25802
|
+
else {
|
|
25803
|
+
layerUrl = await ogcEndpoint.getCollectionItemsUrl(layer, {
|
|
25804
|
+
outputFormat: 'json',
|
|
25805
|
+
});
|
|
25806
|
+
}
|
|
25807
|
+
const layerToAdd = {
|
|
25808
|
+
name: layer,
|
|
25809
|
+
url: layerUrl,
|
|
25810
|
+
type: MapContextLayerTypeEnum.OGCAPI,
|
|
25811
|
+
layerType: layerType,
|
|
25812
|
+
};
|
|
25813
|
+
this.layerAdded.emit({ ...layerToAdd, title: layer });
|
|
25814
|
+
}
|
|
25815
|
+
catch (error) {
|
|
25816
|
+
const err = error;
|
|
25817
|
+
console.error('Error adding layer:', err.message);
|
|
25818
|
+
}
|
|
25417
25819
|
}
|
|
25418
25820
|
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
|
|
25821
|
+
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
25822
|
}
|
|
25421
25823
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromOgcApiComponent, decorators: [{
|
|
25422
25824
|
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
|
|
25825
|
+
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
25826
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { ogcUrl: [{
|
|
25425
25827
|
type: Input
|
|
25426
25828
|
}], layerAdded: [{
|
|
@@ -26162,7 +26564,8 @@ class ApiCardComponent {
|
|
|
26162
26564
|
}
|
|
26163
26565
|
ngOnInit() {
|
|
26164
26566
|
this.displayApiFormButton =
|
|
26165
|
-
this.link.accessServiceProtocol === 'ogcFeatures'
|
|
26567
|
+
this.link.accessServiceProtocol === 'ogcFeatures' ||
|
|
26568
|
+
this.link.accessServiceProtocol === 'wfs';
|
|
26166
26569
|
}
|
|
26167
26570
|
ngOnChanges(changes) {
|
|
26168
26571
|
this.currentlyActive =
|
|
@@ -26175,7 +26578,7 @@ class ApiCardComponent {
|
|
|
26175
26578
|
}
|
|
26176
26579
|
}
|
|
26177
26580
|
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:
|
|
26581
|
+
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
26582
|
}
|
|
26180
26583
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ApiCardComponent, decorators: [{
|
|
26181
26584
|
type: Component,
|
|
@@ -26306,7 +26709,7 @@ class DownloadsListComponent {
|
|
|
26306
26709
|
return getBadgeColor(getFileFormat(link));
|
|
26307
26710
|
}
|
|
26308
26711
|
isFromWfs(link) {
|
|
26309
|
-
return link.type === '
|
|
26712
|
+
return link.type === 'download' && link.accessServiceProtocol === 'wfs';
|
|
26310
26713
|
}
|
|
26311
26714
|
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
26715
|
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 +26741,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26338
26741
|
}] } });
|
|
26339
26742
|
|
|
26340
26743
|
class LinkCardComponent {
|
|
26744
|
+
constructor() {
|
|
26745
|
+
this.compact = false;
|
|
26746
|
+
}
|
|
26747
|
+
get title() {
|
|
26748
|
+
if (this.link.name && this.link.description) {
|
|
26749
|
+
return `${this.link.name} | ${this.link.description}`;
|
|
26750
|
+
}
|
|
26751
|
+
return this.link.name || this.link.description || '';
|
|
26752
|
+
}
|
|
26341
26753
|
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
|
|
26754
|
+
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
26755
|
}
|
|
26344
26756
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LinkCardComponent, decorators: [{
|
|
26345
26757
|
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
|
|
26758
|
+
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
26759
|
}], propDecorators: { link: [{
|
|
26348
26760
|
type: Input
|
|
26761
|
+
}], compact: [{
|
|
26762
|
+
type: Input
|
|
26349
26763
|
}] } });
|
|
26350
26764
|
|
|
26351
26765
|
class MarkdownParserComponent {
|
|
@@ -26372,7 +26786,7 @@ class MarkdownEditorComponent {
|
|
|
26372
26786
|
this.textContentChanged.emit(this.textContent);
|
|
26373
26787
|
}
|
|
26374
26788
|
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 }); }
|
|
26789
|
+
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
26790
|
}
|
|
26377
26791
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownEditorComponent, decorators: [{
|
|
26378
26792
|
type: Component,
|
|
@@ -26804,43 +27218,36 @@ const DEFAULT_PARAMS = {
|
|
|
26804
27218
|
};
|
|
26805
27219
|
class RecordApiFormComponent {
|
|
26806
27220
|
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
|
-
}));
|
|
27221
|
+
this.offset$ = new BehaviorSubject(DEFAULT_PARAMS.OFFSET);
|
|
27222
|
+
this.limit$ = new BehaviorSubject(DEFAULT_PARAMS.LIMIT);
|
|
27223
|
+
this.format$ = new BehaviorSubject(DEFAULT_PARAMS.FORMAT);
|
|
27224
|
+
this.endpoint$ = new BehaviorSubject(undefined);
|
|
27225
|
+
this.supportOffset = true;
|
|
27226
|
+
this.outputFormats = [{ value: 'json', label: 'JSON' }];
|
|
27227
|
+
this.apiQueryUrl$ = combineLatest([
|
|
27228
|
+
this.offset$,
|
|
27229
|
+
this.limit$,
|
|
27230
|
+
this.format$,
|
|
27231
|
+
this.endpoint$,
|
|
27232
|
+
]).pipe(switchMap(([offset, limit, format]) => this.generateApiQueryUrl(offset, limit, format)));
|
|
26831
27233
|
this.noLimitChecked$ = this.limit$.pipe(map$2((limit) => limit === '-1' || limit === ''));
|
|
26832
27234
|
this.displayLimit$ = this.limit$.pipe(map$2((limit) => (limit !== '-1' ? limit : '')));
|
|
26833
27235
|
}
|
|
26834
27236
|
set apiLink(value) {
|
|
26835
|
-
this.
|
|
27237
|
+
this.outputFormats = [{ value: 'json', label: 'JSON' }];
|
|
27238
|
+
this.accessServiceProtocol = value ? value.accessServiceProtocol : undefined;
|
|
27239
|
+
this.apiFeatureType = value ? value.name : undefined;
|
|
27240
|
+
if (value) {
|
|
27241
|
+
this.apiBaseUrl = value.url.href;
|
|
27242
|
+
this.createEndpoint().then(() => this.parseOutputFormats());
|
|
27243
|
+
}
|
|
26836
27244
|
this.resetUrl();
|
|
26837
27245
|
}
|
|
26838
27246
|
setOffset(value) {
|
|
26839
27247
|
this.offset$.next(value);
|
|
26840
27248
|
}
|
|
26841
27249
|
setLimit(value) {
|
|
26842
|
-
|
|
26843
|
-
this.limit$.next(newLimit);
|
|
27250
|
+
this.limit$.next(value === '' ? '-1' : value);
|
|
26844
27251
|
}
|
|
26845
27252
|
setFormat(value) {
|
|
26846
27253
|
this.format$.next(String(value));
|
|
@@ -26850,19 +27257,86 @@ class RecordApiFormComponent {
|
|
|
26850
27257
|
this.limit$.next(DEFAULT_PARAMS.LIMIT);
|
|
26851
27258
|
this.format$.next(DEFAULT_PARAMS.FORMAT);
|
|
26852
27259
|
}
|
|
27260
|
+
async parseOutputFormats() {
|
|
27261
|
+
if (!this.endpoint)
|
|
27262
|
+
return;
|
|
27263
|
+
const apiUrl = this.apiBaseUrl.endsWith('?')
|
|
27264
|
+
? this.apiBaseUrl.slice(0, -1)
|
|
27265
|
+
: this.apiBaseUrl;
|
|
27266
|
+
const outputFormats = await this.getOutputFormats(apiUrl);
|
|
27267
|
+
const formatsList = outputFormats.itemFormats
|
|
27268
|
+
? this.mapFormats(outputFormats.itemFormats)
|
|
27269
|
+
: this.mapFormats(outputFormats.outputFormats || []);
|
|
27270
|
+
this.outputFormats = this.outputFormats
|
|
27271
|
+
.concat(formatsList.filter(Boolean))
|
|
27272
|
+
.filter((format, index, self) => index === self.findIndex((t) => t.value === format.value))
|
|
27273
|
+
.sort((a, b) => a.label.localeCompare(b.label));
|
|
27274
|
+
}
|
|
27275
|
+
mapFormats(formats) {
|
|
27276
|
+
return formats.map((format) => {
|
|
27277
|
+
const normalizedFormat = mimeTypeToFormat(format);
|
|
27278
|
+
return normalizedFormat
|
|
27279
|
+
? { label: normalizedFormat.toUpperCase(), value: normalizedFormat }
|
|
27280
|
+
: null;
|
|
27281
|
+
});
|
|
27282
|
+
}
|
|
27283
|
+
async getOutputFormats(url) {
|
|
27284
|
+
if (!this.endpoint)
|
|
27285
|
+
return {};
|
|
27286
|
+
if (this.endpoint instanceof WfsEndpoint) {
|
|
27287
|
+
this.supportOffset = this.endpoint.supportsStartIndex();
|
|
27288
|
+
return this.endpoint.getServiceInfo();
|
|
27289
|
+
}
|
|
27290
|
+
else {
|
|
27291
|
+
{
|
|
27292
|
+
return (await this.endpoint.getCollectionInfo(this.firstCollection));
|
|
27293
|
+
}
|
|
27294
|
+
}
|
|
27295
|
+
}
|
|
27296
|
+
async createEndpoint() {
|
|
27297
|
+
if (!this.apiBaseUrl || !this.accessServiceProtocol)
|
|
27298
|
+
return;
|
|
27299
|
+
if (this.accessServiceProtocol === 'wfs') {
|
|
27300
|
+
this.endpoint = new WfsEndpoint(this.apiBaseUrl);
|
|
27301
|
+
await this.endpoint.isReady();
|
|
27302
|
+
}
|
|
27303
|
+
else {
|
|
27304
|
+
this.endpoint = new OgcApiEndpoint(this.apiBaseUrl);
|
|
27305
|
+
this.firstCollection = (await this.endpoint.featureCollections)[0];
|
|
27306
|
+
}
|
|
27307
|
+
this.endpoint$.next(this.endpoint);
|
|
27308
|
+
}
|
|
27309
|
+
async generateApiQueryUrl(offset, limit, format) {
|
|
27310
|
+
if (!this.apiBaseUrl || !this.endpoint || !this.apiFeatureType)
|
|
27311
|
+
return '';
|
|
27312
|
+
const options = {
|
|
27313
|
+
outputFormat: format,
|
|
27314
|
+
startIndex: offset ? Number(offset) : undefined,
|
|
27315
|
+
maxFeatures: limit !== '-1' ? Number(limit) : undefined,
|
|
27316
|
+
limit: limit !== '-1' ? Number(limit) : limit === '-1' ? -1 : undefined,
|
|
27317
|
+
offset: offset !== '' ? Number(offset) : undefined,
|
|
27318
|
+
};
|
|
27319
|
+
if (this.endpoint instanceof WfsEndpoint) {
|
|
27320
|
+
options.maxFeatures = limit !== '-1' ? Number(limit) : undefined;
|
|
27321
|
+
return this.endpoint.getFeatureUrl(this.apiFeatureType, options);
|
|
27322
|
+
}
|
|
27323
|
+
else {
|
|
27324
|
+
return await this.endpoint.getCollectionItemsUrl(this.firstCollection, options);
|
|
27325
|
+
}
|
|
27326
|
+
}
|
|
26853
27327
|
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
|
|
27328
|
+
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
27329
|
}
|
|
26856
27330
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, decorators: [{
|
|
26857
27331
|
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
|
|
27332
|
+
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
27333
|
}], propDecorators: { apiLink: [{
|
|
26860
27334
|
type: Input
|
|
26861
27335
|
}] } });
|
|
26862
27336
|
|
|
26863
27337
|
class RelatedRecordCardComponent {
|
|
26864
27338
|
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:
|
|
27339
|
+
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
27340
|
}
|
|
26867
27341
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, decorators: [{
|
|
26868
27342
|
type: Component,
|
|
@@ -26958,52 +27432,75 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26958
27432
|
}] } });
|
|
26959
27433
|
|
|
26960
27434
|
class CarouselComponent {
|
|
27435
|
+
get isFirstStep() {
|
|
27436
|
+
return this.currentStep === 0;
|
|
27437
|
+
}
|
|
27438
|
+
get isLastStep() {
|
|
27439
|
+
return this.currentStep === this.steps.length - 1;
|
|
27440
|
+
}
|
|
27441
|
+
get stepsCount() {
|
|
27442
|
+
return this.steps.length;
|
|
27443
|
+
}
|
|
26961
27444
|
constructor(changeDetector) {
|
|
26962
27445
|
this.changeDetector = changeDetector;
|
|
26963
27446
|
this.containerClass = '';
|
|
26964
|
-
this.stepsContainerClass = '';
|
|
27447
|
+
this.stepsContainerClass = 'w-full bottom-0 top-auto';
|
|
27448
|
+
this.currentStepChange = new EventEmitter();
|
|
26965
27449
|
this.steps = [];
|
|
26966
|
-
this.
|
|
27450
|
+
this.currentStep = 0;
|
|
27451
|
+
this.refreshSteps = () => {
|
|
27452
|
+
this.steps = this.emblaApi.scrollSnapList();
|
|
27453
|
+
this.currentStep = this.emblaApi.selectedScrollSnap();
|
|
27454
|
+
this.currentStepChange.emit(this.currentStep);
|
|
27455
|
+
this.changeDetector.detectChanges();
|
|
27456
|
+
};
|
|
26967
27457
|
}
|
|
26968
27458
|
ngAfterViewInit() {
|
|
26969
27459
|
this.emblaApi = EmblaCarousel(this.carouselOverflowContainer.nativeElement, {
|
|
26970
27460
|
duration: 15,
|
|
26971
27461
|
});
|
|
26972
|
-
const refreshSteps = () => {
|
|
26973
|
-
this.steps = this.emblaApi.scrollSnapList();
|
|
26974
|
-
this.selectedStep = this.emblaApi.selectedScrollSnap();
|
|
26975
|
-
this.changeDetector.detectChanges();
|
|
26976
|
-
};
|
|
26977
27462
|
this.emblaApi
|
|
26978
|
-
.on('init', refreshSteps)
|
|
26979
|
-
.on('reInit', refreshSteps)
|
|
26980
|
-
.on('select', refreshSteps);
|
|
27463
|
+
.on('init', this.refreshSteps)
|
|
27464
|
+
.on('reInit', this.refreshSteps)
|
|
27465
|
+
.on('select', this.refreshSteps);
|
|
26981
27466
|
}
|
|
26982
27467
|
scrollToStep(stepIndex) {
|
|
26983
27468
|
this.emblaApi.scrollTo(stepIndex);
|
|
26984
27469
|
}
|
|
27470
|
+
slideToPrevious() {
|
|
27471
|
+
if (this.isFirstStep)
|
|
27472
|
+
return;
|
|
27473
|
+
this.emblaApi.scrollPrev();
|
|
27474
|
+
}
|
|
27475
|
+
slideToNext() {
|
|
27476
|
+
if (this.isLastStep)
|
|
27477
|
+
return;
|
|
27478
|
+
this.emblaApi.scrollNext();
|
|
27479
|
+
}
|
|
26985
27480
|
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=\"
|
|
27481
|
+
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
27482
|
}
|
|
26988
27483
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, decorators: [{
|
|
26989
27484
|
type: Component,
|
|
26990
|
-
args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"
|
|
26991
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: {
|
|
27485
|
+
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"] }]
|
|
27486
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { carouselOverflowContainer: [{
|
|
27487
|
+
type: ViewChild,
|
|
27488
|
+
args: ['carouselOverflowContainer']
|
|
27489
|
+
}], containerClass: [{
|
|
26992
27490
|
type: Input
|
|
26993
27491
|
}], stepsContainerClass: [{
|
|
26994
27492
|
type: Input
|
|
26995
|
-
}],
|
|
26996
|
-
type:
|
|
26997
|
-
args: ['carouselOverflowContainer']
|
|
27493
|
+
}], currentStepChange: [{
|
|
27494
|
+
type: Output
|
|
26998
27495
|
}] } });
|
|
26999
27496
|
|
|
27000
27497
|
class FormFieldWrapperComponent {
|
|
27001
27498
|
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 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: ["
|
|
27499
|
+
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
27500
|
}
|
|
27004
27501
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldWrapperComponent, decorators: [{
|
|
27005
27502
|
type: Component,
|
|
27006
|
-
args: [{ selector: 'gn-ui-form-field-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatIconModule, MatTooltipModule], 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 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"
|
|
27503
|
+
args: [{ selector: 'gn-ui-form-field-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatIconModule, MatTooltipModule], 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" }]
|
|
27007
27504
|
}], propDecorators: { label: [{
|
|
27008
27505
|
type: Input
|
|
27009
27506
|
}], hint: [{
|
|
@@ -27148,17 +27645,87 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27148
27645
|
args: ['innerContainer']
|
|
27149
27646
|
}] } });
|
|
27150
27647
|
|
|
27648
|
+
class BlockListComponent {
|
|
27649
|
+
get pages() {
|
|
27650
|
+
return new Array(this.pagesCount).fill(0).map((_, i) => i);
|
|
27651
|
+
}
|
|
27652
|
+
get isFirstPage() {
|
|
27653
|
+
return this.currentPage === 0;
|
|
27654
|
+
}
|
|
27655
|
+
get isLastPage() {
|
|
27656
|
+
return this.currentPage === this.pagesCount - 1;
|
|
27657
|
+
}
|
|
27658
|
+
get pagesCount() {
|
|
27659
|
+
return this.blocks ? Math.ceil(this.blocks.length / this.pageSize) : 1;
|
|
27660
|
+
}
|
|
27661
|
+
constructor(changeDetector) {
|
|
27662
|
+
this.changeDetector = changeDetector;
|
|
27663
|
+
this.pageSize = 5;
|
|
27664
|
+
this.containerClass = '';
|
|
27665
|
+
this.paginationContainerClass = 'w-full bottom-0 top-auto';
|
|
27666
|
+
this.minHeight = 0;
|
|
27667
|
+
this.currentPage = 0;
|
|
27668
|
+
this.refreshBlocksVisibility = () => {
|
|
27669
|
+
this.blocks.forEach((block, index) => {
|
|
27670
|
+
block.nativeElement.style.display =
|
|
27671
|
+
index >= this.currentPage * this.pageSize &&
|
|
27672
|
+
index < (this.currentPage + 1) * this.pageSize
|
|
27673
|
+
? null
|
|
27674
|
+
: 'none';
|
|
27675
|
+
});
|
|
27676
|
+
};
|
|
27677
|
+
}
|
|
27678
|
+
ngAfterViewInit() {
|
|
27679
|
+
this.blocks.changes.subscribe(this.refreshBlocksVisibility);
|
|
27680
|
+
this.refreshBlocksVisibility();
|
|
27681
|
+
// we store the first height as the min-height of the list container
|
|
27682
|
+
this.minHeight = this.blockContainer.nativeElement.clientHeight;
|
|
27683
|
+
this.changeDetector.detectChanges();
|
|
27684
|
+
}
|
|
27685
|
+
goToPage(index) {
|
|
27686
|
+
this.currentPage = Math.max(Math.min(index, this.pagesCount - 1), 0);
|
|
27687
|
+
this.changeDetector.detectChanges();
|
|
27688
|
+
this.refreshBlocksVisibility();
|
|
27689
|
+
}
|
|
27690
|
+
previousPage() {
|
|
27691
|
+
if (this.isFirstPage)
|
|
27692
|
+
return;
|
|
27693
|
+
this.goToPage(this.currentPage - 1);
|
|
27694
|
+
}
|
|
27695
|
+
nextPage() {
|
|
27696
|
+
if (this.isLastPage)
|
|
27697
|
+
return;
|
|
27698
|
+
this.goToPage(this.currentPage + 1);
|
|
27699
|
+
}
|
|
27700
|
+
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 }); }
|
|
27701
|
+
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 }); }
|
|
27702
|
+
}
|
|
27703
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: BlockListComponent, decorators: [{
|
|
27704
|
+
type: Component,
|
|
27705
|
+
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"] }]
|
|
27706
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { pageSize: [{
|
|
27707
|
+
type: Input
|
|
27708
|
+
}], containerClass: [{
|
|
27709
|
+
type: Input
|
|
27710
|
+
}], paginationContainerClass: [{
|
|
27711
|
+
type: Input
|
|
27712
|
+
}], blocks: [{
|
|
27713
|
+
type: ContentChildren,
|
|
27714
|
+
args: ['block', { read: ElementRef }]
|
|
27715
|
+
}], blockContainer: [{
|
|
27716
|
+
type: ViewChild,
|
|
27717
|
+
args: ['blockContainer']
|
|
27718
|
+
}] } });
|
|
27719
|
+
|
|
27151
27720
|
class UiLayoutModule {
|
|
27152
27721
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
27153
27722
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, declarations: [ExpandablePanelComponent,
|
|
27154
27723
|
StickyHeaderComponent,
|
|
27155
27724
|
AnchorLinkDirective,
|
|
27156
|
-
ExpandablePanelButtonComponent,
|
|
27157
|
-
CarouselComponent], imports: [CommonModule, MatIconModule, i1$1.TranslateModule], exports: [ExpandablePanelComponent,
|
|
27725
|
+
ExpandablePanelButtonComponent], imports: [CommonModule, MatIconModule, i1$1.TranslateModule], exports: [ExpandablePanelComponent,
|
|
27158
27726
|
StickyHeaderComponent,
|
|
27159
27727
|
AnchorLinkDirective,
|
|
27160
|
-
ExpandablePanelButtonComponent
|
|
27161
|
-
CarouselComponent] }); }
|
|
27728
|
+
ExpandablePanelButtonComponent] }); }
|
|
27162
27729
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, imports: [CommonModule, MatIconModule, TranslateModule.forChild()] }); }
|
|
27163
27730
|
}
|
|
27164
27731
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, decorators: [{
|
|
@@ -27170,14 +27737,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27170
27737
|
StickyHeaderComponent,
|
|
27171
27738
|
AnchorLinkDirective,
|
|
27172
27739
|
ExpandablePanelButtonComponent,
|
|
27173
|
-
CarouselComponent,
|
|
27174
27740
|
],
|
|
27175
27741
|
exports: [
|
|
27176
27742
|
ExpandablePanelComponent,
|
|
27177
27743
|
StickyHeaderComponent,
|
|
27178
27744
|
AnchorLinkDirective,
|
|
27179
27745
|
ExpandablePanelButtonComponent,
|
|
27180
|
-
CarouselComponent,
|
|
27181
27746
|
],
|
|
27182
27747
|
}]
|
|
27183
27748
|
}] });
|
|
@@ -27187,7 +27752,7 @@ class UserPreviewComponent {
|
|
|
27187
27752
|
return (this.user.name + ' ' + this.user.surname).trim();
|
|
27188
27753
|
}
|
|
27189
27754
|
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:
|
|
27755
|
+
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
27756
|
}
|
|
27192
27757
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UserPreviewComponent, decorators: [{
|
|
27193
27758
|
type: Component,
|
|
@@ -27198,6 +27763,112 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27198
27763
|
type: Input
|
|
27199
27764
|
}] } });
|
|
27200
27765
|
|
|
27766
|
+
class TimeSincePipe {
|
|
27767
|
+
constructor(translate) {
|
|
27768
|
+
this.translate = translate;
|
|
27769
|
+
}
|
|
27770
|
+
transform(value) {
|
|
27771
|
+
if (isNaN(value.getTime())) {
|
|
27772
|
+
throw new Error('Invalid Date');
|
|
27773
|
+
}
|
|
27774
|
+
const maintenant = new Date();
|
|
27775
|
+
let locale;
|
|
27776
|
+
switch (this.translate.currentLang) {
|
|
27777
|
+
case 'fr':
|
|
27778
|
+
locale = fr$1;
|
|
27779
|
+
break;
|
|
27780
|
+
case 'de':
|
|
27781
|
+
locale = de$1;
|
|
27782
|
+
break;
|
|
27783
|
+
case 'es':
|
|
27784
|
+
locale = es$1;
|
|
27785
|
+
break;
|
|
27786
|
+
case 'it':
|
|
27787
|
+
locale = it$1;
|
|
27788
|
+
break;
|
|
27789
|
+
case 'nl':
|
|
27790
|
+
locale = nl$1;
|
|
27791
|
+
break;
|
|
27792
|
+
case 'pt':
|
|
27793
|
+
locale = pt$1;
|
|
27794
|
+
break;
|
|
27795
|
+
case 'sk':
|
|
27796
|
+
locale = sk;
|
|
27797
|
+
break;
|
|
27798
|
+
case 'en':
|
|
27799
|
+
default:
|
|
27800
|
+
locale = enUS;
|
|
27801
|
+
break;
|
|
27802
|
+
}
|
|
27803
|
+
return formatDistance(value, maintenant, {
|
|
27804
|
+
addSuffix: true,
|
|
27805
|
+
locale: locale,
|
|
27806
|
+
});
|
|
27807
|
+
}
|
|
27808
|
+
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 }); }
|
|
27809
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: TimeSincePipe, isStandalone: true, name: "timeSince" }); }
|
|
27810
|
+
}
|
|
27811
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TimeSincePipe, decorators: [{
|
|
27812
|
+
type: Pipe,
|
|
27813
|
+
args: [{
|
|
27814
|
+
name: 'timeSince',
|
|
27815
|
+
standalone: true,
|
|
27816
|
+
}]
|
|
27817
|
+
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; } });
|
|
27818
|
+
|
|
27819
|
+
class UserFeedbackItemComponent {
|
|
27820
|
+
constructor() {
|
|
27821
|
+
this.newUserFeedbackAnswer = new EventEmitter();
|
|
27822
|
+
this.isAnAnswer = false;
|
|
27823
|
+
this.newAnswer = '';
|
|
27824
|
+
this.isAnswerEmpty = true;
|
|
27825
|
+
}
|
|
27826
|
+
ngOnInit() {
|
|
27827
|
+
this.isAnAnswer = !!this.userFeedbackParent.parentUuid;
|
|
27828
|
+
}
|
|
27829
|
+
onNewAnswerValueChange() {
|
|
27830
|
+
this.isAnswerEmpty = this.newAnswer.length === 0;
|
|
27831
|
+
}
|
|
27832
|
+
publishNewAnswer() {
|
|
27833
|
+
if (this.newAnswer.trim() === '')
|
|
27834
|
+
return;
|
|
27835
|
+
const newAnswer = {
|
|
27836
|
+
...this.userFeedbackParent,
|
|
27837
|
+
uuid: undefined,
|
|
27838
|
+
published: true,
|
|
27839
|
+
comment: this.newAnswer,
|
|
27840
|
+
parentUuid: this.userFeedbackParent.uuid,
|
|
27841
|
+
authorUserId: this.activeUser?.id,
|
|
27842
|
+
authorEmail: this.activeUser?.email,
|
|
27843
|
+
date: new Date(),
|
|
27844
|
+
authorName: `${this.activeUser?.name} ${this.activeUser?.surname}`,
|
|
27845
|
+
};
|
|
27846
|
+
this.newUserFeedbackAnswer.emit(newAnswer);
|
|
27847
|
+
this.newAnswer = '';
|
|
27848
|
+
this.onNewAnswerValueChange();
|
|
27849
|
+
}
|
|
27850
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UserFeedbackItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27851
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: UserFeedbackItemComponent, selector: "gn-ui-user-feedback-item", inputs: { userFeedbackParent: "userFeedbackParent", userFeedBacksAnswers: "userFeedBacksAnswers", isActiveUserEditor: "isActiveUserEditor", activeUser: "activeUser", isLastComment: "isLastComment", isAddUserFeedbackLoading: "isAddUserFeedbackLoading" }, outputs: { newUserFeedbackAnswer: "newUserFeedbackAnswer" }, ngImport: i0, template: "<div\n *ngIf=\"userFeedbackParent.published\"\n class=\"flex flex-col bg-white rounded w-full\"\n [ngClass]=\"[isAnAnswer ? 'ps-4 ' : 'p-4']\"\n>\n <div class=\"flex flex-row\">\n <div class=\"avatar\">\n <img\n class=\"rounded-full\"\n [src]=\"userFeedbackParent.avatarUrl\"\n alt=\"avatar\"\n />\n </div>\n <div class=\"p-4 flex flex-col\">\n <span>{{ userFeedbackParent.authorName }}</span>\n <span> {{ userFeedbackParent.date | timeSince }}</span>\n </div>\n </div>\n <div data-cy=\"commentText\" class=\"mt-4 whitespace-pre-line\">\n {{ userFeedbackParent.comment }}\n </div>\n <div\n class=\"w-full\"\n *ngFor=\"let userFeedBacksAnswer of userFeedBacksAnswers; let last = last\"\n >\n <hr class=\"-mx-4 my-6\" />\n <gn-ui-user-feedback-item\n [userFeedbackParent]=\"userFeedBacksAnswer\"\n [isLastComment]=\"last\"\n ></gn-ui-user-feedback-item>\n </div>\n\n <div *ngIf=\"isActiveUserEditor\" class=\"mt-2 flex flex-col\">\n <hr class=\"-mx-4 my-4\" />\n <div\n id=\"new-comment-buttons\"\n class=\"flex flex-row gap-2 items-center justify-end\"\n >\n <gn-ui-text-area\n [disabled]=\"isAddUserFeedbackLoading\"\n [(value)]=\"newAnswer\"\n (valueChange)=\"onNewAnswerValueChange()\"\n (keyup.control.enter)=\"publishNewAnswer()\"\n [placeholder]=\"\n 'record.metadata.userFeedbacks.newAnswer.placeholder' | translate\n \"\n class=\"grow\"\n extraClass=\"bg-transparent border-0 placeholder-primary-darker text-primary-darker h-9\"\n ></gn-ui-text-area>\n <div *ngIf=\"!isAnswerEmpty\" class=\"flex flex-row justify-end\">\n <gn-ui-button\n [disabled]=\"isAddUserFeedbackLoading\"\n [type]=\"'outline'\"\n (buttonClick)=\"publishNewAnswer()\"\n [title]=\"\n 'record.metadata.userFeedbacks.newAnswer.buttonTitle' | translate\n \"\n extraClass=\"!p-[0.5em] text-primary-darker border-primary-darker h-9\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"!isAddUserFeedbackLoading\"\n >\n send\n </mat-icon>\n <ng-container *ngIf=\"isAddUserFeedbackLoading\">\n <div class=\"flex justify-center w-full\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n </gn-ui-button>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: SpinningLoaderComponent, selector: "gn-ui-spinning-loader" }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "component", type: UserFeedbackItemComponent, selector: "gn-ui-user-feedback-item", inputs: ["userFeedbackParent", "userFeedBacksAnswers", "isActiveUserEditor", "activeUser", "isLastComment", "isAddUserFeedbackLoading"], outputs: ["newUserFeedbackAnswer"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "pipe", type: TimeSincePipe, name: "timeSince" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27852
|
+
}
|
|
27853
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UserFeedbackItemComponent, decorators: [{
|
|
27854
|
+
type: Component,
|
|
27855
|
+
args: [{ selector: 'gn-ui-user-feedback-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"userFeedbackParent.published\"\n class=\"flex flex-col bg-white rounded w-full\"\n [ngClass]=\"[isAnAnswer ? 'ps-4 ' : 'p-4']\"\n>\n <div class=\"flex flex-row\">\n <div class=\"avatar\">\n <img\n class=\"rounded-full\"\n [src]=\"userFeedbackParent.avatarUrl\"\n alt=\"avatar\"\n />\n </div>\n <div class=\"p-4 flex flex-col\">\n <span>{{ userFeedbackParent.authorName }}</span>\n <span> {{ userFeedbackParent.date | timeSince }}</span>\n </div>\n </div>\n <div data-cy=\"commentText\" class=\"mt-4 whitespace-pre-line\">\n {{ userFeedbackParent.comment }}\n </div>\n <div\n class=\"w-full\"\n *ngFor=\"let userFeedBacksAnswer of userFeedBacksAnswers; let last = last\"\n >\n <hr class=\"-mx-4 my-6\" />\n <gn-ui-user-feedback-item\n [userFeedbackParent]=\"userFeedBacksAnswer\"\n [isLastComment]=\"last\"\n ></gn-ui-user-feedback-item>\n </div>\n\n <div *ngIf=\"isActiveUserEditor\" class=\"mt-2 flex flex-col\">\n <hr class=\"-mx-4 my-4\" />\n <div\n id=\"new-comment-buttons\"\n class=\"flex flex-row gap-2 items-center justify-end\"\n >\n <gn-ui-text-area\n [disabled]=\"isAddUserFeedbackLoading\"\n [(value)]=\"newAnswer\"\n (valueChange)=\"onNewAnswerValueChange()\"\n (keyup.control.enter)=\"publishNewAnswer()\"\n [placeholder]=\"\n 'record.metadata.userFeedbacks.newAnswer.placeholder' | translate\n \"\n class=\"grow\"\n extraClass=\"bg-transparent border-0 placeholder-primary-darker text-primary-darker h-9\"\n ></gn-ui-text-area>\n <div *ngIf=\"!isAnswerEmpty\" class=\"flex flex-row justify-end\">\n <gn-ui-button\n [disabled]=\"isAddUserFeedbackLoading\"\n [type]=\"'outline'\"\n (buttonClick)=\"publishNewAnswer()\"\n [title]=\"\n 'record.metadata.userFeedbacks.newAnswer.buttonTitle' | translate\n \"\n extraClass=\"!p-[0.5em] text-primary-darker border-primary-darker h-9\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"!isAddUserFeedbackLoading\"\n >\n send\n </mat-icon>\n <ng-container *ngIf=\"isAddUserFeedbackLoading\">\n <div class=\"flex justify-center w-full\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n </gn-ui-button>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
27856
|
+
}], propDecorators: { userFeedbackParent: [{
|
|
27857
|
+
type: Input
|
|
27858
|
+
}], userFeedBacksAnswers: [{
|
|
27859
|
+
type: Input
|
|
27860
|
+
}], isActiveUserEditor: [{
|
|
27861
|
+
type: Input
|
|
27862
|
+
}], activeUser: [{
|
|
27863
|
+
type: Input
|
|
27864
|
+
}], isLastComment: [{
|
|
27865
|
+
type: Input
|
|
27866
|
+
}], isAddUserFeedbackLoading: [{
|
|
27867
|
+
type: Input
|
|
27868
|
+
}], newUserFeedbackAnswer: [{
|
|
27869
|
+
type: Output
|
|
27870
|
+
}] } });
|
|
27871
|
+
|
|
27201
27872
|
class UiElementsModule {
|
|
27202
27873
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
27203
27874
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, declarations: [MetadataInfoComponent,
|
|
@@ -27205,7 +27876,6 @@ class UiElementsModule {
|
|
|
27205
27876
|
DownloadItemComponent,
|
|
27206
27877
|
DownloadsListComponent,
|
|
27207
27878
|
ApiCardComponent,
|
|
27208
|
-
LinkCardComponent,
|
|
27209
27879
|
RelatedRecordCardComponent,
|
|
27210
27880
|
MetadataContactComponent,
|
|
27211
27881
|
MetadataCatalogComponent,
|
|
@@ -27219,6 +27889,7 @@ class UiElementsModule {
|
|
|
27219
27889
|
PaginationButtonsComponent,
|
|
27220
27890
|
MaxLinesComponent,
|
|
27221
27891
|
RecordApiFormComponent,
|
|
27892
|
+
UserFeedbackItemComponent,
|
|
27222
27893
|
ImageOverlayPreviewComponent], imports: [CommonModule,
|
|
27223
27894
|
MatIconModule,
|
|
27224
27895
|
MatTooltipModule,
|
|
@@ -27229,12 +27900,12 @@ class UiElementsModule {
|
|
|
27229
27900
|
FormsModule,
|
|
27230
27901
|
NgOptimizedImage,
|
|
27231
27902
|
MarkdownParserComponent,
|
|
27232
|
-
ThumbnailComponent
|
|
27903
|
+
ThumbnailComponent,
|
|
27904
|
+
TimeSincePipe], exports: [MetadataInfoComponent,
|
|
27233
27905
|
ContentGhostComponent,
|
|
27234
27906
|
DownloadItemComponent,
|
|
27235
27907
|
DownloadsListComponent,
|
|
27236
27908
|
ApiCardComponent,
|
|
27237
|
-
LinkCardComponent,
|
|
27238
27909
|
RelatedRecordCardComponent,
|
|
27239
27910
|
MetadataContactComponent,
|
|
27240
27911
|
MetadataCatalogComponent,
|
|
@@ -27249,6 +27920,7 @@ class UiElementsModule {
|
|
|
27249
27920
|
MaxLinesComponent,
|
|
27250
27921
|
RecordApiFormComponent,
|
|
27251
27922
|
MarkdownParserComponent,
|
|
27923
|
+
UserFeedbackItemComponent,
|
|
27252
27924
|
ImageOverlayPreviewComponent] }); }
|
|
27253
27925
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, imports: [CommonModule,
|
|
27254
27926
|
MatIconModule,
|
|
@@ -27279,6 +27951,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27279
27951
|
NgOptimizedImage,
|
|
27280
27952
|
MarkdownParserComponent,
|
|
27281
27953
|
ThumbnailComponent,
|
|
27954
|
+
TimeSincePipe,
|
|
27282
27955
|
],
|
|
27283
27956
|
declarations: [
|
|
27284
27957
|
MetadataInfoComponent,
|
|
@@ -27286,7 +27959,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27286
27959
|
DownloadItemComponent,
|
|
27287
27960
|
DownloadsListComponent,
|
|
27288
27961
|
ApiCardComponent,
|
|
27289
|
-
LinkCardComponent,
|
|
27290
27962
|
RelatedRecordCardComponent,
|
|
27291
27963
|
MetadataContactComponent,
|
|
27292
27964
|
MetadataCatalogComponent,
|
|
@@ -27300,6 +27972,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27300
27972
|
PaginationButtonsComponent,
|
|
27301
27973
|
MaxLinesComponent,
|
|
27302
27974
|
RecordApiFormComponent,
|
|
27975
|
+
UserFeedbackItemComponent,
|
|
27303
27976
|
ImageOverlayPreviewComponent,
|
|
27304
27977
|
],
|
|
27305
27978
|
exports: [
|
|
@@ -27308,7 +27981,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27308
27981
|
DownloadItemComponent,
|
|
27309
27982
|
DownloadsListComponent,
|
|
27310
27983
|
ApiCardComponent,
|
|
27311
|
-
LinkCardComponent,
|
|
27312
27984
|
RelatedRecordCardComponent,
|
|
27313
27985
|
MetadataContactComponent,
|
|
27314
27986
|
MetadataCatalogComponent,
|
|
@@ -27323,6 +27995,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27323
27995
|
MaxLinesComponent,
|
|
27324
27996
|
RecordApiFormComponent,
|
|
27325
27997
|
MarkdownParserComponent,
|
|
27998
|
+
UserFeedbackItemComponent,
|
|
27326
27999
|
ImageOverlayPreviewComponent,
|
|
27327
28000
|
],
|
|
27328
28001
|
}]
|
|
@@ -28576,7 +29249,7 @@ class ResultsLayoutComponent {
|
|
|
28576
29249
|
this.searchFacade.setResultsLayout(layout);
|
|
28577
29250
|
}
|
|
28578
29251
|
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" }] }); }
|
|
29252
|
+
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
29253
|
}
|
|
28581
29254
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsLayoutComponent, decorators: [{
|
|
28582
29255
|
type: Component,
|
|
@@ -28784,7 +29457,7 @@ class SortByComponent {
|
|
|
28784
29457
|
this.searchService.setSortBy(criteriaAsString.split(','));
|
|
28785
29458
|
}
|
|
28786
29459
|
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" }] }); }
|
|
29460
|
+
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
29461
|
}
|
|
28789
29462
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SortByComponent, decorators: [{
|
|
28790
29463
|
type: Component,
|
|
@@ -29652,7 +30325,7 @@ class AddLayerFromWmsComponent {
|
|
|
29652
30325
|
this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
|
|
29653
30326
|
}
|
|
29654
30327
|
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" }] }); }
|
|
30328
|
+
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
30329
|
}
|
|
29657
30330
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWmsComponent, decorators: [{
|
|
29658
30331
|
type: Component,
|
|
@@ -29803,7 +30476,7 @@ class AddLayerFromWfsComponent {
|
|
|
29803
30476
|
this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
|
|
29804
30477
|
}
|
|
29805
30478
|
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" }] }); }
|
|
30479
|
+
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
30480
|
}
|
|
29808
30481
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, decorators: [{
|
|
29809
30482
|
type: Component,
|
|
@@ -29823,7 +30496,7 @@ class LayersPanelComponent {
|
|
|
29823
30496
|
this.mapFacade.addLayer(layer);
|
|
29824
30497
|
}
|
|
29825
30498
|
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$
|
|
30499
|
+
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
30500
|
}
|
|
29828
30501
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, decorators: [{
|
|
29829
30502
|
type: Component,
|
|
@@ -30198,31 +30871,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
30198
30871
|
], 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
30872
|
}], ctorParameters: function () { return [{ type: NotificationsService }]; } });
|
|
30200
30873
|
|
|
30874
|
+
/*
|
|
30875
|
+
Metadata actions
|
|
30876
|
+
*/
|
|
30201
30877
|
const loadFullMetadata = createAction('[Metadata view] Load full metadata', props());
|
|
30202
30878
|
const setIncompleteMetadata = createAction('[Metadata view] Set incomplete metadata', props());
|
|
30203
|
-
const
|
|
30204
|
-
const
|
|
30879
|
+
const loadFullMetadataSuccess = createAction('[Metadata view] Load full metadata success', props());
|
|
30880
|
+
const loadFullMetadataFailure = createAction('[Metadata view] Load full metadata failure', props());
|
|
30881
|
+
const closeMetadata = createAction('[Metadata view] close');
|
|
30882
|
+
/*
|
|
30883
|
+
Related actions
|
|
30884
|
+
*/
|
|
30205
30885
|
const setRelated = createAction('[Metadata view] Set related records', props());
|
|
30886
|
+
/*
|
|
30887
|
+
ChartConfig actions
|
|
30888
|
+
*/
|
|
30206
30889
|
const setChartConfig = createAction('[Metadata view] Set chart config', props());
|
|
30207
|
-
|
|
30890
|
+
/*
|
|
30891
|
+
User Feedbacks actions
|
|
30892
|
+
*/
|
|
30893
|
+
const addUserFeedback = createAction('[Metadata view] Add UserFeedback', props());
|
|
30894
|
+
const addUserFeedbackSuccess = createAction('[Metadata view] Add UserFeedback Success', props());
|
|
30895
|
+
const addUserFeedbackFailure = createAction('[Metadata view] Add UserFeedback Failure', props());
|
|
30896
|
+
const loadUserFeedbacks = createAction('[Metadata view] Load UserFeedbacks', props());
|
|
30897
|
+
const loadUserFeedbacksSuccess = createAction('[Metadata view] Load UserFeedbacks Success', props());
|
|
30898
|
+
const loadUserFeedbacksFailure = createAction('[Metadata view] Load UserFeedbacks Failure', props());
|
|
30208
30899
|
|
|
30209
30900
|
var mdview_actions = /*#__PURE__*/Object.freeze({
|
|
30210
30901
|
__proto__: null,
|
|
30211
|
-
|
|
30212
|
-
|
|
30902
|
+
addUserFeedback: addUserFeedback,
|
|
30903
|
+
addUserFeedbackFailure: addUserFeedbackFailure,
|
|
30904
|
+
addUserFeedbackSuccess: addUserFeedbackSuccess,
|
|
30905
|
+
closeMetadata: closeMetadata,
|
|
30213
30906
|
loadFullMetadata: loadFullMetadata,
|
|
30214
|
-
|
|
30907
|
+
loadFullMetadataFailure: loadFullMetadataFailure,
|
|
30908
|
+
loadFullMetadataSuccess: loadFullMetadataSuccess,
|
|
30909
|
+
loadUserFeedbacks: loadUserFeedbacks,
|
|
30910
|
+
loadUserFeedbacksFailure: loadUserFeedbacksFailure,
|
|
30911
|
+
loadUserFeedbacksSuccess: loadUserFeedbacksSuccess,
|
|
30215
30912
|
setChartConfig: setChartConfig,
|
|
30216
30913
|
setIncompleteMetadata: setIncompleteMetadata,
|
|
30217
30914
|
setRelated: setRelated
|
|
30218
30915
|
});
|
|
30219
30916
|
|
|
30220
|
-
const
|
|
30221
|
-
const
|
|
30917
|
+
const METADATA_VIEW_FEATURE_STATE_KEY = 'metadataView';
|
|
30918
|
+
const initialMetadataViewState = {
|
|
30222
30919
|
error: null,
|
|
30223
30920
|
loadingFull: false,
|
|
30921
|
+
allUserFeedbacksLoading: false,
|
|
30922
|
+
addUserFeedbackLoading: false,
|
|
30224
30923
|
};
|
|
30225
|
-
const
|
|
30924
|
+
const metadataViewReducer = createReducer(initialMetadataViewState,
|
|
30925
|
+
/*
|
|
30926
|
+
Metadata reducers
|
|
30927
|
+
*/
|
|
30928
|
+
on(loadFullMetadata, (state) => ({
|
|
30226
30929
|
...state,
|
|
30227
30930
|
error: null,
|
|
30228
30931
|
loadingFull: true,
|
|
@@ -30230,38 +30933,82 @@ const mdViewReducer = createReducer(initialMdviewState, on(loadFullMetadata, (st
|
|
|
30230
30933
|
...state,
|
|
30231
30934
|
error: null,
|
|
30232
30935
|
metadata: incomplete,
|
|
30233
|
-
})), on(
|
|
30936
|
+
})), on(loadFullMetadataSuccess, (state, { full }) => ({
|
|
30234
30937
|
...state,
|
|
30235
30938
|
error: null,
|
|
30236
30939
|
metadata: full,
|
|
30237
30940
|
loadingFull: false,
|
|
30238
|
-
})), on(
|
|
30941
|
+
})), on(loadFullMetadataFailure, (state, { otherError, notFound }) => ({
|
|
30239
30942
|
...state,
|
|
30240
30943
|
error: { otherError, notFound },
|
|
30241
30944
|
loadingFull: false,
|
|
30242
|
-
})), on(
|
|
30945
|
+
})), on(closeMetadata, (state) => {
|
|
30946
|
+
const { metadata, related, userFeedbacks, ...stateWithoutMetadata } = state;
|
|
30947
|
+
return stateWithoutMetadata;
|
|
30948
|
+
}),
|
|
30949
|
+
/*
|
|
30950
|
+
Related reducers
|
|
30951
|
+
*/
|
|
30952
|
+
on(setRelated, (state, { related }) => ({
|
|
30243
30953
|
...state,
|
|
30244
30954
|
related,
|
|
30245
|
-
})),
|
|
30955
|
+
})),
|
|
30956
|
+
/*
|
|
30957
|
+
ChartConfig reducers
|
|
30958
|
+
*/
|
|
30959
|
+
on(setChartConfig, (state, { chartConfig }) => ({
|
|
30246
30960
|
...state,
|
|
30247
30961
|
chartConfig,
|
|
30248
|
-
})),
|
|
30249
|
-
|
|
30250
|
-
|
|
30251
|
-
|
|
30252
|
-
|
|
30253
|
-
|
|
30254
|
-
|
|
30962
|
+
})),
|
|
30963
|
+
/*
|
|
30964
|
+
UserFeedbacks reducers
|
|
30965
|
+
*/
|
|
30966
|
+
on(loadUserFeedbacks, (state) => ({
|
|
30967
|
+
...state,
|
|
30968
|
+
error: null,
|
|
30969
|
+
allUserFeedbacksLoading: true,
|
|
30970
|
+
})), on(addUserFeedback, (state) => ({
|
|
30971
|
+
...state,
|
|
30972
|
+
addUserFeedbackLoading: true,
|
|
30973
|
+
})), on(loadUserFeedbacksSuccess, (state, { userFeedbacks }) => ({
|
|
30974
|
+
...state,
|
|
30975
|
+
error: null,
|
|
30976
|
+
userFeedbacks: userFeedbacks,
|
|
30977
|
+
addUserFeedbackLoading: false,
|
|
30978
|
+
allUserFeedbacksLoading: false,
|
|
30979
|
+
})), on(loadUserFeedbacksFailure, (state, { otherError, notFound }) => ({
|
|
30980
|
+
...state,
|
|
30981
|
+
error: { otherError, notFound },
|
|
30982
|
+
addUserFeedbackLoading: false,
|
|
30983
|
+
allUserFeedbacksLoading: false,
|
|
30984
|
+
})));
|
|
30985
|
+
function reducer$1(metadataViewState, action) {
|
|
30986
|
+
return metadataViewReducer(metadataViewState, action);
|
|
30255
30987
|
}
|
|
30256
30988
|
|
|
30257
|
-
const getMdViewState = createFeatureSelector(
|
|
30989
|
+
const getMdViewState = createFeatureSelector(METADATA_VIEW_FEATURE_STATE_KEY);
|
|
30990
|
+
/*
|
|
30991
|
+
Metadata selectors
|
|
30992
|
+
*/
|
|
30258
30993
|
const getMetadataUuid = createSelector(getMdViewState, (state) => state.metadata ? state.metadata.uniqueIdentifier : null);
|
|
30259
30994
|
const getMetadata = createSelector(getMdViewState, (state) => state.metadata);
|
|
30260
30995
|
const getMetadataIsIncomplete = createSelector(getMdViewState, (state) => (state.metadata ? state.loadingFull : null));
|
|
30261
30996
|
const getMetadataIsLoading = createSelector(getMdViewState, (state) => state.loadingFull);
|
|
30262
30997
|
const getMetadataError = createSelector(getMdViewState, (state) => state.error);
|
|
30998
|
+
/*
|
|
30999
|
+
Related selectors
|
|
31000
|
+
*/
|
|
30263
31001
|
const getRelated = createSelector(getMdViewState, (state) => state.related);
|
|
31002
|
+
/*
|
|
31003
|
+
Metadata selectors
|
|
31004
|
+
*/
|
|
30264
31005
|
const getChartConfig = createSelector(getMdViewState, (state) => state.chartConfig);
|
|
31006
|
+
/*
|
|
31007
|
+
UserFeedback selectors
|
|
31008
|
+
*/
|
|
31009
|
+
const getUserFeedbacks = createSelector(getMdViewState, (state) => state.userFeedbacks);
|
|
31010
|
+
const getAllUserFeedbacksLoading = createSelector(getMdViewState, (state) => state.allUserFeedbacksLoading);
|
|
31011
|
+
const getAddUserFeedbacksLoading = createSelector(getMdViewState, (state) => state.addUserFeedbackLoading);
|
|
30265
31012
|
|
|
30266
31013
|
/**
|
|
30267
31014
|
* The Metadata View Facade is used to render complete metadata records.
|
|
@@ -30270,11 +31017,12 @@ const getChartConfig = createSelector(getMdViewState, (state) => state.chartConf
|
|
|
30270
31017
|
* To clear the current record use the `close()` method.
|
|
30271
31018
|
*/
|
|
30272
31019
|
class MdViewFacade {
|
|
30273
|
-
constructor(store, linkClassifier) {
|
|
31020
|
+
constructor(store, linkClassifier, avatarService) {
|
|
30274
31021
|
this.store = store;
|
|
30275
31022
|
this.linkClassifier = linkClassifier;
|
|
31023
|
+
this.avatarService = avatarService;
|
|
30276
31024
|
this.isPresent$ = this.store.pipe(select(getMetadataUuid), map$1((uuid) => !!uuid));
|
|
30277
|
-
this.
|
|
31025
|
+
this.isMetadataLoading$ = this.store.pipe(select(getMetadataIsLoading));
|
|
30278
31026
|
this.metadata$ = this.store.pipe(select(getMetadata), filter((md) => !!md));
|
|
30279
31027
|
this.isIncomplete$ = this.store.pipe(select(getMetadataIsIncomplete), filter((incomplete) => incomplete !== null));
|
|
30280
31028
|
this.error$ = this.store.pipe(select(getMetadataError));
|
|
@@ -30288,6 +31036,9 @@ class MdViewFacade {
|
|
|
30288
31036
|
this.geoDataLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.GEODATA))));
|
|
30289
31037
|
this.landingPageLinks$ = this.metadata$.pipe(map$1((record) => ('landingPage' in record ? [record.landingPage] : [])));
|
|
30290
31038
|
this.otherLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.UNKNOWN))));
|
|
31039
|
+
this.userFeedbacks$ = this.store.pipe(select(getUserFeedbacks));
|
|
31040
|
+
this.isAllUserFeedbackLoading$ = this.store.pipe(select(getAllUserFeedbacksLoading));
|
|
31041
|
+
this.isAddUserFeedbackLoading$ = this.store.pipe(select(getAddUserFeedbacksLoading));
|
|
30291
31042
|
}
|
|
30292
31043
|
/**
|
|
30293
31044
|
* This will show an incomplete record (e.g. from a search result) as a preview
|
|
@@ -30302,39 +31053,73 @@ class MdViewFacade {
|
|
|
30302
31053
|
loadFull(uuid) {
|
|
30303
31054
|
this.store.dispatch(loadFullMetadata({ uuid }));
|
|
30304
31055
|
}
|
|
30305
|
-
|
|
30306
|
-
this.store.dispatch(
|
|
31056
|
+
closeMetadata() {
|
|
31057
|
+
this.store.dispatch(closeMetadata());
|
|
30307
31058
|
}
|
|
30308
31059
|
setChartConfig(chartConfig) {
|
|
30309
31060
|
this.store.dispatch(setChartConfig({ chartConfig }));
|
|
30310
31061
|
}
|
|
30311
|
-
|
|
31062
|
+
/**
|
|
31063
|
+
* UserFeedbacks
|
|
31064
|
+
*/
|
|
31065
|
+
addUserFeedback(userFeedback) {
|
|
31066
|
+
this.store.dispatch(addUserFeedback({ userFeedback }));
|
|
31067
|
+
}
|
|
31068
|
+
loadUserFeedbacks(datasetUuid) {
|
|
31069
|
+
this.store.dispatch(loadUserFeedbacks({ datasetUuid }));
|
|
31070
|
+
}
|
|
31071
|
+
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
31072
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewFacade }); }
|
|
30313
31073
|
}
|
|
30314
31074
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewFacade, decorators: [{
|
|
30315
31075
|
type: Injectable
|
|
30316
|
-
}], ctorParameters: function () { return [{ type: i1$2.Store }, { type: LinkClassifierService }]; } });
|
|
31076
|
+
}], ctorParameters: function () { return [{ type: i1$2.Store }, { type: LinkClassifierService }, { type: AvatarServiceInterface }]; } });
|
|
30317
31077
|
|
|
30318
31078
|
class MdViewEffects {
|
|
30319
|
-
constructor(actions$, recordsRepository) {
|
|
31079
|
+
constructor(actions$, recordsRepository, platformServiceInterface) {
|
|
30320
31080
|
this.actions$ = actions$;
|
|
30321
31081
|
this.recordsRepository = recordsRepository;
|
|
30322
|
-
this.
|
|
31082
|
+
this.platformServiceInterface = platformServiceInterface;
|
|
31083
|
+
/*
|
|
31084
|
+
Metadata effects
|
|
31085
|
+
*/
|
|
31086
|
+
this.loadFullMetadata$ = createEffect(() => this.actions$.pipe(ofType(loadFullMetadata), switchMap$1(({ uuid }) => this.recordsRepository.getByUniqueIdentifier(uuid)), map$1((record) => {
|
|
30323
31087
|
if (record === null) {
|
|
30324
|
-
return
|
|
31088
|
+
return loadFullMetadataFailure({ notFound: true });
|
|
30325
31089
|
}
|
|
30326
|
-
return
|
|
30327
|
-
}), catchError((error) => of(
|
|
30328
|
-
|
|
31090
|
+
return loadFullMetadataSuccess({ full: record });
|
|
31091
|
+
}), catchError((error) => of(loadFullMetadataFailure({ otherError: error.message })))));
|
|
31092
|
+
/*
|
|
31093
|
+
Related effects
|
|
31094
|
+
*/
|
|
31095
|
+
this.loadRelatedRecords$ = createEffect(() => this.actions$.pipe(ofType(loadFullMetadataSuccess), switchMap$1(({ full }) => this.recordsRepository.getSimilarRecords(full)), map$1((related) => {
|
|
30329
31096
|
return setRelated({ related });
|
|
30330
31097
|
}), catchError((error) => of(setRelated({ related: null })))));
|
|
31098
|
+
/*
|
|
31099
|
+
UserFeedback effects
|
|
31100
|
+
*/
|
|
31101
|
+
this.loadUserFeedbacks$ = createEffect(() => this.actions$.pipe(ofType(loadUserFeedbacks), exhaustMap(({ datasetUuid }) => this.platformServiceInterface.getUserFeedbacks(datasetUuid).pipe(map$1((userFeedbacks) => loadUserFeedbacksSuccess({ userFeedbacks })), catchError((error) => of(loadUserFeedbacksFailure({
|
|
31102
|
+
otherError: error.message,
|
|
31103
|
+
})))))));
|
|
31104
|
+
this.reloadUserFeedbacks$ = createEffect(() => this.actions$.pipe(ofType(addUserFeedbackSuccess), exhaustMap(({ datasetUuid }) => this.platformServiceInterface.getUserFeedbacks(datasetUuid).pipe(map$1((userFeedbacks) => loadUserFeedbacksSuccess({ userFeedbacks })), catchError((error) => of(loadUserFeedbacksFailure({
|
|
31105
|
+
otherError: error.message,
|
|
31106
|
+
})))))));
|
|
31107
|
+
this.addUserFeedback$ = createEffect(() => this.actions$.pipe(ofType(addUserFeedback), mergeMap$1((action) => this.platformServiceInterface
|
|
31108
|
+
.postUserFeedbacks(action.userFeedback)
|
|
31109
|
+
.pipe(map$1(() => addUserFeedbackSuccess({
|
|
31110
|
+
datasetUuid: action.userFeedback.metadataUUID,
|
|
31111
|
+
})), catchError((error) => {
|
|
31112
|
+
return of(addUserFeedbackFailure({
|
|
31113
|
+
otherError: error.message,
|
|
31114
|
+
}));
|
|
31115
|
+
})))));
|
|
30331
31116
|
}
|
|
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 }); }
|
|
31117
|
+
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
31118
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewEffects }); }
|
|
30334
31119
|
}
|
|
30335
31120
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MdViewEffects, decorators: [{
|
|
30336
31121
|
type: Injectable
|
|
30337
|
-
}], ctorParameters: function () { return [{ type: i1$8.Actions }, { type: RecordsRepositoryInterface }]; } });
|
|
31122
|
+
}], ctorParameters: function () { return [{ type: i1$8.Actions }, { type: RecordsRepositoryInterface }, { type: PlatformServiceInterface }]; } });
|
|
30338
31123
|
|
|
30339
31124
|
class FigureComponent {
|
|
30340
31125
|
constructor() {
|
|
@@ -30569,7 +31354,7 @@ class TableComponent {
|
|
|
30569
31354
|
return rowIdPrefix + id;
|
|
30570
31355
|
}
|
|
30571
31356
|
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$
|
|
31357
|
+
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
31358
|
}
|
|
30574
31359
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TableComponent, decorators: [{
|
|
30575
31360
|
type: Component,
|
|
@@ -31439,6 +32224,7 @@ marker('wfs.unreachable.http');
|
|
|
31439
32224
|
marker('wfs.unreachable.unknown');
|
|
31440
32225
|
marker('wfs.featuretype.notfound');
|
|
31441
32226
|
marker('wfs.geojsongml.notsupported');
|
|
32227
|
+
marker('ogc.unreachable.unknown');
|
|
31442
32228
|
marker('dataset.error.network');
|
|
31443
32229
|
marker('dataset.error.http');
|
|
31444
32230
|
marker('dataset.error.parse');
|
|
@@ -31518,6 +32304,27 @@ class DataService {
|
|
|
31518
32304
|
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
|
|
31519
32305
|
}))));
|
|
31520
32306
|
}
|
|
32307
|
+
async getDownloadLinksFromOgcApiFeatures(ogcApiLink) {
|
|
32308
|
+
const collectionInfo = await this.getDownloadUrlsFromOgcApi(ogcApiLink.url.href);
|
|
32309
|
+
return Object.keys(collectionInfo.bulkDownloadLinks).map((downloadLink) => {
|
|
32310
|
+
return {
|
|
32311
|
+
...ogcApiLink,
|
|
32312
|
+
type: 'download',
|
|
32313
|
+
url: new URL(collectionInfo.bulkDownloadLinks[downloadLink]),
|
|
32314
|
+
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(downloadLink)),
|
|
32315
|
+
};
|
|
32316
|
+
});
|
|
32317
|
+
}
|
|
32318
|
+
async getDownloadUrlsFromOgcApi(url) {
|
|
32319
|
+
const endpoint = new OgcApiEndpoint(this.proxy.getProxiedUrl(url));
|
|
32320
|
+
return await endpoint.featureCollections
|
|
32321
|
+
.then((collections) => {
|
|
32322
|
+
return endpoint.getCollectionInfo(collections[0]);
|
|
32323
|
+
})
|
|
32324
|
+
.catch((error) => {
|
|
32325
|
+
throw new Error(`ogc.unreachable.unknown`);
|
|
32326
|
+
});
|
|
32327
|
+
}
|
|
31521
32328
|
getDownloadLinksFromEsriRest(esriRestLink) {
|
|
31522
32329
|
return ['json', 'geojson'].map((format) => ({
|
|
31523
32330
|
...esriRestLink,
|
|
@@ -31561,6 +32368,17 @@ class DataService {
|
|
|
31561
32368
|
const url = this.getDownloadUrlFromEsriRest(link.url.toString(), 'geojson');
|
|
31562
32369
|
return from(openDataset(url, 'geojson')).pipe();
|
|
31563
32370
|
}
|
|
32371
|
+
else if (link.type === 'service' &&
|
|
32372
|
+
link.accessServiceProtocol === 'ogcFeatures') {
|
|
32373
|
+
return from(this.getDownloadUrlsFromOgcApi(link.url.href)).pipe(switchMap$1((collectionInfo) => {
|
|
32374
|
+
const geojsonUrl = collectionInfo.jsonDownloadLink;
|
|
32375
|
+
return openDataset(geojsonUrl, 'geojson');
|
|
32376
|
+
}), tap$1((url) => {
|
|
32377
|
+
if (url === null) {
|
|
32378
|
+
throw new Error('wfs.geojsongml.notsupported');
|
|
32379
|
+
}
|
|
32380
|
+
}));
|
|
32381
|
+
}
|
|
31564
32382
|
return throwError(() => 'protocol not supported');
|
|
31565
32383
|
}
|
|
31566
32384
|
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 +32605,7 @@ class ChartViewComponent {
|
|
|
31787
32605
|
this.changeDetector.detectChanges();
|
|
31788
32606
|
}
|
|
31789
32607
|
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 }); }
|
|
32608
|
+
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
32609
|
}
|
|
31792
32610
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ChartViewComponent, decorators: [{
|
|
31793
32611
|
type: Component,
|
|
@@ -32019,7 +32837,8 @@ class MapViewComponent {
|
|
|
32019
32837
|
}
|
|
32020
32838
|
else if ((link.type === 'service' &&
|
|
32021
32839
|
(link.accessServiceProtocol === 'wfs' ||
|
|
32022
|
-
link.accessServiceProtocol === 'esriRest'
|
|
32840
|
+
link.accessServiceProtocol === 'esriRest' ||
|
|
32841
|
+
link.accessServiceProtocol === 'ogcFeatures')) ||
|
|
32023
32842
|
link.type === 'download') {
|
|
32024
32843
|
return this.dataService.readAsGeoJson(link).pipe(map$1((data) => ({
|
|
32025
32844
|
type: MapContextLayerTypeEnum.GEOJSON,
|
|
@@ -32032,7 +32851,7 @@ class MapViewComponent {
|
|
|
32032
32851
|
this.selectedLinkIndex$.next(link);
|
|
32033
32852
|
}
|
|
32034
32853
|
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 }); }
|
|
32854
|
+
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
32855
|
}
|
|
32037
32856
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, decorators: [{
|
|
32038
32857
|
type: Component,
|
|
@@ -32070,7 +32889,7 @@ class DataViewComponent {
|
|
|
32070
32889
|
this.selectedLink$.next(link);
|
|
32071
32890
|
}
|
|
32072
32891
|
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 }); }
|
|
32892
|
+
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
32893
|
}
|
|
32075
32894
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DataViewComponent, decorators: [{
|
|
32076
32895
|
type: Component,
|
|
@@ -32164,7 +32983,7 @@ class OrganisationsFilterComponent {
|
|
|
32164
32983
|
this.filterByValueChange.next(inputValue);
|
|
32165
32984
|
}
|
|
32166
32985
|
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 }); }
|
|
32986
|
+
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
32987
|
}
|
|
32169
32988
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationsFilterComponent, decorators: [{
|
|
32170
32989
|
type: Component,
|
|
@@ -32204,7 +33023,7 @@ class LanguageSwitcherComponent {
|
|
|
32204
33023
|
this.translate.use(value);
|
|
32205
33024
|
}
|
|
32206
33025
|
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"] }] }); }
|
|
33026
|
+
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
33027
|
}
|
|
32209
33028
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
|
|
32210
33029
|
type: Component,
|
|
@@ -32617,7 +33436,7 @@ class DataViewShareComponent {
|
|
|
32617
33436
|
this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
|
|
32618
33437
|
}
|
|
32619
33438
|
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$
|
|
33439
|
+
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
33440
|
}
|
|
32622
33441
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DataViewShareComponent, decorators: [{
|
|
32623
33442
|
type: Component,
|
|
@@ -32653,7 +33472,7 @@ class FeatureRecordModule {
|
|
|
32653
33472
|
DataViewWebComponentComponent,
|
|
32654
33473
|
DataViewShareComponent] }); }
|
|
32655
33474
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureRecordModule, providers: [MdViewFacade], imports: [CommonModule,
|
|
32656
|
-
StoreModule.forFeature(
|
|
33475
|
+
StoreModule.forFeature(METADATA_VIEW_FEATURE_STATE_KEY, reducer$1),
|
|
32657
33476
|
EffectsModule.forFeature([MdViewEffects]),
|
|
32658
33477
|
UiLayoutModule,
|
|
32659
33478
|
FeatureMapModule,
|
|
@@ -32681,7 +33500,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
32681
33500
|
],
|
|
32682
33501
|
imports: [
|
|
32683
33502
|
CommonModule,
|
|
32684
|
-
StoreModule.forFeature(
|
|
33503
|
+
StoreModule.forFeature(METADATA_VIEW_FEATURE_STATE_KEY, reducer$1),
|
|
32685
33504
|
EffectsModule.forFeature([MdViewEffects]),
|
|
32686
33505
|
UiLayoutModule,
|
|
32687
33506
|
FeatureMapModule,
|
|
@@ -32746,6 +33565,27 @@ const DEFAULT_FIELDS = [
|
|
|
32746
33565
|
},
|
|
32747
33566
|
onSaveProcess: '${dateNow()}',
|
|
32748
33567
|
},
|
|
33568
|
+
{
|
|
33569
|
+
model: 'licenses',
|
|
33570
|
+
formFieldConfig: {
|
|
33571
|
+
labelKey: marker('editor.record.form.license'),
|
|
33572
|
+
type: 'list',
|
|
33573
|
+
},
|
|
33574
|
+
},
|
|
33575
|
+
{
|
|
33576
|
+
model: 'resourceUpdated',
|
|
33577
|
+
formFieldConfig: {
|
|
33578
|
+
labelKey: marker('editor.record.form.resourceUpdated'),
|
|
33579
|
+
type: 'date',
|
|
33580
|
+
},
|
|
33581
|
+
},
|
|
33582
|
+
{
|
|
33583
|
+
model: 'updateFrequency',
|
|
33584
|
+
formFieldConfig: {
|
|
33585
|
+
labelKey: marker('editor.record.form.updateFrequency'),
|
|
33586
|
+
type: 'text',
|
|
33587
|
+
},
|
|
33588
|
+
},
|
|
32749
33589
|
];
|
|
32750
33590
|
|
|
32751
33591
|
const EDITOR_FEATURE_KEY = 'editor';
|
|
@@ -33130,7 +33970,7 @@ class WizardFieldComponent {
|
|
|
33130
33970
|
deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
|
|
33131
33971
|
},
|
|
33132
33972
|
{ 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:
|
|
33973
|
+
], 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
33974
|
}
|
|
33135
33975
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: WizardFieldComponent, decorators: [{
|
|
33136
33976
|
type: Component,
|
|
@@ -33400,7 +34240,7 @@ class FormFieldRichComponent {
|
|
|
33400
34240
|
this.control.setValue(textContent);
|
|
33401
34241
|
}
|
|
33402
34242
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldRichComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33403
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldRichComponent, isStandalone: true, selector: "gn-ui-form-field-rich", inputs: { control: "control", label: "label", hint: "hint", helperText: "helperText", placeholder: "placeholder" }, ngImport: i0, template: "<gn-ui-form-field-wrapper [label]=\"label\" [hint]=\"hint\">\n <gn-ui-button\n form-field-interaction\n [extraClass]=\"getButtonExtraClass()\"\n (buttonClick)=\"togglePreview()\"\n >\n <span class=\"material-symbols-outlined mr-1 icon-small\">{{\n preview ? 'visibility' : 'visibility_off'\n }}</span>\n {{ preview ? 'WYSIWYG' : 'Markdown' }}\n </gn-ui-button>\n <gn-ui-markdown-editor\n class=\"h-full\"\n [preview]=\"preview\"\n [helperText]=\"helperText\"\n [placeholder]=\"placeholder\"\n [textContent]=\"control.value\"\n (textContentChanged)=\"handleTextContentChanged($event)\"\n ></gn-ui-markdown-editor>\n</gn-ui-form-field-wrapper>\n", styles: ["
|
|
34243
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldRichComponent, isStandalone: true, selector: "gn-ui-form-field-rich", inputs: { control: "control", label: "label", hint: "hint", helperText: "helperText", placeholder: "placeholder" }, ngImport: i0, template: "<gn-ui-form-field-wrapper [label]=\"label\" [hint]=\"hint\">\n <gn-ui-button\n form-field-interaction\n [extraClass]=\"getButtonExtraClass()\"\n (buttonClick)=\"togglePreview()\"\n >\n <span class=\"material-symbols-outlined mr-1 gn-ui-icon-small\">{{\n preview ? 'visibility' : 'visibility_off'\n }}</span>\n {{ preview ? 'WYSIWYG' : 'Markdown' }}\n </gn-ui-button>\n <gn-ui-markdown-editor\n class=\"h-full\"\n [preview]=\"preview\"\n [helperText]=\"helperText\"\n [placeholder]=\"placeholder\"\n [textContent]=\"control.value\"\n (textContentChanged)=\"handleTextContentChanged($event)\"\n ></gn-ui-markdown-editor>\n</gn-ui-form-field-wrapper>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: MarkdownEditorComponent, selector: "gn-ui-markdown-editor", inputs: ["preview", "helperText", "placeholder", "textContent"], outputs: ["textContentChanged"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
33404
34244
|
}
|
|
33405
34245
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldRichComponent, decorators: [{
|
|
33406
34246
|
type: Component,
|
|
@@ -33410,7 +34250,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
33410
34250
|
MarkdownEditorComponent,
|
|
33411
34251
|
FormFieldWrapperComponent,
|
|
33412
34252
|
ButtonComponent,
|
|
33413
|
-
], template: "<gn-ui-form-field-wrapper [label]=\"label\" [hint]=\"hint\">\n <gn-ui-button\n form-field-interaction\n [extraClass]=\"getButtonExtraClass()\"\n (buttonClick)=\"togglePreview()\"\n >\n <span class=\"material-symbols-outlined mr-1 icon-small\">{{\n preview ? 'visibility' : 'visibility_off'\n }}</span>\n {{ preview ? 'WYSIWYG' : 'Markdown' }}\n </gn-ui-button>\n <gn-ui-markdown-editor\n class=\"h-full\"\n [preview]=\"preview\"\n [helperText]=\"helperText\"\n [placeholder]=\"placeholder\"\n [textContent]=\"control.value\"\n (textContentChanged)=\"handleTextContentChanged($event)\"\n ></gn-ui-markdown-editor>\n</gn-ui-form-field-wrapper>\n"
|
|
34253
|
+
], template: "<gn-ui-form-field-wrapper [label]=\"label\" [hint]=\"hint\">\n <gn-ui-button\n form-field-interaction\n [extraClass]=\"getButtonExtraClass()\"\n (buttonClick)=\"togglePreview()\"\n >\n <span class=\"material-symbols-outlined mr-1 gn-ui-icon-small\">{{\n preview ? 'visibility' : 'visibility_off'\n }}</span>\n {{ preview ? 'WYSIWYG' : 'Markdown' }}\n </gn-ui-button>\n <gn-ui-markdown-editor\n class=\"h-full\"\n [preview]=\"preview\"\n [helperText]=\"helperText\"\n [placeholder]=\"placeholder\"\n [textContent]=\"control.value\"\n (textContentChanged)=\"handleTextContentChanged($event)\"\n ></gn-ui-markdown-editor>\n</gn-ui-form-field-wrapper>\n" }]
|
|
33414
34254
|
}], propDecorators: { control: [{
|
|
33415
34255
|
type: Input
|
|
33416
34256
|
}], label: [{
|
|
@@ -33459,6 +34299,174 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
33459
34299
|
args: [{ selector: 'gn-ui-form-field-temporal-extent', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<p>form-field-temporal-extent works!</p>\n" }]
|
|
33460
34300
|
}] });
|
|
33461
34301
|
|
|
34302
|
+
class FormFieldLicenseComponent {
|
|
34303
|
+
constructor() {
|
|
34304
|
+
this.choices = [
|
|
34305
|
+
{
|
|
34306
|
+
value: 'cc-by',
|
|
34307
|
+
label: marker('editor.record.form.license.cc-by'),
|
|
34308
|
+
},
|
|
34309
|
+
{
|
|
34310
|
+
value: 'cc-by-sa',
|
|
34311
|
+
label: marker('editor.record.form.license.cc-by-sa'),
|
|
34312
|
+
},
|
|
34313
|
+
{
|
|
34314
|
+
value: 'cc-zero',
|
|
34315
|
+
label: marker('editor.record.form.license.cc-zero'),
|
|
34316
|
+
},
|
|
34317
|
+
{
|
|
34318
|
+
value: 'etalab',
|
|
34319
|
+
label: marker('editor.record.form.license.etalab'),
|
|
34320
|
+
},
|
|
34321
|
+
{
|
|
34322
|
+
value: 'etalab-v2',
|
|
34323
|
+
label: marker('editor.record.form.license.etalab-v2'),
|
|
34324
|
+
},
|
|
34325
|
+
{
|
|
34326
|
+
value: 'odbl',
|
|
34327
|
+
label: marker('editor.record.form.license.odbl'),
|
|
34328
|
+
},
|
|
34329
|
+
{
|
|
34330
|
+
value: 'odc-by',
|
|
34331
|
+
label: marker('editor.record.form.license.odc-by'),
|
|
34332
|
+
},
|
|
34333
|
+
{
|
|
34334
|
+
value: 'pddl',
|
|
34335
|
+
label: marker('editor.record.form.license.pddl'),
|
|
34336
|
+
},
|
|
34337
|
+
{
|
|
34338
|
+
value: 'unknown',
|
|
34339
|
+
label: marker('editor.record.form.license.unknown'),
|
|
34340
|
+
},
|
|
34341
|
+
];
|
|
34342
|
+
}
|
|
34343
|
+
get selected() {
|
|
34344
|
+
return this.control.value[0]?.text;
|
|
34345
|
+
}
|
|
34346
|
+
onSelectValue(value) {
|
|
34347
|
+
this.control.setValue([{ text: value }]);
|
|
34348
|
+
}
|
|
34349
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldLicenseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34350
|
+
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 }); }
|
|
34351
|
+
}
|
|
34352
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldLicenseComponent, decorators: [{
|
|
34353
|
+
type: Component,
|
|
34354
|
+
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" }]
|
|
34355
|
+
}], propDecorators: { control: [{
|
|
34356
|
+
type: Input
|
|
34357
|
+
}], label: [{
|
|
34358
|
+
type: Input
|
|
34359
|
+
}] } });
|
|
34360
|
+
|
|
34361
|
+
class FormFieldResourceUpdatedComponent {
|
|
34362
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldResourceUpdatedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34363
|
+
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 }); }
|
|
34364
|
+
}
|
|
34365
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldResourceUpdatedComponent, decorators: [{
|
|
34366
|
+
type: Component,
|
|
34367
|
+
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" }]
|
|
34368
|
+
}], propDecorators: { control: [{
|
|
34369
|
+
type: Input
|
|
34370
|
+
}] } });
|
|
34371
|
+
|
|
34372
|
+
class FormFieldUpdateFrequencyComponent {
|
|
34373
|
+
get planned() {
|
|
34374
|
+
return this.control.value !== 'notPlanned';
|
|
34375
|
+
}
|
|
34376
|
+
constructor(translateService) {
|
|
34377
|
+
this.translateService = translateService;
|
|
34378
|
+
this.choices = [
|
|
34379
|
+
{
|
|
34380
|
+
value: 'day.1',
|
|
34381
|
+
label: this.translateService.instant('domain.record.updateFrequency.day', {
|
|
34382
|
+
count: 1,
|
|
34383
|
+
}),
|
|
34384
|
+
},
|
|
34385
|
+
{
|
|
34386
|
+
value: 'day.2',
|
|
34387
|
+
label: this.translateService.instant('domain.record.updateFrequency.day', {
|
|
34388
|
+
count: 2,
|
|
34389
|
+
}),
|
|
34390
|
+
},
|
|
34391
|
+
{
|
|
34392
|
+
value: 'week.1',
|
|
34393
|
+
label: this.translateService.instant('domain.record.updateFrequency.week', {
|
|
34394
|
+
count: 1,
|
|
34395
|
+
}),
|
|
34396
|
+
},
|
|
34397
|
+
{
|
|
34398
|
+
value: 'week.2',
|
|
34399
|
+
label: this.translateService.instant('domain.record.updateFrequency.week', {
|
|
34400
|
+
count: 2,
|
|
34401
|
+
}),
|
|
34402
|
+
},
|
|
34403
|
+
{
|
|
34404
|
+
value: 'month.1',
|
|
34405
|
+
label: this.translateService.instant('domain.record.updateFrequency.month', {
|
|
34406
|
+
count: 1,
|
|
34407
|
+
}),
|
|
34408
|
+
},
|
|
34409
|
+
{
|
|
34410
|
+
value: 'month.2',
|
|
34411
|
+
label: this.translateService.instant('domain.record.updateFrequency.month', {
|
|
34412
|
+
count: 2,
|
|
34413
|
+
}),
|
|
34414
|
+
},
|
|
34415
|
+
{
|
|
34416
|
+
value: 'year.1',
|
|
34417
|
+
label: this.translateService.instant('domain.record.updateFrequency.year', {
|
|
34418
|
+
count: 1,
|
|
34419
|
+
}),
|
|
34420
|
+
},
|
|
34421
|
+
{
|
|
34422
|
+
value: 'year.2',
|
|
34423
|
+
label: this.translateService.instant('domain.record.updateFrequency.year', {
|
|
34424
|
+
count: 2,
|
|
34425
|
+
}),
|
|
34426
|
+
},
|
|
34427
|
+
];
|
|
34428
|
+
}
|
|
34429
|
+
ngOnInit() {
|
|
34430
|
+
const updatedTimes = this.control.value?.updatedTimes;
|
|
34431
|
+
const per = this.control.value?.per;
|
|
34432
|
+
if (updatedTimes && updatedTimes !== 1 && updatedTimes !== 2) {
|
|
34433
|
+
this.choices = [
|
|
34434
|
+
{
|
|
34435
|
+
value: `${per}.${updatedTimes}`,
|
|
34436
|
+
label: this.translateService.instant(`domain.record.updateFrequency.${per}`, {
|
|
34437
|
+
count: updatedTimes,
|
|
34438
|
+
}),
|
|
34439
|
+
},
|
|
34440
|
+
...this.choices,
|
|
34441
|
+
];
|
|
34442
|
+
}
|
|
34443
|
+
}
|
|
34444
|
+
onPlannedToggled() {
|
|
34445
|
+
if (this.planned) {
|
|
34446
|
+
this.control.setValue('notPlanned');
|
|
34447
|
+
}
|
|
34448
|
+
else {
|
|
34449
|
+
this.control.setValue({ updatedTimes: 1, per: 'day' });
|
|
34450
|
+
}
|
|
34451
|
+
}
|
|
34452
|
+
get selectedFrequency() {
|
|
34453
|
+
const { updatedTimes, per } = this.control.value;
|
|
34454
|
+
return `${per}.${updatedTimes}`;
|
|
34455
|
+
}
|
|
34456
|
+
onSelectFrequencyValue(value) {
|
|
34457
|
+
const split = value.split('.');
|
|
34458
|
+
this.control.setValue({ updatedTimes: Number(split[1]), per: split[0] });
|
|
34459
|
+
}
|
|
34460
|
+
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 }); }
|
|
34461
|
+
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 }); }
|
|
34462
|
+
}
|
|
34463
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldUpdateFrequencyComponent, decorators: [{
|
|
34464
|
+
type: Component,
|
|
34465
|
+
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" }]
|
|
34466
|
+
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; }, propDecorators: { control: [{
|
|
34467
|
+
type: Input
|
|
34468
|
+
}] } });
|
|
34469
|
+
|
|
33462
34470
|
class FormFieldComponent {
|
|
33463
34471
|
set value(v) {
|
|
33464
34472
|
this.formControl.setValue(v, {
|
|
@@ -33469,6 +34477,9 @@ class FormFieldComponent {
|
|
|
33469
34477
|
this.formControl = new FormControl();
|
|
33470
34478
|
this.valueChange = this.formControl.valueChanges;
|
|
33471
34479
|
}
|
|
34480
|
+
focusTitleInput() {
|
|
34481
|
+
this.titleInput.nativeElement.children[0].focus();
|
|
34482
|
+
}
|
|
33472
34483
|
get simpleType() {
|
|
33473
34484
|
return this.config.type;
|
|
33474
34485
|
}
|
|
@@ -33504,15 +34515,39 @@ class FormFieldComponent {
|
|
|
33504
34515
|
get isFieldInvalid() {
|
|
33505
34516
|
return !this.config.locked && this.config.invalid;
|
|
33506
34517
|
}
|
|
34518
|
+
get isTitle() {
|
|
34519
|
+
return this.model === 'title';
|
|
34520
|
+
}
|
|
33507
34521
|
get isAbstract() {
|
|
33508
34522
|
return this.model === 'abstract';
|
|
33509
34523
|
}
|
|
34524
|
+
get isLicenses() {
|
|
34525
|
+
return this.model === 'licenses';
|
|
34526
|
+
}
|
|
34527
|
+
get isResourceUpdated() {
|
|
34528
|
+
return this.model === 'resourceUpdated';
|
|
34529
|
+
}
|
|
34530
|
+
get isUpdateFrequency() {
|
|
34531
|
+
return this.model === 'updateFrequency';
|
|
34532
|
+
}
|
|
34533
|
+
get withoutWrapper() {
|
|
34534
|
+
return this.model === 'title' || this.model === 'abstract';
|
|
34535
|
+
}
|
|
33510
34536
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33511
|
-
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" }, ngImport: i0, template: "<div class=\"flex flex-col h-full\">\n <
|
|
34537
|
+
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 }); }
|
|
33512
34538
|
}
|
|
33513
34539
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldComponent, decorators: [{
|
|
33514
34540
|
type: Component,
|
|
33515
34541
|
args: [{ selector: 'gn-ui-form-field', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
34542
|
+
CommonModule,
|
|
34543
|
+
ReactiveFormsModule,
|
|
34544
|
+
EditableLabelDirective,
|
|
34545
|
+
MatIconModule,
|
|
34546
|
+
MatTooltipModule,
|
|
34547
|
+
FormFieldWrapperComponent,
|
|
34548
|
+
FormFieldLicenseComponent,
|
|
34549
|
+
FormFieldResourceUpdatedComponent,
|
|
34550
|
+
FormFieldUpdateFrequencyComponent,
|
|
33516
34551
|
FormFieldSimpleComponent,
|
|
33517
34552
|
FormFieldRichComponent,
|
|
33518
34553
|
FormFieldObjectComponent,
|
|
@@ -33520,11 +34555,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
33520
34555
|
FormFieldTemporalExtentComponent,
|
|
33521
34556
|
FormFieldFileComponent,
|
|
33522
34557
|
FormFieldArrayComponent,
|
|
33523
|
-
CommonModule,
|
|
33524
|
-
ReactiveFormsModule,
|
|
33525
34558
|
TranslateModule,
|
|
33526
|
-
|
|
33527
|
-
], template: "<div class=\"flex flex-col h-full\">\n <div class=\"mb-2 flex flex-row\">\n <label class=\"grow\">\n <span class=\"font-medium field-label\">{{\n config.labelKey | translate\n }}</span>\n <span *ngIf=\"config.hintKey\" class=\"text-gray-900 text-sm\">\n - {{ config.hintKey | translate }}\n </span>\n </label>\n <mat-icon\n *ngIf=\"isFieldOk\"\n class=\"material-symbols-outlined text-[#c6d950] icon-ok\"\n >check_circle</mat-icon\n >\n <mat-icon\n *ngIf=\"isFieldLocked\"\n class=\"material-symbols-outlined text-blue-400 icon-locked\"\n >lock</mat-icon\n >\n <mat-icon\n *ngIf=\"isFieldInvalid\"\n class=\"material-symbols-outlined text-pink-500 icon-invalid\"\n >cancel</mat-icon\n >\n </div>\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=\"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=\"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</div>\n" }]
|
|
34559
|
+
], 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" }]
|
|
33528
34560
|
}], ctorParameters: function () { return []; }, propDecorators: { model: [{
|
|
33529
34561
|
type: Input
|
|
33530
34562
|
}], config: [{
|
|
@@ -33533,6 +34565,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
33533
34565
|
type: Input
|
|
33534
34566
|
}], valueChange: [{
|
|
33535
34567
|
type: Output
|
|
34568
|
+
}], titleInput: [{
|
|
34569
|
+
type: ViewChild,
|
|
34570
|
+
args: ['titleInput']
|
|
33536
34571
|
}] } });
|
|
33537
34572
|
|
|
33538
34573
|
class RecordFormComponent {
|
|
@@ -33554,17 +34589,7 @@ class RecordFormComponent {
|
|
|
33554
34589
|
}
|
|
33555
34590
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, decorators: [{
|
|
33556
34591
|
type: Component,
|
|
33557
|
-
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
33558
|
-
CommonModule,
|
|
33559
|
-
FormFieldComponent,
|
|
33560
|
-
FormFieldArrayComponent,
|
|
33561
|
-
FormFieldFileComponent,
|
|
33562
|
-
FormFieldObjectComponent,
|
|
33563
|
-
FormFieldRichComponent,
|
|
33564
|
-
FormFieldSimpleComponent,
|
|
33565
|
-
FormFieldSpatialExtentComponent,
|
|
33566
|
-
FormFieldTemporalExtentComponent,
|
|
33567
|
-
], template: "<div class=\"flex flex-col gap-6 p-6\">\n <ng-container *ngFor=\"let field of fields$ | async; trackBy: fieldTracker\">\n <gn-ui-form-field\n *ngIf=\"field.config.formFieldConfig && !field.config.hidden\"\n [model]=\"field.config.model\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field, $event)\"\n ></gn-ui-form-field>\n </ng-container>\n</div>\n" }]
|
|
34592
|
+
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormFieldComponent], template: "<div class=\"flex flex-col gap-6 p-6\">\n <ng-container *ngFor=\"let field of fields$ | async; trackBy: fieldTracker\">\n <gn-ui-form-field\n *ngIf=\"field.config.formFieldConfig && !field.config.hidden\"\n [model]=\"field.config.model\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field, $event)\"\n ></gn-ui-form-field>\n </ng-container>\n</div>\n" }]
|
|
33568
34593
|
}], ctorParameters: function () { return [{ type: EditorFacade }]; } });
|
|
33569
34594
|
|
|
33570
34595
|
const ROUTER_STATE_KEY = 'router';
|
|
@@ -33862,7 +34887,7 @@ class RouterEffects {
|
|
|
33862
34887
|
* the search results happens
|
|
33863
34888
|
*/
|
|
33864
34889
|
this.navigateToSearch$ = createEffect(() => this._actions$.pipe(navigation(this.routerConfig.searchRouteComponent, {
|
|
33865
|
-
run: () =>
|
|
34890
|
+
run: () => closeMetadata(),
|
|
33866
34891
|
})));
|
|
33867
34892
|
this.navigateBack$ = createEffect(() => this._actions$.pipe(ofType(backAction), tap$1(() => this._location.back())), { dispatch: false });
|
|
33868
34893
|
this.navigateForward$ = createEffect(() => this._actions$.pipe(ofType(forwardAction), tap$1(() => this._location.forward())), { dispatch: false });
|
|
@@ -33889,7 +34914,7 @@ class DefaultRouterModule {
|
|
|
33889
34914
|
};
|
|
33890
34915
|
}
|
|
33891
34916
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DefaultRouterModule, deps: [{ token: RouterService }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
33892
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: DefaultRouterModule, declarations: [SearchRouterContainerDirective], imports: [i1$2.StoreFeatureModule, i3$
|
|
34917
|
+
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] }); }
|
|
33893
34918
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DefaultRouterModule, providers: [
|
|
33894
34919
|
RouterFacade,
|
|
33895
34920
|
{
|
|
@@ -33932,5 +34957,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
33932
34957
|
* Generated bundle index. Do not edit.
|
|
33933
34958
|
*/
|
|
33934
34959
|
|
|
33935
|
-
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 };
|
|
34960
|
+
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 };
|
|
33936
34961
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|