geonetwork-ui 2.10.0-dev.e7b9cb6a0 → 2.10.0-dev.f143bfdfa

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.
@@ -25677,9 +25677,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
25677
25677
  }] } });
25678
25678
 
25679
25679
  var name = "geonetwork-ui";
25680
- var version = "2.10.0-dev.e7b9cb6a0";
25680
+ var version = "2.10.0-dev.f143bfdfa";
25681
25681
  var engines = {
25682
- node: ">=20"
25682
+ node: ">=24"
25683
25683
  };
25684
25684
  var main = "./index.ts";
25685
25685
  var type = "module";
@@ -25717,7 +25717,7 @@ var peerDependencies = {
25717
25717
  };
25718
25718
  var dependencies = {
25719
25719
  "@biesbjerg/ngx-translate-extract-marker": "~1.0.0",
25720
- "@camptocamp/ogc-client": "1.3.1-dev.afd9c26",
25720
+ "@camptocamp/ogc-client": "1.3.1-dev.bb345f0",
25721
25721
  "@geospatial-sdk/core": "0.0.5-dev.61",
25722
25722
  "@geospatial-sdk/geocoding": "0.0.5-dev.61",
25723
25723
  "@geospatial-sdk/legend": "0.0.5-dev.61",
@@ -29397,6 +29397,9 @@ class ButtonComponent {
29397
29397
  case 'gray':
29398
29398
  this.btnClass = 'gn-ui-btn-gray';
29399
29399
  break;
29400
+ case 'gray-light':
29401
+ this.btnClass = 'gn-ui-btn-gray-light';
29402
+ break;
29400
29403
  case 'black':
29401
29404
  this.btnClass = 'gn-ui-btn-black';
29402
29405
  break;
@@ -34473,7 +34476,7 @@ class ContactDetailsComponent {
34473
34476
  return getAddressLines(this.contact?.address);
34474
34477
  }
34475
34478
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34476
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: ContactDetailsComponent, isStandalone: true, selector: "gn-ui-contact-details", inputs: { contact: "contact" }, ngImport: i0, template: "<div\n class=\"bg-gray-50 rounded border border-gray-200 shadow-md p-4 flex flex-col gap-3 w-full\"\n data-test=\"contact-details\"\n>\n @if (displayName) {\n <div class=\"flex items-center gap-3\">\n @if (organization?.logoUrl?.href) {\n <div\n class=\"flex items-center justify-center rounded-md bg-white w-14 h-14 shrink-0 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n }\n <span\n class=\"font-title text-xl leading-tight\"\n data-test=\"contact-details-name\"\n >{{ displayName }}</span\n >\n </div>\n }\n\n <!-- Email + phone: always shown; icon dimmed when field is absent -->\n <div class=\"grid grid-cols-2 gap-1 rounded-md overflow-hidden\">\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.email\"\n [class.opacity-75]=\"!!contact.email\"\n name=\"matMailOutline\"\n ></ng-icon>\n @if (contact.email) {\n <a\n [href]=\"'mailto:' + contact.email\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-email\"\n >{{ contact.email }}</a\n >\n }\n </div>\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.phone\"\n [class.opacity-75]=\"!!contact.phone\"\n name=\"matCallOutline\"\n ></ng-icon>\n @if (contact.phone) {\n <span class=\"text-sm\" data-test=\"contact-details-phone\">{{\n contact.phone\n }}</span>\n }\n </div>\n </div>\n\n <!-- Address: always shown; icon dimmed when absent -->\n <div class=\"bg-gray-100 rounded-md flex items-start gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0 mt-0.5\"\n [class.opacity-30]=\"!addressLines.length\"\n [class.opacity-75]=\"!!addressLines.length\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n @if (addressLines.length) {\n <div class=\"flex flex-col\" data-test=\"contact-details-address\">\n @for (line of addressLines; track line) {\n <p class=\"text-sm m-0\">{{ line }}</p>\n }\n </div>\n }\n </div>\n\n <!-- Website: only shown when org exists; icon dimmed when absent -->\n @if (organization) {\n <div class=\"bg-gray-100 rounded-md flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!organization.website\"\n [class.opacity-75]=\"!!organization.website\"\n name=\"matOpenInNew\"\n ></ng-icon>\n @if (organization.website) {\n <a\n [href]=\"organization.website.href\"\n target=\"_blank\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-website\"\n >{{ organization.website.href }}</a\n >\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "ngmodule", type: TranslateModule }], viewProviders: [
34479
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: ContactDetailsComponent, isStandalone: true, selector: "gn-ui-contact-details", inputs: { contact: "contact" }, ngImport: i0, template: "<div\n class=\"bg-gray-50 text-black rounded border border-gray-200 shadow-md p-4 flex flex-col gap-3 w-full\"\n data-test=\"contact-details\"\n>\n @if (displayName) {\n <div class=\"flex items-center gap-3\">\n @if (organization?.logoUrl?.href) {\n <div\n class=\"flex items-center justify-center rounded-md bg-white w-14 h-14 shrink-0 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n }\n <span\n class=\"font-title text-xl leading-tight\"\n data-test=\"contact-details-name\"\n >{{ displayName }}</span\n >\n </div>\n }\n\n <!-- Email + phone: always shown; icon dimmed when field is absent -->\n <div class=\"grid grid-cols-2 gap-1 rounded-md overflow-hidden\">\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.email\"\n [class.opacity-75]=\"!!contact.email\"\n name=\"matMailOutline\"\n ></ng-icon>\n @if (contact.email) {\n <a\n [href]=\"'mailto:' + contact.email\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-email\"\n >{{ contact.email }}</a\n >\n }\n </div>\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.phone\"\n [class.opacity-75]=\"!!contact.phone\"\n name=\"matCallOutline\"\n ></ng-icon>\n @if (contact.phone) {\n <span class=\"text-sm\" data-test=\"contact-details-phone\">{{\n contact.phone\n }}</span>\n }\n </div>\n </div>\n\n <!-- Address: always shown; icon dimmed when absent -->\n <div class=\"bg-gray-100 rounded-md flex items-start gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0 mt-0.5\"\n [class.opacity-30]=\"!addressLines.length\"\n [class.opacity-75]=\"!!addressLines.length\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n @if (addressLines.length) {\n <div class=\"flex flex-col\" data-test=\"contact-details-address\">\n @for (line of addressLines; track line) {\n <p class=\"text-sm m-0\">{{ line }}</p>\n }\n </div>\n }\n </div>\n\n <!-- Website: only shown when org exists; icon dimmed when absent -->\n @if (organization) {\n <div class=\"bg-gray-100 rounded-md flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!organization.website\"\n [class.opacity-75]=\"!!organization.website\"\n name=\"matOpenInNew\"\n ></ng-icon>\n @if (organization.website) {\n <a\n [href]=\"organization.website.href\"\n target=\"_blank\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-website\"\n >{{ organization.website.href }}</a\n >\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "ngmodule", type: TranslateModule }], viewProviders: [
34477
34480
  provideIcons({
34478
34481
  matCallOutline,
34479
34482
  matLocationOnOutline,
@@ -34491,7 +34494,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
34491
34494
  matMailOutline,
34492
34495
  matOpenInNew,
34493
34496
  }),
34494
- ], template: "<div\n class=\"bg-gray-50 rounded border border-gray-200 shadow-md p-4 flex flex-col gap-3 w-full\"\n data-test=\"contact-details\"\n>\n @if (displayName) {\n <div class=\"flex items-center gap-3\">\n @if (organization?.logoUrl?.href) {\n <div\n class=\"flex items-center justify-center rounded-md bg-white w-14 h-14 shrink-0 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n }\n <span\n class=\"font-title text-xl leading-tight\"\n data-test=\"contact-details-name\"\n >{{ displayName }}</span\n >\n </div>\n }\n\n <!-- Email + phone: always shown; icon dimmed when field is absent -->\n <div class=\"grid grid-cols-2 gap-1 rounded-md overflow-hidden\">\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.email\"\n [class.opacity-75]=\"!!contact.email\"\n name=\"matMailOutline\"\n ></ng-icon>\n @if (contact.email) {\n <a\n [href]=\"'mailto:' + contact.email\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-email\"\n >{{ contact.email }}</a\n >\n }\n </div>\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.phone\"\n [class.opacity-75]=\"!!contact.phone\"\n name=\"matCallOutline\"\n ></ng-icon>\n @if (contact.phone) {\n <span class=\"text-sm\" data-test=\"contact-details-phone\">{{\n contact.phone\n }}</span>\n }\n </div>\n </div>\n\n <!-- Address: always shown; icon dimmed when absent -->\n <div class=\"bg-gray-100 rounded-md flex items-start gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0 mt-0.5\"\n [class.opacity-30]=\"!addressLines.length\"\n [class.opacity-75]=\"!!addressLines.length\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n @if (addressLines.length) {\n <div class=\"flex flex-col\" data-test=\"contact-details-address\">\n @for (line of addressLines; track line) {\n <p class=\"text-sm m-0\">{{ line }}</p>\n }\n </div>\n }\n </div>\n\n <!-- Website: only shown when org exists; icon dimmed when absent -->\n @if (organization) {\n <div class=\"bg-gray-100 rounded-md flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!organization.website\"\n [class.opacity-75]=\"!!organization.website\"\n name=\"matOpenInNew\"\n ></ng-icon>\n @if (organization.website) {\n <a\n [href]=\"organization.website.href\"\n target=\"_blank\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-website\"\n >{{ organization.website.href }}</a\n >\n }\n </div>\n }\n</div>\n" }]
34497
+ ], template: "<div\n class=\"bg-gray-50 text-black rounded border border-gray-200 shadow-md p-4 flex flex-col gap-3 w-full\"\n data-test=\"contact-details\"\n>\n @if (displayName) {\n <div class=\"flex items-center gap-3\">\n @if (organization?.logoUrl?.href) {\n <div\n class=\"flex items-center justify-center rounded-md bg-white w-14 h-14 shrink-0 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n }\n <span\n class=\"font-title text-xl leading-tight\"\n data-test=\"contact-details-name\"\n >{{ displayName }}</span\n >\n </div>\n }\n\n <!-- Email + phone: always shown; icon dimmed when field is absent -->\n <div class=\"grid grid-cols-2 gap-1 rounded-md overflow-hidden\">\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.email\"\n [class.opacity-75]=\"!!contact.email\"\n name=\"matMailOutline\"\n ></ng-icon>\n @if (contact.email) {\n <a\n [href]=\"'mailto:' + contact.email\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-email\"\n >{{ contact.email }}</a\n >\n }\n </div>\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.phone\"\n [class.opacity-75]=\"!!contact.phone\"\n name=\"matCallOutline\"\n ></ng-icon>\n @if (contact.phone) {\n <span class=\"text-sm\" data-test=\"contact-details-phone\">{{\n contact.phone\n }}</span>\n }\n </div>\n </div>\n\n <!-- Address: always shown; icon dimmed when absent -->\n <div class=\"bg-gray-100 rounded-md flex items-start gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0 mt-0.5\"\n [class.opacity-30]=\"!addressLines.length\"\n [class.opacity-75]=\"!!addressLines.length\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n @if (addressLines.length) {\n <div class=\"flex flex-col\" data-test=\"contact-details-address\">\n @for (line of addressLines; track line) {\n <p class=\"text-sm m-0\">{{ line }}</p>\n }\n </div>\n }\n </div>\n\n <!-- Website: only shown when org exists; icon dimmed when absent -->\n @if (organization) {\n <div class=\"bg-gray-100 rounded-md flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!organization.website\"\n [class.opacity-75]=\"!!organization.website\"\n name=\"matOpenInNew\"\n ></ng-icon>\n @if (organization.website) {\n <a\n [href]=\"organization.website.href\"\n target=\"_blank\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-website\"\n >{{ organization.website.href }}</a\n >\n }\n </div>\n }\n</div>\n" }]
34495
34498
  }], propDecorators: { contact: [{
34496
34499
  type: Input
34497
34500
  }] } });
