geonetwork-ui 2.4.1-dev.7a0dc5e3f → 2.4.1-dev.9ee0df3df

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 (95) 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/common/domain/src/lib/model/record/metadata.model.mjs +27 -1
  4. package/esm2022/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.mjs +3 -3
  5. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +3 -3
  6. package/esm2022/libs/feature/editor/src/lib/components/import-record/import-record.component.mjs +2 -2
  7. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +45 -9
  8. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.mjs +3 -3
  9. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +12 -3
  10. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.mjs +2 -2
  11. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +3 -3
  12. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +36 -60
  13. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +3 -3
  14. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +3 -3
  15. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +11 -15
  16. package/esm2022/libs/ui/elements/src/index.mjs +3 -2
  17. package/esm2022/libs/ui/elements/src/lib/image-input/image-input.component.mjs +213 -0
  18. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +19 -13
  19. package/esm2022/libs/ui/inputs/src/index.mjs +5 -6
  20. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +2 -1
  21. package/esm2022/libs/ui/inputs/src/lib/file-input/file-input.component.mjs +2 -2
  22. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +19 -25
  23. package/esm2022/libs/ui/inputs/src/lib/url-input/url-input.component.mjs +6 -6
  24. package/esm2022/translations/de.json +23 -11
  25. package/esm2022/translations/en.json +19 -7
  26. package/esm2022/translations/es.json +23 -11
  27. package/esm2022/translations/fr.json +23 -11
  28. package/esm2022/translations/it.json +23 -11
  29. package/esm2022/translations/nl.json +23 -11
  30. package/esm2022/translations/pt.json +23 -11
  31. package/fesm2022/geonetwork-ui.mjs +922 -835
  32. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  33. package/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.d.ts.map +1 -1
  34. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  35. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +2 -1
  36. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  37. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts +11 -2
  38. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -1
  39. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts +4 -0
  40. 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
  41. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts +1 -1
  42. 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
  43. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  44. package/libs/ui/elements/src/index.d.ts +2 -1
  45. package/libs/ui/elements/src/index.d.ts.map +1 -1
  46. package/libs/ui/elements/src/lib/image-input/image-input.component.d.ts.map +1 -0
  47. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  48. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  49. package/libs/ui/inputs/src/index.d.ts +4 -5
  50. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  51. package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
  52. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  53. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +6 -7
  54. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  55. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts +2 -2
  56. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts.map +1 -1
  57. package/package.json +1 -1
  58. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.ts +9 -62
  59. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +18 -0
  60. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +29 -7
  61. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.html +1 -1
  62. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.html +1 -1
  63. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.html +31 -6
  64. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +47 -2
  65. 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 -1
  66. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.html +3 -7
  67. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.ts +10 -0
  68. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.ts +1 -1
  69. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +6 -6
  70. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +46 -74
  71. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +1 -1
  72. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +3 -6
  73. package/src/libs/feature/editor/src/lib/fields.config.ts +10 -14
  74. package/src/libs/ui/elements/src/index.ts +2 -1
  75. package/src/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.html +4 -19
  76. package/src/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.ts +13 -9
  77. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +13 -10
  78. package/src/libs/ui/inputs/src/index.ts +4 -5
  79. package/src/libs/ui/inputs/src/lib/button/button.component.ts +2 -1
  80. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +22 -25
  81. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.html +5 -3
  82. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +1 -1
  83. package/translations/de.json +23 -11
  84. package/translations/en.json +19 -7
  85. package/translations/es.json +23 -11
  86. package/translations/fr.json +23 -11
  87. package/translations/it.json +23 -11
  88. package/translations/nl.json +23 -11
  89. package/translations/pt.json +23 -11
  90. package/translations/sk.json +23 -11
  91. package/esm2022/libs/ui/inputs/src/lib/image-input/image-input.component.mjs +0 -214
  92. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts.map +0 -1
  93. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/update-frequency.mapper.ts +0 -67
  94. /package/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.d.ts +0 -0
  95. /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,7 +15,6 @@ 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
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';
@@ -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) {
@@ -18704,16 +18764,25 @@ var de = {
18704
18764
  "domain.record.status.ongoing": "Kontinuierliche Aktualisierung",
18705
18765
  "domain.record.status.removed": "Entfernt",
18706
18766
  "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",
18767
+ "domain.record.updateFrequency.annually": "Daten werden jedes Jahr aktualisiert",
18768
+ "domain.record.updateFrequency.asNeeded": "Daten werden nach Bedarf aktualisiert",
18769
+ "domain.record.updateFrequency.biannually": "Daten werden zweimal im Jahr aktualisiert",
18770
+ "domain.record.updateFrequency.biennially": "Daten werden alle 2 Jahre aktualisiert",
18771
+ "domain.record.updateFrequency.continual": "Daten werden wiederholt und häufig aktualisiert",
18772
+ "domain.record.updateFrequency.daily": "Daten werden täglich aktualisiert",
18773
+ "domain.record.updateFrequency.day": "{count, plural, =0{0 Mal} one{Einmal} other{{count} Mal}} pro Tag",
18774
+ "domain.record.updateFrequency.fortnightly": "Daten werden alle zwei Wochen aktualisiert",
18775
+ "domain.record.updateFrequency.irregular": "Daten werden in unregelmäßigen Abständen aktualisiert",
18776
+ "domain.record.updateFrequency.month": "{count, plural, =0{0 Mal} one{Einmal} other{{count} Mal}} pro Monat",
18777
+ "domain.record.updateFrequency.monthly": "Daten werden monatlich aktualisiert",
18778
+ "domain.record.updateFrequency.notPlanned": "Es gibt keine Pläne, die Daten zu aktualisieren",
18779
+ "domain.record.updateFrequency.periodic": "Daten werden in regelmäßigen Abständen aktualisiert",
18780
+ "domain.record.updateFrequency.quarterly": "Daten werden alle drei Monate aktualisiert",
18781
+ "domain.record.updateFrequency.semimonthly": "Daten werden zweimal im Monat aktualisiert",
18782
+ "domain.record.updateFrequency.unknown": "Die Häufigkeit der Datenaktualisierung ist unbekannt",
18783
+ "domain.record.updateFrequency.week": "{count, plural, =0{0 Mal} one{Einmal} other{{count} Mal}} pro Woche",
18784
+ "domain.record.updateFrequency.weekly": "Daten werden wöchentlich aktualisiert",
18785
+ "domain.record.updateFrequency.year": "{count, plural, =0{0 Mal} one{Einmal} other{{count} Mal}} pro Jahr",
18717
18786
  "downloads.format.unknown": "unbekannt",
18718
18787
  "downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
18719
18788
  dropFile: dropFile$6,
@@ -18759,6 +18828,9 @@ var de = {
18759
18828
  "editor.record.form.field.onlineResource.dialogTitle": "",
18760
18829
  "editor.record.form.field.onlineResource.edit.description": "",
18761
18830
  "editor.record.form.field.onlineResource.edit.protocol": "",
18831
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Ebenenname",
18832
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Prozessname",
18833
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Link zum Dienst",
18762
18834
  "editor.record.form.field.onlineResource.edit.title": "",
18763
18835
  "editor.record.form.field.onlineResource.fileSize": "",
18764
18836
  "editor.record.form.field.onlineResource.modify": "",
@@ -18808,7 +18880,7 @@ var de = {
18808
18880
  "editor.record.form.temporalExtents.addRange": "Zeitraum",
18809
18881
  "editor.record.form.temporalExtents.date": "Datum",
18810
18882
  "editor.record.form.temporalExtents.range": "Datumsbereich",
18811
- "editor.record.form.updateFrequency.planned": "Die Daten sollten regelmäßig aktualisiert werden.",
18883
+ "editor.record.form.updateFrequency.planned": "Dieses Dataset wird regelmäßig aktualisiert.",
18812
18884
  "editor.record.importFromExternalFile.failure.body": "",
18813
18885
  "editor.record.importFromExternalFile.failure.title": "",
18814
18886
  "editor.record.importFromExternalFile.success.body": "",
@@ -19270,15 +19342,24 @@ var en = {
19270
19342
  "domain.record.status.ongoing": "Ongoing",
19271
19343
  "domain.record.status.removed": "Removed",
19272
19344
  "domain.record.status.under_development": "Under development",
19273
- "domain.record.updateFrequency.asNeeded": "As needed",
19274
- "domain.record.updateFrequency.continual": "Continual",
19345
+ "domain.record.updateFrequency.annually": "Data is updated every year",
19346
+ "domain.record.updateFrequency.asNeeded": "Data is updated as deemed necessary",
19347
+ "domain.record.updateFrequency.biannually": "Data is updated twice each year",
19348
+ "domain.record.updateFrequency.biennially": "Data is updated every 2 years",
19349
+ "domain.record.updateFrequency.continual": "Data is repeatedly and frequently updated",
19350
+ "domain.record.updateFrequency.daily": "Data is updated each day",
19275
19351
  "domain.record.updateFrequency.day": "{count, plural, =0{0 times} one{Once} other{{count} times}} per day",
19276
- "domain.record.updateFrequency.irregular": "Irregular",
19352
+ "domain.record.updateFrequency.fortnightly": "Data is updated every two weeks",
19353
+ "domain.record.updateFrequency.irregular": "Data is updated in intervals that are uneven in duration",
19277
19354
  "domain.record.updateFrequency.month": "{count, plural, =0{0 times} one{Once} other{{count} times}} per month",
19278
- "domain.record.updateFrequency.notPlanned": "Not planned",
19279
- "domain.record.updateFrequency.periodic": "Periodic",
19280
- "domain.record.updateFrequency.unknown": "Unknown",
19355
+ "domain.record.updateFrequency.monthly": "Data is updated each month",
19356
+ "domain.record.updateFrequency.notPlanned": "There are no plans to update the data",
19357
+ "domain.record.updateFrequency.periodic": "Data is updated at regular intervals",
19358
+ "domain.record.updateFrequency.quarterly": "Data is updated every three months",
19359
+ "domain.record.updateFrequency.semimonthly": "Data is updated twice a month",
19360
+ "domain.record.updateFrequency.unknown": "Frequency of maintenance for the data is not known",
19281
19361
  "domain.record.updateFrequency.week": "{count, plural, =0{0 times} one{Once} other{{count} times}} per week",
19362
+ "domain.record.updateFrequency.weekly": "Data is updated on a weekly basis",
19282
19363
  "domain.record.updateFrequency.year": "{count, plural, =0{0 times} one{Once} other{{count} times}} per year",
19283
19364
  "downloads.format.unknown": "Unknown",
19284
19365
  "downloads.wfs.featuretype.not.found": "The layer was not found",
@@ -19325,6 +19406,9 @@ var en = {
19325
19406
  "editor.record.form.field.onlineResource.dialogTitle": "Modify the dataset preview",
19326
19407
  "editor.record.form.field.onlineResource.edit.description": "Description",
19327
19408
  "editor.record.form.field.onlineResource.edit.protocol": "Protocol",
19409
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Layer name",
19410
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Process name",
19411
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Link to the service",
19328
19412
  "editor.record.form.field.onlineResource.edit.title": "Title",
19329
19413
  "editor.record.form.field.onlineResource.fileSize": "{sizeMB}MB",
19330
19414
  "editor.record.form.field.onlineResource.modify": "Modify",
@@ -19374,7 +19458,7 @@ var en = {
19374
19458
  "editor.record.form.temporalExtents.addRange": "Time period",
19375
19459
  "editor.record.form.temporalExtents.date": "Date",
19376
19460
  "editor.record.form.temporalExtents.range": "Date range",
19377
- "editor.record.form.updateFrequency.planned": "The data should be updated regularly",
19461
+ "editor.record.form.updateFrequency.planned": "This dataset is updated regularly.",
19378
19462
  "editor.record.importFromExternalFile.failure.body": "Failure",
19379
19463
  "editor.record.importFromExternalFile.failure.title": "The dataset import failed: ",
19380
19464
  "editor.record.importFromExternalFile.success.body": "Import successful",
@@ -19855,16 +19939,25 @@ var es = {
19855
19939
  "domain.record.status.ongoing": "",
19856
19940
  "domain.record.status.removed": "",
19857
19941
  "domain.record.status.under_development": "",
19858
- "domain.record.updateFrequency.asNeeded": "",
19859
- "domain.record.updateFrequency.continual": "",
19860
- "domain.record.updateFrequency.day": "",
19861
- "domain.record.updateFrequency.irregular": "",
19862
- "domain.record.updateFrequency.month": "",
19863
- "domain.record.updateFrequency.notPlanned": "",
19864
- "domain.record.updateFrequency.periodic": "",
19865
- "domain.record.updateFrequency.unknown": "",
19866
- "domain.record.updateFrequency.week": "",
19867
- "domain.record.updateFrequency.year": "",
19942
+ "domain.record.updateFrequency.annually": "Los datos se actualizan cada año",
19943
+ "domain.record.updateFrequency.asNeeded": "Los datos se actualizan según sea necesario",
19944
+ "domain.record.updateFrequency.biannually": "Los datos se actualizan dos veces al año",
19945
+ "domain.record.updateFrequency.biennially": "Los datos se actualizan cada 2 años",
19946
+ "domain.record.updateFrequency.continual": "Los datos se actualizan repetidamente y con frecuencia",
19947
+ "domain.record.updateFrequency.daily": "Los datos se actualizan cada día",
19948
+ "domain.record.updateFrequency.day": "{count, plural, =0{0 veces} one{Una vez} other{{count} veces}} al día",
19949
+ "domain.record.updateFrequency.fortnightly": "Los datos se actualizan cada dos semanas",
19950
+ "domain.record.updateFrequency.irregular": "Los datos se actualizan en intervalos irregulares",
19951
+ "domain.record.updateFrequency.month": "{count, plural, =0{0 veces} one{Una vez} other{{count} veces}} al mes",
19952
+ "domain.record.updateFrequency.monthly": "Los datos se actualizan cada mes",
19953
+ "domain.record.updateFrequency.notPlanned": "No hay planes para actualizar los datos",
19954
+ "domain.record.updateFrequency.periodic": "Los datos se actualizan a intervalos regulares",
19955
+ "domain.record.updateFrequency.quarterly": "Los datos se actualizan cada tres meses",
19956
+ "domain.record.updateFrequency.semimonthly": "Los datos se actualizan dos veces al mes",
19957
+ "domain.record.updateFrequency.unknown": "La frecuencia de actualización de los datos es desconocida",
19958
+ "domain.record.updateFrequency.week": "{count, plural, =0{0 veces} one{Una vez} other{{count} veces}} a la semana",
19959
+ "domain.record.updateFrequency.weekly": "Los datos se actualizan semanalmente",
19960
+ "domain.record.updateFrequency.year": "{count, plural, =0{0 veces} one{Una vez} other{{count} veces}} al año",
19868
19961
  "downloads.format.unknown": "",
19869
19962
  "downloads.wfs.featuretype.not.found": "",
19870
19963
  dropFile: dropFile$4,
@@ -19910,6 +20003,9 @@ var es = {
19910
20003
  "editor.record.form.field.onlineResource.dialogTitle": "",
19911
20004
  "editor.record.form.field.onlineResource.edit.description": "",
19912
20005
  "editor.record.form.field.onlineResource.edit.protocol": "",
20006
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Nombre de la capa",
20007
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Nombre del proceso",
20008
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Enlace al servicio",
19913
20009
  "editor.record.form.field.onlineResource.edit.title": "",
19914
20010
  "editor.record.form.field.onlineResource.fileSize": "",
19915
20011
  "editor.record.form.field.onlineResource.modify": "",
@@ -19959,7 +20055,7 @@ var es = {
19959
20055
  "editor.record.form.temporalExtents.addRange": "",
19960
20056
  "editor.record.form.temporalExtents.date": "",
19961
20057
  "editor.record.form.temporalExtents.range": "",
19962
- "editor.record.form.updateFrequency.planned": "",
20058
+ "editor.record.form.updateFrequency.planned": "Este conjunto de datos se actualiza regularmente.",
19963
20059
  "editor.record.importFromExternalFile.failure.body": "",
19964
20060
  "editor.record.importFromExternalFile.failure.title": "",
19965
20061
  "editor.record.importFromExternalFile.success.body": "",
@@ -20421,16 +20517,25 @@ var fr = {
20421
20517
  "domain.record.status.ongoing": "Mise à jour continue",
20422
20518
  "domain.record.status.removed": "Supprimé",
20423
20519
  "domain.record.status.under_development": "En cours de création",
20424
- "domain.record.updateFrequency.asNeeded": "Lorsque nécessaire",
20425
- "domain.record.updateFrequency.continual": "Continue",
20426
- "domain.record.updateFrequency.day": "{count, plural, =0{0} one{Une} other{{count}}} fois par jour",
20427
- "domain.record.updateFrequency.irregular": "Irrégulière",
20428
- "domain.record.updateFrequency.month": "{count, plural, =0{0} one{Une} other{{count}}} fois par mois",
20429
- "domain.record.updateFrequency.notPlanned": "Non planifiée",
20430
- "domain.record.updateFrequency.periodic": "Récurrente",
20431
- "domain.record.updateFrequency.unknown": "Inconnue",
20432
- "domain.record.updateFrequency.week": "{count, plural, =0{0} one{Une} other{{count}}} fois par semaine",
20433
- "domain.record.updateFrequency.year": "{count, plural, =0{0} one{Une} other{{count}}} fois par an",
20520
+ "domain.record.updateFrequency.annually": "Les données sont mises à jour chaque année",
20521
+ "domain.record.updateFrequency.asNeeded": "Les données sont mises à jour selon les besoins",
20522
+ "domain.record.updateFrequency.biannually": "Les données sont mises à jour deux fois par an",
20523
+ "domain.record.updateFrequency.biennially": "Les données sont mises à jour tous les 2 ans",
20524
+ "domain.record.updateFrequency.continual": "Les données sont mises à jour de manière répétée et fréquente",
20525
+ "domain.record.updateFrequency.daily": "Les données sont mises à jour chaque jour",
20526
+ "domain.record.updateFrequency.day": "{count, plural, =0{0 fois} one{Une fois} other{{count} fois}} par jour",
20527
+ "domain.record.updateFrequency.fortnightly": "Les données sont mises à jour toutes les deux semaines",
20528
+ "domain.record.updateFrequency.irregular": "Les données sont mises à jour à intervalles irréguliers",
20529
+ "domain.record.updateFrequency.month": "{count, plural, =0{0 fois} one{Une fois} other{{count} fois}} par mois",
20530
+ "domain.record.updateFrequency.monthly": "Les données sont mises à jour chaque mois",
20531
+ "domain.record.updateFrequency.notPlanned": "Il n'y a pas de plan pour mettre à jour les données",
20532
+ "domain.record.updateFrequency.periodic": "Les données sont mises à jour à intervalles réguliers",
20533
+ "domain.record.updateFrequency.quarterly": "Les données sont mises à jour tous les trois mois",
20534
+ "domain.record.updateFrequency.semimonthly": "Les données sont mises à jour deux fois par mois",
20535
+ "domain.record.updateFrequency.unknown": "La fréquence de mise à jour des données est inconnue",
20536
+ "domain.record.updateFrequency.week": "{count, plural, =0{0 fois} one{Une fois} other{{count} fois}} par semaine",
20537
+ "domain.record.updateFrequency.weekly": "Les données sont mises à jour chaque semaine",
20538
+ "domain.record.updateFrequency.year": "{count, plural, =0{0 fois} one{Une fois} other{{count} fois}} par an",
20434
20539
  "downloads.format.unknown": "inconnu",
20435
20540
  "downloads.wfs.featuretype.not.found": "La couche n'a pas été trouvée",
20436
20541
  dropFile: dropFile$3,
@@ -20476,6 +20581,9 @@ var fr = {
20476
20581
  "editor.record.form.field.onlineResource.dialogTitle": "Modifier l'aperçu du jeu de données",
20477
20582
  "editor.record.form.field.onlineResource.edit.description": "Description",
20478
20583
  "editor.record.form.field.onlineResource.edit.protocol": "Protocole",
20584
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Nom de la couche",
20585
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Nom du processus",
20586
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Lier le service",
20479
20587
  "editor.record.form.field.onlineResource.edit.title": "Titre",
20480
20588
  "editor.record.form.field.onlineResource.fileSize": "{sizeMB} Mo",
20481
20589
  "editor.record.form.field.onlineResource.modify": "Modifier",
@@ -20525,7 +20633,7 @@ var fr = {
20525
20633
  "editor.record.form.temporalExtents.addRange": "Période de temps",
20526
20634
  "editor.record.form.temporalExtents.date": "Date concernée",
20527
20635
  "editor.record.form.temporalExtents.range": "Période concernée",
20528
- "editor.record.form.updateFrequency.planned": "Ces données doivent être mise à jour régulièrement.",
20636
+ "editor.record.form.updateFrequency.planned": "Ce jeu de données est mis à jour régulièrement.",
20529
20637
  "editor.record.importFromExternalFile.failure.body": "Une erreur est survenue pendant l'import du jeu de données : ",
20530
20638
  "editor.record.importFromExternalFile.failure.title": "Erreur",
20531
20639
  "editor.record.importFromExternalFile.success.body": "L'import du jeu de données à été realisé avec succès.",
@@ -21006,16 +21114,25 @@ var it = {
21006
21114
  "domain.record.status.ongoing": "Aggiornamento continuo",
21007
21115
  "domain.record.status.removed": "Rimosso",
21008
21116
  "domain.record.status.under_development": "In fase di creazione",
21009
- "domain.record.updateFrequency.asNeeded": "Quando necessario",
21010
- "domain.record.updateFrequency.continual": "Continua",
21011
- "domain.record.updateFrequency.day": "{count, plural, =0{0} one{Una volta} other{{count}{volte}}} al giorno",
21012
- "domain.record.updateFrequency.irregular": "Irregolare",
21013
- "domain.record.updateFrequency.month": "{count, plural, =0{0} one{Una volta} other{{count}{volte}}} al mese",
21014
- "domain.record.updateFrequency.notPlanned": "Non pianificata",
21015
- "domain.record.updateFrequency.periodic": "Periodica",
21016
- "domain.record.updateFrequency.unknown": "Sconosciuta",
21017
- "domain.record.updateFrequency.week": "{count, plural, =0{0} one{Una volta} other{{count}{volte}}} alla settimana",
21018
- "domain.record.updateFrequency.year": "{count, plural, =0{0} one{Una volta} other{{count}{volte}}} all'anno",
21117
+ "domain.record.updateFrequency.annually": "I dati vengono aggiornati ogni anno",
21118
+ "domain.record.updateFrequency.asNeeded": "I dati vengono aggiornati secondo necessità",
21119
+ "domain.record.updateFrequency.biannually": "I dati vengono aggiornati due volte all'anno",
21120
+ "domain.record.updateFrequency.biennially": "I dati vengono aggiornati ogni 2 anni",
21121
+ "domain.record.updateFrequency.continual": "I dati vengono aggiornati ripetutamente e frequentemente",
21122
+ "domain.record.updateFrequency.daily": "I dati vengono aggiornati ogni giorno",
21123
+ "domain.record.updateFrequency.day": "{count, plural, =0{0 volte} one{Una volta} other{{count} volte}} al giorno",
21124
+ "domain.record.updateFrequency.fortnightly": "I dati vengono aggiornati ogni due settimane",
21125
+ "domain.record.updateFrequency.irregular": "I dati vengono aggiornati a intervalli irregolari",
21126
+ "domain.record.updateFrequency.month": "{count, plural, =0{0 volte} one{Una volta} other{{count} volte}} al mese",
21127
+ "domain.record.updateFrequency.monthly": "I dati vengono aggiornati ogni mese",
21128
+ "domain.record.updateFrequency.notPlanned": "Non ci sono piani per aggiornare i dati",
21129
+ "domain.record.updateFrequency.periodic": "I dati vengono aggiornati a intervalli regolari",
21130
+ "domain.record.updateFrequency.quarterly": "I dati vengono aggiornati ogni tre mesi",
21131
+ "domain.record.updateFrequency.semimonthly": "I dati vengono aggiornati due volte al mese",
21132
+ "domain.record.updateFrequency.unknown": "La frequenza di aggiornamento dei dati è sconosciuta",
21133
+ "domain.record.updateFrequency.week": "{count, plural, =0{0 volte} one{Una volta} other{{count} volte}} a settimana",
21134
+ "domain.record.updateFrequency.weekly": "I dati vengono aggiornati settimanalmente",
21135
+ "domain.record.updateFrequency.year": "{count, plural, =0{0 volte} one{Una volta} other{{count} volte}} all'anno",
21019
21136
  "downloads.format.unknown": "sconosciuto",
21020
21137
  "downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
21021
21138
  dropFile: dropFile$2,
@@ -21061,6 +21178,9 @@ var it = {
21061
21178
  "editor.record.form.field.onlineResource.dialogTitle": "",
21062
21179
  "editor.record.form.field.onlineResource.edit.description": "",
21063
21180
  "editor.record.form.field.onlineResource.edit.protocol": "",
21181
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Nome del livello",
21182
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Nome del processo",
21183
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Collegare il servizio",
21064
21184
  "editor.record.form.field.onlineResource.edit.title": "",
21065
21185
  "editor.record.form.field.onlineResource.fileSize": "",
21066
21186
  "editor.record.form.field.onlineResource.modify": "",
@@ -21110,7 +21230,7 @@ var it = {
21110
21230
  "editor.record.form.temporalExtents.addRange": "",
21111
21231
  "editor.record.form.temporalExtents.date": "",
21112
21232
  "editor.record.form.temporalExtents.range": "",
21113
- "editor.record.form.updateFrequency.planned": "",
21233
+ "editor.record.form.updateFrequency.planned": "Questo dataset viene aggiornato regolarmente.",
21114
21234
  "editor.record.importFromExternalFile.failure.body": "",
21115
21235
  "editor.record.importFromExternalFile.failure.title": "",
21116
21236
  "editor.record.importFromExternalFile.success.body": "",
@@ -21572,16 +21692,25 @@ var nl = {
21572
21692
  "domain.record.status.ongoing": "",
21573
21693
  "domain.record.status.removed": "",
21574
21694
  "domain.record.status.under_development": "",
21575
- "domain.record.updateFrequency.asNeeded": "",
21576
- "domain.record.updateFrequency.continual": "",
21577
- "domain.record.updateFrequency.day": "",
21578
- "domain.record.updateFrequency.irregular": "",
21579
- "domain.record.updateFrequency.month": "",
21580
- "domain.record.updateFrequency.notPlanned": "",
21581
- "domain.record.updateFrequency.periodic": "",
21582
- "domain.record.updateFrequency.unknown": "",
21583
- "domain.record.updateFrequency.week": "",
21584
- "domain.record.updateFrequency.year": "",
21695
+ "domain.record.updateFrequency.annually": "Gegevens worden elk jaar bijgewerkt",
21696
+ "domain.record.updateFrequency.asNeeded": "Gegevens worden bijgewerkt naar behoefte",
21697
+ "domain.record.updateFrequency.biannually": "Gegevens worden twee keer per jaar bijgewerkt",
21698
+ "domain.record.updateFrequency.biennially": "Gegevens worden elke 2 jaar bijgewerkt",
21699
+ "domain.record.updateFrequency.continual": "Gegevens worden herhaaldelijk en frequent bijgewerkt",
21700
+ "domain.record.updateFrequency.daily": "Gegevens worden elke dag bijgewerkt",
21701
+ "domain.record.updateFrequency.day": "{count, plural, =0{0 keer} one{Een keer} other{{count} keer}} per dag",
21702
+ "domain.record.updateFrequency.fortnightly": "Gegevens worden elke twee weken bijgewerkt",
21703
+ "domain.record.updateFrequency.irregular": "Gegevens worden onregelmatig bijgewerkt",
21704
+ "domain.record.updateFrequency.month": "{count, plural, =0{0 keer} one{Een keer} other{{count} keer}} per maand",
21705
+ "domain.record.updateFrequency.monthly": "Gegevens worden elke maand bijgewerkt",
21706
+ "domain.record.updateFrequency.notPlanned": "Er zijn geen plannen om de gegevens bij te werken",
21707
+ "domain.record.updateFrequency.periodic": "Gegevens worden regelmatig bijgewerkt",
21708
+ "domain.record.updateFrequency.quarterly": "Gegevens worden elke drie maanden bijgewerkt",
21709
+ "domain.record.updateFrequency.semimonthly": "Gegevens worden twee keer per maand bijgewerkt",
21710
+ "domain.record.updateFrequency.unknown": "De frequentie van gegevensonderhoud is onbekend",
21711
+ "domain.record.updateFrequency.week": "{count, plural, =0{0 keer} one{Een keer} other{{count} keer}} per week",
21712
+ "domain.record.updateFrequency.weekly": "Gegevens worden wekelijks bijgewerkt",
21713
+ "domain.record.updateFrequency.year": "{count, plural, =0{0 keer} one{Een keer} other{{count} keer}} per jaar",
21585
21714
  "downloads.format.unknown": "",
21586
21715
  "downloads.wfs.featuretype.not.found": "",
21587
21716
  dropFile: dropFile$1,
@@ -21627,6 +21756,9 @@ var nl = {
21627
21756
  "editor.record.form.field.onlineResource.dialogTitle": "",
21628
21757
  "editor.record.form.field.onlineResource.edit.description": "",
21629
21758
  "editor.record.form.field.onlineResource.edit.protocol": "",
21759
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Laagnaam",
21760
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Procesnaam",
21761
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Link naar de dienst",
21630
21762
  "editor.record.form.field.onlineResource.edit.title": "",
21631
21763
  "editor.record.form.field.onlineResource.fileSize": "",
21632
21764
  "editor.record.form.field.onlineResource.modify": "",
@@ -21676,7 +21808,7 @@ var nl = {
21676
21808
  "editor.record.form.temporalExtents.addRange": "",
21677
21809
  "editor.record.form.temporalExtents.date": "",
21678
21810
  "editor.record.form.temporalExtents.range": "",
21679
- "editor.record.form.updateFrequency.planned": "",
21811
+ "editor.record.form.updateFrequency.planned": "Deze dataset wordt regelmatig bijgewerkt.",
21680
21812
  "editor.record.importFromExternalFile.failure.body": "",
21681
21813
  "editor.record.importFromExternalFile.failure.title": "",
21682
21814
  "editor.record.importFromExternalFile.success.body": "",
@@ -22138,16 +22270,25 @@ var pt = {
22138
22270
  "domain.record.status.ongoing": "",
22139
22271
  "domain.record.status.removed": "",
22140
22272
  "domain.record.status.under_development": "",
22141
- "domain.record.updateFrequency.asNeeded": "",
22142
- "domain.record.updateFrequency.continual": "",
22143
- "domain.record.updateFrequency.day": "",
22144
- "domain.record.updateFrequency.irregular": "",
22145
- "domain.record.updateFrequency.month": "",
22146
- "domain.record.updateFrequency.notPlanned": "",
22147
- "domain.record.updateFrequency.periodic": "",
22148
- "domain.record.updateFrequency.unknown": "",
22149
- "domain.record.updateFrequency.week": "",
22150
- "domain.record.updateFrequency.year": "",
22273
+ "domain.record.updateFrequency.annually": "Os dados são atualizados anualmente",
22274
+ "domain.record.updateFrequency.asNeeded": "Os dados são atualizados conforme necessário",
22275
+ "domain.record.updateFrequency.biannually": "Os dados são atualizados duas vezes por ano",
22276
+ "domain.record.updateFrequency.biennially": "Os dados são atualizados a cada 2 anos",
22277
+ "domain.record.updateFrequency.continual": "Os dados são atualizados repetidamente e com frequência",
22278
+ "domain.record.updateFrequency.daily": "Os dados são atualizados diariamente",
22279
+ "domain.record.updateFrequency.day": "{count, plural, =0{0 vezes} one{Uma vez} other{{count} vezes}} por dia",
22280
+ "domain.record.updateFrequency.fortnightly": "Os dados são atualizados a cada duas semanas",
22281
+ "domain.record.updateFrequency.irregular": "Os dados são atualizados em intervalos irregulares",
22282
+ "domain.record.updateFrequency.month": "{count, plural, =0{0 vezes} one{Uma vez} other{{count} vezes}} por mês",
22283
+ "domain.record.updateFrequency.monthly": "Os dados são atualizados mensalmente",
22284
+ "domain.record.updateFrequency.notPlanned": "Não há planos para atualizar os dados",
22285
+ "domain.record.updateFrequency.periodic": "Os dados são atualizados em intervalos regulares",
22286
+ "domain.record.updateFrequency.quarterly": "Os dados são atualizados a cada três meses",
22287
+ "domain.record.updateFrequency.semimonthly": "Os dados são atualizados duas vezes por mês",
22288
+ "domain.record.updateFrequency.unknown": "A frequência de manutenção dos dados é desconhecida",
22289
+ "domain.record.updateFrequency.week": "{count, plural, =0{0 vezes} one{Uma vez} other{{count} vezes}} por semana",
22290
+ "domain.record.updateFrequency.weekly": "Os dados são atualizados semanalmente",
22291
+ "domain.record.updateFrequency.year": "{count, plural, =0{0 vezes} one{Uma vez} other{{count} vezes}} por ano",
22151
22292
  "downloads.format.unknown": "",
22152
22293
  "downloads.wfs.featuretype.not.found": "",
22153
22294
  dropFile: dropFile,
@@ -22193,6 +22334,9 @@ var pt = {
22193
22334
  "editor.record.form.field.onlineResource.dialogTitle": "",
22194
22335
  "editor.record.form.field.onlineResource.edit.description": "",
22195
22336
  "editor.record.form.field.onlineResource.edit.protocol": "",
22337
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Nome da camada",
22338
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Nome do processo",
22339
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Link para o serviço",
22196
22340
  "editor.record.form.field.onlineResource.edit.title": "",
22197
22341
  "editor.record.form.field.onlineResource.fileSize": "",
22198
22342
  "editor.record.form.field.onlineResource.modify": "",
@@ -22242,7 +22386,7 @@ var pt = {
22242
22386
  "editor.record.form.temporalExtents.addRange": "",
22243
22387
  "editor.record.form.temporalExtents.date": "",
22244
22388
  "editor.record.form.temporalExtents.range": "",
22245
- "editor.record.form.updateFrequency.planned": "",
22389
+ "editor.record.form.updateFrequency.planned": "Este conjunto de dados é atualizado regularmente.",
22246
22390
  "editor.record.importFromExternalFile.failure.body": "",
22247
22391
  "editor.record.importFromExternalFile.failure.title": "",
22248
22392
  "editor.record.importFromExternalFile.success.body": "",
@@ -26131,6 +26275,7 @@ class ButtonComponent {
26131
26275
  handleClick(event) {
26132
26276
  this.buttonClick.emit();
26133
26277
  event.preventDefault();
26278
+ event.currentTarget.blur();
26134
26279
  propagateToDocumentOnly(event);
26135
26280
  }
26136
26281
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -26549,42 +26694,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26549
26694
  type: Output
26550
26695
  }] } });
26551
26696
 
26552
- class DateRangePickerComponent {
26553
- constructor() {
26554
- this.startDateChange = new EventEmitter();
26555
- this.endDateChange = new EventEmitter();
26556
- }
26557
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26558
- 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: [
26559
- provideIcons({ iconoirCalendar }),
26560
- provideNgIconsConfig({
26561
- size: '1.5rem',
26562
- }),
26563
- ], 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 }); }
26564
- }
26565
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateRangePickerComponent, decorators: [{
26566
- type: Component,
26567
- args: [{ selector: 'gn-ui-date-range-picker', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
26568
- MatNativeDateModule,
26569
- MatDatepickerModule,
26570
- ButtonComponent,
26571
- NgIconComponent,
26572
- ], providers: [
26573
- provideIcons({ iconoirCalendar }),
26574
- provideNgIconsConfig({
26575
- size: '1.5rem',
26576
- }),
26577
- ], 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"] }]
26578
- }], propDecorators: { startDate: [{
26579
- type: Input
26580
- }], endDate: [{
26581
- type: Input
26582
- }], startDateChange: [{
26583
- type: Output
26584
- }], endDateChange: [{
26585
- type: Output
26586
- }] } });
26587
-
26588
26697
  class DateRangeDropdownComponent {
26589
26698
  constructor(overlayContainer, cdr) {
26590
26699
  this.overlayContainer = overlayContainer;
@@ -26639,6 +26748,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26639
26748
  args: ['picker']
26640
26749
  }] } });
26641
26750
 
26751
+ class DateRangePickerComponent {
26752
+ constructor() {
26753
+ this.startDateChange = new EventEmitter();
26754
+ this.endDateChange = new EventEmitter();
26755
+ }
26756
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26757
+ 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: [
26758
+ provideIcons({ iconoirCalendar }),
26759
+ provideNgIconsConfig({
26760
+ size: '1.5rem',
26761
+ }),
26762
+ ], 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 }); }
26763
+ }
26764
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateRangePickerComponent, decorators: [{
26765
+ type: Component,
26766
+ args: [{ selector: 'gn-ui-date-range-picker', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
26767
+ MatNativeDateModule,
26768
+ MatDatepickerModule,
26769
+ ButtonComponent,
26770
+ NgIconComponent,
26771
+ ], providers: [
26772
+ provideIcons({ iconoirCalendar }),
26773
+ provideNgIconsConfig({
26774
+ size: '1.5rem',
26775
+ }),
26776
+ ], 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"] }]
26777
+ }], propDecorators: { startDate: [{
26778
+ type: Input
26779
+ }], endDate: [{
26780
+ type: Input
26781
+ }], startDateChange: [{
26782
+ type: Output
26783
+ }], endDateChange: [{
26784
+ type: Output
26785
+ }] } });
26786
+
26642
26787
  const placeholder = 'dropFile';
26643
26788
  marker('dropFile');
26644
26789
  class DragAndDropFileInputComponent {
@@ -27088,221 +27233,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27088
27233
  type: Output
27089
27234
  }] } });
27090
27235
 
27091
- class NavigationButtonComponent {
27092
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27093
- 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 }); }
27094
- }
27095
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NavigationButtonComponent, decorators: [{
27096
- type: Component,
27097
- 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"] }]
27098
- }], propDecorators: { label: [{
27099
- type: Input
27100
- }], icon: [{
27101
- type: Input
27102
- }] } });
27103
-
27104
- class SearchInputComponent {
27105
- constructor() {
27106
- this.value = '';
27107
- this.placeholder = '';
27108
- this.rawChange = new Subject();
27109
- this.valueChange = this.rawChange.pipe(distinctUntilChanged$1());
27110
- }
27111
- handleChange($event) {
27112
- const value = $event.target.value;
27113
- this.rawChange.next(value);
27114
- }
27115
- clear() {
27116
- this.value = null;
27117
- this.rawChange.next(null);
27118
- }
27119
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27120
- 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: [
27121
- provideIcons({ matSearch, matClose }),
27122
- provideNgIconsConfig({
27123
- size: '1.5em',
27124
- }),
27125
- ], 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 }); }
27126
- }
27127
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchInputComponent, decorators: [{
27128
- type: Component,
27129
- args: [{ selector: 'gn-ui-search-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, NgIconComponent], providers: [
27130
- provideIcons({ matSearch, matClose }),
27131
- provideNgIconsConfig({
27132
- size: '1.5em',
27133
- }),
27134
- ], 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" }]
27135
- }], propDecorators: { value: [{
27136
- type: Input
27137
- }], placeholder: [{
27138
- type: Input
27139
- }], valueChange: [{
27140
- type: Output
27141
- }] } });
27142
-
27143
- class StarToggleComponent {
27144
- constructor() {
27145
- this.disabled = false;
27146
- this.newValue = new EventEmitter();
27147
- }
27148
- toggle(event) {
27149
- if (!this.disabled) {
27150
- this.toggled = !this.toggled;
27151
- if (this.toggled) {
27152
- const anim = this.overlay.nativeElement.getAnimations()[0];
27153
- anim.cancel();
27154
- anim.play();
27155
- }
27156
- this.newValue.emit(this.toggled);
27157
- }
27158
- propagateToDocumentOnly(event);
27159
- event.preventDefault();
27160
- }
27161
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StarToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27162
- 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 }); }
27163
- }
27164
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StarToggleComponent, decorators: [{
27165
- type: Component,
27166
- 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"] }]
27167
- }], propDecorators: { toggled: [{
27168
- type: Input
27169
- }], disabled: [{
27170
- type: Input
27171
- }], newValue: [{
27172
- type: Output
27173
- }], overlay: [{
27174
- type: ViewChild,
27175
- args: ['starOverlay']
27176
- }] } });
27177
-
27178
- class TextAreaComponent {
27179
- constructor() {
27180
- this.value = '';
27181
- this.disabled = false;
27182
- this.extraClass = '';
27183
- this.placeholder = '';
27184
- this.required = false;
27185
- this.rawChange = new Subject();
27186
- this.valueChange = this.rawChange.pipe(distinctUntilChanged());
27187
- }
27188
- ngAfterViewInit() {
27189
- this.checkRequired(this.input.nativeElement.value);
27190
- }
27191
- checkRequired(value) {
27192
- this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
27193
- }
27194
- handleChange($event) {
27195
- const value = $event.target.value;
27196
- this.checkRequired(value);
27197
- this.rawChange.next(value);
27198
- }
27199
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27200
- 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"] }] }); }
27201
- }
27202
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextAreaComponent, decorators: [{
27203
- type: Component,
27204
- 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"] }]
27205
- }], propDecorators: { value: [{
27206
- type: Input
27207
- }], disabled: [{
27208
- type: Input
27209
- }], extraClass: [{
27210
- type: Input
27211
- }], placeholder: [{
27212
- type: Input
27213
- }], required: [{
27214
- type: Input
27215
- }], valueChange: [{
27216
- type: Output
27217
- }], input: [{
27218
- type: ViewChild,
27219
- args: ['input']
27220
- }] } });
27221
-
27222
- class TextInputComponent {
27223
- constructor() {
27224
- this.value = '';
27225
- this.extraClass = '';
27226
- this.required = false;
27227
- this.rawChange = new Subject();
27228
- this.valueChange = this.rawChange.pipe(distinctUntilChanged());
27229
- }
27230
- ngAfterViewInit() {
27231
- this.checkRequired(this.input.nativeElement.value);
27232
- }
27233
- checkRequired(value) {
27234
- this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
27235
- }
27236
- handleChange($event) {
27237
- const value = $event.target.value;
27238
- this.checkRequired(value);
27239
- this.rawChange.next(value);
27240
- }
27241
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27242
- 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"] }] }); }
27243
- }
27244
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextInputComponent, decorators: [{
27245
- type: Component,
27246
- 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"] }]
27247
- }], propDecorators: { value: [{
27248
- type: Input
27249
- }], extraClass: [{
27250
- type: Input
27251
- }], placeholder: [{
27252
- type: Input
27253
- }], required: [{
27254
- type: Input
27255
- }], disabled: [{
27256
- type: Input
27257
- }], valueChange: [{
27258
- type: Output
27259
- }], input: [{
27260
- type: ViewChild,
27261
- args: ['input']
27262
- }] } });
27263
-
27264
- class ViewportIntersectorComponent {
27265
- constructor(vcRef) {
27266
- this.vcRef = vcRef;
27267
- this.isInViewport = new EventEmitter();
27268
- this.entersViewport = this.isInViewport.pipe(filter((inViewport) => inViewport), map$1(() => undefined));
27269
- this.exitsViewport = this.isInViewport.pipe(filter((inViewport) => !inViewport), map$1(() => undefined));
27270
- }
27271
- ngOnInit() {
27272
- const elToObserve = this.vcRef.element.nativeElement;
27273
- this.observeInputElement(elToObserve);
27274
- }
27275
- ngOnDestroy() {
27276
- const elToObserve = this.vcRef.element.nativeElement;
27277
- this.unObserveInputElement(elToObserve);
27278
- }
27279
- observeInputElement(elToObserve) {
27280
- if (!this.observer) {
27281
- this.observer = new IntersectionObserver((entries) => {
27282
- entries.forEach((entry) => {
27283
- this.isInViewport.emit(entry.isIntersecting);
27284
- });
27285
- }, { root: null, threshold: 0 });
27286
- }
27287
- this.observer.observe(elToObserve);
27288
- }
27289
- unObserveInputElement(elToObserve) {
27290
- this.observer?.unobserve(elToObserve);
27291
- }
27292
- 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 }); }
27293
- 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: [""] }); }
27294
- }
27295
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewportIntersectorComponent, decorators: [{
27296
- type: Component,
27297
- args: [{ selector: 'gn-ui-viewport-intersector', template: "<div class=\"w-full h-full\"></div>\n" }]
27298
- }], ctorParameters: () => [{ type: i0.ViewContainerRef }], propDecorators: { isInViewport: [{
27299
- type: Output
27300
- }], entersViewport: [{
27301
- type: Output
27302
- }], exitsViewport: [{
27303
- type: Output
27304
- }] } });
27305
-
27306
27236
  class FilesDropDirective {
27307
27237
  constructor() {
27308
27238
  this.dragFilesOver = new EventEmitter();
@@ -27376,7 +27306,7 @@ class UrlInputComponent {
27376
27306
  this.cd = cd;
27377
27307
  this.extraClass = '';
27378
27308
  this.placeholder = 'https://';
27379
- this.showUploadButton = true;
27309
+ this.showValidateButton = true;
27380
27310
  /**
27381
27311
  * This will emit null if the field is emptied
27382
27312
  */
@@ -27410,12 +27340,12 @@ class UrlInputComponent {
27410
27340
  }
27411
27341
  }
27412
27342
  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 }); }
