geonetwork-ui 2.6.0-dev.7be6567ef → 2.6.0-dev.9df114cd4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +6 -1
  2. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  3. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +5 -1
  4. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +5 -1
  5. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +6 -1
  6. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +7 -6
  7. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +2 -2
  8. package/esm2022/libs/ui/elements/src/index.mjs +2 -1
  9. package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +163 -0
  10. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -3
  11. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +10 -4
  12. package/esm2022/libs/ui/inputs/src/index.mjs +1 -2
  13. package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +4 -3
  14. package/esm2022/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.mjs +43 -3
  15. package/esm2022/libs/ui/widgets/src/lib/progress-bar/progress-bar.component.mjs +3 -3
  16. package/esm2022/translations/de.json +8 -1
  17. package/esm2022/translations/en.json +8 -1
  18. package/esm2022/translations/es.json +8 -1
  19. package/esm2022/translations/fr.json +10 -3
  20. package/esm2022/translations/it.json +8 -1
  21. package/esm2022/translations/nl.json +8 -1
  22. package/esm2022/translations/pt.json +8 -1
  23. package/fesm2022/geonetwork-ui.mjs +292 -44
  24. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  25. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  26. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +3 -0
  27. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  28. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  29. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts +1 -1
  30. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts.map +1 -1
  31. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  32. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
  33. package/libs/ui/elements/src/index.d.ts +1 -0
  34. package/libs/ui/elements/src/index.d.ts.map +1 -1
  35. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts +43 -0
  36. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -0
  37. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  38. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  39. package/libs/ui/inputs/src/index.d.ts +0 -1
  40. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  41. package/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.d.ts.map +1 -1
  42. package/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.d.ts +10 -3
  43. package/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.d.ts.map +1 -1
  44. package/package.json +1 -1
  45. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +6 -0
  46. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +3 -0
  47. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +4 -0
  48. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +4 -0
  49. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +5 -0
  50. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.html +1 -7
  51. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +14 -6
  52. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.css +6 -0
  53. package/src/libs/ui/elements/src/index.ts +1 -0
  54. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.css +0 -0
  55. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +156 -0
  56. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +190 -0
  57. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +4 -2
  58. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +3 -0
  59. package/src/libs/ui/inputs/src/index.ts +0 -1
  60. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.html +5 -5
  61. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.ts +2 -1
  62. package/src/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.ts +46 -2
  63. package/src/libs/ui/widgets/src/lib/progress-bar/progress-bar.component.html +2 -2
  64. package/tailwind.base.css +16 -11
  65. package/translations/de.json +8 -1
  66. package/translations/en.json +8 -1
  67. package/translations/es.json +8 -1
  68. package/translations/fr.json +10 -3
  69. package/translations/it.json +8 -1
  70. package/translations/nl.json +8 -1
  71. package/translations/pt.json +8 -1
  72. package/translations/sk.json +8 -1
  73. package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +0 -16
  74. package/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.d.ts +0 -8
  75. package/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.d.ts.map +0 -1
  76. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.css +0 -3
  77. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.html +0 -9
  78. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.ts +0 -15