@@ -34536,11 +34539,11 @@ class ContactPillComponent {
34536
34539
  this.overlayOpen = false;
34537
34540
  }
34538
34541
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactPillComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34539
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: ContactPillComponent, isStandalone: true, selector: "gn-ui-contact-pill", inputs: { contact: "contact" }, ngImport: i0, template: "<gn-ui-button\n [type]=\"overlayOpen ? 'primary' : 'primary-light'\"\n extraClass=\"group w-full min-h-12 gap-3 justify-between py-2 pl-5 pr-4 rounded\"\n data-test=\"contact-pill\"\n (buttonClick)=\"toggleOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <span\n class=\"font-title font-medium text-base leading-tight truncate group-hover:text-white\"\n [title]=\"displayName\"\n >{{ displayName }}</span\n >\n <div\n class=\"gn-ui-card-icon items-center justify-center w-10 h-8 group-hover:border-white group-hover:text-white\"\n >\n @if (overlayOpen) {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matClose\"></ng-icon>\n } @else {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matInfoOutline\"></ng-icon>\n }\n </div>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayOffsetX]=\"overlayOffsetX\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div [style.width.px]=\"overlayWidth\">\n <gn-ui-contact-details [contact]=\"contact\"></gn-ui-contact-details>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$8.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", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$8.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ContactDetailsComponent, selector: "gn-ui-contact-details", inputs: ["contact"] }], viewProviders: [provideIcons({ matClose, matInfoOutline })], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34542
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: ContactPillComponent, isStandalone: true, selector: "gn-ui-contact-pill", inputs: { contact: "contact" }, ngImport: i0, template: "<gn-ui-button\n [type]=\"overlayOpen ? 'gray-light' : 'primary-light'\"\n extraClass=\"group w-full min-h-12 gap-3 justify-between py-2 pl-5 pr-4 rounded\"\n data-test=\"contact-pill\"\n (buttonClick)=\"toggleOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <span\n class=\"font-title font-medium text-base leading-tight truncate\"\n [class]=\"!overlayOpen ? 'text-primary-black group-hover:text-white' : ''\"\n [title]=\"displayName\"\n >{{ displayName }}</span\n >\n <div\n class=\"gn-ui-card-icon items-center justify-center w-10 h-8\"\n [class]=\"\n !overlayOpen ? 'group-hover:border-white group-hover:text-white' : ''\n \"\n >\n @if (overlayOpen) {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matClose\"></ng-icon>\n } @else {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matInfoOutline\"></ng-icon>\n }\n </div>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayOffsetX]=\"overlayOffsetX\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div [style.width.px]=\"overlayWidth\">\n <gn-ui-contact-details [contact]=\"contact\"></gn-ui-contact-details>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$8.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", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$8.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ContactDetailsComponent, selector: "gn-ui-contact-details", inputs: ["contact"] }], viewProviders: [provideIcons({ matClose, matInfoOutline })], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34540
34543
  }