27413
- 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: [
27343
+ 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: [
27414
27344
  provideIcons({ iconoirLink, iconoirArrowUp }),
27415
27345
  provideNgIconsConfig({
27416
27346
  size: '1.5em',
27417
27347
  }),
27418
- ], 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 }); }
27348
+ ], 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 }); }
27419
27349
  }
27420
27350
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UrlInputComponent, decorators: [{
27421
27351
  type: Component,
@@ -27424,7 +27354,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27424
27354
  provideNgIconsConfig({
27425
27355
  size: '1.5em',
27426
27356
  }),
27427
- ], 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"] }]
27357
+ ], 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"] }]
27428
27358
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { value: [{
27429
27359
  type: Input
27430
27360
  }], extraClass: [{
@@ -27433,7 +27363,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27433
27363
  type: Input
27434
27364
  }], disabled: [{
27435
27365
  type: Input
27436
- }], showUploadButton: [{
27366
+ }], showValidateButton: [{
27437
27367
  type: Input
27438
27368
  }], valueChange: [{
27439
27369
  type: Output
@@ -27441,100 +27371,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27441
27371
  type: Output
27442
27372
  }] } });
27443
27373
 
27444
- class ImageInputComponent {
27374
+ class FileInputComponent {
27445
27375
  get isUploadInProgress() {
27446
27376
  return this.uploadProgress !== undefined;
27447
27377
  }
27448
- constructor(http, cd) {
27449
- this.http = http;
27378
+ constructor(cd) {
27450
27379
  this.cd = cd;
27451
27380
  this.disabled = false;
27452
27381
  this.fileChange = new EventEmitter();
27453
27382
  this.urlChange = new EventEmitter();
27454
27383
  this.uploadCancel = new EventEmitter();
27455
- this.delete = new EventEmitter();
27456
- this.altTextChange = new EventEmitter();
27457
27384
  this.dragFilesOver = false;
27458
- this.showUrlInput = false;
27459
- this.downloadError = false;
27460
- this.showAltTextInput = false;
27461
27385
  }
27462
27386
  getPrimaryText() {
27463
- if (this.uploadError) {
27464
- return marker('input.image.uploadErrorLabel');
27465
- }
27466
27387
  if (this.uploadProgress) {
27467
- return marker('input.image.uploadProgressLabel');
27388
+ return marker('input.file.uploadProgressLabel');
27468
27389
  }
27469
- return marker('input.image.selectFileLabel');
27390
+ return marker('input.file.selectFileLabel');
27470
27391
  }
27471
27392
  getSecondaryText() {
27472
- if (this.uploadError) {
27473
- return marker('input.image.uploadErrorRetry');
27474
- }
27475
27393
  if (this.uploadProgress) {
27476
- return marker('input.image.uploadProgressCancel');
27394
+ return marker('input.file.uploadProgressCancel');
27477
27395
  }
27478
- return marker('input.image.dropFileLabel');
27396
+ return marker('input.file.dropFileLabel');
27479
27397
  }
27480
27398
  handleDragFilesOver(dragFilesOver) {
27481
- if (!this.showUrlInput) {
27482
- this.dragFilesOver = dragFilesOver;
27483
- this.cd.markForCheck();
27484
- }
27399
+ this.dragFilesOver = dragFilesOver;
27400
+ this.cd.markForCheck();
27485
27401
  }
27486
27402
  handleDropFiles(files) {
27487
- if (!this.showUrlInput) {
27488
- const validFiles = this.filterTypeImage(files);
27489
- if (validFiles.length > 0) {
27490
- this.resizeAndEmit(validFiles[0]);
27491
- }
27403
+ if (files.length > 0) {
27404
+ this.fileChange.emit(files[0]);
27492
27405
  }
27493
27406
  }
27494
27407
  handleFileInput(event) {
27495
- const inputFiles = Array.from(event.target.files);
27496
- const validFiles = this.filterTypeImage(inputFiles);
27497
- if (validFiles.length > 0) {
27498
- this.resizeAndEmit(validFiles[0]);
27499
- }
27500
- }
27501
- displayUrlInput() {
27502
- this.uploadCancel.emit();
27503
- this.showUrlInput = true;
27408
+ this.handleDropFiles(Array.from(event.target.files));
27504
27409
  }
27505
- async downloadUrl(url) {
27506
- this.downloadError = false;
27507
- const name = url.split('/').pop();
27508
- try {
27509
- const response = await firstValueFrom(this.http.head(url, { observe: 'response' }));
27510
- if (response.headers.get('content-type')?.startsWith('image/') &&
27511
- parseInt(response.headers.get('content-length')) <
27512
- megabytesToBytes(this.maxSizeMB)) {
27513
- this.http.get(url, { responseType: 'blob' }).subscribe({
27514
- next: (blob) => {
27515
- this.cd.markForCheck();
27516
- const file = new File([blob], name);
27517
- this.fileChange.emit(file);
27518
- },
27519
- error: () => {
27520
- this.downloadError = true;
27521
- this.cd.markForCheck();
27522
- this.urlChange.emit(url);
27523
- },
27524
- });
27525
- }
27526
- }
27527
- catch {
27528
- this.downloadError = true;
27529
- this.cd.markForCheck();
27410
+ handleUrlChange(url) {
27411
+ if (!url)
27530
27412
  return;
27531
- }
27413
+ this.urlChange.emit(url);
27532
27414
  }
27533
27415
  handleSecondaryTextClick(event) {
27534
- if (this.uploadError) {
27535
- this.handleRetry();
27536
- }
27537
- else if (this.uploadProgress) {
27416
+ if (this.uploadProgress) {
27538
27417
  this.handleCancel();
27539
27418
  event.preventDefault();
27540
27419
  }
@@ -27542,86 +27421,40 @@ class ImageInputComponent {
27542
27421
  handleCancel() {
27543
27422
  this.uploadCancel.emit();
27544
27423
  }
27545
- handleRetry() {
27546
- switch (this.lastUploadType) {
27547
- case 'file':
27548
- this.fileChange.emit(this.lastUploadContent);
27549
- break;
27550
- case 'url':
27551
- this.urlChange.emit(this.lastUploadContent);
27552
- break;
27553
- }
27554
- }
27555
- handleDelete() {
27556
- this.delete.emit();
27557
- }
27558
- toggleAltTextInput() {
27559
- this.showAltTextInput = !this.showAltTextInput;
27560
- }
27561
- handleAltTextChange(altText) {
27562
- this.altTextChange.emit(altText);
27563
- }
27564
- filterTypeImage(files) {
27565
- return files.filter((file) => {
27566
- return file.type.startsWith('image/');
27567
- });
27568
- }
27569
- resizeAndEmit(imageToResize) {
27570
- const maxSizeBytes = megabytesToBytes(this.maxSizeMB);
27571
- downgradeImage(imageToResize, maxSizeBytes).then((resizedImage) => {
27572
- const fileToEmit = new File([resizedImage], imageToResize.name);
27573
- this.fileChange.emit(fileToEmit);
27574
- });
27575
- }
27576
- 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 }); }
27577
- 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: [
27424
+ 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 }); }
27425
+ 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: [
27578
27426
  provideIcons({
27579
- iconoirMediaImage,
27427
+ iconoirCloudUpload,
27580
27428
  iconoirFramePlusIn,
27581
- iconoirMediaImageXmark,
27582
- iconoirBin,
27583
- iconoirPlus,
27584
- iconoirLink,
27585
27429
  }),
27586
27430
  provideNgIconsConfig({
27587
- size: '1.5rem',
27431
+ size: '1.5em',
27588
27432
  }),
27589
- ], 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 }); }
27433
+ ], 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 }); }
27590
27434
  }
