geonetwork-ui 2.4.0 → 2.4.1-dev.2804667fa

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 (153) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.mjs +6 -62
  2. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +19 -1
  3. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +24 -17
  4. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +27 -1
  5. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  6. package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +7 -1
  7. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +2 -1
  8. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +15 -14
  9. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +10 -4
  10. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +6 -4
  11. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +2 -2
  12. package/esm2022/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.mjs +3 -3
  13. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +3 -3
  14. package/esm2022/libs/feature/editor/src/lib/components/import-record/import-record.component.mjs +2 -2
  15. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +45 -9
  16. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.mjs +7 -12
  17. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +16 -12
  18. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.mjs +7 -13
  19. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +3 -3
  20. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +36 -60
  21. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +3 -3
  22. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +3 -3
  23. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +11 -15
  24. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +9 -5
  25. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +3 -4
  26. package/esm2022/libs/ui/dataviz/src/lib/figure/figure.component.mjs +3 -3
  27. package/esm2022/libs/ui/elements/src/index.mjs +3 -2
  28. package/esm2022/libs/ui/elements/src/lib/image-input/image-input.component.mjs +213 -0
  29. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +19 -13
  30. package/esm2022/libs/ui/inputs/src/index.mjs +5 -6
  31. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +2 -1
  32. package/esm2022/libs/ui/inputs/src/lib/file-input/file-input.component.mjs +5 -5
  33. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +19 -25
  34. package/esm2022/libs/ui/inputs/src/lib/url-input/url-input.component.mjs +6 -6
  35. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +3 -6
  36. package/esm2022/translations/de.json +47 -17
  37. package/esm2022/translations/en.json +27 -16
  38. package/esm2022/translations/es.json +45 -15
  39. package/esm2022/translations/fr.json +31 -20
  40. package/esm2022/translations/it.json +261 -231
  41. package/esm2022/translations/nl.json +45 -15
  42. package/esm2022/translations/pt.json +45 -15
  43. package/fesm2022/geonetwork-ui.mjs +1352 -1160
  44. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  45. package/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.d.ts.map +1 -1
  46. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  47. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +3 -3
  48. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  49. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +2 -1
  50. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  51. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +3 -3
  52. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  53. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts +3 -0
  54. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  55. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +5 -2
  56. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  57. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +3 -2
  58. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
  59. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +3 -2
  60. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  61. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +1 -1
  62. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  63. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +1 -1
  64. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  65. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts +11 -2
  66. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -1
  67. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts +1 -4
  68. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts.map +1 -1
  69. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts +5 -4
  70. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts.map +1 -1
  71. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts +1 -4
  72. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts.map +1 -1
  73. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts +1 -1
  74. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts.map +1 -1
  75. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  76. package/libs/feature/editor/src/lib/services/editor.service.d.ts +1 -1
  77. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  78. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +0 -1
  79. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  80. package/libs/ui/elements/src/index.d.ts +2 -1
  81. package/libs/ui/elements/src/index.d.ts.map +1 -1
  82. package/libs/ui/elements/src/lib/image-input/image-input.component.d.ts.map +1 -0
  83. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  84. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  85. package/libs/ui/inputs/src/index.d.ts +4 -5
  86. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  87. package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
  88. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  89. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts +1 -1
  90. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts.map +1 -1
  91. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +6 -7
  92. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  93. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts +2 -2
  94. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts.map +1 -1
  95. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +1 -2
  96. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  97. package/package.json +1 -1
  98. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.ts +9 -62
  99. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +18 -0
  100. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +47 -28
  101. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +29 -7
  102. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +4 -3
  103. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +162 -0
  104. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +24 -4
  105. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +5 -1
  106. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +42 -31
  107. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +10 -9
  108. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +12 -12
  109. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +5 -5
  110. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.html +1 -1
  111. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.html +1 -1
  112. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.html +31 -6
  113. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +47 -2
  114. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.html +1 -10
  115. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.ts +1 -7
  116. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.html +3 -18
  117. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.ts +12 -8
  118. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.html +0 -9
  119. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.ts +3 -9
  120. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +6 -6
  121. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +46 -74
  122. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +4 -1
  123. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +3 -6
  124. package/src/libs/feature/editor/src/lib/fields.config.ts +10 -14
  125. package/src/libs/feature/editor/src/lib/services/editor.service.ts +18 -16
  126. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +0 -1
  127. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +0 -3
  128. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +1 -0
  129. package/src/libs/ui/elements/src/index.ts +2 -1
  130. package/src/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.html +4 -19
  131. package/src/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.ts +13 -9
  132. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +13 -10
  133. package/src/libs/ui/inputs/src/index.ts +4 -5
  134. package/src/libs/ui/inputs/src/lib/button/button.component.ts +2 -1
  135. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.ts +1 -1
  136. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +22 -25
  137. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.html +5 -3
  138. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +1 -1
  139. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +8 -4
  140. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +0 -1
  141. package/translations/de.json +47 -17
  142. package/translations/en.json +27 -16
  143. package/translations/es.json +45 -15
  144. package/translations/fr.json +31 -20
  145. package/translations/it.json +261 -231
  146. package/translations/nl.json +45 -15
  147. package/translations/pt.json +45 -15
  148. package/translations/sk.json +45 -15
  149. package/esm2022/libs/ui/inputs/src/lib/image-input/image-input.component.mjs +0 -214
  150. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts.map +0 -1
  151. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/update-frequency.mapper.ts +0 -67
  152. /package/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.d.ts +0 -0
  153. /package/src/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.css +0 -0
@@ -3,6 +3,7 @@ export { XmlDocument, XmlElement } from '@rgrove/parse-xml';
3
3
  import GML32 from 'ol/format/GML32';
4
4
  import GeoJSON from 'ol/format/GeoJSON';
5
5
  import { parse as parse$1 } from 'ol/xml';
6
+ import { marker } from '@biesbjerg/ngx-translate-extract-marker';
6
7
  import { format } from 'date-fns/format';
7
8
  import { Namespace, Literal, lit, parse as parse$2, sym, BlankNode, graph } from 'rdflib';
8
9
  import * as i0 from '@angular/core';
@@ -14,10 +15,9 @@ import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService }
14
15
  import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler';
15
16
  import { TranslateHttpLoader } from '@ngx-translate/http-loader';
16
17
  import { map as map$1, catchError, tap as tap$1, shareReplay, filter, startWith, withLatestFrom, switchMap as switchMap$1, take, mergeMap, throttleTime, distinctUntilChanged, debounceTime, finalize, first as first$1, share, pairwise, delay, defaultIfEmpty, toArray } from 'rxjs/operators';
17
- import { marker } from '@biesbjerg/ngx-translate-extract-marker';
18
18
  import * as i1$2 from '@angular/common';
19
19
  import { CommonModule, NgOptimizedImage, DatePipe, NgIf, NgForOf } from '@angular/common';
20
- import { of, map as map$2, lastValueFrom, Subject, switchMap, combineLatest, exhaustMap, throwError, from, forkJoin, takeLast, firstValueFrom, merge, BehaviorSubject, fromEvent, animationFrameScheduler, ReplaySubject, Subscription, first, distinctUntilChanged as distinctUntilChanged$1, filter as filter$1, tap as tap$2, Observable, buffer, debounceTime as debounceTime$1, combineLatestWith, catchError as catchError$1, timer, takeUntil, EMPTY, mergeMap as mergeMap$1, startWith as startWith$1, withLatestFrom as withLatestFrom$1, shareReplay as shareReplay$1, pairwise as pairwise$1 } from 'rxjs';
20
+ import { of, map as map$2, lastValueFrom, Subject, switchMap, combineLatest, from, exhaustMap, throwError, forkJoin, takeLast, firstValueFrom, merge, BehaviorSubject, fromEvent, animationFrameScheduler, ReplaySubject, Subscription, first, distinctUntilChanged as distinctUntilChanged$1, filter as filter$1, tap as tap$2, Observable, buffer, debounceTime as debounceTime$1, combineLatestWith, catchError as catchError$1, timer, takeUntil, EMPTY, mergeMap as mergeMap$1, startWith as startWith$1, withLatestFrom as withLatestFrom$1, shareReplay as shareReplay$1, pairwise as pairwise$1 } from 'rxjs';
21
21
  import { lt, valid, coerce, satisfies, ltr } from 'semver';
22
22
  import chroma from 'chroma-js';
23
23
  import * as i1$3 from '@ngrx/store';
@@ -25,7 +25,7 @@ import { createAction, props, createReducer, on, createFeatureSelector, createSe
25
25
  import EmblaCarousel from 'embla-carousel';
26
26
  import * as i2$2 from '@ng-icons/core';
27
27
  import { provideIcons, NgIcon, NgIconComponent, provideNgIconsConfig, NgIconsModule } from '@ng-icons/core';
28
- import { iconoirNavArrowRight, iconoirNavArrowLeft, iconoirNavArrowDown, iconoirNavArrowUp, iconoirSearch, iconoirCalendar, iconoirLink, iconoirArrowUp, iconoirMediaImage, iconoirFramePlusIn, iconoirMediaImageXmark, iconoirBin, iconoirPlus, iconoirCloudUpload, iconoirUser, iconoirImport, iconoirLightBulbOn, iconoirArrowLeft, iconoirAttachment } from '@ng-icons/iconoir';
28
+ import { iconoirNavArrowRight, iconoirNavArrowLeft, iconoirNavArrowDown, iconoirNavArrowUp, iconoirSearch, iconoirCalendar, iconoirLink, iconoirArrowUp, iconoirCloudUpload, iconoirFramePlusIn, iconoirMediaImage, iconoirMediaImageXmark, iconoirBin, iconoirPlus, iconoirUser, iconoirImport, iconoirLightBulbOn, iconoirArrowLeft, iconoirAttachment } from '@ng-icons/iconoir';
29
29
  import { matExpandMore, matExpandLess, matAdd, matRemove, matClose, matContentCopy, matSearch, matStar, matStarBorder, matChevronLeft, matChevronRight, matArrowForward, matArrowBack, matCheck, matWarningAmber, matMoreHoriz, matFace, matQuestionMark, matMoodBad, matZoomOutMap, matOpenInNew, matMailOutline, matPersonOutline, matCheckCircleOutline, matMoreVert, matCorporateFare } from '@ng-icons/material-icons/baseline';
30
30
  import * as i1$4 from '@angular/material/tooltip';
31
31
  import { MatTooltipModule } from '@angular/material/tooltip';
@@ -50,10 +50,10 @@ import * as i1$8 from '@angular/material/datepicker';
50
50
  import { MatDatepickerModule } from '@angular/material/datepicker';
51
51
  import * as i1$9 from '@angular/cdk/overlay';
52
52
  import { CdkConnectedOverlay, OverlayModule, CdkOverlayOrigin } from '@angular/cdk/overlay';
53
- import { MatFormFieldModule } from '@angular/material/form-field';
54
- import { MatInputModule } from '@angular/material/input';
55
53
  import * as i1$a from '@angular/material/button-toggle';
56
54
  import { MatButtonToggleModule } from '@angular/material/button-toggle';
55
+ import { MatFormFieldModule } from '@angular/material/form-field';
56
+ import { MatInputModule } from '@angular/material/input';
57
57
  import * as i1$b from '@angular/material/dialog';
58
58
  import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
59
59
  import * as i2$3 from '@angular/material/tabs';
@@ -101,12 +101,12 @@ import axios from 'axios';
101
101
  import * as i1$e from '@angular/platform-browser';
102
102
  import { MomentDateAdapter, MAT_MOMENT_DATE_ADAPTER_OPTIONS } from '@angular/material-moment-adapter';
103
103
  import { Polygon } from 'ol/geom';
104
- import * as i3$2 from '@angular/material/radio';
104
+ import * as i4$1 from '@angular/material/radio';
105
105
  import { MatRadioModule } from '@angular/material/radio';
106
106
  import { MatIconModule } from '@angular/material/icon';
107
- import * as i4$1 from '@angular/cdk/text-field';
107
+ import * as i4$2 from '@angular/cdk/text-field';
108
108
  import { TextFieldModule } from '@angular/cdk/text-field';
109
- import * as i3$3 from '@ngrx/router-store';
109
+ import * as i3$2 from '@ngrx/router-store';
110
110
  import { getRouterSelectors, routerReducer, StoreRouterConnectingModule, FullRouterStateSerializer } from '@ngrx/router-store';
111
111
  import { navigation } from '@ngrx/router-store/data-persistence';
112
112
 
@@ -785,68 +785,110 @@ function getStatusFromStatusCode(statusCode) {
785
785
  }
786
786
  }
787
787
 
788
+ const RoleValues = [
789
+ 'unspecified',
790
+ 'other',
791
+ 'author', // Party who authored the resource
792
+ 'collaborator', // party who assists with the generation of the resource other than the principal investigator
793
+ 'contributor', // party contributing to the resource
794
+ 'custodian', // Party that accepts accountability and responsibility for the data and ensures appropriate care and maintenance of the resource
795
+ 'distributor', // Party who distributes the resource
796
+ 'editor', // party who reviewed or modified the resource to improve the content
797
+ 'funder', // party providing monetary support for the resource
798
+ 'mediator', // a class of entity that mediates access to the resource and for whom the resource is intended or useful
799
+ 'originator', // Party who created the resource
800
+ 'owner', // Party that owns the resource
801
+ 'point_of_contact', // Party who can be contacted for acquiring knowledge about or acquisition of the resource
802
+ 'principal_investigator', // Key party responsible for gathering information and conducting research
803
+ 'processor', // Party who has processed the data in a manner such that the resource has been modified
804
+ 'publisher', // Party who published the resource
805
+ 'resource_provider', // Party that supplies the resource
806
+ 'rights_holder', // party owning or managing rights over the resource
807
+ 'sponsor', // party that sponsors the resource
808
+ 'stakeholder', // party who has an interest in the resource or the use of the resource
809
+ 'user', // Party who uses the resource
810
+ ];
811
+ const RoleLabels = new Map([
812
+ ['unspecified', marker('domain.contact.role.unspecified')],
813
+ ['other', marker('domain.contact.role.other')],
814
+ ['author', marker('domain.contact.role.author')],
815
+ ['collaborator', marker('domain.contact.role.collaborator')],
816
+ ['contributor', marker('domain.contact.role.contributor')],
817
+ ['custodian', marker('domain.contact.role.custodian')],
818
+ ['distributor', marker('domain.contact.role.distributor')],
819
+ ['editor', marker('domain.contact.role.editor')],
820
+ ['funder', marker('domain.contact.role.funder')],
821
+ ['mediator', marker('domain.contact.role.mediator')],
822
+ ['originator', marker('domain.contact.role.originator')],
823
+ ['owner', marker('domain.contact.role.owner')],
824
+ ['point_of_contact', marker('domain.contact.role.point_of_contact')],
825
+ [
826
+ 'principal_investigator',
827
+ marker('domain.contact.role.principal_investigator'),
828
+ ],
829
+ ['processor', marker('domain.contact.role.processor')],
830
+ ['publisher', marker('domain.contact.role.publisher')],
831
+ ['resource_provider', marker('domain.contact.role.resource_provider')],
832
+ ['rights_holder', marker('domain.contact.role.rights_holder')],
833
+ ['sponsor', marker('domain.contact.role.sponsor')],
834
+ ['stakeholder', marker('domain.contact.role.stakeholder')],
835
+ ['user', marker('domain.contact.role.user')],
836
+ ]);
837
+
838
+ marker('domain.record.updateFrequency.unknown');
839
+ marker('domain.record.updateFrequency.notPlanned');
840
+ marker('domain.record.updateFrequency.asNeeded');
841
+ marker('domain.record.updateFrequency.irregular');
842
+ marker('domain.record.updateFrequency.continual');
843
+ marker('domain.record.updateFrequency.periodic');
844
+ const updateFrequencyCodeValues = [
845
+ 'unknown',
846
+ 'notPlanned',
847
+ 'asNeeded',
848
+ 'irregular',
849
+ 'continual',
850
+ 'periodic',
851
+ 'daily',
852
+ 'weekly',
853
+ 'fortnightly',
854
+ 'semimonthly',
855
+ 'monthly',
856
+ 'quarterly',
857
+ 'biannually',
858
+ 'annually',
859
+ 'biennially',
860
+ ];
861
+ marker('domain.record.updateFrequency.day');
862
+ marker('domain.record.updateFrequency.week');
863
+ marker('domain.record.updateFrequency.month');
864
+ marker('domain.record.updateFrequency.year');
865
+ marker('domain.record.updateFrequency.daily');
866
+ marker('domain.record.updateFrequency.weekly');
867
+ marker('domain.record.updateFrequency.fortnightly');
868
+ marker('domain.record.updateFrequency.monthly');
869
+ marker('domain.record.updateFrequency.quarterly');
870
+ marker('domain.record.updateFrequency.biannually');
871
+ marker('domain.record.updateFrequency.annually');
872
+ marker('domain.record.updateFrequency.semimonthly');
873
+ marker('domain.record.updateFrequency.biennially');
874
+ marker('domain.record.status.completed');
875
+ marker('domain.record.status.ongoing');
876
+ marker('domain.record.status.under_development');
877
+ marker('domain.record.status.deprecated');
878
+ marker('domain.record.status.removed');
879
+ const RecordStatusValues = [
880
+ 'completed',
881
+ 'ongoing',
882
+ 'under_development',
883
+ 'deprecated',
884
+ 'removed',
885
+ ];
886
+
788
887
  function getUpdateFrequencyFromFrequencyCode(frequencyCode) {
789
- switch (frequencyCode) {
790
- case 'asNeeded':
791
- return 'asNeeded';
792
- case 'unknown':
793
- return 'unknown';
794
- case 'irregular':
795
- return 'irregular';
796
- case 'notPlanned':
797
- return 'notPlanned';
798
- case 'continual':
799
- return 'continual';
800
- case 'periodic':
801
- return 'periodic';
802
- case 'daily':
803
- return {
804
- updatedTimes: 1,
805
- per: 'day',
806
- };
807
- case 'weekly':
808
- return {
809
- updatedTimes: 1,
810
- per: 'week',
811
- };
812
- case 'fortnightly':
813
- return {
814
- updatedTimes: 0.5,
815
- per: 'week',
816
- };
817
- case 'semimonthly':
818
- return {
819
- updatedTimes: 2,
820
- per: 'month',
821
- };
822
- case 'monthly':
823
- return {
824
- updatedTimes: 1,
825
- per: 'month',
826
- };
827
- case 'quarterly':
828
- return {
829
- updatedTimes: 4,
830
- per: 'year',
831
- };
832
- case 'biannually':
833
- return {
834
- updatedTimes: 2,
835
- per: 'year',
836
- };
837
- case 'annually':
838
- return {
839
- updatedTimes: 1,
840
- per: 'year',
841
- };
842
- case 'biennially':
843
- return {
844
- updatedTimes: 0.5,
845
- per: 'year',
846
- };
847
- default:
848
- return null;
849
- }
888
+ return frequencyCode &&
889
+ updateFrequencyCodeValues.includes(frequencyCode)
890
+ ? frequencyCode
891
+ : null;
850
892
  }
851
893
 
852
894
  const LANG_3_TO_2_MAPPER = {
@@ -1524,6 +1566,24 @@ function getMaintenanceFrequencyCode(updateFrequency) {
1524
1566
  return 'continual';
1525
1567
  case 'periodic':
1526
1568
  return 'periodic';
1569
+ case 'daily':
1570
+ return 'daily';
1571
+ case 'weekly':
1572
+ return 'weekly';
1573
+ case 'fortnightly':
1574
+ return 'fortnightly';
1575
+ case 'monthly':
1576
+ return 'monthly';
1577
+ case 'quarterly':
1578
+ return 'quarterly';
1579
+ case 'biannually':
1580
+ return 'biannually';
1581
+ case 'annually':
1582
+ return 'annually';
1583
+ case 'semimonthly':
1584
+ return 'semimonthly';
1585
+ case 'biennially':
1586
+ return 'biennially';
1527
1587
  }
1528
1588
  }
1529
1589
  function getISODuration(updateFrequency) {
@@ -7867,6 +7927,12 @@ class RecordsApiService {
7867
7927
  queryParameters = this.addToHttpParams(queryParameters, hasAttachmentsOfSource, 'hasAttachmentsOfSource');
7868
7928
  }
7869
7929
  let headers = this.defaultHeaders;
7930
+ // to determine the Content-Type header
7931
+ const consumes = ['application/json;charset=UTF-8'];
7932
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
7933
+ if (httpContentTypeSelected !== undefined) {
7934
+ headers = headers.set('Content-Type', httpContentTypeSelected);
7935
+ }
7870
7936
  let httpHeaderAcceptSelected = options && options.httpHeaderAccept;
7871
7937
  if (httpHeaderAcceptSelected === undefined) {
7872
7938
  // to determine the Accept header
@@ -18672,6 +18738,7 @@ var de = {
18672
18738
  "datahub.search.back": "Zurück",
18673
18739
  "datahub.search.filter.all": "Alle",
18674
18740
  "datahub.search.filter.generatedByAPI": "Generiert durch eine API",
18741
+ "datahub.search.filter.generatedByWfs": "",
18675
18742
  "datahub.search.filter.others": "Andere",
18676
18743
  "dataset.error.http": "Die Daten konnten aufgrund eines HTTP-Fehlers nicht geladen werden: \"{ info }\"",
18677
18744
  "dataset.error.network": "Die Daten konnten aufgrund eines Netzwerkfehlers oder CORS-Beschränkungen nicht geladen werden: \"{ info }\"",
@@ -18704,16 +18771,25 @@ var de = {
18704
18771
  "domain.record.status.ongoing": "Kontinuierliche Aktualisierung",
18705
18772
  "domain.record.status.removed": "Entfernt",
18706
18773
  "domain.record.status.under_development": "In Erstellung",
18707
- "domain.record.updateFrequency.asNeeded": "Nach Bedarf",
18708
- "domain.record.updateFrequency.continual": "Fortlaufend",
18709
- "domain.record.updateFrequency.day": "{count, plural, =0{0} one{Ein} other{{count}}} mal am Tag",
18710
- "domain.record.updateFrequency.irregular": "Unregelmäßig",
18711
- "domain.record.updateFrequency.month": "{count, plural, =0{0} one{Ein} other{{count}}} mal im Monat",
18712
- "domain.record.updateFrequency.notPlanned": "Nicht geplant",
18713
- "domain.record.updateFrequency.periodic": "Regelmäßig",
18714
- "domain.record.updateFrequency.unknown": "Unbekannt",
18715
- "domain.record.updateFrequency.week": "{count, plural, =0{0} one{Ein} other{{count}}} mal in der Woche",
18716
- "domain.record.updateFrequency.year": "{count, plural, =0{0} one{Ein} other{{count}}} mal im Jahr",
18774
+ "domain.record.updateFrequency.annually": "Daten werden jedes Jahr aktualisiert",
18775
+ "domain.record.updateFrequency.asNeeded": "Daten werden nach Bedarf aktualisiert",
18776
+ "domain.record.updateFrequency.biannually": "Daten werden zweimal im Jahr aktualisiert",
18777
+ "domain.record.updateFrequency.biennially": "Daten werden alle 2 Jahre aktualisiert",
18778
+ "domain.record.updateFrequency.continual": "Daten werden wiederholt und häufig aktualisiert",
18779
+ "domain.record.updateFrequency.daily": "Daten werden täglich aktualisiert",
18780
+ "domain.record.updateFrequency.day": "{count, plural, =0{0 Mal} one{Einmal} other{{count} Mal}} pro Tag",
18781
+ "domain.record.updateFrequency.fortnightly": "Daten werden alle zwei Wochen aktualisiert",
18782
+ "domain.record.updateFrequency.irregular": "Daten werden in unregelmäßigen Abständen aktualisiert",
18783
+ "domain.record.updateFrequency.month": "{count, plural, =0{0 Mal} one{Einmal} other{{count} Mal}} pro Monat",
18784
+ "domain.record.updateFrequency.monthly": "Daten werden monatlich aktualisiert",
18785
+ "domain.record.updateFrequency.notPlanned": "Es gibt keine Pläne, die Daten zu aktualisieren",
18786
+ "domain.record.updateFrequency.periodic": "Daten werden in regelmäßigen Abständen aktualisiert",
18787
+ "domain.record.updateFrequency.quarterly": "Daten werden alle drei Monate aktualisiert",
18788
+ "domain.record.updateFrequency.semimonthly": "Daten werden zweimal im Monat aktualisiert",
18789
+ "domain.record.updateFrequency.unknown": "Die Häufigkeit der Datenaktualisierung ist unbekannt",
18790
+ "domain.record.updateFrequency.week": "{count, plural, =0{0 Mal} one{Einmal} other{{count} Mal}} pro Woche",
18791
+ "domain.record.updateFrequency.weekly": "Daten werden wöchentlich aktualisiert",
18792
+ "domain.record.updateFrequency.year": "{count, plural, =0{0 Mal} one{Einmal} other{{count} Mal}} pro Jahr",
18717
18793
  "downloads.format.unknown": "unbekannt",
18718
18794
  "downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
18719
18795
  dropFile: dropFile$6,
@@ -18749,7 +18825,6 @@ var de = {
18749
18825
  "editor.record.form.field.constraintsShortcuts": "",
18750
18826
  "editor.record.form.field.contacts.noContact": "",
18751
18827
  "editor.record.form.field.contactsForResource.noContact": "",
18752
- "editor.record.form.field.draft.only.disabled": "Dieses Feld wird aktiviert, sobald die Daten veröffentlicht wurden.",
18753
18828
  "editor.record.form.field.keywords": "Schlagwörter",
18754
18829
  "editor.record.form.field.legalConstraints": "Rechtliche Einschränkung",
18755
18830
  "editor.record.form.field.license": "Lizenz",
@@ -18759,6 +18834,9 @@ var de = {
18759
18834
  "editor.record.form.field.onlineResource.dialogTitle": "",
18760
18835
  "editor.record.form.field.onlineResource.edit.description": "",
18761
18836
  "editor.record.form.field.onlineResource.edit.protocol": "",
18837
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Ebenenname",
18838
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Prozessname",
18839
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Link zum Dienst",
18762
18840
  "editor.record.form.field.onlineResource.edit.title": "",
18763
18841
  "editor.record.form.field.onlineResource.fileSize": "",
18764
18842
  "editor.record.form.field.onlineResource.modify": "",
@@ -18775,6 +18853,7 @@ var de = {
18775
18853
  "editor.record.form.field.spatialExtents": "",
18776
18854
  "editor.record.form.field.temporalExtents": "Zeitlicher Umfang",
18777
18855
  "editor.record.form.field.title": "Metadaten-Titel",
18856
+ "editor.record.form.field.title.placeholder": "Geben Sie einen Titel ein",
18778
18857
  "editor.record.form.field.uniqueIdentifier": "Eindeutige Kennung (ID)",
18779
18858
  "editor.record.form.field.updateFrequency": "Aktualisierungshäufigkeit",
18780
18859
  "editor.record.form.license.cc-by": "",
@@ -18807,7 +18886,7 @@ var de = {
18807
18886
  "editor.record.form.temporalExtents.addRange": "Zeitraum",
18808
18887
  "editor.record.form.temporalExtents.date": "Datum",
18809
18888
  "editor.record.form.temporalExtents.range": "Datumsbereich",
18810
- "editor.record.form.updateFrequency.planned": "Die Daten sollten regelmäßig aktualisiert werden.",
18889
+ "editor.record.form.updateFrequency.planned": "Dieses Dataset wird regelmäßig aktualisiert.",
18811
18890
  "editor.record.importFromExternalFile.failure.body": "",
18812
18891
  "editor.record.importFromExternalFile.failure.title": "",
18813
18892
  "editor.record.importFromExternalFile.success.body": "",
@@ -18835,9 +18914,9 @@ var de = {
18835
18914
  "editor.record.resourceError.body": "",
18836
18915
  "editor.record.resourceError.closeMessage": "",
18837
18916
  "editor.record.resourceError.title": "",
18838
- "editor.record.saveStatus.asDraftOnly": "Nur als Entwurf gespeichert - noch nicht veröffentlicht",
18839
- "editor.record.saveStatus.draftWithChangesPending": "Als Entwurf gespeichert - Änderungen stehen aus",
18840
- "editor.record.saveStatus.recordUpToDate": "Datensatz ist auf dem neuesten Stand",
18917
+ "editor.record.saveStatus.draftWithChangesPending": "Gespeichert - nicht publizierte Unterschiede",
18918
+ "editor.record.saveStatus.recordNotPublished": "",
18919
+ "editor.record.saveStatus.recordUpToDate": "Gespeichert - auf dem neuesten Stand",
18841
18920
  "editor.record.undo.confirmation.cancelText": "",
18842
18921
  "editor.record.undo.confirmation.confirmText": "",
18843
18922
  "editor.record.undo.confirmation.message": "",
@@ -18941,14 +19020,32 @@ var de = {
18941
19020
  "record.metadata.api.form.closeButton": "Schließen",
18942
19021
  "record.metadata.api.form.closeForm": "Formular schließen",
18943
19022
  "record.metadata.api.form.create": "Ihre Anfrage erstellen",
19023
+ "record.metadata.api.form.crsTitle": "",
19024
+ "record.metadata.api.form.crsTooltip": "",
18944
19025
  "record.metadata.api.form.customUrl": "Benutzerdefinierte URL",
19026
+ "record.metadata.api.form.filter": "",
19027
+ "record.metadata.api.form.filterDescription": "",
19028
+ "record.metadata.api.form.formatTitle": "",
19029
+ "record.metadata.api.form.formatTooltip": "",
19030
+ "record.metadata.api.form.items": "",
19031
+ "record.metadata.api.form.itemsDescription": "",
19032
+ "record.metadata.api.form.itemsTooltip": "",
18945
19033
  "record.metadata.api.form.limit": "Anzahl der Datensätze",
18946
19034
  "record.metadata.api.form.limit.all": "Alle",
19035
+ "record.metadata.api.form.nextPage": "",
19036
+ "record.metadata.api.form.nextPageTooltip": "",
18947
19037
  "record.metadata.api.form.offset": "Anzahl des ersten Datensatzes",
18948
19038
  "record.metadata.api.form.openForm": "Formular öffnen",
19039
+ "record.metadata.api.form.paginationDescription": "",
19040
+ "record.metadata.api.form.previousPage": "",
19041
+ "record.metadata.api.form.previousPageTooltip": "",
19042
+ "record.metadata.api.form.productTooltip": "",
18949
19043
  "record.metadata.api.form.reset": "Zurücksetzen",
18950
- "record.metadata.api.form.title": "Benutzerdefinierte URL generieren",
19044
+ "record.metadata.api.form.resetTooltip": "",
18951
19045
  "record.metadata.api.form.type": "Ausgabeformat",
19046
+ "record.metadata.api.form.zoneTitle": "",
19047
+ "record.metadata.api.form.zoneTooltip": "",
19048
+ "record.metadata.api.gpfdl": "",
18952
19049
  "record.metadata.catalog": "Katalog",
18953
19050
  "record.metadata.contact": "Kontakt",
18954
19051
  "record.metadata.creation": "Erstellungsdatum",
@@ -19013,7 +19110,6 @@ var de = {
19013
19110
  "record.tab.chart": "Diagramm",
19014
19111
  "record.tab.data": "Tabelle",
19015
19112
  "record.tab.map": "Karte",
19016
- "record.was.created.time": "erstellte diesen Datensatz {time}",
19017
19113
  records: records$6,
19018
19114
  "results.layout.selectOne": "Layout auswählen",
19019
19115
  "results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{angezeigt von {hits} insgesamt.}}",
@@ -19237,6 +19333,7 @@ var en = {
19237
19333
  "datahub.search.back": "Back",
19238
19334
  "datahub.search.filter.all": "All",
19239
19335
  "datahub.search.filter.generatedByAPI": "Generated by an API",
19336
+ "datahub.search.filter.generatedByWfs": "",
19240
19337
  "datahub.search.filter.others": "Others",
19241
19338
  "dataset.error.http": "The data could not be loaded because of an HTTP error: \"{ info }\"",
19242
19339
  "dataset.error.network": "The data could not be loaded because of a network error or CORS limitations: \"{ info }\"",
@@ -19269,15 +19366,24 @@ var en = {
19269
19366
  "domain.record.status.ongoing": "Ongoing",
19270
19367
  "domain.record.status.removed": "Removed",
19271
19368
  "domain.record.status.under_development": "Under development",
19272
- "domain.record.updateFrequency.asNeeded": "As needed",
19273
- "domain.record.updateFrequency.continual": "Continual",
19369
+ "domain.record.updateFrequency.annually": "Data is updated every year",
19370
+ "domain.record.updateFrequency.asNeeded": "Data is updated as deemed necessary",
19371
+ "domain.record.updateFrequency.biannually": "Data is updated twice each year",
19372
+ "domain.record.updateFrequency.biennially": "Data is updated every 2 years",
19373
+ "domain.record.updateFrequency.continual": "Data is repeatedly and frequently updated",
19374
+ "domain.record.updateFrequency.daily": "Data is updated each day",
19274
19375
  "domain.record.updateFrequency.day": "{count, plural, =0{0 times} one{Once} other{{count} times}} per day",
19275
- "domain.record.updateFrequency.irregular": "Irregular",
19376
+ "domain.record.updateFrequency.fortnightly": "Data is updated every two weeks",
19377
+ "domain.record.updateFrequency.irregular": "Data is updated in intervals that are uneven in duration",
19276
19378
  "domain.record.updateFrequency.month": "{count, plural, =0{0 times} one{Once} other{{count} times}} per month",
19277
- "domain.record.updateFrequency.notPlanned": "Not planned",
19278
- "domain.record.updateFrequency.periodic": "Periodic",
19279
- "domain.record.updateFrequency.unknown": "Unknown",
19379
+ "domain.record.updateFrequency.monthly": "Data is updated each month",
19380
+ "domain.record.updateFrequency.notPlanned": "There are no plans to update the data",
19381
+ "domain.record.updateFrequency.periodic": "Data is updated at regular intervals",
19382
+ "domain.record.updateFrequency.quarterly": "Data is updated every three months",
19383
+ "domain.record.updateFrequency.semimonthly": "Data is updated twice a month",
19384
+ "domain.record.updateFrequency.unknown": "Frequency of maintenance for the data is not known",
19280
19385
  "domain.record.updateFrequency.week": "{count, plural, =0{0 times} one{Once} other{{count} times}} per week",
19386
+ "domain.record.updateFrequency.weekly": "Data is updated on a weekly basis",
19281
19387
  "domain.record.updateFrequency.year": "{count, plural, =0{0 times} one{Once} other{{count} times}} per year",
19282
19388
  "downloads.format.unknown": "Unknown",
19283
19389
  "downloads.wfs.featuretype.not.found": "The layer was not found",
@@ -19314,7 +19420,6 @@ var en = {
19314
19420
  "editor.record.form.field.constraintsShortcuts": "",
19315
19421
  "editor.record.form.field.contacts.noContact": "Please provide at least one point of contact.",
19316
19422
  "editor.record.form.field.contactsForResource.noContact": "Please provide at least one point of contact responsible for the data.",
19317
- "editor.record.form.field.draft.only.disabled": "This field will be enabled once the dataset has been published",
19318
19423
  "editor.record.form.field.keywords": "Keywords",
19319
19424
  "editor.record.form.field.legalConstraints": "Legal constraint",
19320
19425
  "editor.record.form.field.license": "License",
@@ -19324,6 +19429,9 @@ var en = {
19324
19429
  "editor.record.form.field.onlineResource.dialogTitle": "Modify the dataset preview",
19325
19430
  "editor.record.form.field.onlineResource.edit.description": "Description",
19326
19431
  "editor.record.form.field.onlineResource.edit.protocol": "Protocol",
19432
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Layer name",
19433
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Process name",
19434
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Link to the service",
19327
19435
  "editor.record.form.field.onlineResource.edit.title": "Title",
19328
19436
  "editor.record.form.field.onlineResource.fileSize": "{sizeMB}MB",
19329
19437
  "editor.record.form.field.onlineResource.modify": "Modify",
@@ -19340,6 +19448,7 @@ var en = {
19340
19448
  "editor.record.form.field.spatialExtents": "Spatial extents",
19341
19449
  "editor.record.form.field.temporalExtents": "Temporal extents",
19342
19450
  "editor.record.form.field.title": "Metadata title",
19451
+ "editor.record.form.field.title.placeholder": "Enter a title",
19343
19452
  "editor.record.form.field.uniqueIdentifier": "Unique identifier",
19344
19453
  "editor.record.form.field.updateFrequency": "Update frequency",
19345
19454
  "editor.record.form.license.cc-by": "Creative Commons CC-BY",
@@ -19372,7 +19481,7 @@ var en = {
19372
19481
  "editor.record.form.temporalExtents.addRange": "Time period",
19373
19482
  "editor.record.form.temporalExtents.date": "Date",
19374
19483
  "editor.record.form.temporalExtents.range": "Date range",
19375
- "editor.record.form.updateFrequency.planned": "The data should be updated regularly",
19484
+ "editor.record.form.updateFrequency.planned": "This dataset is updated regularly.",
19376
19485
  "editor.record.importFromExternalFile.failure.body": "Failure",
19377
19486
  "editor.record.importFromExternalFile.failure.title": "The dataset import failed: ",
19378
19487
  "editor.record.importFromExternalFile.success.body": "Import successful",
@@ -19400,9 +19509,9 @@ var en = {
19400
19509
  "editor.record.resourceError.body": "There was an issue with the dataset attachments:",
19401
19510
  "editor.record.resourceError.closeMessage": "Understood",
19402
19511
  "editor.record.resourceError.title": "Error with the dataset attachments",
19403
- "editor.record.saveStatus.asDraftOnly": "Saved as draft only - not published yet",
19404
- "editor.record.saveStatus.draftWithChangesPending": "Saved as draft - changes are pending",
19405
- "editor.record.saveStatus.recordUpToDate": "Dataset is up to date",
19512
+ "editor.record.saveStatus.draftWithChangesPending": "Saved - Unpublished differences",
19513
+ "editor.record.saveStatus.recordNotPublished": "Saved - not published",
19514
+ "editor.record.saveStatus.recordUpToDate": "Saved - Record up to date",
19406
19515
  "editor.record.undo.confirmation.cancelText": "Keep the changes",
19407
19516
  "editor.record.undo.confirmation.confirmText": "Discard the changes",
19408
19517
  "editor.record.undo.confirmation.message": "Are you sure you want to cancel the pending changes on this dataset ?",
@@ -19506,13 +19615,13 @@ var en = {
19506
19615
  "record.metadata.api.form.closeButton": "Close",
19507
19616
  "record.metadata.api.form.closeForm": "Close the form",
19508
19617
  "record.metadata.api.form.create": "Create your request",
19618
+ "record.metadata.api.form.crsTitle": "Coordinate System",
19619
+ "record.metadata.api.form.crsTooltip": "Dropdown for selecting a coordinate reference system",
19509
19620
  "record.metadata.api.form.customUrl": "Custom URL",
19510
19621
  "record.metadata.api.form.filter": "Filters",
19511
19622
  "record.metadata.api.form.filterDescription": "Section for refining displayed elements",
19512
19623
  "record.metadata.api.form.formatTitle": "Format",
19513
19624
  "record.metadata.api.form.formatTooltip": "Dropdown for selecting a element format",
19514
- "record.metadata.api.form.crsTitle": "Coordinate System",
19515
- "record.metadata.api.form.crsTooltip": "Dropdown for selecting a coordinate reference system",
19516
19625
  "record.metadata.api.form.items": "Available Items",
19517
19626
  "record.metadata.api.form.itemsDescription": "List of items",
19518
19627
  "record.metadata.api.form.itemsTooltip": "Scroll to view all available items",
@@ -19525,10 +19634,9 @@ var en = {
19525
19634
  "record.metadata.api.form.paginationDescription": "Pagination of displayed items",
19526
19635
  "record.metadata.api.form.previousPage": "Previous",
19527
19636
  "record.metadata.api.form.previousPageTooltip": "Go to the previous page",
19637
+ "record.metadata.api.form.productTooltip": "",
19528
19638
  "record.metadata.api.form.reset": "Reset",
19529
19639
  "record.metadata.api.form.resetTooltip": "Reset all filters",
19530
- "record.metadata.api.form.title": "Generate a custom URL",
19531
- "record.metadata.api.form.title.gpf": "Download data",
19532
19640
  "record.metadata.api.form.type": "Output format",
19533
19641
  "record.metadata.api.form.zoneTitle": "Zone",
19534
19642
  "record.metadata.api.form.zoneTooltip": "Dropdown for selecting a geographic zone",
@@ -19597,7 +19705,6 @@ var en = {
19597
19705
  "record.tab.chart": "Chart",
19598
19706
  "record.tab.data": "Table",
19599
19707
  "record.tab.map": "Map",
19600
- "record.was.created.time": "created this dataset {time}",
19601
19708
  records: records$5,
19602
19709
  "results.layout.selectOne": "Results layout",
19603
19710
  "results.records.hits.displayedOn": "{displayed, plural, =0{No dataset.} one{1 } other{{displayed} }} {hits, plural, other{displayed on {hits} total.}}",
@@ -19821,6 +19928,7 @@ var es = {
19821
19928
  "datahub.search.back": "",
19822
19929
  "datahub.search.filter.all": "",
19823
19930
  "datahub.search.filter.generatedByAPI": "",
19931
+ "datahub.search.filter.generatedByWfs": "",
19824
19932
  "datahub.search.filter.others": "",
19825
19933
  "dataset.error.http": "",
19826
19934
  "dataset.error.network": "",
@@ -19853,16 +19961,25 @@ var es = {
19853
19961
  "domain.record.status.ongoing": "",
19854
19962
  "domain.record.status.removed": "",
19855
19963
  "domain.record.status.under_development": "",
19856
- "domain.record.updateFrequency.asNeeded": "",
19857
- "domain.record.updateFrequency.continual": "",
19858
- "domain.record.updateFrequency.day": "",
19859
- "domain.record.updateFrequency.irregular": "",
19860
- "domain.record.updateFrequency.month": "",
19861
- "domain.record.updateFrequency.notPlanned": "",
19862
- "domain.record.updateFrequency.periodic": "",
19863
- "domain.record.updateFrequency.unknown": "",
19864
- "domain.record.updateFrequency.week": "",
19865
- "domain.record.updateFrequency.year": "",
19964
+ "domain.record.updateFrequency.annually": "Los datos se actualizan cada año",
19965
+ "domain.record.updateFrequency.asNeeded": "Los datos se actualizan según sea necesario",
19966
+ "domain.record.updateFrequency.biannually": "Los datos se actualizan dos veces al año",
19967
+ "domain.record.updateFrequency.biennially": "Los datos se actualizan cada 2 años",
19968
+ "domain.record.updateFrequency.continual": "Los datos se actualizan repetidamente y con frecuencia",
19969
+ "domain.record.updateFrequency.daily": "Los datos se actualizan cada día",
19970
+ "domain.record.updateFrequency.day": "{count, plural, =0{0 veces} one{Una vez} other{{count} veces}} al día",
19971
+ "domain.record.updateFrequency.fortnightly": "Los datos se actualizan cada dos semanas",
19972
+ "domain.record.updateFrequency.irregular": "Los datos se actualizan en intervalos irregulares",
19973
+ "domain.record.updateFrequency.month": "{count, plural, =0{0 veces} one{Una vez} other{{count} veces}} al mes",
19974
+ "domain.record.updateFrequency.monthly": "Los datos se actualizan cada mes",
19975
+ "domain.record.updateFrequency.notPlanned": "No hay planes para actualizar los datos",
19976
+ "domain.record.updateFrequency.periodic": "Los datos se actualizan a intervalos regulares",
19977
+ "domain.record.updateFrequency.quarterly": "Los datos se actualizan cada tres meses",
19978
+ "domain.record.updateFrequency.semimonthly": "Los datos se actualizan dos veces al mes",
19979
+ "domain.record.updateFrequency.unknown": "La frecuencia de actualización de los datos es desconocida",
19980
+ "domain.record.updateFrequency.week": "{count, plural, =0{0 veces} one{Una vez} other{{count} veces}} a la semana",
19981
+ "domain.record.updateFrequency.weekly": "Los datos se actualizan semanalmente",
19982
+ "domain.record.updateFrequency.year": "{count, plural, =0{0 veces} one{Una vez} other{{count} veces}} al año",
19866
19983
  "downloads.format.unknown": "",
19867
19984
  "downloads.wfs.featuretype.not.found": "",
19868
19985
  dropFile: dropFile$4,
@@ -19898,7 +20015,6 @@ var es = {
19898
20015
  "editor.record.form.field.constraintsShortcuts": "",
19899
20016
  "editor.record.form.field.contacts.noContact": "",
19900
20017
  "editor.record.form.field.contactsForResource.noContact": "",
19901
- "editor.record.form.field.draft.only.disabled": "",
19902
20018
  "editor.record.form.field.keywords": "",
19903
20019
  "editor.record.form.field.legalConstraints": "",
19904
20020
  "editor.record.form.field.license": "",
@@ -19908,6 +20024,9 @@ var es = {
19908
20024
  "editor.record.form.field.onlineResource.dialogTitle": "",
19909
20025
  "editor.record.form.field.onlineResource.edit.description": "",
19910
20026
  "editor.record.form.field.onlineResource.edit.protocol": "",
20027
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Nombre de la capa",
20028
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Nombre del proceso",
20029
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Enlace al servicio",
19911
20030
  "editor.record.form.field.onlineResource.edit.title": "",
19912
20031
  "editor.record.form.field.onlineResource.fileSize": "",
19913
20032
  "editor.record.form.field.onlineResource.modify": "",
@@ -19924,6 +20043,7 @@ var es = {
19924
20043
  "editor.record.form.field.spatialExtents": "",
19925
20044
  "editor.record.form.field.temporalExtents": "",
19926
20045
  "editor.record.form.field.title": "",
20046
+ "editor.record.form.field.title.placeholder": "Introduzca un título",
19927
20047
  "editor.record.form.field.uniqueIdentifier": "",
19928
20048
  "editor.record.form.field.updateFrequency": "",
19929
20049
  "editor.record.form.license.cc-by": "",
@@ -19956,7 +20076,7 @@ var es = {
19956
20076
  "editor.record.form.temporalExtents.addRange": "",
19957
20077
  "editor.record.form.temporalExtents.date": "",
19958
20078
  "editor.record.form.temporalExtents.range": "",
19959
- "editor.record.form.updateFrequency.planned": "",
20079
+ "editor.record.form.updateFrequency.planned": "Este conjunto de datos se actualiza regularmente.",
19960
20080
  "editor.record.importFromExternalFile.failure.body": "",
19961
20081
  "editor.record.importFromExternalFile.failure.title": "",
19962
20082
  "editor.record.importFromExternalFile.success.body": "",
@@ -19984,8 +20104,8 @@ var es = {
19984
20104
  "editor.record.resourceError.body": "",
19985
20105
  "editor.record.resourceError.closeMessage": "",
19986
20106
  "editor.record.resourceError.title": "",
19987
- "editor.record.saveStatus.asDraftOnly": "",
19988
20107
  "editor.record.saveStatus.draftWithChangesPending": "",
20108
+ "editor.record.saveStatus.recordNotPublished": "",
19989
20109
  "editor.record.saveStatus.recordUpToDate": "",
19990
20110
  "editor.record.undo.confirmation.cancelText": "",
19991
20111
  "editor.record.undo.confirmation.confirmText": "",
@@ -20090,14 +20210,32 @@ var es = {
20090
20210
  "record.metadata.api.form.closeButton": "",
20091
20211
  "record.metadata.api.form.closeForm": "",
20092
20212
  "record.metadata.api.form.create": "",
20213
+ "record.metadata.api.form.crsTitle": "",
20214
+ "record.metadata.api.form.crsTooltip": "",
20093
20215
  "record.metadata.api.form.customUrl": "",
20216
+ "record.metadata.api.form.filter": "",
20217
+ "record.metadata.api.form.filterDescription": "",
20218
+ "record.metadata.api.form.formatTitle": "",
20219
+ "record.metadata.api.form.formatTooltip": "",
20220
+ "record.metadata.api.form.items": "",
20221
+ "record.metadata.api.form.itemsDescription": "",
20222
+ "record.metadata.api.form.itemsTooltip": "",
20094
20223
  "record.metadata.api.form.limit": "",
20095
20224
  "record.metadata.api.form.limit.all": "",
20225
+ "record.metadata.api.form.nextPage": "",
20226
+ "record.metadata.api.form.nextPageTooltip": "",
20096
20227
  "record.metadata.api.form.offset": "",
20097
20228
  "record.metadata.api.form.openForm": "",
20229
+ "record.metadata.api.form.paginationDescription": "",
20230
+ "record.metadata.api.form.previousPage": "",
20231
+ "record.metadata.api.form.previousPageTooltip": "",
20232
+ "record.metadata.api.form.productTooltip": "",
20098
20233
  "record.metadata.api.form.reset": "",
20099
- "record.metadata.api.form.title": "",
20234
+ "record.metadata.api.form.resetTooltip": "",
20100
20235
  "record.metadata.api.form.type": "",
20236
+ "record.metadata.api.form.zoneTitle": "",
20237
+ "record.metadata.api.form.zoneTooltip": "",
20238
+ "record.metadata.api.gpfdl": "",
20101
20239
  "record.metadata.catalog": "",
20102
20240
  "record.metadata.contact": "",
20103
20241
  "record.metadata.creation": "",
@@ -20162,7 +20300,6 @@ var es = {
20162
20300
  "record.tab.chart": "",
20163
20301
  "record.tab.data": "",
20164
20302
  "record.tab.map": "",
20165
- "record.was.created.time": "",
20166
20303
  records: records$4,
20167
20304
  "results.layout.selectOne": "",
20168
20305
  "results.records.hits.displayedOn": "",
@@ -20386,6 +20523,7 @@ var fr = {
20386
20523
  "datahub.search.back": "Retour",
20387
20524
  "datahub.search.filter.all": "Tous",
20388
20525
  "datahub.search.filter.generatedByAPI": "généré par une API",
20526
+ "datahub.search.filter.generatedByWfs": "généré par un WFS",
20389
20527
  "datahub.search.filter.others": "Autres",
20390
20528
  "dataset.error.http": "Le chargement des données a échoué en raison d'une erreur HTTP: \"{ info }\"",
20391
20529
  "dataset.error.network": "Le chargement des données a échoué en raison d'une erreur réseau ou de limitations CORS: \"{ info }\"",
@@ -20418,16 +20556,25 @@ var fr = {
20418
20556
  "domain.record.status.ongoing": "Mise à jour continue",
20419
20557
  "domain.record.status.removed": "Supprimé",
20420
20558
  "domain.record.status.under_development": "En cours de création",
20421
- "domain.record.updateFrequency.asNeeded": "Lorsque nécessaire",
20422
- "domain.record.updateFrequency.continual": "Continue",
20423
- "domain.record.updateFrequency.day": "{count, plural, =0{0} one{Une} other{{count}}} fois par jour",
20424
- "domain.record.updateFrequency.irregular": "Irrégulière",
20425
- "domain.record.updateFrequency.month": "{count, plural, =0{0} one{Une} other{{count}}} fois par mois",
20426
- "domain.record.updateFrequency.notPlanned": "Non planifiée",
20427
- "domain.record.updateFrequency.periodic": "Récurrente",
20428
- "domain.record.updateFrequency.unknown": "Inconnue",
20429
- "domain.record.updateFrequency.week": "{count, plural, =0{0} one{Une} other{{count}}} fois par semaine",
20430
- "domain.record.updateFrequency.year": "{count, plural, =0{0} one{Une} other{{count}}} fois par an",
20559
+ "domain.record.updateFrequency.annually": "Les données sont mises à jour chaque année",
20560
+ "domain.record.updateFrequency.asNeeded": "Les données sont mises à jour selon les besoins",
20561
+ "domain.record.updateFrequency.biannually": "Les données sont mises à jour deux fois par an",
20562
+ "domain.record.updateFrequency.biennially": "Les données sont mises à jour tous les 2 ans",
20563
+ "domain.record.updateFrequency.continual": "Les données sont mises à jour de manière répétée et fréquente",
20564
+ "domain.record.updateFrequency.daily": "Les données sont mises à jour chaque jour",
20565
+ "domain.record.updateFrequency.day": "{count, plural, =0{0 fois} one{Une fois} other{{count} fois}} par jour",
20566
+ "domain.record.updateFrequency.fortnightly": "Les données sont mises à jour toutes les deux semaines",
20567
+ "domain.record.updateFrequency.irregular": "Les données sont mises à jour à intervalles irréguliers",
20568
+ "domain.record.updateFrequency.month": "{count, plural, =0{0 fois} one{Une fois} other{{count} fois}} par mois",
20569
+ "domain.record.updateFrequency.monthly": "Les données sont mises à jour chaque mois",
20570
+ "domain.record.updateFrequency.notPlanned": "Il n'y a pas de plan pour mettre à jour les données",
20571
+ "domain.record.updateFrequency.periodic": "Les données sont mises à jour à intervalles réguliers",
20572
+ "domain.record.updateFrequency.quarterly": "Les données sont mises à jour tous les trois mois",
20573
+ "domain.record.updateFrequency.semimonthly": "Les données sont mises à jour deux fois par mois",
20574
+ "domain.record.updateFrequency.unknown": "La fréquence de mise à jour des données est inconnue",
20575
+ "domain.record.updateFrequency.week": "{count, plural, =0{0 fois} one{Une fois} other{{count} fois}} par semaine",
20576
+ "domain.record.updateFrequency.weekly": "Les données sont mises à jour chaque semaine",
20577
+ "domain.record.updateFrequency.year": "{count, plural, =0{0 fois} one{Une fois} other{{count} fois}} par an",
20431
20578
  "downloads.format.unknown": "inconnu",
20432
20579
  "downloads.wfs.featuretype.not.found": "La couche n'a pas été trouvée",
20433
20580
  dropFile: dropFile$3,
@@ -20463,7 +20610,6 @@ var fr = {
20463
20610
  "editor.record.form.field.constraintsShortcuts": "",
20464
20611
  "editor.record.form.field.contacts.noContact": "Veuillez renseigner au moins un point de contact.",
20465
20612
  "editor.record.form.field.contactsForResource.noContact": "Veuillez renseigner au moins un point de contact responsable de la donnée.",
20466
- "editor.record.form.field.draft.only.disabled": "Ce champ sera activé une fois le jeu de données publié",
20467
20613
  "editor.record.form.field.keywords": "Mots-clés",
20468
20614
  "editor.record.form.field.legalConstraints": "Contrainte légale",
20469
20615
  "editor.record.form.field.license": "Licence",
@@ -20473,6 +20619,9 @@ var fr = {
20473
20619
  "editor.record.form.field.onlineResource.dialogTitle": "Modifier l'aperçu du jeu de données",
20474
20620
  "editor.record.form.field.onlineResource.edit.description": "Description",
20475
20621
  "editor.record.form.field.onlineResource.edit.protocol": "Protocole",
20622
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Nom de la couche",
20623
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Nom du processus",
20624
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Lier le service",
20476
20625
  "editor.record.form.field.onlineResource.edit.title": "Titre",
20477
20626
  "editor.record.form.field.onlineResource.fileSize": "{sizeMB} Mo",
20478
20627
  "editor.record.form.field.onlineResource.modify": "Modifier",
@@ -20489,6 +20638,7 @@ var fr = {
20489
20638
  "editor.record.form.field.spatialExtents": "Étendue spatiale",
20490
20639
  "editor.record.form.field.temporalExtents": "Étendue temporelle",
20491
20640
  "editor.record.form.field.title": "Titre",
20641
+ "editor.record.form.field.title.placeholder": "Saisir un titre",
20492
20642
  "editor.record.form.field.uniqueIdentifier": "Identifiant unique",
20493
20643
  "editor.record.form.field.updateFrequency": "Fréquence de mise à jour",
20494
20644
  "editor.record.form.license.cc-by": "",
@@ -20521,7 +20671,7 @@ var fr = {
20521
20671
  "editor.record.form.temporalExtents.addRange": "Période de temps",
20522
20672
  "editor.record.form.temporalExtents.date": "Date concernée",
20523
20673
  "editor.record.form.temporalExtents.range": "Période concernée",
20524
- "editor.record.form.updateFrequency.planned": "Ces données doivent être mise à jour régulièrement.",
20674
+ "editor.record.form.updateFrequency.planned": "Ce jeu de données est mis à jour régulièrement.",
20525
20675
  "editor.record.importFromExternalFile.failure.body": "Une erreur est survenue pendant l'import du jeu de données : ",
20526
20676
  "editor.record.importFromExternalFile.failure.title": "Erreur",
20527
20677
  "editor.record.importFromExternalFile.success.body": "L'import du jeu de données à été realisé avec succès.",
@@ -20549,9 +20699,9 @@ var fr = {
20549
20699
  "editor.record.resourceError.body": "Une erreur est survenue lors de la gestion des pièces jointes :",
20550
20700
  "editor.record.resourceError.closeMessage": "Compris",
20551
20701
  "editor.record.resourceError.title": "Erreur avec les pièces jointes",
20552
- "editor.record.saveStatus.asDraftOnly": "Brouillon enregistré - jeu de données non publié",
20553
- "editor.record.saveStatus.draftWithChangesPending": "Brouillon enregistré - modifications en cours",
20554
- "editor.record.saveStatus.recordUpToDate": "Le jeu de données est à jour",
20702
+ "editor.record.saveStatus.draftWithChangesPending": "Sauvegardé - Modifications non publiées",
20703
+ "editor.record.saveStatus.recordNotPublished": "",
20704
+ "editor.record.saveStatus.recordUpToDate": "Sauvegardé - Jeu de données à jour",
20555
20705
  "editor.record.undo.confirmation.cancelText": "Garder les modifications",
20556
20706
  "editor.record.undo.confirmation.confirmText": "Retirer les modifications",
20557
20707
  "editor.record.undo.confirmation.message": "Êtes-vous sûr de vouloir annuler les modifications apportées à ce jeu de données ?",
@@ -20655,13 +20805,13 @@ var fr = {
20655
20805
  "record.metadata.api.form.closeButton": "Fermer",
20656
20806
  "record.metadata.api.form.closeForm": "Fermer le panneau de personnalisation",
20657
20807
  "record.metadata.api.form.create": "Paramétrer votre requête",
20808
+ "record.metadata.api.form.crsTitle": "Système de coordonnées",
20809
+ "record.metadata.api.form.crsTooltip": "Menu déroulant pour sélectionner un système de coordonnées (CRS)",
20658
20810
  "record.metadata.api.form.customUrl": "URL personnalisée",
20659
20811
  "record.metadata.api.form.filter": "Filtres",
20660
20812
  "record.metadata.api.form.filterDescription": "Section pour affiner les éléments affichés",
20661
20813
  "record.metadata.api.form.formatTitle": "Format",
20662
20814
  "record.metadata.api.form.formatTooltip": "Menu déroulant pour sélectionner un format de données",
20663
- "record.metadata.api.form.crsTitle": "Système de coordonnées",
20664
- "record.metadata.api.form.crsTooltip": "Menu déroulant pour sélectionner un système de coordonnées (CRS)",
20665
20815
  "record.metadata.api.form.items": "Eléments disponibles",
20666
20816
  "record.metadata.api.form.itemsDescription": "Liste des éléments",
20667
20817
  "record.metadata.api.form.itemsTooltip": "Faites défiler pour voir tous les éléments disponibles ou filtrés",
@@ -20674,10 +20824,9 @@ var fr = {
20674
20824
  "record.metadata.api.form.paginationDescription": "Pagination des éléments affichés",
20675
20825
  "record.metadata.api.form.previousPage": "Précédent",
20676
20826
  "record.metadata.api.form.previousPageTooltip": "Aller à la page précédente",
20827
+ "record.metadata.api.form.productTooltip": "",
20677
20828
  "record.metadata.api.form.reset": "Réinitialiser",
20678
20829
  "record.metadata.api.form.resetTooltip": "Réinitialiser tous les filtres",
20679
- "record.metadata.api.form.title": "Générer une URL personnalisée",
20680
- "record.metadata.api.form.title.gpf": "Téléchargement de données",
20681
20830
  "record.metadata.api.form.type": "Format en sortie",
20682
20831
  "record.metadata.api.form.zoneTitle": "Zone",
20683
20832
  "record.metadata.api.form.zoneTooltip": "Menu déroulant pour sélectionner une zone géographique",
@@ -20746,7 +20895,6 @@ var fr = {
20746
20895
  "record.tab.chart": "Graphique",
20747
20896
  "record.tab.data": "Tableau",
20748
20897
  "record.tab.map": "Carte",
20749
- "record.was.created.time": "a créé ce jeu de données {time}",
20750
20898
  records: records$3,
20751
20899
  "results.layout.selectOne": "Affichage des résultats",
20752
20900
  "results.records.hits.displayedOn": "{displayed, plural, =0{Aucun jeu de données} one{1 affiché} other{{displayed} affichés}} {hits, plural, other{sur {hits} au total.}}",
@@ -20832,7 +20980,7 @@ var records$2 = "record";
20832
20980
  var it = {
20833
20981
  "": "",
20834
20982
  "Add Layer As": "",
20835
- "button.login": "",
20983
+ "button.login": "Login",
20836
20984
  "catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
20837
20985
  "catalog.figures.organizations": "{count, plural, =0{organizzazioni} one{organizzazione} other{organizzazioni}}",
20838
20986
  "chart.aggregation.average": "media",
@@ -20850,21 +20998,21 @@ var it = {
20850
20998
  "chart.type.line": "grafico a linee",
20851
20999
  "chart.type.lineSmooth": "grafico a linea liscia",
20852
21000
  "chart.type.pie": "grafico a torta",
20853
- "dashboard.catalog.allRecords": "",
20854
- "dashboard.catalog.contacts": "",
20855
- "dashboard.catalog.thesaurus": "",
21001
+ "dashboard.catalog.allRecords": "Datasets",
21002
+ "dashboard.catalog.contacts": "Contatti",
21003
+ "dashboard.catalog.thesaurus": "Thesauri",
20856
21004
  "dashboard.createRecord": "Crea un record",
20857
- "dashboard.importRecord": "",
20858
- "dashboard.importRecord.importExternal": "",
20859
- "dashboard.importRecord.importExternalLabel": "",
21005
+ "dashboard.importRecord": "Importare",
21006
+ "dashboard.importRecord.importExternal": "Importare un dataset esterno",
21007
+ "dashboard.importRecord.importExternalLabel": "URL del dataset esterno",
20860
21008
  "dashboard.labels.catalog": "Catalogo",
20861
21009
  "dashboard.labels.mySpace": "Il mio spazio",
20862
21010
  "dashboard.records.all": "Catalogo",
20863
- "dashboard.records.hasDraft": "",
21011
+ "dashboard.records.hasDraft": "Bozza",
20864
21012
  "dashboard.records.myDraft": "Le mie bozze",
20865
21013
  "dashboard.records.myRecords": "I miei dati",
20866
21014
  "dashboard.records.search": "Risultati per \"{searchText}\"",
20867
- "dashboard.records.templates": "",
21015
+ "dashboard.records.templates": "Modelli precompilati",
20868
21016
  "dashboard.records.userDetail": "Nome",
20869
21017
  "dashboard.records.userEmail": "Email",
20870
21018
  "dashboard.records.username": "Nome utente",
@@ -20878,8 +21026,8 @@ var it = {
20878
21026
  "datafeeder.datasetValidation.submitButton": "OK, i miei dati sono corretti",
20879
21027
  "datafeeder.datasetValidation.title": "Controllare che i dati siano corretti",
20880
21028
  "datafeeder.datasetValidation.unknown": " - ",
20881
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
20882
- "datafeeder.datasetValidationCsv.lineNumbers": "",
21029
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "*La tabella dovrebbe visualizzare le prime 5 righe (esclusa l'intestazione)<br>In caso contrario, verificare che il file sia formattato correttamente",
21030
+ "datafeeder.datasetValidationCsv.lineNumbers": "Riepilogo delle prime 5 righe del CSV:",
20883
21031
  "datafeeder.form.abstract": "Come descrivere il suo dataset?",
20884
21032
  "datafeeder.form.datepicker": "Sa quando è stato creato il suo dataset ?",
20885
21033
  "datafeeder.form.description": "Infine, descrivere il processo utilizzato per creare il dataset",
@@ -20907,7 +21055,7 @@ var it = {
20907
21055
  "datafeeder.publishSuccess.geonetworkRecord": "Scheda di metadati",
20908
21056
  "datafeeder.publishSuccess.illustration.title": "Completato, tutto è andato bene!",
20909
21057
  "datafeeder.publishSuccess.mapViewer": "Visualizzatore",
20910
- "datafeeder.publishSuccess.ogcFeature": "",
21058
+ "datafeeder.publishSuccess.ogcFeature": "OGC API",
20911
21059
  "datafeeder.publishSuccess.subtitle": "Visualizzare i dati:",
20912
21060
  "datafeeder.publishSuccess.title": "Congratulazioni! \n I suoi dati sono stati pubblicati",
20913
21061
  "datafeeder.publishSuccess.uploadAnotherData": "Caricare un altro dato",
@@ -20936,15 +21084,15 @@ var it = {
20936
21084
  "datafeeder.upload.maxFileSize": "Dimensione massima: {size} MB",
20937
21085
  "datafeeder.upload.title": "Importa i suoi dati",
20938
21086
  "datafeeder.upload.uploadButton": "Carica",
20939
- "datafeeder.validation.csv.delimiter": "",
20940
- "datafeeder.validation.csv.delimiter.comma": "",
20941
- "datafeeder.validation.csv.delimiter.semicolon": "",
20942
- "datafeeder.validation.csv.lat.field": "",
20943
- "datafeeder.validation.csv.lng.field": "",
20944
- "datafeeder.validation.csv.quote.double": "",
20945
- "datafeeder.validation.csv.quote.none": "",
20946
- "datafeeder.validation.csv.quote.simple": "",
20947
- "datafeeder.validation.csv.quoteChar": "",
21087
+ "datafeeder.validation.csv.delimiter": "Separatore di colonne",
21088
+ "datafeeder.validation.csv.delimiter.comma": "Virgola",
21089
+ "datafeeder.validation.csv.delimiter.semicolon": "Punto e virgola",
21090
+ "datafeeder.validation.csv.lat.field": "Colonna di latitudine",
21091
+ "datafeeder.validation.csv.lng.field": "Colonna di longitudine",
21092
+ "datafeeder.validation.csv.quote.double": "Virgolette doppie",
21093
+ "datafeeder.validation.csv.quote.none": "Nessun",
21094
+ "datafeeder.validation.csv.quote.simple": "Citazione semplice",
21095
+ "datafeeder.validation.csv.quoteChar": "Separatore di testo",
20948
21096
  "datafeeder.validation.encoding": "Codifica",
20949
21097
  "datafeeder.validation.extent.title": "Ecco l'estensione del dataset",
20950
21098
  "datafeeder.validation.extent.title.unknown": "Sistema di proiezione sconosciuto",
@@ -20970,182 +21118,195 @@ var it = {
20970
21118
  "datahub.search.back": "Ritorna",
20971
21119
  "datahub.search.filter.all": "Tutti",
20972
21120
  "datahub.search.filter.generatedByAPI": "generato da un'API",
21121
+ "datahub.search.filter.generatedByWfs": "generato da un WFS",
20973
21122
  "datahub.search.filter.others": "Altri",
20974
21123
  "dataset.error.http": "Il caricamento dei dati non è riuscito a causa di un errore HTTP: \"{info}\"",
20975
21124
  "dataset.error.network": "Il caricamento dei dati non è riuscito a causa di un errore di rete o di limitazioni CORS: \"{info}\"",
20976
21125
  "dataset.error.parse": "I dati sono stati caricati ma la decodifica non è riuscita: \"{info}\"",
20977
21126
  "dataset.error.unknown": "Impossibile visualizzare i dati: \"{info}\"",
20978
21127
  "dataset.error.unsupportedType": "Il seguente tipo di contenuto non è supportato: \"{info}\"",
20979
- "domain.contact.role.author": "",
20980
- "domain.contact.role.collaborator": "",
20981
- "domain.contact.role.contributor": "",
20982
- "domain.contact.role.custodian": "",
20983
- "domain.contact.role.distributor": "",
20984
- "domain.contact.role.editor": "",
20985
- "domain.contact.role.funder": "",
20986
- "domain.contact.role.mediator": "",
20987
- "domain.contact.role.originator": "",
20988
- "domain.contact.role.other": "",
20989
- "domain.contact.role.owner": "",
20990
- "domain.contact.role.point_of_contact": "",
20991
- "domain.contact.role.principal_investigator": "",
20992
- "domain.contact.role.processor": "",
20993
- "domain.contact.role.publisher": "",
20994
- "domain.contact.role.resource_provider": "",
20995
- "domain.contact.role.rights_holder": "",
20996
- "domain.contact.role.sponsor": "",
20997
- "domain.contact.role.stakeholder": "",
20998
- "domain.contact.role.unspecified": "",
20999
- "domain.contact.role.user": "",
21128
+ "domain.contact.role.author": "Autore",
21129
+ "domain.contact.role.collaborator": "Collaboratore",
21130
+ "domain.contact.role.contributor": "Collaboratore",
21131
+ "domain.contact.role.custodian": "Gestore",
21132
+ "domain.contact.role.distributor": "Distributore",
21133
+ "domain.contact.role.editor": "Editor",
21134
+ "domain.contact.role.funder": "Finanziatore",
21135
+ "domain.contact.role.mediator": "Mediatore",
21136
+ "domain.contact.role.originator": "Creatore",
21137
+ "domain.contact.role.other": "Altro",
21138
+ "domain.contact.role.owner": "Proprietario",
21139
+ "domain.contact.role.point_of_contact": "Punto di contatto",
21140
+ "domain.contact.role.principal_investigator": "Investigatore principale",
21141
+ "domain.contact.role.processor": "Processore",
21142
+ "domain.contact.role.publisher": "Editore",
21143
+ "domain.contact.role.resource_provider": "Fornitore",
21144
+ "domain.contact.role.rights_holder": "Titolare dei diritti",
21145
+ "domain.contact.role.sponsor": "Sponsor",
21146
+ "domain.contact.role.stakeholder": "Parte interessata",
21147
+ "domain.contact.role.unspecified": "Non specificato",
21148
+ "domain.contact.role.user": "Utente",
21000
21149
  "domain.record.status.completed": "Completato",
21001
21150
  "domain.record.status.deprecated": "Deprecato",
21002
21151
  "domain.record.status.ongoing": "Aggiornamento continuo",
21003
21152
  "domain.record.status.removed": "Rimosso",
21004
21153
  "domain.record.status.under_development": "In fase di creazione",
21005
- "domain.record.updateFrequency.asNeeded": "Quando necessario",
21006
- "domain.record.updateFrequency.continual": "Continua",
21007
- "domain.record.updateFrequency.day": "{count, plural, =0{0} one{Una volta} other{{count}{volte}}} al giorno",
21008
- "domain.record.updateFrequency.irregular": "Irregolare",
21009
- "domain.record.updateFrequency.month": "{count, plural, =0{0} one{Una volta} other{{count}{volte}}} al mese",
21010
- "domain.record.updateFrequency.notPlanned": "Non pianificata",
21011
- "domain.record.updateFrequency.periodic": "Periodica",
21012
- "domain.record.updateFrequency.unknown": "Sconosciuta",
21013
- "domain.record.updateFrequency.week": "{count, plural, =0{0} one{Una volta} other{{count}{volte}}} alla settimana",
21014
- "domain.record.updateFrequency.year": "{count, plural, =0{0} one{Una volta} other{{count}{volte}}} all'anno",
21154
+ "domain.record.updateFrequency.annually": "I dati vengono aggiornati ogni anno",
21155
+ "domain.record.updateFrequency.asNeeded": "I dati vengono aggiornati secondo necessità",
21156
+ "domain.record.updateFrequency.biannually": "I dati vengono aggiornati due volte all'anno",
21157
+ "domain.record.updateFrequency.biennially": "I dati vengono aggiornati ogni 2 anni",
21158
+ "domain.record.updateFrequency.continual": "I dati vengono aggiornati ripetutamente e frequentemente",
21159
+ "domain.record.updateFrequency.daily": "I dati vengono aggiornati ogni giorno",
21160
+ "domain.record.updateFrequency.day": "{count, plural, =0{0 volte} one{Una volta} other{{count} volte}} al giorno",
21161
+ "domain.record.updateFrequency.fortnightly": "I dati vengono aggiornati ogni due settimane",
21162
+ "domain.record.updateFrequency.irregular": "I dati vengono aggiornati a intervalli irregolari",
21163
+ "domain.record.updateFrequency.month": "{count, plural, =0{0 volte} one{Una volta} other{{count} volte}} al mese",
21164
+ "domain.record.updateFrequency.monthly": "I dati vengono aggiornati ogni mese",
21165
+ "domain.record.updateFrequency.notPlanned": "Non ci sono piani per aggiornare i dati",
21166
+ "domain.record.updateFrequency.periodic": "I dati vengono aggiornati a intervalli regolari",
21167
+ "domain.record.updateFrequency.quarterly": "I dati vengono aggiornati ogni tre mesi",
21168
+ "domain.record.updateFrequency.semimonthly": "I dati vengono aggiornati due volte al mese",
21169
+ "domain.record.updateFrequency.unknown": "La frequenza di aggiornamento dei dati è sconosciuta",
21170
+ "domain.record.updateFrequency.week": "{count, plural, =0{0 volte} one{Una volta} other{{count} volte}} a settimana",
21171
+ "domain.record.updateFrequency.weekly": "I dati vengono aggiornati settimanalmente",
21172
+ "domain.record.updateFrequency.year": "{count, plural, =0{0 volte} one{Una volta} other{{count} volte}} all'anno",
21015
21173
  "downloads.format.unknown": "sconosciuto",
21016
21174
  "downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
21017
21175
  dropFile: dropFile$2,
21018
- "editor.form.keywords.placeholder": "",
21019
- "editor.form.placeKeywordWithoutExtent": "",
21020
- "editor.record.delete.confirmation.cancelText": "",
21021
- "editor.record.delete.confirmation.confirmText": "",
21022
- "editor.record.delete.confirmation.message": "",
21023
- "editor.record.delete.confirmation.title": "",
21024
- "editor.record.deleteError.body": "",
21025
- "editor.record.deleteError.closeMessage": "",
21026
- "editor.record.deleteError.title": "",
21027
- "editor.record.deleteSuccess.body": "",
21028
- "editor.record.deleteSuccess.title": "",
21029
- "editor.record.form.bottomButtons.comeBackLater": "",
21030
- "editor.record.form.bottomButtons.next": "",
21031
- "editor.record.form.bottomButtons.previous": "",
21032
- "editor.record.form.classification.opendata": "",
21033
- "editor.record.form.constraint.add.legalConstraints": "",
21034
- "editor.record.form.constraint.add.otherConstraints": "",
21035
- "editor.record.form.constraint.add.securityConstraints": "",
21036
- "editor.record.form.constraint.header.legalConstraints": "",
21037
- "editor.record.form.constraint.header.otherConstraints": "",
21038
- "editor.record.form.constraint.header.securityConstraints": "",
21039
- "editor.record.form.constraint.legalConstraints": "",
21040
- "editor.record.form.constraint.markdown.placeholder": "",
21041
- "editor.record.form.constraint.not.applicable": "",
21042
- "editor.record.form.constraint.not.known": "",
21043
- "editor.record.form.constraint.otherConstraints": "",
21044
- "editor.record.form.constraint.securityConstraints": "",
21045
- "editor.record.form.draft.updateAlert": "",
21046
- "editor.record.form.field.abstract": "",
21176
+ "editor.form.keywords.placeholder": "Seleziona una parola chiave",
21177
+ "editor.form.placeKeywordWithoutExtent": "Questa parola chiave non ha una posizione geografica associata",
21178
+ "editor.record.delete.confirmation.cancelText": "Annulla",
21179
+ "editor.record.delete.confirmation.confirmText": "Elimina",
21180
+ "editor.record.delete.confirmation.message": "E sicuro di voler eliminare questo dataset?",
21181
+ "editor.record.delete.confirmation.title": "Eliminare il dataset?",
21182
+ "editor.record.deleteError.body": "Impossibile eliminare il dataset:",
21183
+ "editor.record.deleteError.closeMessage": "Capito",
21184
+ "editor.record.deleteError.title": "Errore durante l'eliminazione",
21185
+ "editor.record.deleteSuccess.body": "Il dataset è stato eliminato correttamente",
21186
+ "editor.record.deleteSuccess.title": "Eliminazione riuscita",
21187
+ "editor.record.form.bottomButtons.comeBackLater": "Ritorna più tardi",
21188
+ "editor.record.form.bottomButtons.next": "Avanti",
21189
+ "editor.record.form.bottomButtons.previous": "Precedente",
21190
+ "editor.record.form.classification.opendata": "Dati aperti",
21191
+ "editor.record.form.constraint.add.legalConstraints": "Aggiungi un vincolo legale",
21192
+ "editor.record.form.constraint.add.otherConstraints": "Aggiungi un vincolo",
21193
+ "editor.record.form.constraint.add.securityConstraints": "Aggiungi un vincolo di sicurezza",
21194
+ "editor.record.form.constraint.header.legalConstraints": "Condizioni applicabili al tipo legale",
21195
+ "editor.record.form.constraint.header.otherConstraints": "Altre condizioni applicabili",
21196
+ "editor.record.form.constraint.header.securityConstraints": "Condizioni di tipo di sicurezza applicabili",
21197
+ "editor.record.form.constraint.legalConstraints": "Vincoli legali",
21198
+ "editor.record.form.constraint.markdown.placeholder": "Il suo testo qui",
21199
+ "editor.record.form.constraint.not.applicable": "Non si applicano condizioni.",
21200
+ "editor.record.form.constraint.not.known": "Le condizioni sono sconosciute.",
21201
+ "editor.record.form.constraint.otherConstraints": "Altri vincoli",
21202
+ "editor.record.form.constraint.securityConstraints": "Vincoli di sicurezza",
21203
+ "editor.record.form.draft.updateAlert": "Da quando è stata creata questa bozza, questo dataset è stato modificato il { date } da { user }. La pubblicazione della sua versione potrebbe rimuovere le loro modifiche. Per evitarlo, puoi annullare le sue modifiche o pubblicare la sua versione consapevolmente.",
21204
+ "editor.record.form.field.abstract": "Riassunto",
21047
21205
  "editor.record.form.field.constraintsShortcuts": "",
21048
- "editor.record.form.field.contacts.noContact": "",
21049
- "editor.record.form.field.contactsForResource.noContact": "",
21050
- "editor.record.form.field.draft.only.disabled": "",
21051
- "editor.record.form.field.keywords": "",
21052
- "editor.record.form.field.legalConstraints": "",
21206
+ "editor.record.form.field.contacts.noContact": "Inserisci almeno un punto di contatto.",
21207
+ "editor.record.form.field.contactsForResource.noContact": "Inserisci almeno un punto di contatto responsabile dei dati.",
21208
+ "editor.record.form.field.keywords": "Parole chiave",
21209
+ "editor.record.form.field.legalConstraints": "Vincolo legale",
21053
21210
  "editor.record.form.field.license": "Licenza",
21054
- "editor.record.form.field.onlineLinkResources": "",
21055
- "editor.record.form.field.onlineResource.cancel": "",
21056
- "editor.record.form.field.onlineResource.confirm": "",
21057
- "editor.record.form.field.onlineResource.dialogTitle": "",
21058
- "editor.record.form.field.onlineResource.edit.description": "",
21059
- "editor.record.form.field.onlineResource.edit.protocol": "",
21060
- "editor.record.form.field.onlineResource.edit.title": "",
21061
- "editor.record.form.field.onlineResource.fileSize": "",
21062
- "editor.record.form.field.onlineResource.modify": "",
21063
- "editor.record.form.field.onlineResource.toggle.dataset": "",
21064
- "editor.record.form.field.onlineResource.toggle.service": "",
21065
- "editor.record.form.field.onlineResources": "",
21066
- "editor.record.form.field.otherConstraints": "",
21067
- "editor.record.form.field.overviews": "",
21068
- "editor.record.form.field.recordUpdated": "",
21069
- "editor.record.form.field.resourceCreated": "",
21070
- "editor.record.form.field.resourceIdentifier": "",
21071
- "editor.record.form.field.resourceUpdated": "",
21072
- "editor.record.form.field.securityConstraints": "",
21073
- "editor.record.form.field.spatialExtents": "",
21074
- "editor.record.form.field.temporalExtents": "",
21075
- "editor.record.form.field.title": "",
21076
- "editor.record.form.field.uniqueIdentifier": "",
21077
- "editor.record.form.field.updateFrequency": "",
21211
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Nome del livello",
21212
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Nome del processo",
21213
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Collegare il servizio",
21214
+ "editor.record.form.field.title.placeholder": "Inserisci un titolo",
21215
+ "editor.record.form.field.onlineLinkResources": "Risorse allegate",
21216
+ "editor.record.form.field.onlineResource.cancel": "Annulla",
21217
+ "editor.record.form.field.onlineResource.confirm": "Convalida",
21218
+ "editor.record.form.field.onlineResource.dialogTitle": "Modifica anteprima dataset",
21219
+ "editor.record.form.field.onlineResource.edit.description": "Descrizione",
21220
+ "editor.record.form.field.onlineResource.edit.protocol": "Protocollo",
21221
+ "editor.record.form.field.onlineResource.edit.title": "Titolo",
21222
+ "editor.record.form.field.onlineResource.fileSize": "{sizeMB} MB",
21223
+ "editor.record.form.field.onlineResource.modify": "Modifica",
21224
+ "editor.record.form.field.onlineResource.toggle.dataset": "Collega un file",
21225
+ "editor.record.form.field.onlineResource.toggle.service": "Collega un servizio",
21226
+ "editor.record.form.field.onlineResources": "Distribuzione",
21227
+ "editor.record.form.field.otherConstraints": "Vincolo generale",
21228
+ "editor.record.form.field.overviews": "Panoramiche",
21229
+ "editor.record.form.field.recordUpdated": "Data di aggiornamento",
21230
+ "editor.record.form.field.resourceCreated": "Data di creazione",
21231
+ "editor.record.form.field.resourceIdentifier": "Identificatore",
21232
+ "editor.record.form.field.resourceUpdated": "Data di aggiornamento",
21233
+ "editor.record.form.field.securityConstraints": "Vincolo di sicurezza",
21234
+ "editor.record.form.field.spatialExtents": "Estensioni spaziali",
21235
+ "editor.record.form.field.temporalExtents": "Estensioni temporali",
21236
+ "editor.record.form.field.title": "Titolo",
21237
+ "editor.record.form.field.uniqueIdentifier": "Identificatore univoco",
21238
+ "editor.record.form.field.updateFrequency": "Frequenza di aggiornamento",
21078
21239
  "editor.record.form.license.cc-by": "",
21079
21240
  "editor.record.form.license.cc-by-sa": "",
21080
21241
  "editor.record.form.license.cc-zero": "",
21081
- "editor.record.form.license.etalab": "",
21082
- "editor.record.form.license.etalab-v2": "",
21242
+ "editor.record.form.license.etalab": "Licenza aperta (Etalab)",
21243
+ "editor.record.form.license.etalab-v2": "Licenza aperta v2.0 (Etalab)",
21083
21244
  "editor.record.form.license.odbl": "",
21084
21245
  "editor.record.form.license.odc-by": "",
21085
21246
  "editor.record.form.license.pddl": "",
21086
21247
  "editor.record.form.license.unknown": "",
21087
- "editor.record.form.page.accessAndContact": "",
21088
- "editor.record.form.page.description": "",
21089
- "editor.record.form.page.ressources": "",
21090
- "editor.record.form.section.about.description": "",
21091
- "editor.record.form.section.about.label": "",
21092
- "editor.record.form.section.annexes.description": "",
21093
- "editor.record.form.section.annexes.label": "",
21094
- "editor.record.form.section.associatedResources.description": "",
21095
- "editor.record.form.section.associatedResources.label": "",
21096
- "editor.record.form.section.classification.description": "",
21097
- "editor.record.form.section.classification.label": "",
21098
- "editor.record.form.section.dataManagers.description": "",
21099
- "editor.record.form.section.dataManagers.label": "",
21100
- "editor.record.form.section.geographicalCoverage.label": "",
21101
- "editor.record.form.section.metadataPointOfContact.description": "",
21102
- "editor.record.form.section.metadataPointOfContact.label": "",
21103
- "editor.record.form.section.useAndAccessConditions.label": "",
21104
- "editor.record.form.temporalExtents.addDate": "",
21105
- "editor.record.form.temporalExtents.addRange": "",
21106
- "editor.record.form.temporalExtents.date": "",
21107
- "editor.record.form.temporalExtents.range": "",
21108
- "editor.record.form.updateFrequency.planned": "",
21109
- "editor.record.importFromExternalFile.failure.body": "",
21110
- "editor.record.importFromExternalFile.failure.title": "",
21111
- "editor.record.importFromExternalFile.success.body": "",
21112
- "editor.record.importFromExternalFile.success.title": "",
21113
- "editor.record.loadError.body": "",
21114
- "editor.record.loadError.closeMessage": "",
21115
- "editor.record.loadError.title": "",
21116
- "editor.record.onlineResource.protocol.other": "",
21117
- "editor.record.onlineResourceError.body": "",
21118
- "editor.record.onlineResourceError.closeMessage": "",
21119
- "editor.record.onlineResourceError.title": "",
21120
- "editor.record.placeKeywordWithoutLabel": "",
21121
- "editor.record.publish": "",
21122
- "editor.record.publish.confirmation.cancelText": "",
21123
- "editor.record.publish.confirmation.confirmText": "",
21124
- "editor.record.publish.confirmation.message": "",
21125
- "editor.record.publishError.body": "",
21126
- "editor.record.publishError.closeMessage": "",
21127
- "editor.record.publishError.title": "",
21128
- "editor.record.publishSuccess.body": "",
21129
- "editor.record.publishSuccess.title": "",
21130
- "editor.record.publishVersionError.body": "",
21131
- "editor.record.publishVersionError.closeMessage": "",
21132
- "editor.record.publishVersionError.title": "",
21133
- "editor.record.resourceError.body": "",
21134
- "editor.record.resourceError.closeMessage": "",
21135
- "editor.record.resourceError.title": "",
21136
- "editor.record.saveStatus.asDraftOnly": "",
21137
- "editor.record.saveStatus.draftWithChangesPending": "",
21138
- "editor.record.saveStatus.recordUpToDate": "",
21139
- "editor.record.undo.confirmation.cancelText": "",
21140
- "editor.record.undo.confirmation.confirmText": "",
21141
- "editor.record.undo.confirmation.message": "",
21142
- "editor.record.undo.confirmation.title": "",
21143
- "editor.record.undo.tooltip.disabled": "",
21144
- "editor.record.undo.tooltip.enabled": "",
21145
- "editor.record.upToDate": "",
21146
- "editor.sidebar.logout": "",
21248
+ "editor.record.form.page.accessAndContact": "Informazioni per l'uso",
21249
+ "editor.record.form.page.description": "Descrizione del dataset",
21250
+ "editor.record.form.page.resources": "Risorse",
21251
+ "editor.record.form.section.about.description": "Queste informazioni riguardano il dataset.",
21252
+ "editor.record.form.section.about.label": "Informazioni sul dataset",
21253
+ "editor.record.form.section.annexes.description": "Gli allegati sono risorse facoltative. Sono allegati al dataset e aiutano a comprendere meglio i dati (avviso, ecc.).",
21254
+ "editor.record.form.section.annexes.label": "Allegati",
21255
+ "editor.record.form.section.associatedResources.description": "Indica dove si trovano i dati.",
21256
+ "editor.record.form.section.associatedResources.label": "Risorse associate",
21257
+ "editor.record.form.section.classification.description": "Parole chiave appropriate aiutano a trovare il dataset.",
21258
+ "editor.record.form.section.classification.label": "Parole chiave",
21259
+ "editor.record.form.section.dataManagers.description": "Queste informazioni riguardano i dati.",
21260
+ "editor.record.form.section.dataManagers.label": "Gestori dei dati",
21261
+ "editor.record.form.section.geographicalCoverage.label": "Copertura geografica",
21262
+ "editor.record.form.section.metadataPointOfContact.description": "Queste informazioni riguardano i metadati.",
21263
+ "editor.record.form.section.metadataPointOfContact.label": "Punto di contatto dei metadati",
21264
+ "editor.record.form.section.useAndAccessConditions.label": "Condizioni di accesso e utilizzo",
21265
+ "editor.record.form.temporalExtents.addDate": "Data specificata",
21266
+ "editor.record.form.temporalExtents.addRange": "Periodo di tempo",
21267
+ "editor.record.form.temporalExtents.date": "Data rilevante",
21268
+ "editor.record.form.temporalExtents.range": "Periodo interessato",
21269
+ "editor.record.form.updateFrequency.planned": "Questi dati dovrebbero essere aggiornati regolarmente.",
21270
+ "editor.record.importFromExternalFile.failure.body": "Ha successo un'errore durante l'importazione del dataset: ",
21271
+ "editor.record.importFromExternalFile.failure.title": "Errore",
21272
+ "editor.record.importFromExternalFile.success.body": "L'importazione del dataset è riuscita.",
21273
+ "editor.record.importFromExternalFile.success.title": "Importazione riuscita",
21274
+ "editor.record.loadError.body": "Impossibile caricare il dataset:",
21275
+ "editor.record.loadError.closeMessage": "Capito",
21276
+ "editor.record.loadError.title": "Errore durante il caricamento",
21277
+ "editor.record.onlineResource.protocol.other": "Altro",
21278
+ "editor.record.onlineResourceError.body": "Ha successo un'errore durante l'aggiunta della risorsa:",
21279
+ "editor.record.onlineResourceError.closeMessage": "Capito",
21280
+ "editor.record.onlineResourceError.title": "Errore durante l'aggiunta della risorsa",
21281
+ "editor.record.placeKeywordWithoutLabel": "Posizione senza nome",
21282
+ "editor.record.publish": "Pubblica questo dataset",
21283
+ "editor.record.publish.confirmation.cancelText": "Annulla",
21284
+ "editor.record.publish.confirmation.confirmText": "Pubblica",
21285
+ "editor.record.publish.confirmation.message": "Dato che la sua bozza è stata creata, questo dataset è stato modificato il { date } da { user }. La pubblicazione della sua versione potrebbe rimuovere le loro modifiche. Vuole procedere?",
21286
+ "editor.record.publishError.body": "Il dataset non può essere pubblicato:",
21287
+ "editor.record.publishError.closeMessage": "Capito",
21288
+ "editor.record.publishError.title": "Errore durante la pubblicazione",
21289
+ "editor.record.publishSuccess.body": "Il dataset è stato pubblicato con successo",
21290
+ "editor.record.publishSuccess.title": "Pubblicazione riuscita",
21291
+ "editor.record.publishVersionError.body": "Il dataset non può essere pubblicato perché è stata rilevata una versione incompatibile di GeoNetwork. Contattare un amministratore della piattaforma per risolvere il problema.\nVersione corrente: {currentVersion}\nVersione minima compatibile: 4.2.5",
21292
+ "editor.record.publishVersionError.closeMessage": "Capito",
21293
+ "editor.record.publishVersionError.title": "Ha successo un errore critico",
21294
+ "editor.record.resourceError.body": "Ha successo un errore durante la gestione degli allegati:",
21295
+ "editor.record.resourceError.closeMessage": "Capito",
21296
+ "editor.record.resourceError.title": "Errore con gli allegati",
21297
+ "editor.record.saveStatus.draftWithChangesPending": "Salvato - Modifiche non pubblicate",
21298
+ "editor.record.saveStatus.recordNotPublished": "",
21299
+ "editor.record.saveStatus.recordUpToDate": "Salvato - Dataset aggiornato",
21300
+ "editor.record.undo.confirmation.cancelText": "Mantieni le modifiche",
21301
+ "editor.record.undo.confirmation.confirmText": "Annulla le modifiche",
21302
+ "editor.record.undo.confirmation.message": "E sicuro di voler annullare le modifiche apportate a questo dataset?",
21303
+ "editor.record.undo.confirmation.title": "Annullare le modifiche?",
21304
+ "editor.record.undo.tooltip.disabled": "Non ci sono modifiche in sospeso su questo dataset",
21305
+ "editor.record.undo.tooltip.enabled": "Fare clic su questo pulsante per annullare le modifiche apportate a questo dataset",
21306
+ "editor.record.upToDate": "Questo dataset è aggiornato",
21307
+ "editor.sidebar.logout": "Esci",
21147
21308
  "editor.sidebar.menu.editor": "",
21148
- "editor.temporary.disabled": "",
21309
+ "editor.temporary.disabled": "Non ancora implementato",
21149
21310
  "externalviewer.dataset.unnamed": "Layer del datahub",
21150
21311
  "facets.block.title.OrgForResource": "Organizzazione",
21151
21312
  "facets.block.title.availableInServices": "Disponibile per",
@@ -21159,21 +21320,21 @@ var it = {
21159
21320
  "facets.block.title.tag.default": "Tag",
21160
21321
  "facets.block.title.th_regions_tree.default": "Regioni",
21161
21322
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Login</a> per accedere a questa funzionalità</div>",
21162
- "input.file.dropFileLabel": "",
21163
- "input.file.orInputUrl": "",
21164
- "input.file.selectFileLabel": "",
21165
- "input.file.uploadProgressCancel": "",
21166
- "input.file.uploadProgressLabel": "",
21167
- "input.image.altTextPlaceholder": "",
21168
- "input.image.delete": "",
21169
- "input.image.displayAltTextInput": "",
21170
- "input.image.displayUrlInput": "",
21171
- "input.image.dropFileLabel": "",
21172
- "input.image.selectFileLabel": "",
21173
- "input.image.uploadErrorLabel": "",
21174
- "input.image.uploadErrorRetry": "",
21175
- "input.image.uploadProgressCancel": "",
21176
- "input.image.uploadProgressLabel": "",
21323
+ "input.file.dropFileLabel": "oppure trascinalo qui",
21324
+ "input.file.orInputUrl": "o collegamento a una risorsa esterna",
21325
+ "input.file.selectFileLabel": "Seleziona un file ({sizeMB} MB max.)",
21326
+ "input.file.uploadProgressCancel": "Annulla",
21327
+ "input.file.uploadProgressLabel": "Caricamento...",
21328
+ "input.image.altTextPlaceholder": "Testo alternativo dell'immagine",
21329
+ "input.image.delete": "Elimina",
21330
+ "input.image.displayAltTextInput": "Testo alternativo",
21331
+ "input.image.displayUrlInput": "Inserisci un URL",
21332
+ "input.image.dropFileLabel": "oppure trascinalo qui",
21333
+ "input.image.selectFileLabel": "Seleziona un'immagine",
21334
+ "input.image.uploadErrorLabel": "Impossibile caricare l'immagine",
21335
+ "input.image.uploadErrorRetry": "Riprova",
21336
+ "input.image.uploadProgressCancel": "Annulla",
21337
+ "input.image.uploadProgressLabel": "Caricamento...",
21177
21338
  "language.ca": "Catalano",
21178
21339
  "language.cs": "Ceco",
21179
21340
  "language.de": "Tedesco",
@@ -21196,7 +21357,7 @@ var it = {
21196
21357
  "map.add.layer.wfs": "Da un WFS",
21197
21358
  "map.add.layer.wms": "Da un WMS",
21198
21359
  "map.addFromFile.placeholder": "Clicca o trascina un file qui",
21199
- "map.dropdown.placeholder": "",
21360
+ "map.dropdown.placeholder": "Nessun livello di anteprima disponibile",
21200
21361
  "map.geocoding.placeholder": "Cerca un luogo",
21201
21362
  "map.help.addFromFile": "Clicca o trascina un file per aggiungerlo alla mappa (attualmente supporta solo il formato GeoJSON)",
21202
21363
  "map.layer.add": "Aggiungi",
@@ -21220,33 +21381,51 @@ var it = {
21220
21381
  "organisations.sortBy.nameDesc": "Nome Z → A",
21221
21382
  "organisations.sortBy.recordCountAsc": "Dati 0 → 9",
21222
21383
  "organisations.sortBy.recordCountDesc": "Dati 9 → 0",
21223
- "organization.details.lastPublishedDatasets": "",
21224
- "organization.details.lastPublishedDatasets.searchAllButton": "",
21225
- "organization.details.mailContact": "",
21384
+ "organization.details.lastPublishedDatasets": "Ultimi dataset pubblicati",
21385
+ "organization.details.lastPublishedDatasets.searchAllButton": "Cerca tutto",
21386
+ "organization.details.mailContact": "Contatto via email",
21226
21387
  "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
21227
21388
  "pagination.nextPage": "Pagina successiva",
21228
21389
  "pagination.page": "pagina",
21229
21390
  "pagination.pageOf": "di",
21230
21391
  previous: previous$2,
21231
- "record.action.delete": "",
21392
+ "record.action.delete": "Elimina",
21232
21393
  "record.action.download": "Scarica",
21233
- "record.action.duplicate": "",
21394
+ "record.action.duplicate": "Duplicato",
21234
21395
  "record.action.view": "Visualizza",
21235
- "record.externalViewer.open": "Apri nell'visualizzatore esterno",
21236
- "record.feature.limit": "",
21396
+ "record.externalViewer.open": "Aprire nel visualizzatore esterno",
21397
+ "record.feature.limit": "La risorsa contiene più di {count} funzionalità e non può essere visualizzata qui.",
21237
21398
  "record.metadata.about": "Descrizione",
21238
21399
  "record.metadata.api": "API",
21239
- "record.metadata.api.form.closeButton": "Chiudi",
21240
- "record.metadata.api.form.closeForm": "Chiudi il pannello di personalizzazione",
21400
+ "record.metadata.api.form.closeButton": "Chiude",
21401
+ "record.metadata.api.form.closeForm": "Chiude il pannello di personalizzazione",
21241
21402
  "record.metadata.api.form.create": "Configura la sua richiesta",
21403
+ "record.metadata.api.form.crsTitle": "Sistema di coordinate",
21404
+ "record.metadata.api.form.crsTooltip": "Menu a discesa per selezionare un sistema di coordinate (CRS)",
21242
21405
  "record.metadata.api.form.customUrl": "URL personalizzata",
21406
+ "record.metadata.api.form.filter": "Filtri",
21407
+ "record.metadata.api.form.filterDescription": "Sezione per perfezionare gli elementi visualizzati",
21408
+ "record.metadata.api.form.formatTitle": "Formato",
21409
+ "record.metadata.api.form.formatTooltip": "Menu a discesa per selezionare un formato dati",
21410
+ "record.metadata.api.form.items": "Elementi disponibili",
21411
+ "record.metadata.api.form.itemsDescription": "Elenco degli elementi",
21412
+ "record.metadata.api.form.itemsTooltip": "Scorri per vedere tutti gli elementi disponibili o filtrati",
21243
21413
  "record.metadata.api.form.limit": "Numero di record",
21244
21414
  "record.metadata.api.form.limit.all": "Tutti",
21245
- "record.metadata.api.form.offset": "Numero del primo record",
21246
- "record.metadata.api.form.openForm": "Apri il pannello di personalizzazione",
21247
- "record.metadata.api.form.reset": "Reset",
21248
- "record.metadata.api.form.title": "Genera un URL personalizzata",
21249
- "record.metadata.api.form.type": "Formato in uscita",
21415
+ "record.metadata.api.form.nextPage": "Avanti",
21416
+ "record.metadata.api.form.nextPageTooltip": "Va alla pagina successiva",
21417
+ "record.metadata.api.form.offset": "Numero del 1° record",
21418
+ "record.metadata.api.form.openForm": "Aprire il pannello di personalizzazione",
21419
+ "record.metadata.api.form.paginationDescription": "Paginazione degli elementi visualizzati",
21420
+ "record.metadata.api.form.previousPage": "Precedente",
21421
+ "record.metadata.api.form.previousPageTooltip": "Va alla pagina precedente",
21422
+ "record.metadata.api.form.productTooltip": "",
21423
+ "record.metadata.api.form.reset": "Reimposta",
21424
+ "record.metadata.api.form.resetTooltip": "Reimposta tutti i filtri",
21425
+ "record.metadata.api.form.type": "Formato di output",
21426
+ "record.metadata.api.form.zoneTitle": "Zona",
21427
+ "record.metadata.api.form.zoneTooltip": "Menu a discesa per selezionare una zona geografica",
21428
+ "record.metadata.api.gpfdl": "Scarica",
21250
21429
  "record.metadata.catalog": "Catalogo",
21251
21430
  "record.metadata.contact": "Contatto",
21252
21431
  "record.metadata.creation": "Data di creazione",
@@ -21285,8 +21464,8 @@ var it = {
21285
21464
  "record.metadata.related": "Vedi anche",
21286
21465
  "record.metadata.sheet": "Origine del metadata",
21287
21466
  "record.metadata.status": "Stato",
21288
- "record.metadata.status.notPublished": "",
21289
- "record.metadata.status.published": "",
21467
+ "record.metadata.status.notPublished": "Non pubblicato",
21468
+ "record.metadata.status.published": "Pubblicato",
21290
21469
  "record.metadata.technical": "Informazioni tecniche",
21291
21470
  "record.metadata.temporalExtent": "Periodo di tempo",
21292
21471
  "record.metadata.temporalExtent.fromDateToDate": "Da {start} a {end}",
@@ -21299,19 +21478,18 @@ var it = {
21299
21478
  "record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
21300
21479
  "record.metadata.updatedOn": "Modificato il",
21301
21480
  "record.metadata.usage": "Licenze e limiti di utilizzo",
21302
- "record.metadata.userFeedbacks": "",
21303
- "record.metadata.userFeedbacks.anonymousUser": "",
21304
- "record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
21305
- "record.metadata.userFeedbacks.newAnswer.placeholder": "",
21306
- "record.metadata.userFeedbacks.newComment.placeholder": "",
21307
- "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
21308
- "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
21309
- "record.metadata.userFeedbacks.sortSelector.label": "",
21481
+ "record.metadata.userFeedbacks": "Domande / Risposte",
21482
+ "record.metadata.userFeedbacks.anonymousUser": "Per pubblicare un commento, effettua il login.",
21483
+ "record.metadata.userFeedbacks.newAnswer.buttonTitle": "Pubblica",
21484
+ "record.metadata.userFeedbacks.newAnswer.placeholder": "Risponde...",
21485
+ "record.metadata.userFeedbacks.newComment.placeholder": "Scrive qui il suo commento...",
21486
+ "record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Prima i più recenti",
21487
+ "record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Prima il più vecchio",
21488
+ "record.metadata.userFeedbacks.sortSelector.label": "Ordina per ...",
21310
21489
  "record.more.details": "Dettagli",
21311
21490
  "record.tab.chart": "Grafico",
21312
21491
  "record.tab.data": "Tabella",
21313
21492
  "record.tab.map": "Mappa",
21314
- "record.was.created.time": "ha creato questi dati {time}",
21315
21493
  records: records$2,
21316
21494
  "results.layout.selectOne": "Mostra risultati",
21317
21495
  "results.records.hits.displayedOn": "{displayed, plural, =0{Nessun record} one{1 record visualizzato} other{{displayed} records visualizzati}} {hits, plural, other{su {hits} in totale.}}",
@@ -21319,21 +21497,21 @@ var it = {
21319
21497
  "results.records.hits.found": "{hits, plural, =0{Nessuna corrispondenza.} one{1 record trovato.} other{{hits} risultati.}}",
21320
21498
  "results.records.hits.selected": "{amount, plural, one{1 selezionato} other{{ amount } selezionati}}",
21321
21499
  "results.showMore": "Altri risultati...",
21322
- "results.sortBy.changeDate": "",
21500
+ "results.sortBy.changeDate": "Ultima modifica",
21323
21501
  "results.sortBy.dateStamp": "Più recente",
21324
21502
  "results.sortBy.popularity": "Popolarità",
21325
21503
  "results.sortBy.qualityScore": "Indicatore di qualità",
21326
21504
  "results.sortBy.relevancy": "Rilevanza",
21327
21505
  "search.autocomplete.error": "Impossibile recuperare le suggerimenti",
21328
21506
  "search.error.couldNotReachApi": "Problema di connessione all'API",
21329
- "search.error.organizationHasNoDataset": "",
21330
- "search.error.organizationNotFound": "",
21331
- "search.error.receivedError": "Errore ricevuto",
21332
- "search.error.recordHasnolink": "",
21333
- "search.error.recordNotFound": "Impossibile trovare questo dato",
21334
- "search.field.any.placeholder": "Cerca un dato...",
21507
+ "search.error.organizationHasNoDataset": "Questa organizzazione non ha ancora dati.",
21508
+ "search.error.organizationNotFound": "Impossibile trovare l'organizzazione.",
21509
+ "search.error.receivedError": "Errore restituito",
21510
+ "search.error.recordHasnolink": "Questo dataset non ha ancora alcun collegamento, riprova più tardi.",
21511
+ "search.error.recordNotFound": "Impossibile trovare questi dati.",
21512
+ "search.field.any.placeholder": "Cerca un dataset...",
21335
21513
  "search.field.sortBy": "Ordina per:",
21336
- "search.filters.changeDate": "",
21514
+ "search.filters.changeDate": "Aggiornato",
21337
21515
  "search.filters.clear": "Ripristina",
21338
21516
  "search.filters.contact": "Contatti",
21339
21517
  "search.filters.format": "Formati",
@@ -21356,21 +21534,21 @@ var it = {
21356
21534
  "search.filters.minimize": "Riduci",
21357
21535
  "search.filters.myRecords": "Visualizza i miei dati",
21358
21536
  "search.filters.myRecordsHelp": "Quando attivato, mostra solo i dati creati con il mio utente. I dati creati da altri utenti non sono visualizzati.",
21359
- "search.filters.organization": "",
21360
- "search.filters.otherRecords": "Visualizzazione dei dati di un altro utente",
21361
- "search.filters.producerOrg": "",
21537
+ "search.filters.organization": "Organizzazione",
21538
+ "search.filters.otherRecords": "Visualizzazione dei dataset di un altro utente",
21539
+ "search.filters.producerOrg": "Produttore",
21362
21540
  "search.filters.publicationYear": "Anno di pubblicazione",
21363
- "search.filters.publisherOrg": "",
21541
+ "search.filters.publisherOrg": "Distributore",
21364
21542
  "search.filters.representationType": "Tipo di rappresentazione",
21365
21543
  "search.filters.resourceType": "Tipo di risorsa",
21366
21544
  "search.filters.standard": "Standard",
21367
- "search.filters.summaryLabel.changeDate": "",
21368
- "search.filters.summaryLabel.user": "",
21545
+ "search.filters.summaryLabel.changeDate": "Aggiornato: ",
21546
+ "search.filters.summaryLabel.user": "Editor: ",
21369
21547
  "search.filters.title": "Affina la sua ricerca",
21370
21548
  "search.filters.topic": "Argomenti",
21371
21549
  "search.filters.useSpatialFilter": "Evidenzia i risultati nell'area di interesse",
21372
21550
  "search.filters.useSpatialFilterHelp": "Se attivata, le schede relative all'area di interesse del catalogo saranno mostrate per prime; le schede al di fuori di questa area non appariranno nei risultati.",
21373
- "search.filters.user": "",
21551
+ "search.filters.user": "Editore",
21374
21552
  "share.tab.permalink": "Condividere",
21375
21553
  "share.tab.webComponent": "Incorporare",
21376
21554
  "table.loading.data": "Caricamento dei dati...",
@@ -21381,8 +21559,8 @@ var it = {
21381
21559
  "tooltip.url.copy": "Copiare l'URL",
21382
21560
  "tooltip.url.open": "Aprire l'URL",
21383
21561
  "ui.readLess": "Ridurre",
21384
- "ui.readMore": "Leggi di più",
21385
- "wfs.feature.limit": "",
21562
+ "ui.readMore": "Leggere di più",
21563
+ "wfs.feature.limit": "Troppi oggetti per visualizzare il WFS layer!",
21386
21564
  "wfs.featuretype.notfound": "La classe di oggetto non è stata trovata nel servizio",
21387
21565
  "wfs.geojsongml.notsupported": "Il servizio non supporta il formato GeoJSON o GML",
21388
21566
  "wfs.unreachable.cors": "Il servizio non è accessibile a causa di limitazioni CORS",
@@ -21535,6 +21713,7 @@ var nl = {
21535
21713
  "datahub.search.back": "",
21536
21714
  "datahub.search.filter.all": "",
21537
21715
  "datahub.search.filter.generatedByAPI": "",
21716
+ "datahub.search.filter.generatedByWfs": "",
21538
21717
  "datahub.search.filter.others": "",
21539
21718
  "dataset.error.http": "",
21540
21719
  "dataset.error.network": "",
@@ -21567,16 +21746,25 @@ var nl = {
21567
21746
  "domain.record.status.ongoing": "",
21568
21747
  "domain.record.status.removed": "",
21569
21748
  "domain.record.status.under_development": "",
21570
- "domain.record.updateFrequency.asNeeded": "",
21571
- "domain.record.updateFrequency.continual": "",
21572
- "domain.record.updateFrequency.day": "",
21573
- "domain.record.updateFrequency.irregular": "",
21574
- "domain.record.updateFrequency.month": "",
21575
- "domain.record.updateFrequency.notPlanned": "",
21576
- "domain.record.updateFrequency.periodic": "",
21577
- "domain.record.updateFrequency.unknown": "",
21578
- "domain.record.updateFrequency.week": "",
21579
- "domain.record.updateFrequency.year": "",
21749
+ "domain.record.updateFrequency.annually": "Gegevens worden elk jaar bijgewerkt",
21750
+ "domain.record.updateFrequency.asNeeded": "Gegevens worden bijgewerkt naar behoefte",
21751
+ "domain.record.updateFrequency.biannually": "Gegevens worden twee keer per jaar bijgewerkt",
21752
+ "domain.record.updateFrequency.biennially": "Gegevens worden elke 2 jaar bijgewerkt",
21753
+ "domain.record.updateFrequency.continual": "Gegevens worden herhaaldelijk en frequent bijgewerkt",
21754
+ "domain.record.updateFrequency.daily": "Gegevens worden elke dag bijgewerkt",
21755
+ "domain.record.updateFrequency.day": "{count, plural, =0{0 keer} one{Een keer} other{{count} keer}} per dag",
21756
+ "domain.record.updateFrequency.fortnightly": "Gegevens worden elke twee weken bijgewerkt",
21757
+ "domain.record.updateFrequency.irregular": "Gegevens worden onregelmatig bijgewerkt",
21758
+ "domain.record.updateFrequency.month": "{count, plural, =0{0 keer} one{Een keer} other{{count} keer}} per maand",
21759
+ "domain.record.updateFrequency.monthly": "Gegevens worden elke maand bijgewerkt",
21760
+ "domain.record.updateFrequency.notPlanned": "Er zijn geen plannen om de gegevens bij te werken",
21761
+ "domain.record.updateFrequency.periodic": "Gegevens worden regelmatig bijgewerkt",
21762
+ "domain.record.updateFrequency.quarterly": "Gegevens worden elke drie maanden bijgewerkt",
21763
+ "domain.record.updateFrequency.semimonthly": "Gegevens worden twee keer per maand bijgewerkt",
21764
+ "domain.record.updateFrequency.unknown": "De frequentie van gegevensonderhoud is onbekend",
21765
+ "domain.record.updateFrequency.week": "{count, plural, =0{0 keer} one{Een keer} other{{count} keer}} per week",
21766
+ "domain.record.updateFrequency.weekly": "Gegevens worden wekelijks bijgewerkt",
21767
+ "domain.record.updateFrequency.year": "{count, plural, =0{0 keer} one{Een keer} other{{count} keer}} per jaar",
21580
21768
  "downloads.format.unknown": "",
21581
21769
  "downloads.wfs.featuretype.not.found": "",
21582
21770
  dropFile: dropFile$1,
@@ -21612,7 +21800,6 @@ var nl = {
21612
21800
  "editor.record.form.field.constraintsShortcuts": "",
21613
21801
  "editor.record.form.field.contacts.noContact": "",
21614
21802
  "editor.record.form.field.contactsForResource.noContact": "",
21615
- "editor.record.form.field.draft.only.disabled": "",
21616
21803
  "editor.record.form.field.keywords": "",
21617
21804
  "editor.record.form.field.legalConstraints": "",
21618
21805
  "editor.record.form.field.license": "",
@@ -21622,6 +21809,9 @@ var nl = {
21622
21809
  "editor.record.form.field.onlineResource.dialogTitle": "",
21623
21810
  "editor.record.form.field.onlineResource.edit.description": "",
21624
21811
  "editor.record.form.field.onlineResource.edit.protocol": "",
21812
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Laagnaam",
21813
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Procesnaam",
21814
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Link naar de dienst",
21625
21815
  "editor.record.form.field.onlineResource.edit.title": "",
21626
21816
  "editor.record.form.field.onlineResource.fileSize": "",
21627
21817
  "editor.record.form.field.onlineResource.modify": "",
@@ -21638,6 +21828,7 @@ var nl = {
21638
21828
  "editor.record.form.field.spatialExtents": "",
21639
21829
  "editor.record.form.field.temporalExtents": "",
21640
21830
  "editor.record.form.field.title": "",
21831
+ "editor.record.form.field.title.placeholder": "Voer een titel in",
21641
21832
  "editor.record.form.field.uniqueIdentifier": "",
21642
21833
  "editor.record.form.field.updateFrequency": "",
21643
21834
  "editor.record.form.license.cc-by": "",
@@ -21670,7 +21861,7 @@ var nl = {
21670
21861
  "editor.record.form.temporalExtents.addRange": "",
21671
21862
  "editor.record.form.temporalExtents.date": "",
21672
21863
  "editor.record.form.temporalExtents.range": "",
21673
- "editor.record.form.updateFrequency.planned": "",
21864
+ "editor.record.form.updateFrequency.planned": "Deze dataset wordt regelmatig bijgewerkt.",
21674
21865
  "editor.record.importFromExternalFile.failure.body": "",
21675
21866
  "editor.record.importFromExternalFile.failure.title": "",
21676
21867
  "editor.record.importFromExternalFile.success.body": "",
@@ -21698,8 +21889,8 @@ var nl = {
21698
21889
  "editor.record.resourceError.body": "",
21699
21890
  "editor.record.resourceError.closeMessage": "",
21700
21891
  "editor.record.resourceError.title": "",
21701
- "editor.record.saveStatus.asDraftOnly": "",
21702
21892
  "editor.record.saveStatus.draftWithChangesPending": "",
21893
+ "editor.record.saveStatus.recordNotPublished": "",
21703
21894
  "editor.record.saveStatus.recordUpToDate": "",
21704
21895
  "editor.record.undo.confirmation.cancelText": "",
21705
21896
  "editor.record.undo.confirmation.confirmText": "",
@@ -21804,14 +21995,32 @@ var nl = {
21804
21995
  "record.metadata.api.form.closeButton": "",
21805
21996
  "record.metadata.api.form.closeForm": "",
21806
21997
  "record.metadata.api.form.create": "",
21998
+ "record.metadata.api.form.crsTitle": "",
21999
+ "record.metadata.api.form.crsTooltip": "",
21807
22000
  "record.metadata.api.form.customUrl": "",
22001
+ "record.metadata.api.form.filter": "",
22002
+ "record.metadata.api.form.filterDescription": "",
22003
+ "record.metadata.api.form.formatTitle": "",
22004
+ "record.metadata.api.form.formatTooltip": "",
22005
+ "record.metadata.api.form.items": "",
22006
+ "record.metadata.api.form.itemsDescription": "",
22007
+ "record.metadata.api.form.itemsTooltip": "",
21808
22008
  "record.metadata.api.form.limit": "",
21809
22009
  "record.metadata.api.form.limit.all": "",
22010
+ "record.metadata.api.form.nextPage": "",
22011
+ "record.metadata.api.form.nextPageTooltip": "",
21810
22012
  "record.metadata.api.form.offset": "",
21811
22013
  "record.metadata.api.form.openForm": "",
22014
+ "record.metadata.api.form.paginationDescription": "",
22015
+ "record.metadata.api.form.previousPage": "",
22016
+ "record.metadata.api.form.previousPageTooltip": "",
22017
+ "record.metadata.api.form.productTooltip": "",
21812
22018
  "record.metadata.api.form.reset": "",
21813
- "record.metadata.api.form.title": "",
22019
+ "record.metadata.api.form.resetTooltip": "",
21814
22020
  "record.metadata.api.form.type": "",
22021
+ "record.metadata.api.form.zoneTitle": "",
22022
+ "record.metadata.api.form.zoneTooltip": "",
22023
+ "record.metadata.api.gpfdl": "",
21815
22024
  "record.metadata.catalog": "",
21816
22025
  "record.metadata.contact": "",
21817
22026
  "record.metadata.creation": "",
@@ -21876,7 +22085,6 @@ var nl = {
21876
22085
  "record.tab.chart": "",
21877
22086
  "record.tab.data": "",
21878
22087
  "record.tab.map": "",
21879
- "record.was.created.time": "",
21880
22088
  records: records$1,
21881
22089
  "results.layout.selectOne": "",
21882
22090
  "results.records.hits.displayedOn": "",
@@ -22100,6 +22308,7 @@ var pt = {
22100
22308
  "datahub.search.back": "",
22101
22309
  "datahub.search.filter.all": "",
22102
22310
  "datahub.search.filter.generatedByAPI": "",
22311
+ "datahub.search.filter.generatedByWfs": "",
22103
22312
  "datahub.search.filter.others": "",
22104
22313
  "dataset.error.http": "",
22105
22314
  "dataset.error.network": "",
@@ -22132,16 +22341,25 @@ var pt = {
22132
22341
  "domain.record.status.ongoing": "",
22133
22342
  "domain.record.status.removed": "",
22134
22343
  "domain.record.status.under_development": "",
22135
- "domain.record.updateFrequency.asNeeded": "",
22136
- "domain.record.updateFrequency.continual": "",
22137
- "domain.record.updateFrequency.day": "",
22138
- "domain.record.updateFrequency.irregular": "",
22139
- "domain.record.updateFrequency.month": "",
22140
- "domain.record.updateFrequency.notPlanned": "",
22141
- "domain.record.updateFrequency.periodic": "",
22142
- "domain.record.updateFrequency.unknown": "",
22143
- "domain.record.updateFrequency.week": "",
22144
- "domain.record.updateFrequency.year": "",
22344
+ "domain.record.updateFrequency.annually": "Os dados são atualizados anualmente",
22345
+ "domain.record.updateFrequency.asNeeded": "Os dados são atualizados conforme necessário",
22346
+ "domain.record.updateFrequency.biannually": "Os dados são atualizados duas vezes por ano",
22347
+ "domain.record.updateFrequency.biennially": "Os dados são atualizados a cada 2 anos",
22348
+ "domain.record.updateFrequency.continual": "Os dados são atualizados repetidamente e com frequência",
22349
+ "domain.record.updateFrequency.daily": "Os dados são atualizados diariamente",
22350
+ "domain.record.updateFrequency.day": "{count, plural, =0{0 vezes} one{Uma vez} other{{count} vezes}} por dia",
22351
+ "domain.record.updateFrequency.fortnightly": "Os dados são atualizados a cada duas semanas",
22352
+ "domain.record.updateFrequency.irregular": "Os dados são atualizados em intervalos irregulares",
22353
+ "domain.record.updateFrequency.month": "{count, plural, =0{0 vezes} one{Uma vez} other{{count} vezes}} por mês",
22354
+ "domain.record.updateFrequency.monthly": "Os dados são atualizados mensalmente",
22355
+ "domain.record.updateFrequency.notPlanned": "Não há planos para atualizar os dados",
22356
+ "domain.record.updateFrequency.periodic": "Os dados são atualizados em intervalos regulares",
22357
+ "domain.record.updateFrequency.quarterly": "Os dados são atualizados a cada três meses",
22358
+ "domain.record.updateFrequency.semimonthly": "Os dados são atualizados duas vezes por mês",
22359
+ "domain.record.updateFrequency.unknown": "A frequência de manutenção dos dados é desconhecida",
22360
+ "domain.record.updateFrequency.week": "{count, plural, =0{0 vezes} one{Uma vez} other{{count} vezes}} por semana",
22361
+ "domain.record.updateFrequency.weekly": "Os dados são atualizados semanalmente",
22362
+ "domain.record.updateFrequency.year": "{count, plural, =0{0 vezes} one{Uma vez} other{{count} vezes}} por ano",
22145
22363
  "downloads.format.unknown": "",
22146
22364
  "downloads.wfs.featuretype.not.found": "",
22147
22365
  dropFile: dropFile,
@@ -22177,7 +22395,6 @@ var pt = {
22177
22395
  "editor.record.form.field.constraintsShortcuts": "",
22178
22396
  "editor.record.form.field.contacts.noContact": "",
22179
22397
  "editor.record.form.field.contactsForResource.noContact": "",
22180
- "editor.record.form.field.draft.only.disabled": "",
22181
22398
  "editor.record.form.field.keywords": "",
22182
22399
  "editor.record.form.field.legalConstraints": "",
22183
22400
  "editor.record.form.field.license": "",
@@ -22187,6 +22404,9 @@ var pt = {
22187
22404
  "editor.record.form.field.onlineResource.dialogTitle": "",
22188
22405
  "editor.record.form.field.onlineResource.edit.description": "",
22189
22406
  "editor.record.form.field.onlineResource.edit.protocol": "",
22407
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Nome da camada",
22408
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Nome do processo",
22409
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Link para o serviço",
22190
22410
  "editor.record.form.field.onlineResource.edit.title": "",
22191
22411
  "editor.record.form.field.onlineResource.fileSize": "",
22192
22412
  "editor.record.form.field.onlineResource.modify": "",
@@ -22203,6 +22423,7 @@ var pt = {
22203
22423
  "editor.record.form.field.spatialExtents": "",
22204
22424
  "editor.record.form.field.temporalExtents": "",
22205
22425
  "editor.record.form.field.title": "",
22426
+ "editor.record.form.field.title.placeholder": "Insira um título",
22206
22427
  "editor.record.form.field.uniqueIdentifier": "",
22207
22428
  "editor.record.form.field.updateFrequency": "",
22208
22429
  "editor.record.form.license.cc-by": "",
@@ -22235,7 +22456,7 @@ var pt = {
22235
22456
  "editor.record.form.temporalExtents.addRange": "",
22236
22457
  "editor.record.form.temporalExtents.date": "",
22237
22458
  "editor.record.form.temporalExtents.range": "",
22238
- "editor.record.form.updateFrequency.planned": "",
22459
+ "editor.record.form.updateFrequency.planned": "Este conjunto de dados é atualizado regularmente.",
22239
22460
  "editor.record.importFromExternalFile.failure.body": "",
22240
22461
  "editor.record.importFromExternalFile.failure.title": "",
22241
22462
  "editor.record.importFromExternalFile.success.body": "",
@@ -22263,8 +22484,8 @@ var pt = {
22263
22484
  "editor.record.resourceError.body": "",
22264
22485
  "editor.record.resourceError.closeMessage": "",
22265
22486
  "editor.record.resourceError.title": "",
22266
- "editor.record.saveStatus.asDraftOnly": "",
22267
22487
  "editor.record.saveStatus.draftWithChangesPending": "",
22488
+ "editor.record.saveStatus.recordNotPublished": "",
22268
22489
  "editor.record.saveStatus.recordUpToDate": "",
22269
22490
  "editor.record.undo.confirmation.cancelText": "",
22270
22491
  "editor.record.undo.confirmation.confirmText": "",
@@ -22369,14 +22590,32 @@ var pt = {
22369
22590
  "record.metadata.api.form.closeButton": "",
22370
22591
  "record.metadata.api.form.closeForm": "",
22371
22592
  "record.metadata.api.form.create": "",
22593
+ "record.metadata.api.form.crsTitle": "",
22594
+ "record.metadata.api.form.crsTooltip": "",
22372
22595
  "record.metadata.api.form.customUrl": "",
22596
+ "record.metadata.api.form.filter": "",
22597
+ "record.metadata.api.form.filterDescription": "",
22598
+ "record.metadata.api.form.formatTitle": "",
22599
+ "record.metadata.api.form.formatTooltip": "",
22600
+ "record.metadata.api.form.items": "",
22601
+ "record.metadata.api.form.itemsDescription": "",
22602
+ "record.metadata.api.form.itemsTooltip": "",
22373
22603
  "record.metadata.api.form.limit": "",
22374
22604
  "record.metadata.api.form.limit.all": "",
22605
+ "record.metadata.api.form.nextPage": "",
22606
+ "record.metadata.api.form.nextPageTooltip": "",
22375
22607
  "record.metadata.api.form.offset": "",
22376
22608
  "record.metadata.api.form.openForm": "",
22609
+ "record.metadata.api.form.paginationDescription": "",
22610
+ "record.metadata.api.form.previousPage": "",
22611
+ "record.metadata.api.form.previousPageTooltip": "",
22612
+ "record.metadata.api.form.productTooltip": "",
22377
22613
  "record.metadata.api.form.reset": "",
22378
- "record.metadata.api.form.title": "",
22614
+ "record.metadata.api.form.resetTooltip": "",
22379
22615
  "record.metadata.api.form.type": "",
22616
+ "record.metadata.api.form.zoneTitle": "",
22617
+ "record.metadata.api.form.zoneTooltip": "",
22618
+ "record.metadata.api.gpfdl": "",
22380
22619
  "record.metadata.catalog": "",
22381
22620
  "record.metadata.contact": "",
22382
22621
  "record.metadata.creation": "",
@@ -22441,7 +22680,6 @@ var pt = {
22441
22680
  "record.tab.chart": "",
22442
22681
  "record.tab.data": "",
22443
22682
  "record.tab.map": "",
22444
- "record.was.created.time": "",
22445
22683
  records: records,
22446
22684
  "results.layout.selectOne": "",
22447
22685
  "results.records.hits.displayedOn": "",
@@ -23551,10 +23789,16 @@ class Gn4Repository {
23551
23789
  records,
23552
23790
  }))));
23553
23791
  }
23792
+ getRecordPublicationStatus(uniqueIdentifier) {
23793
+ return uniqueIdentifier
23794
+ ? this.getRecord(uniqueIdentifier).pipe(map$1((record) => record.extras['isPublishedToAll']))
23795
+ : of(true);
23796
+ }
23554
23797
  openRecordForEdition(uniqueIdentifier) {
23555
23798
  const draft$ = of(this.getRecordFromLocalStorage(uniqueIdentifier));
23556
23799
  const recordAsXml$ = this.getRecordAsXml(uniqueIdentifier);
23557
- return combineLatest([draft$, recordAsXml$]).pipe(switchMap(([draft, recordAsXml]) => {
23800
+ const record$ = this.getRecord(uniqueIdentifier);
23801
+ return combineLatest([draft$, recordAsXml$, record$]).pipe(switchMap(([draft, recordAsXml]) => {
23558
23802
  const xml = draft ?? recordAsXml;
23559
23803
  const isSavedAlready = recordAsXml !== null;
23560
23804
  return findConverterForDocument(xml)
@@ -23563,23 +23807,27 @@ class Gn4Repository {
23563
23807
  }));
23564
23808
  }
23565
23809
  openRecordForDuplication(uniqueIdentifier) {
23566
- return this.getRecordAsXml(uniqueIdentifier).pipe(switchMap(async (fetchedRecordAsXml) => {
23567
- const converter = findConverterForDocument(fetchedRecordAsXml);
23568
- const record = await converter.readRecord(fetchedRecordAsXml);
23569
- record.uniqueIdentifier = `${TEMPORARY_ID_PREFIX}${Date.now()}`;
23570
- record.title = `${record.title} (Copy)`;
23571
- const recordAsXml = await converter.writeRecord(record, fetchedRecordAsXml);
23572
- this.saveRecordToLocalStorage(recordAsXml, record.uniqueIdentifier);
23573
- this._draftsChanged.next();
23574
- return [record, recordAsXml, false];
23810
+ return this.gn4RecordsApi
23811
+ .create(uniqueIdentifier, '2', 'METADATA', '', false, undefined, true, false, undefined, 'body', false, {
23812
+ httpHeaderAccept: 'application/json',
23813
+ httpContentTypeSelected: 'application/json;charset=UTF-8',
23814
+ })
23815
+ .pipe(switchMap((uniqueIdentifier) => {
23816
+ return this.getRecordAsXml(uniqueIdentifier);
23817
+ }), switchMap((xml) => {
23818
+ return from(findConverterForDocument(xml)
23819
+ .readRecord(xml)
23820
+ .then((record) => {
23821
+ return [record, xml, true];
23822
+ }));
23575
23823
  }));
23576
23824
  }
23577
- saveRecord(record, referenceRecordSource) {
23825
+ saveRecord(record, referenceRecordSource, publishToAll = true) {
23578
23826
  return this.platformService.getApiVersion().pipe(map$1((version) => {
23579
23827
  if (lt(version, minPublicationApiVersion)) {
23580
23828
  throw new PublicationVersionError(version);
23581
23829
  }
23582
- }), switchMap(() => this.serializeRecordToXml(record, referenceRecordSource)), switchMap((recordXml) => this.gn4RecordsApi.insert('METADATA', undefined, undefined, undefined, true, undefined, 'OVERWRITE', undefined, undefined, undefined, '_none_', undefined, undefined, undefined, recordXml)), map$1((response) => {
23830
+ }), switchMap(() => this.serializeRecordToXml(record, referenceRecordSource)), switchMap((recordXml) => this.gn4RecordsApi.insert('METADATA', undefined, undefined, undefined, publishToAll, undefined, 'OVERWRITE', undefined, undefined, undefined, '_none_', undefined, undefined, undefined, recordXml)), map$1((response) => {
23583
23831
  const metadataId = Object.keys(response.metadataInfos)[0];
23584
23832
  return response.metadataInfos[metadataId][0].uuid;
23585
23833
  }));
@@ -23618,9 +23866,6 @@ class Gn4Repository {
23618
23866
  recordHasDraft(uniqueIdentifier) {
23619
23867
  return this.getRecordFromLocalStorage(uniqueIdentifier) !== null;
23620
23868
  }
23621
- isRecordNotYetSaved(uniqueIdentifier) {
23622
- return uniqueIdentifier.startsWith(TEMPORARY_ID_PREFIX);
23623
- }
23624
23869
  // generated by copilot
23625
23870
  getAllDrafts() {
23626
23871
  const items = { ...window.localStorage };
@@ -23642,7 +23887,7 @@ class Gn4Repository {
23642
23887
  }
23643
23888
  hasRecordChangedSinceDraft(localRecord) {
23644
23889
  return of({
23645
- isUnsaved: this.isRecordNotYetSaved(localRecord.uniqueIdentifier),
23890
+ isUnsaved: !localRecord.uniqueIdentifier,
23646
23891
  hasDraft: this.recordHasDraft(localRecord.uniqueIdentifier),
23647
23892
  }).pipe(switchMap(({ isUnsaved, hasDraft }) => {
23648
23893
  if (isUnsaved || !hasDraft) {
@@ -26124,6 +26369,7 @@ class ButtonComponent {
26124
26369
  handleClick(event) {
26125
26370
  this.buttonClick.emit();
26126
26371
  event.preventDefault();
26372
+ event.currentTarget.blur();
26127
26373
  propagateToDocumentOnly(event);
26128
26374
  }
26129
26375
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -26542,42 +26788,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26542
26788
  type: Output
26543
26789
  }] } });
26544
26790
 
26545
- class DateRangePickerComponent {
26546
- constructor() {
26547
- this.startDateChange = new EventEmitter();
26548
- this.endDateChange = new EventEmitter();
26549
- }
26550
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26551
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DateRangePickerComponent, isStandalone: true, selector: "gn-ui-date-range-picker", inputs: { startDate: "startDate", endDate: "endDate" }, outputs: { startDateChange: "startDateChange", endDateChange: "endDateChange" }, providers: [
26552
- provideIcons({ iconoirCalendar }),
26553
- provideNgIconsConfig({
26554
- size: '1.5rem',
26555
- }),
26556
- ], ngImport: i0, template: "<span class=\"w-full inline-block relative\">\n <mat-date-range-input [rangePicker]=\"picker\" class=\"gn-ui-text-input\">\n <input\n matStartDate\n placeholder=\"Start date\"\n [value]=\"startDate\"\n (dateInput)=\"startDateChange.emit($event.value)\"\n />\n <input\n matEndDate\n placeholder=\"End date\"\n [value]=\"endDate\"\n (dateInput)=\"endDateChange.emit($event.value)\"\n />\n </mat-date-range-input>\n\n <gn-ui-button\n type=\"light\"\n class=\"absolute inset-y-[var(--side-padding)] right-[var(--side-padding)] z-10\"\n (buttonClick)=\"picker.open()\"\n extraClass=\"h-full\"\n data-cy=\"date-picker-button\"\n >\n <ng-icon name=\"iconoirCalendar\" class=\"text-primary\"></ng-icon>\n </gn-ui-button>\n</span>\n<mat-date-range-picker #picker></mat-date-range-picker>\n", styles: [":host{--gn-ui-button-rounded: 8px;--gn-ui-button-width: 32px;--gn-ui-button-padding: 0;--side-padding: calc(var(--gn-ui-text-input-padding, .6em) - 6px);--text-padding: calc(var(--side-padding) + 40px)}\n"], dependencies: [{ kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i1$8.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i1$8.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i1$8.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i1$8.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26557
- }
26558
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateRangePickerComponent, decorators: [{
26559
- type: Component,
26560
- args: [{ selector: 'gn-ui-date-range-picker', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
26561
- MatNativeDateModule,
26562
- MatDatepickerModule,
26563
- ButtonComponent,
26564
- NgIconComponent,
26565
- ], providers: [
26566
- provideIcons({ iconoirCalendar }),
26567
- provideNgIconsConfig({
26568
- size: '1.5rem',
26569
- }),
26570
- ], template: "<span class=\"w-full inline-block relative\">\n <mat-date-range-input [rangePicker]=\"picker\" class=\"gn-ui-text-input\">\n <input\n matStartDate\n placeholder=\"Start date\"\n [value]=\"startDate\"\n (dateInput)=\"startDateChange.emit($event.value)\"\n />\n <input\n matEndDate\n placeholder=\"End date\"\n [value]=\"endDate\"\n (dateInput)=\"endDateChange.emit($event.value)\"\n />\n </mat-date-range-input>\n\n <gn-ui-button\n type=\"light\"\n class=\"absolute inset-y-[var(--side-padding)] right-[var(--side-padding)] z-10\"\n (buttonClick)=\"picker.open()\"\n extraClass=\"h-full\"\n data-cy=\"date-picker-button\"\n >\n <ng-icon name=\"iconoirCalendar\" class=\"text-primary\"></ng-icon>\n </gn-ui-button>\n</span>\n<mat-date-range-picker #picker></mat-date-range-picker>\n", styles: [":host{--gn-ui-button-rounded: 8px;--gn-ui-button-width: 32px;--gn-ui-button-padding: 0;--side-padding: calc(var(--gn-ui-text-input-padding, .6em) - 6px);--text-padding: calc(var(--side-padding) + 40px)}\n"] }]
26571
- }], propDecorators: { startDate: [{
26572
- type: Input
26573
- }], endDate: [{
26574
- type: Input
26575
- }], startDateChange: [{
26576
- type: Output
26577
- }], endDateChange: [{
26578
- type: Output
26579
- }] } });
26580
-
26581
26791
  class DateRangeDropdownComponent {
26582
26792
  constructor(overlayContainer, cdr) {
26583
26793
  this.overlayContainer = overlayContainer;
@@ -26632,6 +26842,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26632
26842
  args: ['picker']
26633
26843
  }] } });
26634
26844
 
26845
+ class DateRangePickerComponent {
26846
+ constructor() {
26847
+ this.startDateChange = new EventEmitter();
26848
+ this.endDateChange = new EventEmitter();
26849
+ }
26850
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26851
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DateRangePickerComponent, isStandalone: true, selector: "gn-ui-date-range-picker", inputs: { startDate: "startDate", endDate: "endDate" }, outputs: { startDateChange: "startDateChange", endDateChange: "endDateChange" }, providers: [
26852
+ provideIcons({ iconoirCalendar }),
26853
+ provideNgIconsConfig({
26854
+ size: '1.5rem',
26855
+ }),
26856
+ ], ngImport: i0, template: "<span class=\"w-full inline-block relative\">\n <mat-date-range-input [rangePicker]=\"picker\" class=\"gn-ui-text-input\">\n <input\n matStartDate\n placeholder=\"Start date\"\n [value]=\"startDate\"\n (dateInput)=\"startDateChange.emit($event.value)\"\n />\n <input\n matEndDate\n placeholder=\"End date\"\n [value]=\"endDate\"\n (dateInput)=\"endDateChange.emit($event.value)\"\n />\n </mat-date-range-input>\n\n <gn-ui-button\n type=\"light\"\n class=\"absolute inset-y-[var(--side-padding)] right-[var(--side-padding)] z-10\"\n (buttonClick)=\"picker.open()\"\n extraClass=\"h-full\"\n data-cy=\"date-picker-button\"\n >\n <ng-icon name=\"iconoirCalendar\" class=\"text-primary\"></ng-icon>\n </gn-ui-button>\n</span>\n<mat-date-range-picker #picker></mat-date-range-picker>\n", styles: [":host{--gn-ui-button-rounded: 8px;--gn-ui-button-width: 32px;--gn-ui-button-padding: 0;--side-padding: calc(var(--gn-ui-text-input-padding, .6em) - 6px);--text-padding: calc(var(--side-padding) + 40px)}\n"], dependencies: [{ kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i1$8.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i1$8.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i1$8.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i1$8.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26857
+ }
26858
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateRangePickerComponent, decorators: [{
26859
+ type: Component,
26860
+ args: [{ selector: 'gn-ui-date-range-picker', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
26861
+ MatNativeDateModule,
26862
+ MatDatepickerModule,
26863
+ ButtonComponent,
26864
+ NgIconComponent,
26865
+ ], providers: [
26866
+ provideIcons({ iconoirCalendar }),
26867
+ provideNgIconsConfig({
26868
+ size: '1.5rem',
26869
+ }),
26870
+ ], template: "<span class=\"w-full inline-block relative\">\n <mat-date-range-input [rangePicker]=\"picker\" class=\"gn-ui-text-input\">\n <input\n matStartDate\n placeholder=\"Start date\"\n [value]=\"startDate\"\n (dateInput)=\"startDateChange.emit($event.value)\"\n />\n <input\n matEndDate\n placeholder=\"End date\"\n [value]=\"endDate\"\n (dateInput)=\"endDateChange.emit($event.value)\"\n />\n </mat-date-range-input>\n\n <gn-ui-button\n type=\"light\"\n class=\"absolute inset-y-[var(--side-padding)] right-[var(--side-padding)] z-10\"\n (buttonClick)=\"picker.open()\"\n extraClass=\"h-full\"\n data-cy=\"date-picker-button\"\n >\n <ng-icon name=\"iconoirCalendar\" class=\"text-primary\"></ng-icon>\n </gn-ui-button>\n</span>\n<mat-date-range-picker #picker></mat-date-range-picker>\n", styles: [":host{--gn-ui-button-rounded: 8px;--gn-ui-button-width: 32px;--gn-ui-button-padding: 0;--side-padding: calc(var(--gn-ui-text-input-padding, .6em) - 6px);--text-padding: calc(var(--side-padding) + 40px)}\n"] }]
26871
+ }], propDecorators: { startDate: [{
26872
+ type: Input
26873
+ }], endDate: [{
26874
+ type: Input
26875
+ }], startDateChange: [{
26876
+ type: Output
26877
+ }], endDateChange: [{
26878
+ type: Output
26879
+ }] } });
26880
+
26635
26881
  const placeholder = 'dropFile';
26636
26882
  marker('dropFile');
26637
26883
  class DragAndDropFileInputComponent {
@@ -27081,221 +27327,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27081
27327
  type: Output
27082
27328
  }] } });
27083
27329
 
27084
- class NavigationButtonComponent {
27085
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27086
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NavigationButtonComponent, isStandalone: true, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <ng-icon [name]=\"icon\" class=\"align-middle w-[18px]\"></ng-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"], dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27087
- }
27088
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NavigationButtonComponent, decorators: [{
27089
- type: Component,
27090
- args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgIcon], standalone: true, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <ng-icon [name]=\"icon\" class=\"align-middle w-[18px]\"></ng-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"] }]
27091
- }], propDecorators: { label: [{
27092
- type: Input
27093
- }], icon: [{
27094
- type: Input
27095
- }] } });
27096
-
27097
- class SearchInputComponent {
27098
- constructor() {
27099
- this.value = '';
27100
- this.placeholder = '';
27101
- this.rawChange = new Subject();
27102
- this.valueChange = this.rawChange.pipe(distinctUntilChanged$1());
27103
- }
27104
- handleChange($event) {
27105
- const value = $event.target.value;
27106
- this.rawChange.next(value);
27107
- }
27108
- clear() {
27109
- this.value = null;
27110
- this.rawChange.next(null);
27111
- }
27112
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27113
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SearchInputComponent, isStandalone: true, selector: "gn-ui-search-input", inputs: { value: "value", placeholder: "placeholder" }, outputs: { valueChange: "valueChange" }, providers: [
27114
- provideIcons({ matSearch, matClose }),
27115
- provideNgIconsConfig({
27116
- size: '1.5em',
27117
- }),
27118
- ], ngImport: i0, template: "<div class=\"h-full relative text-gray-300\">\n <input\n #input\n class=\"peer h-full appearance-none border border-gray-300 rounded w-full p-2 pl-10 text-gray-700 leading-tight hover:border-primary focus:text-primary focus:outline-none focus:border-primary focus:border-2\"\n type=\"text\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n />\n <div\n class=\"absolute inset-y-0 left-0 pl-2.5 flex items-center peer-hover:text-primary peer-focus:text-primary\"\n >\n <ng-icon name=\"matSearch\"></ng-icon>\n </div>\n <button\n *ngIf=\"rawChange | async\"\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary absolute transition-all duration-100 inset-y-0 right-0 pr-2.5\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle\"></ng-icon>\n </button>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27119
- }
27120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchInputComponent, decorators: [{
27121
- type: Component,
27122
- args: [{ selector: 'gn-ui-search-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, NgIconComponent], providers: [
27123
- provideIcons({ matSearch, matClose }),
27124
- provideNgIconsConfig({
27125
- size: '1.5em',
27126
- }),
27127
- ], template: "<div class=\"h-full relative text-gray-300\">\n <input\n #input\n class=\"peer h-full appearance-none border border-gray-300 rounded w-full p-2 pl-10 text-gray-700 leading-tight hover:border-primary focus:text-primary focus:outline-none focus:border-primary focus:border-2\"\n type=\"text\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n />\n <div\n class=\"absolute inset-y-0 left-0 pl-2.5 flex items-center peer-hover:text-primary peer-focus:text-primary\"\n >\n <ng-icon name=\"matSearch\"></ng-icon>\n </div>\n <button\n *ngIf=\"rawChange | async\"\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary absolute transition-all duration-100 inset-y-0 right-0 pr-2.5\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle\"></ng-icon>\n </button>\n</div>\n" }]
27128
- }], propDecorators: { value: [{
27129
- type: Input
27130
- }], placeholder: [{
27131
- type: Input
27132
- }], valueChange: [{
27133
- type: Output
27134
- }] } });
27135
-
27136
- class StarToggleComponent {
27137
- constructor() {
27138
- this.disabled = false;
27139
- this.newValue = new EventEmitter();
27140
- }
27141
- toggle(event) {
27142
- if (!this.disabled) {
27143
- this.toggled = !this.toggled;
27144
- if (this.toggled) {
27145
- const anim = this.overlay.nativeElement.getAnimations()[0];
27146
- anim.cancel();
27147
- anim.play();
27148
- }
27149
- this.newValue.emit(this.toggled);
27150
- }
27151
- propagateToDocumentOnly(event);
27152
- event.preventDefault();
27153
- }
27154
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StarToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27155
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StarToggleComponent, isStandalone: true, selector: "gn-ui-star-toggle", inputs: { toggled: "toggled", disabled: "disabled" }, outputs: { newValue: "newValue" }, viewQueries: [{ propertyName: "overlay", first: true, predicate: ["starOverlay"], descendants: true }], ngImport: i0, template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled,\n }\"\n >\n <ng-icon [name]=\"toggled ? 'matStar' : 'matStarBorder'\"></ng-icon>\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], viewProviders: [provideIcons({ matStar, matStarBorder })], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27156
- }
27157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StarToggleComponent, decorators: [{
27158
- type: Component,
27159
- args: [{ selector: 'gn-ui-star-toggle', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, NgIcon], viewProviders: [provideIcons({ matStar, matStarBorder })], template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled,\n }\"\n >\n <ng-icon [name]=\"toggled ? 'matStar' : 'matStarBorder'\"></ng-icon>\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"] }]
27160
- }], propDecorators: { toggled: [{
27161
- type: Input
27162
- }], disabled: [{
27163
- type: Input
27164
- }], newValue: [{
27165
- type: Output
27166
- }], overlay: [{
27167
- type: ViewChild,
27168
- args: ['starOverlay']
27169
- }] } });
27170
-
27171
- class TextAreaComponent {
27172
- constructor() {
27173
- this.value = '';
27174
- this.disabled = false;
27175
- this.extraClass = '';
27176
- this.placeholder = '';
27177
- this.required = false;
27178
- this.rawChange = new Subject();
27179
- this.valueChange = this.rawChange.pipe(distinctUntilChanged());
27180
- }
27181
- ngAfterViewInit() {
27182
- this.checkRequired(this.input.nativeElement.value);
27183
- }
27184
- checkRequired(value) {
27185
- this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
27186
- }
27187
- handleChange($event) {
27188
- const value = $event.target.value;
27189
- this.checkRequired(value);
27190
- this.rawChange.next(value);
27191
- }
27192
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27193
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TextAreaComponent, isStandalone: true, selector: "gn-ui-text-area", inputs: { value: "value", disabled: "disabled", extraClass: "extraClass", placeholder: "placeholder", required: "required" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n class=\"gn-ui-text-input leading-tight\"\n [ngClass]=\"extraClass\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [value]=\"value ?? ''\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
27194
- }
27195
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextAreaComponent, decorators: [{
27196
- type: Component,
27197
- args: [{ selector: 'gn-ui-text-area', standalone: true, imports: [CommonModule], template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n class=\"gn-ui-text-input leading-tight\"\n [ngClass]=\"extraClass\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [value]=\"value ?? ''\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
27198
- }], propDecorators: { value: [{
27199
- type: Input
27200
- }], disabled: [{
27201
- type: Input
27202
- }], extraClass: [{
27203
- type: Input
27204
- }], placeholder: [{
27205
- type: Input
27206
- }], required: [{
27207
- type: Input
27208
- }], valueChange: [{
27209
- type: Output
27210
- }], input: [{
27211
- type: ViewChild,
27212
- args: ['input']
27213
- }] } });
27214
-
27215
- class TextInputComponent {
27216
- constructor() {
27217
- this.value = '';
27218
- this.extraClass = '';
27219
- this.required = false;
27220
- this.rawChange = new Subject();
27221
- this.valueChange = this.rawChange.pipe(distinctUntilChanged());
27222
- }
27223
- ngAfterViewInit() {
27224
- this.checkRequired(this.input.nativeElement.value);
27225
- }
27226
- checkRequired(value) {
27227
- this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
27228
- }
27229
- handleChange($event) {
27230
- const value = $event.target.value;
27231
- this.checkRequired(value);
27232
- this.rawChange.next(value);
27233
- }
27234
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27235
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TextInputComponent, isStandalone: true, selector: "gn-ui-text-input", inputs: { value: "value", extraClass: "extraClass", placeholder: "placeholder", required: "required", disabled: "disabled" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input\n #input\n class=\"gn-ui-text-input\"\n [ngClass]=\"extraClass\"\n type=\"text\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"placeholder\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n/>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
27236
- }
27237
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextInputComponent, decorators: [{
27238
- type: Component,
27239
- args: [{ selector: 'gn-ui-text-input', standalone: true, imports: [CommonModule], template: "<input\n #input\n class=\"gn-ui-text-input\"\n [ngClass]=\"extraClass\"\n type=\"text\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"placeholder\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n/>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
27240
- }], propDecorators: { value: [{
27241
- type: Input
27242
- }], extraClass: [{
27243
- type: Input
27244
- }], placeholder: [{
27245
- type: Input
27246
- }], required: [{
27247
- type: Input
27248
- }], disabled: [{
27249
- type: Input
27250
- }], valueChange: [{
27251
- type: Output
27252
- }], input: [{
27253
- type: ViewChild,
27254
- args: ['input']
27255
- }] } });
27256
-
27257
- class ViewportIntersectorComponent {
27258
- constructor(vcRef) {
27259
- this.vcRef = vcRef;
27260
- this.isInViewport = new EventEmitter();
27261
- this.entersViewport = this.isInViewport.pipe(filter((inViewport) => inViewport), map$1(() => undefined));
27262
- this.exitsViewport = this.isInViewport.pipe(filter((inViewport) => !inViewport), map$1(() => undefined));
27263
- }
27264
- ngOnInit() {
27265
- const elToObserve = this.vcRef.element.nativeElement;
27266
- this.observeInputElement(elToObserve);
27267
- }
27268
- ngOnDestroy() {
27269
- const elToObserve = this.vcRef.element.nativeElement;
27270
- this.unObserveInputElement(elToObserve);
27271
- }
27272
- observeInputElement(elToObserve) {
27273
- if (!this.observer) {
27274
- this.observer = new IntersectionObserver((entries) => {
27275
- entries.forEach((entry) => {
27276
- this.isInViewport.emit(entry.isIntersecting);
27277
- });
27278
- }, { root: null, threshold: 0 });
27279
- }
27280
- this.observer.observe(elToObserve);
27281
- }
27282
- unObserveInputElement(elToObserve) {
27283
- this.observer?.unobserve(elToObserve);
27284
- }
27285
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewportIntersectorComponent, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
27286
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ViewportIntersectorComponent, selector: "gn-ui-viewport-intersector", outputs: { isInViewport: "isInViewport", entersViewport: "entersViewport", exitsViewport: "exitsViewport" }, ngImport: i0, template: "<div class=\"w-full h-full\"></div>\n", styles: [""] }); }
27287
- }
27288
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewportIntersectorComponent, decorators: [{
27289
- type: Component,
27290
- args: [{ selector: 'gn-ui-viewport-intersector', template: "<div class=\"w-full h-full\"></div>\n" }]
27291
- }], ctorParameters: () => [{ type: i0.ViewContainerRef }], propDecorators: { isInViewport: [{
27292
- type: Output
27293
- }], entersViewport: [{
27294
- type: Output
27295
- }], exitsViewport: [{
27296
- type: Output
27297
- }] } });
27298
-
27299
27330
  class FilesDropDirective {
27300
27331
  constructor() {
27301
27332
  this.dragFilesOver = new EventEmitter();
@@ -27369,7 +27400,7 @@ class UrlInputComponent {
27369
27400
  this.cd = cd;
27370
27401
  this.extraClass = '';
27371
27402
  this.placeholder = 'https://';
27372
- this.showUploadButton = true;
27403
+ this.showValidateButton = true;
27373
27404
  /**
27374
27405
  * This will emit null if the field is emptied
27375
27406
  */
@@ -27403,12 +27434,12 @@ class UrlInputComponent {
27403
27434
  }
27404
27435
  }
27405
27436
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UrlInputComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
27406
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UrlInputComponent, isStandalone: true, selector: "gn-ui-url-input", inputs: { value: "value", extraClass: "extraClass", placeholder: "placeholder", disabled: "disabled", showUploadButton: "showUploadButton" }, outputs: { valueChange: "valueChange", uploadClick: "uploadClick" }, providers: [
27437
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UrlInputComponent, isStandalone: true, selector: "gn-ui-url-input", inputs: { value: "value", extraClass: "extraClass", placeholder: "placeholder", disabled: "disabled", showValidateButton: "showValidateButton" }, outputs: { valueChange: "valueChange", uploadClick: "uploadClick" }, providers: [
27407
27438
  provideIcons({ iconoirLink, iconoirArrowUp }),
27408
27439
  provideNgIconsConfig({
27409
27440
  size: '1.5em',
27410
27441
  }),
27411
- ], ngImport: i0, template: "<span class=\"w-full inline-block relative\">\n <input\n #input\n class=\"gn-ui-text-input px-[var(--text-padding)]\"\n [ngClass]=\"extraClass\"\n type=\"url\"\n [value]=\"inputValue\"\n (input)=\"handleInput($event)\"\n (keydown.enter)=\"handleUpload(input)\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"placeholder\"\n [disabled]=\"disabled\"\n />\n <div\n class=\"absolute inset-y-[var(--side-padding)] left-[var(--2x-side-padding)] grid justify-center items-center pointer-events-none\"\n [ngClass]=\"{\n 'text-primary': !disabled,\n 'text-primary-lightest': disabled,\n }\"\n >\n <ng-icon name=\"iconoirLink\"></ng-icon>\n </div>\n <gn-ui-button\n *ngIf=\"showUploadButton\"\n extraClass=\"absolute inset-y-[var(--side-padding)] right-[var(--side-padding)]\"\n type=\"primary\"\n [disabled]=\"disabled || input.value === '' || !isValidUrl(input.value)\"\n (buttonClick)=\"handleUpload(input)\"\n >\n <ng-icon name=\"iconoirArrowUp\"> </ng-icon>\n </gn-ui-button>\n</span>\n", styles: [":host{--gn-ui-button-rounded: 8px;--gn-ui-button-width: 32px;--gn-ui-button-padding: 0;--side-padding: calc(var(--gn-ui-text-input-padding, .6rem) - 6px);--2x-side-padding: calc(var(--side-padding) * 2);--text-padding: calc(var(--side-padding) + 40px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27442
+ ], ngImport: i0, template: "<span class=\"w-full inline-block relative\">\n <input\n #input\n class=\"gn-ui-text-input gn-ui-url-input px-[var(--text-padding)]\"\n [ngClass]=\"extraClass\"\n type=\"url\"\n [value]=\"inputValue\"\n (input)=\"handleInput($event)\"\n (keydown.enter)=\"handleUpload(input)\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"placeholder\"\n [disabled]=\"disabled\"\n />\n <div\n class=\"absolute inset-y-[var(--side-padding)] left-[var(--2x-side-padding)] grid justify-center items-center pointer-events-none\"\n [ngClass]=\"{\n 'text-primary': !disabled,\n 'text-primary-lightest': disabled,\n }\"\n >\n <ng-icon name=\"iconoirLink\"></ng-icon>\n </div>\n <gn-ui-button\n *ngIf=\"showValidateButton\"\n extraClass=\"absolute inset-y-[var(--side-padding)] right-[var(--side-padding)]\"\n type=\"primary\"\n [disabled]=\"disabled || input.value === '' || !isValidUrl(input.value)\"\n (buttonClick)=\"handleUpload(input)\"\n >\n <ng-content>\n <ng-icon name=\"iconoirArrowUp\"></ng-icon>\n </ng-content>\n </gn-ui-button>\n</span>\n", styles: [":host{--gn-ui-button-rounded: 8px;--gn-ui-button-width: 32px;--gn-ui-button-padding: 0;--side-padding: calc(var(--gn-ui-text-input-padding, .6rem) - 6px);--2x-side-padding: calc(var(--side-padding) * 2);--text-padding: calc(var(--side-padding) + 40px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27412
27443
  }
27413
27444
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UrlInputComponent, decorators: [{
27414
27445
  type: Component,
@@ -27417,7 +27448,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27417
27448
  provideNgIconsConfig({
27418
27449
  size: '1.5em',
27419
27450
  }),
27420
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"w-full inline-block relative\">\n <input\n #input\n class=\"gn-ui-text-input px-[var(--text-padding)]\"\n [ngClass]=\"extraClass\"\n type=\"url\"\n [value]=\"inputValue\"\n (input)=\"handleInput($event)\"\n (keydown.enter)=\"handleUpload(input)\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"placeholder\"\n [disabled]=\"disabled\"\n />\n <div\n class=\"absolute inset-y-[var(--side-padding)] left-[var(--2x-side-padding)] grid justify-center items-center pointer-events-none\"\n [ngClass]=\"{\n 'text-primary': !disabled,\n 'text-primary-lightest': disabled,\n }\"\n >\n <ng-icon name=\"iconoirLink\"></ng-icon>\n </div>\n <gn-ui-button\n *ngIf=\"showUploadButton\"\n extraClass=\"absolute inset-y-[var(--side-padding)] right-[var(--side-padding)]\"\n type=\"primary\"\n [disabled]=\"disabled || input.value === '' || !isValidUrl(input.value)\"\n (buttonClick)=\"handleUpload(input)\"\n >\n <ng-icon name=\"iconoirArrowUp\"> </ng-icon>\n </gn-ui-button>\n</span>\n", styles: [":host{--gn-ui-button-rounded: 8px;--gn-ui-button-width: 32px;--gn-ui-button-padding: 0;--side-padding: calc(var(--gn-ui-text-input-padding, .6rem) - 6px);--2x-side-padding: calc(var(--side-padding) * 2);--text-padding: calc(var(--side-padding) + 40px)}\n"] }]
27451
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"w-full inline-block relative\">\n <input\n #input\n class=\"gn-ui-text-input gn-ui-url-input px-[var(--text-padding)]\"\n [ngClass]=\"extraClass\"\n type=\"url\"\n [value]=\"inputValue\"\n (input)=\"handleInput($event)\"\n (keydown.enter)=\"handleUpload(input)\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"placeholder\"\n [disabled]=\"disabled\"\n />\n <div\n class=\"absolute inset-y-[var(--side-padding)] left-[var(--2x-side-padding)] grid justify-center items-center pointer-events-none\"\n [ngClass]=\"{\n 'text-primary': !disabled,\n 'text-primary-lightest': disabled,\n }\"\n >\n <ng-icon name=\"iconoirLink\"></ng-icon>\n </div>\n <gn-ui-button\n *ngIf=\"showValidateButton\"\n extraClass=\"absolute inset-y-[var(--side-padding)] right-[var(--side-padding)]\"\n type=\"primary\"\n [disabled]=\"disabled || input.value === '' || !isValidUrl(input.value)\"\n (buttonClick)=\"handleUpload(input)\"\n >\n <ng-content>\n <ng-icon name=\"iconoirArrowUp\"></ng-icon>\n </ng-content>\n </gn-ui-button>\n</span>\n", styles: [":host{--gn-ui-button-rounded: 8px;--gn-ui-button-width: 32px;--gn-ui-button-padding: 0;--side-padding: calc(var(--gn-ui-text-input-padding, .6rem) - 6px);--2x-side-padding: calc(var(--side-padding) * 2);--text-padding: calc(var(--side-padding) + 40px)}\n"] }]
27421
27452
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { value: [{
27422
27453
  type: Input
27423
27454
  }], extraClass: [{
@@ -27426,7 +27457,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27426
27457
  type: Input
27427
27458
  }], disabled: [{
27428
27459
  type: Input
27429
- }], showUploadButton: [{
27460
+ }], showValidateButton: [{
27430
27461
  type: Input
27431
27462
  }], valueChange: [{
27432
27463
  type: Output
@@ -27434,100 +27465,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27434
27465
  type: Output
27435
27466
  }] } });
27436
27467
 
27437
- class ImageInputComponent {
27468
+ class FileInputComponent {
27438
27469
  get isUploadInProgress() {
27439
27470
  return this.uploadProgress !== undefined;
27440
27471
  }
27441
- constructor(http, cd) {
27442
- this.http = http;
27472
+ constructor(cd) {
27443
27473
  this.cd = cd;
27444
- this.disabled = false;
27445
27474
  this.fileChange = new EventEmitter();
27446
27475
  this.urlChange = new EventEmitter();
27447
27476
  this.uploadCancel = new EventEmitter();
27448
- this.delete = new EventEmitter();
27449
- this.altTextChange = new EventEmitter();
27477
+ this.disabled = false;
27450
27478
  this.dragFilesOver = false;
27451
- this.showUrlInput = false;
27452
- this.downloadError = false;
27453
- this.showAltTextInput = false;
27454
27479
  }
27455
27480
  getPrimaryText() {
27456
- if (this.uploadError) {
27457
- return marker('input.image.uploadErrorLabel');
27458
- }
27459
27481
  if (this.uploadProgress) {
27460
- return marker('input.image.uploadProgressLabel');
27482
+ return marker('input.file.uploadProgressLabel');
27461
27483
  }
27462
- return marker('input.image.selectFileLabel');
27484
+ return marker('input.file.selectFileLabel');
27463
27485
  }
27464
27486
  getSecondaryText() {
27465
- if (this.uploadError) {
27466
- return marker('input.image.uploadErrorRetry');
27467
- }
27468
27487
  if (this.uploadProgress) {
27469
- return marker('input.image.uploadProgressCancel');
27488
+ return marker('input.file.uploadProgressCancel');
27470
27489
  }
27471
- return marker('input.image.dropFileLabel');
27490
+ return marker('input.file.dropFileLabel');
27472
27491
  }
27473
27492
  handleDragFilesOver(dragFilesOver) {
27474
- if (!this.showUrlInput) {
27475
- this.dragFilesOver = dragFilesOver;
27476
- this.cd.markForCheck();
27477
- }
27493
+ this.dragFilesOver = dragFilesOver;
27494
+ this.cd.markForCheck();
27478
27495
  }
27479
27496
  handleDropFiles(files) {
27480
- if (!this.showUrlInput) {
27481
- const validFiles = this.filterTypeImage(files);
27482
- if (validFiles.length > 0) {
27483
- this.resizeAndEmit(validFiles[0]);
27484
- }
27497
+ if (files.length > 0) {
27498
+ this.fileChange.emit(files[0]);
27485
27499
  }
27486
27500
  }
27487
27501
  handleFileInput(event) {
27488
- const inputFiles = Array.from(event.target.files);
27489
- const validFiles = this.filterTypeImage(inputFiles);
27490
- if (validFiles.length > 0) {
27491
- this.resizeAndEmit(validFiles[0]);
27492
- }
27493
- }
27494
- displayUrlInput() {
27495
- this.uploadCancel.emit();
27496
- this.showUrlInput = true;
27502
+ this.handleDropFiles(Array.from(event.target.files));
27497
27503
  }
27498
- async downloadUrl(url) {
27499
- this.downloadError = false;
27500
- const name = url.split('/').pop();
27501
- try {
27502
- const response = await firstValueFrom(this.http.head(url, { observe: 'response' }));
27503
- if (response.headers.get('content-type')?.startsWith('image/') &&
27504
- parseInt(response.headers.get('content-length')) <
27505
- megabytesToBytes(this.maxSizeMB)) {
27506
- this.http.get(url, { responseType: 'blob' }).subscribe({
27507
- next: (blob) => {
27508
- this.cd.markForCheck();
27509
- const file = new File([blob], name);
27510
- this.fileChange.emit(file);
27511
- },
27512
- error: () => {
27513
- this.downloadError = true;
27514
- this.cd.markForCheck();
27515
- this.urlChange.emit(url);
27516
- },
27517
- });
27518
- }
27519
- }
27520
- catch {
27521
- this.downloadError = true;
27522
- this.cd.markForCheck();
27504
+ handleUrlChange(url) {
27505
+ if (!url)
27523
27506
  return;
27524
- }
27507
+ this.urlChange.emit(url);
27525
27508
  }
27526
27509
  handleSecondaryTextClick(event) {
27527
- if (this.uploadError) {
27528
- this.handleRetry();
27529
- }
27530
- else if (this.uploadProgress) {
27510
+ if (this.uploadProgress) {
27531
27511
  this.handleCancel();
27532
27512
  event.preventDefault();
27533
27513
  }
@@ -27535,97 +27515,291 @@ class ImageInputComponent {
27535
27515
  handleCancel() {
27536
27516
  this.uploadCancel.emit();
27537
27517
  }
27538
- handleRetry() {
27539
- switch (this.lastUploadType) {
27540
- case 'file':
27541
- this.fileChange.emit(this.lastUploadContent);
27542
- break;
27543
- case 'url':
27544
- this.urlChange.emit(this.lastUploadContent);
27545
- break;
27546
- }
27547
- }
27548
- handleDelete() {
27549
- this.delete.emit();
27550
- }
27551
- toggleAltTextInput() {
27552
- this.showAltTextInput = !this.showAltTextInput;
27553
- }
27554
- handleAltTextChange(altText) {
27555
- this.altTextChange.emit(altText);
27556
- }
27557
- filterTypeImage(files) {
27558
- return files.filter((file) => {
27559
- return file.type.startsWith('image/');
27560
- });
27561
- }
27562
- resizeAndEmit(imageToResize) {
27563
- const maxSizeBytes = megabytesToBytes(this.maxSizeMB);
27564
- downgradeImage(imageToResize, maxSizeBytes).then((resizedImage) => {
27565
- const fileToEmit = new File([resizedImage], imageToResize.name);
27566
- this.fileChange.emit(fileToEmit);
27567
- });
27568
- }
27569
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageInputComponent, deps: [{ token: i1.HttpClient }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
27570
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ImageInputComponent, isStandalone: true, selector: "gn-ui-image-input", inputs: { maxSizeMB: "maxSizeMB", previewUrl: "previewUrl", altText: "altText", uploadProgress: "uploadProgress", uploadError: "uploadError", disabled: "disabled" }, outputs: { fileChange: "fileChange", urlChange: "urlChange", uploadCancel: "uploadCancel", delete: "delete", altTextChange: "altTextChange" }, providers: [
27518
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileInputComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
27519
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FileInputComponent, isStandalone: true, selector: "gn-ui-file-input", inputs: { maxSizeMB: "maxSizeMB", uploadProgress: "uploadProgress", disabled: "disabled" }, outputs: { fileChange: "fileChange", urlChange: "urlChange", uploadCancel: "uploadCancel" }, providers: [
27571
27520
  provideIcons({
27572
- iconoirMediaImage,
27521
+ iconoirCloudUpload,
27573
27522
  iconoirFramePlusIn,
27574
- iconoirMediaImageXmark,
27575
- iconoirBin,
27576
- iconoirPlus,
27577
- iconoirLink,
27578
27523
  }),
27579
27524
  provideNgIconsConfig({
27580
- size: '1.5rem',
27525
+ size: '1.5em',
27581
27526
  }),
27582
- ], ngImport: i0, template: "<ng-container *ngIf=\"previewUrl; then withImage; else withoutImage\">\n</ng-container>\n\n<ng-template #withImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <div class=\"flex-1 group relative\">\n <img\n class=\"w-full object-cover border-2 border-gray-300 rounded-lg h-[172px]\"\n [alt]=\"altText\"\n loading=\"lazy\"\n [src]=\"previewUrl\"\n />\n <gn-ui-button\n type=\"outline\"\n style=\"--gn-ui-button-height: 40px; --gn-ui-button-width: 40px\"\n extraClass=\"absolute right-2 bottom-2 invisible group-hover:visible bg-background\"\n (buttonClick)=\"handleDelete()\"\n [disabled]=\"disabled\"\n >\n <ng-icon name=\"iconoirBin\"></ng-icon>\n </gn-ui-button>\n </div>\n <gn-ui-text-input\n *ngIf=\"showAltTextInput\"\n [placeholder]=\"'input.image.altTextPlaceholder' | translate\"\n [value]=\"altText ?? ''\"\n (valueChange)=\"handleAltTextChange($event)\"\n extraClass=\"gn-ui-editor-textarea\"\n [disabled]=\"disabled\"\n ></gn-ui-text-input>\n <div class=\"flex flex-row gap-2 mt-2\">\n <gn-ui-button type=\"gray\" (buttonClick)=\"handleDelete()\">\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirBin\"></ng-icon>\n {{ 'input.image.delete' | translate }}\n </gn-ui-button>\n <gn-ui-button\n *ngIf=\"!showAltTextInput\"\n type=\"gray\"\n (buttonClick)=\"toggleAltTextInput()\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"me-1 text-primary\"></ng-icon>\n {{ 'input.image.displayAltTextInput' | translate }}\n </gn-ui-button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #withoutImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <label\n gnUiFilesDrop\n class=\"flex-1 border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center gap-4 transition-colors duration-100\"\n [ngClass]=\"{\n 'border-primary-lighter bg-primary-white': dragFilesOver,\n 'border-gray-300': !dragFilesOver,\n 'cursor-pointer hover:border-gray-500':\n !isUploadInProgress && !uploadError && !showUrlInput && !disabled,\n 'cursor-not-allowed': disabled,\n }\"\n [attr.tabindex]=\"\n isUploadInProgress || uploadError || showUrlInput || disabled ? null : 0\n \"\n (keydown.enter)=\"fileInput.click()\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n >\n <div\n class=\"w-14 h-14 rounded-md bg-gray-50 grid\"\n *ngIf=\"!isUploadInProgress && !uploadError\"\n >\n <ng-icon\n *ngIf=\"!dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirMediaImage\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirFramePlusIn\"\n ></ng-icon>\n </div>\n\n <div\n *ngIf=\"isUploadInProgress && !uploadError\"\n class=\"w-14 h-14 grid items-center justify-center relative\"\n >\n <div class=\"text-gray-100 absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"100\"\n ></mat-progress-spinner>\n </div>\n <div class=\"text-primary absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n </div>\n <span class=\"text-sm text-main font-bold\">{{ uploadProgress }}%</span>\n </div>\n\n <div class=\"w-14 h-14 rounded-md bg-gray-50 grid\" *ngIf=\"uploadError\">\n <ng-icon\n name=\"iconoirMediaImageXmark\"\n class=\"place-self-center text-rose-500\"\n ></ng-icon>\n </div>\n\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">{{ getPrimaryText() | translate }}</p>\n <p\n class=\"text-sm\"\n [class]=\"\n isUploadInProgress || uploadError\n ? 'font-bold text-blue-500 cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick($event)\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"\n showUrlInput || isUploadInProgress || uploadError || disabled\n \"\n />\n </label>\n\n <div *ngIf=\"!showUrlInput\" class=\"flex-none mt-2\">\n <gn-ui-button\n (buttonClick)=\"displayUrlInput()\"\n type=\"gray\"\n [disabled]=\"disabled\"\n [extraClass]=\"disabled && 'cursor-not-allowed'\"\n >\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirLink\"></ng-icon>\n {{ 'input.image.displayUrlInput' | translate }}\n </gn-ui-button>\n </div>\n\n <gn-ui-url-input\n *ngIf=\"showUrlInput\"\n class=\"mt-3.5\"\n (uploadClick)=\"downloadUrl($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n >\n </gn-ui-url-input>\n </div>\n</ng-template>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "directive", type: FilesDropDirective, selector: "[gnUiFilesDrop]", outputs: ["dragFilesOver", "dropFiles"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showUploadButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27527
+ ], ngImport: i0, template: "<div class=\"w-full flex flex-col gap-[16px]\">\n <label\n gnUiFilesDrop\n class=\"flex-1 border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center gap-4 transition-colors duration-100\"\n [ngClass]=\"{\n 'border-primary-lighter bg-primary-white': dragFilesOver,\n 'border-gray-300': !dragFilesOver,\n 'cursor-pointer hover:border-gray-500': !isUploadInProgress && !disabled,\n 'cursor-not-allowed': disabled,\n }\"\n [attr.tabindex]=\"isUploadInProgress || disabled ? null : 0\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n (keydown.enter)=\"fileInput.click()\"\n >\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n />\n\n <div\n class=\"w-14 h-14 rounded-md bg-gray-50 grid\"\n *ngIf=\"!isUploadInProgress\"\n >\n <ng-icon\n *ngIf=\"!dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirCloudUpload\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirFramePlusIn\"\n ></ng-icon>\n </div>\n <div\n *ngIf=\"isUploadInProgress\"\n class=\"w-14 h-14 grid items-center justify-center relative\"\n >\n <div class=\"text-gray-100 absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"100\"\n ></mat-progress-spinner>\n </div>\n <div class=\"text-primary absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n </div>\n <span class=\"text-sm text-main font-bold\">{{ uploadProgress }}%</span>\n </div>\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">\n {{ getPrimaryText() | translate: { sizeMB: maxSizeMB.toFixed(0) } }}\n </p>\n <p\n class=\"text-sm\"\n [class]=\"\n isUploadInProgress\n ? 'font-bold text-primary cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick($event)\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <p class=\"w-full flex flex-row items-center justify-stretch gap-[16px]\">\n <span class=\"border-b border-gray-300 grow\"></span>\n <span class=\"text-sm font-medium text-gray-500 or-input-url\" translate>\n input.file.orInputUrl</span\n >\n <span class=\"border-b border-gray-300 grow\"></span>\n </p>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"isUploadInProgress || disabled\"\n (uploadClick)=\"handleUrlChange($event)\"\n ></gn-ui-url-input>\n </label>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: FilesDropDirective, selector: "[gnUiFilesDrop]", outputs: ["dragFilesOver", "dropFiles"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27583
27528
  }
27584
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageInputComponent, decorators: [{
27529
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileInputComponent, decorators: [{
27585
27530
  type: Component,
27586
- args: [{ selector: 'gn-ui-image-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
27531
+ args: [{ selector: 'gn-ui-file-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
27587
27532
  CommonModule,
27588
27533
  ButtonComponent,
27589
27534
  FilesDropDirective,
27590
27535
  MatProgressSpinnerModule,
27591
27536
  TranslateModule,
27592
27537
  UrlInputComponent,
27593
- TextInputComponent,
27594
27538
  NgIconComponent,
27595
27539
  ], providers: [
27596
27540
  provideIcons({
27597
- iconoirMediaImage,
27541
+ iconoirCloudUpload,
27598
27542
  iconoirFramePlusIn,
27599
- iconoirMediaImageXmark,
27600
- iconoirBin,
27601
- iconoirPlus,
27602
- iconoirLink,
27603
27543
  }),
27604
27544
  provideNgIconsConfig({
27605
- size: '1.5rem',
27545
+ size: '1.5em',
27606
27546
  }),
27607
- ], template: "<ng-container *ngIf=\"previewUrl; then withImage; else withoutImage\">\n</ng-container>\n\n<ng-template #withImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <div class=\"flex-1 group relative\">\n <img\n class=\"w-full object-cover border-2 border-gray-300 rounded-lg h-[172px]\"\n [alt]=\"altText\"\n loading=\"lazy\"\n [src]=\"previewUrl\"\n />\n <gn-ui-button\n type=\"outline\"\n style=\"--gn-ui-button-height: 40px; --gn-ui-button-width: 40px\"\n extraClass=\"absolute right-2 bottom-2 invisible group-hover:visible bg-background\"\n (buttonClick)=\"handleDelete()\"\n [disabled]=\"disabled\"\n >\n <ng-icon name=\"iconoirBin\"></ng-icon>\n </gn-ui-button>\n </div>\n <gn-ui-text-input\n *ngIf=\"showAltTextInput\"\n [placeholder]=\"'input.image.altTextPlaceholder' | translate\"\n [value]=\"altText ?? ''\"\n (valueChange)=\"handleAltTextChange($event)\"\n extraClass=\"gn-ui-editor-textarea\"\n [disabled]=\"disabled\"\n ></gn-ui-text-input>\n <div class=\"flex flex-row gap-2 mt-2\">\n <gn-ui-button type=\"gray\" (buttonClick)=\"handleDelete()\">\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirBin\"></ng-icon>\n {{ 'input.image.delete' | translate }}\n </gn-ui-button>\n <gn-ui-button\n *ngIf=\"!showAltTextInput\"\n type=\"gray\"\n (buttonClick)=\"toggleAltTextInput()\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"me-1 text-primary\"></ng-icon>\n {{ 'input.image.displayAltTextInput' | translate }}\n </gn-ui-button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #withoutImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <label\n gnUiFilesDrop\n class=\"flex-1 border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center gap-4 transition-colors duration-100\"\n [ngClass]=\"{\n 'border-primary-lighter bg-primary-white': dragFilesOver,\n 'border-gray-300': !dragFilesOver,\n 'cursor-pointer hover:border-gray-500':\n !isUploadInProgress && !uploadError && !showUrlInput && !disabled,\n 'cursor-not-allowed': disabled,\n }\"\n [attr.tabindex]=\"\n isUploadInProgress || uploadError || showUrlInput || disabled ? null : 0\n \"\n (keydown.enter)=\"fileInput.click()\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n >\n <div\n class=\"w-14 h-14 rounded-md bg-gray-50 grid\"\n *ngIf=\"!isUploadInProgress && !uploadError\"\n >\n <ng-icon\n *ngIf=\"!dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirMediaImage\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirFramePlusIn\"\n ></ng-icon>\n </div>\n\n <div\n *ngIf=\"isUploadInProgress && !uploadError\"\n class=\"w-14 h-14 grid items-center justify-center relative\"\n >\n <div class=\"text-gray-100 absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"100\"\n ></mat-progress-spinner>\n </div>\n <div class=\"text-primary absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n </div>\n <span class=\"text-sm text-main font-bold\">{{ uploadProgress }}%</span>\n </div>\n\n <div class=\"w-14 h-14 rounded-md bg-gray-50 grid\" *ngIf=\"uploadError\">\n <ng-icon\n name=\"iconoirMediaImageXmark\"\n class=\"place-self-center text-rose-500\"\n ></ng-icon>\n </div>\n\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">{{ getPrimaryText() | translate }}</p>\n <p\n class=\"text-sm\"\n [class]=\"\n isUploadInProgress || uploadError\n ? 'font-bold text-blue-500 cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick($event)\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"\n showUrlInput || isUploadInProgress || uploadError || disabled\n \"\n />\n </label>\n\n <div *ngIf=\"!showUrlInput\" class=\"flex-none mt-2\">\n <gn-ui-button\n (buttonClick)=\"displayUrlInput()\"\n type=\"gray\"\n [disabled]=\"disabled\"\n [extraClass]=\"disabled && 'cursor-not-allowed'\"\n >\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirLink\"></ng-icon>\n {{ 'input.image.displayUrlInput' | translate }}\n </gn-ui-button>\n </div>\n\n <gn-ui-url-input\n *ngIf=\"showUrlInput\"\n class=\"mt-3.5\"\n (uploadClick)=\"downloadUrl($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n >\n </gn-ui-url-input>\n </div>\n</ng-template>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
27608
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i0.ChangeDetectorRef }], propDecorators: { maxSizeMB: [{
27547
+ ], template: "<div class=\"w-full flex flex-col gap-[16px]\">\n <label\n gnUiFilesDrop\n class=\"flex-1 border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center gap-4 transition-colors duration-100\"\n [ngClass]=\"{\n 'border-primary-lighter bg-primary-white': dragFilesOver,\n 'border-gray-300': !dragFilesOver,\n 'cursor-pointer hover:border-gray-500': !isUploadInProgress && !disabled,\n 'cursor-not-allowed': disabled,\n }\"\n [attr.tabindex]=\"isUploadInProgress || disabled ? null : 0\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n (keydown.enter)=\"fileInput.click()\"\n >\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n />\n\n <div\n class=\"w-14 h-14 rounded-md bg-gray-50 grid\"\n *ngIf=\"!isUploadInProgress\"\n >\n <ng-icon\n *ngIf=\"!dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirCloudUpload\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirFramePlusIn\"\n ></ng-icon>\n </div>\n <div\n *ngIf=\"isUploadInProgress\"\n class=\"w-14 h-14 grid items-center justify-center relative\"\n >\n <div class=\"text-gray-100 absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"100\"\n ></mat-progress-spinner>\n </div>\n <div class=\"text-primary absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n </div>\n <span class=\"text-sm text-main font-bold\">{{ uploadProgress }}%</span>\n </div>\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">\n {{ getPrimaryText() | translate: { sizeMB: maxSizeMB.toFixed(0) } }}\n </p>\n <p\n class=\"text-sm\"\n [class]=\"\n isUploadInProgress\n ? 'font-bold text-primary cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick($event)\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <p class=\"w-full flex flex-row items-center justify-stretch gap-[16px]\">\n <span class=\"border-b border-gray-300 grow\"></span>\n <span class=\"text-sm font-medium text-gray-500 or-input-url\" translate>\n input.file.orInputUrl</span\n >\n <span class=\"border-b border-gray-300 grow\"></span>\n </p>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"isUploadInProgress || disabled\"\n (uploadClick)=\"handleUrlChange($event)\"\n ></gn-ui-url-input>\n </label>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
27548
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { maxSizeMB: [{
27609
27549
  type: Input
27610
- }], previewUrl: [{
27550
+ }], uploadProgress: [{
27611
27551
  type: Input
27612
- }], altText: [{
27552
+ }], fileChange: [{
27553
+ type: Output
27554
+ }], urlChange: [{
27555
+ type: Output
27556
+ }], uploadCancel: [{
27557
+ type: Output
27558
+ }], disabled: [{
27613
27559
  type: Input
27614
- }], uploadProgress: [{
27560
+ }] } });
27561
+
27562
+ class NavigationButtonComponent {
27563
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27564
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NavigationButtonComponent, isStandalone: true, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <ng-icon [name]=\"icon\" class=\"align-middle w-[18px]\"></ng-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"], dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27565
+ }
27566
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NavigationButtonComponent, decorators: [{
27567
+ type: Component,
27568
+ args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgIcon], standalone: true, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <ng-icon [name]=\"icon\" class=\"align-middle w-[18px]\"></ng-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"] }]
27569
+ }], propDecorators: { label: [{
27615
27570
  type: Input
27616
- }], uploadError: [{
27571
+ }], icon: [{
27572
+ type: Input
27573
+ }] } });
27574
+
27575
+ class SearchInputComponent {
27576
+ constructor() {
27577
+ this.value = '';
27578
+ this.placeholder = '';
27579
+ this.rawChange = new Subject();
27580
+ this.valueChange = this.rawChange.pipe(distinctUntilChanged$1());
27581
+ }
27582
+ handleChange($event) {
27583
+ const value = $event.target.value;
27584
+ this.rawChange.next(value);
27585
+ }
27586
+ clear() {
27587
+ this.value = null;
27588
+ this.rawChange.next(null);
27589
+ }
27590
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27591
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SearchInputComponent, isStandalone: true, selector: "gn-ui-search-input", inputs: { value: "value", placeholder: "placeholder" }, outputs: { valueChange: "valueChange" }, providers: [
27592
+ provideIcons({ matSearch, matClose }),
27593
+ provideNgIconsConfig({
27594
+ size: '1.5em',
27595
+ }),
27596
+ ], ngImport: i0, template: "<div class=\"h-full relative text-gray-300\">\n <input\n #input\n class=\"peer h-full appearance-none border border-gray-300 rounded w-full p-2 pl-10 text-gray-700 leading-tight hover:border-primary focus:text-primary focus:outline-none focus:border-primary focus:border-2\"\n type=\"text\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n />\n <div\n class=\"absolute inset-y-0 left-0 pl-2.5 flex items-center peer-hover:text-primary peer-focus:text-primary\"\n >\n <ng-icon name=\"matSearch\"></ng-icon>\n </div>\n <button\n *ngIf=\"rawChange | async\"\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary absolute transition-all duration-100 inset-y-0 right-0 pr-2.5\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle\"></ng-icon>\n </button>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27597
+ }
27598
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchInputComponent, decorators: [{
27599
+ type: Component,
27600
+ args: [{ selector: 'gn-ui-search-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, NgIconComponent], providers: [
27601
+ provideIcons({ matSearch, matClose }),
27602
+ provideNgIconsConfig({
27603
+ size: '1.5em',
27604
+ }),
27605
+ ], template: "<div class=\"h-full relative text-gray-300\">\n <input\n #input\n class=\"peer h-full appearance-none border border-gray-300 rounded w-full p-2 pl-10 text-gray-700 leading-tight hover:border-primary focus:text-primary focus:outline-none focus:border-primary focus:border-2\"\n type=\"text\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n />\n <div\n class=\"absolute inset-y-0 left-0 pl-2.5 flex items-center peer-hover:text-primary peer-focus:text-primary\"\n >\n <ng-icon name=\"matSearch\"></ng-icon>\n </div>\n <button\n *ngIf=\"rawChange | async\"\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary absolute transition-all duration-100 inset-y-0 right-0 pr-2.5\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle\"></ng-icon>\n </button>\n</div>\n" }]
27606
+ }], propDecorators: { value: [{
27607
+ type: Input
27608
+ }], placeholder: [{
27609
+ type: Input
27610
+ }], valueChange: [{
27611
+ type: Output
27612
+ }] } });
27613
+
27614
+ class StarToggleComponent {
27615
+ constructor() {
27616
+ this.disabled = false;
27617
+ this.newValue = new EventEmitter();
27618
+ }
27619
+ toggle(event) {
27620
+ if (!this.disabled) {
27621
+ this.toggled = !this.toggled;
27622
+ if (this.toggled) {
27623
+ const anim = this.overlay.nativeElement.getAnimations()[0];
27624
+ anim.cancel();
27625
+ anim.play();
27626
+ }
27627
+ this.newValue.emit(this.toggled);
27628
+ }
27629
+ propagateToDocumentOnly(event);
27630
+ event.preventDefault();
27631
+ }
27632
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StarToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27633
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StarToggleComponent, isStandalone: true, selector: "gn-ui-star-toggle", inputs: { toggled: "toggled", disabled: "disabled" }, outputs: { newValue: "newValue" }, viewQueries: [{ propertyName: "overlay", first: true, predicate: ["starOverlay"], descendants: true }], ngImport: i0, template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled,\n }\"\n >\n <ng-icon [name]=\"toggled ? 'matStar' : 'matStarBorder'\"></ng-icon>\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], viewProviders: [provideIcons({ matStar, matStarBorder })], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27634
+ }
27635
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StarToggleComponent, decorators: [{
27636
+ type: Component,
27637
+ args: [{ selector: 'gn-ui-star-toggle', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, NgIcon], viewProviders: [provideIcons({ matStar, matStarBorder })], template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled,\n }\"\n >\n <ng-icon [name]=\"toggled ? 'matStar' : 'matStarBorder'\"></ng-icon>\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"] }]
27638
+ }], propDecorators: { toggled: [{
27617
27639
  type: Input
27618
27640
  }], disabled: [{
27619
27641
  type: Input
27620
- }], fileChange: [{
27642
+ }], newValue: [{
27621
27643
  type: Output
27622
- }], urlChange: [{
27644
+ }], overlay: [{
27645
+ type: ViewChild,
27646
+ args: ['starOverlay']
27647
+ }] } });
27648
+
27649
+ class SwitchToggleComponent {
27650
+ constructor() {
27651
+ this.ariaLabel = '';
27652
+ this.extraClasses = '';
27653
+ this.disabled = false;
27654
+ this.selectedValue = new EventEmitter();
27655
+ }
27656
+ onChange(selectedOption) {
27657
+ this.options.find((option) => option.label === selectedOption.label).checked = true;
27658
+ this.selectedValue.emit(selectedOption);
27659
+ }
27660
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwitchToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27661
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SwitchToggleComponent, isStandalone: true, selector: "gn-ui-switch-toggle", inputs: { options: "options", ariaLabel: "ariaLabel", extraClasses: "extraClasses", disabled: "disabled" }, outputs: { selectedValue: "selectedValue" }, ngImport: i0, template: "<mat-button-toggle-group\n #group=\"matButtonToggleGroup\"\n multiple=\"false\"\n class=\"flex w-full\"\n [disabled]=\"disabled\"\n>\n <mat-button-toggle\n *ngFor=\"let option of options\"\n [aria-label]=\"option.label\"\n [checked]=\"option.checked\"\n (change)=\"onChange(option)\"\n [class]=\"extraClasses\"\n >{{ option.label | translate }}</mat-button-toggle\n >\n</mat-button-toggle-group>\n", styles: [":host{--mat-standard-button-toggle-height: 32px}.mat-button-toggle-group-appearance-standard{background-color:var(--color-gray-200);padding:4px;display:flex;gap:4px;border-radius:8px}.mat-button-toggle-appearance-standard{color:#000;background-color:var(--color-gray-200);border-radius:4px;border-left:none;font-family:var(--font-family-main)}.mat-button-toggle-appearance-standard.mat-button-toggle-checked{background-color:#000;color:var(--color-background)}button.mat-button-toggle-button.mat-focus-indicator.mat-button-toggle-label-content,.mat-button-toggle-label-content{line-height:32px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i1$a.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i1$a.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27662
+ }
27663
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwitchToggleComponent, decorators: [{
27664
+ type: Component,
27665
+ args: [{ selector: 'gn-ui-switch-toggle', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatButtonToggleModule, CommonModule, TranslateModule], template: "<mat-button-toggle-group\n #group=\"matButtonToggleGroup\"\n multiple=\"false\"\n class=\"flex w-full\"\n [disabled]=\"disabled\"\n>\n <mat-button-toggle\n *ngFor=\"let option of options\"\n [aria-label]=\"option.label\"\n [checked]=\"option.checked\"\n (change)=\"onChange(option)\"\n [class]=\"extraClasses\"\n >{{ option.label | translate }}</mat-button-toggle\n >\n</mat-button-toggle-group>\n", styles: [":host{--mat-standard-button-toggle-height: 32px}.mat-button-toggle-group-appearance-standard{background-color:var(--color-gray-200);padding:4px;display:flex;gap:4px;border-radius:8px}.mat-button-toggle-appearance-standard{color:#000;background-color:var(--color-gray-200);border-radius:4px;border-left:none;font-family:var(--font-family-main)}.mat-button-toggle-appearance-standard.mat-button-toggle-checked{background-color:#000;color:var(--color-background)}button.mat-button-toggle-button.mat-focus-indicator.mat-button-toggle-label-content,.mat-button-toggle-label-content{line-height:32px}\n"] }]
27666
+ }], propDecorators: { options: [{
27667
+ type: Input
27668
+ }], ariaLabel: [{
27669
+ type: Input
27670
+ }], extraClasses: [{
27671
+ type: Input
27672
+ }], disabled: [{
27673
+ type: Input
27674
+ }], selectedValue: [{
27623
27675
  type: Output
27624
- }], uploadCancel: [{
27676
+ }] } });
27677
+
27678
+ class TextAreaComponent {
27679
+ constructor() {
27680
+ this.value = '';
27681
+ this.disabled = false;
27682
+ this.extraClass = '';
27683
+ this.placeholder = '';
27684
+ this.required = false;
27685
+ this.rawChange = new Subject();
27686
+ this.valueChange = this.rawChange.pipe(distinctUntilChanged());
27687
+ }
27688
+ ngAfterViewInit() {
27689
+ this.checkRequired(this.input.nativeElement.value);
27690
+ }
27691
+ checkRequired(value) {
27692
+ this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
27693
+ }
27694
+ handleChange($event) {
27695
+ const value = $event.target.value;
27696
+ this.checkRequired(value);
27697
+ this.rawChange.next(value);
27698
+ }
27699
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27700
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TextAreaComponent, isStandalone: true, selector: "gn-ui-text-area", inputs: { value: "value", disabled: "disabled", extraClass: "extraClass", placeholder: "placeholder", required: "required" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n class=\"gn-ui-text-input leading-tight\"\n [ngClass]=\"extraClass\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [value]=\"value ?? ''\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
27701
+ }
27702
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextAreaComponent, decorators: [{
27703
+ type: Component,
27704
+ args: [{ selector: 'gn-ui-text-area', standalone: true, imports: [CommonModule], template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n class=\"gn-ui-text-input leading-tight\"\n [ngClass]=\"extraClass\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [value]=\"value ?? ''\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
27705
+ }], propDecorators: { value: [{
27706
+ type: Input
27707
+ }], disabled: [{
27708
+ type: Input
27709
+ }], extraClass: [{
27710
+ type: Input
27711
+ }], placeholder: [{
27712
+ type: Input
27713
+ }], required: [{
27714
+ type: Input
27715
+ }], valueChange: [{
27625
27716
  type: Output
27626
- }], delete: [{
27717
+ }], input: [{
27718
+ type: ViewChild,
27719
+ args: ['input']
27720
+ }] } });
27721
+
27722
+ class TextInputComponent {
27723
+ constructor() {
27724
+ this.value = '';
27725
+ this.extraClass = '';
27726
+ this.required = false;
27727
+ this.rawChange = new Subject();
27728
+ this.valueChange = this.rawChange.pipe(distinctUntilChanged());
27729
+ }
27730
+ ngAfterViewInit() {
27731
+ this.checkRequired(this.input.nativeElement.value);
27732
+ }
27733
+ checkRequired(value) {
27734
+ this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
27735
+ }
27736
+ handleChange($event) {
27737
+ const value = $event.target.value;
27738
+ this.checkRequired(value);
27739
+ this.rawChange.next(value);
27740
+ }
27741
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27742
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TextInputComponent, isStandalone: true, selector: "gn-ui-text-input", inputs: { value: "value", extraClass: "extraClass", placeholder: "placeholder", required: "required", disabled: "disabled" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input\n #input\n class=\"gn-ui-text-input\"\n [ngClass]=\"extraClass\"\n type=\"text\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"placeholder\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n/>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
27743
+ }
27744
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextInputComponent, decorators: [{
27745
+ type: Component,
27746
+ args: [{ selector: 'gn-ui-text-input', standalone: true, imports: [CommonModule], template: "<input\n #input\n class=\"gn-ui-text-input\"\n [ngClass]=\"extraClass\"\n type=\"text\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"placeholder\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n/>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
27747
+ }], propDecorators: { value: [{
27748
+ type: Input
27749
+ }], extraClass: [{
27750
+ type: Input
27751
+ }], placeholder: [{
27752
+ type: Input
27753
+ }], required: [{
27754
+ type: Input
27755
+ }], disabled: [{
27756
+ type: Input
27757
+ }], valueChange: [{
27627
27758
  type: Output
27628
- }], altTextChange: [{
27759
+ }], input: [{
27760
+ type: ViewChild,
27761
+ args: ['input']
27762
+ }] } });
27763
+
27764
+ class ViewportIntersectorComponent {
27765
+ constructor(vcRef) {
27766
+ this.vcRef = vcRef;
27767
+ this.isInViewport = new EventEmitter();
27768
+ this.entersViewport = this.isInViewport.pipe(filter((inViewport) => inViewport), map$1(() => undefined));
27769
+ this.exitsViewport = this.isInViewport.pipe(filter((inViewport) => !inViewport), map$1(() => undefined));
27770
+ }
27771
+ ngOnInit() {
27772
+ const elToObserve = this.vcRef.element.nativeElement;
27773
+ this.observeInputElement(elToObserve);
27774
+ }
27775
+ ngOnDestroy() {
27776
+ const elToObserve = this.vcRef.element.nativeElement;
27777
+ this.unObserveInputElement(elToObserve);
27778
+ }
27779
+ observeInputElement(elToObserve) {
27780
+ if (!this.observer) {
27781
+ this.observer = new IntersectionObserver((entries) => {
27782
+ entries.forEach((entry) => {
27783
+ this.isInViewport.emit(entry.isIntersecting);
27784
+ });
27785
+ }, { root: null, threshold: 0 });
27786
+ }
27787
+ this.observer.observe(elToObserve);
27788
+ }
27789
+ unObserveInputElement(elToObserve) {
27790
+ this.observer?.unobserve(elToObserve);
27791
+ }
27792
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewportIntersectorComponent, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
27793
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ViewportIntersectorComponent, selector: "gn-ui-viewport-intersector", outputs: { isInViewport: "isInViewport", entersViewport: "entersViewport", exitsViewport: "exitsViewport" }, ngImport: i0, template: "<div class=\"w-full h-full\"></div>\n", styles: [""] }); }
27794
+ }
27795
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewportIntersectorComponent, decorators: [{
27796
+ type: Component,
27797
+ args: [{ selector: 'gn-ui-viewport-intersector', template: "<div class=\"w-full h-full\"></div>\n" }]
27798
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }], propDecorators: { isInViewport: [{
27799
+ type: Output
27800
+ }], entersViewport: [{
27801
+ type: Output
27802
+ }], exitsViewport: [{
27629
27803
  type: Output
27630
27804
  }] } });
27631
27805
 
@@ -27652,7 +27826,6 @@ class UiInputsModule {
27652
27826
  EditableLabelDirective,
27653
27827
  TextAreaComponent,
27654
27828
  ButtonComponent,
27655
- ImageInputComponent,
27656
27829
  DropdownSelectorComponent,
27657
27830
  DateRangePickerComponent,
27658
27831
  CheckToggleComponent,
@@ -27668,7 +27841,6 @@ class UiInputsModule {
27668
27841
  CheckboxComponent,
27669
27842
  DateRangePickerComponent,
27670
27843
  EditableLabelDirective,
27671
- ImageInputComponent,
27672
27844
  BadgeComponent] }); }
27673
27845
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiInputsModule, providers: [
27674
27846
  provideIcons({
@@ -27696,7 +27868,6 @@ class UiInputsModule {
27696
27868
  MatDatepickerModule,
27697
27869
  MatNativeDateModule,
27698
27870
  TextAreaComponent,
27699
- ImageInputComponent,
27700
27871
  DropdownSelectorComponent,
27701
27872
  DateRangePickerComponent,
27702
27873
  CheckToggleComponent,
@@ -27733,7 +27904,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27733
27904
  EditableLabelDirective,
27734
27905
  TextAreaComponent,
27735
27906
  ButtonComponent,
27736
- ImageInputComponent,
27737
27907
  DropdownSelectorComponent,
27738
27908
  DateRangePickerComponent,
27739
27909
  CheckToggleComponent,
@@ -27762,135 +27932,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27762
27932
  CheckboxComponent,
27763
27933
  DateRangePickerComponent,
27764
27934
  EditableLabelDirective,
27765
- ImageInputComponent,
27766
27935
  BadgeComponent,
27767
27936
  ],
27768
27937
  }]
27769
27938
  }] });
27770
27939
 
27771
- class SwitchToggleComponent {
27772
- constructor() {
27773
- this.ariaLabel = '';
27774
- this.extraClasses = '';
27775
- this.disabled = false;
27776
- this.selectedValue = new EventEmitter();
27777
- }
27778
- onChange(selectedOption) {
27779
- this.options.find((option) => option.label === selectedOption.label).checked = true;
27780
- this.selectedValue.emit(selectedOption);
27781
- }
27782
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwitchToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27783
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SwitchToggleComponent, isStandalone: true, selector: "gn-ui-switch-toggle", inputs: { options: "options", ariaLabel: "ariaLabel", extraClasses: "extraClasses", disabled: "disabled" }, outputs: { selectedValue: "selectedValue" }, ngImport: i0, template: "<mat-button-toggle-group\n #group=\"matButtonToggleGroup\"\n multiple=\"false\"\n class=\"flex w-full\"\n [disabled]=\"disabled\"\n>\n <mat-button-toggle\n *ngFor=\"let option of options\"\n [aria-label]=\"option.label\"\n [checked]=\"option.checked\"\n (change)=\"onChange(option)\"\n [class]=\"extraClasses\"\n >{{ option.label | translate }}</mat-button-toggle\n >\n</mat-button-toggle-group>\n", styles: [":host{--mat-standard-button-toggle-height: 32px}.mat-button-toggle-group-appearance-standard{background-color:var(--color-gray-200);padding:4px;display:flex;gap:4px;border-radius:8px}.mat-button-toggle-appearance-standard{color:#000;background-color:var(--color-gray-200);border-radius:4px;border-left:none;font-family:var(--font-family-main)}.mat-button-toggle-appearance-standard.mat-button-toggle-checked{background-color:#000;color:var(--color-background)}button.mat-button-toggle-button.mat-focus-indicator.mat-button-toggle-label-content,.mat-button-toggle-label-content{line-height:32px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i1$a.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i1$a.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27784
- }
27785
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwitchToggleComponent, decorators: [{
27786
- type: Component,
27787
- args: [{ selector: 'gn-ui-switch-toggle', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatButtonToggleModule, CommonModule, TranslateModule], template: "<mat-button-toggle-group\n #group=\"matButtonToggleGroup\"\n multiple=\"false\"\n class=\"flex w-full\"\n [disabled]=\"disabled\"\n>\n <mat-button-toggle\n *ngFor=\"let option of options\"\n [aria-label]=\"option.label\"\n [checked]=\"option.checked\"\n (change)=\"onChange(option)\"\n [class]=\"extraClasses\"\n >{{ option.label | translate }}</mat-button-toggle\n >\n</mat-button-toggle-group>\n", styles: [":host{--mat-standard-button-toggle-height: 32px}.mat-button-toggle-group-appearance-standard{background-color:var(--color-gray-200);padding:4px;display:flex;gap:4px;border-radius:8px}.mat-button-toggle-appearance-standard{color:#000;background-color:var(--color-gray-200);border-radius:4px;border-left:none;font-family:var(--font-family-main)}.mat-button-toggle-appearance-standard.mat-button-toggle-checked{background-color:#000;color:var(--color-background)}button.mat-button-toggle-button.mat-focus-indicator.mat-button-toggle-label-content,.mat-button-toggle-label-content{line-height:32px}\n"] }]
27788
- }], propDecorators: { options: [{
27789
- type: Input
27790
- }], ariaLabel: [{
27791
- type: Input
27792
- }], extraClasses: [{
27793
- type: Input
27794
- }], disabled: [{
27795
- type: Input
27796
- }], selectedValue: [{
27797
- type: Output
27798
- }] } });
27799
-
27800
- class FileInputComponent {
27801
- get isUploadInProgress() {
27802
- return this.uploadProgress !== undefined;
27803
- }
27804
- constructor(cd) {
27805
- this.cd = cd;
27806
- this.disabled = false;
27807
- this.fileChange = new EventEmitter();
27808
- this.urlChange = new EventEmitter();
27809
- this.uploadCancel = new EventEmitter();
27810
- this.dragFilesOver = false;
27811
- }
27812
- getPrimaryText() {
27813
- if (this.uploadProgress) {
27814
- return marker('input.file.uploadProgressLabel');
27815
- }
27816
- return marker('input.file.selectFileLabel');
27817
- }
27818
- getSecondaryText() {
27819
- if (this.uploadProgress) {
27820
- return marker('input.file.uploadProgressCancel');
27821
- }
27822
- return marker('input.file.dropFileLabel');
27823
- }
27824
- handleDragFilesOver(dragFilesOver) {
27825
- this.dragFilesOver = dragFilesOver;
27826
- this.cd.markForCheck();
27827
- }
27828
- handleDropFiles(files) {
27829
- if (files.length > 0) {
27830
- this.fileChange.emit(files[0]);
27831
- }
27832
- }
27833
- handleFileInput(event) {
27834
- this.handleDropFiles(Array.from(event.target.files));
27835
- }
27836
- handleUrlChange(url) {
27837
- if (!url)
27838
- return;
27839
- this.urlChange.emit(url);
27840
- }
27841
- handleSecondaryTextClick(event) {
27842
- if (this.uploadProgress) {
27843
- this.handleCancel();
27844
- event.preventDefault();
27845
- }
27846
- }
27847
- handleCancel() {
27848
- this.uploadCancel.emit();
27849
- }
27850
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileInputComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
27851
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FileInputComponent, isStandalone: true, selector: "gn-ui-file-input", inputs: { maxSizeMB: "maxSizeMB", uploadProgress: "uploadProgress", disabled: "disabled" }, outputs: { fileChange: "fileChange", urlChange: "urlChange", uploadCancel: "uploadCancel" }, providers: [
27852
- provideIcons({
27853
- iconoirCloudUpload,
27854
- iconoirFramePlusIn,
27855
- }),
27856
- provideNgIconsConfig({
27857
- size: '1.5em',
27858
- }),
27859
- ], ngImport: i0, template: "<div class=\"w-full flex flex-col gap-[16px]\">\n <label\n gnUiFilesDrop\n class=\"flex-1 border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center gap-4 transition-colors duration-100\"\n [ngClass]=\"{\n 'border-primary-lighter bg-primary-white': dragFilesOver,\n 'border-gray-300': !dragFilesOver,\n 'cursor-pointer hover:border-gray-500': !isUploadInProgress && !disabled,\n 'cursor-not-allowed': disabled,\n }\"\n [attr.tabindex]=\"isUploadInProgress || disabled ? null : 0\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n (keydown.enter)=\"fileInput.click()\"\n >\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n />\n\n <div\n class=\"w-14 h-14 rounded-md bg-gray-50 grid\"\n *ngIf=\"!isUploadInProgress\"\n >\n <ng-icon\n *ngIf=\"!dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirCloudUpload\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirFramePlusIn\"\n ></ng-icon>\n </div>\n <div\n *ngIf=\"isUploadInProgress\"\n class=\"w-14 h-14 grid items-center justify-center relative\"\n >\n <div class=\"text-gray-100 absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"100\"\n ></mat-progress-spinner>\n </div>\n <div class=\"text-primary absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n </div>\n <span class=\"text-sm text-main font-bold\">{{ uploadProgress }}%</span>\n </div>\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">\n {{ getPrimaryText() | translate: { sizeMB: maxSizeMB.toFixed(0) } }}\n </p>\n <p\n class=\"text-sm\"\n [class]=\"\n isUploadInProgress\n ? 'font-bold text-primary cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick($event)\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <p class=\"w-full flex flex-row items-center justify-stretch gap-[16px]\">\n <span class=\"border-b border-gray-300 grow\"></span>\n <span class=\"text-sm font-medium text-gray-500 or-input-url\" translate>\n input.file.orInputUrl</span\n >\n <span class=\"border-b border-gray-300 grow\"></span>\n </p>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"isUploadInProgress || disabled\"\n (uploadClick)=\"handleUrlChange($event)\"\n ></gn-ui-url-input>\n </label>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: FilesDropDirective, selector: "[gnUiFilesDrop]", outputs: ["dragFilesOver", "dropFiles"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showUploadButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27860
- }
27861
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileInputComponent, decorators: [{
27862
- type: Component,
27863
- args: [{ selector: 'gn-ui-file-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
27864
- CommonModule,
27865
- ButtonComponent,
27866
- FilesDropDirective,
27867
- MatProgressSpinnerModule,
27868
- TranslateModule,
27869
- UrlInputComponent,
27870
- NgIconComponent,
27871
- ], providers: [
27872
- provideIcons({
27873
- iconoirCloudUpload,
27874
- iconoirFramePlusIn,
27875
- }),
27876
- provideNgIconsConfig({
27877
- size: '1.5em',
27878
- }),
27879
- ], template: "<div class=\"w-full flex flex-col gap-[16px]\">\n <label\n gnUiFilesDrop\n class=\"flex-1 border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center gap-4 transition-colors duration-100\"\n [ngClass]=\"{\n 'border-primary-lighter bg-primary-white': dragFilesOver,\n 'border-gray-300': !dragFilesOver,\n 'cursor-pointer hover:border-gray-500': !isUploadInProgress && !disabled,\n 'cursor-not-allowed': disabled,\n }\"\n [attr.tabindex]=\"isUploadInProgress || disabled ? null : 0\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n (keydown.enter)=\"fileInput.click()\"\n >\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n />\n\n <div\n class=\"w-14 h-14 rounded-md bg-gray-50 grid\"\n *ngIf=\"!isUploadInProgress\"\n >\n <ng-icon\n *ngIf=\"!dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirCloudUpload\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirFramePlusIn\"\n ></ng-icon>\n </div>\n <div\n *ngIf=\"isUploadInProgress\"\n class=\"w-14 h-14 grid items-center justify-center relative\"\n >\n <div class=\"text-gray-100 absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"100\"\n ></mat-progress-spinner>\n </div>\n <div class=\"text-primary absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n </div>\n <span class=\"text-sm text-main font-bold\">{{ uploadProgress }}%</span>\n </div>\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">\n {{ getPrimaryText() | translate: { sizeMB: maxSizeMB.toFixed(0) } }}\n </p>\n <p\n class=\"text-sm\"\n [class]=\"\n isUploadInProgress\n ? 'font-bold text-primary cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick($event)\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <p class=\"w-full flex flex-row items-center justify-stretch gap-[16px]\">\n <span class=\"border-b border-gray-300 grow\"></span>\n <span class=\"text-sm font-medium text-gray-500 or-input-url\" translate>\n input.file.orInputUrl</span\n >\n <span class=\"border-b border-gray-300 grow\"></span>\n </p>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"isUploadInProgress || disabled\"\n (uploadClick)=\"handleUrlChange($event)\"\n ></gn-ui-url-input>\n </label>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
27880
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { maxSizeMB: [{
27881
- type: Input
27882
- }], uploadProgress: [{
27883
- type: Input
27884
- }], disabled: [{
27885
- type: Input
27886
- }], fileChange: [{
27887
- type: Output
27888
- }], urlChange: [{
27889
- type: Output
27890
- }], uploadCancel: [{
27891
- type: Output
27892
- }] } });
27893
-
27894
27940
  class SortableListComponent {
27895
27941
  constructor() {
27896
27942
  this.itemsOrderChange = new EventEmitter();
@@ -29117,6 +29163,202 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
29117
29163
  type: Output
29118
29164
  }] } });
29119
29165
 
29166
+ class ImageInputComponent {
29167
+ get isUploadInProgress() {
29168
+ return this.uploadProgress !== undefined;
29169
+ }
29170
+ constructor(http, cd) {
29171
+ this.http = http;
29172
+ this.cd = cd;
29173
+ this.disabled = false;
29174
+ this.fileChange = new EventEmitter();
29175
+ this.urlChange = new EventEmitter();
29176
+ this.uploadCancel = new EventEmitter();
29177
+ this.delete = new EventEmitter();
29178
+ this.altTextChange = new EventEmitter();
29179
+ this.dragFilesOver = false;
29180
+ this.showUrlInput = false;
29181
+ this.downloadError = false;
29182
+ this.showAltTextInput = false;
29183
+ }
29184
+ getPrimaryText() {
29185
+ if (this.uploadError) {
29186
+ return marker('input.image.uploadErrorLabel');
29187
+ }
29188
+ if (this.uploadProgress) {
29189
+ return marker('input.image.uploadProgressLabel');
29190
+ }
29191
+ return marker('input.image.selectFileLabel');
29192
+ }
29193
+ getSecondaryText() {
29194
+ if (this.uploadError) {
29195
+ return marker('input.image.uploadErrorRetry');
29196
+ }
29197
+ if (this.uploadProgress) {
29198
+ return marker('input.image.uploadProgressCancel');
29199
+ }
29200
+ return marker('input.image.dropFileLabel');
29201
+ }
29202
+ handleDragFilesOver(dragFilesOver) {
29203
+ if (!this.showUrlInput) {
29204
+ this.dragFilesOver = dragFilesOver;
29205
+ this.cd.markForCheck();
29206
+ }
29207
+ }
29208
+ handleDropFiles(files) {
29209
+ if (!this.showUrlInput) {
29210
+ const validFiles = this.filterTypeImage(files);
29211
+ if (validFiles.length > 0) {
29212
+ this.resizeAndEmit(validFiles[0]);
29213
+ }
29214
+ }
29215
+ }
29216
+ handleFileInput(event) {
29217
+ const inputFiles = Array.from(event.target.files);
29218
+ const validFiles = this.filterTypeImage(inputFiles);
29219
+ if (validFiles.length > 0) {
29220
+ this.resizeAndEmit(validFiles[0]);
29221
+ }
29222
+ }
29223
+ displayUrlInput() {
29224
+ this.uploadCancel.emit();
29225
+ this.showUrlInput = true;
29226
+ }
29227
+ async downloadUrl(url) {
29228
+ this.downloadError = false;
29229
+ const name = url.split('/').pop();
29230
+ try {
29231
+ const response = await firstValueFrom(this.http.head(url, { observe: 'response' }));
29232
+ if (response.headers.get('content-type')?.startsWith('image/') &&
29233
+ parseInt(response.headers.get('content-length')) <
29234
+ megabytesToBytes(this.maxSizeMB)) {
29235
+ this.http.get(url, { responseType: 'blob' }).subscribe({
29236
+ next: (blob) => {
29237
+ this.cd.markForCheck();
29238
+ const file = new File([blob], name);
29239
+ this.fileChange.emit(file);
29240
+ },
29241
+ error: () => {
29242
+ this.downloadError = true;
29243
+ this.cd.markForCheck();
29244
+ this.urlChange.emit(url);
29245
+ },
29246
+ });
29247
+ }
29248
+ }
29249
+ catch {
29250
+ this.downloadError = true;
29251
+ this.cd.markForCheck();
29252
+ return;
29253
+ }
29254
+ }
29255
+ handleSecondaryTextClick(event) {
29256
+ if (this.uploadError) {
29257
+ this.handleRetry();
29258
+ }
29259
+ else if (this.uploadProgress) {
29260
+ this.handleCancel();
29261
+ event.preventDefault();
29262
+ }
29263
+ }
29264
+ handleCancel() {
29265
+ this.uploadCancel.emit();
29266
+ }
29267
+ handleRetry() {
29268
+ switch (this.lastUploadType) {
29269
+ case 'file':
29270
+ this.fileChange.emit(this.lastUploadContent);
29271
+ break;
29272
+ case 'url':
29273
+ this.urlChange.emit(this.lastUploadContent);
29274
+ break;
29275
+ }
29276
+ }
29277
+ handleDelete() {
29278
+ this.delete.emit();
29279
+ }
29280
+ toggleAltTextInput() {
29281
+ this.showAltTextInput = !this.showAltTextInput;
29282
+ }
29283
+ handleAltTextChange(altText) {
29284
+ this.altTextChange.emit(altText);
29285
+ }
29286
+ filterTypeImage(files) {
29287
+ return files.filter((file) => {
29288
+ return file.type.startsWith('image/');
29289
+ });
29290
+ }
29291
+ resizeAndEmit(imageToResize) {
29292
+ const maxSizeBytes = megabytesToBytes(this.maxSizeMB);
29293
+ downgradeImage(imageToResize, maxSizeBytes).then((resizedImage) => {
29294
+ const fileToEmit = new File([resizedImage], imageToResize.name);
29295
+ this.fileChange.emit(fileToEmit);
29296
+ });
29297
+ }
29298
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageInputComponent, deps: [{ token: i1.HttpClient }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
29299
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ImageInputComponent, isStandalone: true, selector: "gn-ui-image-input", inputs: { maxSizeMB: "maxSizeMB", previewUrl: "previewUrl", altText: "altText", uploadProgress: "uploadProgress", uploadError: "uploadError", disabled: "disabled" }, outputs: { fileChange: "fileChange", urlChange: "urlChange", uploadCancel: "uploadCancel", delete: "delete", altTextChange: "altTextChange" }, providers: [
29300
+ provideIcons({
29301
+ iconoirMediaImage,
29302
+ iconoirFramePlusIn,
29303
+ iconoirMediaImageXmark,
29304
+ iconoirBin,
29305
+ iconoirPlus,
29306
+ iconoirLink,
29307
+ }),
29308
+ provideNgIconsConfig({
29309
+ size: '1.5rem',
29310
+ }),
29311
+ ], ngImport: i0, template: "<ng-container *ngIf=\"previewUrl; then withImage; else withoutImage\">\n</ng-container>\n\n<ng-template #withImage>\n <div class=\"w-80 h-full flex flex-col gap-2\">\n <gn-ui-image-overlay-preview class=\"h-48\" [imageUrl]=\"previewUrl\">\n </gn-ui-image-overlay-preview>\n <gn-ui-text-input\n *ngIf=\"showAltTextInput\"\n [placeholder]=\"'input.image.altTextPlaceholder' | translate\"\n [value]=\"altText ?? ''\"\n (valueChange)=\"handleAltTextChange($event)\"\n extraClass=\"gn-ui-editor-textarea\"\n [disabled]=\"true\"\n ></gn-ui-text-input>\n <div class=\"flex flex-row gap-2 mt-2\">\n <gn-ui-button type=\"gray\" (buttonClick)=\"handleDelete()\">\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirBin\"></ng-icon>\n {{ 'input.image.delete' | translate }}\n </gn-ui-button>\n <gn-ui-button\n *ngIf=\"!showAltTextInput\"\n type=\"gray\"\n (buttonClick)=\"toggleAltTextInput()\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"me-1 text-primary\"></ng-icon>\n {{ 'input.image.displayAltTextInput' | translate }}\n </gn-ui-button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #withoutImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <label\n gnUiFilesDrop\n class=\"flex-1 border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center gap-4 transition-colors duration-100\"\n [ngClass]=\"{\n 'border-primary-lighter bg-primary-white': dragFilesOver,\n 'border-gray-300': !dragFilesOver,\n 'cursor-pointer hover:border-gray-500':\n !isUploadInProgress && !uploadError && !showUrlInput && !disabled,\n 'cursor-not-allowed': disabled,\n }\"\n [attr.tabindex]=\"\n isUploadInProgress || uploadError || showUrlInput || disabled ? null : 0\n \"\n (keydown.enter)=\"fileInput.click()\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n >\n <div\n class=\"w-14 h-14 rounded-md bg-gray-50 grid\"\n *ngIf=\"!isUploadInProgress && !uploadError\"\n >\n <ng-icon\n *ngIf=\"!dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirMediaImage\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirFramePlusIn\"\n ></ng-icon>\n </div>\n\n <div\n *ngIf=\"isUploadInProgress && !uploadError\"\n class=\"w-14 h-14 grid items-center justify-center relative\"\n >\n <div class=\"text-gray-100 absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"100\"\n ></mat-progress-spinner>\n </div>\n <div class=\"text-primary absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n </div>\n <span class=\"text-sm text-main font-bold\">{{ uploadProgress }}%</span>\n </div>\n\n <div class=\"w-14 h-14 rounded-md bg-gray-50 grid\" *ngIf=\"uploadError\">\n <ng-icon\n name=\"iconoirMediaImageXmark\"\n class=\"place-self-center text-rose-500\"\n ></ng-icon>\n </div>\n\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">{{ getPrimaryText() | translate }}</p>\n <p\n class=\"text-sm\"\n [class]=\"\n isUploadInProgress || uploadError\n ? 'font-bold text-blue-500 cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick($event)\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"\n showUrlInput || isUploadInProgress || uploadError || disabled\n \"\n />\n </label>\n\n <div *ngIf=\"!showUrlInput\" class=\"flex-none mt-2\">\n <gn-ui-button\n (buttonClick)=\"displayUrlInput()\"\n type=\"gray\"\n [disabled]=\"disabled\"\n [extraClass]=\"disabled && 'cursor-not-allowed'\"\n >\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirLink\"></ng-icon>\n {{ 'input.image.displayUrlInput' | translate }}\n </gn-ui-button>\n </div>\n\n <gn-ui-url-input\n *ngIf=\"showUrlInput\"\n class=\"mt-3.5\"\n (uploadClick)=\"downloadUrl($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n >\n </gn-ui-url-input>\n </div>\n</ng-template>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "directive", type: FilesDropDirective, selector: "[gnUiFilesDrop]", outputs: ["dragFilesOver", "dropFiles"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ImageOverlayPreviewComponent, selector: "gn-ui-image-overlay-preview", inputs: ["imageUrl"], outputs: ["isPlaceholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
29312
+ }
29313
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageInputComponent, decorators: [{
29314
+ type: Component,
29315
+ args: [{ selector: 'gn-ui-image-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
29316
+ CommonModule,
29317
+ ButtonComponent,
29318
+ FilesDropDirective,
29319
+ MatProgressSpinnerModule,
29320
+ TranslateModule,
29321
+ UrlInputComponent,
29322
+ TextInputComponent,
29323
+ NgIconComponent,
29324
+ ImageOverlayPreviewComponent,
29325
+ ], providers: [
29326
+ provideIcons({
29327
+ iconoirMediaImage,
29328
+ iconoirFramePlusIn,
29329
+ iconoirMediaImageXmark,
29330
+ iconoirBin,
29331
+ iconoirPlus,
29332
+ iconoirLink,
29333
+ }),
29334
+ provideNgIconsConfig({
29335
+ size: '1.5rem',
29336
+ }),
29337
+ ], template: "<ng-container *ngIf=\"previewUrl; then withImage; else withoutImage\">\n</ng-container>\n\n<ng-template #withImage>\n <div class=\"w-80 h-full flex flex-col gap-2\">\n <gn-ui-image-overlay-preview class=\"h-48\" [imageUrl]=\"previewUrl\">\n </gn-ui-image-overlay-preview>\n <gn-ui-text-input\n *ngIf=\"showAltTextInput\"\n [placeholder]=\"'input.image.altTextPlaceholder' | translate\"\n [value]=\"altText ?? ''\"\n (valueChange)=\"handleAltTextChange($event)\"\n extraClass=\"gn-ui-editor-textarea\"\n [disabled]=\"true\"\n ></gn-ui-text-input>\n <div class=\"flex flex-row gap-2 mt-2\">\n <gn-ui-button type=\"gray\" (buttonClick)=\"handleDelete()\">\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirBin\"></ng-icon>\n {{ 'input.image.delete' | translate }}\n </gn-ui-button>\n <gn-ui-button\n *ngIf=\"!showAltTextInput\"\n type=\"gray\"\n (buttonClick)=\"toggleAltTextInput()\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"me-1 text-primary\"></ng-icon>\n {{ 'input.image.displayAltTextInput' | translate }}\n </gn-ui-button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #withoutImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <label\n gnUiFilesDrop\n class=\"flex-1 border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center gap-4 transition-colors duration-100\"\n [ngClass]=\"{\n 'border-primary-lighter bg-primary-white': dragFilesOver,\n 'border-gray-300': !dragFilesOver,\n 'cursor-pointer hover:border-gray-500':\n !isUploadInProgress && !uploadError && !showUrlInput && !disabled,\n 'cursor-not-allowed': disabled,\n }\"\n [attr.tabindex]=\"\n isUploadInProgress || uploadError || showUrlInput || disabled ? null : 0\n \"\n (keydown.enter)=\"fileInput.click()\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n >\n <div\n class=\"w-14 h-14 rounded-md bg-gray-50 grid\"\n *ngIf=\"!isUploadInProgress && !uploadError\"\n >\n <ng-icon\n *ngIf=\"!dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirMediaImage\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirFramePlusIn\"\n ></ng-icon>\n </div>\n\n <div\n *ngIf=\"isUploadInProgress && !uploadError\"\n class=\"w-14 h-14 grid items-center justify-center relative\"\n >\n <div class=\"text-gray-100 absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"100\"\n ></mat-progress-spinner>\n </div>\n <div class=\"text-primary absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n </div>\n <span class=\"text-sm text-main font-bold\">{{ uploadProgress }}%</span>\n </div>\n\n <div class=\"w-14 h-14 rounded-md bg-gray-50 grid\" *ngIf=\"uploadError\">\n <ng-icon\n name=\"iconoirMediaImageXmark\"\n class=\"place-self-center text-rose-500\"\n ></ng-icon>\n </div>\n\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">{{ getPrimaryText() | translate }}</p>\n <p\n class=\"text-sm\"\n [class]=\"\n isUploadInProgress || uploadError\n ? 'font-bold text-blue-500 cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick($event)\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"\n showUrlInput || isUploadInProgress || uploadError || disabled\n \"\n />\n </label>\n\n <div *ngIf=\"!showUrlInput\" class=\"flex-none mt-2\">\n <gn-ui-button\n (buttonClick)=\"displayUrlInput()\"\n type=\"gray\"\n [disabled]=\"disabled\"\n [extraClass]=\"disabled && 'cursor-not-allowed'\"\n >\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirLink\"></ng-icon>\n {{ 'input.image.displayUrlInput' | translate }}\n </gn-ui-button>\n </div>\n\n <gn-ui-url-input\n *ngIf=\"showUrlInput\"\n class=\"mt-3.5\"\n (uploadClick)=\"downloadUrl($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n >\n </gn-ui-url-input>\n </div>\n</ng-template>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
29338
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i0.ChangeDetectorRef }], propDecorators: { maxSizeMB: [{
29339
+ type: Input
29340
+ }], previewUrl: [{
29341
+ type: Input
29342
+ }], altText: [{
29343
+ type: Input
29344
+ }], uploadProgress: [{
29345
+ type: Input
29346
+ }], uploadError: [{
29347
+ type: Input
29348
+ }], disabled: [{
29349
+ type: Input
29350
+ }], fileChange: [{
29351
+ type: Output
29352
+ }], urlChange: [{
29353
+ type: Output
29354
+ }], uploadCancel: [{
29355
+ type: Output
29356
+ }], delete: [{
29357
+ type: Output
29358
+ }], altTextChange: [{
29359
+ type: Output
29360
+ }] } });
29361
+
29120
29362
  class LinkCardComponent {
29121
29363
  constructor() {
29122
29364
  this.compact = false;
@@ -29647,22 +29889,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
29647
29889
  type: Input
29648
29890
  }] } });
29649
29891
 
29650
- class UserPreviewComponent {
29651
- get userFullName() {
29652
- return (this.user.name + ' ' + this.user.surname).trim();
29653
- }
29654
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29655
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserPreviewComponent, selector: "gn-ui-user-preview", inputs: { user: "user", avatarPlaceholder: "avatarPlaceholder" }, ngImport: i0, template: "<figure class=\"text-center\">\n <div class=\"w-10 h-10 rounded-full capitalize\" [matTooltip]=\"userFullName\">\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n", dependencies: [{ kind: "directive", type: i1$4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: AvatarComponent, selector: "gn-ui-avatar", inputs: ["avatarUrl", "avatarPlaceholder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
29656
- }
29657
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserPreviewComponent, decorators: [{
29658
- type: Component,
29659
- args: [{ selector: 'gn-ui-user-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<figure class=\"text-center\">\n <div class=\"w-10 h-10 rounded-full capitalize\" [matTooltip]=\"userFullName\">\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n" }]
29660
- }], propDecorators: { user: [{
29661
- type: Input
29662
- }], avatarPlaceholder: [{
29663
- type: Input
29664
- }] } });
29665
-
29666
29892
  class TimeSincePipe {
29667
29893
  constructor(translate) {
29668
29894
  this.translate = translate;
@@ -29716,6 +29942,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
29716
29942
  }]
29717
29943
  }], ctorParameters: () => [{ type: i1$1.TranslateService }] });
29718
29944
 
29945
+ class UserPreviewComponent {
29946
+ get userFullName() {
29947
+ return (this.user.name + ' ' + this.user.surname).trim();
29948
+ }
29949
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29950
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserPreviewComponent, selector: "gn-ui-user-preview", inputs: { user: "user", avatarPlaceholder: "avatarPlaceholder" }, ngImport: i0, template: "<figure class=\"text-center\">\n <div class=\"w-10 h-10 rounded-full capitalize\" [matTooltip]=\"userFullName\">\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n", dependencies: [{ kind: "directive", type: i1$4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: AvatarComponent, selector: "gn-ui-avatar", inputs: ["avatarUrl", "avatarPlaceholder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
29951
+ }
29952
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserPreviewComponent, decorators: [{
29953
+ type: Component,
29954
+ args: [{ selector: 'gn-ui-user-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<figure class=\"text-center\">\n <div class=\"w-10 h-10 rounded-full capitalize\" [matTooltip]=\"userFullName\">\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n" }]
29955
+ }], propDecorators: { user: [{
29956
+ type: Input
29957
+ }], avatarPlaceholder: [{
29958
+ type: Input
29959
+ }] } });
29960
+
29719
29961
  class UiElementsModule {
29720
29962
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
29721
29963
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, declarations: [AvatarComponent, UserPreviewComponent], imports: [CommonModule,
@@ -29732,10 +29974,12 @@ class UiElementsModule {
29732
29974
  TimeSincePipe,
29733
29975
  BadgeComponent,
29734
29976
  MaxLinesComponent,
29735
- TextInputComponent], exports: [ThumbnailComponent,
29977
+ TextInputComponent,
29978
+ ImageInputComponent], exports: [ThumbnailComponent,
29736
29979
  AvatarComponent,
29737
29980
  UserPreviewComponent,
29738
- MarkdownParserComponent] }); }
29981
+ MarkdownParserComponent,
29982
+ ImageInputComponent] }); }
29739
29983
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, providers: [
29740
29984
  provideNgIconsConfig({
29741
29985
  size: '1.5em',
@@ -29753,7 +29997,8 @@ class UiElementsModule {
29753
29997
  ThumbnailComponent,
29754
29998
  BadgeComponent,
29755
29999
  MaxLinesComponent,
29756
- TextInputComponent] }); }
30000
+ TextInputComponent,
30001
+ ImageInputComponent] }); }
29757
30002
  }
29758
30003
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, decorators: [{
29759
30004
  type: NgModule,
@@ -29776,6 +30021,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
29776
30021
  BadgeComponent,
29777
30022
  MaxLinesComponent,
29778
30023
  TextInputComponent,
30024
+ ImageInputComponent,
29779
30025
  ],
29780
30026
  providers: [
29781
30027
  provideNgIconsConfig({
@@ -29788,6 +30034,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
29788
30034
  AvatarComponent,
29789
30035
  UserPreviewComponent,
29790
30036
  MarkdownParserComponent,
30037
+ ImageInputComponent,
29791
30038
  ],
29792
30039
  }]
29793
30040
  }] });
@@ -30040,7 +30287,6 @@ class ResultsTableComponent {
30040
30287
  this.sortOrder = null;
30041
30288
  this.hasDraft = () => false;
30042
30289
  this.canDuplicate = () => true;
30043
- this.isUnsavedDraft = () => true;
30044
30290
  this.canDelete = () => true;
30045
30291
  // emits the column (field) as well as the order
30046
30292
  this.sortByChange = new EventEmitter();
@@ -30148,7 +30394,7 @@ class ResultsTableComponent {
30148
30394
  this.recordsSelectedChange.emit([[record], selected]);
30149
30395
  }
30150
30396
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableComponent, deps: [{ token: i1$9.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
30151
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", hasDraft: "hasDraft", canDuplicate: "canDuplicate", isUnsavedDraft: "isUnsavedDraft", canDelete: "canDelete" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", duplicateRecord: "duplicateRecord", deleteRecord: "deleteRecord", recordsSelectedChange: "recordsSelectedChange" }, providers: [provideIcons({ iconoirUser, matMoreVert })], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'9rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (isUnsavedDraft(item)\n ? 'record.metadata.status.notPublished'\n : 'record.metadata.status.published'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{ isUnsavedDraft(item) ? '-' : dateToString(item.recordUpdated) }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n >\n <ng-icon name=\"matMoreVert\"></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item)\"\n [canDelete]=\"canDelete(item)\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "width", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", inputs: ["canDuplicate", "canDelete"], outputs: ["duplicate", "delete", "closeActionMenu"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] }); }
30397
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", hasDraft: "hasDraft", canDuplicate: "canDuplicate", canDelete: "canDelete" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", duplicateRecord: "duplicateRecord", deleteRecord: "deleteRecord", recordsSelectedChange: "recordsSelectedChange" }, providers: [provideIcons({ iconoirUser, matMoreVert })], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'9rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n >\n <ng-icon name=\"matMoreVert\"></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item)\"\n [canDelete]=\"canDelete(item)\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "width", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", inputs: ["canDuplicate", "canDelete"], outputs: ["duplicate", "delete", "closeActionMenu"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] }); }
30152
30398
  }
30153
30399
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableComponent, decorators: [{
30154
30400
  type: Component,
@@ -30163,7 +30409,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30163
30409
  NgIconComponent,
30164
30410
  CdkOverlayOrigin,
30165
30411
  CdkConnectedOverlay,
30166
- ], providers: [provideIcons({ iconoirUser, matMoreVert })], template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'9rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (isUnsavedDraft(item)\n ? 'record.metadata.status.notPublished'\n : 'record.metadata.status.published'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{ isUnsavedDraft(item) ? '-' : dateToString(item.recordUpdated) }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n >\n <ng-icon name=\"matMoreVert\"></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item)\"\n [canDelete]=\"canDelete(item)\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
30412
+ ], providers: [provideIcons({ iconoirUser, matMoreVert })], template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'9rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n >\n <ng-icon name=\"matMoreVert\"></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item)\"\n [canDelete]=\"canDelete(item)\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
30167
30413
  }], ctorParameters: () => [{ type: i1$9.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }], propDecorators: { records: [{
30168
30414
  type: Input
30169
30415
  }], selectedRecordsIdentifiers: [{
@@ -30174,8 +30420,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30174
30420
  type: Input
30175
30421
  }], canDuplicate: [{
30176
30422
  type: Input
30177
- }], isUnsavedDraft: [{
30178
- type: Input
30179
30423
  }], canDelete: [{
30180
30424
  type: Input
30181
30425
  }], sortByChange: [{
@@ -32352,7 +32596,6 @@ class ResultsTableContainerComponent {
32352
32596
  this.selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$;
32353
32597
  this.sortBy$ = this.searchFacade.sortBy$;
32354
32598
  this.hasDraft = (record) => this.recordsRepository.recordHasDraft(record.uniqueIdentifier);
32355
- this.isUnsavedDraft = (record) => this.recordsRepository.isRecordNotYetSaved(record.uniqueIdentifier);
32356
32599
  }
32357
32600
  handleRecordClick(item) {
32358
32601
  this.recordClick.emit(item);
@@ -32397,11 +32640,11 @@ class ResultsTableContainerComponent {
32397
32640
  this.subscription.unsubscribe();
32398
32641
  }
32399
32642
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableContainerComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: SelectionService }, { token: RecordsRepositoryInterface }, { token: NotificationsService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
32400
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableContainerComponent, isStandalone: true, selector: "gn-ui-results-table-container", inputs: { canDuplicate: "canDuplicate", canDelete: "canDelete" }, outputs: { recordClick: "recordClick", duplicateRecord: "duplicateRecord" }, ngImport: i0, template: "<gn-ui-results-table\n *ngIf=\"searchFacade.results$ | async as records\"\n [records]=\"records\"\n [hasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n [isUnsavedDraft]=\"isUnsavedDraft\"\n [canDelete]=\"canDelete\"\n [canDuplicate]=\"canDuplicate\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (deleteRecord)=\"handleDeleteRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: ResultsTableComponent, selector: "gn-ui-results-table", inputs: ["records", "selectedRecordsIdentifiers", "sortOrder", "hasDraft", "canDuplicate", "isUnsavedDraft", "canDelete"], outputs: ["sortByChange", "recordClick", "duplicateRecord", "deleteRecord", "recordsSelectedChange"] }] }); }
32643
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableContainerComponent, isStandalone: true, selector: "gn-ui-results-table-container", inputs: { canDuplicate: "canDuplicate", canDelete: "canDelete" }, outputs: { recordClick: "recordClick", duplicateRecord: "duplicateRecord" }, ngImport: i0, template: "<gn-ui-results-table\n *ngIf=\"searchFacade.results$ | async as records\"\n [records]=\"records\"\n [hasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n [canDelete]=\"canDelete\"\n [canDuplicate]=\"canDuplicate\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (deleteRecord)=\"handleDeleteRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: ResultsTableComponent, selector: "gn-ui-results-table", inputs: ["records", "selectedRecordsIdentifiers", "sortOrder", "hasDraft", "canDuplicate", "canDelete"], outputs: ["sortByChange", "recordClick", "duplicateRecord", "deleteRecord", "recordsSelectedChange"] }] }); }
32401
32644
  }
32402
32645
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableContainerComponent, decorators: [{
32403
32646
  type: Component,
32404
- args: [{ selector: 'gn-ui-results-table-container', standalone: true, imports: [CommonModule, ResultsTableComponent], template: "<gn-ui-results-table\n *ngIf=\"searchFacade.results$ | async as records\"\n [records]=\"records\"\n [hasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n [isUnsavedDraft]=\"isUnsavedDraft\"\n [canDelete]=\"canDelete\"\n [canDuplicate]=\"canDuplicate\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (deleteRecord)=\"handleDeleteRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n" }]
32647
+ args: [{ selector: 'gn-ui-results-table-container', standalone: true, imports: [CommonModule, ResultsTableComponent], template: "<gn-ui-results-table\n *ngIf=\"searchFacade.results$ | async as records\"\n [records]=\"records\"\n [hasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n [canDelete]=\"canDelete\"\n [canDuplicate]=\"canDuplicate\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (deleteRecord)=\"handleDeleteRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n" }]
32405
32648
  }], ctorParameters: () => [{ type: SearchFacade }, { type: SearchService }, { type: SelectionService }, { type: RecordsRepositoryInterface }, { type: NotificationsService }, { type: i1$1.TranslateService }], propDecorators: { canDuplicate: [{
32406
32649
  type: Input
32407
32650
  }], canDelete: [{
@@ -35525,11 +35768,11 @@ class FigureComponent {
35525
35768
  return this.color === 'primary' ? 'bg-primary-white' : 'bg-secondary-white';
35526
35769
  }
35527
35770
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FigureComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35528
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FigureComponent, selector: "gn-ui-figure", inputs: { icon: "icon", title: "title", figure: "figure", unit: "unit", color: "color" }, ngImport: i0, template: "<div\n class=\"flex flex-row justify-start items-center overflow-hidden\"\n data-test=\"figureTitle\"\n [title]=\"\n figure.toString() +\n ' ' +\n unit +\n ' ' +\n (title | translate: { count: figure })\n \"\n>\n <div\n class=\"{{ bgClass }} {{\n textClass\n }} text-[1.875em] rounded-full mr-[0.55em] flex justify-center items-center w-[2.2em] h-[2.2em] shrink-0\"\n style=\"width: 2.2em; height: 2.2em\"\n data-test=\"icon-container\"\n >\n <ng-icon class=\"text-[0.66em]\" [name]=\"icon\"> </ng-icon>\n </div>\n <div class=\"shrink overflow-hidden\">\n <div class=\"figure-block text-[1.5em] text-black\">\n <span class=\"figure font-medium mr-[0.3em]\" data-test=\"figure\">{{\n figure\n }}</span>\n <span class=\"unit text-[0.665em]\">{{ unit }}</span>\n </div>\n <div translate class=\"title truncate\" [translateParams]=\"{ count: figure }\">\n {{ title }}\n </div>\n </div>\n</div>\n", styles: [":host{display:inherit}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i2$2.NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35771
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FigureComponent, selector: "gn-ui-figure", inputs: { icon: "icon", title: "title", figure: "figure", unit: "unit", color: "color" }, ngImport: i0, template: "<div\n class=\"flex flex-row justify-start items-center overflow-hidden\"\n data-test=\"figureTitle\"\n [title]=\"\n figure.toString() +\n ' ' +\n unit +\n ' ' +\n (title | translate: { count: figure })\n \"\n>\n <div\n data-test=\"icon-container\"\n class=\"{{ bgClass }} {{\n textClass\n }} text-[1.875em] rounded-full mr-[0.55em] flex justify-center items-center w-[2.2em] h-[2.2em] shrink-0\"\n style=\"width: 2.2em; height: 2.2em\"\n data-test=\"icon-container\"\n >\n <ng-icon class=\"text-[0.66em]\" [name]=\"icon\"> </ng-icon>\n </div>\n <div class=\"shrink overflow-hidden\">\n <div class=\"figure-block text-[1.5em] text-black\">\n <span class=\"figure font-medium mr-[0.3em]\" data-test=\"figure\">{{\n figure\n }}</span>\n <span class=\"unit text-[0.665em]\">{{ unit }}</span>\n </div>\n <div translate class=\"title truncate\" [translateParams]=\"{ count: figure }\">\n {{ title }}\n </div>\n </div>\n</div>\n", styles: [":host{display:inherit}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i2$2.NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35529
35772
  }
35530
35773
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FigureComponent, decorators: [{
35531
35774
  type: Component,
35532
- args: [{ selector: 'gn-ui-figure', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex flex-row justify-start items-center overflow-hidden\"\n data-test=\"figureTitle\"\n [title]=\"\n figure.toString() +\n ' ' +\n unit +\n ' ' +\n (title | translate: { count: figure })\n \"\n>\n <div\n class=\"{{ bgClass }} {{\n textClass\n }} text-[1.875em] rounded-full mr-[0.55em] flex justify-center items-center w-[2.2em] h-[2.2em] shrink-0\"\n style=\"width: 2.2em; height: 2.2em\"\n data-test=\"icon-container\"\n >\n <ng-icon class=\"text-[0.66em]\" [name]=\"icon\"> </ng-icon>\n </div>\n <div class=\"shrink overflow-hidden\">\n <div class=\"figure-block text-[1.5em] text-black\">\n <span class=\"figure font-medium mr-[0.3em]\" data-test=\"figure\">{{\n figure\n }}</span>\n <span class=\"unit text-[0.665em]\">{{ unit }}</span>\n </div>\n <div translate class=\"title truncate\" [translateParams]=\"{ count: figure }\">\n {{ title }}\n </div>\n </div>\n</div>\n", styles: [":host{display:inherit}\n"] }]
35775
+ args: [{ selector: 'gn-ui-figure', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex flex-row justify-start items-center overflow-hidden\"\n data-test=\"figureTitle\"\n [title]=\"\n figure.toString() +\n ' ' +\n unit +\n ' ' +\n (title | translate: { count: figure })\n \"\n>\n <div\n data-test=\"icon-container\"\n class=\"{{ bgClass }} {{\n textClass\n }} text-[1.875em] rounded-full mr-[0.55em] flex justify-center items-center w-[2.2em] h-[2.2em] shrink-0\"\n style=\"width: 2.2em; height: 2.2em\"\n data-test=\"icon-container\"\n >\n <ng-icon class=\"text-[0.66em]\" [name]=\"icon\"> </ng-icon>\n </div>\n <div class=\"shrink overflow-hidden\">\n <div class=\"figure-block text-[1.5em] text-black\">\n <span class=\"figure font-medium mr-[0.3em]\" data-test=\"figure\">{{\n figure\n }}</span>\n <span class=\"unit text-[0.665em]\">{{ unit }}</span>\n </div>\n <div translate class=\"title truncate\" [translateParams]=\"{ count: figure }\">\n {{ title }}\n </div>\n </div>\n</div>\n", styles: [":host{display:inherit}\n"] }]
35533
35776
  }], propDecorators: { icon: [{
35534
35777
  type: Input
35535
35778
  }], title: [{
@@ -37531,6 +37774,7 @@ const setCurrentPage = createAction('[Editor] Set current page', props());
37531
37774
  const setFieldVisibility = createAction('[Editor] Set field visibility', props());
37532
37775
  const hasRecordChangedSinceDraft = createAction('[Editor] Has Record Changed Since Draft', props());
37533
37776
  const hasRecordChangedSinceDraftSuccess = createAction('[Editor] Has Record Changed Since Draft Success', props());
37777
+ const isPublished = createAction('[Editor] Record Saved But Not Published', props());
37534
37778
 
37535
37779
  /**
37536
37780
  * This file contains the configuration of the fields that will be displayed in the editor.
@@ -37581,9 +37825,7 @@ const RECORD_LICENSE_FIELD = {
37581
37825
  };
37582
37826
  const RECORD_KEYWORDS_FIELD = {
37583
37827
  model: 'keywords',
37584
- formFieldConfig: {
37585
- labelKey: marker('editor.record.form.field.keywords'),
37586
- },
37828
+ formFieldConfig: {},
37587
37829
  };
37588
37830
  const RECORD_RESOURCE_CREATED_FIELD = {
37589
37831
  model: 'resourceCreated',
@@ -37663,23 +37905,17 @@ const RECORD_SPATIAL_TOGGLE_FIELD = {
37663
37905
  };
37664
37906
  const RECORD_SPATIAL_EXTENTS_FIELD = {
37665
37907
  model: 'spatialExtents',
37666
- formFieldConfig: {
37667
- labelKey: marker('editor.record.form.field.spatialExtents'),
37668
- },
37908
+ formFieldConfig: {},
37669
37909
  };
37670
37910
  const RECORD_ONLINE_RESOURCES = {
37671
37911
  model: 'onlineResources',
37672
37912
  modelSpecifier: 'onlineResourceType:!link',
37673
- formFieldConfig: {
37674
- labelKey: marker('editor.record.form.field.onlineResources'),
37675
- },
37913
+ formFieldConfig: {},
37676
37914
  };
37677
37915
  const RECORD_ONLINE_LINK_RESOURCES = {
37678
37916
  model: 'onlineResources',
37679
37917
  modelSpecifier: 'onlineResourceType:link',
37680
- formFieldConfig: {
37681
- labelKey: marker('editor.record.form.field.onlineLinkResources'),
37682
- },
37918
+ formFieldConfig: {},
37683
37919
  };
37684
37920
  /************************************************************
37685
37921
  *************** SECTIONS *****************
@@ -37761,7 +37997,12 @@ const DEFAULT_CONFIGURATION = {
37761
37997
  pages: [
37762
37998
  {
37763
37999
  labelKey: marker('editor.record.form.page.description'),
37764
- sections: [TITLE_SECTION, ABOUT_SECTION, GEOGRAPHICAL_COVERAGE_SECTION],
38000
+ sections: [
38001
+ TITLE_SECTION,
38002
+ ABOUT_SECTION,
38003
+ CLASSIFICATION_SECTION,
38004
+ GEOGRAPHICAL_COVERAGE_SECTION,
38005
+ ],
37765
38006
  },
37766
38007
  {
37767
38008
  labelKey: marker('editor.record.form.page.ressources'),
@@ -37770,7 +38011,6 @@ const DEFAULT_CONFIGURATION = {
37770
38011
  {
37771
38012
  labelKey: marker('editor.record.form.page.accessAndContact'),
37772
38013
  sections: [
37773
- CLASSIFICATION_SECTION,
37774
38014
  USE_AND_ACCESS_CONDITIONS_SECTION,
37775
38015
  DATA_MANAGERS_SECTION,
37776
38016
  METADATA_POINT_OF_CONTACT_SECTION,
@@ -37827,19 +38067,18 @@ const EDITOR_FEATURE_KEY = 'editor';
37827
38067
  const initialEditorState = {
37828
38068
  record: null,
37829
38069
  recordSource: null,
37830
- alreadySavedOnce: false,
37831
38070
  saving: false,
37832
38071
  saveError: null,
37833
38072
  changedSinceSave: false,
37834
38073
  editorConfig: DEFAULT_CONFIGURATION,
37835
38074
  currentPage: 0,
37836
38075
  hasRecordChanged: null,
38076
+ isPublished: true,
37837
38077
  };
37838
- const reducer = createReducer(initialEditorState, on(openRecord, (state, { record, recordSource, alreadySavedOnce }) => ({
38078
+ const reducer = createReducer(initialEditorState, on(openRecord, (state, { record, recordSource }) => ({
37839
38079
  ...state,
37840
38080
  changedSinceSave: false,
37841
38081
  recordSource: recordSource ?? null,
37842
- alreadySavedOnce,
37843
38082
  record,
37844
38083
  })), on(saveRecord, (state) => ({
37845
38084
  ...state,
@@ -37889,6 +38128,9 @@ const reducer = createReducer(initialEditorState, on(openRecord, (state, { recor
37889
38128
  })), on(hasRecordChangedSinceDraftSuccess, (state, { changes }) => ({
37890
38129
  ...state,
37891
38130
  hasRecordChanged: changes,
38131
+ })), on(isPublished, (state, { isPublished }) => ({
38132
+ ...state,
38133
+ isPublished: isPublished,
37892
38134
  })));
37893
38135
  function editorReducer(state, action) {
37894
38136
  return reducer(state, action);
@@ -37900,7 +38142,6 @@ const selectRecordSource = createSelector(selectEditorState, (state) => state.re
37900
38142
  const selectRecordSaving = createSelector(selectEditorState, (state) => state.saving);
37901
38143
  const selectRecordSaveError = createSelector(selectEditorState, (state) => state.saveError);
37902
38144
  const selectRecordChangedSinceSave = createSelector(selectEditorState, (state) => state.changedSinceSave);
37903
- const selectRecordAlreadySavedOnce = createSelector(selectEditorState, (state) => state.alreadySavedOnce);
37904
38145
  const selectEditorConfig = createSelector(selectEditorState, (state) => state.editorConfig);
37905
38146
  const selectCurrentPage = createSelector(selectEditorState, (state) => state.currentPage);
37906
38147
  const selectRecordSections = createSelector(selectEditorState, (state) => {
@@ -37917,6 +38158,7 @@ const selectRecordSections = createSelector(selectEditorState, (state) => {
37917
38158
  }));
37918
38159
  });
37919
38160
  const selectHasRecordChanged = createSelector(selectEditorState, (state) => state.hasRecordChanged);
38161
+ const selectIsPublished = createSelector(selectEditorState, (state) => state.isPublished);
37920
38162
 
37921
38163
  class EditorFacade {
37922
38164
  constructor() {
@@ -37924,7 +38166,6 @@ class EditorFacade {
37924
38166
  this.actions$ = inject(Actions);
37925
38167
  this.record$ = this.store.pipe(select(selectRecord));
37926
38168
  this.recordSource$ = this.store.pipe(select(selectRecordSource));
37927
- this.alreadySavedOnce$ = this.store.pipe(select(selectRecordAlreadySavedOnce));
37928
38169
  this.saving$ = this.store.pipe(select(selectRecordSaving));
37929
38170
  this.saveError$ = this.store.pipe(select(selectRecordSaveError), filter$1((error) => !!error));
37930
38171
  this.saveSuccess$ = this.actions$.pipe(ofType(saveRecordSuccess));
@@ -37934,9 +38175,13 @@ class EditorFacade {
37934
38175
  this.currentPage$ = this.store.pipe(select(selectCurrentPage));
37935
38176
  this.editorConfig$ = this.store.pipe(select(selectEditorConfig));
37936
38177
  this.hasRecordChanged$ = this.store.pipe(select(selectHasRecordChanged));
38178
+ this.isPublished$ = this.store.pipe(select(selectIsPublished));
37937
38179
  }
37938
- openRecord(record, recordSource, alreadySavedOnce) {
37939
- this.store.dispatch(openRecord({ record, recordSource, alreadySavedOnce }));
38180
+ openRecord(record, recordSource) {
38181
+ this.store.dispatch(openRecord({
38182
+ record,
38183
+ recordSource,
38184
+ }));
37940
38185
  this.setCurrentPage(0);
37941
38186
  }
37942
38187
  saveRecord() {
@@ -37957,6 +38202,9 @@ class EditorFacade {
37957
38202
  checkHasRecordChanged(record) {
37958
38203
  this.store.dispatch(hasRecordChangedSinceDraft({ record }));
37959
38204
  }
38205
+ isPublished(isPublished$1) {
38206
+ this.store.dispatch(isPublished({ isPublished: isPublished$1 }));
38207
+ }
37960
38208
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
37961
38209
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorFacade }); }
37962
38210
  }
@@ -37982,7 +38230,7 @@ class EditorService {
37982
38230
  this.recordsRepository = recordsRepository;
37983
38231
  }
37984
38232
  // returns the record as it was when saved, alongside its source
37985
- saveRecord(record, recordSource, fieldsConfig, generateNewUniqueIdentifier = false) {
38233
+ saveRecord(record, recordSource, fieldsConfig) {
37986
38234
  const savedRecord = { ...record };
37987
38235
  const fields = fieldsConfig.pages.flatMap((page) => page.sections.flatMap((section) => section.fields));
37988
38236
  // run onSave processes
@@ -37995,11 +38243,15 @@ class EditorService {
37995
38243
  });
37996
38244
  }
37997
38245
  }
37998
- // if we want a new unique identifier, clear the existing one
37999
- if (generateNewUniqueIdentifier) {
38246
+ let publishToAll = true;
38247
+ // if the record is new, generate a new unique identifier and pass publishToAll as false
38248
+ if (!record.uniqueIdentifier) {
38000
38249
  savedRecord.uniqueIdentifier = null;
38250
+ publishToAll = false;
38001
38251
  }
38002
- return this.recordsRepository.saveRecord(savedRecord, recordSource).pipe(switchMap((uniqueIdentifier) => this.recordsRepository.openRecordForEdition(uniqueIdentifier)), tap$1(() => {
38252
+ return this.recordsRepository
38253
+ .saveRecord(savedRecord, recordSource, publishToAll)
38254
+ .pipe(switchMap((uniqueIdentifier) => this.recordsRepository.openRecordForEdition(uniqueIdentifier)), tap$1(() => {
38003
38255
  // if saving was successful, the original draft can be discarded
38004
38256
  this.recordsRepository.clearRecordDraft(record.uniqueIdentifier);
38005
38257
  }), map$1(([record, recordSource]) => [record, recordSource]));
@@ -38036,22 +38288,21 @@ class EditorEffects {
38036
38288
  this.recordsRepository = inject(RecordsRepositoryInterface);
38037
38289
  this.gn4PlateformService = inject(Gn4PlatformService);
38038
38290
  this.store = inject(Store);
38039
- this.saveRecord$ = createEffect(() => this.actions$.pipe(ofType(saveRecord), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectRecordSource), this.store.select(selectEditorConfig), this.store.select(selectRecordAlreadySavedOnce)), switchMap$1(([, record, recordSource, fieldsConfig, alreadySavedOnce]) => this.editorService
38040
- .saveRecord(record, recordSource, fieldsConfig, !alreadySavedOnce)
38041
- .pipe(switchMap$1(([record, recordSource]) => of(saveRecordSuccess(), openRecord({
38291
+ this.saveRecord$ = createEffect(() => this.actions$.pipe(ofType(saveRecord), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectRecordSource), this.store.select(selectEditorConfig)), switchMap$1(([, record, recordSource, fieldsConfig]) => this.editorService.saveRecord(record, recordSource, fieldsConfig).pipe(switchMap$1(([record, recordSource]) => of(saveRecordSuccess(), openRecord({
38042
38292
  record,
38043
- alreadySavedOnce: true,
38044
38293
  recordSource,
38045
38294
  }))), catchError((error) => of(saveRecordFailure({
38046
38295
  error,
38047
38296
  })))))));
38048
38297
  this.cleanRecordAttachments$ = createEffect(() => this.actions$.pipe(ofType(saveRecordSuccess), withLatestFrom$1(this.store.select(selectRecord)), switchMap$1(([_, record]) => {
38049
- this.gn4PlateformService.cleanRecordAttachments(record).subscribe({
38050
- next: (_) => undefined,
38051
- error: (err) => {
38052
- console.error(err);
38053
- },
38054
- });
38298
+ if (record.uniqueIdentifier !== null) {
38299
+ this.gn4PlateformService.cleanRecordAttachments(record).subscribe({
38300
+ next: (_) => undefined,
38301
+ error: (err) => {
38302
+ console.error(err);
38303
+ },
38304
+ });
38305
+ }
38055
38306
  return EMPTY;
38056
38307
  }), catchError((error) => {
38057
38308
  console.error(error);
@@ -38059,15 +38310,17 @@ class EditorEffects {
38059
38310
  })), { dispatch: false });
38060
38311
  this.markAsChanged$ = createEffect(() => this.actions$.pipe(ofType(updateRecordField), map$1(() => markRecordAsChanged())));
38061
38312
  this.saveRecordDraft$ = createEffect(() => this.actions$.pipe(ofType(updateRecordField), debounceTime$1(1000), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectRecordSource)), switchMap$1(([, record, recordSource]) => this.editorService.saveRecordAsDraft(record, recordSource)), map$1(() => draftSaveSuccess())));
38062
- this.undoRecordDraft$ = createEffect(() => this.actions$.pipe(ofType(undoRecordDraft), withLatestFrom$1(this.store.select(selectRecord)), switchMap$1(([, record]) => this.editorService.undoRecordDraft(record)), map$1(([record, recordSource, alreadySavedOnce]) => openRecord({
38313
+ this.undoRecordDraft$ = createEffect(() => this.actions$.pipe(ofType(undoRecordDraft), withLatestFrom$1(this.store.select(selectRecord)), switchMap$1(([, record]) => this.editorService.undoRecordDraft(record)), map$1(([record, recordSource]) => openRecord({
38063
38314
  record,
38064
- alreadySavedOnce,
38065
38315
  recordSource,
38066
38316
  }))));
38067
38317
  this.checkHasChangesOnOpen$ = createEffect(() => this.actions$.pipe(ofType(openRecord), map$1(({ record }) => this.recordsRepository.recordHasDraft(record.uniqueIdentifier)), filter$1((hasDraft) => hasDraft), map$1(() => markRecordAsChanged())));
38068
38318
  this.hasRecordChangedSinceDraft$ = createEffect(() => this.actions$.pipe(ofType(hasRecordChangedSinceDraft), switchMap$1(({ record }) => this.editorService
38069
38319
  .hasRecordChangedSinceDraft(record)
38070
38320
  .pipe(map$1((changes) => hasRecordChangedSinceDraftSuccess({ changes }))))));
38321
+ this.checkIsRecordPublished$ = createEffect(() => this.actions$.pipe(ofType(openRecord), map$1(({ record }) => record.uniqueIdentifier), switchMap$1((uniqueIdentifier) => this.recordsRepository.getRecordPublicationStatus(uniqueIdentifier)), map$1((isPublished$1) => isPublished({
38322
+ isPublished: isPublished$1,
38323
+ }))));
38071
38324
  }
38072
38325
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
38073
38326
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorEffects }); }
@@ -38560,7 +38813,7 @@ class ImportRecordComponent {
38560
38813
  provideNgIconsConfig({
38561
38814
  size: '1.5em',
38562
38815
  }),
38563
- ], ngImport: i0, template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"importMenuMainSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <li *ngFor=\"let menuItem of importMenuItems\">\n <gn-ui-button\n [attr.data-test]=\"menuItem.dataTest\"\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"menuItem.action()\"\n [disabled]=\"menuItem.disabled\"\n [title]=\"\n (menuItem.disabled ? 'editor.temporary.disabled' : '') | translate\n \"\n ><ng-icon [name]=\"menuItem.icon\"></ng-icon\n ><span>{{ menuItem.label }}</span></gn-ui-button\n >\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'importExternalFile'\">\n <div\n data-test=\"importMenuImportExternalFileSection\"\n class=\"p-6 flex flex-col gap-2 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-button\n data-test=\"importMenuImportExternalFileSectionBackButton\"\n type=\"light\"\n (buttonClick)=\"displayMainMenu()\"\n >\n <ng-icon name=\"iconoirArrowLeft\"></ng-icon>\n </gn-ui-button>\n <span class=\"font-bold\"> {{ externalImportBackLabel }}</span>\n </div>\n <gn-ui-url-input\n (uploadClick)=\"importRecord($event)\"\n [disabled]=\"isRecordImportInProgress\"\n ></gn-ui-url-input>\n </div>\n </ng-container>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showUploadButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38816
+ ], ngImport: i0, template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"importMenuMainSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <li *ngFor=\"let menuItem of importMenuItems\">\n <gn-ui-button\n [attr.data-test]=\"menuItem.dataTest\"\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"menuItem.action()\"\n [disabled]=\"menuItem.disabled\"\n [title]=\"\n (menuItem.disabled ? 'editor.temporary.disabled' : '') | translate\n \"\n ><ng-icon [name]=\"menuItem.icon\"></ng-icon\n ><span>{{ menuItem.label }}</span></gn-ui-button\n >\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'importExternalFile'\">\n <div\n data-test=\"importMenuImportExternalFileSection\"\n class=\"p-6 flex flex-col gap-2 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-button\n data-test=\"importMenuImportExternalFileSectionBackButton\"\n type=\"light\"\n (buttonClick)=\"displayMainMenu()\"\n >\n <ng-icon name=\"iconoirArrowLeft\"></ng-icon>\n </gn-ui-button>\n <span class=\"font-bold\"> {{ externalImportBackLabel }}</span>\n </div>\n <gn-ui-url-input\n (uploadClick)=\"importRecord($event)\"\n [disabled]=\"isRecordImportInProgress\"\n ></gn-ui-url-input>\n </div>\n </ng-container>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38564
38817
  }
38565
38818
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImportRecordComponent, decorators: [{
38566
38819
  type: Component,
@@ -38626,7 +38879,7 @@ class GenericKeywordsComponent {
38626
38879
  provideIcons({
38627
38880
  matWarningAmberOutline,
38628
38881
  }),
38629
- ], ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-autocomplete\n [placeholder]=\"placeholder\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n [preventCompleteOnSelection]=\"false\"\n [minCharacterCount]=\"1\"\n [allowSubmit]=\"false\"\n [clearOnSelection]=\"true\"\n ></gn-ui-autocomplete>\n <div class=\"flex gap-2 flex-wrap\">\n <gn-ui-badge\n *ngFor=\"let keyword of keywords\"\n [removable]=\"true\"\n (badgeRemoveClicked)=\"removeKeyword(keyword)\"\n >{{ keyword.label }}\n\n <ng-icon\n *ngIf=\"isPlaceWithoutExtent(keyword)\"\n [title]=\"'editor.form.placeKeywordWithoutExtent' | translate\"\n class=\"badge-warning\"\n name=\"matWarningAmberOutline\"\n ></ng-icon>\n </gn-ui-badge>\n </div>\n</div>\n", styles: [".badge-warning{font-size:1.4em}\n"], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38882
+ ], ngImport: i0, template: "<div class=\"flex flex-col gap-4\">\n <gn-ui-autocomplete\n [placeholder]=\"placeholder\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n [preventCompleteOnSelection]=\"false\"\n [minCharacterCount]=\"1\"\n [allowSubmit]=\"false\"\n [clearOnSelection]=\"true\"\n ></gn-ui-autocomplete>\n <div class=\"flex gap-2 flex-wrap\">\n <gn-ui-badge\n *ngFor=\"let keyword of keywords\"\n [removable]=\"true\"\n (badgeRemoveClicked)=\"removeKeyword(keyword)\"\n >{{ keyword.label }}\n\n <ng-icon\n *ngIf=\"isPlaceWithoutExtent(keyword)\"\n [title]=\"'editor.form.placeKeywordWithoutExtent' | translate\"\n class=\"badge-warning\"\n name=\"matWarningAmberOutline\"\n ></ng-icon>\n </gn-ui-badge>\n </div>\n</div>\n", styles: [".badge-warning{font-size:1.4em}\n"], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38630
38883
  }
38631
38884
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GenericKeywordsComponent, decorators: [{
38632
38885
  type: Component,
@@ -38642,7 +38895,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
38642
38895
  provideIcons({
38643
38896
  matWarningAmberOutline,
38644
38897
  }),
38645
- ], template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-autocomplete\n [placeholder]=\"placeholder\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n [preventCompleteOnSelection]=\"false\"\n [minCharacterCount]=\"1\"\n [allowSubmit]=\"false\"\n [clearOnSelection]=\"true\"\n ></gn-ui-autocomplete>\n <div class=\"flex gap-2 flex-wrap\">\n <gn-ui-badge\n *ngFor=\"let keyword of keywords\"\n [removable]=\"true\"\n (badgeRemoveClicked)=\"removeKeyword(keyword)\"\n >{{ keyword.label }}\n\n <ng-icon\n *ngIf=\"isPlaceWithoutExtent(keyword)\"\n [title]=\"'editor.form.placeKeywordWithoutExtent' | translate\"\n class=\"badge-warning\"\n name=\"matWarningAmberOutline\"\n ></ng-icon>\n </gn-ui-badge>\n </div>\n</div>\n", styles: [".badge-warning{font-size:1.4em}\n"] }]
38898
+ ], template: "<div class=\"flex flex-col gap-4\">\n <gn-ui-autocomplete\n [placeholder]=\"placeholder\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n [preventCompleteOnSelection]=\"false\"\n [minCharacterCount]=\"1\"\n [allowSubmit]=\"false\"\n [clearOnSelection]=\"true\"\n ></gn-ui-autocomplete>\n <div class=\"flex gap-2 flex-wrap\">\n <gn-ui-badge\n *ngFor=\"let keyword of keywords\"\n [removable]=\"true\"\n (badgeRemoveClicked)=\"removeKeyword(keyword)\"\n >{{ keyword.label }}\n\n <ng-icon\n *ngIf=\"isPlaceWithoutExtent(keyword)\"\n [title]=\"'editor.form.placeKeywordWithoutExtent' | translate\"\n class=\"badge-warning\"\n name=\"matWarningAmberOutline\"\n ></ng-icon>\n </gn-ui-badge>\n </div>\n</div>\n", styles: [".badge-warning{font-size:1.4em}\n"] }]
38646
38899
  }], ctorParameters: () => [{ type: PlatformServiceInterface }], propDecorators: { keywords: [{
38647
38900
  type: Input
38648
38901
  }], keywordTypes: [{
@@ -39097,7 +39350,7 @@ class FormFieldSpatialExtentComponent {
39097
39350
  this.editorFacade.updateRecordField('spatialExtents', spatialExtents);
39098
39351
  }
39099
39352
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldSpatialExtentComponent, deps: [{ token: PlatformServiceInterface }, { token: EditorFacade }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
39100
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldSpatialExtentComponent, isStandalone: true, selector: "gn-ui-form-field-spatial-extent", ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <gn-ui-generic-keywords\n [placeholder]=\"'Search for place keywords'\"\n [keywords]=\"shownKeywords$ | async\"\n [keywordTypes]=\"['place']\"\n (deletedKeyword)=\"handleKeywordDelete($event)\"\n (addedKeyword)=\"handleKeywordAdd($event)\"\n >\n </gn-ui-generic-keywords>\n</div>\n<div class=\"w-full h-96 mt-2\">\n <gn-ui-form-field-map-container\n [spatialExtents]=\"spatialExtents$ | async\"\n ></gn-ui-form-field-map-container>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: GenericKeywordsComponent, selector: "gn-ui-generic-keywords", inputs: ["keywords", "keywordTypes", "placeholder", "allowSubmit"], outputs: ["changedKeywords", "addedKeyword", "deletedKeyword"] }, { kind: "component", type: FormFieldMapContainerComponent, selector: "gn-ui-form-field-map-container", inputs: ["spatialExtents"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39353
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldSpatialExtentComponent, isStandalone: true, selector: "gn-ui-form-field-spatial-extent", ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-generic-keywords\n [placeholder]=\"'Search for place keywords'\"\n [keywords]=\"shownKeywords$ | async\"\n [keywordTypes]=\"['place']\"\n (deletedKeyword)=\"handleKeywordDelete($event)\"\n (addedKeyword)=\"handleKeywordAdd($event)\"\n >\n </gn-ui-generic-keywords>\n <div class=\"w-full h-96 mt-2\">\n <gn-ui-form-field-map-container\n [spatialExtents]=\"spatialExtents$ | async\"\n ></gn-ui-form-field-map-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: GenericKeywordsComponent, selector: "gn-ui-generic-keywords", inputs: ["keywords", "keywordTypes", "placeholder", "allowSubmit"], outputs: ["changedKeywords", "addedKeyword", "deletedKeyword"] }, { kind: "component", type: FormFieldMapContainerComponent, selector: "gn-ui-form-field-map-container", inputs: ["spatialExtents"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39101
39354
  }
39102
39355
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldSpatialExtentComponent, decorators: [{
39103
39356
  type: Component,
@@ -39105,82 +39358,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39105
39358
  CommonModule,
39106
39359
  GenericKeywordsComponent,
39107
39360
  FormFieldMapContainerComponent,
39108
- ], template: "<div class=\"flex flex-col gap-8\">\n <gn-ui-generic-keywords\n [placeholder]=\"'Search for place keywords'\"\n [keywords]=\"shownKeywords$ | async\"\n [keywordTypes]=\"['place']\"\n (deletedKeyword)=\"handleKeywordDelete($event)\"\n (addedKeyword)=\"handleKeywordAdd($event)\"\n >\n </gn-ui-generic-keywords>\n</div>\n<div class=\"w-full h-96 mt-2\">\n <gn-ui-form-field-map-container\n [spatialExtents]=\"spatialExtents$ | async\"\n ></gn-ui-form-field-map-container>\n</div>\n" }]
39361
+ ], template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-generic-keywords\n [placeholder]=\"'Search for place keywords'\"\n [keywords]=\"shownKeywords$ | async\"\n [keywordTypes]=\"['place']\"\n (deletedKeyword)=\"handleKeywordDelete($event)\"\n (addedKeyword)=\"handleKeywordAdd($event)\"\n >\n </gn-ui-generic-keywords>\n <div class=\"w-full h-96 mt-2\">\n <gn-ui-form-field-map-container\n [spatialExtents]=\"spatialExtents$ | async\"\n ></gn-ui-form-field-map-container>\n </div>\n</div>\n" }]
39109
39362
  }], ctorParameters: () => [{ type: PlatformServiceInterface }, { type: EditorFacade }, { type: i1$1.TranslateService }] });
39110
39363
 
39111
- const RoleValues = [
39112
- 'unspecified',
39113
- 'other',
39114
- 'author', // Party who authored the resource
39115
- 'collaborator', // party who assists with the generation of the resource other than the principal investigator
39116
- 'contributor', // party contributing to the resource
39117
- 'custodian', // Party that accepts accountability and responsibility for the data and ensures appropriate care and maintenance of the resource
39118
- 'distributor', // Party who distributes the resource
39119
- 'editor', // party who reviewed or modified the resource to improve the content
39120
- 'funder', // party providing monetary support for the resource
39121
- 'mediator', // a class of entity that mediates access to the resource and for whom the resource is intended or useful
39122
- 'originator', // Party who created the resource
39123
- 'owner', // Party that owns the resource
39124
- 'point_of_contact', // Party who can be contacted for acquiring knowledge about or acquisition of the resource
39125
- 'principal_investigator', // Key party responsible for gathering information and conducting research
39126
- 'processor', // Party who has processed the data in a manner such that the resource has been modified
39127
- 'publisher', // Party who published the resource
39128
- 'resource_provider', // Party that supplies the resource
39129
- 'rights_holder', // party owning or managing rights over the resource
39130
- 'sponsor', // party that sponsors the resource
39131
- 'stakeholder', // party who has an interest in the resource or the use of the resource
39132
- 'user', // Party who uses the resource
39133
- ];
39134
- const RoleLabels = new Map([
39135
- ['unspecified', marker('domain.contact.role.unspecified')],
39136
- ['other', marker('domain.contact.role.other')],
39137
- ['author', marker('domain.contact.role.author')],
39138
- ['collaborator', marker('domain.contact.role.collaborator')],
39139
- ['contributor', marker('domain.contact.role.contributor')],
39140
- ['custodian', marker('domain.contact.role.custodian')],
39141
- ['distributor', marker('domain.contact.role.distributor')],
39142
- ['editor', marker('domain.contact.role.editor')],
39143
- ['funder', marker('domain.contact.role.funder')],
39144
- ['mediator', marker('domain.contact.role.mediator')],
39145
- ['originator', marker('domain.contact.role.originator')],
39146
- ['owner', marker('domain.contact.role.owner')],
39147
- ['point_of_contact', marker('domain.contact.role.point_of_contact')],
39148
- [
39149
- 'principal_investigator',
39150
- marker('domain.contact.role.principal_investigator'),
39151
- ],
39152
- ['processor', marker('domain.contact.role.processor')],
39153
- ['publisher', marker('domain.contact.role.publisher')],
39154
- ['resource_provider', marker('domain.contact.role.resource_provider')],
39155
- ['rights_holder', marker('domain.contact.role.rights_holder')],
39156
- ['sponsor', marker('domain.contact.role.sponsor')],
39157
- ['stakeholder', marker('domain.contact.role.stakeholder')],
39158
- ['user', marker('domain.contact.role.user')],
39159
- ]);
39160
-
39161
- marker('domain.record.updateFrequency.unknown');
39162
- marker('domain.record.updateFrequency.notPlanned');
39163
- marker('domain.record.updateFrequency.asNeeded');
39164
- marker('domain.record.updateFrequency.irregular');
39165
- marker('domain.record.updateFrequency.continual');
39166
- marker('domain.record.updateFrequency.periodic');
39167
- marker('domain.record.updateFrequency.day');
39168
- marker('domain.record.updateFrequency.week');
39169
- marker('domain.record.updateFrequency.month');
39170
- marker('domain.record.updateFrequency.year');
39171
- marker('domain.record.status.completed');
39172
- marker('domain.record.status.ongoing');
39173
- marker('domain.record.status.under_development');
39174
- marker('domain.record.status.deprecated');
39175
- marker('domain.record.status.removed');
39176
- const RecordStatusValues = [
39177
- 'completed',
39178
- 'ongoing',
39179
- 'under_development',
39180
- 'deprecated',
39181
- 'removed',
39182
- ];
39183
-
39184
39364
  class ContactCardComponent {
39185
39365
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContactCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39186
39366
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ContactCardComponent, isStandalone: true, selector: "gn-ui-contact-card", inputs: { contact: "contact" }, ngImport: i0, template: "<div class=\"gn-ui-card\">\n <gn-ui-thumbnail\n class=\"w-[56px] h-[56px] rounded-[4px] overflow-hidden shrink-0\"\n [thumbnailUrl]=\"contact.organization?.logoUrl?.href\"\n [fit]=\"'contain'\"\n ></gn-ui-thumbnail>\n <div class=\"flex flex-col w-full overflow-hidden leading-snug\">\n <div class=\"text-[16px] font-bold text-main\" data-test=\"contactCardName\">\n {{ contact.firstName }} {{ contact.lastName }}\n </div>\n <div class=\"text-[14px] text-gray-900\" data-test=\"contactCardEmail\">\n {{ contact.email }}\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -39499,20 +39679,18 @@ class FormFieldOnlineLinkResourcesComponent {
39499
39679
  this.allResources = onlineResources;
39500
39680
  this.linkResources = onlineResources.filter((res) => res.type === 'link');
39501
39681
  }
39502
- constructor(notificationsService, translateService, platformService, cd, dialog, editorFacade) {
39682
+ constructor(notificationsService, translateService, platformService, cd, dialog) {
39503
39683
  this.notificationsService = notificationsService;
39504
39684
  this.translateService = translateService;
39505
39685
  this.platformService = platformService;
39506
39686
  this.cd = cd;
39507
39687
  this.dialog = dialog;
39508
- this.editorFacade = editorFacade;
39509
39688
  this.valueChange = new EventEmitter();
39510
39689
  this.allResources = [];
39511
39690
  this.linkResources = [];
39512
39691
  this.uploadProgress = undefined;
39513
39692
  this.uploadSubscription = null;
39514
39693
  this.MAX_UPLOAD_SIZE_MB = MAX_UPLOAD_SIZE_MB;
39515
- this.disabled$ = this.editorFacade.alreadySavedOnce$.pipe(map$2((alreadySavedOnce) => !alreadySavedOnce));
39516
39694
  }
39517
39695
  handleFileChange(file) {
39518
39696
  this.uploadProgress = 0;
@@ -39606,8 +39784,8 @@ class FormFieldOnlineLinkResourcesComponent {
39606
39784
  ]);
39607
39785
  });
39608
39786
  }
39609
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineLinkResourcesComponent, deps: [{ token: NotificationsService }, { token: i1$1.TranslateService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: i1$b.MatDialog }, { token: EditorFacade }], target: i0.ɵɵFactoryTarget.Component }); }
39610
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldOnlineLinkResourcesComponent, isStandalone: true, selector: "gn-ui-form-field-online-link-resources", inputs: { metadataUuid: "metadataUuid", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col\">\n <gn-ui-file-input\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleUrlChange($event)\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-file-input>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"linkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showUploadButton]=\"false\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-url-input>\n </div>\n </ng-template>\n <div\n *ngIf=\"disabled$ | async\"\n class=\"p-4 text-sm border border-primary bg-primary-lightest rounded-lg\"\n translate\n data-test=\"disabled-message\"\n >\n editor.record.form.field.draft.only.disabled\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: FileInputComponent, selector: "gn-ui-file-input", inputs: ["maxSizeMB", "uploadProgress", "disabled"], outputs: ["fileChange", "urlChange", "uploadCancel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: OnlineResourceCardComponent, selector: "gn-ui-online-resource-card", inputs: ["onlineResource"], outputs: ["modifyClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showUploadButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39787
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineLinkResourcesComponent, deps: [{ token: NotificationsService }, { token: i1$1.TranslateService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: i1$b.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
39788
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldOnlineLinkResourcesComponent, isStandalone: true, selector: "gn-ui-form-field-online-link-resources", inputs: { metadataUuid: "metadataUuid", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col\">\n <gn-ui-file-input\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleUrlChange($event)\"\n ></gn-ui-file-input>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"linkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [disabled]=\"disabled$ | async\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: FileInputComponent, selector: "gn-ui-file-input", inputs: ["maxSizeMB", "uploadProgress", "disabled"], outputs: ["fileChange", "urlChange", "uploadCancel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: OnlineResourceCardComponent, selector: "gn-ui-online-resource-card", inputs: ["onlineResource"], outputs: ["modifyClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39611
39789
  }
39612
39790
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineLinkResourcesComponent, decorators: [{
39613
39791
  type: Component,
@@ -39620,8 +39798,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39620
39798
  TextAreaComponent,
39621
39799
  UrlInputComponent,
39622
39800
  TranslateModule,
39623
- ], template: "<div class=\"flex flex-col\">\n <gn-ui-file-input\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleUrlChange($event)\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-file-input>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"linkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showUploadButton]=\"false\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-url-input>\n </div>\n </ng-template>\n <div\n *ngIf=\"disabled$ | async\"\n class=\"p-4 text-sm border border-primary bg-primary-lightest rounded-lg\"\n translate\n data-test=\"disabled-message\"\n >\n editor.record.form.field.draft.only.disabled\n </div>\n</div>\n" }]
39624
- }], ctorParameters: () => [{ type: NotificationsService }, { type: i1$1.TranslateService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: i1$b.MatDialog }, { type: EditorFacade }], propDecorators: { metadataUuid: [{
39801
+ ], template: "<div class=\"flex flex-col\">\n <gn-ui-file-input\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleUrlChange($event)\"\n ></gn-ui-file-input>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"linkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [disabled]=\"disabled$ | async\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </div>\n </ng-template>\n</div>\n" }]
39802
+ }], ctorParameters: () => [{ type: NotificationsService }, { type: i1$1.TranslateService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: i1$b.MatDialog }], propDecorators: { metadataUuid: [{
39625
39803
  type: Input
39626
39804
  }], value: [{
39627
39805
  type: Input
@@ -39635,6 +39813,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39635
39813
  class OnlineServiceResourceInputComponent {
39636
39814
  constructor() {
39637
39815
  this.disabled = false;
39816
+ this.urlChange = new EventEmitter();
39817
+ this.identifierSubmit = new EventEmitter();
39638
39818
  this.protocolOptions = [
39639
39819
  {
39640
39820
  label: 'OGC API',
@@ -39670,25 +39850,57 @@ class OnlineServiceResourceInputComponent {
39670
39850
  this.selectedProtocol =
39671
39851
  this.protocolOptions.find((option) => option.value === this.service.accessServiceProtocol)?.value ?? 'other';
39672
39852
  }
39853
+ handleUrlChange(url) {
39854
+ this.url = url;
39855
+ }
39856
+ submitIdentifier(identifier) {
39857
+ if (!identifier)
39858
+ return;
39859
+ this.identifierSubmit.emit({ url: this.url, identifier });
39860
+ this.service.identifierInService = null;
39861
+ }
39862
+ getIdentifierPlaceholder() {
39863
+ const baseKey = 'editor.record.form.field.onlineResource.edit.identifier.placeholder';
39864
+ return this.service.accessServiceProtocol === 'wps'
39865
+ ? `${baseKey}.wps`
39866
+ : baseKey;
39867
+ }
39673
39868
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OnlineServiceResourceInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39674
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OnlineServiceResourceInputComponent, isStandalone: true, selector: "gn-ui-online-service-resource-input", inputs: { service: "service", protocolHint: "protocolHint", disabled: "disabled" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-row justify-between\">\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.protocol\n </h3>\n <span\n *ngIf=\"protocolHint\"\n class=\"material-symbols-outlined m-2 gn-ui-icon-small\"\n [matTooltip]=\"protocolHint\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n</div>\n<div class=\"flex flex-row items-center gap-[16px] h-[48px]\">\n <mat-radio-group\n aria-labelledby=\"example-radio-group-label\"\n class=\"flex flex-row gap-[8px]\"\n [(ngModel)]=\"service.accessServiceProtocol\"\n [disabled]=\"disabled\"\n >\n <mat-radio-button\n *ngFor=\"let protocolOption of protocolOptions\"\n [value]=\"protocolOption.value\"\n >\n {{ protocolOption.label | translate }}\n </mat-radio-button>\n </mat-radio-group>\n</div>\n<gn-ui-text-input\n [(value)]=\"service.identifierInService\"\n data-cy=\"identifier-in-service\"\n [disabled]=\"disabled\"\n></gn-ui-text-input>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1$4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i3$2.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i3$2.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39869
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OnlineServiceResourceInputComponent, isStandalone: true, selector: "gn-ui-online-service-resource-input", inputs: { service: "service", protocolHint: "protocolHint", disabled: "disabled" }, outputs: { urlChange: "urlChange", identifierSubmit: "identifierSubmit" }, providers: [
39870
+ provideIcons({ iconoirCloudUpload }),
39871
+ provideNgIconsConfig({
39872
+ size: '1.5em',
39873
+ }),
39874
+ ], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-row justify-between\">\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.protocol\n </h3>\n <span\n *ngIf=\"protocolHint\"\n class=\"material-symbols-outlined m-2 gn-ui-icon-small\"\n [matTooltip]=\"protocolHint\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n</div>\n<div class=\"flex flex-row items-center gap-4 h-[48px]\">\n <mat-radio-group\n aria-labelledby=\"example-radio-group-label\"\n class=\"flex flex-row gap-[8px]\"\n [(ngModel)]=\"service.accessServiceProtocol\"\n [disabled]=\"disabled\"\n >\n <mat-radio-button\n *ngFor=\"let protocolOption of protocolOptions\"\n [value]=\"protocolOption.value\"\n >\n {{ protocolOption.label | translate }}\n </mat-radio-button>\n </mat-radio-group>\n</div>\n\n<div class=\"flex flex-col gap-4\">\n <gn-ui-url-input\n class=\"w-full\"\n (valueChange)=\"handleUrlChange($event)\"\n [disabled]=\"disabled\"\n [value]=\"url\"\n [showValidateButton]=\"false\"\n >\n <ng-icon name=\"iconoirCloudUpload\"></ng-icon>\n </gn-ui-url-input>\n\n <gn-ui-text-input\n class=\"grow border-b border-gray-300 pb-4\"\n [(value)]=\"service.identifierInService\"\n [placeholder]=\"getIdentifierPlaceholder() | translate\"\n data-cy=\"identifier-in-service\"\n [disabled]=\"disabled\"\n ></gn-ui-text-input>\n\n <gn-ui-button\n (buttonClick)=\"submitIdentifier(service.identifierInService)\"\n [disabled]=\"disabled || !service.identifierInService || !url\"\n type=\"primary\"\n >\n <span class=\"text-white font-bold\" translate\n >editor.record.form.field.onlineResource.edit.identifier.submit</span\n >\n </gn-ui-button>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1$4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i4$1.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i4$1.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39675
39875
  }
39676
39876
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OnlineServiceResourceInputComponent, decorators: [{
39677
39877
  type: Component,
39678
39878
  args: [{ selector: 'gn-ui-online-service-resource-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
39879
+ ButtonComponent,
39679
39880
  CommonModule,
39881
+ FormsModule,
39680
39882
  MatTooltipModule,
39681
39883
  MatRadioModule,
39682
- FormsModule,
39884
+ NgIconComponent,
39683
39885
  TextInputComponent,
39684
39886
  TranslateModule,
39685
- ], template: "<div class=\"flex flex-row justify-between\">\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.protocol\n </h3>\n <span\n *ngIf=\"protocolHint\"\n class=\"material-symbols-outlined m-2 gn-ui-icon-small\"\n [matTooltip]=\"protocolHint\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n</div>\n<div class=\"flex flex-row items-center gap-[16px] h-[48px]\">\n <mat-radio-group\n aria-labelledby=\"example-radio-group-label\"\n class=\"flex flex-row gap-[8px]\"\n [(ngModel)]=\"service.accessServiceProtocol\"\n [disabled]=\"disabled\"\n >\n <mat-radio-button\n *ngFor=\"let protocolOption of protocolOptions\"\n [value]=\"protocolOption.value\"\n >\n {{ protocolOption.label | translate }}\n </mat-radio-button>\n </mat-radio-group>\n</div>\n<gn-ui-text-input\n [(value)]=\"service.identifierInService\"\n data-cy=\"identifier-in-service\"\n [disabled]=\"disabled\"\n></gn-ui-text-input>\n" }]
39887
+ UrlInputComponent,
39888
+ ], providers: [
39889
+ provideIcons({ iconoirCloudUpload }),
39890
+ provideNgIconsConfig({
39891
+ size: '1.5em',
39892
+ }),
39893
+ ], template: "<div class=\"flex flex-row justify-between\">\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.protocol\n </h3>\n <span\n *ngIf=\"protocolHint\"\n class=\"material-symbols-outlined m-2 gn-ui-icon-small\"\n [matTooltip]=\"protocolHint\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n</div>\n<div class=\"flex flex-row items-center gap-4 h-[48px]\">\n <mat-radio-group\n aria-labelledby=\"example-radio-group-label\"\n class=\"flex flex-row gap-[8px]\"\n [(ngModel)]=\"service.accessServiceProtocol\"\n [disabled]=\"disabled\"\n >\n <mat-radio-button\n *ngFor=\"let protocolOption of protocolOptions\"\n [value]=\"protocolOption.value\"\n >\n {{ protocolOption.label | translate }}\n </mat-radio-button>\n </mat-radio-group>\n</div>\n\n<div class=\"flex flex-col gap-4\">\n <gn-ui-url-input\n class=\"w-full\"\n (valueChange)=\"handleUrlChange($event)\"\n [disabled]=\"disabled\"\n [value]=\"url\"\n [showValidateButton]=\"false\"\n >\n <ng-icon name=\"iconoirCloudUpload\"></ng-icon>\n </gn-ui-url-input>\n\n <gn-ui-text-input\n class=\"grow border-b border-gray-300 pb-4\"\n [(value)]=\"service.identifierInService\"\n [placeholder]=\"getIdentifierPlaceholder() | translate\"\n data-cy=\"identifier-in-service\"\n [disabled]=\"disabled\"\n ></gn-ui-text-input>\n\n <gn-ui-button\n (buttonClick)=\"submitIdentifier(service.identifierInService)\"\n [disabled]=\"disabled || !service.identifierInService || !url\"\n type=\"primary\"\n >\n <span class=\"text-white font-bold\" translate\n >editor.record.form.field.onlineResource.edit.identifier.submit</span\n >\n </gn-ui-button>\n</div>\n" }]
39686
39894
  }], propDecorators: { service: [{
39687
39895
  type: Input
39688
39896
  }], protocolHint: [{
39689
39897
  type: Input
39690
39898
  }], disabled: [{
39691
39899
  type: Input
39900
+ }], urlChange: [{
39901
+ type: Output
39902
+ }], identifierSubmit: [{
39903
+ type: Output
39692
39904
  }] } });
39693
39905
 
39694
39906
  class FormFieldOnlineResourcesComponent {
@@ -39696,13 +39908,12 @@ class FormFieldOnlineResourcesComponent {
39696
39908
  this.allResources = onlineResources;
39697
39909
  this.notLinkResources = onlineResources.filter((res) => res.type !== 'link');
39698
39910
  }
39699
- constructor(notificationsService, translateService, platformService, cd, dialog, editorFacade) {
39911
+ constructor(notificationsService, translateService, platformService, cd, dialog) {
39700
39912
  this.notificationsService = notificationsService;
39701
39913
  this.translateService = translateService;
39702
39914
  this.platformService = platformService;
39703
39915
  this.cd = cd;
39704
39916
  this.dialog = dialog;
39705
- this.editorFacade = editorFacade;
39706
39917
  this.valueChange = new EventEmitter();
39707
39918
  this.typeOptions = [
39708
39919
  {
@@ -39727,7 +39938,6 @@ class FormFieldOnlineResourcesComponent {
39727
39938
  identifierInService: '',
39728
39939
  };
39729
39940
  this.MAX_UPLOAD_SIZE_MB = MAX_UPLOAD_SIZE_MB;
39730
- this.disabled$ = this.editorFacade.alreadySavedOnce$.pipe(map$2((alreadySavedOnce) => !alreadySavedOnce));
39731
39941
  }
39732
39942
  onSelectedTypeChange(selectedType) {
39733
39943
  this.selectedType = selectedType;
@@ -39786,6 +39996,15 @@ class FormFieldOnlineResourcesComponent {
39786
39996
  },
39787
39997
  ]);
39788
39998
  }
39999
+ handleIdentifierSubmit(payload) {
40000
+ this.valueChange.emit([
40001
+ ...this.allResources,
40002
+ {
40003
+ ...this.newService,
40004
+ url: new URL(payload.url),
40005
+ },
40006
+ ]);
40007
+ }
39789
40008
  handleServiceModify(oldService, newService) {
39790
40009
  oldService.accessServiceProtocol = newService.accessServiceProtocol;
39791
40010
  oldService.identifierInService = newService.identifierInService;
@@ -39838,8 +40057,8 @@ class FormFieldOnlineResourcesComponent {
39838
40057
  ]);
39839
40058
  });
39840
40059
  }
39841
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineResourcesComponent, deps: [{ token: NotificationsService }, { token: i1$1.TranslateService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: i1$b.MatDialog }, { token: EditorFacade }], target: i0.ɵɵFactoryTarget.Component }); }
39842
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldOnlineResourcesComponent, isStandalone: true, selector: "gn-ui-form-field-online-resources", inputs: { metadataUuid: "metadataUuid", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col\">\n <gn-ui-switch-toggle\n [options]=\"typeOptions\"\n (selectedValue)=\"onSelectedTypeChange($event.value)\"\n extraClasses=\"grow text-sm\"\n data-cy=\"online-resources-type\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-switch-toggle>\n <div class=\"h-[8px]\"></div>\n <gn-ui-file-input\n *ngIf=\"selectedType === 'download'\"\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleDownloadUrlChange($event)\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-file-input>\n <div\n *ngIf=\"selectedType === 'service'\"\n class=\"w-full border-2 border-dashed rounded-lg p-6 flex flex-col gap-[16px]\"\n >\n <gn-ui-online-service-resource-input\n [service]=\"newService\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-online-service-resource-input>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n (uploadClick)=\"handleServiceUrlChange($event)\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-url-input>\n </div>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"notLinkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <ng-container *ngIf=\"onlineResource.type === 'service'\">\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-online-service-resource-input\n [service]=\"onlineResource\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-online-service-resource-input>\n </ng-container>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showUploadButton]=\"false\"\n ></gn-ui-url-input>\n </div>\n </ng-template>\n <div\n *ngIf=\"disabled$ | async\"\n class=\"p-4 text-sm border border-primary bg-primary-lightest rounded-lg\"\n translate\n data-test=\"disabled-message\"\n >\n editor.record.form.field.draft.only.disabled\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: SwitchToggleComponent, selector: "gn-ui-switch-toggle", inputs: ["options", "ariaLabel", "extraClasses", "disabled"], outputs: ["selectedValue"] }, { kind: "component", type: FileInputComponent, selector: "gn-ui-file-input", inputs: ["maxSizeMB", "uploadProgress", "disabled"], outputs: ["fileChange", "urlChange", "uploadCancel"] }, { kind: "component", type: OnlineServiceResourceInputComponent, selector: "gn-ui-online-service-resource-input", inputs: ["service", "protocolHint", "disabled"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showUploadButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: OnlineResourceCardComponent, selector: "gn-ui-online-resource-card", inputs: ["onlineResource"], outputs: ["modifyClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40060
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineResourcesComponent, deps: [{ token: NotificationsService }, { token: i1$1.TranslateService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: i1$b.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
40061
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldOnlineResourcesComponent, isStandalone: true, selector: "gn-ui-form-field-online-resources", inputs: { metadataUuid: "metadataUuid", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col\">\n <gn-ui-switch-toggle\n [options]=\"typeOptions\"\n (selectedValue)=\"onSelectedTypeChange($event.value)\"\n extraClasses=\"grow text-sm\"\n data-cy=\"online-resources-type\"\n ></gn-ui-switch-toggle>\n <div class=\"h-[8px]\"></div>\n <gn-ui-file-input\n *ngIf=\"selectedType === 'download'\"\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleDownloadUrlChange($event)\"\n ></gn-ui-file-input>\n <div\n *ngIf=\"selectedType === 'service'\"\n class=\"w-full border-2 border-dashed rounded-lg p-6 flex flex-col gap-[16px]\"\n >\n <gn-ui-online-service-resource-input\n [service]=\"newService\"\n [disabled]=\"disabled$ | async\"\n (urlChange)=\"handleServiceUrlChange($event)\"\n (identifierSubmit)=\"handleIdentifierSubmit($event)\"\n ></gn-ui-online-service-resource-input>\n </div>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"notLinkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <ng-container *ngIf=\"onlineResource.type === 'service'\">\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-online-service-resource-input\n [service]=\"onlineResource\"\n ></gn-ui-online-service-resource-input>\n </ng-container>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: SwitchToggleComponent, selector: "gn-ui-switch-toggle", inputs: ["options", "ariaLabel", "extraClasses", "disabled"], outputs: ["selectedValue"] }, { kind: "component", type: FileInputComponent, selector: "gn-ui-file-input", inputs: ["maxSizeMB", "uploadProgress", "disabled"], outputs: ["fileChange", "urlChange", "uploadCancel"] }, { kind: "component", type: OnlineServiceResourceInputComponent, selector: "gn-ui-online-service-resource-input", inputs: ["service", "protocolHint", "disabled"], outputs: ["urlChange", "identifierSubmit"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: OnlineResourceCardComponent, selector: "gn-ui-online-resource-card", inputs: ["onlineResource"], outputs: ["modifyClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39843
40062
  }
39844
40063
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineResourcesComponent, decorators: [{
39845
40064
  type: Component,
@@ -39854,8 +40073,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39854
40073
  TextInputComponent,
39855
40074
  TextAreaComponent,
39856
40075
  TranslateModule,
39857
- ], template: "<div class=\"flex flex-col\">\n <gn-ui-switch-toggle\n [options]=\"typeOptions\"\n (selectedValue)=\"onSelectedTypeChange($event.value)\"\n extraClasses=\"grow text-sm\"\n data-cy=\"online-resources-type\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-switch-toggle>\n <div class=\"h-[8px]\"></div>\n <gn-ui-file-input\n *ngIf=\"selectedType === 'download'\"\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleDownloadUrlChange($event)\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-file-input>\n <div\n *ngIf=\"selectedType === 'service'\"\n class=\"w-full border-2 border-dashed rounded-lg p-6 flex flex-col gap-[16px]\"\n >\n <gn-ui-online-service-resource-input\n [service]=\"newService\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-online-service-resource-input>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n (uploadClick)=\"handleServiceUrlChange($event)\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-url-input>\n </div>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"notLinkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <ng-container *ngIf=\"onlineResource.type === 'service'\">\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-online-service-resource-input\n [service]=\"onlineResource\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-online-service-resource-input>\n </ng-container>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showUploadButton]=\"false\"\n ></gn-ui-url-input>\n </div>\n </ng-template>\n <div\n *ngIf=\"disabled$ | async\"\n class=\"p-4 text-sm border border-primary bg-primary-lightest rounded-lg\"\n translate\n data-test=\"disabled-message\"\n >\n editor.record.form.field.draft.only.disabled\n </div>\n</div>\n" }]
39858
- }], ctorParameters: () => [{ type: NotificationsService }, { type: i1$1.TranslateService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: i1$b.MatDialog }, { type: EditorFacade }], propDecorators: { metadataUuid: [{
40076
+ ], template: "<div class=\"flex flex-col\">\n <gn-ui-switch-toggle\n [options]=\"typeOptions\"\n (selectedValue)=\"onSelectedTypeChange($event.value)\"\n extraClasses=\"grow text-sm\"\n data-cy=\"online-resources-type\"\n ></gn-ui-switch-toggle>\n <div class=\"h-[8px]\"></div>\n <gn-ui-file-input\n *ngIf=\"selectedType === 'download'\"\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleDownloadUrlChange($event)\"\n ></gn-ui-file-input>\n <div\n *ngIf=\"selectedType === 'service'\"\n class=\"w-full border-2 border-dashed rounded-lg p-6 flex flex-col gap-[16px]\"\n >\n <gn-ui-online-service-resource-input\n [service]=\"newService\"\n [disabled]=\"disabled$ | async\"\n (urlChange)=\"handleServiceUrlChange($event)\"\n (identifierSubmit)=\"handleIdentifierSubmit($event)\"\n ></gn-ui-online-service-resource-input>\n </div>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"notLinkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <ng-container *ngIf=\"onlineResource.type === 'service'\">\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-online-service-resource-input\n [service]=\"onlineResource\"\n ></gn-ui-online-service-resource-input>\n </ng-container>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </div>\n </ng-template>\n</div>\n" }]
40077
+ }], ctorParameters: () => [{ type: NotificationsService }, { type: i1$1.TranslateService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: i1$b.MatDialog }], propDecorators: { metadataUuid: [{
39859
40078
  type: Input
39860
40079
  }], value: [{
39861
40080
  type: Input
@@ -39911,14 +40130,12 @@ class FormFieldOverviewsComponent {
39911
40130
  description: '',
39912
40131
  });
39913
40132
  }
39914
- constructor(platformService, notificationsService, translateService, cd, editorFacade) {
40133
+ constructor(platformService, notificationsService, translateService, cd) {
39915
40134
  this.platformService = platformService;
39916
40135
  this.notificationsService = notificationsService;
39917
40136
  this.translateService = translateService;
39918
40137
  this.cd = cd;
39919
- this.editorFacade = editorFacade;
39920
40138
  this.valueChange = new EventEmitter();
39921
- this.disabled$ = this.editorFacade.alreadySavedOnce$.pipe(map$2((alreadySavedOnce) => !alreadySavedOnce));
39922
40139
  this.uploadProgress = undefined;
39923
40140
  this.uploadSubscription = null;
39924
40141
  this.MAX_UPLOAD_SIZE_MB = MAX_UPLOAD_SIZE_MB;
@@ -39985,13 +40202,13 @@ class FormFieldOverviewsComponent {
39985
40202
  emitOverview(overView) {
39986
40203
  this.valueChange.emit(overView ? [overView] : []);
39987
40204
  }
39988
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOverviewsComponent, deps: [{ token: PlatformServiceInterface }, { token: NotificationsService }, { token: i1$1.TranslateService }, { token: i0.ChangeDetectorRef }, { token: EditorFacade }], target: i0.ɵɵFactoryTarget.Component }); }
39989
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldOverviewsComponent, isStandalone: true, selector: "gn-ui-form-field-overviews", inputs: { metadataUuid: "metadataUuid", value: "value" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"flex flex-col gap-2\">\n <gn-ui-image-input\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n [previewUrl]=\"firstOverview.url\"\n [altText]=\"firstOverview.description\"\n (fileChange)=\"handleFileChange($event)\"\n (urlChange)=\"handleUrlChange($event)\"\n (altTextChange)=\"handleAltTextChange($event)\"\n (delete)=\"handleDelete()\"\n [uploadProgress]=\"uploadProgress\"\n (uploadCancel)=\"handleUploadCancel()\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-image-input>\n <div\n *ngIf=\"disabled$ | async\"\n class=\"p-4 text-sm border border-primary bg-primary-lightest rounded-lg\"\n translate\n data-test=\"disabled-message\"\n >\n editor.record.form.field.draft.only.disabled\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: ImageInputComponent, selector: "gn-ui-image-input", inputs: ["maxSizeMB", "previewUrl", "altText", "uploadProgress", "uploadError", "disabled"], outputs: ["fileChange", "urlChange", "uploadCancel", "delete", "altTextChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40205
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOverviewsComponent, deps: [{ token: PlatformServiceInterface }, { token: NotificationsService }, { token: i1$1.TranslateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
40206
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldOverviewsComponent, isStandalone: true, selector: "gn-ui-form-field-overviews", inputs: { metadataUuid: "metadataUuid", value: "value" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"flex flex-col gap-2\">\n <gn-ui-image-input\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n [previewUrl]=\"firstOverview.url\"\n [altText]=\"firstOverview.description\"\n (fileChange)=\"handleFileChange($event)\"\n (urlChange)=\"handleUrlChange($event)\"\n (altTextChange)=\"handleAltTextChange($event)\"\n (delete)=\"handleDelete()\"\n [uploadProgress]=\"uploadProgress\"\n (uploadCancel)=\"handleUploadCancel()\"\n ></gn-ui-image-input>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ImageInputComponent, selector: "gn-ui-image-input", inputs: ["maxSizeMB", "previewUrl", "altText", "uploadProgress", "uploadError", "disabled"], outputs: ["fileChange", "urlChange", "uploadCancel", "delete", "altTextChange"] }, { kind: "ngmodule", type: TranslateModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39990
40207
  }
39991
40208
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOverviewsComponent, decorators: [{
39992
40209
  type: Component,
39993
- args: [{ selector: 'gn-ui-form-field-overviews', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, ImageInputComponent, TranslateModule], template: "<div class=\"flex flex-col gap-2\">\n <gn-ui-image-input\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n [previewUrl]=\"firstOverview.url\"\n [altText]=\"firstOverview.description\"\n (fileChange)=\"handleFileChange($event)\"\n (urlChange)=\"handleUrlChange($event)\"\n (altTextChange)=\"handleAltTextChange($event)\"\n (delete)=\"handleDelete()\"\n [uploadProgress]=\"uploadProgress\"\n (uploadCancel)=\"handleUploadCancel()\"\n [disabled]=\"disabled$ | async\"\n ></gn-ui-image-input>\n <div\n *ngIf=\"disabled$ | async\"\n class=\"p-4 text-sm border border-primary bg-primary-lightest rounded-lg\"\n translate\n data-test=\"disabled-message\"\n >\n editor.record.form.field.draft.only.disabled\n </div>\n</div>\n" }]
39994
- }], ctorParameters: () => [{ type: PlatformServiceInterface }, { type: NotificationsService }, { type: i1$1.TranslateService }, { type: i0.ChangeDetectorRef }, { type: EditorFacade }], propDecorators: { metadataUuid: [{
40210
+ args: [{ selector: 'gn-ui-form-field-overviews', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, ImageInputComponent, TranslateModule], template: "<div class=\"flex flex-col gap-2\">\n <gn-ui-image-input\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n [previewUrl]=\"firstOverview.url\"\n [altText]=\"firstOverview.description\"\n (fileChange)=\"handleFileChange($event)\"\n (urlChange)=\"handleUrlChange($event)\"\n (altTextChange)=\"handleAltTextChange($event)\"\n (delete)=\"handleDelete()\"\n [uploadProgress]=\"uploadProgress\"\n (uploadCancel)=\"handleUploadCancel()\"\n ></gn-ui-image-input>\n</div>\n" }]
40211
+ }], ctorParameters: () => [{ type: PlatformServiceInterface }, { type: NotificationsService }, { type: i1$1.TranslateService }, { type: i0.ChangeDetectorRef }], propDecorators: { metadataUuid: [{
39995
40212
  type: Input
39996
40213
  }], value: [{
39997
40214
  type: Input
@@ -39999,9 +40216,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39999
40216
  type: Output
40000
40217
  }] } });
40001
40218
 
40219
+ const initialListValues = updateFrequencyCodeValues.filter((code) => !['unknown', 'notPlanned', 'asNeeded', 'irregular'].includes(code));
40002
40220
  class FormFieldUpdateFrequencyComponent {
40003
40221
  get planned() {
40004
- return typeof this.value !== 'string';
40222
+ return this.value && this.value !== 'notPlanned' && this.value !== 'unknown';
40005
40223
  }
40006
40224
  constructor(translateService) {
40007
40225
  this.translateService = translateService;
@@ -40010,13 +40228,26 @@ class FormFieldUpdateFrequencyComponent {
40010
40228
  }
40011
40229
  async ngOnInit() {
40012
40230
  this.choices = await this.getInitialChoices();
40231
+ if (!this.planned) {
40232
+ return;
40233
+ }
40234
+ if (typeof this.value === 'string' &&
40235
+ !this.choices.map((choice) => choice.value).includes(this.value)) {
40236
+ this.choices = [
40237
+ {
40238
+ value: this.value,
40239
+ label: await firstValueFrom(this.translateService.get(`domain.record.updateFrequency.${this.value}`)),
40240
+ },
40241
+ ...this.choices,
40242
+ ];
40243
+ }
40013
40244
  if (typeof this.value === 'string') {
40014
40245
  return;
40015
40246
  }
40016
40247
  const updatedTimes = this.value.updatedTimes;
40017
40248
  const per = this.value.per;
40018
40249
  // the update frequency is not in the list; make it appear there
40019
- if (updatedTimes && updatedTimes !== 1 && updatedTimes !== 2) {
40250
+ if (updatedTimes) {
40020
40251
  this.choices = [
40021
40252
  {
40022
40253
  value: `${per}.${updatedTimes}`,
@@ -40033,73 +40264,34 @@ class FormFieldUpdateFrequencyComponent {
40033
40264
  this.valueChange.emit('notPlanned');
40034
40265
  }
40035
40266
  else {
40036
- this.valueChange.emit({ updatedTimes: 1, per: 'day' });
40267
+ this.valueChange.emit(this.choices[0].value);
40037
40268
  }
40038
40269
  }
40039
40270
  get selectedFrequency() {
40040
- if (!this.value || typeof this.value === 'string')
40271
+ if (!this.value)
40041
40272
  return null;
40273
+ if (typeof this.value === 'string')
40274
+ return this.value;
40042
40275
  const { updatedTimes, per } = this.value;
40043
40276
  return `${per}.${updatedTimes}`;
40044
40277
  }
40045
40278
  onSelectFrequencyValue(value) {
40046
- const split = value.split('.');
40047
- this.valueChange.emit({
40048
- updatedTimes: Number(split[1]),
40049
- per: split[0],
40050
- });
40279
+ if (!value.includes('.')) {
40280
+ this.valueChange.emit(value);
40281
+ }
40282
+ else {
40283
+ const split = value.split('.');
40284
+ this.valueChange.emit({
40285
+ updatedTimes: Number(split[1]),
40286
+ per: split[0],
40287
+ });
40288
+ }
40051
40289
  }
40052
40290
  async getInitialChoices() {
40053
- return [
40054
- {
40055
- value: 'day.1',
40056
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.day', {
40057
- count: 1,
40058
- })),
40059
- },
40060
- {
40061
- value: 'day.2',
40062
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.day', {
40063
- count: 2,
40064
- })),
40065
- },
40066
- {
40067
- value: 'week.1',
40068
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.week', {
40069
- count: 1,
40070
- })),
40071
- },
40072
- {
40073
- value: 'week.2',
40074
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.week', {
40075
- count: 2,
40076
- })),
40077
- },
40078
- {
40079
- value: 'month.1',
40080
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.month', {
40081
- count: 1,
40082
- })),
40083
- },
40084
- {
40085
- value: 'month.2',
40086
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.month', {
40087
- count: 2,
40088
- })),
40089
- },
40090
- {
40091
- value: 'year.1',
40092
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.year', {
40093
- count: 1,
40094
- })),
40095
- },
40096
- {
40097
- value: 'year.2',
40098
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.year', {
40099
- count: 2,
40100
- })),
40101
- },
40102
- ];
40291
+ return Promise.all(initialListValues.map(async (value) => ({
40292
+ value,
40293
+ label: await firstValueFrom(this.translateService.get(`domain.record.updateFrequency.${value}`)),
40294
+ })));
40103
40295
  }
40104
40296
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldUpdateFrequencyComponent, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
40105
40297
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldUpdateFrequencyComponent, isStandalone: true, selector: "gn-ui-form-field-update-frequency", inputs: { value: "value" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"flex flex-col gap-2\">\n <gn-ui-check-toggle\n [label]=\"'editor.record.form.updateFrequency.planned' | translate\"\n [value]=\"planned\"\n (toggled)=\"onPlannedToggled()\"\n ></gn-ui-check-toggle>\n <gn-ui-dropdown-selector\n title=\"updateFrequency\"\n [showTitle]=\"false\"\n [choices]=\"choices\"\n [selected]=\"selectedFrequency\"\n (selectValue)=\"onSelectFrequencyValue($event)\"\n [disabled]=\"!planned\"\n [extraBtnClass]=\"'input-as-button gn-ui-text-input'\"\n >\n </gn-ui-dropdown-selector>\n</div>\n", styles: ["gn-ui-dropdown-selector{max-width:calc(50% - 16px)}\n"], dependencies: [{ kind: "component", type: CheckToggleComponent, selector: "gn-ui-check-toggle", inputs: ["title", "label", "value", "color"], outputs: ["toggled"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -40292,7 +40484,7 @@ class ConstraintCardComponent {
40292
40484
  provideNgIconsConfig({
40293
40485
  size: '1.5rem',
40294
40486
  }),
40295
- ], ngImport: i0, template: "<div class=\"flex flex-col gap-1 border rounded-lg p-4\">\n <gn-ui-form-field-rich\n class=\"mt-[-8px]\"\n [label]=\"label\"\n [hint]=\"hint | translate\"\n [value]=\"constraint_.text ?? ''\"\n (valueChange)=\"handleConstraintTextChange($event)\"\n ></gn-ui-form-field-rich>\n\n <div *ngIf=\"!showUrl\" class=\"flex-none mt-1\">\n <gn-ui-button\n (buttonClick)=\"showUrl = true\"\n type=\"gray\"\n data-cy=\"add-url-btn\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>&nbsp;\n <span translate>input.image.displayUrlInput</span>\n </gn-ui-button>\n </div>\n <gn-ui-url-input\n *ngIf=\"showUrl\"\n class=\"mt-3.5\"\n [value]=\"constraint_.url?.toString()\"\n (valueChange)=\"handleURLChange($event)\"\n [showUploadButton]=\"false\"\n >\n </gn-ui-url-input>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["label", "hint", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showUploadButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40487
+ ], ngImport: i0, template: "<div class=\"flex flex-col gap-1 border rounded-lg p-4\">\n <gn-ui-form-field-rich\n class=\"mt-[-8px]\"\n [label]=\"label\"\n [hint]=\"hint | translate\"\n [value]=\"constraint_.text ?? ''\"\n (valueChange)=\"handleConstraintTextChange($event)\"\n ></gn-ui-form-field-rich>\n\n <div *ngIf=\"!showUrl\" class=\"flex-none mt-1\">\n <gn-ui-button\n (buttonClick)=\"showUrl = true\"\n type=\"gray\"\n data-cy=\"add-url-btn\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>&nbsp;\n <span translate>input.image.displayUrlInput</span>\n </gn-ui-button>\n </div>\n <gn-ui-url-input\n *ngIf=\"showUrl\"\n class=\"mt-3.5\"\n [value]=\"constraint_.url?.toString()\"\n (valueChange)=\"handleURLChange($event)\"\n [showValidateButton]=\"false\"\n >\n </gn-ui-url-input>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["label", "hint", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40296
40488
  }
40297
40489
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConstraintCardComponent, decorators: [{
40298
40490
  type: Component,
@@ -40310,7 +40502,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40310
40502
  provideNgIconsConfig({
40311
40503
  size: '1.5rem',
40312
40504
  }),
40313
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-1 border rounded-lg p-4\">\n <gn-ui-form-field-rich\n class=\"mt-[-8px]\"\n [label]=\"label\"\n [hint]=\"hint | translate\"\n [value]=\"constraint_.text ?? ''\"\n (valueChange)=\"handleConstraintTextChange($event)\"\n ></gn-ui-form-field-rich>\n\n <div *ngIf=\"!showUrl\" class=\"flex-none mt-1\">\n <gn-ui-button\n (buttonClick)=\"showUrl = true\"\n type=\"gray\"\n data-cy=\"add-url-btn\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>&nbsp;\n <span translate>input.image.displayUrlInput</span>\n </gn-ui-button>\n </div>\n <gn-ui-url-input\n *ngIf=\"showUrl\"\n class=\"mt-3.5\"\n [value]=\"constraint_.url?.toString()\"\n (valueChange)=\"handleURLChange($event)\"\n [showUploadButton]=\"false\"\n >\n </gn-ui-url-input>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
40505
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-1 border rounded-lg p-4\">\n <gn-ui-form-field-rich\n class=\"mt-[-8px]\"\n [label]=\"label\"\n [hint]=\"hint | translate\"\n [value]=\"constraint_.text ?? ''\"\n (valueChange)=\"handleConstraintTextChange($event)\"\n ></gn-ui-form-field-rich>\n\n <div *ngIf=\"!showUrl\" class=\"flex-none mt-1\">\n <gn-ui-button\n (buttonClick)=\"showUrl = true\"\n type=\"gray\"\n data-cy=\"add-url-btn\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>&nbsp;\n <span translate>input.image.displayUrlInput</span>\n </gn-ui-button>\n </div>\n <gn-ui-url-input\n *ngIf=\"showUrl\"\n class=\"mt-3.5\"\n [value]=\"constraint_.url?.toString()\"\n (valueChange)=\"handleURLChange($event)\"\n [showValidateButton]=\"false\"\n >\n </gn-ui-url-input>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
40314
40506
  }], propDecorators: { label: [{
40315
40507
  type: Input
40316
40508
  }], constraint: [{
@@ -40465,7 +40657,7 @@ class FormFieldComponent {
40465
40657
  return this.value;
40466
40658
  }
40467
40659
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
40468
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { uniqueIdentifier: "uniqueIdentifier", model: "model", modelSpecifier: "modelSpecifier", componentName: "componentName", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], ngImport: i0, template: "<!-- TEMPORARY - disabling the open data switch -->\n<!-- <ng-container *ngIf=\"model === 'licenses'\">\n <gn-ui-form-field-open-data\n [value]=\"valueAsConstraints\"\n (valueChange)=\"valueChange.emit($event)\"\n (openDataChange)=\"toggleIsOpenData($event)\"\n ></gn-ui-form-field-open-data>\n</ng-container> -->\n<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container [ngSwitch]=\"model\">\n <ng-container *ngSwitchCase=\"'title'\">\n <div class=\"flex flex-row flex-start items-center gap-3 mb-[12px]\">\n <textarea\n #titleInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n data-test=\"recordTitleInput\"\n class=\"grow font-title text-3xl font-normal overflow-hidden\"\n (change)=\"valueChange.emit($event.target.value)\"\n >{{ valueAsString }}</textarea\n >\n <div class=\"flex flex-row justify-between self-start mt-0.5\">\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n *ngIf=\"config.hintKey\"\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'abstract'\">\n <gn-ui-form-field-rich\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngSwitchCase=\"'overviews'\">\n <gn-ui-form-field-overviews\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOverviews\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-overviews>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceIdentifier'\">\n <gn-ui-form-field-simple\n [type]=\"'text'\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceCreated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceUpdated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'updateFrequency'\">\n <gn-ui-form-field-update-frequency\n [value]=\"valueAsUpdateFrequency\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngSwitchCase=\"'temporalExtents'\">\n <gn-ui-form-field-temporal-extents\n [value]=\"valueAsTemporalExtents\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spatialExtents'\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngSwitchCase=\"'keywords'\">\n <gn-ui-form-field-keywords\n [value]=\"valueAsKeywords\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n <ng-container *ngSwitchCase=\"'licenses'\">\n <gn-ui-form-field-license\n [label]=\"config.labelKey! | translate\"\n [recordConstraints]=\"valueAsConstraints\"\n (recordConstraintsChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-license>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'legalConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'securityConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'otherConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container\n ></ng-container>\n <ng-template #formFieldConstraints>\n <gn-ui-form-field-constraints\n [label]=\"config.labelKey\"\n [value]=\"valueAsConstraints\"\n [constraintType]=\"model\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-constraints\n ></ng-template>\n\n <ng-container *ngSwitchCase=\"'contactsForResource'\">\n <gn-ui-form-field-contacts-for-resource\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts-for-resource>\n </ng-container>\n <ng-container *ngSwitchCase=\"'contacts'\">\n <gn-ui-form-field-contacts\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:!link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-resources>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-link-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-link-resources>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!model\">\n <ng-container [ngSwitch]=\"componentName\">\n <ng-container *ngSwitchCase=\"'form-field-constraints-shortcuts'\">\n <gn-ui-form-field-constraints-shortcuts></gn-ui-form-field-constraints-shortcuts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'form-field-spatial-toggle'\">\n <gn-ui-form-field-spatial-toggle></gn-ui-form-field-spatial-toggle>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1$4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: FormFieldLicenseComponent, selector: "gn-ui-form-field-license", inputs: ["label", "recordConstraints"], outputs: ["recordConstraintsChange"] }, { kind: "component", type: FormFieldDateComponent, selector: "gn-ui-form-field-date", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldUpdateFrequencyComponent, selector: "gn-ui-form-field-update-frequency", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldTemporalExtentsComponent, selector: "gn-ui-form-field-temporal-extents", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "readonly", "invalid", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["label", "hint", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldKeywordsComponent, selector: "gn-ui-form-field-keywords", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOverviewsComponent, selector: "gn-ui-form-field-overviews", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldContactsForResourceComponent, selector: "gn-ui-form-field-contacts-for-resource", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOnlineResourcesComponent, selector: "gn-ui-form-field-online-resources", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOnlineLinkResourcesComponent, selector: "gn-ui-form-field-online-link-resources", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldContactsComponent, selector: "gn-ui-form-field-contacts", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldConstraintsComponent, selector: "gn-ui-form-field-constraints", inputs: ["label", "value", "constraintType"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldConstraintsShortcutsComponent, selector: "gn-ui-form-field-constraints-shortcuts" }, { kind: "component", type: FormFieldSpatialToggleComponent, selector: "gn-ui-form-field-spatial-toggle" }, { kind: "ngmodule", type: TextFieldModule }, { kind: "directive", type: i4$1.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40660
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { uniqueIdentifier: "uniqueIdentifier", model: "model", modelSpecifier: "modelSpecifier", componentName: "componentName", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], ngImport: i0, template: "<!-- TEMPORARY - disabling the open data switch -->\n<!-- <ng-container *ngIf=\"model === 'licenses'\">\n <gn-ui-form-field-open-data\n [value]=\"valueAsConstraints\"\n (valueChange)=\"valueChange.emit($event)\"\n (openDataChange)=\"toggleIsOpenData($event)\"\n ></gn-ui-form-field-open-data>\n</ng-container> -->\n<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container [ngSwitch]=\"model\">\n <ng-container *ngSwitchCase=\"'title'\">\n <div class=\"flex flex-row flex-start items-center gap-3 mb-[12px]\">\n <textarea\n #titleInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n data-test=\"recordTitleInput\"\n class=\"grow font-title text-3xl font-normal overflow-hidden text-black/80\"\n (change)=\"valueChange.emit($event.target.value)\"\n [placeholder]=\"\n 'editor.record.form.field.title.placeholder' | translate\n \"\n >{{ valueAsString }}</textarea\n >\n <div class=\"flex flex-row justify-between self-start mt-0.5\">\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n *ngIf=\"config.hintKey\"\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'abstract'\">\n <gn-ui-form-field-rich\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngSwitchCase=\"'overviews'\">\n <gn-ui-form-field-overviews\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOverviews\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-overviews>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceIdentifier'\">\n <gn-ui-form-field-simple\n [type]=\"'text'\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceCreated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceUpdated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'updateFrequency'\">\n <gn-ui-form-field-update-frequency\n [value]=\"valueAsUpdateFrequency\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngSwitchCase=\"'temporalExtents'\">\n <gn-ui-form-field-temporal-extents\n [value]=\"valueAsTemporalExtents\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spatialExtents'\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngSwitchCase=\"'keywords'\">\n <gn-ui-form-field-keywords\n [value]=\"valueAsKeywords\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n <ng-container *ngSwitchCase=\"'licenses'\">\n <gn-ui-form-field-license\n [label]=\"config.labelKey! | translate\"\n [recordConstraints]=\"valueAsConstraints\"\n (recordConstraintsChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-license>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'legalConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'securityConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'otherConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container\n ></ng-container>\n <ng-template #formFieldConstraints>\n <gn-ui-form-field-constraints\n [label]=\"config.labelKey\"\n [value]=\"valueAsConstraints\"\n [constraintType]=\"model\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-constraints\n ></ng-template>\n\n <ng-container *ngSwitchCase=\"'contactsForResource'\">\n <gn-ui-form-field-contacts-for-resource\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts-for-resource>\n </ng-container>\n <ng-container *ngSwitchCase=\"'contacts'\">\n <gn-ui-form-field-contacts\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:!link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-resources>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-link-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-link-resources>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!model\">\n <ng-container [ngSwitch]=\"componentName\">\n <ng-container *ngSwitchCase=\"'form-field-constraints-shortcuts'\">\n <gn-ui-form-field-constraints-shortcuts></gn-ui-form-field-constraints-shortcuts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'form-field-spatial-toggle'\">\n <gn-ui-form-field-spatial-toggle></gn-ui-form-field-spatial-toggle>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1$4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: FormFieldLicenseComponent, selector: "gn-ui-form-field-license", inputs: ["label", "recordConstraints"], outputs: ["recordConstraintsChange"] }, { kind: "component", type: FormFieldDateComponent, selector: "gn-ui-form-field-date", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldUpdateFrequencyComponent, selector: "gn-ui-form-field-update-frequency", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldTemporalExtentsComponent, selector: "gn-ui-form-field-temporal-extents", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "readonly", "invalid", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["label", "hint", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldKeywordsComponent, selector: "gn-ui-form-field-keywords", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOverviewsComponent, selector: "gn-ui-form-field-overviews", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldContactsForResourceComponent, selector: "gn-ui-form-field-contacts-for-resource", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOnlineResourcesComponent, selector: "gn-ui-form-field-online-resources", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOnlineLinkResourcesComponent, selector: "gn-ui-form-field-online-link-resources", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldContactsComponent, selector: "gn-ui-form-field-contacts", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldConstraintsComponent, selector: "gn-ui-form-field-constraints", inputs: ["label", "value", "constraintType"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldConstraintsShortcutsComponent, selector: "gn-ui-form-field-constraints-shortcuts" }, { kind: "component", type: FormFieldSpatialToggleComponent, selector: "gn-ui-form-field-spatial-toggle" }, { kind: "ngmodule", type: TextFieldModule }, { kind: "directive", type: i4$2.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40469
40661
  }
40470
40662
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldComponent, decorators: [{
40471
40663
  type: Component,
@@ -40496,7 +40688,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40496
40688
  FormFieldConstraintsShortcutsComponent,
40497
40689
  FormFieldSpatialToggleComponent,
40498
40690
  TextFieldModule,
40499
- ], template: "<!-- TEMPORARY - disabling the open data switch -->\n<!-- <ng-container *ngIf=\"model === 'licenses'\">\n <gn-ui-form-field-open-data\n [value]=\"valueAsConstraints\"\n (valueChange)=\"valueChange.emit($event)\"\n (openDataChange)=\"toggleIsOpenData($event)\"\n ></gn-ui-form-field-open-data>\n</ng-container> -->\n<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container [ngSwitch]=\"model\">\n <ng-container *ngSwitchCase=\"'title'\">\n <div class=\"flex flex-row flex-start items-center gap-3 mb-[12px]\">\n <textarea\n #titleInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n data-test=\"recordTitleInput\"\n class=\"grow font-title text-3xl font-normal overflow-hidden\"\n (change)=\"valueChange.emit($event.target.value)\"\n >{{ valueAsString }}</textarea\n >\n <div class=\"flex flex-row justify-between self-start mt-0.5\">\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n *ngIf=\"config.hintKey\"\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'abstract'\">\n <gn-ui-form-field-rich\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngSwitchCase=\"'overviews'\">\n <gn-ui-form-field-overviews\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOverviews\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-overviews>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceIdentifier'\">\n <gn-ui-form-field-simple\n [type]=\"'text'\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceCreated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceUpdated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'updateFrequency'\">\n <gn-ui-form-field-update-frequency\n [value]=\"valueAsUpdateFrequency\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngSwitchCase=\"'temporalExtents'\">\n <gn-ui-form-field-temporal-extents\n [value]=\"valueAsTemporalExtents\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spatialExtents'\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngSwitchCase=\"'keywords'\">\n <gn-ui-form-field-keywords\n [value]=\"valueAsKeywords\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n <ng-container *ngSwitchCase=\"'licenses'\">\n <gn-ui-form-field-license\n [label]=\"config.labelKey! | translate\"\n [recordConstraints]=\"valueAsConstraints\"\n (recordConstraintsChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-license>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'legalConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'securityConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'otherConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container\n ></ng-container>\n <ng-template #formFieldConstraints>\n <gn-ui-form-field-constraints\n [label]=\"config.labelKey\"\n [value]=\"valueAsConstraints\"\n [constraintType]=\"model\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-constraints\n ></ng-template>\n\n <ng-container *ngSwitchCase=\"'contactsForResource'\">\n <gn-ui-form-field-contacts-for-resource\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts-for-resource>\n </ng-container>\n <ng-container *ngSwitchCase=\"'contacts'\">\n <gn-ui-form-field-contacts\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:!link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-resources>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-link-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-link-resources>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!model\">\n <ng-container [ngSwitch]=\"componentName\">\n <ng-container *ngSwitchCase=\"'form-field-constraints-shortcuts'\">\n <gn-ui-form-field-constraints-shortcuts></gn-ui-form-field-constraints-shortcuts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'form-field-spatial-toggle'\">\n <gn-ui-form-field-spatial-toggle></gn-ui-form-field-spatial-toggle>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n" }]
40691
+ ], template: "<!-- TEMPORARY - disabling the open data switch -->\n<!-- <ng-container *ngIf=\"model === 'licenses'\">\n <gn-ui-form-field-open-data\n [value]=\"valueAsConstraints\"\n (valueChange)=\"valueChange.emit($event)\"\n (openDataChange)=\"toggleIsOpenData($event)\"\n ></gn-ui-form-field-open-data>\n</ng-container> -->\n<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container [ngSwitch]=\"model\">\n <ng-container *ngSwitchCase=\"'title'\">\n <div class=\"flex flex-row flex-start items-center gap-3 mb-[12px]\">\n <textarea\n #titleInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n data-test=\"recordTitleInput\"\n class=\"grow font-title text-3xl font-normal overflow-hidden text-black/80\"\n (change)=\"valueChange.emit($event.target.value)\"\n [placeholder]=\"\n 'editor.record.form.field.title.placeholder' | translate\n \"\n >{{ valueAsString }}</textarea\n >\n <div class=\"flex flex-row justify-between self-start mt-0.5\">\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n *ngIf=\"config.hintKey\"\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'abstract'\">\n <gn-ui-form-field-rich\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngSwitchCase=\"'overviews'\">\n <gn-ui-form-field-overviews\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOverviews\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-overviews>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceIdentifier'\">\n <gn-ui-form-field-simple\n [type]=\"'text'\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceCreated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceUpdated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'updateFrequency'\">\n <gn-ui-form-field-update-frequency\n [value]=\"valueAsUpdateFrequency\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngSwitchCase=\"'temporalExtents'\">\n <gn-ui-form-field-temporal-extents\n [value]=\"valueAsTemporalExtents\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spatialExtents'\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngSwitchCase=\"'keywords'\">\n <gn-ui-form-field-keywords\n [value]=\"valueAsKeywords\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n <ng-container *ngSwitchCase=\"'licenses'\">\n <gn-ui-form-field-license\n [label]=\"config.labelKey! | translate\"\n [recordConstraints]=\"valueAsConstraints\"\n (recordConstraintsChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-license>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'legalConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'securityConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'otherConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container\n ></ng-container>\n <ng-template #formFieldConstraints>\n <gn-ui-form-field-constraints\n [label]=\"config.labelKey\"\n [value]=\"valueAsConstraints\"\n [constraintType]=\"model\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-constraints\n ></ng-template>\n\n <ng-container *ngSwitchCase=\"'contactsForResource'\">\n <gn-ui-form-field-contacts-for-resource\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts-for-resource>\n </ng-container>\n <ng-container *ngSwitchCase=\"'contacts'\">\n <gn-ui-form-field-contacts\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:!link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-resources>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-link-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-link-resources>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!model\">\n <ng-container [ngSwitch]=\"componentName\">\n <ng-container *ngSwitchCase=\"'form-field-constraints-shortcuts'\">\n <gn-ui-form-field-constraints-shortcuts></gn-ui-form-field-constraints-shortcuts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'form-field-spatial-toggle'\">\n <gn-ui-form-field-spatial-toggle></gn-ui-form-field-spatial-toggle>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n" }]
40500
40692
  }], propDecorators: { uniqueIdentifier: [{
40501
40693
  type: Input
40502
40694
  }], model: [{
@@ -40534,11 +40726,11 @@ class RecordFormComponent {
40534
40726
  return section.labelKey;
40535
40727
  }
40536
40728
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorFacade }], target: i0.ɵɵFactoryTarget.Component }); }
40537
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <ng-container\n *ngFor=\"\n let section of facade.currentSections$ | async;\n trackBy: sectionTracker\n \"\n >\n <ng-container *ngIf=\"!section.hidden\">\n <div class=\"flex flex-col gap-8 border p-8 rounded-[8px] shadow\">\n <div\n class=\"flex flex-col gap-2\"\n [ngClass]=\"section.labelKey ? 'mb-4' : 'hidden'\"\n >\n <div\n *ngIf=\"section.labelKey\"\n class=\"text-2xl font-title text-main\"\n translate\n >\n {{ section.labelKey }}\n </div>\n <div\n *ngIf=\"section.descriptionKey\"\n class=\"text-gray-800 text-sm\"\n translate\n >\n {{ section.descriptionKey }}\n </div>\n </div>\n <div class=\"grid auto-rows-auto grid-cols-2 gap-[32px]\">\n <ng-container\n *ngFor=\"\n let field of section.fieldsWithValues;\n trackBy: fieldTracker\n \"\n >\n <ng-container *ngIf=\"!field.config.hidden\">\n <gn-ui-form-field\n [ngClass]=\"\n field.config.gridColumnSpan === 1\n ? 'col-span-1'\n : 'col-span-2'\n \"\n [uniqueIdentifier]=\"recordUniqueIdentifier$ | async\"\n [model]=\"field.config.model!\"\n [modelSpecifier]=\"field.config.modelSpecifier!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n [componentName]=\"field.config.componentName\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["uniqueIdentifier", "model", "modelSpecifier", "componentName", "config", "value"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40729
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <ng-container\n *ngFor=\"\n let section of facade.currentSections$ | async;\n trackBy: sectionTracker\n \"\n >\n <ng-container *ngIf=\"!section.hidden\">\n <div class=\"flex flex-col gap-6 border p-8 rounded-[8px] shadow\">\n <div class=\"flex flex-col gap-2\">\n <div\n *ngIf=\"section.labelKey\"\n class=\"text-2xl font-title text-black\"\n translate\n >\n {{ section.labelKey }}\n </div>\n <div\n *ngIf=\"section.descriptionKey\"\n class=\"text-gray-800 text-sm\"\n translate\n >\n {{ section.descriptionKey }}\n </div>\n </div>\n <div class=\"grid auto-rows-auto grid-cols-2 gap-[32px]\">\n <ng-container\n *ngFor=\"\n let field of section.fieldsWithValues;\n trackBy: fieldTracker\n \"\n >\n <ng-container *ngIf=\"!field.config.hidden\">\n <gn-ui-form-field\n [ngClass]=\"\n field.config.gridColumnSpan === 1\n ? 'col-span-1'\n : 'col-span-2'\n \"\n [uniqueIdentifier]=\"recordUniqueIdentifier$ | async\"\n [model]=\"field.config.model!\"\n [modelSpecifier]=\"field.config.modelSpecifier!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n [componentName]=\"field.config.componentName\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["uniqueIdentifier", "model", "modelSpecifier", "componentName", "config", "value"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40538
40730
  }
40539
40731
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecordFormComponent, decorators: [{
40540
40732
  type: Component,
40541
- args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormFieldComponent, TranslateModule], template: "<div class=\"flex flex-col gap-6\">\n <ng-container\n *ngFor=\"\n let section of facade.currentSections$ | async;\n trackBy: sectionTracker\n \"\n >\n <ng-container *ngIf=\"!section.hidden\">\n <div class=\"flex flex-col gap-8 border p-8 rounded-[8px] shadow\">\n <div\n class=\"flex flex-col gap-2\"\n [ngClass]=\"section.labelKey ? 'mb-4' : 'hidden'\"\n >\n <div\n *ngIf=\"section.labelKey\"\n class=\"text-2xl font-title text-main\"\n translate\n >\n {{ section.labelKey }}\n </div>\n <div\n *ngIf=\"section.descriptionKey\"\n class=\"text-gray-800 text-sm\"\n translate\n >\n {{ section.descriptionKey }}\n </div>\n </div>\n <div class=\"grid auto-rows-auto grid-cols-2 gap-[32px]\">\n <ng-container\n *ngFor=\"\n let field of section.fieldsWithValues;\n trackBy: fieldTracker\n \"\n >\n <ng-container *ngIf=\"!field.config.hidden\">\n <gn-ui-form-field\n [ngClass]=\"\n field.config.gridColumnSpan === 1\n ? 'col-span-1'\n : 'col-span-2'\n \"\n [uniqueIdentifier]=\"recordUniqueIdentifier$ | async\"\n [model]=\"field.config.model!\"\n [modelSpecifier]=\"field.config.modelSpecifier!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n [componentName]=\"field.config.componentName\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n" }]
40733
+ args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormFieldComponent, TranslateModule], template: "<div class=\"flex flex-col gap-6\">\n <ng-container\n *ngFor=\"\n let section of facade.currentSections$ | async;\n trackBy: sectionTracker\n \"\n >\n <ng-container *ngIf=\"!section.hidden\">\n <div class=\"flex flex-col gap-6 border p-8 rounded-[8px] shadow\">\n <div class=\"flex flex-col gap-2\">\n <div\n *ngIf=\"section.labelKey\"\n class=\"text-2xl font-title text-black\"\n translate\n >\n {{ section.labelKey }}\n </div>\n <div\n *ngIf=\"section.descriptionKey\"\n class=\"text-gray-800 text-sm\"\n translate\n >\n {{ section.descriptionKey }}\n </div>\n </div>\n <div class=\"grid auto-rows-auto grid-cols-2 gap-[32px]\">\n <ng-container\n *ngFor=\"\n let field of section.fieldsWithValues;\n trackBy: fieldTracker\n \"\n >\n <ng-container *ngIf=\"!field.config.hidden\">\n <gn-ui-form-field\n [ngClass]=\"\n field.config.gridColumnSpan === 1\n ? 'col-span-1'\n : 'col-span-2'\n \"\n [uniqueIdentifier]=\"recordUniqueIdentifier$ | async\"\n [model]=\"field.config.model!\"\n [modelSpecifier]=\"field.config.modelSpecifier!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n [componentName]=\"field.config.componentName\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n" }]
40542
40734
  }], ctorParameters: () => [{ type: EditorFacade }] });
40543
40735
 
40544
40736
  const ROUTER_STATE_KEY = 'router';
@@ -40926,7 +41118,7 @@ class DefaultRouterModule {
40926
41118
  };
40927
41119
  }
40928
41120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultRouterModule, deps: [{ token: RouterService }], target: i0.ɵɵFactoryTarget.NgModule }); }
40929
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: DefaultRouterModule, declarations: [SearchRouterContainerDirective], imports: [i1$3.StoreFeatureModule, i3$3.StoreRouterConnectingModule, i1$c.EffectsFeatureModule], exports: [SearchRouterContainerDirective] }); }
41121
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: DefaultRouterModule, declarations: [SearchRouterContainerDirective], imports: [i1$3.StoreFeatureModule, i3$2.StoreRouterConnectingModule, i1$c.EffectsFeatureModule], exports: [SearchRouterContainerDirective] }); }
40930
41122
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultRouterModule, providers: [
40931
41123
  RouterFacade,
40932
41124
  {
@@ -40969,5 +41161,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40969
41161
  * Generated bundle index. Do not edit.
40970
41162
  */
40971
41163
 
40972
- export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangePickerComponent, DateRangeSearchField, DcatApConverter, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EXTERNAL_VIEWER_OPEN_NEW_TAB, EXTERNAL_VIEWER_URL_TEMPLATE, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InteractiveTableColumnComponent, InteractiveTableComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, METADATA_LANGUAGE, MY_FORMATS, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, ModalDialogComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NavigationButtonComponent, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PopoverComponent, PopupAlertComponent, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SETTINGS_URL, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchFiltersSummaryComponent, SearchFiltersSummaryItemComponent, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, UtilI18nModule, UtilSharedModule, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, blockModelFixture, bytesToMegabytes, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, itemModelFixture, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readAttribute, readDataset, readDatasetHeaders, readText, reducer$2 as reducer, reducerSearch, removeAllChildren, removeChildren, removeChildrenByName, removeSearchParams, removeWhitespace, renameElements, saveRecord, saveRecordFailure, saveRecordSuccess, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectHasRecordChanged, selectRecord, selectRecordAlreadySavedOnce, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setContext, setCurrentPage, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemFixture, toDate, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateRecordField, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
41164
+ export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangePickerComponent, DateRangeSearchField, DcatApConverter, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EXTERNAL_VIEWER_OPEN_NEW_TAB, EXTERNAL_VIEWER_URL_TEMPLATE, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InteractiveTableColumnComponent, InteractiveTableComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, METADATA_LANGUAGE, MY_FORMATS, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, ModalDialogComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NavigationButtonComponent, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PopoverComponent, PopupAlertComponent, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SETTINGS_URL, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchFiltersSummaryComponent, SearchFiltersSummaryItemComponent, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, UtilI18nModule, UtilSharedModule, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, blockModelFixture, bytesToMegabytes, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readAttribute, readDataset, readDatasetHeaders, readText, reducer$2 as reducer, reducerSearch, removeAllChildren, removeChildren, removeChildrenByName, removeSearchParams, removeWhitespace, renameElements, saveRecord, saveRecordFailure, saveRecordSuccess, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectHasRecordChanged, selectIsPublished, selectRecord, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setContext, setCurrentPage, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemFixture, toDate, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateRecordField, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
40973
41165
  //# sourceMappingURL=geonetwork-ui.mjs.map