geonetwork-ui 2.3.0-dev.3efe236f → 2.3.0-dev.549700bf

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 (185) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +2 -2
  2. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +2 -2
  3. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +9 -7
  4. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +1 -1
  5. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +35 -2
  6. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.mjs +64 -0
  7. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.mjs +15 -0
  8. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +104 -0
  9. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +25 -6
  10. package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +1 -1
  11. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +23 -1
  12. package/esm2022/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.mjs +73 -20
  13. package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +1 -1
  14. package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +1 -1
  15. package/esm2022/libs/feature/map/src/lib/map-context/map-context.model.mjs +1 -1
  16. package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +29 -8
  17. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +1 -1
  18. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +4 -3
  19. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +1 -1
  20. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +1 -3
  21. package/esm2022/libs/feature/search/src/index.mjs +2 -1
  22. package/esm2022/libs/feature/search/src/lib/results-layout/results-layout.component.mjs +1 -1
  23. package/esm2022/libs/feature/search/src/lib/sort-by/sort-by.component.mjs +1 -1
  24. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +1 -1
  25. package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +1 -1
  26. package/esm2022/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.mjs +1 -1
  27. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -2
  28. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +2 -2
  29. package/esm2022/libs/ui/elements/src/lib/link-card/link-card.component.mjs +16 -3
  30. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +99 -36
  31. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +1 -6
  32. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +3 -5
  33. package/esm2022/libs/ui/inputs/src/index.mjs +16 -15
  34. package/esm2022/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.mjs +4 -3
  35. package/esm2022/libs/ui/inputs/src/lib/date-picker/date-picker.component.mjs +22 -0
  36. package/esm2022/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.mjs +7 -5
  37. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +19 -8
  38. package/esm2022/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.mjs +29 -0
  39. package/esm2022/libs/ui/inputs/src/lib/text-input/text-input.component.mjs +5 -3
  40. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +14 -11
  41. package/esm2022/libs/ui/layout/src/index.mjs +2 -1
  42. package/esm2022/libs/ui/layout/src/lib/block-list/block-list.component.mjs +76 -0
  43. package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +42 -18
  44. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +3 -8
  45. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +2 -2
  46. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +22 -1
  47. package/esm2022/translations/de.json +22 -14
  48. package/esm2022/translations/en.json +22 -14
  49. package/esm2022/translations/es.json +22 -14
  50. package/esm2022/translations/fr.json +22 -14
  51. package/esm2022/translations/it.json +22 -14
  52. package/esm2022/translations/nl.json +22 -14
  53. package/esm2022/translations/pt.json +22 -14
  54. package/fesm2022/geonetwork-ui.mjs +1505 -908
  55. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  56. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  57. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  58. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +3 -1
  59. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  60. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts +39 -0
  61. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts.map +1 -0
  62. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.d.ts +8 -0
  63. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.d.ts.map +1 -0
  64. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts +21 -0
  65. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts.map +1 -0
  66. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +4 -0
  67. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  68. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  69. package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts +10 -5
  70. package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts.map +1 -1
  71. package/libs/feature/map/src/lib/map-context/map-context.model.d.ts +1 -0
  72. package/libs/feature/map/src/lib/map-context/map-context.model.d.ts.map +1 -1
  73. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
  74. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  75. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  76. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
  77. package/libs/feature/search/src/index.d.ts +1 -0
  78. package/libs/feature/search/src/index.d.ts.map +1 -1
  79. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts +3 -3
  80. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  81. package/libs/ui/elements/src/lib/api-card/api-card.component.d.ts.map +1 -1
  82. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
  83. package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts +3 -1
  84. package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts.map +1 -1
  85. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +24 -4
  86. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
  87. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +29 -30
  88. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  89. package/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.d.ts +1 -2
  90. package/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.d.ts.map +1 -1
  91. package/libs/ui/inputs/src/index.d.ts +15 -14
  92. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  93. package/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.d.ts +1 -1
  94. package/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.d.ts.map +1 -1
  95. package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts +9 -0
  96. package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts.map +1 -0
  97. package/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.d.ts +1 -1
  98. package/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.d.ts.map +1 -1
  99. package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts +2 -1
  100. package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts.map +1 -1
  101. package/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts +12 -0
  102. package/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts.map +1 -0
  103. package/libs/ui/inputs/src/lib/text-input/text-input.component.d.ts +2 -1
  104. package/libs/ui/inputs/src/lib/text-input/text-input.component.d.ts.map +1 -1
  105. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +35 -35
  106. package/libs/ui/layout/src/index.d.ts +1 -0
  107. package/libs/ui/layout/src/index.d.ts.map +1 -1
  108. package/libs/ui/layout/src/lib/block-list/block-list.component.d.ts +25 -0
  109. package/libs/ui/layout/src/lib/block-list/block-list.component.d.ts.map +1 -0
  110. package/libs/ui/layout/src/lib/carousel/carousel.component.d.ts +13 -6
  111. package/libs/ui/layout/src/lib/carousel/carousel.component.d.ts.map +1 -1
  112. package/libs/ui/layout/src/lib/ui-layout.module.d.ts +4 -5
  113. package/libs/ui/layout/src/lib/ui-layout.module.d.ts.map +1 -1
  114. package/libs/util/shared/src/lib/links/link-utils.d.ts +18 -0
  115. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  116. package/package.json +2 -2
  117. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +1 -1
  118. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +1 -4
  119. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +16 -10
  120. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +8 -0
  121. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +2 -2
  122. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +51 -1
  123. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.css +0 -0
  124. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.html +8 -0
  125. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.ts +64 -0
  126. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.css +0 -0
  127. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.html +4 -0
  128. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.ts +15 -0
  129. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.css +0 -0
  130. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.html +14 -0
  131. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +143 -0
  132. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +38 -33
  133. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +21 -0
  134. package/src/libs/feature/editor/src/lib/fields.config.ts +22 -0
  135. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.css +7 -0
  136. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.html +32 -18
  137. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.ts +72 -17
  138. package/src/libs/feature/map/src/lib/map-context/map-context.model.ts +1 -0
  139. package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +26 -8
  140. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +2 -1
  141. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +0 -1
  142. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +0 -2
  143. package/src/libs/feature/search/src/index.ts +1 -0
  144. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +2 -2
  145. package/src/libs/ui/elements/src/lib/api-card/api-card.component.ts +2 -1
  146. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +1 -1
  147. package/src/libs/ui/elements/src/lib/link-card/link-card.component.html +38 -20
  148. package/src/libs/ui/elements/src/lib/link-card/link-card.component.ts +12 -0
  149. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +26 -10
  150. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +126 -30
  151. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +0 -2
  152. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.html +1 -1
  153. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.ts +0 -1
  154. package/src/libs/ui/inputs/src/index.ts +15 -14
  155. package/src/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.ts +3 -0
  156. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.css +3 -0
  157. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.html +11 -0
  158. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.ts +16 -0
  159. package/src/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.ts +8 -1
  160. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.html +1 -0
  161. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +14 -0
  162. package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.css +6 -0
  163. package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.html +26 -0
  164. package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.ts +32 -0
  165. package/src/libs/ui/inputs/src/lib/text-input/text-input.component.html +1 -0
  166. package/src/libs/ui/inputs/src/lib/text-input/text-input.component.ts +1 -0
  167. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +3 -3
  168. package/src/libs/ui/layout/src/index.ts +1 -0
  169. package/src/libs/ui/layout/src/lib/block-list/block-list.component.css +23 -0
  170. package/src/libs/ui/layout/src/lib/block-list/block-list.component.html +20 -0
  171. package/src/libs/ui/layout/src/lib/block-list/block-list.component.ts +84 -0
  172. package/src/libs/ui/layout/src/lib/carousel/carousel.component.css +8 -4
  173. package/src/libs/ui/layout/src/lib/carousel/carousel.component.html +4 -4
  174. package/src/libs/ui/layout/src/lib/carousel/carousel.component.ts +45 -15
  175. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +0 -2
  176. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +1 -1
  177. package/src/libs/util/shared/src/lib/links/link-utils.ts +21 -0
  178. package/translations/de.json +22 -14
  179. package/translations/en.json +22 -14
  180. package/translations/es.json +22 -14
  181. package/translations/fr.json +22 -14
  182. package/translations/it.json +22 -14
  183. package/translations/nl.json +22 -14
  184. package/translations/pt.json +22 -14
  185. package/translations/sk.json +22 -14