34541
34544
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactPillComponent, decorators: [{
34542
34545
  type: Component,
34543
- args: [{ selector: 'gn-ui-contact-pill', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIcon, ButtonComponent, OverlayModule, ContactDetailsComponent], viewProviders: [provideIcons({ matClose, matInfoOutline })], template: "<gn-ui-button\n [type]=\"overlayOpen ? 'primary' : 'primary-light'\"\n extraClass=\"group w-full min-h-12 gap-3 justify-between py-2 pl-5 pr-4 rounded\"\n data-test=\"contact-pill\"\n (buttonClick)=\"toggleOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <span\n class=\"font-title font-medium text-base leading-tight truncate group-hover:text-white\"\n [title]=\"displayName\"\n >{{ displayName }}</span\n >\n <div\n class=\"gn-ui-card-icon items-center justify-center w-10 h-8 group-hover:border-white group-hover:text-white\"\n >\n @if (overlayOpen) {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matClose\"></ng-icon>\n } @else {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matInfoOutline\"></ng-icon>\n }\n </div>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayOffsetX]=\"overlayOffsetX\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div [style.width.px]=\"overlayWidth\">\n <gn-ui-contact-details [contact]=\"contact\"></gn-ui-contact-details>\n </div>\n</ng-template>\n" }]
34546
+ args: [{ selector: 'gn-ui-contact-pill', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIcon, ButtonComponent, OverlayModule, ContactDetailsComponent], viewProviders: [provideIcons({ matClose, matInfoOutline })], template: "<gn-ui-button\n [type]=\"overlayOpen ? 'gray-light' : 'primary-light'\"\n extraClass=\"group w-full min-h-12 gap-3 justify-between py-2 pl-5 pr-4 rounded\"\n data-test=\"contact-pill\"\n (buttonClick)=\"toggleOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <span\n class=\"font-title font-medium text-base leading-tight truncate\"\n [class]=\"!overlayOpen ? 'text-primary-black group-hover:text-white' : ''\"\n [title]=\"displayName\"\n >{{ displayName }}</span\n >\n <div\n class=\"gn-ui-card-icon items-center justify-center w-10 h-8\"\n [class]=\"\n !overlayOpen ? 'group-hover:border-white group-hover:text-white' : ''\n \"\n >\n @if (overlayOpen) {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matClose\"></ng-icon>\n } @else {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matInfoOutline\"></ng-icon>\n }\n </div>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayOffsetX]=\"overlayOffsetX\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div [style.width.px]=\"overlayWidth\">\n <gn-ui-contact-details [contact]=\"contact\"></gn-ui-contact-details>\n </div>\n</ng-template>\n" }]
34544
34547
  }], propDecorators: { contact: [{
34545
34548
  type: Input
34546
34549
  }] } });