27591
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageInputComponent, decorators: [{
27435
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileInputComponent, decorators: [{
27592
27436
  type: Component,
27593
- args: [{ selector: 'gn-ui-image-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
27437
+ args: [{ selector: 'gn-ui-file-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
27594
27438
  CommonModule,
27595
27439
  ButtonComponent,
27596
27440
  FilesDropDirective,
27597
27441
  MatProgressSpinnerModule,
27598
27442
  TranslateModule,
27599
27443
  UrlInputComponent,
27600
- TextInputComponent,
27601
27444
  NgIconComponent,
27602
27445
  ], providers: [
27603
27446
  provideIcons({
27604
- iconoirMediaImage,
27447
+ iconoirCloudUpload,
27605
27448
  iconoirFramePlusIn,
27606
- iconoirMediaImageXmark,
27607
- iconoirBin,
27608
- iconoirPlus,
27609
- iconoirLink,
27610
27449
  }),
27611
27450
  provideNgIconsConfig({
27612
- size: '1.5rem',
27451
+ size: '1.5em',
27613
27452
  }),
27614
- ], 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"] }]
27615
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i0.ChangeDetectorRef }], propDecorators: { maxSizeMB: [{
27616
- type: Input
27617
- }], previewUrl: [{
27618
- type: Input
27619
- }], altText: [{
27453
+ ], 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"] }]
27454
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { maxSizeMB: [{
27620
27455
  type: Input
27621
27456
  }], uploadProgress: [{
27622
27457
  type: Input
27623
- }], uploadError: [{
27624
- type: Input
27625
27458
  }], disabled: [{
27626
27459
  type: Input
27627
27460
  }], fileChange: [{
@@ -27630,9 +27463,249 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27630
27463
  type: Output
27631
27464
  }], uploadCancel: [{
27632
27465
  type: Output
27633
- }], delete: [{
27466
+ }] } });
27467
+
27468
+ class NavigationButtonComponent {
27469
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27470
+ 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 }); }
27471
+ }
27472
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NavigationButtonComponent, decorators: [{
27473
+ type: Component,
27474
+ 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"] }]
27475
+ }], propDecorators: { label: [{
27476
+ type: Input
27477
+ }], icon: [{
27478
+ type: Input
27479
+ }] } });
27480
+
27481
+ class SearchInputComponent {
27482
+ constructor() {
27483
+ this.value = '';
27484
+ this.placeholder = '';
27485
+ this.rawChange = new Subject();
27486
+ this.valueChange = this.rawChange.pipe(distinctUntilChanged$1());
27487
+ }
27488
+ handleChange($event) {
27489
+ const value = $event.target.value;
27490
+ this.rawChange.next(value);
27491
+ }
27492
+ clear() {
27493
+ this.value = null;
27494
+ this.rawChange.next(null);
27495
+ }
27496
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27497
+ 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: [
27498
+ provideIcons({ matSearch, matClose }),
27499
+ provideNgIconsConfig({
27500
+ size: '1.5em',
27501
+ }),
27502
+ ], 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 }); }
27503
+ }
27504
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchInputComponent, decorators: [{
27505
+ type: Component,
27506
+ args: [{ selector: 'gn-ui-search-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, NgIconComponent], providers: [
27507
+ provideIcons({ matSearch, matClose }),
27508
+ provideNgIconsConfig({
27509
+ size: '1.5em',
27510
+ }),
27511
+ ], 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" }]
27512
+ }], propDecorators: { value: [{
27513
+ type: Input
27514
+ }], placeholder: [{
27515
+ type: Input
27516
+ }], valueChange: [{
27634
27517
  type: Output
27635
- }], altTextChange: [{
27518
+ }] } });
27519
+
27520
+ class StarToggleComponent {
27521
+ constructor() {
27522
+ this.disabled = false;
27523
+ this.newValue = new EventEmitter();
27524
+ }
27525
+ toggle(event) {
27526
+ if (!this.disabled) {
27527
+ this.toggled = !this.toggled;
27528
+ if (this.toggled) {
27529
+ const anim = this.overlay.nativeElement.getAnimations()[0];
27530
+ anim.cancel();
27531
+ anim.play();
27532
+ }
27533
+ this.newValue.emit(this.toggled);
27534
+ }
27535
+ propagateToDocumentOnly(event);
27536
+ event.preventDefault();
27537
+ }
27538
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StarToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27539
+ 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 }); }
27540
+ }
27541
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StarToggleComponent, decorators: [{
27542
+ type: Component,
27543
+ 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"] }]
27544
+ }], propDecorators: { toggled: [{
27545
+ type: Input
27546
+ }], disabled: [{
27547
+ type: Input
27548
+ }], newValue: [{
27549
+ type: Output
27550
+ }], overlay: [{
27551
+ type: ViewChild,
27552
+ args: ['starOverlay']
27553
+ }] } });
27554
+
27555
+ class SwitchToggleComponent {
27556
+ constructor() {
27557
+ this.ariaLabel = '';
27558
+ this.extraClasses = '';
27559
+ this.disabled = false;
27560
+ this.selectedValue = new EventEmitter();
27561
+ }
27562
+ onChange(selectedOption) {
27563
+ this.options.find((option) => option.label === selectedOption.label).checked = true;
27564
+ this.selectedValue.emit(selectedOption);
27565
+ }
27566
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwitchToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27567
+ 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 }); }
27568
+ }
27569
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwitchToggleComponent, decorators: [{
27570
+ type: Component,
27571
+ 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"] }]
27572
+ }], propDecorators: { options: [{
27573
+ type: Input
27574
+ }], ariaLabel: [{
27575
+ type: Input
27576
+ }], extraClasses: [{
27577
+ type: Input
27578
+ }], disabled: [{
27579
+ type: Input
27580
+ }], selectedValue: [{
27581
+ type: Output
27582
+ }] } });
27583
+
27584
+ class TextAreaComponent {
27585
+ constructor() {
27586
+ this.value = '';
27587
+ this.disabled = false;
27588
+ this.extraClass = '';
27589
+ this.placeholder = '';
27590
+ this.required = false;
27591
+ this.rawChange = new Subject();
27592
+ this.valueChange = this.rawChange.pipe(distinctUntilChanged());
27593
+ }
27594
+ ngAfterViewInit() {
27595
+ this.checkRequired(this.input.nativeElement.value);
27596
+ }
27597
+ checkRequired(value) {
27598
+ this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
27599
+ }
27600
+ handleChange($event) {
27601
+ const value = $event.target.value;
27602
+ this.checkRequired(value);
27603
+ this.rawChange.next(value);
27604
+ }
27605
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27606
+ 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"] }] }); }
27607
+ }
27608
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextAreaComponent, decorators: [{
27609
+ type: Component,
27610
+ 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"] }]
27611
+ }], propDecorators: { value: [{
27612
+ type: Input
27613
+ }], disabled: [{
27614
+ type: Input
27615
+ }], extraClass: [{
27616
+ type: Input
27617
+ }], placeholder: [{
27618
+ type: Input
27619
+ }], required: [{
27620
+ type: Input
27621
+ }], valueChange: [{
27622
+ type: Output
27623
+ }], input: [{
27624
+ type: ViewChild,
27625
+ args: ['input']
27626
+ }] } });
27627
+
27628
+ class TextInputComponent {
27629
+ constructor() {
27630
+ this.value = '';
27631
+ this.extraClass = '';
27632
+ this.required = false;
27633
+ this.rawChange = new Subject();
27634
+ this.valueChange = this.rawChange.pipe(distinctUntilChanged());
27635
+ }
27636
+ ngAfterViewInit() {
27637
+ this.checkRequired(this.input.nativeElement.value);
27638
+ }
27639
+ checkRequired(value) {
27640
+ this.input.nativeElement.classList.toggle('invalid', this.required && value === '');
27641
+ }
27642
+ handleChange($event) {
27643
+ const value = $event.target.value;
27644
+ this.checkRequired(value);
27645
+ this.rawChange.next(value);
27646
+ }
27647
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27648
+ 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"] }] }); }
27649
+ }
27650
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextInputComponent, decorators: [{
27651
+ type: Component,
27652
+ 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"] }]
27653
+ }], propDecorators: { value: [{
27654
+ type: Input
27655
+ }], extraClass: [{
27656
+ type: Input
27657
+ }], placeholder: [{
27658
+ type: Input
27659
+ }], required: [{
27660
+ type: Input
27661
+ }], disabled: [{
27662
+ type: Input
27663
+ }], valueChange: [{
27664
+ type: Output
27665
+ }], input: [{
27666
+ type: ViewChild,
27667
+ args: ['input']
27668
+ }] } });
27669
+
27670
+ class ViewportIntersectorComponent {
27671
+ constructor(vcRef) {
27672
+ this.vcRef = vcRef;
27673
+ this.isInViewport = new EventEmitter();
27674
+ this.entersViewport = this.isInViewport.pipe(filter((inViewport) => inViewport), map$1(() => undefined));
27675
+ this.exitsViewport = this.isInViewport.pipe(filter((inViewport) => !inViewport), map$1(() => undefined));
27676
+ }
27677
+ ngOnInit() {
27678
+ const elToObserve = this.vcRef.element.nativeElement;
27679
+ this.observeInputElement(elToObserve);
27680
+ }
27681
+ ngOnDestroy() {
27682
+ const elToObserve = this.vcRef.element.nativeElement;
27683
+ this.unObserveInputElement(elToObserve);
27684
+ }
27685
+ observeInputElement(elToObserve) {
27686
+ if (!this.observer) {
27687
+ this.observer = new IntersectionObserver((entries) => {
27688
+ entries.forEach((entry) => {
27689
+ this.isInViewport.emit(entry.isIntersecting);
27690
+ });
27691
+ }, { root: null, threshold: 0 });
27692
+ }
27693
+ this.observer.observe(elToObserve);
27694
+ }
27695
+ unObserveInputElement(elToObserve) {
27696
+ this.observer?.unobserve(elToObserve);
27697
+ }
27698
+ 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 }); }
27699
+ 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: [""] }); }
27700
+ }
27701
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewportIntersectorComponent, decorators: [{
27702
+ type: Component,
27703
+ args: [{ selector: 'gn-ui-viewport-intersector', template: "<div class=\"w-full h-full\"></div>\n" }]
27704
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }], propDecorators: { isInViewport: [{
27705
+ type: Output
27706
+ }], entersViewport: [{
27707
+ type: Output
27708
+ }], exitsViewport: [{
27636
27709
  type: Output
27637
27710
  }] } });