@@ -36,7 +36,6 @@ import { ImageInputComponent } from './image-input/image-input.component'
36
36
 
37
37
  @NgModule({
38
38
  declarations: [
39
- DropdownSelectorComponent,
40
39
  AutocompleteComponent,
41
40
  TextInputComponent,
42
41
  DragAndDropFileInputComponent,
@@ -45,11 +44,9 @@ import { ImageInputComponent } from './image-input/image-input.component'
45
44
  StarToggleComponent,
46
45
  DropdownMultiselectComponent,
47
46
  ViewportIntersectorComponent,
48
- CheckToggleComponent,
49
47
  CopyTextButtonComponent,
50
48
  CheckboxComponent,
51
49
  SearchInputComponent,
52
- DateRangePickerComponent,
53
50
  ],
54
51
  imports: [
55
52
  CommonModule,
@@ -73,6 +70,9 @@ import { ImageInputComponent } from './image-input/image-input.component'
73
70
  TextAreaComponent,
74
71
  ButtonComponent,
75
72
  ImageInputComponent,
73
+ DropdownSelectorComponent,
74
+ DateRangePickerComponent,
75
+ CheckToggleComponent,
76
76
  ],
77
77
  exports: [
78
78
  DropdownSelectorComponent,
@@ -6,4 +6,5 @@ export * from './lib/form-field-wrapper/form-field-wrapper.component'
6
6
  export * from './lib/interactive-table/interactive-table-column/interactive-table-column.component'
7
7
  export * from './lib/interactive-table/interactive-table.component'
8
8
  export * from './lib/sticky-header/sticky-header.component'
9
+ export * from './lib/block-list/block-list.component'
9
10
  export * from './lib/ui-layout.module'
@@ -0,0 +1,23 @@
1
+ :host .block-list-container ::ng-deep > * {
2
+ flex-shrink: 0;
3
+ }
4
+
5
+ :host {
6
+ position: relative;
7
+ }
8
+
9
+ .list-page-dot {
10
+ width: 6px;
11
+ height: 6px;
12
+ border-radius: 6px;
13
+ position: relative;
14
+ }
15
+
16
+ .list-page-dot:after {
17
+ content: '';
18
+ position: absolute;
19
+ left: -7px;
20
+ top: -7px;
21
+ width: 20px;
22
+ height: 20px;
23
+ }
@@ -0,0 +1,20 @@
1
+ <div
2
+ class="block-list-container flex flex-col"
3
+ #blockContainer
4
+ [ngClass]="containerClass"
5
+ [ngStyle]="{ minHeight: minHeight + 'px' }"
6
+ >
7
+ <ng-content></ng-content>
8
+ </div>
9
+ <div
10
+ *ngIf="pagesCount > 1"
11
+ class="absolute flex flex-row justify-center gap-[14px] p-1"
12
+ [ngClass]="paginationContainerClass"
13
+ >
14
+ <button
15
+ *ngFor="let page of pages"
16
+ class="list-page-dot"
17
+ (click)="goToPage(page)"
18
+ [ngClass]="currentPage === page ? 'bg-primary' : 'bg-gray-400'"
19
+ ></button>
20
+ </div>
@@ -0,0 +1,84 @@
1
+ import {
2
+ AfterViewInit,
3
+ ChangeDetectionStrategy,
4
+ ChangeDetectorRef,
5
+ Component,
6
+ ContentChildren,
7
+ ElementRef,
8
+ Input,
9
+ QueryList,
10
+ ViewChild,
11
+ } from '@angular/core'
12
+ import { CommonModule } from '@angular/common'
13
+
14
+ @Component({
15
+ selector: 'gn-ui-block-list',
16
+ templateUrl: './block-list.component.html',
17
+ styleUrls: ['./block-list.component.css'],
18
+ changeDetection: ChangeDetectionStrategy.OnPush,
19
+ standalone: true,
20
+ imports: [CommonModule],
21
+ })
22
+ export class BlockListComponent implements AfterViewInit {
23
+ @Input() pageSize = 5
24
+ @Input() containerClass = ''
25
+ @Input() paginationContainerClass = 'w-full bottom-0 top-auto'
26
+ @ContentChildren('block', { read: ElementRef }) blocks: QueryList<
27
+ ElementRef<HTMLElement>
28
+ >
29
+ @ViewChild('blockContainer') blockContainer: ElementRef<HTMLElement>
30
+
31
+ protected minHeight = 0
32
+
33
+ protected currentPage = 0
34
+ protected get pages() {
35
+ return new Array(this.pagesCount).fill(0).map((_, i) => i)
36
+ }
37
+
38
+ get isFirstPage() {
39
+ return this.currentPage === 0
40
+ }
41
+ get isLastPage() {
42
+ return this.currentPage === this.pagesCount - 1
43
+ }
44
+ get pagesCount() {
45
+ return this.blocks ? Math.ceil(this.blocks.length / this.pageSize) : 1
46
+ }
47
+
48
+ constructor(private changeDetector: ChangeDetectorRef) {}
49
+
50
+ ngAfterViewInit() {
51
+ this.blocks.changes.subscribe(this.refreshBlocksVisibility)
52
+ this.refreshBlocksVisibility()
53
+
54
+ // we store the first height as the min-height of the list container
55
+ this.minHeight = this.blockContainer.nativeElement.clientHeight
56
+ this.changeDetector.detectChanges()
57
+ }
58
+
59
+ protected refreshBlocksVisibility = () => {
60
+ this.blocks.forEach((block, index) => {
61
+ block.nativeElement.style.display =
62
+ index >= this.currentPage * this.pageSize &&
63
+ index < (this.currentPage + 1) * this.pageSize
64
+ ? null
65
+ : 'none'
66
+ })
67
+ }
68
+
69
+ public goToPage(index: number) {
70
+ this.currentPage = Math.max(Math.min(index, this.pagesCount - 1), 0)
71
+ this.changeDetector.detectChanges()
72
+ this.refreshBlocksVisibility()
73
+ }
74
+
75
+ public previousPage() {
76
+ if (this.isFirstPage) return
77
+ this.goToPage(this.currentPage - 1)
78
+ }
79
+
80
+ public nextPage() {
81
+ if (this.isLastPage) return
82
+ this.goToPage(this.currentPage + 1)
83
+ }
84
+ }
@@ -1,20 +1,24 @@
1
1
  :host .carousel-container ::ng-deep > * {
2
2
  flex-shrink: 0;
3
3
  }
4
+
4
5
  :host {
5
6
  position: relative;
7
+ display: block;
6
8
  }
9
+
7
10
  .carousel-step-dot {
8
11
  width: 6px;
9
12
  height: 6px;
10
13
  border-radius: 6px;
11
14
  position: relative;
12
15
  }
16
+
13
17
  .carousel-step-dot:after {
14
18
  content: '';
15
19
  position: absolute;
16
- left: -4px;
17
- top: -4px;
18
- width: 14px;
19
- height: 14px;
20
+ left: -7px;
21
+ top: -7px;
22
+ width: 20px;
23
+ height: 20px;
20
24
  }
@@ -1,17 +1,17 @@
1
- <div #carouselOverflowContainer class="overflow-hidden h-full w-full">
2
- <div class="carousel-container flex flex-row" [ngClass]="containerClass">
1
+ <div #carouselOverflowContainer class="w-full">
2
+ <div class="carousel-container flex" [ngClass]="containerClass">
3
3
  <ng-content></ng-content>
4
4
  </div>
5
5
  </div>
6
6
  <div
7
7
  *ngIf="steps.length > 1"
8
- class="absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1"
8
+ class="absolute flex flex-row justify-center gap-[14px] p-1"
9
9
  [ngClass]="stepsContainerClass"
10
10
  >
11
11
  <button
12
12
  *ngFor="let step of steps; let i = index"
13
13
  class="carousel-step-dot"
14
14
  (click)="scrollToStep(i)"
15
- [ngClass]="selectedStep === i ? 'bg-secondary' : 'bg-gray-400'"
15
+ [ngClass]="currentStep === i ? 'bg-primary' : 'bg-gray-400'"
16
16
  ></button>
17
17
  </div>
@@ -4,25 +4,49 @@ import {
4
4
  ChangeDetectorRef,
5
5
  Component,
6
6
  ElementRef,
7
+ EventEmitter,
7
8
  Input,
9
+ Output,
8
10
  ViewChild,
9
11
  } from '@angular/core'
10
12
  import EmblaCarousel, { EmblaCarouselType } from 'embla-carousel'
13
+ import { CommonModule } from '@angular/common'
11
14
 
12
15
  @Component({
13
16
  selector: 'gn-ui-carousel',
14
17
  templateUrl: './carousel.component.html',
15
18
  styleUrls: ['./carousel.component.css'],
16
19
  changeDetection: ChangeDetectionStrategy.OnPush,
20
+ standalone: true,
21
+ imports: [CommonModule],
17
22
  })
18
23
  export class CarouselComponent implements AfterViewInit {
24
+ @ViewChild('carouselOverflowContainer') carouselOverflowContainer: ElementRef
25
+
19
26
  @Input() containerClass = ''
20
- @Input() stepsContainerClass = ''
21
- @ViewChild('carouselOverflowContainer')
22
- carouselOverflowContainer: ElementRef
23
- steps: number[] = []
24
- selectedStep = -1
25
- emblaApi: EmblaCarouselType
27
+ @Input() stepsContainerClass = 'w-full bottom-0 top-auto'
28
+ @Output() currentStepChange = new EventEmitter<number>()
29
+
30
+ protected steps: number[] = []
31
+ protected emblaApi: EmblaCarouselType
32
+ protected currentStep = 0
33
+
34
+ protected refreshSteps = () => {
35
+ this.steps = this.emblaApi.scrollSnapList()
36
+ this.currentStep = this.emblaApi.selectedScrollSnap()
37
+ this.currentStepChange.emit(this.currentStep)
38
+ this.changeDetector.detectChanges()
39
+ }
40
+
41
+ get isFirstStep() {
42
+ return this.currentStep === 0
43
+ }
44
+ get isLastStep() {
45
+ return this.currentStep === this.steps.length - 1
46
+ }
47
+ get stepsCount() {
48
+ return this.steps.length
49
+ }
26
50
 
27
51
  constructor(private changeDetector: ChangeDetectorRef) {}
28
52
 
@@ -33,18 +57,24 @@ export class CarouselComponent implements AfterViewInit {
33
57
  duration: 15,
34
58
  }
35
59
  )
36
- const refreshSteps = () => {
37
- this.steps = this.emblaApi.scrollSnapList()
38
- this.selectedStep = this.emblaApi.selectedScrollSnap()
39
- this.changeDetector.detectChanges()
40
- }
60
+
41
61
  this.emblaApi
42
- .on('init', refreshSteps)
43
- .on('reInit', refreshSteps)
44
- .on('select', refreshSteps)
62
+ .on('init', this.refreshSteps)
63
+ .on('reInit', this.refreshSteps)
64
+ .on('select', this.refreshSteps)
45
65
  }
46
66
 
47
- scrollToStep(stepIndex: number) {
67
+ public scrollToStep(stepIndex: number) {
48
68
  this.emblaApi.scrollTo(stepIndex)
49
69
  }
70
+
71
+ public slideToPrevious() {
72
+ if (this.isFirstStep) return
73
+ this.emblaApi.scrollPrev()
74
+ }
75
+
76
+ public slideToNext() {
77
+ if (this.isLastStep) return
78
+ this.emblaApi.scrollNext()
79
+ }
50
80
  }
@@ -15,14 +15,12 @@ import { CarouselComponent } from './carousel/carousel.component'
15
15
  StickyHeaderComponent,
16
16
  AnchorLinkDirective,
17
17
  ExpandablePanelButtonComponent,
18
- CarouselComponent,
19
18
  ],
20
19
  exports: [
21
20
  ExpandablePanelComponent,
22
21
  StickyHeaderComponent,
23
22
  AnchorLinkDirective,
24
23
  ExpandablePanelButtonComponent,
25
- CarouselComponent,
26
24
  ],
27
25
  })
