geonetwork-ui 2.3.0-dev.c22cb78a → 2.3.0-dev.c4b41b40

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 (199) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +3 -3
  2. package/esm2022/libs/api/repository/src/lib/gn4/auth/avatar.service.interface.mjs +1 -1
  3. package/esm2022/libs/api/repository/src/lib/gn4/auth/gravatar.service.mjs +12 -1
  4. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +36 -3
  5. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +19 -7
  6. package/esm2022/libs/common/domain/src/lib/model/record/index.mjs +2 -1
  7. package/esm2022/libs/common/domain/src/lib/model/record/user-feedbacks.model.mjs +2 -0
  8. package/esm2022/libs/common/domain/src/lib/model/user/index.mjs +2 -0
  9. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  10. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +53 -2
  11. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.mjs +64 -0
  12. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.mjs +15 -0
  13. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +20 -6
  14. package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +1 -1
  15. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +16 -1
  16. package/esm2022/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.mjs +1 -1
  17. package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +1 -1
  18. package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +1 -1
  19. package/esm2022/libs/feature/record/src/lib/feature-record.module.mjs +4 -4
  20. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +3 -2
  21. package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +22 -4
  22. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +37 -10
  23. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +22 -7
  24. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +52 -17
  25. package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +18 -3
  26. package/esm2022/libs/feature/router/src/lib/default/state/router.effects.mjs +2 -2
  27. package/esm2022/libs/ui/elements/src/lib/link-card/link-card.component.mjs +16 -3
  28. package/esm2022/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.mjs +2 -2
  29. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +34 -7
  30. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +10 -7
  31. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.mjs +59 -0
  32. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +62 -0
  33. package/esm2022/libs/ui/inputs/src/index.mjs +16 -15
  34. package/esm2022/libs/ui/inputs/src/lib/date-picker/date-picker.component.mjs +22 -0
  35. package/esm2022/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.mjs +7 -5
  36. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +17 -8
  37. package/esm2022/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.mjs +29 -0
  38. package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +27 -4
  39. package/esm2022/libs/ui/inputs/src/lib/text-input/text-input.component.mjs +19 -3
  40. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +11 -9
  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 +26 -0
  48. package/esm2022/translations/en.json +26 -0
  49. package/esm2022/translations/es.json +26 -0
  50. package/esm2022/translations/fr.json +26 -0
  51. package/esm2022/translations/it.json +26 -0
  52. package/esm2022/translations/nl.json +26 -0
  53. package/esm2022/translations/pt.json +26 -0
  54. package/fesm2022/geonetwork-ui.mjs +1588 -747
  55. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  56. package/libs/api/repository/src/lib/gn4/auth/avatar.service.interface.d.ts +1 -0
  57. package/libs/api/repository/src/lib/gn4/auth/avatar.service.interface.d.ts.map +1 -1
  58. package/libs/api/repository/src/lib/gn4/auth/gravatar.service.d.ts +1 -0
  59. package/libs/api/repository/src/lib/gn4/auth/gravatar.service.d.ts.map +1 -1
  60. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +6 -2
  61. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  62. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -6
  63. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  64. package/libs/common/domain/src/lib/model/record/index.d.ts +1 -0
  65. package/libs/common/domain/src/lib/model/record/index.d.ts.map +1 -1
  66. package/libs/common/domain/src/lib/model/record/user-feedbacks.model.d.ts +15 -0
  67. package/libs/common/domain/src/lib/model/record/user-feedbacks.model.d.ts.map +1 -0
  68. package/libs/common/domain/src/lib/model/user/index.d.ts +2 -0
  69. package/libs/common/domain/src/lib/model/user/index.d.ts.map +1 -0
  70. package/libs/common/domain/src/lib/platform.service.interface.d.ts +3 -0
  71. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  72. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +3 -1
  73. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  74. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts +39 -0
  75. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts.map +1 -0
  76. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.d.ts +8 -0
  77. 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
  78. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +4 -1
  79. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  80. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  81. package/libs/feature/record/src/lib/feature-record.module.d.ts.map +1 -1
  82. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  83. package/libs/feature/record/src/lib/state/mdview.actions.d.ts +40 -6
  84. package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
  85. package/libs/feature/record/src/lib/state/mdview.effects.d.ts +24 -4
  86. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  87. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +14 -4
  88. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  89. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +8 -5
  90. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
  91. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +12 -9
  92. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
  93. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
  94. package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts +3 -1
  95. package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts.map +1 -1
  96. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +4 -2
  97. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
  98. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +16 -15
  99. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  100. package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts +11 -0
  101. package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts.map +1 -0
  102. package/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.d.ts +22 -0
  103. package/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.d.ts.map +1 -0
  104. package/libs/ui/inputs/src/index.d.ts +15 -14
  105. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  106. package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts +9 -0
  107. package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts.map +1 -0
  108. package/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.d.ts +1 -1
  109. package/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.d.ts.map +1 -1
  110. package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts +1 -1
  111. package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts.map +1 -1
  112. package/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts +12 -0
  113. package/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts.map +1 -0
  114. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +7 -1
  115. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
  116. package/libs/ui/inputs/src/lib/text-input/text-input.component.d.ts +4 -1
  117. package/libs/ui/inputs/src/lib/text-input/text-input.component.d.ts.map +1 -1
  118. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +35 -35
  119. package/libs/ui/layout/src/index.d.ts +1 -0
  120. package/libs/ui/layout/src/index.d.ts.map +1 -1
  121. package/libs/ui/layout/src/lib/block-list/block-list.component.d.ts +25 -0
  122. package/libs/ui/layout/src/lib/block-list/block-list.component.d.ts.map +1 -0
  123. package/libs/ui/layout/src/lib/carousel/carousel.component.d.ts +13 -6
  124. package/libs/ui/layout/src/lib/carousel/carousel.component.d.ts.map +1 -1
  125. package/libs/ui/layout/src/lib/ui-layout.module.d.ts +4 -5
  126. package/libs/ui/layout/src/lib/ui-layout.module.d.ts.map +1 -1
  127. package/libs/util/shared/src/lib/links/link-utils.d.ts +18 -0
  128. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  129. package/package.json +1 -1
  130. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +2 -2
  131. package/src/libs/api/repository/src/lib/gn4/auth/avatar.service.interface.ts +1 -0
  132. package/src/libs/api/repository/src/lib/gn4/auth/gravatar.service.ts +12 -1
  133. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +51 -1
  134. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +34 -7
  135. package/src/libs/common/domain/src/lib/model/record/index.ts +1 -0
  136. package/src/libs/common/domain/src/lib/model/record/user-feedbacks.model.ts +15 -0
  137. package/src/libs/common/domain/src/lib/platform.service.interface.ts +3 -0
  138. package/src/libs/common/fixtures/src/index.ts +8 -6
  139. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +3 -3
  140. package/src/libs/common/fixtures/src/lib/user-feedbacks.fixtures.ts +83 -0
  141. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +68 -1
  142. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.css +0 -0
  143. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.html +8 -0
  144. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.ts +64 -0
  145. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.css +0 -0
  146. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.html +4 -0
  147. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.ts +15 -0
  148. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +33 -33
  149. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +16 -0
  150. package/src/libs/feature/editor/src/lib/fields.config.ts +15 -0
  151. package/src/libs/feature/record/src/lib/feature-record.module.ts +5 -2
  152. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +2 -1
  153. package/src/libs/feature/record/src/lib/state/mdview.actions.ts +51 -6
  154. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +82 -7
  155. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +48 -8
  156. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +81 -24
  157. package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +40 -10
  158. package/src/libs/feature/router/src/lib/default/state/router.effects.ts +2 -2
  159. package/src/libs/ui/elements/src/lib/link-card/link-card.component.html +38 -20
  160. package/src/libs/ui/elements/src/lib/link-card/link-card.component.ts +12 -0
  161. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +1 -1
  162. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +40 -4
  163. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +5 -2
  164. package/src/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.ts +54 -0
  165. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.css +0 -0
  166. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.html +75 -0
  167. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.ts +63 -0
  168. package/src/libs/ui/inputs/src/index.ts +15 -14
  169. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.css +3 -0
  170. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.html +11 -0
  171. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.ts +16 -0
  172. package/src/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.ts +8 -1
  173. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +13 -0
  174. package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.css +6 -0
  175. package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.html +26 -0
  176. package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.ts +32 -0
  177. package/src/libs/ui/inputs/src/lib/text-area/text-area.component.html +2 -1
  178. package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +29 -0
  179. package/src/libs/ui/inputs/src/lib/text-input/text-input.component.html +1 -1
  180. package/src/libs/ui/inputs/src/lib/text-input/text-input.component.ts +16 -1
  181. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +2 -2
  182. package/src/libs/ui/layout/src/index.ts +1 -0
  183. package/src/libs/ui/layout/src/lib/block-list/block-list.component.css +23 -0
  184. package/src/libs/ui/layout/src/lib/block-list/block-list.component.html +20 -0
  185. package/src/libs/ui/layout/src/lib/block-list/block-list.component.ts +84 -0
  186. package/src/libs/ui/layout/src/lib/carousel/carousel.component.css +7 -4
  187. package/src/libs/ui/layout/src/lib/carousel/carousel.component.html +4 -4
  188. package/src/libs/ui/layout/src/lib/carousel/carousel.component.ts +45 -15
  189. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +0 -2
  190. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +1 -1
  191. package/src/libs/util/shared/src/lib/links/link-utils.ts +21 -0
  192. package/translations/de.json +26 -0
  193. package/translations/en.json +26 -0
  194. package/translations/es.json +26 -0
  195. package/translations/fr.json +26 -0
  196. package/translations/it.json +26 -0
  197. package/translations/nl.json +26 -0
  198. package/translations/pt.json +26 -0
  199. package/translations/sk.json +26 -0