27638
27711
 
@@ -27659,7 +27732,6 @@ class UiInputsModule {
27659
27732
  EditableLabelDirective,
27660
27733
  TextAreaComponent,
27661
27734
  ButtonComponent,
27662
- ImageInputComponent,
27663
27735
  DropdownSelectorComponent,
27664
27736
  DateRangePickerComponent,
27665
27737
  CheckToggleComponent,
@@ -27675,7 +27747,6 @@ class UiInputsModule {
27675
27747
  CheckboxComponent,
27676
27748
  DateRangePickerComponent,
27677
27749
  EditableLabelDirective,
27678
- ImageInputComponent,
27679
27750
  BadgeComponent] }); }
27680
27751
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiInputsModule, providers: [
27681
27752
  provideIcons({
@@ -27703,7 +27774,6 @@ class UiInputsModule {
27703
27774
  MatDatepickerModule,
27704
27775
  MatNativeDateModule,
27705
27776
  TextAreaComponent,
27706
- ImageInputComponent,
27707
27777
  DropdownSelectorComponent,
27708
27778
  DateRangePickerComponent,
27709
27779
  CheckToggleComponent,
@@ -27740,7 +27810,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27740
27810
  EditableLabelDirective,
27741
27811
  TextAreaComponent,
27742
27812
  ButtonComponent,
27743
- ImageInputComponent,
27744
27813
  DropdownSelectorComponent,
27745
27814
  DateRangePickerComponent,
27746
27815
  CheckToggleComponent,
@@ -27769,135 +27838,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27769
27838
  CheckboxComponent,
27770
27839
  DateRangePickerComponent,
27771
27840
  EditableLabelDirective,
27772
- ImageInputComponent,
27773
27841
  BadgeComponent,
27774
27842
  ],
27775
27843
  }]
27776
27844
  }] });