@@ -0,0 +1,190 @@
1
+ import {
2
+ Component,
3
+ Input,
4
+ TemplateRef,
5
+ OnInit,
6
+ Output,
7
+ EventEmitter,
8
+ ElementRef,
9
+ } from '@angular/core'
10
+ import {
11
+ CatalogRecord,
12
+ Organization,
13
+ } from '../../../../../../libs/common/domain/src/lib/model/record'
14
+ import { NgClass, NgIf, NgTemplateOutlet } from '@angular/common'
15
+ import { MarkdownParserComponent } from '../markdown-parser/markdown-parser.component'
16
+ import { MetadataQualityComponent } from '../metadata-quality/metadata-quality.component'
17
+ import { ThumbnailComponent } from '../thumbnail/thumbnail.component'
18
+ import {
19
+ propagateToDocumentOnly,
20
+ removeWhitespace,
21
+ stripHtml,
22
+ } from '../../../../../../libs/util/shared/src'
23
+ import {
24
+ NgIconComponent,
25
+ provideIcons,
26
+ provideNgIconsConfig,
27
+ } from '@ng-icons/core'
28
+ import {
29
+ matLocationSearchingOutline,
30
+ matEmailOutline,
31
+ matPhoneOutline,
32
+ matLocationOnOutline,
33
+ } from '@ng-icons/material-icons/outline'
34
+ import { matCode } from '@ng-icons/material-icons/baseline'
35
+ import { iconoirDatabase, iconoirMap, iconoirInternet } from '@ng-icons/iconoir'
36
+ import { TranslateModule } from '@ngx-translate/core'
37
+ import { marker } from '@biesbjerg/ngx-translate-extract-marker'
38
+ import { fromEvent, Subscription } from 'rxjs'
39
+
40
+ marker('record.kind.dataset')
41
+ marker('record.kind.reuse')
42
+ marker('record.kind.service')
43
+
44
+ type CardSize = 'L' | 'M' | 'S' | 'XS'
45
+
46
+ @Component({
47
+ selector: 'gn-ui-internal-link-card',
48
+ standalone: true,
49
+ imports: [
50
+ NgClass,
51
+ NgIf,
52
+ ThumbnailComponent,
53
+ MetadataQualityComponent,
54
+ NgTemplateOutlet,
55
+ NgIconComponent,
56
+ TranslateModule,
57
+ MarkdownParserComponent,
58
+ ],
59
+ providers: [
60
+ provideIcons({
61
+ matLocationSearchingOutline,
62
+ matCode,
63
+ iconoirDatabase,
64
+ iconoirMap,
65
+ iconoirInternet,
66
+ matEmailOutline,
67
+ matPhoneOutline,
68
+ matLocationOnOutline,
69
+ }),
70
+ provideNgIconsConfig({
71
+ size: '1.2em',
72
+ }),
73
+ ],
74
+ templateUrl: './internal-link-card.component.html',
75
+ styleUrls: ['./internal-link-card.component.css'],
76
+ })
77
+ export class InternalLinkCardComponent implements OnInit {
78
+ @Input() record: CatalogRecord
79
+ @Input() metadataQualityDisplay: boolean
80
+ @Input() favoriteTemplate: TemplateRef<{ $implicit: CatalogRecord }>
81
+ @Input() linkHref: string = null
82
+ @Input() isGeodata: boolean
83
+ @Input() set size(value: CardSize) {
84
+ this._size = value
85
+ this.cardClass = this.sizeClassMap[value] || ''
86
+ this.thumbnailContainerClass = this.thumbnailSizeClassMap[value] || 'hidden'
87
+ }
88
+ get size(): CardSize {
89
+ return this._size
90
+ }
91
+ @Output() mdSelect = new EventEmitter<CatalogRecord>()
92
+ subscription = new Subscription()
93
+
94
+ abstract: string
95
+
96
+ cardClass = ''
97
+ thumbnailContainerClass = ''
98
+
99
+ private _size: CardSize = 'M'
100
+
101
+ private readonly sizeClassMap: Record<CardSize, string> = {
102
+ L: 'min-h-[190px] md:w-[992px] py-3 px-3 flex items-start gap-5',
103
+ M: 'min-h-[140px] md:w-[570px] py-3 px-3 flex items-start gap-4',
104
+ S: 'min-h-[220px] md:w-[370px] py-3 px-3 flex gap-4',
105
+ XS: 'min-h-[108px] md:w-[570px] py-3 px-3 flex gap-4',
106
+ }
107
+
108
+ private readonly thumbnailSizeClassMap: Record<CardSize, string> = {
109
+ L: 'w-[190px] h-[180px] rounded-lg overflow-hidden shrink-0',
110
+ M: 'w-[110px] h-[140px] rounded-lg overflow-hidden shrink-0',
111
+ S: 'hidden',
112
+ XS: 'hidden',
113
+ }
114
+
115
+ private readonly titleClassMap: Record<CardSize, string> = {
116
+ L: 'text-xl line-clamp-2',
117
+ M: 'text-base line-clamp-2',
118
+ S: 'text-base line-clamp-3',
119
+ XS: 'text-base mt-3 line-clamp-2',
120
+ }
121
+
122
+ constructor(protected elementRef: ElementRef) {}
123
+
124
+ ngOnInit(): void {
125
+ this.abstract = removeWhitespace(stripHtml(this.record?.abstract))
126
+ this.subscription.add(
127
+ fromEvent(this.elementRef.nativeElement, 'click').subscribe(
128
+ (event: Event) => {
129
+ event.preventDefault()
130
+ propagateToDocumentOnly(event)
131
+ this.mdSelect.emit(this.record)
132
+ }
133
+ )
134
+ )
135
+ }
136
+
137
+ get organization(): Organization {
138
+ return this.record.ownerOrganization
139
+ }
140
+
141
+ get contacts() {
142
+ return (
143
+ (this.record.kind === 'dataset'
144
+ ? this.record.contactsForResource
145
+ : this.record.contacts) || []
146
+ )
147
+ }
148
+
149
+ getTitleClass() {
150
+ return (
151
+ this.titleClassMap[this._size] +
152
+ ' ' +
153
+ (this.record.ownerOrganization?.name ? '' : 'mt-3') || ''
154
+ )
155
+ }
156
+
157
+ openExternalUrl(event: Event, url: URL): void {
158
+ event.stopPropagation()
159
+ window.open(url, '_blank')
160
+ }
161
+
162
+ openMailto(event: Event, email: string): void {
163
+ event.stopPropagation()
164
+ window.open(`mailto:${email}`, '_blank')
165
+ }
166
+
167
+ copyToClipboard(event: Event, text: string): void {
168
+ event.stopPropagation()
169
+ navigator.clipboard.writeText(text)
170
+ }
171
+
172
+ get shouldShowThumbnail(): boolean {
173
+ return this.size === 'L' || this.size === 'M'
174
+ }
175
+
176
+ getKindInfo(): { text: string; icon: string } {
177
+ if (!this.record?.kind) return { text: '', icon: '' }
178
+
179
+ switch (this.record.kind.toLowerCase()) {
180
+ case 'dataset':
181
+ return { text: 'record.kind.dataset', icon: 'iconoirDatabase' }
182
+ case 'reuse':
183
+ return { text: 'record.kind.reuse', icon: 'iconoirMap' }
184
+ case 'service':
185
+ return { text: 'record.kind.service', icon: 'matCode' }
186
+ default:
187
+ return { text: '', icon: '' }
188
+ }
189
+ }
190
+ }
@@ -1,7 +1,9 @@
1
- <div *ngIf="metadataQualityDisplay" class="mb-6 metadata-quality">
1
+ <div *ngIf="metadataQualityDisplay" class="metadata-quality">
2
2
  <div