28
26
  export class UiLayoutModule {}
@@ -26,7 +26,7 @@ export class LinkClassifierService {
26
26
  case 'wmts':
27
27
  return [LinkUsage.API, LinkUsage.MAP_API]
28
28
  case 'ogcFeatures':
29
- return [LinkUsage.API]
29
+ return [LinkUsage.API, LinkUsage.DOWNLOAD, LinkUsage.GEODATA]
30
30
  default:
31
31
  return [LinkUsage.UNKNOWN]
32
32
  }
@@ -94,6 +94,27 @@ export const FORMATS = {
94
94
  color: '#de630b',
95
95
  mimeTypes: ['application/x-dxf', 'image/x-dxf'],
96
96
  },
97
+ html: {
98
+ extensions: ['html', 'htm'],
99
+ priority: 12,
100
+ color: '#f2bb3a',
101
+ mimeTypes: ['text/html'],
102
+ },
103
+ fgb: {
104
+ extensions: ['fgb', 'flatgeobuf'],
105
+ priority: 13,
106
+ color: '#f2bb3a',
107
+ mimeTypes: ['application/flatgeobuf'],
108
+ },
109
+ jsonfg: {
110
+ extensions: ['jsonfg', 'jsonfgc'],
111
+ priority: 14,
112
+ color: '#f2bb3a',
113
+ mimeTypes: [
114
+ 'application/vnd.ogc.fg+json',
115
+ 'application/vnd.ogc.fg+json;compatibility=geojson',
116
+ ],
117
+ },
97
118
  } as const