27777
27845
 
27778
- class SwitchToggleComponent {
27779
- constructor() {
27780
- this.ariaLabel = '';
27781
- this.extraClasses = '';
27782
- this.disabled = false;
27783
- this.selectedValue = new EventEmitter();
27784
- }
27785
- onChange(selectedOption) {
27786
- this.options.find((option) => option.label === selectedOption.label).checked = true;
27787
- this.selectedValue.emit(selectedOption);
27788
- }
27789
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwitchToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27790
- 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 }); }
27791
- }
27792
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwitchToggleComponent, decorators: [{
27793
- type: Component,
27794
- 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"] }]
27795
- }], propDecorators: { options: [{
27796
- type: Input
27797
- }], ariaLabel: [{
27798
- type: Input
27799
- }], extraClasses: [{
27800
- type: Input
27801
- }], disabled: [{
27802
- type: Input
27803
- }], selectedValue: [{
27804
- type: Output
27805
- }] } });
27806
-
27807
- class FileInputComponent {
27808
- get isUploadInProgress() {
27809
- return this.uploadProgress !== undefined;
27810
- }
27811
- constructor(cd) {
27812
- this.cd = cd;
27813
- this.disabled = false;
27814
- this.fileChange = new EventEmitter();
27815
- this.urlChange = new EventEmitter();
27816
- this.uploadCancel = new EventEmitter();
27817
- this.dragFilesOver = false;
27818
- }
27819
- getPrimaryText() {
27820
- if (this.uploadProgress) {
27821
- return marker('input.file.uploadProgressLabel');
27822
- }
27823
- return marker('input.file.selectFileLabel');
27824
- }
27825
- getSecondaryText() {
27826
- if (this.uploadProgress) {
27827
- return marker('input.file.uploadProgressCancel');
27828
- }
27829
- return marker('input.file.dropFileLabel');
27830
- }
27831
- handleDragFilesOver(dragFilesOver) {
27832
- this.dragFilesOver = dragFilesOver;
27833
- this.cd.markForCheck();
27834
- }
27835
- handleDropFiles(files) {
27836
- if (files.length > 0) {
27837
- this.fileChange.emit(files[0]);
27838
- }
27839
- }
27840
- handleFileInput(event) {
27841
- this.handleDropFiles(Array.from(event.target.files));
27842
- }
27843
- handleUrlChange(url) {
27844
- if (!url)
27845
- return;
27846
- this.urlChange.emit(url);
27847
- }
27848
- handleSecondaryTextClick(event) {
27849
- if (this.uploadProgress) {
27850
- this.handleCancel();
27851
- event.preventDefault();
27852
- }
27853
- }
27854
- handleCancel() {
27855
- this.uploadCancel.emit();
27856
- }
27857
- 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 }); }
27858
- 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: [
27859
- provideIcons({
27860
- iconoirCloudUpload,
27861
- iconoirFramePlusIn,
27862
- }),
27863
- provideNgIconsConfig({
27864
- size: '1.5em',
27865
- }),
27866
- ], 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 }); }
27867
- }
27868
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileInputComponent, decorators: [{
27869
- type: Component,
27870
- args: [{ selector: 'gn-ui-file-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
27871
- CommonModule,
27872
- ButtonComponent,
27873
- FilesDropDirective,
27874
- MatProgressSpinnerModule,
27875
- TranslateModule,
27876
- UrlInputComponent,
27877
- NgIconComponent,
27878
- ], providers: [
27879
- provideIcons({
27880
- iconoirCloudUpload,
27881
- iconoirFramePlusIn,
27882
- }),
27883
- provideNgIconsConfig({
27884
- size: '1.5em',
27885
- }),
27886
- ], 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"] }]
27887
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { maxSizeMB: [{
27888
- type: Input
27889
- }], uploadProgress: [{
27890
- type: Input
27891
- }], disabled: [{
27892
- type: Input
27893
- }], fileChange: [{
27894
- type: Output
27895
- }], urlChange: [{
27896
- type: Output
27897
- }], uploadCancel: [{
27898
- type: Output
27899
- }] } });
27900
-
27901
27846
  class SortableListComponent {
27902
27847
  constructor() {
27903
27848
  this.itemsOrderChange = new EventEmitter();
@@ -29124,6 +29069,202 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
29124
29069
  type: Output
29125
29070
  }] } });