3
3
  class="flex items-center"
4
- [class]="smaller ? 'leading-[8px] min-w-[120px]' : 'min-w-[200px]'"
4
+ [class]="
5
+ smaller ? 'leading-[8px] min-w-[120px] m-h-[120px]' : 'min-w-[200px]'
6
+ "
5
7
  >
6
8
  <gn-ui-progress-bar
7
9
  tabindex="0"
@@ -20,6 +20,7 @@ import { ThumbnailComponent } from './thumbnail/thumbnail.component'
20
20
  import { TimeSincePipe } from './user-feedback-item/time-since.pipe'
21
21
  import { UserPreviewComponent } from './user-preview/user-preview.component'
22
22
  import { ApplicationBannerComponent } from './application-banner/application-banner.component'
23
+ import { InternalLinkCardComponent } from './internal-link-card/internal-link-card.component'
23
24
 
24
25
  @NgModule({
25
26
  imports: [
@@ -42,6 +43,7 @@ import { ApplicationBannerComponent } from './application-banner/application-ban
42
43
  TextInputComponent,
43
44
  ImageInputComponent,
44
45
  ApplicationBannerComponent,
46
+ InternalLinkCardComponent,
45
47
  ],
46
48
  providers: [
47
49
  provideNgIconsConfig({
@@ -56,6 +58,7 @@ import { ApplicationBannerComponent } from './application-banner/application-ban
56
58
  MarkdownParserComponent,
57
59
  ImageInputComponent,
58
60
  ApplicationBannerComponent,
61
+ InternalLinkCardComponent,
59
62
  ],
60
63
  })
61
64
  export class UiElementsModule {}
@@ -15,7 +15,6 @@ export * from './lib/dropdown-selector/dropdown-selector.model'
15
15
  export * from './lib/editable-label/editable-label.directive'
16
16
  export * from './lib/file-input/file-input.component'
17
17
  export * from './lib/files-drop/files-drop.directive'
18
- export * from './lib/navigation-button/navigation-button.component'
19
18
  export * from './lib/search-input/search-input.component'
20
19
  export * from './lib/star-toggle/star-toggle.component'
21
20
  export * from './lib/switch-toggle/switch-toggle.component'
@@ -1,17 +1,17 @@
1
1
  <div class="inline-block relative align-middle" style="line-height: 0.7em">
2
- <button
3
- type="button"
2
+ <gn-ui-button
3
+ [type]="'outline'"
4
4
  class="-m-[8px] p-[8px]"
5
- (click)="toggle($event)"
5
+ (buttonClick)="toggle($event)"
6
6
  [ngClass]="{
7
7
  enabled: toggled,
8
- 'disabled opacity-45': !toggled,
8
+ disabled: !toggled,
9
9
  'transition hover:scale-125 will-change-transform': !disabled,
10
10
  'cursor-default': disabled,
11
11
  }"
12
12
  >
13
13
  <ng-icon [name]="toggled ? 'matStar' : 'matStarBorder'"></ng-icon>
14
- </button>
14
+ </gn-ui-button>
15
15
  <svg
16
16
  #starOverlay
17
17
  class="star-toggle-overlay"
@@ -11,6 +11,7 @@ import { propagateToDocumentOnly } from '../../../../../../libs/util/shared/src'
11
11
  import { NgIcon, provideIcons } from '@ng-icons/core'
12
12
  import { CommonModule } from '@angular/common'
13
13
  import { matStar, matStarBorder } from '@ng-icons/material-icons/baseline'
14
+ import { ButtonComponent } from '../button/button.component'
14
15
 
15
16
  @Component({
16
17
  selector: 'gn-ui-star-toggle',
@@ -18,7 +19,7 @@ import { matStar, matStarBorder } from '@ng-icons/material-icons/baseline'
18
19
  styleUrls: ['./star-toggle.component.css'],
19
20
  changeDetection: ChangeDetectionStrategy.OnPush,
20
21
  standalone: true,
21
- imports: [CommonModule, NgIcon],
22
+ imports: [CommonModule, NgIcon, ButtonComponent],
22
23
  viewProviders: [provideIcons({ matStar, matStarBorder })],
23
24
  })
24
25
  export class StarToggleComponent {
@@ -1,4 +1,5 @@
1
1
  import {
2
+ AfterViewChecked,
2
3
  ChangeDetectorRef,
3
4
  Directive,
4
5
  HostBinding,
@@ -11,20 +12,34 @@ import {
11
12
  @Directive({
12
13
  selector: '[gnUiAnchorLink]',
13
14
  })
14
- export class AnchorLinkDirective implements OnInit, OnDestroy {
15
+ export class AnchorLinkDirective
16
+ implements OnInit, AfterViewChecked, OnDestroy
17
+ {
15
18
  @Input('gnUiAnchorLink') targetId: string
16
19
  @Input('gnUiAnchorLinkDisabledClass') disabledClass: string
17
20
  @Input('gnUiAnchorLinkEnabledClass') enabledClass: string
21
+ @Input('gnUiAnchorLinkInViewClass') inViewClass: string
22
+ @Input('gnUiAnchorLinkOutOfViewClass') outOfViewClass: string
18
23
 
19
24
  @HostBinding('class')
20
25
  get elementClass(): string {
21
- return this.disabled ? this.disabledClass : this.enabledClass
26
+ if (this.disabled) {
27
+ return this.disabledClass
28
+ }
29
+ if (this.inView) {
30
+ return `${this.inViewClass} ${this.enabledClass}`
31
+ } else {
32
+ return `${this.outOfViewClass} ${this.enabledClass}`
33
+ }
22
34
  }
23
35
 
24
36
  disabled = false
25
37
  observer = new MutationObserver(() => {
26
38
  this.refreshDisabledState()
27
39
  })
40
+ inView = false
41
+ intersectionObserver: IntersectionObserver
42
+ initialized = false
28
43
 
29
44
  constructor(private changeDetector: ChangeDetectorRef) {}
30
45
 
@@ -36,8 +51,37 @@ export class AnchorLinkDirective implements OnInit, OnDestroy {
36
51
  this.refreshDisabledState()
37
52
  }
38
53
 
54
+ ngAfterViewChecked() {
55
+ if (!this.initialized && !this.disabled) {
56
+ const target = document.getElementById(this.targetId)
57
+ if (target) {
58
+ this.initializeIntersectionObserver(target)
59
+ this.initialized = true
60
+ }
61
+ }
62
+ }
63
+
64
+ initializeIntersectionObserver(target: HTMLElement) {
65
+ this.intersectionObserver = new IntersectionObserver(
66
+ (entries) => {
67
+ entries.forEach((entry) => {
68
+ this.inView = entry.isIntersecting
69
+ this.changeDetector.detectChanges()
70
+ })
71
+ },
72
+ {
73
+ root: null,
74
+ rootMargin: '-30% 0% -60% 0%',
75
+ }
76
+ )
77
+ this.intersectionObserver.observe(target)
78
+ }
79
+
39
80
  ngOnDestroy() {
40
81
  this.observer.disconnect()
82
+ if (this.intersectionObserver) {
83
+ this.intersectionObserver.disconnect()
84
+ }
41
85
  }
42
86
 
43
87
  refreshDisabledState() {
@@ -8,11 +8,11 @@
8
8
  >
9
9
  {{ progress }}%
10
10
  </div>
11
- <div class="flex-grow h-[6px] w-full {{ color.outerBar }} rounded-full">
11
+ <div class="flex-grow h-[4px] w-[52px] {{ color.outerBar }} rounded-full">
12
12
  <div
13
13
  [style.width.%]="progress"
14
14
  class="{{ color.innerBar }} transition-width duration-500
15
- ease-in-out rounded-full shadow-sm h-full"
15
+ ease-in-out rounded-full shadow-sm w-[52px] h-[4px]"
16
16
  ></div>
17
17
  </div>
18
18
  </div>
package/tailwind.base.css CHANGED
@@ -66,15 +66,20 @@
66
66
  /* this is a base class, do not use it directly */
67
67
  .gn-ui-btn {
68
68
  --rounded: var(--gn-ui-button-rounded, 0.25em);
69
+ --border-width: var(--gn-ui-button-border-width, 1px);
69
70
  --padding: var(--gn-ui-button-padding, 1em);
70
71
  --width: var(--gn-ui-button-width, auto);
71
72
  --height: var(--gn-ui-button-height, auto);
72
- --background: var(--gn-ui-button-background, --color-background);
73
+ --background: var(--gn-ui-button-background, var(--color-background));
74
+ --bg-hover: var(--gn-ui-button-bg-hover, var(--color-background));
73
75
  --font-size: var(--gn-ui-button-font-size, 1em);
76
+ --color: var(--gn-ui-button-color, var(--color-main));
74
77
  @apply flex flex-row items-center justify-center
75
78
  text-[length:--font-size] leading-none
79
+ text-[color:--color]
76
80
  p-[--padding] rounded-[--rounded] w-[--width] h-[--height] overflow-hidden
77
- bg-[--background] transition-all duration-100
81
+ border-[length:--border-width] bg-[--background] transition-all duration-100
82
+ hover:bg-[--bg-hover] focus:bg-[--bg-hover] active:bg-[--background]
78
83
  outline-none
79
84
  relative
80
85
  disabled:opacity-50 disabled:pointer-events-none
@@ -90,43 +95,43 @@
90
95
  .gn-ui-btn-default {
91
96
  @apply gn-ui-btn text-white
92
97
  bg-gray-700 hover:bg-gray-800 active:bg-gray-900
93
- border border-gray-700 focus:ring-4 focus:ring-gray-200;
98
+ border-gray-700 focus:ring-4 focus:ring-gray-200;
94
99
  }
95
100
 
96
101
  .gn-ui-btn-primary {
97
102
  @apply gn-ui-btn text-white
98
103
  bg-primary hover:bg-primary-darker focus:bg-primary-darker active:bg-primary-darkest
99
- border border-primary focus:ring-4 focus:ring-primary-lightest;
104
+ border-primary focus:ring-4 focus:ring-primary-lightest;
100
105
  }
101
106
 
102
107
  .gn-ui-btn-secondary {
103
108
  @apply gn-ui-btn text-white
104
109
  bg-secondary hover:bg-secondary-darker focus:bg-secondary-darker active:bg-secondary-darkest
105
- border border-secondary focus:ring-4 focus:ring-secondary-lightest;
110
+ border-secondary focus:ring-4 focus:ring-secondary-lightest;
106
111
  }
107
112
 
108
113
  .gn-ui-btn-gray {
109
114
  @apply gn-ui-btn text-black
110
115
  bg-gray-100 hover:bg-gray-200 focus:bg-gray-200 active:bg-gray-300
111
- border border-gray-100 focus:ring-4 focus:ring-gray-50;
116
+ border-gray-100 focus:ring-4 focus:ring-gray-50;
112
117
  }
113
118
 
114
119
  .gn-ui-btn-black {
115
120
  @apply gn-ui-btn text-white
116
121
  bg-black hover:bg-gray-950 focus:bg-gray-950 active:bg-gray-900
117
- border border-black focus:ring-4 focus:ring-gray-300;
122
+ border-black focus:ring-4 focus:ring-gray-300;
118
123
  }
119
124
 
120
125
  .gn-ui-btn-outline {
121
- @apply gn-ui-btn text-main
126
+ @apply gn-ui-btn
122
127
  hover:text-primary-darker focus:text-primary-darker active:text-primary-black
123
- border border-gray-300 hover:border-primary-lighter focus:border-primary-lighter focus:ring-4 focus:ring-primary-lightest active:border-primary-darker;
128
+ border-gray-300 hover:border-primary-lighter focus:border-primary-lighter focus:ring-4 focus:ring-primary-lightest active:border-primary-darker;
124
129
  }
125
130
 
126
131
  .gn-ui-btn-light {
127
- @apply gn-ui-btn text-main
132
+ @apply gn-ui-btn
128
133
  hover:bg-gray-50 focus:bg-gray-50 active:bg-gray-100
129
- border border-white focus:ring-4 focus:ring-gray-300;
134
+ border-white focus:ring-4 focus:ring-gray-300;
130
135
  }
131
136
 
132
137
  .gn-ui-card-xs {
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "": "",
3
3
  "Add Layer As": "",
4
+ "Enter to search": "",
4
5
  "button.login": "",
5
6
  "catalog.figures.datasets": "{count, plural, =0{Datensätze} one{Datensatz} other{Datensätze}}",
6
7
  "catalog.figures.organizations": "{count, plural, =0{Organisationen} one{Organisation} other{Organisationen}}",
@@ -62,7 +63,6 @@
62
63
  "datahub.news.contact.title": "Ein spezielles Bedürfnis?",
63
64
  "datahub.news.feed": "Nachrichtenfeed",
64
65
  "datahub.news.figures": "Indikatoren",
65
- "datahub.record.addToFavorites": "Zu Favoriten hinzufügen",
66
66
  "datahub.search.back": "Zurück",
67
67
  "datahub.search.filter.all": "Alle",
68
68
  "datahub.search.filter.generatedByAPI": "Generiert durch eine API",
@@ -72,6 +72,7 @@
72
72
  "dataset.error.http": "Die Daten konnten aufgrund eines HTTP-Fehlers nicht geladen werden: \"{ info }\"",
73
73
  "dataset.error.network": "Die Daten konnten aufgrund eines Netzwerkfehlers oder CORS-Beschränkungen nicht geladen werden: \"{ info }\"",
74
74
  "dataset.error.parse": "Die Daten wurden geladen, konnten aber nicht gelesen werden: \"{ info }\"",
75
+ "dataset.error.restrictedAccess": "",
75
76
  "dataset.error.unknown": "Die Daten können nicht angezeigt werden: \"{ info }\"",
76
77
  "dataset.error.unsupportedType": "Der folgende Inhaltstyp wird nicht unterstützt: \"{ info }\"",
77
78
  "domain.contact.role.author": "",
@@ -331,6 +332,7 @@
331
332
  "map.wms.urlInput.hint": "Geben Sie die WMS URL ein",
332
333
  "multiselect.filter.placeholder": "Suche",
333
334
  "nav.back": "Zurück",
335
+ "navbar.mobile.menuTitle": "Schnellzugriff",
334
336
  "next": "weiter",
335
337
  "ogc.unreachable.unknown": "Der Dienst konnte nicht erreicht werden",
336
338
  "organisation.filter.placeholder": "Ergebnisse filtern",
@@ -354,8 +356,12 @@
354
356
  "record.action.duplicating": "",
355
357
  "record.action.rollback": "",
356
358
  "record.action.view": "Anzeigen",
359
+ "record.card.metadata.contact": "",
357
360
  "record.externalViewer.open": "In externem Kartenviewer öffnen",
358
361
  "record.feature.limit": "Die Vorschau wurde aufgrund zu vieler Elemente deaktiviert",
362
+ "record.kind.dataset": "",
363
+ "record.kind.reuse": "",
364
+ "record.kind.service": "",
359
365
  "record.metadata.about": "Beschreibung",
360
366
  "record.metadata.api": "API",
361
367
  "record.metadata.api.form.closeButton": "Schließen",
@@ -389,6 +395,7 @@
389
395
  "record.metadata.api.form.zoneTitle": "",
390
396
  "record.metadata.api.form.zoneTooltip": "",
391
397
  "record.metadata.api.gpfdl": "",
398
+ "record.metadata.capabilities": "",
392
399
  "record.metadata.catalog": "Katalog",
393
400
  "record.metadata.contact": "Kontakt",
394
401
  "record.metadata.creation": "Erstellungsdatum",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "": "",
3
3
  "Add Layer As": "",
4
+ "Enter to search": "",
4
5
  "button.login": "Log in",
5
6
  "catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
6
7
  "catalog.figures.organizations": "{count, plural, =0{organizations} one{organization} other{organizations}}",
@@ -62,7 +63,6 @@
62
63
  "datahub.news.contact.title": "A specific need?",
63
64
  "datahub.news.feed": "News feed",
64
65
  "datahub.news.figures": "Indicators",
65
- "datahub.record.addToFavorites": "Add to favorites",
66
66
  "datahub.search.back": "Back",
67
67
  "datahub.search.filter.all": "All",
68
68
  "datahub.search.filter.generatedByAPI": "Generated by an API",
@@ -72,6 +72,7 @@
72
72
  "dataset.error.http": "The data could not be loaded because of an HTTP error: \"{ info }\"",
73
73
  "dataset.error.network": "The data could not be loaded because of a network error or CORS limitations: \"{ info }\"",
74
74
  "dataset.error.parse": "The data was loaded but could not be parsed: \"{ info }\"",
75
+ "dataset.error.restrictedAccess": "Access to this resource is restricted",
75
76
  "dataset.error.unknown": "The data cannot be displayed: \"{ info }\"",
76
77
  "dataset.error.unsupportedType": "The following content type is unsupported: \"{ info }\"",
77
78
  "domain.contact.role.author": "Author",
@@ -331,6 +332,7 @@
331
332
  "map.wms.urlInput.hint": "Enter WMS service URL",
332
333
  "multiselect.filter.placeholder": "Search",
333
334
  "nav.back": "Back",
335
+ "navbar.mobile.menuTitle": "Quick access",
334
336
  "next": "Next",
335
337
  "ogc.unreachable.unknown": "The service could not be reached",
336
338
  "organisation.filter.placeholder": "Filter results",
@@ -354,8 +356,12 @@
354
356
  "record.action.duplicating": "Duplicating...",
355
357
  "record.action.rollback": "Rollback",
356
358
  "record.action.view": "View",
359
+ "record.card.metadata.contact": "Metadata Contact",
357
360
  "record.externalViewer.open": "Open in the external map viewer",
358
361
  "record.feature.limit": "Preview disabled due to too many elements",
362
+ "record.kind.dataset": "Data",
363
+ "record.kind.reuse": "Reuse",
364
+ "record.kind.service": "Service",
359
365
  "record.metadata.about": "Description",
360
366
  "record.metadata.api": "API",
361
367
  "record.metadata.api.form.closeButton": "Close",
@@ -389,6 +395,7 @@
389
395
  "record.metadata.api.form.zoneTitle": "Zone",
390
396
  "record.metadata.api.form.zoneTooltip": "Dropdown for selecting a geographic zone",
391
397
  "record.metadata.api.gpfdl": "Data download",
398
+ "record.metadata.capabilities": "",
392
399
  "record.metadata.catalog": "Catalog",
393
400
  "record.metadata.contact": "Contact",
394
401
  "record.metadata.creation": "Date of creation",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "": "",
3
3
  "Add Layer As": "",
4
+ "Enter to search": "",
4
5
  "button.login": "",
5
6
  "catalog.figures.datasets": "conjuntos de datos",
6
7
  "catalog.figures.organizations": "organizaciones",
@@ -62,7 +63,6 @@
62
63
  "datahub.news.contact.title": "",
63
64
  "datahub.news.feed": "",
64
65
  "datahub.news.figures": "",
65
- "datahub.record.addToFavorites": "",
66
66
  "datahub.search.back": "",
67
67
  "datahub.search.filter.all": "",
68
68
  "datahub.search.filter.generatedByAPI": "",
@@ -72,6 +72,7 @@
72
72
  "dataset.error.http": "",
73
73
  "dataset.error.network": "",
74
74
  "dataset.error.parse": "",
75
+ "dataset.error.restrictedAccess": "",
75
76
  "dataset.error.unknown": "",
76
77
  "dataset.error.unsupportedType": "",
77
78
  "domain.contact.role.author": "",
@@ -331,6 +332,7 @@
331
332
  "map.wms.urlInput.hint": "",
332
333
  "multiselect.filter.placeholder": "",
333
334
  "nav.back": "",
335
+ "navbar.mobile.menuTitle": "Acceso rápido",
334
336
  "next": "",
335
337
  "ogc.unreachable.unknown": "",
336
338
  "organisation.filter.placeholder": "",
@@ -354,8 +356,12 @@
354
356
  "record.action.duplicating": "",
355
357
  "record.action.rollback": "",
356
358
  "record.action.view": "",
359
+ "record.card.metadata.contact": "",
357
360
  "record.externalViewer.open": "",
358
361
  "record.feature.limit": "",
362
+ "record.kind.dataset": "",
363
+ "record.kind.reuse": "",
364
+ "record.kind.service": "",
359
365
  "record.metadata.about": "",
360
366
  "record.metadata.api": "",
361
367
  "record.metadata.api.form.closeButton": "",
@@ -389,6 +395,7 @@
389
395
  "record.metadata.api.form.zoneTitle": "",
390
396
  "record.metadata.api.form.zoneTooltip": "",
391
397
  "record.metadata.api.gpfdl": "",
398
+ "record.metadata.capabilities": "",
392
399
  "record.metadata.catalog": "",
393
400
  "record.metadata.contact": "",
394
401
  "record.metadata.creation": "",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "": "",
3
3
  "Add Layer As": "",
4
+ "Enter to search": "",
4
5
  "button.login": "Se connecter",
5
6
  "catalog.figures.datasets": "{count, plural, =0{données} one{donnée} other{données}}",
6
7
  "catalog.figures.organizations": "{count, plural, =0{organisations} one{organisation} other{organisations}}",
@@ -62,7 +63,6 @@
62
63
  "datahub.news.contact.title": "Un besoin spécifique ?",
63
64
  "datahub.news.feed": "Fil d'activité",
64
65
  "datahub.news.figures": "Quelques chiffres",
65
- "datahub.record.addToFavorites": "Ajouter aux favoris",
66
66
  "datahub.search.back": "Retour",
67
67
  "datahub.search.filter.all": "Tous",
68
68
  "datahub.search.filter.generatedByAPI": "généré par une API",
@@ -72,6 +72,7 @@
72
72
  "dataset.error.http": "Le chargement des données a échoué en raison d'une erreur HTTP: \"{ info }\"",
73
73
  "dataset.error.network": "Le chargement des données a échoué en raison d'une erreur réseau ou de limitations CORS: \"{ info }\"",
74
74
  "dataset.error.parse": "Les données ont été chargées mais leur décodage a échoué: \"{ info }\"",
75
+ "dataset.error.restrictedAccess": "L’accès à cette ressource est restreint",
75
76
  "dataset.error.unknown": "Les données ne peuvent être affichées: \"{ info }\"",
76
77
  "dataset.error.unsupportedType": "Le type de contenu suivant n'est pas pris en charge: \"{ info }\"",
77
78
  "domain.contact.role.author": "Auteur",
@@ -331,6 +332,7 @@
331
332
  "map.wms.urlInput.hint": "Entrez l'URL du service WMS",
332
333
  "multiselect.filter.placeholder": "Rechercher",
333
334
  "nav.back": "Retour",
335
+ "navbar.mobile.menuTitle": "Navigation rapide",
334
336
  "next": "Suivant",
335
337
  "ogc.unreachable.unknown": "Le service n'est pas accessible",
336
338
  "organisation.filter.placeholder": "Filtrer les résultats",
@@ -354,9 +356,13 @@
354
356
  "record.action.duplicating": "Duplication...",
355
357
  "record.action.rollback": "Restaurer",
356
358
  "record.action.view": "Voir",
359
+ "record.card.metadata.contact": "Contact de la métadonnée ",
357
360
  "record.externalViewer.open": "Ouvrir dans le visualiseur externe",
358
361
  "record.feature.limit": "L’aperçu a été désactivé en raison d’un trop grand nombre d'éléments",
359
- "record.metadata.about": "Description",
362
+ "record.kind.dataset": "Donnée",
363
+ "record.kind.reuse": "Réutilisation",
364
+ "record.kind.service": "Service",
365
+ "record.metadata.about": "A propos",
360
366
  "record.metadata.api": "API",
361
367
  "record.metadata.api.form.closeButton": "Fermer",
362
368
  "record.metadata.api.form.closeForm": "Fermer le panneau de personnalisation",
@@ -389,6 +395,7 @@
389
395
  "record.metadata.api.form.zoneTitle": "Zone",
390
396
  "record.metadata.api.form.zoneTooltip": "Menu déroulant pour sélectionner une zone géographique",
391
397
  "record.metadata.api.gpfdl": "Téléchargement",
398
+ "record.metadata.capabilities": "Capacités du service",
392
399
  "record.metadata.catalog": "Catalogue",
393
400
  "record.metadata.contact": "Contact",
394
401
  "record.metadata.creation": "Date de création",
@@ -398,7 +405,7 @@
398
405
  "record.metadata.keywords": "Mots-clés",
399
406
  "record.metadata.languages": "Langues",
400
407
  "record.metadata.lastUpdate": "Mis à jour le {date}",
401
- "record.metadata.links": "Liens",
408
+ "record.metadata.links": "Ressources & liens",
402
409
  "record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
403
410
  "record.metadata.otherConstraints": "Limitations d'usage",
404
411
  "record.metadata.owner": "Catalogue d'origine",