98
119
 
99
120
  export type FileFormat = keyof typeof FORMATS
@@ -145,6 +145,19 @@
145
145
  "downloads.format.unknown": "unbekannt",
146
146
  "downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
147
147
  "dropFile": "Datei ablegen",
148
+ "editor.record.form.license": "Lizenz",
149
+ "editor.record.form.license.cc-by": "",
150
+ "editor.record.form.license.cc-by-sa": "",
151
+ "editor.record.form.license.cc-zero": "",
152
+ "editor.record.form.license.etalab": "",
153
+ "editor.record.form.license.etalab-v2": "",
154
+ "editor.record.form.license.odbl": "",
155
+ "editor.record.form.license.odc-by": "",
156
+ "editor.record.form.license.pddl": "",
157
+ "editor.record.form.license.unknown": "Unbekannt oder nicht vorhanden",
158
+ "editor.record.form.resourceUpdated": "",
159
+ "editor.record.form.updateFrequency": "",
160
+ "editor.record.form.updateFrequency.planned": "",
148
161
  "editor.record.loadError.body": "",
149
162
  "editor.record.loadError.closeMessage": "",
150
163
  "editor.record.loadError.title": "",
@@ -215,6 +228,7 @@
215
228
  "multiselect.filter.placeholder": "Suche",