29126
29071
 
29072
+ class ImageInputComponent {
29073
+ get isUploadInProgress() {
29074
+ return this.uploadProgress !== undefined;
29075
+ }
29076
+ constructor(http, cd) {
29077
+ this.http = http;
29078
+ this.cd = cd;
29079
+ this.disabled = false;
29080
+ this.fileChange = new EventEmitter();
29081
+ this.urlChange = new EventEmitter();
29082
+ this.uploadCancel = new EventEmitter();
29083
+ this.delete = new EventEmitter();
29084
+ this.altTextChange = new EventEmitter();
29085
+ this.dragFilesOver = false;
29086
+ this.showUrlInput = false;
29087
+ this.downloadError = false;
29088
+ this.showAltTextInput = false;
29089
+ }
29090
+ getPrimaryText() {
29091
+ if (this.uploadError) {
29092
+ return marker('input.image.uploadErrorLabel');
29093
+ }
29094
+ if (this.uploadProgress) {
29095
+ return marker('input.image.uploadProgressLabel');
29096
+ }
29097
+ return marker('input.image.selectFileLabel');
29098
+ }
29099
+ getSecondaryText() {
29100
+ if (this.uploadError) {
29101
+ return marker('input.image.uploadErrorRetry');
29102
+ }
29103
+ if (this.uploadProgress) {
29104
+ return marker('input.image.uploadProgressCancel');
29105
+ }
29106
+ return marker('input.image.dropFileLabel');
29107
+ }
29108
+ handleDragFilesOver(dragFilesOver) {
29109
+ if (!this.showUrlInput) {
29110
+ this.dragFilesOver = dragFilesOver;
29111
+ this.cd.markForCheck();
29112
+ }
29113
+ }
29114
+ handleDropFiles(files) {
29115
+ if (!this.showUrlInput) {
29116
+ const validFiles = this.filterTypeImage(files);
29117
+ if (validFiles.length > 0) {
29118
+ this.resizeAndEmit(validFiles[0]);
29119
+ }
29120
+ }
29121
+ }
29122
+ handleFileInput(event) {
29123
+ const inputFiles = Array.from(event.target.files);
29124
+ const validFiles = this.filterTypeImage(inputFiles);
29125
+ if (validFiles.length > 0) {
29126
+ this.resizeAndEmit(validFiles[0]);
29127
+ }
29128
+ }
29129
+ displayUrlInput() {
29130
+ this.uploadCancel.emit();
29131
+ this.showUrlInput = true;
29132
+ }
29133
+ async downloadUrl(url) {
29134
+ this.downloadError = false;
29135
+ const name = url.split('/').pop();
29136
+ try {
29137
+ const response = await firstValueFrom(this.http.head(url, { observe: 'response' }));
29138
+ if (response.headers.get('content-type')?.startsWith('image/') &&
29139
+ parseInt(response.headers.get('content-length')) <
29140
+ megabytesToBytes(this.maxSizeMB)) {
29141
+ this.http.get(url, { responseType: 'blob' }).subscribe({
29142
+ next: (blob) => {
29143
+ this.cd.markForCheck();
29144
+ const file = new File([blob], name);
29145
+ this.fileChange.emit(file);
29146
+ },
29147
+ error: () => {
29148
+ this.downloadError = true;
29149
+ this.cd.markForCheck();
29150
+ this.urlChange.emit(url);
29151
+ },
29152
+ });
29153
+ }
29154
+ }
29155
+ catch {
29156
+ this.downloadError = true;
29157
+ this.cd.markForCheck();
29158
+ return;
29159
+ }
29160
+ }
29161
+ handleSecondaryTextClick(event) {
29162
+ if (this.uploadError) {
29163
+ this.handleRetry();
29164
+ }
29165
+ else if (this.uploadProgress) {
29166
+ this.handleCancel();
29167
+ event.preventDefault();
29168
+ }
29169
+ }
29170
+ handleCancel() {
29171
+ this.uploadCancel.emit();
29172
+ }
29173
+ handleRetry() {
29174
+ switch (this.lastUploadType) {
29175
+ case 'file':
29176
+ this.fileChange.emit(this.lastUploadContent);
29177
+ break;
29178
+ case 'url':
29179
+ this.urlChange.emit(this.lastUploadContent);
29180
+ break;
29181
+ }
29182
+ }
29183
+ handleDelete() {
29184
+ this.delete.emit();
29185
+ }
29186
+ toggleAltTextInput() {
29187
+ this.showAltTextInput = !this.showAltTextInput;
29188
+ }
29189
+ handleAltTextChange(altText) {
29190
+ this.altTextChange.emit(altText);
29191
+ }
29192
+ filterTypeImage(files) {
29193
+ return files.filter((file) => {
29194
+ return file.type.startsWith('image/');
29195
+ });
29196
+ }
29197
+ resizeAndEmit(imageToResize) {
29198
+ const maxSizeBytes = megabytesToBytes(this.maxSizeMB);
29199
+ downgradeImage(imageToResize, maxSizeBytes).then((resizedImage) => {
29200
+ const fileToEmit = new File([resizedImage], imageToResize.name);
29201
+ this.fileChange.emit(fileToEmit);
29202
+ });
29203
+ }
29204
+ 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 }); }
29205
+ 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: [
29206
+ provideIcons({
29207
+ iconoirMediaImage,
29208
+ iconoirFramePlusIn,
29209
+ iconoirMediaImageXmark,
29210
+ iconoirBin,
29211
+ iconoirPlus,
29212
+ iconoirLink,
29213
+ }),
29214
+ provideNgIconsConfig({
29215
+ size: '1.5rem',
29216
+ }),
29217
+ ], 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 }); }
29218
+ }
29219
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageInputComponent, decorators: [{
29220
+ type: Component,
29221
+ args: [{ selector: 'gn-ui-image-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
29222
+ CommonModule,
29223
+ ButtonComponent,
29224
+ FilesDropDirective,
29225
+ MatProgressSpinnerModule,
29226
+ TranslateModule,
29227
+ UrlInputComponent,
29228
+ TextInputComponent,
29229
+ NgIconComponent,
29230
+ ImageOverlayPreviewComponent,
29231
+ ], providers: [
29232
+ provideIcons({
29233
+ iconoirMediaImage,
29234
+ iconoirFramePlusIn,
29235
+ iconoirMediaImageXmark,
29236
+ iconoirBin,
29237
+ iconoirPlus,
29238
+ iconoirLink,
29239
+ }),
29240
+ provideNgIconsConfig({
29241
+ size: '1.5rem',
29242
+ }),
29243
+ ], 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"] }]
29244
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i0.ChangeDetectorRef }], propDecorators: { maxSizeMB: [{
29245
+ type: Input
29246
+ }], previewUrl: [{
29247
+ type: Input
29248
+ }], altText: [{
29249
+ type: Input
29250
+ }], uploadProgress: [{
29251
+ type: Input
29252
+ }], uploadError: [{
29253
+ type: Input
29254
+ }], disabled: [{
29255
+ type: Input
29256
+ }], fileChange: [{
29257
+ type: Output
29258
+ }], urlChange: [{
29259
+ type: Output
29260
+ }], uploadCancel: [{
29261
+ type: Output
29262
+ }], delete: [{
29263
+ type: Output
29264
+ }], altTextChange: [{
29265
+ type: Output
29266
+ }] } });
29267
+
29127
29268
  class LinkCardComponent {
29128
29269
  constructor() {
29129
29270
  this.compact = false;
@@ -29654,22 +29795,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
29654
29795
  type: Input
29655
29796
  }] } });