@@ -1,6 +1,6 @@
1
1
  <input
2
2
  #input
3
- class="appearance-none border border-gray-300 rounded w-full p-2 text-gray-700 leading-tight focus:outline-none focus:border-primary"
3
+ [class]="classList"
4
4
  type="text"
5
5
  [value]="value"
6
6
  (change)="handleChange($event)"
@@ -14,14 +14,29 @@ import { Subject } from 'rxjs'
14
14
  styleUrls: ['./text-input.component.css'],
15
15
  })
16
16
  export class TextInputComponent implements AfterViewInit {
17
+ private readonly baseClass = [
18
+ 'appearance-none',
19
+ 'border border-gray-300',
20
+ 'rounded w-full',
21
+ 'p-2',
22
+ 'text-gray-700',
23
+ 'leading-tight',
24
+ 'focus:outline-none',
25
+ 'focus:border-primary',
26
+ ].join(' ')
27
+
17
28
  @Input() value = ''
29
+ @Input() extraClass = ''
18
30
  @Input() hint: string
19
31
  @Input() required = false
20
32
  rawChange = new Subject<string>()
21
33
  @Output() valueChange = this.rawChange.pipe(distinctUntilChanged())
22
-
23
34
  @ViewChild('input') input
24
35
 
36
+ get classList() {
37
+ return `${this.baseClass} ${this.extraClass}`
38
+ }
39
+
25
40
  ngAfterViewInit() {
26
41
  this.checkRequired(this.input.nativeElement.value)
27
42
  }
@@ -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,
@@ -49,7 +48,6 @@ import { ImageInputComponent } from './image-input/image-input.component'
49
48
  CopyTextButtonComponent,
50
49
  CheckboxComponent,
51
50
  SearchInputComponent,
52
- DateRangePickerComponent,
53
51
  ],