216
229
  "nav.back": "Zurück",
217
230
  "next": "weiter",
231
+ "ogc.unreachable.unknown": "Der Dienst konnte nicht erreicht werden",
218
232
  "organisation.filter.placeholder": "Ergebnisse filtern",
219
233
  "organisation.sort.sortBy": "Sortieren nach:",
220
234
  "organisations.hits.found": "{hits, plural, =0{Keine Organisation gefunden} other{{hits} von {total} Organisationen angezeigt}}",
@@ -279,14 +293,6 @@
279
293
  "record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
280
294
  "record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
281
295
  "record.metadata.related": "Ähnliche Datensätze",
282
- "record.metadata.userFeedbacks": "",
283
- "record.metadata.userFeedbacks.anonymousUser": "",
284
- "record.metadata.userFeedbacks.sortSelector.label": "",
285
- "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
286
- "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
287
- "record.metadata.userFeedbacks.newComment.placeholder": "",
288
- "record.metadata.userFeedbacks.newAnswer.placeholder": "",
289
- "record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
290
296
  "record.metadata.sheet": "Weitere Informationen verfügbar unter:",
291
297
  "record.metadata.status": "Status",
292
298
  "record.metadata.technical": "Technische Informationen",
@@ -301,6 +307,14 @@
301
307
  "record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