29656
29797
 
29657
- class UserPreviewComponent {
29658
- get userFullName() {
29659
- return (this.user.name + ' ' + this.user.surname).trim();
29660
- }
29661
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29662
- 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 }); }
29663
- }
29664
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserPreviewComponent, decorators: [{
29665
- type: Component,
29666
- 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" }]
29667
- }], propDecorators: { user: [{
29668
- type: Input
29669
- }], avatarPlaceholder: [{
29670
- type: Input
29671
- }] } });
29672
-
29673
29798
  class TimeSincePipe {
29674
29799
  constructor(translate) {
29675
29800
  this.translate = translate;
@@ -29723,6 +29848,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
29723
29848
  }]
29724
29849
  }], ctorParameters: () => [{ type: i1$1.TranslateService }] });
29725
29850
 
29851
+ class UserPreviewComponent {
29852
+ get userFullName() {
29853
+ return (this.user.name + ' ' + this.user.surname).trim();
29854
+ }
29855
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29856
+ 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 }); }
29857
+ }
29858
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserPreviewComponent, decorators: [{
29859
+ type: Component,
29860
+ 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" }]
29861
+ }], propDecorators: { user: [{
29862
+ type: Input
29863
+ }], avatarPlaceholder: [{
29864
+ type: Input
29865
+ }] } });
29866
+
29726
29867
  class UiElementsModule {
29727
29868
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
29728
29869
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, declarations: [AvatarComponent, UserPreviewComponent], imports: [CommonModule,
@@ -29739,10 +29880,12 @@ class UiElementsModule {
29739
29880
  TimeSincePipe,
29740
29881
  BadgeComponent,
29741
29882
  MaxLinesComponent,
29742
- TextInputComponent], exports: [ThumbnailComponent,
29883
+ TextInputComponent,
29884
+ ImageInputComponent], exports: [ThumbnailComponent,
29743
29885
  AvatarComponent,
29744
29886
  UserPreviewComponent,
29745
- MarkdownParserComponent] }); }
29887
+ MarkdownParserComponent,
29888
+ ImageInputComponent] }); }
29746
29889
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, providers: [
29747
29890
  provideNgIconsConfig({
29748
29891
  size: '1.5em',
@@ -29760,7 +29903,8 @@ class UiElementsModule {
29760
29903
  ThumbnailComponent,
29761
29904
  BadgeComponent,
29762
29905
  MaxLinesComponent,
29763
- TextInputComponent] }); }
29906
+ TextInputComponent,
29907
+ ImageInputComponent] }); }
29764
29908
  }
29765
29909
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, decorators: [{
29766
29910
  type: NgModule,
@@ -29783,6 +29927,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
29783
29927
  BadgeComponent,
29784
29928
  MaxLinesComponent,
29785
29929
  TextInputComponent,
29930
+ ImageInputComponent,
29786
29931
  ],
29787
29932
  providers: [
29788
29933
  provideNgIconsConfig({
@@ -29795,6 +29940,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
29795
29940
  AvatarComponent,
29796
29941
  UserPreviewComponent,
29797
29942
  MarkdownParserComponent,
29943
+ ImageInputComponent,
29798
29944
  ],
29799
29945
  }]
29800
29946
  }] });
@@ -37588,9 +37734,7 @@ const RECORD_LICENSE_FIELD = {
37588
37734
  };
37589
37735
  const RECORD_KEYWORDS_FIELD = {
37590
37736
  model: 'keywords',
37591
- formFieldConfig: {
37592
- labelKey: marker('editor.record.form.field.keywords'),
37593
- },
37737
+ formFieldConfig: {},
37594
37738
  };