54
52
  imports: [
55
53
  CommonModule,
@@ -73,6 +71,8 @@ import { ImageInputComponent } from './image-input/image-input.component'
73
71
  TextAreaComponent,
74
72
  ButtonComponent,
75
73
  ImageInputComponent,
74
+ DropdownSelectorComponent,
75
+ DateRangePickerComponent,
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,23 @@
1
1
  :host .carousel-container ::ng-deep > * {
2
2
  flex-shrink: 0;
3
3
  }
4
+
4
5
  :host {
5
6
  position: relative;
6
7
  }
8
+
7
9
  .carousel-step-dot {
8
10
  width: 6px;
9
11
  height: 6px;
10
12
  border-radius: 6px;
11
13
  position: relative;
12
14
  }
15
+
13
16
  .carousel-step-dot:after {
14
17
  content: '';
15
18
  position: absolute;
16
- left: -4px;
17
- top: -4px;
18
- width: 14px;
19
- height: 14px;
19
+ left: -7px;
20
+ top: -7px;
21
+ width: 20px;
22
+ height: 20px;
20
23
  }
@@ -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
@@ -1,4 +1,5 @@
1
1
  {
2
+ "button.login": "",
2
3
  "catalog.figures.datasets": "{count, plural, =0{Datensätze} one{Datensatz} other{Datensätze}}",
3
4
  "catalog.figures.organisations": "{count, plural, =0{Organisationen} one{Organisation} other{Organisationen}}",
4
5
  "chart.aggregation.average": "Durchschnitt",
@@ -144,6 +145,17 @@
144
145
  "downloads.format.unknown": "unbekannt",
145
146
  "downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
146
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": "",
147
159
  "editor.record.loadError.body": "",
148
160
  "editor.record.loadError.closeMessage": "",
149
161
  "editor.record.loadError.title": "",
@@ -278,6 +290,14 @@
278
290
  "record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
279
291
  "record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
280
292
  "record.metadata.related": "Ähnliche Datensätze",
293
+ "record.metadata.userFeedbacks": "",
294
+ "record.metadata.userFeedbacks.anonymousUser": "",
295
+ "record.metadata.userFeedbacks.sortSelector.label": "",
296
+ "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
297
+ "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
298
+ "record.metadata.userFeedbacks.newComment.placeholder": "",
299
+ "record.metadata.userFeedbacks.newAnswer.placeholder": "",
300
+ "record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
281
301
  "record.metadata.sheet": "Weitere Informationen verfügbar unter:",
282
302
  "record.metadata.status": "Status",
283
303
  "record.metadata.technical": "Technische Informationen",
@@ -351,6 +371,12 @@
351
371
  "table.loading.data": "Daten werden geladen...",
352
372
  "table.object.count": "Objekte in diesem Datensatz",
353
373
  "table.select.data": "Datenquelle",
374
+ "timeSincePipe.lessThanAMinute": "",
375
+ "timeSincePipe.minutesAgo": "",
376
+ "timeSincePipe.hoursAgo": "",
377
+ "timeSincePipe.daysAgo": "",
378
+ "timeSincePipe.monthsAgo": "",
379
+ "timeSincePipe.yearsAgo": "",
354
380
  "tooltip.html.copy": "HTML kopieren",
355
381
  "tooltip.id.copy": "Eindeutige Kennung kopieren",
356
382
  "tooltip.url.copy": "URL kopieren",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "button.login": "Log in",
2
3
  "catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
3
4
  "catalog.figures.organisations": "{count, plural, =0{organisations} one{organisation} other{organisations}}",
4
5
  "chart.aggregation.average": "average",
@@ -144,6 +145,17 @@
144
145
  "downloads.format.unknown": "unknown",
145
146
  "downloads.wfs.featuretype.not.found": "The layer was not found",
146
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",
147
159
  "editor.record.loadError.body": "The record could not be loaded:",
148
160
  "editor.record.loadError.closeMessage": "Understood",
149
161
  "editor.record.loadError.title": "Error loading record",
@@ -278,6 +290,14 @@
278
290
  "record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
279
291
  "record.metadata.quality.updateFrequency.success": "Update frequency is specified",
280
292
  "record.metadata.related": "Related records",
293
+ "record.metadata.userFeedbacks": "Questions / Answers",
294
+ "record.metadata.userFeedbacks.anonymousUser": "In order to leave a comment, please log in.",
295
+ "record.metadata.userFeedbacks.sortSelector.label": "Sort by ...",
296
+ "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Newest comments first",
297
+ "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Oldest comments first",
298
+ "record.metadata.userFeedbacks.newComment.placeholder": "Write your comment here...",
299
+ "record.metadata.userFeedbacks.newAnswer.placeholder": "Answer...",
300
+ "record.metadata.userFeedbacks.newAnswer.buttonTitle": "Publish",
281
301
  "record.metadata.sheet": "Original metadata",
282
302
  "record.metadata.status": "Status",
283
303
  "record.metadata.technical": "Technical information",
@@ -351,6 +371,12 @@
351
371
  "table.loading.data": "Loading data...",
352
372
  "table.object.count": "objects in this dataset",
353
373
  "table.select.data": "Data source",
374
+ "timeSincePipe.lessThanAMinute": "Less than a minute ago",
375
+ "timeSincePipe.minutesAgo": "{value} minute{s} ago",
376
+ "timeSincePipe.hoursAgo": "{value} hour{s} ago",
377
+ "timeSincePipe.daysAgo": "{value} day{s} ago",
378
+ "timeSincePipe.monthsAgo": "{value} month{s} ago",
379
+ "timeSincePipe.yearsAgo": "{value} year{s} ago",
354
380
  "tooltip.html.copy": "Copy HTML",
355
381
  "tooltip.id.copy": "Copy unique identifier",
356
382
  "tooltip.url.copy": "Copy URL",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "button.login": "",
2
3
  "catalog.figures.datasets": "conjuntos de datos",
3
4
  "catalog.figures.organisations": "organizaciones",
4
5
  "chart.aggregation.average": "promedio",
@@ -144,6 +145,17 @@
144
145
  "downloads.format.unknown": "",
145
146
  "downloads.wfs.featuretype.not.found": "",
146
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": "",
147
159
  "editor.record.loadError.body": "",
148
160
  "editor.record.loadError.closeMessage": "",
149
161
  "editor.record.loadError.title": "",
@@ -278,6 +290,14 @@
278
290
  "record.metadata.quality.updateFrequency.failed": "",
279
291
  "record.metadata.quality.updateFrequency.success": "",
280
292
  "record.metadata.related": "",
293
+ "record.metadata.userFeedbacks": "",
294
+ "record.metadata.userFeedbacks.anonymousUser": "",
295
+ "record.metadata.userFeedbacks.sortSelector.label": "",
296
+ "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
297
+ "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
298
+ "record.metadata.userFeedbacks.newComment.placeholder": "",
299
+ "record.metadata.userFeedbacks.newAnswer.placeholder": "",
300
+ "record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
281
301
  "record.metadata.sheet": "",
282
302
  "record.metadata.status": "",
283
303
  "record.metadata.technical": "",
@@ -351,6 +371,12 @@
351
371
  "table.loading.data": "",
352
372
  "table.object.count": "",
353
373
  "table.select.data": "",
374
+ "timeSincePipe.lessThanAMinute": "",
375
+ "timeSincePipe.minutesAgo": "",
376
+ "timeSincePipe.hoursAgo": "",
377
+ "timeSincePipe.daysAgo": "",
378
+ "timeSincePipe.monthsAgo": "",
379
+ "timeSincePipe.yearsAgo": "",
354
380
  "tooltip.html.copy": "",
355
381
  "tooltip.id.copy": "",
356
382
  "tooltip.url.copy": "",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "button.login": "Se connecter",
2
3
  "catalog.figures.datasets": "{count, plural, =0{données} one{donnée} other{données}}",
3
4
  "catalog.figures.organisations": "{count, plural, =0{organisations} one{organisation} other{organisations}}",
4
5
  "chart.aggregation.average": "moyenne",
@@ -144,6 +145,17 @@
144
145
  "downloads.format.unknown": "inconnu",
145
146
  "downloads.wfs.featuretype.not.found": "La couche n'a pas été retrouvée",
146
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",
147
159
  "editor.record.loadError.body": "",
148
160
  "editor.record.loadError.closeMessage": "",
149
161
  "editor.record.loadError.title": "",
@@ -278,6 +290,14 @@
278
290
  "record.metadata.quality.updateFrequency.failed": "Fréquence de mise à jour n'est pas renseignée",
279
291
  "record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
280
292
  "record.metadata.related": "Voir aussi",
293
+ "record.metadata.userFeedbacks": "Questions / Réponses",
294
+ "record.metadata.userFeedbacks.anonymousUser": "Pour rédiger un commentaire, veuillez vous identifier.",
295
+ "record.metadata.userFeedbacks.sortSelector.label": "Trier par ...",
296
+ "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Les plus récents en premier",
297
+ "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Les plus anciens en premier",
298
+ "record.metadata.userFeedbacks.newComment.placeholder": "Rédiger votre commentaire ici...",
299
+ "record.metadata.userFeedbacks.newAnswer.placeholder": "Répondre...",
300
+ "record.metadata.userFeedbacks.newAnswer.buttonTitle": "Publier",
281
301
  "record.metadata.sheet": "Fiche de métadonnées d'origine",
282
302
  "record.metadata.status": "Statut",
283
303
  "record.metadata.technical": "Informations techniques",
@@ -351,6 +371,12 @@
351
371
  "table.loading.data": "Chargement des données...",
352
372
  "table.object.count": "enregistrements dans ces données",
353
373
  "table.select.data": "Source de données",
374
+ "timeSincePipe.lessThanAMinute": "Il y a moins d'une minute",
375
+ "timeSincePipe.minutesAgo": "Il y a {value} minute{s}",
376
+ "timeSincePipe.hoursAgo": "Il y a {value} heure{s}",
377
+ "timeSincePipe.daysAgo": "Il y a {value} jour{s}",
378
+ "timeSincePipe.monthsAgo": "Il y a {value} mois",
379
+ "timeSincePipe.yearsAgo": "Il y a {value} an{s}",
354
380
  "tooltip.html.copy": "Copier le HTML",
355
381
  "tooltip.id.copy": "Copier l'identifiant unique",
356
382
  "tooltip.url.copy": "Copier l'URL",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "button.login": "",
2
3
  "catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
3
4
  "catalog.figures.organisations": "{count, plural, =0{organizzazioni} one{organizzazione} other{organizzazioni}}",
4
5
  "chart.aggregation.average": "media",
@@ -144,6 +145,17 @@
144
145
  "downloads.format.unknown": "sconosciuto",
145
146
  "downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
146
147
  "dropFile": "Trascina il suo file",
148
+ "editor.record.form.license": "Licenza",
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": "Licenza aperta (Etalab)",
153
+ "editor.record.form.license.etalab-v2": "Licenza aperta 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 riconosciuta o assente",
158
+ "editor.record.form.resourceUpdated": "",
147
159
  "editor.record.loadError.body": "",
148
160
  "editor.record.loadError.closeMessage": "",
149
161
  "editor.record.loadError.title": "",
@@ -278,6 +290,14 @@
278
290
  "record.metadata.quality.updateFrequency.failed": "La frequenza di aggiornamento non è specificata",
279
291
  "record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
280
292
  "record.metadata.related": "Vedi anche",
293
+ "record.metadata.userFeedbacks": "",
294
+ "record.metadata.userFeedbacks.anonymousUser": "",
295
+ "record.metadata.userFeedbacks.sortSelector.label": "",
296
+ "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
297
+ "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
298
+ "record.metadata.userFeedbacks.newComment.placeholder": "",
299
+ "record.metadata.userFeedbacks.newAnswer.placeholder": "",
300
+ "record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
281
301
  "record.metadata.sheet": "Origine del metadata",
282
302
  "record.metadata.status": "Stato",
283
303
  "record.metadata.technical": "Informazioni tecniche",
@@ -351,6 +371,12 @@
351
371
  "table.loading.data": "Caricamento dei dati...",
352
372
  "table.object.count": "record in questi dati",
353
373
  "table.select.data": "Sorgente dati",
374
+ "timeSincePipe.lessThanAMinute": "",
375
+ "timeSincePipe.minutesAgo": "",
376
+ "timeSincePipe.hoursAgo": "",
377
+ "timeSincePipe.daysAgo": "",
378
+ "timeSincePipe.monthsAgo": "",
379
+ "timeSincePipe.yearsAgo": "",
354
380
  "tooltip.html.copy": "Copiare il HTML",
355
381
  "tooltip.id.copy": "Copiare l'identificatore unico",
356
382
  "tooltip.url.copy": "Copiare l'URL",