302
308
  "record.metadata.updatedOn": "Letzte Aktualisierung der Dateninformationen",
303
309
  "record.metadata.usage": "Nutzung und Einschränkungen",
310
+ "record.metadata.userFeedbacks": "",
311
+ "record.metadata.userFeedbacks.anonymousUser": "",
312
+ "record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
313
+ "record.metadata.userFeedbacks.newAnswer.placeholder": "",
314
+ "record.metadata.userFeedbacks.newComment.placeholder": "",
315
+ "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
316
+ "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
317
+ "record.metadata.userFeedbacks.sortSelector.label": "",
304
318
  "record.more.details": "Weitere Details",
305
319
  "record.tab.chart": "Diagramm",
306
320
  "record.tab.data": "Tabelle",
@@ -360,12 +374,6 @@
360
374
  "table.loading.data": "Daten werden geladen...",
361
375
  "table.object.count": "Objekte in diesem Datensatz",
362
376
  "table.select.data": "Datenquelle",
363
- "timeSincePipe.lessThanAMinute": "",
364
- "timeSincePipe.minutesAgo": "",
365
- "timeSincePipe.hoursAgo": "",
366
- "timeSincePipe.daysAgo": "",
367
- "timeSincePipe.monthsAgo": "",
368
- "timeSincePipe.yearsAgo": "",
369
377
  "tooltip.html.copy": "HTML kopieren",
370
378
  "tooltip.id.copy": "Eindeutige Kennung kopieren",
371
379
  "tooltip.url.copy": "URL kopieren",
@@ -145,6 +145,19 @@
145
145
  "downloads.format.unknown": "unknown",
146
146
  "downloads.wfs.featuretype.not.found": "The layer was not found",
147
147
  "dropFile": "drop file",
148
+ "editor.record.form.license": "License",
149
+ "editor.record.form.license.cc-by": "Creative Commons CC-BY",
150
+ "editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA",
151
+ "editor.record.form.license.cc-zero": "Creative Commons CC-0",
152
+ "editor.record.form.license.etalab": "Open Licence (Etalab)",
153
+ "editor.record.form.license.etalab-v2": "Open Licence v2.0 (Etalab)",
154
+ "editor.record.form.license.odbl": "Open Data Commons ODbL",
155
+ "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
156
+ "editor.record.form.license.pddl": "Open Data Commons PDDL",
157
+ "editor.record.form.license.unknown": "Unknown or absent",
158
+ "editor.record.form.resourceUpdated": "Last update date",
159
+ "editor.record.form.updateFrequency": "Update frequency",
160
+ "editor.record.form.updateFrequency.planned": "The data should be updated regularly.",
148
161
  "editor.record.loadError.body": "The record could not be loaded:",
149
162
  "editor.record.loadError.closeMessage": "Understood",
150
163
  "editor.record.loadError.title": "Error loading record",
@@ -215,6 +228,7 @@
215
228
  "multiselect.filter.placeholder": "Search",
216
229
  "nav.back": "Back",
217
230
  "next": "next",
231
+ "ogc.unreachable.unknown": "The service could not be reached",
218
232
  "organisation.filter.placeholder": "Filter results",
219
233
  "organisation.sort.sortBy": "Sort by:",
220
234
  "organisations.hits.found": "{hits, plural, =0{No organizations found} other{{hits} out of {total} organizations shown}}",
@@ -279,14 +293,6 @@
279
293
  "record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
280
294
  "record.metadata.quality.updateFrequency.success": "Update frequency is specified",
281
295
  "record.metadata.related": "Related records",
282
- "record.metadata.userFeedbacks": "Questions / Answers",
283
- "record.metadata.userFeedbacks.anonymousUser": "In order to leave a comment, please log in.",
284
- "record.metadata.userFeedbacks.sortSelector.label": "Sort by ...",
285
- "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Newest comments first",
286
- "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Oldest comments first",
287
- "record.metadata.userFeedbacks.newComment.placeholder": "Write your comment here...",
288
- "record.metadata.userFeedbacks.newAnswer.placeholder": "Answer...",
289
- "record.metadata.userFeedbacks.newAnswer.buttonTitle": "Publish",
290
296
  "record.metadata.sheet": "Original metadata",
291
297
  "record.metadata.status": "Status",
292
298
  "record.metadata.technical": "Technical information",
@@ -301,6 +307,14 @@
301
307
  "record.metadata.updateFrequency": "Data Update Frequency",
302
308
  "record.metadata.updatedOn": "Last Data Information Update",
303
309
  "record.metadata.usage": "License and Conditions",