37595
37739
  const RECORD_RESOURCE_CREATED_FIELD = {
37596
37740
  model: 'resourceCreated',
@@ -37670,23 +37814,17 @@ const RECORD_SPATIAL_TOGGLE_FIELD = {
37670
37814
  };
37671
37815
  const RECORD_SPATIAL_EXTENTS_FIELD = {
37672
37816
  model: 'spatialExtents',
37673
- formFieldConfig: {
37674
- labelKey: marker('editor.record.form.field.spatialExtents'),
37675
- },
37817
+ formFieldConfig: {},
37676
37818
  };
37677
37819
  const RECORD_ONLINE_RESOURCES = {
37678
37820
  model: 'onlineResources',
37679
37821
  modelSpecifier: 'onlineResourceType:!link',
37680
- formFieldConfig: {
37681
- labelKey: marker('editor.record.form.field.onlineResources'),
37682
- },
37822
+ formFieldConfig: {},
37683
37823
  };
37684
37824
  const RECORD_ONLINE_LINK_RESOURCES = {
37685
37825
  model: 'onlineResources',
37686
37826
  modelSpecifier: 'onlineResourceType:link',
37687
- formFieldConfig: {
37688
- labelKey: marker('editor.record.form.field.onlineLinkResources'),
37689
- },
37827
+ formFieldConfig: {},
37690
37828
  };
37691
37829
  /************************************************************
37692
37830
  *************** SECTIONS *****************
@@ -37768,7 +37906,12 @@ const DEFAULT_CONFIGURATION = {
37768
37906
  pages: [
37769
37907
  {
37770
37908
  labelKey: marker('editor.record.form.page.description'),
37771
- sections: [TITLE_SECTION, ABOUT_SECTION, GEOGRAPHICAL_COVERAGE_SECTION],
37909
+ sections: [
37910
+ TITLE_SECTION,
37911
+ ABOUT_SECTION,
37912
+ CLASSIFICATION_SECTION,
37913
+ GEOGRAPHICAL_COVERAGE_SECTION,
37914
+ ],
37772
37915
  },
37773
37916
  {
37774
37917
  labelKey: marker('editor.record.form.page.ressources'),
@@ -37777,7 +37920,6 @@ const DEFAULT_CONFIGURATION = {
37777
37920
  {
37778
37921
  labelKey: marker('editor.record.form.page.accessAndContact'),
37779
37922
  sections: [
37780
- CLASSIFICATION_SECTION,
37781
37923
  USE_AND_ACCESS_CONDITIONS_SECTION,
37782
37924
  DATA_MANAGERS_SECTION,
37783
37925
  METADATA_POINT_OF_CONTACT_SECTION,
@@ -38567,7 +38709,7 @@ class ImportRecordComponent {
38567
38709
  provideNgIconsConfig({
38568
38710
  size: '1.5em',
38569
38711
  }),
38570
- ], 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 }); }
38712
+ ], 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 }); }
38571
38713
  }
38572
38714
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImportRecordComponent, decorators: [{
38573
38715
  type: Component,
@@ -38633,7 +38775,7 @@ class GenericKeywordsComponent {
38633
38775
  provideIcons({
38634
38776
  matWarningAmberOutline,
38635
38777
  }),
38636
- ], 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 }); }
38778
+ ], 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 }); }
38637
38779
  }
38638
38780
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GenericKeywordsComponent, decorators: [{
38639
38781
  type: Component,
@@ -38649,7 +38791,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
38649
38791
  provideIcons({
38650
38792
  matWarningAmberOutline,
38651
38793
  }),
38652
- ], 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"] }]
38794
+ ], 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"] }]
38653
38795
  }], ctorParameters: () => [{ type: PlatformServiceInterface }], propDecorators: { keywords: [{
38654
38796
  type: Input
38655
38797
  }], keywordTypes: [{
@@ -39104,7 +39246,7 @@ class FormFieldSpatialExtentComponent {
39104
39246
  this.editorFacade.updateRecordField('spatialExtents', spatialExtents);
39105
39247
  }
39106
39248
  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 }); }
39107
- 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 }); }
39249
+ 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 }); }
39108
39250
  }
39109
39251
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldSpatialExtentComponent, decorators: [{
39110
39252
  type: Component,
@@ -39112,82 +39254,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39112
39254
  CommonModule,
39113
39255
  GenericKeywordsComponent,
39114
39256
  FormFieldMapContainerComponent,
39115
- ], 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" }]
39257
+ ], 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" }]
39116
39258
  }], ctorParameters: () => [{ type: PlatformServiceInterface }, { type: EditorFacade }, { type: i1$1.TranslateService }] });
39117
39259
 
39118
- const RoleValues = [
39119
- 'unspecified',
39120
- 'other',
39121
- 'author', // Party who authored the resource
39122
- 'collaborator', // party who assists with the generation of the resource other than the principal investigator
39123
- 'contributor', // party contributing to the resource
39124
- 'custodian', // Party that accepts accountability and responsibility for the data and ensures appropriate care and maintenance of the resource
39125
- 'distributor', // Party who distributes the resource
39126
- 'editor', // party who reviewed or modified the resource to improve the content
39127
- 'funder', // party providing monetary support for the resource
39128
- 'mediator', // a class of entity that mediates access to the resource and for whom the resource is intended or useful
39129
- 'originator', // Party who created the resource
39130
- 'owner', // Party that owns the resource
39131
- 'point_of_contact', // Party who can be contacted for acquiring knowledge about or acquisition of the resource
39132
- 'principal_investigator', // Key party responsible for gathering information and conducting research
39133
- 'processor', // Party who has processed the data in a manner such that the resource has been modified
39134
- 'publisher', // Party who published the resource
39135
- 'resource_provider', // Party that supplies the resource
39136
- 'rights_holder', // party owning or managing rights over the resource
39137
- 'sponsor', // party that sponsors the resource
39138
- 'stakeholder', // party who has an interest in the resource or the use of the resource
39139
- 'user', // Party who uses the resource
39140
- ];
39141
- const RoleLabels = new Map([
39142
- ['unspecified', marker('domain.contact.role.unspecified')],
39143
- ['other', marker('domain.contact.role.other')],
39144
- ['author', marker('domain.contact.role.author')],
39145
- ['collaborator', marker('domain.contact.role.collaborator')],
39146
- ['contributor', marker('domain.contact.role.contributor')],
39147
- ['custodian', marker('domain.contact.role.custodian')],
39148
- ['distributor', marker('domain.contact.role.distributor')],
39149
- ['editor', marker('domain.contact.role.editor')],
39150
- ['funder', marker('domain.contact.role.funder')],
39151
- ['mediator', marker('domain.contact.role.mediator')],
39152
- ['originator', marker('domain.contact.role.originator')],
39153
- ['owner', marker('domain.contact.role.owner')],
39154
- ['point_of_contact', marker('domain.contact.role.point_of_contact')],
39155
- [
39156
- 'principal_investigator',
39157
- marker('domain.contact.role.principal_investigator'),
39158
- ],
39159
- ['processor', marker('domain.contact.role.processor')],
39160
- ['publisher', marker('domain.contact.role.publisher')],
39161
- ['resource_provider', marker('domain.contact.role.resource_provider')],
39162
- ['rights_holder', marker('domain.contact.role.rights_holder')],
39163
- ['sponsor', marker('domain.contact.role.sponsor')],
39164
- ['stakeholder', marker('domain.contact.role.stakeholder')],
39165
- ['user', marker('domain.contact.role.user')],
39166
- ]);
39167
-
39168
- marker('domain.record.updateFrequency.unknown');
39169
- marker('domain.record.updateFrequency.notPlanned');
39170
- marker('domain.record.updateFrequency.asNeeded');
39171
- marker('domain.record.updateFrequency.irregular');
39172
- marker('domain.record.updateFrequency.continual');
39173
- marker('domain.record.updateFrequency.periodic');
39174
- marker('domain.record.updateFrequency.day');
39175
- marker('domain.record.updateFrequency.week');
39176
- marker('domain.record.updateFrequency.month');
39177
- marker('domain.record.updateFrequency.year');
39178
- marker('domain.record.status.completed');
39179
- marker('domain.record.status.ongoing');
39180
- marker('domain.record.status.under_development');
39181
- marker('domain.record.status.deprecated');
39182
- marker('domain.record.status.removed');
39183
- const RecordStatusValues = [
39184
- 'completed',
39185
- 'ongoing',
39186
- 'under_development',
39187
- 'deprecated',
39188
- 'removed',
39189
- ];
39190
-
39191
39260
  class ContactCardComponent {
39192
39261
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContactCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39193
39262
  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 }); }
@@ -39614,7 +39683,7 @@ class FormFieldOnlineLinkResourcesComponent {
39614
39683
  });
39615
39684
  }
39616
39685
  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 }); }
39617
- 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 }); }
39686
+ 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 [showValidateButton]=\"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", "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 }); }
39618
39687
  }
39619
39688
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineLinkResourcesComponent, decorators: [{
39620
39689
  type: Component,
@@ -39627,7 +39696,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39627
39696
  TextAreaComponent,
39628
39697
  UrlInputComponent,
39629
39698
  TranslateModule,
39630
- ], 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" }]
39699
+ ], 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 [showValidateButton]=\"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" }]
39631
39700
  }], ctorParameters: () => [{ type: NotificationsService }, { type: i1$1.TranslateService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: i1$b.MatDialog }, { type: EditorFacade }], propDecorators: { metadataUuid: [{
39632
39701
  type: Input
39633
39702
  }], value: [{
@@ -39642,6 +39711,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39642
39711
  class OnlineServiceResourceInputComponent {
39643
39712
  constructor() {
39644
39713
  this.disabled = false;
39714
+ this.urlChange = new EventEmitter();
39715
+ this.identifierSubmit = new EventEmitter();
39645
39716
  this.protocolOptions = [
39646
39717
  {
39647
39718
  label: 'OGC API',
@@ -39677,25 +39748,57 @@ class OnlineServiceResourceInputComponent {
39677
39748
  this.selectedProtocol =
39678
39749
  this.protocolOptions.find((option) => option.value === this.service.accessServiceProtocol)?.value ?? 'other';
39679
39750
  }
39751
+ handleUrlChange(url) {
39752
+ this.url = url;
39753
+ }
39754
+ submitIdentifier(identifier) {
39755
+ if (!identifier)
39756
+ return;
39757
+ this.identifierSubmit.emit({ url: this.url, identifier });
39758
+ this.service.identifierInService = null;
39759
+ }
39760
+ getIdentifierPlaceholder() {
39761
+ const baseKey = 'editor.record.form.field.onlineResource.edit.identifier.placeholder';
39762
+ return this.service.accessServiceProtocol === 'wps'
39763
+ ? `${baseKey}.wps`
39764
+ : baseKey;
39765
+ }
39680
39766
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OnlineServiceResourceInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39681
- 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 }); }
39767
+ 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: [
39768
+ provideIcons({ iconoirCloudUpload }),
39769
+ provideNgIconsConfig({
39770
+ size: '1.5em',
39771
+ }),
39772
+ ], 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 }); }
39682
39773
  }
39683
39774
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OnlineServiceResourceInputComponent, decorators: [{
39684
39775
  type: Component,
39685
39776
  args: [{ selector: 'gn-ui-online-service-resource-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
39777
+ ButtonComponent,
39686
39778
  CommonModule,
39779
+ FormsModule,
39687
39780
  MatTooltipModule,
39688
39781
  MatRadioModule,
39689
- FormsModule,
39782
+ NgIconComponent,
39690
39783
  TextInputComponent,
39691
39784
  TranslateModule,
39692
- ], 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" }]
39785
+ UrlInputComponent,
39786
+ ], providers: [
39787
+ provideIcons({ iconoirCloudUpload }),
39788
+ provideNgIconsConfig({
39789
+ size: '1.5em',
39790
+ }),
39791
+ ], 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" }]
39693
39792
  }], propDecorators: { service: [{
39694
39793
  type: Input
39695
39794
  }], protocolHint: [{
39696
39795
  type: Input
39697
39796
  }], disabled: [{
39698
39797
  type: Input
39798
+ }], urlChange: [{
39799
+ type: Output
39800
+ }], identifierSubmit: [{
39801
+ type: Output
39699
39802
  }] } });
39700
39803
 
39701
39804
  class FormFieldOnlineResourcesComponent {
@@ -39793,6 +39896,15 @@ class FormFieldOnlineResourcesComponent {
39793
39896
  },
39794
39897
  ]);
39795
39898
  }
39899
+ handleIdentifierSubmit(payload) {
39900
+ this.valueChange.emit([
39901
+ ...this.allResources,
39902
+ {
39903
+ ...this.newService,
39904
+ url: new URL(payload.url),
39905
+ },
39906
+ ]);
39907
+ }
39796
39908
  handleServiceModify(oldService, newService) {
39797
39909
  oldService.accessServiceProtocol = newService.accessServiceProtocol;
39798
39910
  oldService.identifierInService = newService.identifierInService;
@@ -39846,7 +39958,7 @@ class FormFieldOnlineResourcesComponent {
39846
39958
  });
39847
39959
  }
39848
39960
  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 }); }
39849
- 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 }); }
39961
+ 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 (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 [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 [showValidateButton]=\"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"], 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 }); }
39850
39962
  }
39851
39963
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineResourcesComponent, decorators: [{
39852
39964
  type: Component,
@@ -39861,7 +39973,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39861
39973
  TextInputComponent,
39862
39974
  TextAreaComponent,
39863
39975
  TranslateModule,
39864
- ], 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" }]
39976
+ ], 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 (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 [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 [showValidateButton]=\"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" }]
39865
39977
  }], ctorParameters: () => [{ type: NotificationsService }, { type: i1$1.TranslateService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: i1$b.MatDialog }, { type: EditorFacade }], propDecorators: { metadataUuid: [{
39866
39978
  type: Input
39867
39979
  }], value: [{
@@ -40006,9 +40118,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40006
40118
  type: Output
40007
40119
  }] } });
40008
40120
 
40121
+ const initialListValues = updateFrequencyCodeValues.filter((code) => !['unknown', 'notPlanned', 'asNeeded', 'irregular'].includes(code));
40009
40122
  class FormFieldUpdateFrequencyComponent {
40010
40123
  get planned() {
40011
- return typeof this.value !== 'string';
40124
+ return this.value && this.value !== 'notPlanned' && this.value !== 'unknown';
40012
40125
  }
40013
40126
  constructor(translateService) {
40014
40127
  this.translateService = translateService;
@@ -40017,13 +40130,26 @@ class FormFieldUpdateFrequencyComponent {
40017
40130
  }
40018
40131
  async ngOnInit() {
40019
40132
  this.choices = await this.getInitialChoices();
40133
+ if (!this.planned) {
40134
+ return;
40135
+ }
40136
+ if (typeof this.value === 'string' &&
40137
+ !this.choices.map((choice) => choice.value).includes(this.value)) {
40138
+ this.choices = [
40139
+ {
40140
+ value: this.value,
40141
+ label: await firstValueFrom(this.translateService.get(`domain.record.updateFrequency.${this.value}`)),
40142
+ },
40143
+ ...this.choices,
40144
+ ];
40145
+ }
40020
40146
  if (typeof this.value === 'string') {
40021
40147
  return;
40022
40148
  }
40023
40149
  const updatedTimes = this.value.updatedTimes;
40024
40150
  const per = this.value.per;
40025
40151
  // the update frequency is not in the list; make it appear there
40026
- if (updatedTimes && updatedTimes !== 1 && updatedTimes !== 2) {
40152
+ if (updatedTimes) {
40027
40153
  this.choices = [
40028
40154
  {
40029
40155
  value: `${per}.${updatedTimes}`,
@@ -40040,73 +40166,34 @@ class FormFieldUpdateFrequencyComponent {
40040
40166
  this.valueChange.emit('notPlanned');
40041
40167
  }
40042
40168
  else {
40043
- this.valueChange.emit({ updatedTimes: 1, per: 'day' });
40169
+ this.valueChange.emit(this.choices[0].value);
40044
40170
  }
40045
40171
  }
40046
40172
  get selectedFrequency() {
40047
- if (!this.value || typeof this.value === 'string')
40173
+ if (!this.value)
40048
40174
  return null;
40175
+ if (typeof this.value === 'string')
40176
+ return this.value;
40049
40177
  const { updatedTimes, per } = this.value;
40050
40178
  return `${per}.${updatedTimes}`;
40051
40179
  }
40052
40180
  onSelectFrequencyValue(value) {
40053
- const split = value.split('.');
40054
- this.valueChange.emit({
40055
- updatedTimes: Number(split[1]),
40056
- per: split[0],
40057
- });
40181
+ if (!value.includes('.')) {
40182
+ this.valueChange.emit(value);
40183
+ }
40184
+ else {
40185
+ const split = value.split('.');
40186
+ this.valueChange.emit({
40187
+ updatedTimes: Number(split[1]),
40188
+ per: split[0],
40189
+ });
40190
+ }
40058
40191
  }
40059
40192
  async getInitialChoices() {
40060
- return [
40061
- {
40062
- value: 'day.1',
40063
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.day', {
40064
- count: 1,
40065
- })),
40066
- },
40067
- {
40068
- value: 'day.2',
40069
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.day', {
40070
- count: 2,
40071
- })),
40072
- },
40073
- {
40074
- value: 'week.1',
40075
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.week', {
40076
- count: 1,
40077
- })),
40078
- },
40079
- {
40080
- value: 'week.2',
40081
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.week', {
40082
- count: 2,
40083
- })),
40084
- },
40085
- {
40086
- value: 'month.1',
40087
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.month', {
40088
- count: 1,
40089
- })),
40090
- },
40091
- {
40092
- value: 'month.2',
40093
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.month', {
40094
- count: 2,
40095
- })),
40096
- },
40097
- {
40098
- value: 'year.1',
40099
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.year', {
40100
- count: 1,
40101
- })),
40102
- },
40103
- {
40104
- value: 'year.2',
40105
- label: await firstValueFrom(this.translateService.get('domain.record.updateFrequency.year', {
40106
- count: 2,
40107
- })),
40108
- },
40109
- ];
40193
+ return Promise.all(initialListValues.map(async (value) => ({
40194
+ value,
40195
+ label: await firstValueFrom(this.translateService.get(`domain.record.updateFrequency.${value}`)),
40196
+ })));
40110
40197
  }
40111
40198
  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 }); }
40112
40199
  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 }); }
@@ -40299,7 +40386,7 @@ class ConstraintCardComponent {
40299
40386
  provideNgIconsConfig({
40300
40387
  size: '1.5rem',
40301
40388
  }),
40302
- ], 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 }); }
40389
+ ], 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 }); }
40303
40390
  }
40304
40391
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConstraintCardComponent, decorators: [{
40305
40392
  type: Component,
@@ -40317,7 +40404,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40317
40404
  provideNgIconsConfig({
40318
40405
  size: '1.5rem',
40319
40406
  }),
40320
- ], 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"] }]
40407
+ ], 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"] }]
40321
40408
  }], propDecorators: { label: [{
40322
40409
  type: Input
40323
40410
  }], constraint: [{
@@ -40472,7 +40559,7 @@ class FormFieldComponent {
40472
40559
  return this.value;
40473
40560
  }
40474
40561
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
40475
- 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 [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$1.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40562
+ 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 }); }
40476
40563
  }
40477
40564
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldComponent, decorators: [{
40478
40565
  type: Component,
@@ -40503,7 +40590,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40503
40590
  FormFieldConstraintsShortcutsComponent,
40504
40591
  FormFieldSpatialToggleComponent,
40505
40592
  TextFieldModule,
40506
- ], 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 [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" }]
40593
+ ], 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" }]
40507
40594
  }], propDecorators: { uniqueIdentifier: [{
40508
40595
  type: Input
40509
40596
  }], model: [{
@@ -40541,11 +40628,11 @@ class RecordFormComponent {
40541
40628
  return section.labelKey;
40542
40629
  }
40543
40630
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorFacade }], target: i0.ɵɵFactoryTarget.Component }); }
40544
- 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 }); }
40631
+ 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 }); }
40545
40632
  }
40546
40633
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecordFormComponent, decorators: [{
40547
40634
  type: Component,
40548
- 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" }]
40635
+ 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" }]
40549
40636
  }], ctorParameters: () => [{ type: EditorFacade }] });
40550
40637
 
40551
40638
  const ROUTER_STATE_KEY = 'router';
@@ -40933,7 +41020,7 @@ class DefaultRouterModule {
40933
41020
  };
40934
41021
  }
40935
41022
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultRouterModule, deps: [{ token: RouterService }], target: i0.ɵɵFactoryTarget.NgModule }); }
40936
- 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] }); }
41023
+ 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] }); }
40937
41024
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultRouterModule, providers: [
40938
41025
  RouterFacade,
40939
41026
  {
@@ -40976,5 +41063,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40976
41063
  * Generated bundle index. Do not edit.
40977
41064
  */
40978
41065
 
40979
- 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 };
41066
+ 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, 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 };
40980
41067
  //# sourceMappingURL=geonetwork-ui.mjs.map