@@ -34625,7 +34628,7 @@ class MetadataInfoComponent {
34625
34628
  this.keyword.emit(keyword);
34626
34629
  }
34627
34630
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34628
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: MetadataInfoComponent, isStandalone: true, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n @if (metadata.abstract) {\n <gn-ui-max-lines [maxLines]=\"6\" data-test=\"metadata-info-abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n\n @if (!fieldReady('keywords') || metadata.keywords?.length) {\n <p class=\"mt-6 mb-3 font-medium text-black text-sm\" translate>\n record.metadata.keywords\n </p>\n }\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n @if (metadata.keywords?.length) {\n <gn-ui-max-lines [maxLines]=\"7\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n @for (keyword of metadata.keywords; track keyword) {\n <gn-ui-button\n type=\"primary-light\"\n class=\"inline-block opacity-70\"\n extraClass=\"lowercase text-sm py-1 px-2\"\n (buttonClick)=\"onKeywordClick(keyword)\"\n >{{ keyword.label }}</gn-ui-button\n >\n }\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n</div>\n\n@if (\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n >\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n @for (license of licenses; track $index) {\n @if (license.url) {\n <div class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n } @else {\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n }\n }\n @if (legalConstraints.length) {\n <div class=\"mb-6\">\n @for (constraint of legalConstraints; track constraint) {\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n }\n </div>\n }\n @if (otherConstraints.length) {\n @for (constraint of otherConstraints; track constraint) {\n <div gnUiLinkify>\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n }\n }\n @if (!hasUsage) {\n <span class=\"noUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (metadata.contactsForResource?.length) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.resource.contacts' | translate\"\n data-test=\"contacts-panel\"\n >\n <div class=\"flex flex-col gap-1 pt-3 pb-4\">\n @for (group of contactGroups; track group.role) {\n <div class=\"flex flex-col gap-1 rounded bg-gray-50 py-4 px-2\">\n <p class=\"text-xs font-normal text-black\">\n {{ group.roleLabel | translate }}\n </p>\n <div class=\"grid gap-1 grid-cols-1 md:grid-cols-2\">\n @for (contact of group.contacts; track contact.email) {\n <gn-ui-contact-pill [contact]=\"contact\"></gn-ui-contact-pill>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n >\n @if (metadata.kind === 'dataset' && metadata.lineage) {\n <div\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n }\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n @if (metadata.resourceCreated) {\n <div data-test=\"details-panel-resource-created\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n }\n @if (metadata.resourcePublished) {\n <div data-test=\"details-panel-resource-published\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n }\n @if (metadata.resourceUpdated) {\n <div data-test=\"details-panel-resource-updated\">\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n }\n @if (metadata.kind === 'dataset' && metadata.updateFrequency) {\n <div data-test=\"details-panel-update-frequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n }\n @if (metadata.otherLanguages?.length) {\n <div data-test=\"details-panel-other-languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n @for (language of metadata.otherLanguages; track language) {\n <p class=\"text-primary font-medium other-languages\" translate>\n language.{{ language }}\n </p>\n }\n </div>\n </div>\n }\n @if (metadata.kind === 'dataset' && temporalExtent) {\n <div data-test=\"details-panel-temporal-extent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\n @if (temporalExtent.start && temporalExtent.end) {\n <p\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n }\n @if (temporalExtent.start && !temporalExtent.end) {\n <p translate [translateParams]=\"{ start: temporalExtent.start }\">\n record.metadata.temporalExtent.sinceDate\n </p>\n }\n @if (!temporalExtent.start && temporalExtent.end) {\n <p translate [translateParams]=\"{ end: temporalExtent.end }\">\n record.metadata.temporalExtent.untilDate\n </p>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n >\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n </gn-ui-expandable-panel>\n}\n@if (metadata.landingPage) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n >\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n @if (metadata.recordUpdated) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\n ></p>\n </div>\n }\n @if (metadata.landingPage) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{\n metadata.landingPage\n }}</span>\n </a>\n </p>\n </div>\n }\n @if (metadata.ownerOrganization) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n }\n @if (metadata.uniqueIdentifier) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n }\n @if (metadata.topics?.length) {\n <div>\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n @for (topic of metadata.topics; track topic) {\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n >{{ topic }}</gn-ui-badge\n >\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}\n"], dependencies: [{ kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "iconColor", "collapsed"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "directive", type: GnUiHumanizeDateDirective, selector: "[gnUiHumanizeDate]", inputs: ["gnUiHumanizeDate"] }, { kind: "component", type: SpatialExtentComponent, selector: "gn-ui-spatial-extent", inputs: ["spatialExtents"] }, { kind: "component", type: ContactPillComponent, selector: "gn-ui-contact-pill", inputs: ["contact"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], viewProviders: [
34631
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: MetadataInfoComponent, isStandalone: true, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n @if (metadata.abstract) {\n <gn-ui-max-lines [maxLines]=\"6\" data-test=\"metadata-info-abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n\n @if (!fieldReady('keywords') || metadata.keywords?.length) {\n <p class=\"mt-6 mb-3 font-medium text-black text-sm\" translate>\n record.metadata.keywords\n </p>\n }\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n @if (metadata.keywords?.length) {\n <gn-ui-max-lines [maxLines]=\"7\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n @for (keyword of metadata.keywords; track keyword) {\n <gn-ui-button\n type=\"primary-light\"\n class=\"inline-block opacity-70\"\n extraClass=\"lowercase text-sm py-1 px-2\"\n (buttonClick)=\"onKeywordClick(keyword)\"\n >{{ keyword.label }}</gn-ui-button\n >\n }\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n</div>\n\n@if (\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n >\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n @for (license of licenses; track $index) {\n @if (license.url) {\n <div class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n } @else {\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n }\n }\n @if (legalConstraints.length) {\n <div class=\"mb-6\">\n @for (constraint of legalConstraints; track constraint) {\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n }\n </div>\n }\n @if (otherConstraints.length) {\n @for (constraint of otherConstraints; track constraint) {\n <div gnUiLinkify>\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n }\n }\n @if (!hasUsage) {\n <span class=\"noUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (metadata.contactsForResource?.length) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.resource.contacts' | translate\"\n data-test=\"contacts-panel\"\n >\n <div class=\"flex flex-col gap-1 pt-3 pb-4\">\n @for (group of contactGroups; track group.role) {\n <div class=\"flex flex-col gap-1 rounded py-4 px-2\">\n <p class=\"text-xs font-normal text-black\">\n {{ group.roleLabel | translate }}\n </p>\n <div class=\"grid gap-1 grid-cols-1 md:grid-cols-2\">\n @for (contact of group.contacts; track contact.email) {\n <gn-ui-contact-pill [contact]=\"contact\"></gn-ui-contact-pill>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n >\n @if (metadata.kind === 'dataset' && metadata.lineage) {\n <div\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n }\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n @if (metadata.resourceCreated) {\n <div data-test=\"details-panel-resource-created\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n }\n @if (metadata.resourcePublished) {\n <div data-test=\"details-panel-resource-published\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n }\n @if (metadata.resourceUpdated) {\n <div data-test=\"details-panel-resource-updated\">\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n }\n @if (metadata.kind === 'dataset' && metadata.updateFrequency) {\n <div data-test=\"details-panel-update-frequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n }\n @if (metadata.otherLanguages?.length) {\n <div data-test=\"details-panel-other-languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n @for (language of metadata.otherLanguages; track language) {\n <p class=\"text-primary font-medium other-languages\" translate>\n language.{{ language }}\n </p>\n }\n </div>\n </div>\n }\n @if (metadata.kind === 'dataset' && temporalExtent) {\n <div data-test=\"details-panel-temporal-extent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\n @if (temporalExtent.start && temporalExtent.end) {\n <p\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n }\n @if (temporalExtent.start && !temporalExtent.end) {\n <p translate [translateParams]=\"{ start: temporalExtent.start }\">\n record.metadata.temporalExtent.sinceDate\n </p>\n }\n @if (!temporalExtent.start && temporalExtent.end) {\n <p translate [translateParams]=\"{ end: temporalExtent.end }\">\n record.metadata.temporalExtent.untilDate\n </p>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n >\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n </gn-ui-expandable-panel>\n}\n@if (metadata.landingPage) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n >\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n @if (metadata.recordUpdated) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\n ></p>\n </div>\n }\n @if (metadata.landingPage) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{\n metadata.landingPage\n }}</span>\n </a>\n </p>\n </div>\n }\n @if (metadata.ownerOrganization) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n }\n @if (metadata.uniqueIdentifier) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n }\n @if (metadata.topics?.length) {\n <div>\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n @for (topic of metadata.topics; track topic) {\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n >{{ topic }}</gn-ui-badge\n >\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}\n"], dependencies: [{ kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "iconColor", "collapsed"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "directive", type: GnUiHumanizeDateDirective, selector: "[gnUiHumanizeDate]", inputs: ["gnUiHumanizeDate"] }, { kind: "component", type: SpatialExtentComponent, selector: "gn-ui-spatial-extent", inputs: ["spatialExtents"] }, { kind: "component", type: ContactPillComponent, selector: "gn-ui-contact-pill", inputs: ["contact"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], viewProviders: [
34629
34632
  provideIcons({
34630
34633
  matOpenInNew,
34631
34634
  matMailOutline: matMailOutline$1,
@@ -34654,7 +34657,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
34654
34657
  matOpenInNew,
34655
34658
  matMailOutline: matMailOutline$1,
34656
34659
  }),
34657
- ], template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n @if (metadata.abstract) {\n <gn-ui-max-lines [maxLines]=\"6\" data-test=\"metadata-info-abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n\n @if (!fieldReady('keywords') || metadata.keywords?.length) {\n <p class=\"mt-6 mb-3 font-medium text-black text-sm\" translate>\n record.metadata.keywords\n </p>\n }\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n @if (metadata.keywords?.length) {\n <gn-ui-max-lines [maxLines]=\"7\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n @for (keyword of metadata.keywords; track keyword) {\n <gn-ui-button\n type=\"primary-light\"\n class=\"inline-block opacity-70\"\n extraClass=\"lowercase text-sm py-1 px-2\"\n (buttonClick)=\"onKeywordClick(keyword)\"\n >{{ keyword.label }}</gn-ui-button\n >\n }\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n</div>\n\n@if (\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n >\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n @for (license of licenses; track $index) {\n @if (license.url) {\n <div class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n } @else {\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n }\n }\n @if (legalConstraints.length) {\n <div class=\"mb-6\">\n @for (constraint of legalConstraints; track constraint) {\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n }\n </div>\n }\n @if (otherConstraints.length) {\n @for (constraint of otherConstraints; track constraint) {\n <div gnUiLinkify>\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n }\n }\n @if (!hasUsage) {\n <span class=\"noUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (metadata.contactsForResource?.length) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.resource.contacts' | translate\"\n data-test=\"contacts-panel\"\n >\n <div class=\"flex flex-col gap-1 pt-3 pb-4\">\n @for (group of contactGroups; track group.role) {\n <div class=\"flex flex-col gap-1 rounded bg-gray-50 py-4 px-2\">\n <p class=\"text-xs font-normal text-black\">\n {{ group.roleLabel | translate }}\n </p>\n <div class=\"grid gap-1 grid-cols-1 md:grid-cols-2\">\n @for (contact of group.contacts; track contact.email) {\n <gn-ui-contact-pill [contact]=\"contact\"></gn-ui-contact-pill>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n >\n @if (metadata.kind === 'dataset' && metadata.lineage) {\n <div\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n }\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n @if (metadata.resourceCreated) {\n <div data-test=\"details-panel-resource-created\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n }\n @if (metadata.resourcePublished) {\n <div data-test=\"details-panel-resource-published\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n }\n @if (metadata.resourceUpdated) {\n <div data-test=\"details-panel-resource-updated\">\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n }\n @if (metadata.kind === 'dataset' && metadata.updateFrequency) {\n <div data-test=\"details-panel-update-frequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n }\n @if (metadata.otherLanguages?.length) {\n <div data-test=\"details-panel-other-languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n @for (language of metadata.otherLanguages; track language) {\n <p class=\"text-primary font-medium other-languages\" translate>\n language.{{ language }}\n </p>\n }\n </div>\n </div>\n }\n @if (metadata.kind === 'dataset' && temporalExtent) {\n <div data-test=\"details-panel-temporal-extent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\n @if (temporalExtent.start && temporalExtent.end) {\n <p\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n }\n @if (temporalExtent.start && !temporalExtent.end) {\n <p translate [translateParams]=\"{ start: temporalExtent.start }\">\n record.metadata.temporalExtent.sinceDate\n </p>\n }\n @if (!temporalExtent.start && temporalExtent.end) {\n <p translate [translateParams]=\"{ end: temporalExtent.end }\">\n record.metadata.temporalExtent.untilDate\n </p>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n >\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n </gn-ui-expandable-panel>\n}\n@if (metadata.landingPage) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n >\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n @if (metadata.recordUpdated) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\n ></p>\n </div>\n }\n @if (metadata.landingPage) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{\n metadata.landingPage\n }}</span>\n </a>\n </p>\n </div>\n }\n @if (metadata.ownerOrganization) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n }\n @if (metadata.uniqueIdentifier) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n }\n @if (metadata.topics?.length) {\n <div>\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n @for (topic of metadata.topics; track topic) {\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n >{{ topic }}</gn-ui-badge\n >\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}\n"] }]
34660
+ ], template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n @if (metadata.abstract) {\n <gn-ui-max-lines [maxLines]=\"6\" data-test=\"metadata-info-abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n\n @if (!fieldReady('keywords') || metadata.keywords?.length) {\n <p class=\"mt-6 mb-3 font-medium text-black text-sm\" translate>\n record.metadata.keywords\n </p>\n }\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n @if (metadata.keywords?.length) {\n <gn-ui-max-lines [maxLines]=\"7\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n @for (keyword of metadata.keywords; track keyword) {\n <gn-ui-button\n type=\"primary-light\"\n class=\"inline-block opacity-70\"\n extraClass=\"lowercase text-sm py-1 px-2\"\n (buttonClick)=\"onKeywordClick(keyword)\"\n >{{ keyword.label }}</gn-ui-button\n >\n }\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n</div>\n\n@if (\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n >\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n @for (license of licenses; track $index) {\n @if (license.url) {\n <div class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n } @else {\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n }\n }\n @if (legalConstraints.length) {\n <div class=\"mb-6\">\n @for (constraint of legalConstraints; track constraint) {\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n }\n </div>\n }\n @if (otherConstraints.length) {\n @for (constraint of otherConstraints; track constraint) {\n <div gnUiLinkify>\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n }\n }\n @if (!hasUsage) {\n <span class=\"noUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (metadata.contactsForResource?.length) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.resource.contacts' | translate\"\n data-test=\"contacts-panel\"\n >\n <div class=\"flex flex-col gap-1 pt-3 pb-4\">\n @for (group of contactGroups; track group.role) {\n <div class=\"flex flex-col gap-1 rounded py-4 px-2\">\n <p class=\"text-xs font-normal text-black\">\n {{ group.roleLabel | translate }}\n </p>\n <div class=\"grid gap-1 grid-cols-1 md:grid-cols-2\">\n @for (contact of group.contacts; track contact.email) {\n <gn-ui-contact-pill [contact]=\"contact\"></gn-ui-contact-pill>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n >\n @if (metadata.kind === 'dataset' && metadata.lineage) {\n <div\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n }\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n @if (metadata.resourceCreated) {\n <div data-test=\"details-panel-resource-created\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n }\n @if (metadata.resourcePublished) {\n <div data-test=\"details-panel-resource-published\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n }\n @if (metadata.resourceUpdated) {\n <div data-test=\"details-panel-resource-updated\">\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n }\n @if (metadata.kind === 'dataset' && metadata.updateFrequency) {\n <div data-test=\"details-panel-update-frequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n }\n @if (metadata.otherLanguages?.length) {\n <div data-test=\"details-panel-other-languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n @for (language of metadata.otherLanguages; track language) {\n <p class=\"text-primary font-medium other-languages\" translate>\n language.{{ language }}\n </p>\n }\n </div>\n </div>\n }\n @if (metadata.kind === 'dataset' && temporalExtent) {\n <div data-test=\"details-panel-temporal-extent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\n @if (temporalExtent.start && temporalExtent.end) {\n <p\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n }\n @if (temporalExtent.start && !temporalExtent.end) {\n <p translate [translateParams]=\"{ start: temporalExtent.start }\">\n record.metadata.temporalExtent.sinceDate\n </p>\n }\n @if (!temporalExtent.start && temporalExtent.end) {\n <p translate [translateParams]=\"{ end: temporalExtent.end }\">\n record.metadata.temporalExtent.untilDate\n </p>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n >\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n </gn-ui-expandable-panel>\n}\n@if (metadata.landingPage) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n >\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n @if (metadata.recordUpdated) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\n ></p>\n </div>\n }\n @if (metadata.landingPage) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{\n metadata.landingPage\n }}</span>\n </a>\n </p>\n </div>\n }\n @if (metadata.ownerOrganization) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n }\n @if (metadata.uniqueIdentifier) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n }\n @if (metadata.topics?.length) {\n <div>\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n @for (topic of metadata.topics; track topic) {\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n >{{ topic }}</gn-ui-badge\n >\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}\n"] }]
34658
34661
  }], propDecorators: { metadata: [{
34659
34662
  type: Input
34660
34663
  }], incomplete: [{