310
+ "record.metadata.userFeedbacks": "Questions / Answers",
311
+ "record.metadata.userFeedbacks.anonymousUser": "In order to leave a comment, please log in.",
312
+ "record.metadata.userFeedbacks.newAnswer.buttonTitle": "Publish",
313
+ "record.metadata.userFeedbacks.newAnswer.placeholder": "Answer...",
314
+ "record.metadata.userFeedbacks.newComment.placeholder": "Write your comment here...",
315
+ "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Newest comments first",
316
+ "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Oldest comments first",
317
+ "record.metadata.userFeedbacks.sortSelector.label": "Sort by ...",
304
318
  "record.more.details": "Read more",
305
319
  "record.tab.chart": "Chart",
306
320
  "record.tab.data": "Table",
@@ -360,12 +374,6 @@
360
374
  "table.loading.data": "Loading data...",
361
375
  "table.object.count": "objects in this dataset",
362
376
  "table.select.data": "Data source",
363
- "timeSincePipe.lessThanAMinute": "Less than a minute ago",
364
- "timeSincePipe.minutesAgo": "{value} minute{s} ago",
365
- "timeSincePipe.hoursAgo": "{value} hour{s} ago",
366
- "timeSincePipe.daysAgo": "{value} day{s} ago",
367
- "timeSincePipe.monthsAgo": "{value} month{s} ago",
368
- "timeSincePipe.yearsAgo": "{value} year{s} ago",
369
377
  "tooltip.html.copy": "Copy HTML",
370
378
  "tooltip.id.copy": "Copy unique identifier",
371
379
  "tooltip.url.copy": "Copy URL",
@@ -145,6 +145,19 @@
145
145
  "downloads.format.unknown": "",
146
146
  "downloads.wfs.featuretype.not.found": "",
147
147
  "dropFile": "",
148
+ "editor.record.form.license": "",
149
+ "editor.record.form.license.cc-by": "",
150
+ "editor.record.form.license.cc-by-sa": "",
151
+ "editor.record.form.license.cc-zero": "",
152
+ "editor.record.form.license.etalab": "",
153
+ "editor.record.form.license.etalab-v2": "",
154
+ "editor.record.form.license.odbl": "",
155
+ "editor.record.form.license.odc-by": "",
156
+ "editor.record.form.license.pddl": "",
157
+ "editor.record.form.license.unknown": "",
158
+ "editor.record.form.resourceUpdated": "",
159
+ "editor.record.form.updateFrequency": "",
160
+ "editor.record.form.updateFrequency.planned": "",
148
161
  "editor.record.loadError.body": "",
149
162
  "editor.record.loadError.closeMessage": "",
150
163
  "editor.record.loadError.title": "",
@@ -215,6 +228,7 @@
215
228
  "multiselect.filter.placeholder": "",
216
229
  "nav.back": "",
217
230
  "next": "",
231
+ "ogc.unreachable.unknown": "",
218
232
  "organisation.filter.placeholder": "",
219
233
  "organisation.sort.sortBy": "",
220
234
  "organisations.hits.found": "",
@@ -279,14 +293,6 @@
279
293
  "record.metadata.quality.updateFrequency.failed": "",
280
294
  "record.metadata.quality.updateFrequency.success": "",
281
295
  "record.metadata.related": "",
282
- "record.metadata.userFeedbacks": "",
283
- "record.metadata.userFeedbacks.anonymousUser": "",
284
- "record.metadata.userFeedbacks.sortSelector.label": "",
285
- "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
286
- "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
287
- "record.metadata.userFeedbacks.newComment.placeholder": "",
288
- "record.metadata.userFeedbacks.newAnswer.placeholder": "",
289
- "record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
290
296
  "record.metadata.sheet": "",
291
297
  "record.metadata.status": "",
292
298
  "record.metadata.technical": "",
@@ -301,6 +307,14 @@
301
307
  "record.metadata.updateFrequency": "",
302
308
  "record.metadata.updatedOn": "",
303
309
  "record.metadata.usage": "",
310
+ "record.metadata.userFeedbacks": "",
311
+ "record.metadata.userFeedbacks.anonymousUser": "",
312
+ "record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
313
+ "record.metadata.userFeedbacks.newAnswer.placeholder": "",
314
+ "record.metadata.userFeedbacks.newComment.placeholder": "",
315
+ "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
316
+ "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
317
+ "record.metadata.userFeedbacks.sortSelector.label": "",
304
318
  "record.more.details": "",
305
319
  "record.tab.chart": "",
306
320
  "record.tab.data": "",
@@ -360,12 +374,6 @@
360
374
  "table.loading.data": "",
361
375
  "table.object.count": "",
362
376
  "table.select.data": "",
363
- "timeSincePipe.lessThanAMinute": "",
364
- "timeSincePipe.minutesAgo": "",
365
- "timeSincePipe.hoursAgo": "",
366
- "timeSincePipe.daysAgo": "",
367
- "timeSincePipe.monthsAgo": "",
368
- "timeSincePipe.yearsAgo": "",
369
377
  "tooltip.html.copy": "",
370
378
  "tooltip.id.copy": "",
371
379
  "tooltip.url.copy": "",
@@ -145,6 +145,19 @@
145
145
  "downloads.format.unknown": "inconnu",
146
146
  "downloads.wfs.featuretype.not.found": "La couche n'a pas été retrouvée",
147
147
  "dropFile": "Faites glisser votre fichier",
148
+ "editor.record.form.license": "Licence",
149
+ "editor.record.form.license.cc-by": "",
150
+ "editor.record.form.license.cc-by-sa": "",
151
+ "editor.record.form.license.cc-zero": "",
152
+ "editor.record.form.license.etalab": "Licence Ouverte (Etalab)",
153
+ "editor.record.form.license.etalab-v2": "Licence Ouverte v2.0 (Etalab)",
154
+ "editor.record.form.license.odbl": "",
155
+ "editor.record.form.license.odc-by": "",
156
+ "editor.record.form.license.pddl": "",
157
+ "editor.record.form.license.unknown": "Non-reconnue ou absente",
158
+ "editor.record.form.resourceUpdated": "Date de dernière révision",
159
+ "editor.record.form.updateFrequency": "Fréquence de mise à jour",
160
+ "editor.record.form.updateFrequency.planned": "Ces données doivent être mise à jour régulièrement.",
148
161
  "editor.record.loadError.body": "",
149
162
  "editor.record.loadError.closeMessage": "",
150
163
  "editor.record.loadError.title": "",
@@ -215,6 +228,7 @@
215
228
  "multiselect.filter.placeholder": "Rechercher",
216
229
  "nav.back": "Retour",
217
230
  "next": "suivant",
231
+ "ogc.unreachable.unknown": "Le service n'est pas accessible",
218
232
  "organisation.filter.placeholder": "Filtrer les résultats",
219
233
  "organisation.sort.sortBy": "Trier par :",
220
234
  "organisations.hits.found": "{hits, plural, =0{Aucune organisation trouvé} one{1 organisation sur {total} affichée} other{{hits} organisations sur {total} affichées}}",
@@ -279,14 +293,6 @@
279
293
  "record.metadata.quality.updateFrequency.failed": "Fréquence de mise à jour n'est pas renseignée",
280
294
  "record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
281
295
  "record.metadata.related": "Voir aussi",
282
- "record.metadata.userFeedbacks": "Questions / Réponses",
283
- "record.metadata.userFeedbacks.anonymousUser": "Pour rédiger un commentaire, veuillez vous identifier.",
284
- "record.metadata.userFeedbacks.sortSelector.label": "Trier par ...",
285
- "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Les plus récents en premier",
286
- "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Les plus anciens en premier",
287
- "record.metadata.userFeedbacks.newComment.placeholder": "Rédiger votre commentaire ici...",
288
- "record.metadata.userFeedbacks.newAnswer.placeholder": "Répondre...",
289
- "record.metadata.userFeedbacks.newAnswer.buttonTitle": "Publier",
290
296
  "record.metadata.sheet": "Fiche de métadonnées d'origine",
291
297
  "record.metadata.status": "Statut",
292
298
  "record.metadata.technical": "Informations techniques",
@@ -301,6 +307,14 @@
301
307
  "record.metadata.updateFrequency": "Fréquence de mise à jour des données",
302
308
  "record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
303
309
  "record.metadata.usage": "Licences et conditions d'utilisation",
310
+ "record.metadata.userFeedbacks": "Questions / Réponses",
311
+ "record.metadata.userFeedbacks.anonymousUser": "Pour rédiger un commentaire, veuillez vous identifier.",
312
+ "record.metadata.userFeedbacks.newAnswer.buttonTitle": "Publier",
313
+ "record.metadata.userFeedbacks.newAnswer.placeholder": "Répondre...",
314
+ "record.metadata.userFeedbacks.newComment.placeholder": "Rédiger votre commentaire ici...",
315
+ "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Les plus récents en premier",
316
+ "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Les plus anciens en premier",
317
+ "record.metadata.userFeedbacks.sortSelector.label": "Trier par ...",
304
318
  "record.more.details": "Détails",
305
319
  "record.tab.chart": "Graphique",
306
320
  "record.tab.data": "Tableau",
@@ -360,12 +374,6 @@
360
374
  "table.loading.data": "Chargement des données...",
361
375
  "table.object.count": "enregistrements dans ces données",
362
376
  "table.select.data": "Source de données",
363
- "timeSincePipe.lessThanAMinute": "Il y a moins d'une minute",
364
- "timeSincePipe.minutesAgo": "Il y a {value} minute{s}",
365
- "timeSincePipe.hoursAgo": "Il y a {value} heure{s}",
366
- "timeSincePipe.daysAgo": "Il y a {value} jour{s}",
367
- "timeSincePipe.monthsAgo": "Il y a {value} mois",
368
- "timeSincePipe.yearsAgo": "Il y a {value} an{s}",
369
377
  "tooltip.html.copy": "Copier le HTML",
370
378
  "tooltip.id.copy": "Copier l'identifiant unique",
371
379
  "tooltip.url.copy": "Copier l'URL",